[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pdf-devel
Subject:    [pdf-devel] CCITT Fax Filter Group 3 1D
From:       Gustavo Martin Domato <gm.domato () gmail ! com>
Date:       2011-10-03 17:49:49
Message-ID: 1317664189.21598.8.camel () Genia
[Download RAW message or body]

Hi,

this is the patch with Group 3 1D encoding/decoding. Notice that I
touched the pdf-filter.c file in order to test it with the AUTHORS file.
Basically, I hardcoded the arguments. You can do the same testing with:

	./utils/pdf-filter -i AUTHORS -o AUTHORS.enc --cfaxenc

and then

	./utils/pdf-filter -i AUTHORS.enc -o AUTHORS.dec --cfaxdec

and last

	diff AUTHORS AUTHORS.dec


Some clear ups:

I didn't want to mess with program arguments, that's why I hardcoded
them. If you want to do other testing, you must either make pdf-filter
parse the arguments or hardcode it and recompile. Sorry in advance for
that.

Since it's a preliminary version, intended to be corrected by those who
read it, I didn't include licensing headers of many comments. Hope
that's not a problem.


Regards,
Gustavo.

["fax.patch" (fax.patch)]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: gm.domato@gmail.com-20111003173918-g57qyh6cl38nezaw
# target_branch: bzr://bzr.savannah.gnu.org/pdf/libgnupdf/trunk/
# testament_sha1: 126691aba44ff19f6c9caeb0854f09359836e106
# timestamp: 2011-10-03 14:40:34 -0300
# base_revision_id: gm.domato@gmail.com-20111001183039-\
#   duyiyvlr8dgu3yy7
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog	2011-09-18 08:11:07 +0000
+++ ChangeLog	2011-10-03 17:39:18 +0000
@@ -1,3 +1,23 @@
+2011-10-03  Gustavo M. Domato <gm.domato@gmail.com>
+
+	src/base: added CCITT Fax Decoder/Encoder. Initial version.
+	* src/base/pdf-stm-f-fax.h: created
+	* src/base/pdf-stm-f-fax.c: created
+	* src/base/pdf-stm-f-fax-base.h: created
+	* src/base/pdf-stm-f-fax-base.c: created
+	* src/base/pdf-stm-f-fax-decoder.h: created
+	* src/base/pdf-stm-f-fax-decoder.c: created
+	* src/base/pdf-stm-f-fax-decoder1d.h: created
+	* src/base/pdf-stm-f-fax-decoder1d.c: created
+	* src/base/pdf-stm-f-fax-decoder2d.h: created
+	* src/base/pdf-stm-f-fax-decoder2d.c: created
+	* src/base/pdf-stm-f-fax-encoder.h: created
+	* src/base/pdf-stm-f-fax-encoder.c: created
+
+	lib: added necessary tables from TIFF
+	* lib/tiff-fax.h: created
+	* lib.tiff-fax.c: created
+
 2011-09-18  Jose E. Marchesi  <jemarch@gnu.org>
 
 	utils: fix for some segfaults in pdf-tokeniser.

=== modified file 'lib/Makefile.am'
--- lib/Makefile.am	2011-07-01 19:49:56 +0000
+++ lib/Makefile.am	2011-10-03 17:39:18 +0000
@@ -1553,6 +1553,12 @@
 
 ## end   gnulib module threadlib
 
+## begin gnulib module tiff-fax
+
+libgnu_la_SOURCES += tiff-fax.h tiff-fax.c
+
+## end gnulib module tiff-fax
+
 ## begin gnulib module time
 
 BUILT_SOURCES += time.h

=== added file 'lib/tiff-fax.c'
--- lib/tiff-fax.c	1970-01-01 00:00:00 +0000
+++ lib/tiff-fax.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,1485 @@
+#include <tiff-fax.h>
+
+/*
+ * Note that these tables are ordered such that the
+ * index into the table is known to be either the
+ * run length, or (run length / 64) + a fixed offset.
+ *
+ * NB: The G3CODE_INVALID entries are only used
+ *     during state generation (see mkg3states.c).
+ */
+const tableentry TIFFFaxWhiteCodes[] = {
+    { 8, 0x35, 0 },	/* 0011 0101 */
+    { 6, 0x7, 1 },	/* 0001 11 */
+    { 4, 0x7, 2 },	/* 0111 */
+    { 4, 0x8, 3 },	/* 1000 */
+    { 4, 0xB, 4 },	/* 1011 */
+    { 4, 0xC, 5 },	/* 1100 */
+    { 4, 0xE, 6 },	/* 1110 */
+    { 4, 0xF, 7 },	/* 1111 */
+    { 5, 0x13, 8 },	/* 1001 1 */
+    { 5, 0x14, 9 },	/* 1010 0 */
+    { 5, 0x7, 10 },	/* 0011 1 */
+    { 5, 0x8, 11 },	/* 0100 0 */
+    { 6, 0x8, 12 },	/* 0010 00 */
+    { 6, 0x3, 13 },	/* 0000 11 */
+    { 6, 0x34, 14 },	/* 1101 00 */
+    { 6, 0x35, 15 },	/* 1101 01 */
+    { 6, 0x2A, 16 },	/* 1010 10 */
+    { 6, 0x2B, 17 },	/* 1010 11 */
+    { 7, 0x27, 18 },	/* 0100 111 */
+    { 7, 0xC, 19 },	/* 0001 100 */
+    { 7, 0x8, 20 },	/* 0001 000 */
+    { 7, 0x17, 21 },	/* 0010 111 */
+    { 7, 0x3, 22 },	/* 0000 011 */
+    { 7, 0x4, 23 },	/* 0000 100 */
+    { 7, 0x28, 24 },	/* 0101 000 */
+    { 7, 0x2B, 25 },	/* 0101 011 */
+    { 7, 0x13, 26 },	/* 0010 011 */
+    { 7, 0x24, 27 },	/* 0100 100 */
+    { 7, 0x18, 28 },	/* 0011 000 */
+    { 8, 0x2, 29 },	/* 0000 0010 */
+    { 8, 0x3, 30 },	/* 0000 0011 */
+    { 8, 0x1A, 31 },	/* 0001 1010 */
+    { 8, 0x1B, 32 },	/* 0001 1011 */
+    { 8, 0x12, 33 },	/* 0001 0010 */
+    { 8, 0x13, 34 },	/* 0001 0011 */
+    { 8, 0x14, 35 },	/* 0001 0100 */
+    { 8, 0x15, 36 },	/* 0001 0101 */
+    { 8, 0x16, 37 },	/* 0001 0110 */
+    { 8, 0x17, 38 },	/* 0001 0111 */
+    { 8, 0x28, 39 },	/* 0010 1000 */
+    { 8, 0x29, 40 },	/* 0010 1001 */
+    { 8, 0x2A, 41 },	/* 0010 1010 */
+    { 8, 0x2B, 42 },	/* 0010 1011 */
+    { 8, 0x2C, 43 },	/* 0010 1100 */
+    { 8, 0x2D, 44 },	/* 0010 1101 */
+    { 8, 0x4, 45 },	/* 0000 0100 */
+    { 8, 0x5, 46 },	/* 0000 0101 */
+    { 8, 0xA, 47 },	/* 0000 1010 */
+    { 8, 0xB, 48 },	/* 0000 1011 */
+    { 8, 0x52, 49 },	/* 0101 0010 */
+    { 8, 0x53, 50 },	/* 0101 0011 */
+    { 8, 0x54, 51 },	/* 0101 0100 */
+    { 8, 0x55, 52 },	/* 0101 0101 */
+    { 8, 0x24, 53 },	/* 0010 0100 */
+    { 8, 0x25, 54 },	/* 0010 0101 */
+    { 8, 0x58, 55 },	/* 0101 1000 */
+    { 8, 0x59, 56 },	/* 0101 1001 */
+    { 8, 0x5A, 57 },	/* 0101 1010 */
+    { 8, 0x5B, 58 },	/* 0101 1011 */
+    { 8, 0x4A, 59 },	/* 0100 1010 */
+    { 8, 0x4B, 60 },	/* 0100 1011 */
+    { 8, 0x32, 61 },	/* 0011 0010 */
+    { 8, 0x33, 62 },	/* 0011 0011 */
+    { 8, 0x34, 63 },	/* 0011 0100 */
+    { 5, 0x1B, 64 },	/* 1101 1 */
+    { 5, 0x12, 128 },	/* 1001 0 */
+    { 6, 0x17, 192 },	/* 0101 11 */
+    { 7, 0x37, 256 },	/* 0110 111 */
+    { 8, 0x36, 320 },	/* 0011 0110 */
+    { 8, 0x37, 384 },	/* 0011 0111 */
+    { 8, 0x64, 448 },	/* 0110 0100 */
+    { 8, 0x65, 512 },	/* 0110 0101 */
+    { 8, 0x68, 576 },	/* 0110 1000 */
+    { 8, 0x67, 640 },	/* 0110 0111 */
+    { 9, 0xCC, 704 },	/* 0110 0110 0 */
+    { 9, 0xCD, 768 },	/* 0110 0110 1 */
+    { 9, 0xD2, 832 },	/* 0110 1001 0 */
+    { 9, 0xD3, 896 },	/* 0110 1001 1 */
+    { 9, 0xD4, 960 },	/* 0110 1010 0 */
+    { 9, 0xD5, 1024 },	/* 0110 1010 1 */
+    { 9, 0xD6, 1088 },	/* 0110 1011 0 */
+    { 9, 0xD7, 1152 },	/* 0110 1011 1 */
+    { 9, 0xD8, 1216 },	/* 0110 1100 0 */
+    { 9, 0xD9, 1280 },	/* 0110 1100 1 */
+    { 9, 0xDA, 1344 },	/* 0110 1101 0 */
+    { 9, 0xDB, 1408 },	/* 0110 1101 1 */
+    { 9, 0x98, 1472 },	/* 0100 1100 0 */
+    { 9, 0x99, 1536 },	/* 0100 1100 1 */
+    { 9, 0x9A, 1600 },	/* 0100 1101 0 */
+    { 6, 0x18, 1664 },	/* 0110 00 */
+    { 9, 0x9B, 1728 },	/* 0100 1101 1 */
+    { 11, 0x8, 1792 },	/* 0000 0001 000 */
+    { 11, 0xC, 1856 },	/* 0000 0001 100 */
+    { 11, 0xD, 1920 },	/* 0000 0001 101 */
+    { 12, 0x12, 1984 },	/* 0000 0001 0010 */
+    { 12, 0x13, 2048 },	/* 0000 0001 0011 */
+    { 12, 0x14, 2112 },	/* 0000 0001 0100 */
+    { 12, 0x15, 2176 },	/* 0000 0001 0101 */
+    { 12, 0x16, 2240 },	/* 0000 0001 0110 */
+    { 12, 0x17, 2304 },	/* 0000 0001 0111 */
+    { 12, 0x1C, 2368 },	/* 0000 0001 1100 */
+    { 12, 0x1D, 2432 },	/* 0000 0001 1101 */
+    { 12, 0x1E, 2496 },	/* 0000 0001 1110 */
+    { 12, 0x1F, 2560 },	/* 0000 0001 1111 */
+    { 12, 0x1, G3CODE_EOL },	/* 0000 0000 0001 */
+    { 9, 0x1, G3CODE_INVALID },	/* 0000 0000 1 */
+    { 10, 0x1, G3CODE_INVALID },	/* 0000 0000 01 */
+    { 11, 0x1, G3CODE_INVALID },	/* 0000 0000 001 */
+    { 12, 0x0, G3CODE_INVALID },	/* 0000 0000 0000 */
+};
+
+const tableentry TIFFFaxBlackCodes[] = {
+    { 10, 0x37, 0 },	/* 0000 1101 11 */
+    { 3, 0x2, 1 },	/* 010 */
+    { 2, 0x3, 2 },	/* 11 */
+    { 2, 0x2, 3 },	/* 10 */
+    { 3, 0x3, 4 },	/* 011 */
+    { 4, 0x3, 5 },	/* 0011 */
+    { 4, 0x2, 6 },	/* 0010 */
+    { 5, 0x3, 7 },	/* 0001 1 */
+    { 6, 0x5, 8 },	/* 0001 01 */
+    { 6, 0x4, 9 },	/* 0001 00 */
+    { 7, 0x4, 10 },	/* 0000 100 */
+    { 7, 0x5, 11 },	/* 0000 101 */
+    { 7, 0x7, 12 },	/* 0000 111 */
+    { 8, 0x4, 13 },	/* 0000 0100 */
+    { 8, 0x7, 14 },	/* 0000 0111 */
+    { 9, 0x18, 15 },	/* 0000 1100 0 */
+    { 10, 0x17, 16 },	/* 0000 0101 11 */
+    { 10, 0x18, 17 },	/* 0000 0110 00 */
+    { 10, 0x8, 18 },	/* 0000 0010 00 */
+    { 11, 0x67, 19 },	/* 0000 1100 111 */
+    { 11, 0x68, 20 },	/* 0000 1101 000 */
+    { 11, 0x6C, 21 },	/* 0000 1101 100 */
+    { 11, 0x37, 22 },	/* 0000 0110 111 */
+    { 11, 0x28, 23 },	/* 0000 0101 000 */
+    { 11, 0x17, 24 },	/* 0000 0010 111 */
+    { 11, 0x18, 25 },	/* 0000 0011 000 */
+    { 12, 0xCA, 26 },	/* 0000 1100 1010 */
+    { 12, 0xCB, 27 },	/* 0000 1100 1011 */
+    { 12, 0xCC, 28 },	/* 0000 1100 1100 */
+    { 12, 0xCD, 29 },	/* 0000 1100 1101 */
+    { 12, 0x68, 30 },	/* 0000 0110 1000 */
+    { 12, 0x69, 31 },	/* 0000 0110 1001 */
+    { 12, 0x6A, 32 },	/* 0000 0110 1010 */
+    { 12, 0x6B, 33 },	/* 0000 0110 1011 */
+    { 12, 0xD2, 34 },	/* 0000 1101 0010 */
+    { 12, 0xD3, 35 },	/* 0000 1101 0011 */
+    { 12, 0xD4, 36 },	/* 0000 1101 0100 */
+    { 12, 0xD5, 37 },	/* 0000 1101 0101 */
+    { 12, 0xD6, 38 },	/* 0000 1101 0110 */
+    { 12, 0xD7, 39 },	/* 0000 1101 0111 */
+    { 12, 0x6C, 40 },	/* 0000 0110 1100 */
+    { 12, 0x6D, 41 },	/* 0000 0110 1101 */
+    { 12, 0xDA, 42 },	/* 0000 1101 1010 */
+    { 12, 0xDB, 43 },	/* 0000 1101 1011 */
+    { 12, 0x54, 44 },	/* 0000 0101 0100 */
+    { 12, 0x55, 45 },	/* 0000 0101 0101 */
+    { 12, 0x56, 46 },	/* 0000 0101 0110 */
+    { 12, 0x57, 47 },	/* 0000 0101 0111 */
+    { 12, 0x64, 48 },	/* 0000 0110 0100 */
+    { 12, 0x65, 49 },	/* 0000 0110 0101 */
+    { 12, 0x52, 50 },	/* 0000 0101 0010 */
+    { 12, 0x53, 51 },	/* 0000 0101 0011 */
+    { 12, 0x24, 52 },	/* 0000 0010 0100 */
+    { 12, 0x37, 53 },	/* 0000 0011 0111 */
+    { 12, 0x38, 54 },	/* 0000 0011 1000 */
+    { 12, 0x27, 55 },	/* 0000 0010 0111 */
+    { 12, 0x28, 56 },	/* 0000 0010 1000 */
+    { 12, 0x58, 57 },	/* 0000 0101 1000 */
+    { 12, 0x59, 58 },	/* 0000 0101 1001 */
+    { 12, 0x2B, 59 },	/* 0000 0010 1011 */
+    { 12, 0x2C, 60 },	/* 0000 0010 1100 */
+    { 12, 0x5A, 61 },	/* 0000 0101 1010 */
+    { 12, 0x66, 62 },	/* 0000 0110 0110 */
+    { 12, 0x67, 63 },	/* 0000 0110 0111 */
+    { 10, 0xF, 64 },	/* 0000 0011 11 */
+    { 12, 0xC8, 128 },	/* 0000 1100 1000 */
+    { 12, 0xC9, 192 },	/* 0000 1100 1001 */
+    { 12, 0x5B, 256 },	/* 0000 0101 1011 */
+    { 12, 0x33, 320 },	/* 0000 0011 0011 */
+    { 12, 0x34, 384 },	/* 0000 0011 0100 */
+    { 12, 0x35, 448 },	/* 0000 0011 0101 */
+    { 13, 0x6C, 512 },	/* 0000 0011 0110 0 */
+    { 13, 0x6D, 576 },	/* 0000 0011 0110 1 */
+    { 13, 0x4A, 640 },	/* 0000 0010 0101 0 */
+    { 13, 0x4B, 704 },	/* 0000 0010 0101 1 */
+    { 13, 0x4C, 768 },	/* 0000 0010 0110 0 */
+    { 13, 0x4D, 832 },	/* 0000 0010 0110 1 */
+    { 13, 0x72, 896 },	/* 0000 0011 1001 0 */
+    { 13, 0x73, 960 },	/* 0000 0011 1001 1 */
+    { 13, 0x74, 1024 },	/* 0000 0011 1010 0 */
+    { 13, 0x75, 1088 },	/* 0000 0011 1010 1 */
+    { 13, 0x76, 1152 },	/* 0000 0011 1011 0 */
+    { 13, 0x77, 1216 },	/* 0000 0011 1011 1 */
+    { 13, 0x52, 1280 },	/* 0000 0010 1001 0 */
+    { 13, 0x53, 1344 },	/* 0000 0010 1001 1 */
+    { 13, 0x54, 1408 },	/* 0000 0010 1010 0 */
+    { 13, 0x55, 1472 },	/* 0000 0010 1010 1 */
+    { 13, 0x5A, 1536 },	/* 0000 0010 1101 0 */
+    { 13, 0x5B, 1600 },	/* 0000 0010 1101 1 */
+    { 13, 0x64, 1664 },	/* 0000 0011 0010 0 */
+    { 13, 0x65, 1728 },	/* 0000 0011 0010 1 */
+    { 11, 0x8, 1792 },	/* 0000 0001 000 */
+    { 11, 0xC, 1856 },	/* 0000 0001 100 */
+    { 11, 0xD, 1920 },	/* 0000 0001 101 */
+    { 12, 0x12, 1984 },	/* 0000 0001 0010 */
+    { 12, 0x13, 2048 },	/* 0000 0001 0011 */
+    { 12, 0x14, 2112 },	/* 0000 0001 0100 */
+    { 12, 0x15, 2176 },	/* 0000 0001 0101 */
+    { 12, 0x16, 2240 },	/* 0000 0001 0110 */
+    { 12, 0x17, 2304 },	/* 0000 0001 0111 */
+    { 12, 0x1C, 2368 },	/* 0000 0001 1100 */
+    { 12, 0x1D, 2432 },	/* 0000 0001 1101 */
+    { 12, 0x1E, 2496 },	/* 0000 0001 1110 */
+    { 12, 0x1F, 2560 },	/* 0000 0001 1111 */
+    { 12, 0x1, G3CODE_EOL },	/* 0000 0000 0001 */
+    { 9, 0x1, G3CODE_INVALID },	/* 0000 0000 1 */
+    { 10, 0x1, G3CODE_INVALID },	/* 0000 0000 01 */
+    { 11, 0x1, G3CODE_INVALID },	/* 0000 0000 001 */
+    { 12, 0x0, G3CODE_INVALID },	/* 0000 0000 0000 */
+};
+
+const TIFFFaxTabEnt TIFFFaxMainTable[128] = {
+  {12,7,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},
+  {5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{5,6,2},{3,1,0},{5,3,1},{3,1,0},
+  {2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},
+  {4,3,1},{3,1,0},{5,7,3},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},
+  {1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{4,6,2},{3,1,0},
+  {5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},
+  {2,3,0},{3,1,0},{4,3,1},{3,1,0},{6,7,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},
+  {4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},
+  {5,6,2},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},
+  {5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},{4,7,3},{3,1,0},{5,3,1},{3,1,0},
+  {2,3,0},{3,1,0},{4,3,1},{3,1,0},{1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},
+  {4,3,1},{3,1,0},{4,6,2},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0},
+  {1,4,0},{3,1,0},{5,3,1},{3,1,0},{2,3,0},{3,1,0},{4,3,1},{3,1,0}
+};
+
+const TIFFFaxTabEnt TIFFFaxWhiteTable[4096] = {
+  {12,11,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 +  {7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 +  {7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 +  {7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},
 +  {7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 +  {7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1792},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 +  {7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 +  {9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 +  {7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},
 +  {7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
 +  {7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 +  {9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},
 +  {7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},
 +  {7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},
 +  {7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},
 +  {9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},
 +  {7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},
 +  {7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},
 +  {7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1856},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},
 +  {7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},
 +  {7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},
 +  {7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},
 +  {9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},
 +  {7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 +  {7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 +  {7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},
 +  {9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},
 +  {7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 +  {7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},
 +  {9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 +  {9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {11,12,2112},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 +  {7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 +  {7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},
 +  {7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},
 +  {7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 +  {7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 +  {7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},
 +  {9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},
 +  {7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},
 +  {7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},
 +  {7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 +  {9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2368},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},
 +  {7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},
 +  {7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},
 +  {7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},
 +  {9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},
 +  {7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},
 +  {7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},
 +  {7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},
 +  {7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},
 +  {7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},
 +  {7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},
 +  {9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},
 +  {7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 +  {7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{11,12,1984},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 +  {7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},
 +  {9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},
 +  {7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 +  {7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},
 +  {9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 +  {9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 +  {7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 +  {7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 +  {7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},
 +  {7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 +  {7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1920},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 +  {7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 +  {9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 +  {7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},
 +  {7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
 +  {7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 +  {9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},
 +  {7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},
 +  {7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},
 +  {7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},
 +  {9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},
 +  {7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},
 +  {7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},
 +  {7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2240},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},
 +  {7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},
 +  {7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},
 +  {7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},
 +  {9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},
 +  {7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 +  {7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 +  {7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},
 +  {9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},
 +  {7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 +  {7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},
 +  {9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 +  {9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {11,12,2496},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 +  {7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 +  {7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},
 +  {7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},
 +  {7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
+  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{12,11,0},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 +  {7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},
 +  {9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},
 +  {7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},
 +  {7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},
 +  {7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 +  {9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1792},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},
 +  {7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},
 +  {7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},
 +  {7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},
 +  {9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},
 +  {7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},
 +  {7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},
 +  {7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},
 +  {7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},
 +  {7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},
 +  {7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},
 +  {9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},
 +  {7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 +  {7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{11,11,1856},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 +  {7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},
 +  {9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1152},{7,4,6},
 +  {7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 +  {7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},
 +  {9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 +  {9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 +  {7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 +  {7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 +  {7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},{7,8,31},{7,5,8},
 +  {7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 +  {7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2176},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 +  {7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 +  {9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 +  {7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1600},{7,4,5},
 +  {7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
 +  {7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 +  {9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},
 +  {7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},
 +  {7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},
 +  {7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},{7,8,43},{7,6,17},
 +  {9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},
 +  {7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},
 +  {7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,768},{7,4,6},
 +  {7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2432},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},{7,7,19},{7,5,8},
 +  {7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},
 +  {7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},{9,9,1408},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},
 +  {7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},
 +  {9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},
 +  {7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 +  {7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 +  {7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},
 +  {9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,960},{7,4,6},
 +  {7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 +  {7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},
 +  {9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 +  {9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {11,12,2048},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 +  {7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 +  {7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},
 +  {7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},{7,8,32},{7,5,8},
 +  {7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 +  {7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 +  {7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},
 +  {9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},
 +  {7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1536},{7,4,5},
 +  {7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},
 +  {7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 +  {9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,11,1920},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,896},{7,4,6},
 +  {7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},
 +  {7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},
 +  {7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},{7,8,44},{7,6,17},
 +  {9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},
 +  {7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},
 +  {7,8,42},{7,6,16},{9,9,1152},{7,4,6},{7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},
 +  {7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},
 +  {7,8,55},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},
 +  {7,8,53},{7,5,9},{9,8,448},{7,4,6},{7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1472},{7,4,5},{7,8,43},{7,6,17},{9,9,1216},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},
 +  {7,8,61},{7,4,4},{7,4,2},{7,4,7},{7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},
 +  {9,9,960},{7,4,6},{7,8,31},{7,5,8},{7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,9,704},{7,4,6},{7,8,37},{9,5,128},
 +  {7,7,25},{7,6,15},{9,8,320},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},
 +  {7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{11,12,2304},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,7,20},{9,5,128},{7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},
 +  {7,7,27},{7,4,5},{7,8,40},{7,6,16},{9,9,832},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},
 +  {9,8,512},{7,4,6},{7,8,36},{9,5,128},{7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{9,9,1600},{7,4,5},{7,8,44},{7,6,17},{9,9,1344},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},
 +  {7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,48},{7,4,3},{7,8,60},{7,4,5},{7,8,42},{7,6,16},{9,9,1088},{7,4,6},
 +  {7,8,32},{7,5,8},{7,8,58},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},
 +  {7,5,11},{7,4,5},{7,7,26},{7,5,9},{9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},
 +  {9,8,384},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},
 +  {9,7,256},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {0,0,0},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},
 +  {7,7,24},{7,6,14},{7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},
 +  {7,8,39},{7,6,16},{9,8,576},{7,4,6},{7,7,19},{7,5,8},{7,8,55},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,45},{7,4,3},{7,5,11},{7,4,5},{7,8,53},{7,5,9},{9,8,448},{7,4,6},
 +  {7,8,35},{9,5,128},{7,8,51},{7,6,15},{7,8,63},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},
 +  {9,9,1536},{7,4,5},{7,8,43},{7,6,17},{9,9,1280},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},
 +  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,8,29},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},
 +  {9,6,1664},{7,4,6},{7,8,33},{9,5,128},{7,8,49},{7,6,14},{7,8,61},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,47},{7,4,3},{7,8,59},{7,4,5},{7,8,41},{7,6,16},{9,9,1024},{7,4,6},{7,8,31},{7,5,8},
 +  {7,8,57},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},
 +  {7,7,26},{7,5,9},{9,9,768},{7,4,6},{7,8,37},{9,5,128},{7,7,25},{7,6,15},{9,8,320},{7,4,4},
 +  {7,4,2},{7,4,7},{7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},
 +  {7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},{11,12,2560},{7,4,3},
 +  {7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},{7,7,20},{9,5,128},{7,7,24},{7,6,14},
 +  {7,7,28},{7,4,4},{7,4,2},{7,4,7},{7,7,23},{7,4,3},{7,7,27},{7,4,5},{7,8,40},{7,6,16},
 +  {9,9,896},{7,4,6},{7,7,19},{7,5,8},{7,8,56},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7},
 +  {7,8,46},{7,4,3},{7,5,11},{7,4,5},{7,8,54},{7,5,9},{9,8,512},{7,4,6},{7,8,36},{9,5,128},
 +  {7,8,52},{7,6,15},{7,8,0},{7,4,4},{7,4,2},{7,4,7},{7,6,13},{7,4,3},{9,9,1728},{7,4,5},
 +  {7,8,44},{7,6,17},{9,9,1408},{7,4,6},{7,6,1},{7,5,8},{9,6,192},{9,5,64},{7,5,10},{7,4,4},
 +  {7,4,2},{7,4,7},{7,8,30},{7,4,3},{7,5,11},{7,4,5},{7,6,12},{7,5,9},{9,6,1664},{7,4,6},
 +  {7,8,34},{9,5,128},{7,8,50},{7,6,14},{7,8,62},{7,4,4},{7,4,2},{7,4,7},{7,8,48},{7,4,3},
+  {7,5,10},{7,4,4},{7,4,2},{7,4,7},{7,7,22},{7,4,3},{7,5,11},{7,4,5},{7,7,26},{7,5,9},
 +  {9,8,640},{7,4,6},{7,8,38},{9,5,128},{7,7,25},{7,6,15},{9,8,384},{7,4,4},{7,4,2},{7,4,7},
 +  {7,6,13},{7,4,3},{7,7,18},{7,4,5},{7,7,21},{7,6,17},{9,7,256},{7,4,6},{7,6,1},{7,5,8},
 +  {9,6,192},{9,5,64},{7,5,10},{7,4,4},{7,4,2},{7,4,7}
+};
+
+const TIFFFaxTabEnt TIFFFaxBlackTable[8192] = {
+  {12,11,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1792},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,11,23},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,20},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,11,25},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,128},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,56},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,30},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1856},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,57},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,11,21},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,54},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,52},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,48},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {11,12,2112},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,44},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,36},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,384},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,28},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,60},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,40},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2368},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{11,12,1984},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,50},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,34},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1664},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,26},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1408},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,32},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1920},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,61},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,42},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{10,13,1024},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,13,768},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,62},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2240},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,46},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,38},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,512},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,11,19},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,24},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,22},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {11,12,2496},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{12,11,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1792},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,23},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,20},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,11,25},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{10,12,192},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1280},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,31},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{11,11,1856},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,58},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,11,21},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,896},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,640},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,49},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2176},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,45},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,37},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{10,12,448},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,29},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,13,1536},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,41},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2432},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {11,12,2048},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,51},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,35},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,320},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,27},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,59},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,33},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1920},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,256},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,43},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,13,1152},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,55},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,63},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{11,12,2304},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,47},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,39},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,53},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,19},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,24},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,22},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2560},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{12,11,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1792},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,23},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,11,20},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,25},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,12,128},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,56},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,30},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {11,11,1856},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,57},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,21},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,54},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,52},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,48},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2112},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,44},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,36},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,12,384},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,28},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,60},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,40},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{11,12,2368},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,1984},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,50},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,34},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{10,13,1728},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,26},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,13,1472},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,32},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1920},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,61},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,42},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1088},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,832},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,62},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {11,12,2240},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,46},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,38},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,576},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,19},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,11,24},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,22},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2496},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{12,11,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,18},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{11,11,1792},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,23},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,11,20},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,25},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,192},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1344},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,31},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,11,1856},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,58},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,21},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{10,13,960},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,13,704},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,49},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2176},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,45},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,37},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,448},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,29},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1600},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,41},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {11,12,2432},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,10,18},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,17},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2048},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,51},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,35},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {10,12,320},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,27},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,59},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,33},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{11,11,1920},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
 +  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,12,256},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,43},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,13,1216},{8,2,3},{8,3,1},{8,2,2},
 +  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {0,0,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,8,13},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,9,15},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,55},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,63},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2304},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,12,47},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,12,39},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,12,53},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,12},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{0,0,0},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,8,13},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,11,19},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,11,24},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,11,22},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{11,12,2560},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
 +  {8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,7,10},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,10,16},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2},{8,10,0},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},
+  {8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{10,10,64},{8,2,3},
 +  {8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,9},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,11},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},
+  {8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},
+  {8,8,14},{8,2,3},{8,3,1},{8,2,2},{8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,6,8},{8,2,3},
+  {8,3,1},{8,2,2},{8,4,5},{8,2,3},{8,3,4},{8,2,2},{8,7,12},{8,2,3},{8,3,1},{8,2,2},
+  {8,4,6},{8,2,3},{8,3,4},{8,2,2},{8,5,7},{8,2,3},{8,3,1},{8,2,2},{8,4,5},{8,2,3},
+  {8,3,4},{8,2,2}
+};

=== added file 'lib/tiff-fax.h'
--- lib/tiff-fax.h	1970-01-01 00:00:00 +0000
+++ lib/tiff-fax.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,75 @@
+#ifndef TIFF_FAX_H
+#define TIFF_FAX_H
+
+#include <stdint.h>
+
+/* -------------------- Encoder -------------------- */
+/*
+ * CCITT T.4 1D Huffman runlength codes and
+ * related definitions.  Given the small sizes
+ * of these tables it does not seem
+ * worthwhile to make code & length 8 bits.
+ */
+typedef struct tableentry {
+    unsigned short length;	/* bit length of g3 code */
+    unsigned short code;	/* g3 code */
+    short	runlen;		/* run length in bits */
+} tableentry;
+
+#define	EOL	0x001	/* EOL code value - 0000 0000 0001 */
+
+/* status values returned instead of a run length */
+#define	G3CODE_EOL	-1	/* NB: ACT_EOL - ACT_WRUNT */
+#define	G3CODE_INVALID	-2	/* NB: ACT_INVALID - ACT_WRUNT */
+#define	G3CODE_EOF	-3	/* end of input data */
+#define	G3CODE_INCOMP	-4	/* incomplete run code */
+
+/*
+ * Note that these tables are ordered such that the
+ * index into the table is known to be either the
+ * run length, or (run length / 64) + a fixed offset.
+ *
+ * NB: The G3CODE_INVALID entries are only used
+ *     during state generation (see mkg3states.c).
+ */
+extern const tableentry TIFFFaxWhiteCodes[];
+
+extern const tableentry TIFFFaxBlackCodes[];
+
+/* -------------------- Decoder -------------------- */
+
+/*
+ * Finite state machine codes
+ *
+ * Should use an enum
+ */
+#define S_Null		0	/* ?? */
+#define S_Pass		1	/* 2D */
+#define S_Horiz		2	/* 2D */
+#define S_V0		3	/* 2D */
+#define S_VR		4	/* 2D */
+#define S_VL		5	/* 2D */
+#define S_Ext		6	/* 2D */
+#define S_TermW		7	/* Terminal white code word */
+#define S_TermB		8	/* Terminal black code word */
+#define S_MakeUpW	9	/* Make-up white code word */
+#define S_MakeUpB	10	/* Make-up black code word */
+#define S_MakeUp	11	/* Make-up code word of what?? */
+#define S_EOL		12	/* End of line code word */
+
+/* FSM state table entry */
+static struct tiff_fax_table_entry_s {
+  unsigned char State;	/* FSM state (see above) */
+  unsigned char Width;	/* width of code in bits */
+  uint32_t	Param;	/* unsigned 32-bit run length in bits */
+};
+
+typedef struct tiff_fax_table_entry_s TIFFFaxTabEnt;
+
+extern const TIFFFaxTabEnt TIFFFaxMainTable[128];
+
+extern const TIFFFaxTabEnt TIFFFaxWhiteTable[4096];
+
+extern const TIFFFaxTabEnt TIFFFaxBlackTable[8192];
+
+#endif	/* TIFF_FAX_H */

=== modified file 'src/Makefile.am'
--- src/Makefile.am	2011-08-29 18:00:28 +0000
+++ src/Makefile.am	2011-10-03 17:39:18 +0000
@@ -33,7 +33,8 @@
 TYPES_MODULE_SOURCES = base/pdf-types.h \
                        base/pdf-types-buffer.c base/pdf-types-buffer.h \
                        base/pdf-types-pmon.h \
-                       base/pdf-types-uuid.c base/pdf-types-uuid.h
+                       base/pdf-types-uuid.c base/pdf-types-uuid.h \
+                       base/pdf-types-bit_buffer.c base/pdf-types-bit_buffer.h
 
 ERROR_MODULE_SOURCES = base/pdf-error.c base/pdf-error.h
 
@@ -59,7 +60,13 @@
                      base/pdf-stm-f-md5.h base/pdf-stm-f-md5.c \
                      base/pdf-stm-f-lzw.h base/pdf-stm-f-lzw.c \
                      base/pdf-stm-f-a85.h base/pdf-stm-f-a85.c \
-                     base/pdf-stm-f-pred.h base/pdf-stm-f-pred.c
+                     base/pdf-stm-f-pred.h base/pdf-stm-f-pred.c \
+                     base/pdf-stm-f-fax.h base/pdf-stm-f-fax.c \
+                     base/pdf-stm-f-fax-base.h base/pdf-stm-f-fax-base.c \
+                     base/pdf-stm-f-fax-decoder.h base/pdf-stm-f-fax-decoder.c \
+                     base/pdf-stm-f-fax-decoder1d.h base/pdf-stm-f-fax-decoder1d.c \
+                     base/pdf-stm-f-fax-decoder2d.h base/pdf-stm-f-fax-decoder2d.c \
+                     base/pdf-stm-f-fax-encoder.h base/pdf-stm-f-fax-encoder.c
 
 if ZLIB
   STM_MODULE_SOURCES += base/pdf-stm-f-flate.c base/pdf-stm-f-flate.h

=== added file 'src/base/pdf-stm-f-fax-base.c'
--- src/base/pdf-stm-f-fax-base.c	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-base.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,104 @@
+#include <pdf-stm-f-fax-base.h>
+
+#include <pdf-alloc.h>
+#include <pdf-error.h>
+#include <pdf-types.h>
+#include <pdf-types-buffer.h>
+#include <pdf-types-bit_buffer.h>
+
+/*********************************************************************
+ *
+ ********************************************************************/
+pdf_stm_f_fax_base_t *
+pdf_stm_f_fax_base_new (pdf_i32_t  k,
+                        pdf_bool_t end_of_line,
+                        pdf_bool_t encoded_byte_align,
+                        pdf_i32_t  columns, 
+                        pdf_i32_t  rows,
+                        pdf_bool_t end_of_block,
+                        pdf_bool_t black_is_1,
+                        pdf_i32_t  damaged_rows_before_error)
+{
+  PDF_ASSERT(0 < columns);
+  PDF_ASSERT(end_of_block || 0 < rows);
+
+  pdf_stm_f_fax_base_t *result = (pdf_stm_f_fax_base_t *) \
pdf_alloc(sizeof(pdf_stm_f_fax_base_t)); +
+  result->k = k;
+  result->end_of_line = end_of_line;
+  result->encoded_byte_align = encoded_byte_align;
+  result->columns = columns;
+  result->rows = rows;
+  result->end_of_block = end_of_block;
+  result->black_is_1 = black_is_1;
+  result->damaged_rows_before_error = damaged_rows_before_error;
+
+  result->input_buffer = pdf_bit_buffer_new();
+  result->output_buffer = pdf_bit_buffer_new();
+
+  result->line = 0;
+
+  return result;
+}
+
+/*********************************************************************
+ *
+ ********************************************************************/
+void
+pdf_stm_f_fax_base_destroy (pdf_stm_f_fax_base_t *fax)
+{
+  PDF_ASSERT_POINTER(fax);
+
+  pdf_bit_buffer_destroy (fax->input_buffer);
+  pdf_bit_buffer_destroy (fax->output_buffer);
+
+  pdf_dealloc (fax);
+}
+
+/*********************************************************************
+ *
+ ********************************************************************/
+pdf_bool_t
+pdf_stm_f_fax_base_flush_output (pdf_stm_f_fax_base_t *fax,
+                                 pdf_buffer_t         *dst,
+                                 pdf_bool_t            force)
+{
+  PDF_ASSERT_POINTER(fax);
+  PDF_ASSERT_POINTER(dst);
+
+  while (8 <= pdf_bit_buffer_bits_accum (fax->output_buffer)) {
+    if (pdf_buffer_full_p (dst)) {
+      return PDF_FALSE;
+    }
+
+    pdf_buffer_write (dst, (pdf_uchar_t) pdf_bit_buffer_read (fax->output_buffer, \
8)); +    pdf_bit_buffer_forward (fax->output_buffer, 8);
+  }
+
+  /* buffer has < 8 bits */
+  if (force && 0 < pdf_bit_buffer_bits_accum (fax->output_buffer)) {
+    if (pdf_buffer_full_p (dst)) {
+      return PDF_FALSE;
+    }
+
+    pdf_buffer_write (dst, (pdf_uchar_t) pdf_bit_buffer_read (fax->output_buffer,
+                                                              \
pdf_bit_buffer_bits_accum (fax->output_buffer))); +  }
+
+  return PDF_TRUE;
+}
+
+/*********************************************************************
+ *
+ ********************************************************************/
+void
+pdf_stm_f_fax_base_fill_input (pdf_stm_f_fax_base_t *fax,
+                               pdf_buffer_t         *src)
+{
+  PDF_ASSERT_POINTER(fax);
+  PDF_ASSERT_POINTER(src);
+
+  while (!pdf_buffer_eob_p (src)) {
+    pdf_bit_buffer_write (fax->input_buffer, 8, (pdf_u32_t) pdf_buffer_read (src));
+  }
+}

=== added file 'src/base/pdf-stm-f-fax-base.h'
--- src/base/pdf-stm-f-fax-base.h	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-base.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,82 @@
+/*********************************************************************
+ * Base class for encoders/decoders of pdf-stm-f-fax module.
+ ********************************************************************/
+#ifndef PDF_STM_F_FAX_BASE_H
+#define PDF_STM_F_FAX_BASE_H
+
+#include <pdf-stm-filter.h>     /* our "parent" */
+
+#include <pdf-types.h>
+#include <pdf-types-buffer.h>
+#include <pdf-types-bit_buffer.h>
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+static struct pdf_stm_f_fax_base_s
+{
+  /* parameters */
+  pdf_i32_t k;
+  pdf_bool_t end_of_line;
+  pdf_bool_t encoded_byte_align;
+  pdf_i32_t columns;
+  pdf_i32_t rows;
+  pdf_bool_t end_of_block;
+  pdf_bool_t black_is_1;
+  pdf_i32_t damaged_rows_before_error;
+
+  pdf_bit_buffer_t *input_buffer; /* input buffer */
+  pdf_bit_buffer_t *output_buffer; /* output buffer */
+
+  int line;                      /* line being decoded/encoded */
+};
+
+typedef struct pdf_stm_f_fax_base_s pdf_stm_f_fax_base_t;
+
+/*********************************************************************
+ * Constructor. For explanation about parameters, see [1].
+ ********************************************************************/
+pdf_stm_f_fax_base_t *
+pdf_stm_f_fax_base_new(pdf_i32_t  k,
+                       pdf_bool_t end_of_line,
+                       pdf_bool_t encoded_byte_align,
+                       pdf_i32_t  columns, 
+                       pdf_i32_t  rows,
+                       pdf_bool_t end_of_block,
+                       pdf_bool_t black_is_1,
+                       pdf_i32_t  damaged_rows_before_error);
+
+/*********************************************************************
+ * Destructor.
+ ********************************************************************/
+void
+pdf_stm_f_fax_base_destroy(pdf_stm_f_fax_base_t *fax);
+
+/*********************************************************************
+ * Flushes all but the las incomplete byte decoded (this is necessary 
+ * to avoid adding extra bits in successive outputs).
+ *
+ * @fax   - Fax module data. 
+ * @dst   - Destination buffer. If full, it stops flushing.
+ * @force - Flushes incomplete last byte, padding with zeroes.
+ * 
+ * @return - True if every attempted buffered bit was flushed, false
+ * otherwise (which can only be caused by a full @dst).
+ ********************************************************************/
+pdf_bool_t
+pdf_stm_f_fax_base_flush_output(pdf_stm_f_fax_base_t *fax,
+                                pdf_buffer_t         *dst,
+                                pdf_bool_t            force);
+
+/*********************************************************************
+ * Fills with bits to be decoded.
+ *
+ * @fax - Fax module data.
+ * @src - Bits' source.
+ ********************************************************************/
+void
+pdf_stm_f_fax_base_fill_input(pdf_stm_f_fax_base_t *fax,
+                              pdf_buffer_t         *src);
+
+
+#endif  /* PDF_STM_F_FAX_BASE_H */

=== added file 'src/base/pdf-stm-f-fax-decoder.c'
--- src/base/pdf-stm-f-fax-decoder.c	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-decoder.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,362 @@
+#include <pdf-stm-f-fax-decoder.h>
+
+#include <pdf-stm-f-fax-decoder1d.h>
+#include <pdf-stm-f-fax-decoder2d.h>
+
+#include <pdf-alloc.h>
+#include <pdf-error.h>
+#include <pdf-types.h>
+#include <pdf-types-bit_buffer.h>
+#include <pdf-types-buffer.h>
+
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+pdf_stm_f_fax_decoder_t *
+pdf_stm_f_fax_decoder_new (pdf_i32_t  k,
+                           pdf_bool_t end_of_line,
+                           pdf_bool_t encoded_byte_align,
+                           pdf_i32_t  columns, 
+                           pdf_i32_t  rows,
+                           pdf_bool_t end_of_block,
+                           pdf_bool_t black_is_1,
+                           pdf_i32_t  damaged_rows_before_error)
+{
+  pdf_stm_f_fax_decoder_t *result = (pdf_stm_f_fax_decoder_t *) pdf_alloc \
(sizeof(pdf_stm_f_fax_decoder_t)); +
+  result->base = pdf_stm_f_fax_base_new (k,
+                                         end_of_line,
+                                         encoded_byte_align,
+                                         columns,
+                                         rows,
+                                         end_of_block,
+                                         black_is_1,
+                                         damaged_rows_before_error);
+  
+  result->decoder1d = pdf_stm_f_fax_decoder1d_new (columns);
+
+  /* Not implemented yet, so commented out. */
+  /* if (0 <= k) { */
+  /*   result->decoder2d = pdf_stm_f_fax_decoder2d_new(k, columns); */
+  /* } else { */
+  /*   result->decoder2d = NULL; */
+  /* } */
+
+  result->eol_count = 0;
+  result->state = DECODER_STATE_CHECK_ROW;
+  
+  return result;
+}
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+void
+pdf_stm_f_fax_decoder_destroy (pdf_stm_f_fax_decoder_t *decoder)
+{
+  pdf_stm_f_fax_base_destroy (decoder->base);
+
+  pdf_stm_f_fax_decoder1d_destroy(decoder->decoder1d);
+
+  /* Not implemented yet, so commented out. */
+  /* if (0 <= decoder->k) { */
+  /*   pdf_stm_f_fax_decoder2d_destroy(decoder->decoder2d); */
+  /* } */
+
+  pdf_dealloc (decoder);
+}
+
+/* For faster access: */
+/* - parameters */
+#define K(fax) ((fax)->base->k)
+#define END_OF_LINE(fax) ((fax)->base->end_of_line)
+#define ENCODED_BYTE_ALIGN(fax) ((fax)->base->encoded_byte_align)
+#define COLUMNS(fax) ((fax)->base->columns)
+#define ROWS(fax) ((fax)->base->rows)
+#define END_OF_BLOCK(fax) ((fax)->base->end_of_block)
+#define BLACK_IS_1(fax) ((fax)->base->black_is_1)
+#define DAMAGED_ROWS_BEFORE_ERROR(fax) ((fax)->base->damaged_rows_before_error)
+/* - rest */
+#define INPUT_BUFFER(fax) ((fax)->base->input_buffer)
+#define OUTPUT_BUFFER(fax) ((fax)->base->output_buffer)
+#define LINE(fax) ((fax)->base->line)
+#define INC_LINE(fax) (fax)->base->line++
+
+/* Codes' stuff */
+#define DECODER_EOL1D_CODE 0x0800
+#define DECODER_EOL1D_LENGTH 12
+
+/*********************************************************************
+ * After executed, all zeroes before and first 1 (G3 1D EOL code) will
+ * have been eaten.
+ *
+ * @decoder - Decoder data.
+ * 
+ * @returns - False if no input. True otherwise.
+ *********************************************************************/
+static pdf_bool_t
+decoder_g31d_sync_eol (pdf_stm_f_fax_decoder_t *decoder) 
+{
+  if (pdf_bit_buffer_bits_accum (INPUT_BUFFER(decoder))
+      < DECODER_EOL1D_LENGTH) {
+    return PDF_FALSE;
+  }
+
+  /* eat zeroes */
+  while (pdf_bit_buffer_read (INPUT_BUFFER(decoder),
+                              DECODER_EOL1D_LENGTH)
+         == 0) {
+    pdf_bit_buffer_forward (INPUT_BUFFER(decoder), 1);
+
+    if (pdf_bit_buffer_bits_accum (INPUT_BUFFER(decoder))
+        < DECODER_EOL1D_LENGTH) {
+      return PDF_FALSE;
+    }
+  }
+
+  if (pdf_bit_buffer_read (INPUT_BUFFER(decoder),
+                           DECODER_EOL1D_LENGTH)
+      == DECODER_EOL1D_CODE) {
+    pdf_bit_buffer_forward (INPUT_BUFFER(decoder),
+                            DECODER_EOL1D_LENGTH);
+    decoder->eol_count++;
+  }
+
+  return PDF_TRUE;
+}
+
+/*********************************************************************
+ * Always accepts EOB and EOL, but only requires it if parameters
+ * say so.
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_decoder_apply_g31d (pdf_stm_f_fax_decoder_t *decoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error)
+{
+  PDF_ASSERT_POINTER(decoder);
+  PDF_ASSERT_POINTER(input_buffer);
+  PDF_ASSERT_POINTER(output_buffer);
+
+  /* Cache input */
+  pdf_stm_f_fax_base_fill_input(decoder->base,
+                                input_buffer);
+
+  for (;;) {
+    switch (decoder->state) {
+    case DECODER_STATE_CHECK_ROW:
+      /* Do initial checkings before decoding a row: */
+      PDF_DEBUG_BASE("decoder_g31d_apply: checking row %d\n",
+                     LINE(decoder));
+
+      /* 1. All required rows encoded? */
+      if (!END_OF_BLOCK(decoder) /* If EndOfBlock is true,
+                                    then Rows is overrided
+                                    [3] */
+	  && ROWS(decoder) <= LINE(decoder)) {
+	decoder->state = DECODER_STATE_FINAL_OUTPUT;
+	break;
+      }
+
+      /* 2. EOL? */
+      if (decoder_g31d_sync_eol(decoder) == PDF_FALSE) {
+	return PDF_STM_FILTER_APPLY_STATUS_NO_INPUT;
+      }
+
+      /* 2'. Should there be an eol and there isn't one? */
+      if (END_OF_LINE(decoder) && decoder->eol_count <= 0) {
+	/* bad input. we're done */
+	decoder->state = DECODER_STATE_DONE_NOEOL;
+	break;
+      }
+
+      /* Now reset everything to decode a new row */
+      pdf_stm_f_fax_decoder1d_reset (decoder->decoder1d);
+      decoder->eol_count = 0;
+
+      decoder->state = DECODER_STATE_INIT_ROW;
+      break;
+
+      
+    case DECODER_STATE_INIT_ROW: 
+      /* Deal with row decoding initials */
+      PDF_DEBUG_BASE("decoder_g31d_apply: initializing row %d\n",
+                     LINE(decoder));  
+
+      /* 1. Attempt to find EOB */
+      while (decoder->eol_count < 6) {
+	if (pdf_bit_buffer_bits_accum(INPUT_BUFFER(decoder))
+            < DECODER_EOL1D_LENGTH) {
+	  return PDF_STM_FILTER_APPLY_STATUS_NO_INPUT;
+	}
+
+        /* Sums EOLs */
+	if (pdf_bit_buffer_read (INPUT_BUFFER(decoder),
+                                 DECODER_EOL1D_LENGTH) == DECODER_EOL1D_CODE) {
+	  pdf_bit_buffer_forward (INPUT_BUFFER(decoder),
+                                  DECODER_EOL1D_LENGTH);
+	  decoder->eol_count++;
+	} else {
+	  break;
+	}
+      }
+
+      /* Got EOB? */
+      if (6 <= decoder->eol_count) {
+	decoder->state = DECODER_STATE_DONE_SUCCESS;
+	break;
+      } else if (1 < decoder->eol_count) {
+	/* Several EOLs and no EOB? that's bad input */
+	decoder->state = DECODER_STATE_DONE_BADLENGTH;
+	break;
+      }
+
+      /* 2. Align input (if required) */
+      if (ENCODED_BYTE_ALIGN(decoder)) {
+	pdf_bit_buffer_align_input(INPUT_BUFFER(decoder));
+      }
+      
+      decoder->state = DECODER_STATE_DECODE_ROW;
+      break;			/* DECODER_STATE_INIT */
+
+      
+    case DECODER_STATE_DECODE_ROW:
+      /* Decode a row */
+      PDF_DEBUG_BASE("decoder_g31d_apply: decoding row %d\n",
+                     LINE(decoder));
+
+      if (pdf_stm_f_fax_decoder1d_expand_row (decoder->decoder1d,
+                                              INPUT_BUFFER(decoder),
+                                              OUTPUT_BUFFER(decoder),
+                                              finish)) {
+        INC_LINE(decoder);
+        decoder->state = DECODER_STATE_OUTPUT;
+      } else {
+        if (pdf_stm_f_fax_decoder1d_noinput (decoder->decoder1d)) {
+          return PDF_STM_FILTER_APPLY_STATUS_NO_INPUT;
+        } else if (pdf_stm_f_fax_decoder1d_prematureeol (decoder->decoder1d)) {
+          decoder->state = DECODER_STATE_DONE_PREMATUREEOL;
+          break;
+        } else if (pdf_stm_f_fax_decoder1d_badlength (decoder->decoder1d)) {
+          decoder->state = DECODER_STATE_DONE_BADLENGTH;
+          break;
+        } else if (pdf_stm_f_fax_decoder1d_unrecognizedcode (decoder->decoder1d)) {
+          decoder->state = DECODER_STATE_DONE_UNRECOGNIZEDCODE;
+          break;
+        }
+      }
+      break;                    /* DECODER_STATE_DECODE_ROW */
+      
+
+    case DECODER_STATE_OUTPUT:
+      /* Do standard output */
+      PDF_DEBUG_BASE("decoder_g31d_apply: doing output\n");
+
+      /* Flush output except for last incomplete byte */
+      if (!pdf_stm_f_fax_base_flush_output (decoder->base,
+                                            output_buffer,
+                                            PDF_FALSE)) {
+	return PDF_STM_FILTER_APPLY_STATUS_NO_OUTPUT;
+      } else {
+	decoder->state = DECODER_STATE_CHECK_ROW;
+        break;
+      }
+      break;			/* DECODER_STATE_OUTPUT */
+
+
+    case DECODER_STATE_FINAL_OUTPUT:
+      /* Do last output (flush remaining bits) */
+      PDF_DEBUG_BASE("decoder_g31d_apply: doing output\n");
+
+      if (!pdf_stm_f_fax_base_flush_output(decoder->base,
+                                           output_buffer,
+                                           PDF_TRUE)) {
+	return PDF_STM_FILTER_APPLY_STATUS_NO_OUTPUT;
+      } else {
+	decoder->state = DECODER_STATE_DONE_SUCCESS;
+      }
+      break;			/* DECODER_STATE_FINAL_OUTPUT */
+
+	
+    case DECODER_STATE_DONE_SUCCESS:
+      /* Done decoding: success */
+      PDF_DEBUG_BASE("decoder_g31d_apply: done\n");  
+
+      return PDF_STM_FILTER_APPLY_STATUS_EOF; /* DECODER_STATE_DONE */
+	
+
+    case DECODER_STATE_DONE_NOEOL:
+      /* Done decoding: expected eol not present */
+
+      pdf_set_error(error,
+		    PDF_EDOMAIN_BASE_STM,
+		    PDF_STM_FILTER_APPLY_STATUS_ERROR,
+		    "expected eol not found");
+      return PDF_STM_FILTER_APPLY_STATUS_ERROR; /* DECODER_STATE_DONE_NOEOL */
+
+
+    case DECODER_STATE_DONE_BADLENGTH:
+      /* Done decoding: bad row's length */
+
+      pdf_set_error(error,
+		    PDF_EDOMAIN_BASE_STM,
+		    PDF_STM_FILTER_APPLY_STATUS_ERROR,
+		    "bad length");
+      return PDF_STM_FILTER_APPLY_STATUS_ERROR; /* DECODER_STATE_DONE_BADLENGTH */
+
+
+    case DECODER_STATE_DONE_PREMATUREEOL:
+      /* Done decoding: premature EOL found */
+
+      pdf_set_error(error,
+		    PDF_EDOMAIN_BASE_STM,
+		    PDF_STM_FILTER_APPLY_STATUS_ERROR,
+		    "premature EOL");
+      return PDF_STM_FILTER_APPLY_STATUS_ERROR; /* DECODER_ROW_STATE_PREMATUREEOL */
+
+
+    case DECODER_STATE_DONE_UNRECOGNIZEDCODE:
+      /* Done decoding: unrecognizable code found */
+
+      pdf_set_error(error,
+		    PDF_EDOMAIN_BASE_STM,
+		    PDF_STM_FILTER_APPLY_STATUS_ERROR,
+		    "unrecognized code");
+      return PDF_STM_FILTER_APPLY_STATUS_ERROR; /* \
DECODER_ROW_STATE_UNRECOGNIZEDCODE */ +
+
+    default:
+      PDF_ASSERT_TRACE_NOT_REACHED();
+      break;
+    }
+  }
+}
+
+/*********************************************************************
+ * Not implemented
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_decoder_g32d_apply (pdf_stm_f_fax_decoder_t *decoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error)
+{
+  return PDF_STM_FILTER_APPLY_STATUS_OK;
+}
+
+/*********************************************************************
+ * Not implemented
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_decoder_g4_apply (pdf_stm_f_fax_decoder_t *decoder,
+                                pdf_buffer_t            *input_buffer,
+                                pdf_buffer_t            *output_buffer,
+                                pdf_bool_t               finish,
+                                pdf_error_t            **error)
+{
+  return PDF_STM_FILTER_APPLY_STATUS_OK;
+}

=== added file 'src/base/pdf-stm-f-fax-decoder.h'
--- src/base/pdf-stm-f-fax-decoder.h	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-decoder.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,100 @@
+/*********************************************************************
+ * This "class" inherits pdf-stm-f-fax-base. It contains all
+ * decoders.
+ *
+ * Usage is self explanatory.
+ *
+ * See pdf-stm-f-fax-base.h
+ ********************************************************************/
+#ifndef PDF_STM_F_FAX_DECODER_H
+#define PDF_STM_F_FAX_DECODER_H
+
+#include <pdf-stm-f-fax-base.h>
+
+#include <pdf-stm-f-fax-decoder1d.h>
+
+static struct pdf_stm_f_fax_decoder_s 
+{
+  pdf_stm_f_fax_base_t *base;   /* "parent class" */
+
+  pdf_stm_f_fax_decoder1d_t *decoder1d; /* 1D decoder */
+
+  /* Not implemented yet, so commented out. */
+  /* pdf_stm_f_decoder2d_t *decoder2d; 2D decoder */
+
+  enum {
+    DECODER_STATE_CHECK_ROW,
+    DECODER_STATE_INIT_ROW,
+    DECODER_STATE_DECODE_ROW,
+    DECODER_STATE_OUTPUT,
+    DECODER_STATE_FINAL_OUTPUT,
+
+    /* Final states */
+    DECODER_STATE_DONE_SUCCESS,
+    DECODER_STATE_DONE_PREMATUREEOL,
+    DECODER_STATE_DONE_BADLENGTH,
+    DECODER_STATE_DONE_NOEOL,
+    DECODER_STATE_DONE_UNRECOGNIZEDCODE
+  } state;
+
+  int eol_count;
+};
+
+typedef struct pdf_stm_f_fax_decoder_s pdf_stm_f_fax_decoder_t;
+
+/*********************************************************************
+ * Constructor (see pdf-stm-f-fax-base.h)
+ ********************************************************************/
+pdf_stm_f_fax_decoder_t *
+pdf_stm_f_fax_decoder_new (pdf_i32_t  k,
+                           pdf_bool_t end_of_line,
+                           pdf_bool_t encoded_byte_align,
+                           pdf_i32_t  columns, 
+                           pdf_i32_t  rows,
+                           pdf_bool_t end_of_block,
+                           pdf_bool_t black_is_1,
+                           pdf_i32_t  damaged_rows_before_error);
+
+/*********************************************************************
+ * Destructor.
+ ********************************************************************/
+void
+pdf_stm_f_fax_decoder_destroy (pdf_stm_f_fax_decoder_t *decoder);
+
+/*********************************************************************
+ * CCITT Group 3 1D Fax Decoder. See [3].
+ *
+ * @decoder       - Decoder data.
+ * @input_buffer  - Input.
+ * @output_buffer - Output.
+ * @finish        - True if it's the final input received.
+ * @error         - Error reporting.
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_decoder_apply_g31d (pdf_stm_f_fax_decoder_t *decoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error);
+
+/*********************************************************************
+ * Not implemented.
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_decoder_apply_g32d (pdf_stm_f_fax_decoder_t *decoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error);
+
+/*********************************************************************
+ * Not implemented.
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_decoder_apply_g4 (pdf_stm_f_fax_decoder_t *decoder,
+                                pdf_buffer_t            *input_buffer,
+                                pdf_buffer_t            *output_buffer,
+                                pdf_bool_t               finish,
+                                pdf_error_t            **error);
+
+#endif  /* PDF_STM_F_FAX_DECODER_H */

=== added file 'src/base/pdf-stm-f-fax-decoder1d.c'
--- src/base/pdf-stm-f-fax-decoder1d.c	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-decoder1d.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,280 @@
+#include <pdf-stm-f-fax-decoder1d.h>
+
+#include <tiff-fax.h>
+
+#include <pdf-alloc.h>
+#include <pdf-error.h>
+#include <pdf-types.h>
+#include <pdf-types-bit_buffer.h>
+
+/*********************************************************************
+ * The decoder
+ ********************************************************************/
+static struct pdf_stm_f_fax_decoder1d_s 
+{
+  /* Row decoder state */
+  enum {
+    PDF_STM_F_FAX_DECODER1D_STATE_WHITE,
+    PDF_STM_F_FAX_DECODER1D_STATE_BLACK,
+  } state;
+
+  enum {
+    PDF_STM_F_FAX_DECODER1D_ERROR_NOINPUT,
+    PDF_STM_F_FAX_DECODER1D_ERROR_BADLENGTH,
+    PDF_STM_F_FAX_DECODER1D_ERROR_UNRECOGNIZEDCODE,
+    PDF_STM_F_FAX_DECODER1D_ERROR_PREMATUREEOL,
+    PDF_STM_F_FAX_DECODER1D_ERROR_DONE,
+    PDF_STM_F_FAX_DECODER1D_ERROR_OK
+  } error;
+  
+  int columns;			/* row length */
+  int a0;			/* reference element [1] */
+  int run_length;		/* Length of current run (used to
+				   store make-up code) */
+};
+
+/*********************************************************************
+ * Resets the decoder
+ ********************************************************************/
+void
+pdf_stm_f_fax_decoder1d_reset (pdf_stm_f_fax_decoder1d_t *decoder)
+{
+  decoder->a0 = 0;
+  decoder->run_length = 0;
+  decoder->state = PDF_STM_F_FAX_DECODER1D_STATE_WHITE;
+  decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_OK;
+}
+
+/*********************************************************************
+ * New decoder which decodes rows of 'columns' length
+ ********************************************************************/
+pdf_stm_f_fax_decoder1d_t *
+pdf_stm_f_fax_decoder1d_new (int columns)
+{
+  pdf_stm_f_fax_decoder1d_t *result = (pdf_stm_f_fax_decoder1d_t *) pdf_alloc \
(sizeof(pdf_stm_f_fax_decoder1d_t)); +
+  result->columns = columns;
+  pdf_stm_f_fax_decoder1d_reset (result);
+  
+  return result;
+}
+
+/*********************************************************************
+ * Destroys the decoder
+ ********************************************************************/
+void
+pdf_stm_f_fax_decoder1d_destroy (pdf_stm_f_fax_decoder1d_t *decoder)
+{
+  pdf_dealloc (decoder);
+}
+
+/*********************************************************************
+ * Decode a line of 1D-encoded data. It must not be run if error flags
+ * are up.
+ *
+ * @decoder - The decoder.
+ * @input_buffer - Input is read from here
+ * @output_buffer - Output is written here
+ * @finish - If true, it reads everything avaliable in input_buffer,
+ * otherwise it requires a minimum number of bits
+ * 
+ * @return - True if a full line was decoded, false otherwise
+ ********************************************************************/
+pdf_bool_t
+pdf_stm_f_fax_decoder1d_expand_row (pdf_stm_f_fax_decoder1d_t *decoder,
+                                    pdf_bit_buffer_t *input_buffer,
+                                    pdf_bit_buffer_t *output_buffer,
+                                    pdf_bool_t finish)
+{
+  /* only if status is OK or NOINPUT we attempt to continue */
+  PDF_ASSERT_RETURN(decoder->error == PDF_STM_F_FAX_DECODER1D_ERROR_OK
+                    || decoder->error == PDF_STM_F_FAX_DECODER1D_ERROR_NOINPUT);
+
+  int accum;
+  TIFFFaxTabEnt *table_entry;
+  
+  while (PDF_TRUE) {
+    /* check whether row length is exceeded */
+    if (decoder->columns < decoder->a0) {
+      decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_BADLENGTH;
+      return PDF_FALSE;
+    } else if (decoder->columns == decoder->a0) {
+      pdf_bit_buffer_align_output (output_buffer);
+      decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_DONE;
+      return PDF_TRUE;
+    }
+
+    /* Init FSM. When entering here, decoder->a0 < decoder->colums */
+    switch (decoder->state) {
+    case PDF_STM_F_FAX_DECODER1D_STATE_WHITE:
+      /* White code */
+      /* Get input, if avaliable */
+      if (12 <= (accum = pdf_bit_buffer_bits_accum (input_buffer))) {
+	table_entry = &TIFFFaxWhiteTable[pdf_bit_buffer_read (input_buffer, 12)];
+	pdf_bit_buffer_forward (input_buffer, table_entry->Width);
+
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: got %d bits of 12 avaliable\n",
+                       table_entry->Width);
+
+      } else if (finish && 0 < accum) {
+	table_entry = &TIFFFaxWhiteTable[pdf_bit_buffer_read(input_buffer, accum)];
+	pdf_bit_buffer_forward(input_buffer, PDF_MIN(table_entry->Width, accum));
+
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: width %d bits of %d avaliable. \
Got value %x\n", +                       table_entry->Width,
+                       accum,
+                       table_entry->Param);
+
+      } else {
+	decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_NOINPUT;
+	return PDF_FALSE;
+      }
+
+
+      /* Process input */
+      switch (table_entry->State) {
+      case S_EOL:
+	decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_PREMATUREEOL;
+	return PDF_FALSE;
+
+      case S_TermW:
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: detected terminal white code, \
length %u\n ", +                       table_entry->Param);
+
+	pdf_bit_buffer_write_n (output_buffer,
+                           decoder->run_length + table_entry->Param,
+                           PDF_FALSE);
+  
+	decoder->a0 += table_entry->Param;
+	decoder->run_length = 0;
+	decoder->state = PDF_STM_F_FAX_DECODER1D_STATE_BLACK;
+	break;
+
+      case S_MakeUpW:
+      case S_MakeUp:
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: detected make-up white code, \
length %u\n", +                       table_entry->Param);
+
+	decoder->a0 += table_entry->Param;
+	decoder->run_length += table_entry->Param;
+	break;
+
+      default:
+	decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_UNRECOGNIZEDCODE;
+	return PDF_FALSE;
+      }
+      break;			/* PDF_STM_F_FAX_DECODER1D_STATE_WHITE */
+
+
+    case PDF_STM_F_FAX_DECODER1D_STATE_BLACK:
+      /* Black code */
+      /* Get input, if avaliable */
+      if (13 <= (accum = pdf_bit_buffer_bits_accum (input_buffer))) {
+	table_entry = &TIFFFaxBlackTable[pdf_bit_buffer_read(input_buffer, 13)];
+	pdf_bit_buffer_forward (input_buffer, table_entry->Width);
+
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: got %d bits of 13 avaliable\n",
+                       table_entry->Width);
+
+      } else if (finish && 0 < accum) {
+	table_entry = &TIFFFaxBlackTable[pdf_bit_buffer_read(input_buffer, accum)];
+	pdf_bit_buffer_forward (input_buffer, PDF_MIN(table_entry->Width, accum));
+
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: width %d bits of %d avaliable. \
Got value %x\n", +                       table_entry->Width,
+                       accum,
+                       table_entry->Param);
+
+      } else {
+	decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_NOINPUT;
+	return PDF_FALSE;
+      }
+
+
+      /* Process input */
+      switch (table_entry->State) {
+      case S_EOL:
+	decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_PREMATUREEOL;
+	return PDF_FALSE;
+
+
+      case S_TermB:
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: detected terminal black code, \
length %u\n ", +                       table_entry->Param);
+
+	pdf_bit_buffer_write_n (output_buffer,
+                                decoder->run_length + table_entry->Param,
+                                PDF_TRUE);
+  
+	decoder->a0 += table_entry->Param;
+	decoder->run_length = 0;
+	decoder->state = PDF_STM_F_FAX_DECODER1D_STATE_WHITE;
+	break;
+
+      case S_MakeUpB:
+      case S_MakeUp:
+	PDF_DEBUG_BASE("pdf_stm_f_fax_decoder1d_expand_row: detected make-up white code, \
length %u\n", +                       table_entry->Param);
+
+	decoder->a0 += table_entry->Param;
+	decoder->run_length += table_entry->Param;
+	break;
+
+
+      default:
+	decoder->error = PDF_STM_F_FAX_DECODER1D_ERROR_UNRECOGNIZEDCODE;
+	return PDF_FALSE;
+      }
+      break;			/* PDF_STM_F_FAX_DECODER1D_STATE_BLACK */
+
+
+    default:
+      PDF_ASSERT_TRACE_NOT_REACHED();
+      break;
+    }
+  }
+}
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+pdf_i32_t pdf_stm_f_fax_decoder1d_columns (pdf_stm_f_fax_decoder1d_t *decoder) 
+{
+  return decoder->columns;
+}
+
+/*********************************************************************
+ * True if not enough input
+ ********************************************************************/
+pdf_bool_t
+pdf_stm_f_fax_decoder1d_noinput (pdf_stm_f_fax_decoder1d_t *decoder)
+{
+  return decoder->error == PDF_STM_F_FAX_DECODER1D_ERROR_NOINPUT;
+}
+
+/*********************************************************************
+ * True if row's length is not columns()
+ ********************************************************************/
+pdf_bool_t
+pdf_stm_f_fax_decoder1d_badlength (pdf_stm_f_fax_decoder1d_t *decoder)
+{
+  return decoder->error == PDF_STM_F_FAX_DECODER1D_ERROR_BADLENGTH;
+}
+
+/*********************************************************************
+ * True if an EOL was found prematurely
+ ********************************************************************/
+pdf_bool_t
+pdf_stm_f_fax_decoder1d_prematureeol (pdf_stm_f_fax_decoder1d_t *decoder)
+{
+  return decoder->error == PDF_STM_F_FAX_DECODER1D_ERROR_PREMATUREEOL;
+}
+
+/*********************************************************************
+ * True if an unrecognizable code was found
+ ********************************************************************/
+pdf_bool_t
+pdf_stm_f_fax_decoder1d_unrecognizedcode (pdf_stm_f_fax_decoder1d_t *decoder)
+{
+  return decoder->error == PDF_STM_F_FAX_DECODER1D_ERROR_UNRECOGNIZEDCODE;
+}

=== added file 'src/base/pdf-stm-f-fax-decoder1d.h'
--- src/base/pdf-stm-f-fax-decoder1d.h	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-decoder1d.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,76 @@
+/*********************************************************************
+ * How to use the decoder:
+ * 
+ * Firest initialize it, then call expand_row(). If it returns false,
+ * use the query functions to see what was wrong. It can only continue
+ * if error is NOINPUT, provided on next call you supply the needed
+ * input. 
+ *
+ * After you're done with a row, use reset()
+ ********************************************************************/
+#ifndef PDF_STM_F_FAX_DECODER1D_H
+#define PDF_STM_F_FAX_DECODER1D_H
+
+#include <pdf-types.h>
+#include <pdf-types-bit_buffer.h>
+
+typedef struct pdf_stm_f_fax_decoder1d_s pdf_stm_f_fax_decoder1d_t;
+
+/*********************************************************************
+ * Resets the decoder
+ ********************************************************************/
+void pdf_stm_f_fax_decoder1d_reset (pdf_stm_f_fax_decoder1d_t *decoder);
+
+/*********************************************************************
+ * New decoder which decodes rows of 'columns' length
+ ********************************************************************/
+pdf_stm_f_fax_decoder1d_t *pdf_stm_f_fax_decoder1d_new (int columns);
+
+/*********************************************************************
+ * Destroys the decoder
+ ********************************************************************/
+void pdf_stm_f_fax_decoder1d_destroy (pdf_stm_f_fax_decoder1d_t *decoder);
+
+/*********************************************************************
+ * Decode a line of 1D-encoded data. It will not run if error flags
+ * are up.
+ *
+ * @decoder - The decoder.
+ * @input_buffer - Input is read from here
+ * @output_buffer - Output is written here
+ * @finish - If true, it reads everything avaliable in input_buffer,
+ * otherwise it requires a minimum number of bits
+ * 
+ * @return - True if a full line was decoded, false otherwise
+ ********************************************************************/
+pdf_bool_t pdf_stm_f_fax_decoder1d_expand_row (pdf_stm_f_fax_decoder1d_t *decoder,
+                                               pdf_bit_buffer_t *input_buffer,
+                                               pdf_bit_buffer_t *output_buffer,
+                                               pdf_bool_t finish);
+
+/*********************************************************************
+ * Returns expected row length by the decoder
+ ********************************************************************/
+pdf_i32_t pdf_stm_f_fax_decoder1d_columns (pdf_stm_f_fax_decoder1d_t *decoder);
+
+/*********************************************************************
+ * True if not enough input
+ ********************************************************************/
+pdf_bool_t pdf_stm_f_fax_decoder1d_noinput (pdf_stm_f_fax_decoder1d_t *decoder);
+
+/*********************************************************************
+ * True if row's length is not columns()
+ ********************************************************************/
+pdf_bool_t pdf_stm_f_fax_decoder1d_badlength (pdf_stm_f_fax_decoder1d_t *decoder);
+
+/*********************************************************************
+ * True if an EOL was found prematurely
+ ********************************************************************/
+pdf_bool_t pdf_stm_f_fax_decoder1d_prematureeol (pdf_stm_f_fax_decoder1d_t \
*decoder); +
+/*********************************************************************
+ * True if an unrecognizable code was found
+ ********************************************************************/
+pdf_bool_t pdf_stm_f_fax_decoder1d_unrecognizedcode (pdf_stm_f_fax_decoder1d_t \
*decoder); +
+#endif  /* PDF_STM_F_FAX_PDF_STM_F_FAX_DECODER1D_H */

=== added file 'src/base/pdf-stm-f-fax-decoder2d.c'
--- src/base/pdf-stm-f-fax-decoder2d.c	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-decoder2d.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,1 @@
+#include <pdf-stm-f-fax-decoder2d.h>

=== added file 'src/base/pdf-stm-f-fax-decoder2d.h'
--- src/base/pdf-stm-f-fax-decoder2d.h	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-decoder2d.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,4 @@
+#ifndef PDF_STM_F_FAX_DECODER2D_H
+#define PDF_STM_F_FAX_DECODER2D_H
+
+#endif  /* PDF_STM_F_FAX_DECODER2D_H */

=== added file 'src/base/pdf-stm-f-fax-encoder.c'
--- src/base/pdf-stm-f-fax-encoder.c	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-encoder.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,457 @@
+/*********************************************************************
+ * Encoder.
+ ********************************************************************/
+#include <pdf-stm-f-fax-encoder.h>
+
+#include <tiff-fax.h>
+
+/* For faster access: */
+/* - parameters */
+#define K(fax) ((fax)->base->k)
+#define END_OF_LINE(fax) ((fax)->base->end_of_line)
+#define ENCODED_BYTE_ALIGN(fax) ((fax)->base->encoded_byte_align)
+#define COLUMNS(fax) ((fax)->base->columns)
+#define ROWS(fax) ((fax)->base->rows)
+#define END_OF_BLOCK(fax) ((fax)->base->end_of_block)
+#define BLACK_IS_1(fax) ((fax)->base->black_is_1)
+#define DAMAGED_ROWS_BEFORE_ERROR(fax) ((fax)->base->damaged_rows_before_error)
+/* - rest */
+#define INPUT_BUFFER(fax) ((fax)->base->input_buffer)
+#define OUTPUT_BUFFER(fax) ((fax)->base->output_buffer)
+#define LINE(fax) ((fax)->base->line)
+#define INC_LINE(fax) (fax)->base->line++
+
+/* Bit mask */
+static const pdf_u16_t _singlemask[17] = {
+  0x0000,			/* 0000 0000 0000 0000 */
+  0x0001,			/* 0000 0000 0000 0001 */
+  0x0002,			/* 0000 0000 0000 0010 */
+  0x0004,			/* 0000 0000 0000 0100 */
+  0x0008,			/* 0000 0000 0000 1000 */
+  0x0010,			/* 0000 0000 0001 0000 */
+  0x0020,			/* 0000 0000 0010 0000 */
+  0x0040,			/* 0000 0000 0100 0000 */
+  0x0080,			/* 0000 0000 1000 0000 */
+  0x0100,			/* 0000 0001 0000 0000 */
+  0x0200,			/* 0000 0010 0000 0000 */
+  0x0400,			/* 0000 0100 0000 0000 */
+  0x0800,			/* 0000 1000 0000 0000 */
+  0x1000,			/* 0001 0000 0000 0000 */
+  0x2000,			/* 0010 0000 0000 0000 */
+  0x4000,			/* 0100 0000 0000 0000 */
+  0x8000			/* 1000 0000 0000 0000 */
+};
+
+/*********************************************************************
+ * Finds a span of ones ('ones' true) or zeroes of length minor or
+ * equal to 'max_len'. Assumes enough input is avaliable at 'buf' and
+ * eats the input.
+ ********************************************************************/
+static pdf_i32_t
+encoder_find_span (pdf_bit_buffer_t *buf,
+                   int max_len,
+                   pdf_bool_t ones)
+{
+  PDF_ASSERT(buf);
+  PDF_ASSERT(0 <= max_len);
+
+  pdf_i32_t span = 0;
+
+  while (0 < max_len && pdf_bit_buffer_read (buf, 1) == ones) {
+    pdf_bit_buffer_forward(buf, 1);
+    span++;
+    max_len--;
+  }
+
+  return span;
+}
+
+
+/*********************************************************************
+ * Places first 'nbits' from 'bits' in the 'buf'. They must be
+ * completely reversed to fit the encoding. This is due to the
+ * following: codes [4] are taken from tables at t4.h, which are in
+ * human readable way (most significant bit at the biggest mem
+ * position); but the encoder/decoder reads from least to most
+ * significant bit.
+ * 
+ * This is going to be very inefficient, but Knuth says ...
+ *
+ * TODO: Modify tiff tables at t4.h to improve efficiency
+ ********************************************************************/
+static void
+encoder_put_bits (pdf_bit_buffer_t *buf,
+                  pdf_u16_t bits,
+                  int nbits)
+{
+  for (; 0 < nbits; nbits--) {
+    pdf_bit_buffer_write (buf,
+                          1,
+                          (bits & _singlemask[nbits]) >> (nbits - 1));
+  }
+}
+
+/*********************************************************************
+ * Write an EOL code to the bit buffer.  The zero-fill
+ * logic for byte-aligning encoded scanlines is handled
+ * here.
+ *
+ * We also handle writing the tag bit for the next
+ * scanline when doing 2d encoding (NOT IMPLEMENTED YET)
+ ********************************************************************/
+static void
+encoder_put_eol (pdf_bool_t byte_align,
+                 pdf_bool_t is2d,
+                 pdf_bit_buffer_t *buf)
+{
+  unsigned int code, length, tparm;
+
+  if (byte_align) {
+    /*
+     * Force bit alignment so EOL will terminate on
+     * a byte boundary.  That is, force the bit alignment
+     * to 16 - 12 = 4 before putting out the EOL code.
+     */
+    int align = 4;
+    int bit = pdf_bit_buffer_bits_written (buf) % 8;
+    if (align != bit) {
+      if (align > bit) {
+	align = bit + (8 - align);
+      } else {
+	align = bit - align;
+      }
+      code = 0;
+      tparm = align;
+      encoder_put_bits (buf, code, tparm);
+    }
+  }
+  code = EOL, length = 12;
+  encoder_put_bits (buf, code, length);
+}
+
+/*********************************************************************
+ * Places EOB.
+ ********************************************************************/
+static void
+encoder_put_eob (pdf_bit_buffer_t *buf)
+{
+  int i;
+  
+  for (i = 0; i < 6; i++) {
+    /* EOL is defined in t4.h */
+    encoder_put_bits (buf, (unsigned) EOL, (unsigned) 12);
+  }
+}
+
+/*********************************************************************
+ * Writes the sequence of codes that describes the specified span of
+ * zero's or one's. The  appropriate table that holds the make-up and
+ * terminating codes is supplied.
+ *
+ * buf: where to write
+ * span: span's length
+ * tab: code table
+ *
+ * Notice that passing a white code table places a white span and same
+ * for a black one.
+ ********************************************************************/
+static void
+encoder_put_span (pdf_bit_buffer_t *buf,
+                  pdf_i32_t span,
+                  const tableentry* tab)
+{
+  unsigned int code, length;
+
+  /* make-up extra code */
+  while (span >= 2624) {
+    const tableentry* te = &tab[63 + (2560 >> 6)];
+    code = te->code, length = te->length;
+    encoder_put_bits (buf, code, length);
+    span -= te->runlen;
+  }
+  
+  /* make-up code */
+  if (span >= 64) {
+    const tableentry* te = &tab[63 + (span>>6)];
+    PDF_ASSERT(te->runlen == 64 * (span >> 6));
+    code = te->code, length = te->length;
+    encoder_put_bits (buf, code, length);
+    span -= te->runlen;
+  }
+
+  /* terminal code */
+  code = tab[span].code, length = tab[span].length;
+  encoder_put_bits (buf, code, length);
+}
+
+/*********************************************************************
+ * Encodes a Group 3 1D row. Stores into 'dst'.
+ *
+ * end_of_line_p: if 'true' appends EOL code to the encoded row
+ * encoded_byte_align_p: if 'true' it fills the output to end at byte
+ * boundary. 
+ * black_is_1_p: 'true' if ones are to be interpreted as black
+ * pixels. 
+ * columns: row length (should be an 8 multiple)
+ * src: source (should contain a full row)
+ * dst: destination
+ ********************************************************************/
+static void
+encoder_g31d_encode_row (pdf_bool_t black_is_1,
+                         pdf_i32_t columns,
+                         pdf_bit_buffer_t *src,
+                         pdf_bit_buffer_t *dst)	
+{
+  PDF_ASSERT(0 < columns);
+  PDF_ASSERT(src);
+  PDF_ASSERT(dst);
+
+  pdf_i32_t span;
+
+  for (;;) {
+    span = encoder_find_span (src, columns, !black_is_1); /* white span */
+#ifdef G31DENCODER_DEBUG
+    fprintf(stderr, "encoder_g31d_row: found span of %u zeroes\n", span);
+#endif
+    encoder_put_span (dst, span, TIFFFaxWhiteCodes);
+
+    columns -= span;
+
+    if (columns <= 0) {
+      break;
+    }
+
+    span = encoder_find_span (src, columns, black_is_1); /* black span */
+#ifdef G31DENCODER_DEBUG
+    fprintf(stderr, "encoder_g31d_row: found span of %u ones\n", span);
+#endif
+    encoder_put_span (dst, span, TIFFFaxBlackCodes);
+
+    columns -= span;
+
+    if (columns <= 0) {
+      break;
+    }
+  }
+}
+
+
+
+/* -------------------- Public -------------------- */
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+pdf_stm_f_fax_encoder_t *
+pdf_stm_f_fax_encoder_new (pdf_i32_t  k,
+                           pdf_bool_t end_of_line,
+                           pdf_bool_t encoded_byte_align,
+                           pdf_i32_t  columns, 
+                           pdf_i32_t  rows,
+                           pdf_bool_t end_of_block,
+                           pdf_bool_t black_is_1,
+                           pdf_i32_t  damaged_rows_before_error)
+{
+  pdf_stm_f_fax_encoder_t *result = (pdf_stm_f_fax_encoder_t *) \
pdf_alloc(sizeof(pdf_stm_f_fax_encoder_t)); +
+  result->base = pdf_stm_f_fax_base_new (k,
+                                         end_of_line,
+                                         encoded_byte_align,
+                                         columns,
+                                         rows,
+                                         end_of_block,
+                                         black_is_1,
+                                         damaged_rows_before_error);
+
+  result->state = ENCODER_STATE_INIT;
+  
+  return result;
+}
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+void
+pdf_stm_f_fax_encoder_destroy (pdf_stm_f_fax_encoder_t *encoder)
+{
+  pdf_stm_f_fax_base_destroy (encoder->base);
+
+  pdf_dealloc (encoder);
+}
+
+/*********************************************************************
+ * Encodes a full document. Attempts to output as soon as it's
+ * avaliable. Once encoding is finished and all output is done, the
+ * encoder will not do anything else, but returning EOF on each
+ * call. Encoder's parameters interpretation is the one stated in
+ * pdf_stm_f_fax_apply_enc().
+ *
+ * Notice:
+ *
+ * Memory footprint can be big due to buffers.
+ *
+ * - Parameters:
+ * 
+ * enc: Group 3 1D encoder data.
+ * in: Input buffer. A new buffer each time this function is called.
+ * out: Output buffer. Will be considered empty and overwritten.
+ * finish: If true, the encoder will do it's last run. Following
+ *         calls will only get output, but no more processing will be
+ *         done.
+ * error: behaviour not defined yet.
+ *
+ * Returns NO_OUTPUT if 'out' is full, NO_INPUT if 'in' is empty,
+ * EOF if all done.
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_encoder_apply_g31d (pdf_stm_f_fax_encoder_t *encoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error)
+{
+  /* Cache input. This must be done since we are not sure in
+     which state the encoder is and can't lose any input data. */
+  pdf_stm_f_fax_base_fill_input (encoder->base, input_buffer);
+
+  while (PDF_TRUE) {
+    switch (encoder->state) {
+    case ENCODER_STATE_INIT:
+      PDF_DEBUG_BASE("encoderode_g31d_aplly: init row %d\n", LINE(encoder));
+
+      /* Begin a cycle. */
+      if (LINE(encoder) < ROWS(encoder)) {
+	encoder->state = ENCODER_STATE_DO_INPUT;
+      } else {
+	encoder->state = ENCODER_STATE_DO_EOF;
+      }
+      break;			/* ENCODER_STATE_INIT */
+
+
+    case ENCODER_STATE_DO_INPUT:
+      PDF_DEBUG_BASE("encoderode_g31d_aplly: doing input\n");
+
+      if (pdf_bit_buffer_bits_accum(INPUT_BUFFER(encoder)) < COLUMNS(encoder)) {
+        if (finish) {
+          /* if no more input and finish true, we're done */
+	  encoder->state = ENCODER_STATE_DO_EOF;
+	} else {
+	  return PDF_STM_FILTER_APPLY_STATUS_NO_INPUT;
+	}
+      } else {
+	encoder->state = ENCODER_STATE_ENCODE_ROW;
+      }
+      break;			/* ENCODER_STATE_DO_INPUT */
+
+
+    case ENCODER_STATE_DO_OUTPUT:
+      PDF_DEBUG_BASE("encoderode_g31d_aplly: doing output\n");
+
+      /* Flush output, except for the last incomplete byte */
+      if (!pdf_stm_f_fax_base_flush_output (encoder->base, output_buffer, \
PDF_FALSE)) { +        return PDF_STM_FILTER_APPLY_STATUS_NO_OUTPUT;
+      } else {
+	encoder->state = ENCODER_STATE_INIT;
+      }
+      break;    		/* ENCODER_STATE_DO_OUTPUT */
+
+
+    case ENCODER_STATE_DO_EOF:
+      PDF_DEBUG_BASE("encoderode_g31d_aplly: doing eof\n");
+
+      /* Place END_OF_FILE if applicable */
+
+      /* put EOF, if applicable */
+      if (END_OF_BLOCK(encoder)) {
+	PDF_DEBUG_BASE("encoderode_g31d_aplly: placing EOB\n");
+
+	encoder_put_eob(OUTPUT_BUFFER(encoder));
+      }
+
+      encoder->state = ENCODER_STATE_DO_FINAL_OUTPUT;
+      break;			/* ENCODER_STATE_DO_EOF */
+
+
+    case ENCODER_STATE_DO_FINAL_OUTPUT:
+	PDF_DEBUG_BASE("encoderode_g31d_aplly: doing final output\n");
+
+      /* Flush all remaining output */
+        if (!pdf_stm_f_fax_base_flush_output (encoder->base, output_buffer, \
PDF_TRUE)) { +	return PDF_STM_FILTER_APPLY_STATUS_NO_OUTPUT;
+      } else {
+	encoder->state = ENCODER_STATE_DONE;
+      }
+      break;    		/* ENCODER_STATE_DO_FINAL_OUTPUT */
+
+
+    case ENCODER_STATE_ENCODE_ROW:
+      /* Full row must be in cache. So, decode it and change to
+	 DO_OUTPUT. */
+      PDF_ASSERT(COLUMNS(encoder) <= \
pdf_bit_buffer_bits_accum(INPUT_BUFFER(encoder))); +      \
PDF_DEBUG_BASE("encoder_g31d_apply: encoding row %d\n", +                     \
LINE(encoder)); +
+      /* place EOL */
+      if (END_OF_LINE(encoder)) {
+	PDF_DEBUG_BASE("encoder_g31d_row: placing EOL\n");
+
+	encoder_put_eol (ENCODED_BYTE_ALIGN(encoder),
+                         PDF_FALSE,
+                         OUTPUT_BUFFER(encoder));
+      }
+
+      /* align bits */
+      if (ENCODED_BYTE_ALIGN(encoder)) {
+	PDF_DEBUG_BASE("encoderode_g31d_row: aligning to byte boundary\n");
+
+	pdf_bit_buffer_align_output(OUTPUT_BUFFER(encoder));
+      }
+      
+      encoder_g31d_encode_row(BLACK_IS_1(encoder),
+                              COLUMNS(encoder),
+                              INPUT_BUFFER(encoder),
+                              OUTPUT_BUFFER(encoder));
+      INC_LINE(encoder);
+     
+      encoder->state = ENCODER_STATE_DO_OUTPUT;
+      break;                    /* ENCODER_STATE_ENCODE_ROW */
+
+    case ENCODER_STATE_DONE:
+      /* Do nothig but returning EOF systematically */
+      PDF_DEBUG_BASE("encoder_g31d_apply: done\n");
+
+      return PDF_STM_FILTER_APPLY_STATUS_EOF; /* DEC_G31D_STATE_DONE */
+
+
+    default:
+      PDF_ASSERT_TRACE_NOT_REACHED();
+      break;
+    }
+  }
+}
+
+/*********************************************************************
+ * Not implemented
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_encoder_apply_g32d (pdf_stm_f_fax_encoder_t *encoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error)
+{
+  return PDF_STM_FILTER_APPLY_STATUS_OK;
+}
+
+/*********************************************************************
+ * Not implemented
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_encoder_apply_g4 (pdf_stm_f_fax_encoder_t *encoder,
+                                pdf_buffer_t            *input_buffer,
+                                pdf_buffer_t            *output_buffer,
+                                pdf_bool_t               finish,
+                                pdf_error_t            **error)
+{
+  return PDF_STM_FILTER_APPLY_STATUS_OK;
+}

=== added file 'src/base/pdf-stm-f-fax-encoder.h'
--- src/base/pdf-stm-f-fax-encoder.h	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax-encoder.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,94 @@
+#ifndef PDF_STM_F_FAX_ENCODER_H
+#define PDF_STM_F_FAX_ENCODER_H
+
+#include <pdf-stm-f-fax-base.h>
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+struct pdf_stm_f_fax_encoder_s 
+{
+  pdf_stm_f_fax_base_t *base;
+  
+  enum {
+    /* Begin. */
+    ENCODER_STATE_INIT,
+
+    /* Do input until a full row is in cache. */
+    ENCODER_STATE_DO_INPUT,
+
+    /* Do output except for last incomplete byte. */
+    ENCODER_STATE_DO_OUTPUT,
+
+    /* Do output until no more remaining. */
+    ENCODER_STATE_DO_FINAL_OUTPUT,
+
+    /* Encoded a full row. */
+    ENCODER_STATE_ENCODE_ROW,
+
+    /* Do last encoder's activities. */
+    ENCODER_STATE_DO_EOF,
+
+    /* All done, do nothing else. */
+    ENCODER_STATE_DONE
+  } state;
+};
+
+typedef struct pdf_stm_f_fax_encoder_s pdf_stm_f_fax_encoder_t;
+
+/*********************************************************************
+ * Constructor (see pdf-stm-f-fax-base.h)
+ ********************************************************************/
+pdf_stm_f_fax_encoder_t *
+pdf_stm_f_fax_encoder_new (pdf_i32_t  k,
+                           pdf_bool_t end_of_line,
+                           pdf_bool_t encoded_byte_align,
+                           pdf_i32_t  columns, 
+                           pdf_i32_t  rows,
+                           pdf_bool_t end_of_block,
+                           pdf_bool_t black_is_1,
+                           pdf_i32_t  damaged_rows_before_error);
+
+/*********************************************************************
+ * Destructor.
+ ********************************************************************/
+void
+pdf_stm_f_fax_encoder_destroy (pdf_stm_f_fax_encoder_t *encoder);
+
+/*********************************************************************
+ * CCITT Group 3 1D Fax Encoder. See [3].
+ *
+ * @decoder       - Decoder data.
+ * @input_buffer  - Input.
+ * @output_buffer - Output.
+ * @finish        - True if it's the final input received.
+ * @error         - Error reporting.
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_encoder_apply_g31d (pdf_stm_f_fax_encoder_t *encoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error);
+
+/*********************************************************************
+ * Not implemented
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_encoder_apply_g32d (pdf_stm_f_fax_encoder_t *encoder,
+                                  pdf_buffer_t            *input_buffer,
+                                  pdf_buffer_t            *output_buffer,
+                                  pdf_bool_t               finish,
+                                  pdf_error_t            **error);
+
+/*********************************************************************
+ * Not implemented
+ ********************************************************************/
+enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_encoder_apply_g4 (pdf_stm_f_fax_encoder_t *encoder,
+                                pdf_buffer_t            *input_buffer,
+                                pdf_buffer_t            *output_buffer,
+                                pdf_bool_t               finish,
+                                pdf_error_t            **error);
+
+#endif  /* PDF_STM_F_FAX_ENCODER_H */

=== added file 'src/base/pdf-stm-f-fax.c'
--- src/base/pdf-stm-f-fax.c	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,380 @@
+/* -*- mode: C -*-
+ *
+ *       File:         pdf-stm-f-fax.c
+ *       Date:         
+ *
+ *       GNU PDF Library - CCITT Fax encoder/decoder filter
+ *
+ */
+
+/* Copyright (C) 2007, 2008 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see
+ * <http://www.gnu.org/licenses/>. 
+ */
+
+/*********************************************************************
+ * This module is implemented using code from the TIFF 6.0 library.
+ *
+ * Introduction to CCITT Fax decoding:
+ *
+ * CCITT Fax decoding is bit based, not byte based. This makes it
+ * particularly difficult to understand and implement (it was for me
+ * at least). The image to encode/decode is seen as a matrix of pixels
+ * or, better spoken, as an array of rows. Each row is encoded/decoded
+ * separatedly. A row consists on alternate white and black 'runs' of
+ * pixels. A run is a uninterrupted line of pixels of the same color,
+ * i.e., black or white. To each run corresponds a Huffman code. For
+ * details see [1] and [2].
+ *
+ *
+ * Now, I'll explain the relationship between the standard [1] and
+ * this implementation. For encoding a simple algorith is used, based
+ * on TIFF library (see [4]). For decoding we use Frank Cringle's
+ * decoder from the same. I added comments to the decoder and encoder
+ * algorithms because TIFF library code is, according to me, ill
+ * documented and rather uneasy to understand.
+ *
+ * Notice that in order to map the runs to the code tables are used??
+ * (see the header t4.h). They are in human readable form, so, when??
+ * read or written to the buffers, they must be
+ * reversed. e.g. 10010001 must become 10001001 to be understood by
+ * the decoder. This is because it reads from least significant to
+ * most, while we, humans, read from most to least. It took a while
+ * for my poor human brain to figure that out :P.
+ *
+ * 
+ * The encoding/decoding functions at B.3/B.4 do the following (N.2):
+ *
+ * 1. They buffer the input and try to output everything they can.
+ *
+ * 2. They decode/encode if avaliable input (N.1), according to
+ * parameters. If no input is avaliable, they ask for
+ * more. Decoding/encoding is done line per line.
+ *
+ * 3. They flush output. If no output space is avaliable they ask for
+ * more.
+ *
+ * 4. If not finished, go back to 3.
+ *
+ * 5. Place finish stuff and return.
+ *
+ * N.1. They read a pdf_buffer one bit at a time, using a
+ * bit_buffer as a cache. Bits are read from least significant to
+ * most, from first byte in array to last.
+ *
+ * N.2. I use a FSM to implement this algorithm.
+ *
+ * 
+ * References:
+ * 
+
+ *
+ * 
+ * Source index:
+ *
+ * B. Private
+ * B.1. Support
+ * B.2. Encoder/Decoder's parameters
+ * B.3. Decoders
+ * B.3.1. Group 3 1D
+ * B.3.2. Group 3 2D
+ * B.3.3. Group 4
+ * B.3.5. data_decoder_t
+ * B.4. Encoders
+ * B.4.1. Common
+ * B.4.2. Group 3 1D
+ * B.4.3. Group 3 2D
+ * B.4.4. Group 4
+ * B.4.5. data_encoder_t
+ *
+ * A. Public
+ * A.1. pdf_stm_f_fax_conf_new(...)
+ * A.2. Methods overrided from base/pdf_stm_filter.h
+ * A.2.1. pdf_stm_filter_init
+ * A.2.2. pdf_stm_filter_apply
+ * A.2.3. pdf_stm_filtar_deinit
+ *
+ *
+ * 
+ * Written by Gustavo M Domato <gm.domato@gmail.com>
+ ********************************************************************/
+
+/* TODO List:
+ *
+ * at 'put_eol(...)': handle 2D EOL
+ *
+ * Problems:
+ *
+ * Bit I/O is too slow. Code is readable but inefficient.
+ *
+ * Note:
+ *
+ * pdf-helper functions not in the header, but exist.
+ *
+ * Idea:
+ *
+ * Problems with columns not multiple of 8 (for encoding or decoding??)
+ *
+ * Not tested for high values (make up code), but should work (it better
+ * does, since correcting that would be hell).
+ */
+
+/* -- Enable for debugging -- */
+/* #define G31DENCODER_DEBUG */
+/* #define G32DENCODER_DEBUG */
+/* #define G4ENCODER_DEBUG */
+
+/* #define G31DDECODER_DEBUG */
+/* #define G32DDECODER_DEBUG */
+/* #define G4DDECODER_DEBUG */
+
+
+#include <config.h>
+
+#include <pdf-stm-f-fax.h>
+
+#include <pdf-stm-f-fax-encoder.h>
+#include <pdf-stm-f-fax-decoder.h>
+
+#include <pdf-hash-helper.h>
+
+#include <pdf-stm-filter.h>
+
+
+/* The following is required by the API: */
+/* Define FAX encoder */
+PDF_STM_FILTER_DEFINE(pdf_stm_f_fax_enc_get,
+		      pdf_stm_f_fax_init_enc,
+		      pdf_stm_f_fax_apply_enc,
+		      pdf_stm_f_fax_deinit_enc);
+
+/* Define FAX decoder */
+PDF_STM_FILTER_DEFINE(pdf_stm_f_fax_dec_get,
+		      pdf_stm_f_fax_init_dec,
+		      pdf_stm_f_fax_apply_dec,
+		      pdf_stm_f_fax_deinit_dec);
+
+
+/*********************************************************************
+ * When creating a filter of this kind, you need to pass parameters.
+ * This function creates the hashtable and loads it correctly.
+ *
+ * Parameters follow the PDF specification [3].
+ ********************************************************************/
+pdf_hash_t *
+pdf_stm_f_fax_conf_new (pdf_i32_t                 k,
+			pdf_bool_t                end_of_line,
+			pdf_bool_t                encoded_byte_align,
+			pdf_i32_t                 columns,
+			pdf_i32_t                 rows,
+			pdf_bool_t                end_of_block,
+			pdf_bool_t                black_is_1,
+			pdf_i32_t                 damaged_rows_before_error)
+{
+  pdf_hash_t *ans = pdf_hash_new(NULL);
+
+  pdf_hash_add_i32(ans,
+		   "k", k,
+		   NULL);
+  pdf_hash_add_bool(ans,
+		  "end_of_line", end_of_line,
+		  NULL);
+  pdf_hash_add_bool(ans,
+		    "encoded_byte_align", encoded_byte_align,
+		  NULL);
+  pdf_hash_add_i32(ans,
+		  "columns", columns,
+		  NULL);
+  pdf_hash_add_i32(ans,
+		  "rows", rows,
+		  NULL);
+  pdf_hash_add_bool(ans,
+		  "end_of_block", end_of_block,
+		  NULL);
+  pdf_hash_add_bool(ans,
+		  "black_is_1", black_is_1,
+		  NULL);
+  pdf_hash_add_i32(ans,
+		  "damaged_rows_before_error", damaged_rows_before_error,
+		  NULL);
+		  
+  return ans;
+}
+
+
+/*********************************************************************
+ * Overrides pdf_stm_filter_init for encoder.
+ ********************************************************************/
+static pdf_bool_t
+pdf_stm_f_fax_init_enc (const pdf_hash_t  *parameters,
+			void             **state,
+			pdf_error_t      **error)
+{
+  pdf_stm_f_fax_encoder_t **data = (pdf_stm_f_fax_encoder_t **) state;
+
+  *data = pdf_stm_f_fax_encoder_new (pdf_hash_get_i32  (parameters, "k"),
+                                     pdf_hash_get_bool (parameters, "end_of_line"),
+                                     pdf_hash_get_bool (parameters, \
"encoded_byte_align"), +                                     pdf_hash_get_i32  \
(parameters, "columns"), +                                     pdf_hash_get_i32  \
(parameters, "rows"), +                                     pdf_hash_get_bool \
(parameters, "end_of_block"), +                                     pdf_hash_get_bool \
(parameters, "black_is_1"), +                                     pdf_hash_get_i32  \
(parameters, "damaged_rows_before_error")); +  
+  pdf_set_error (error, PDF_EDOMAIN_BASE_STM, PDF_OK, "Success");
+
+  return PDF_TRUE;
+}
+
+/*********************************************************************
+ * Overrides pdf_stm_filter_init for decoder.
+ ********************************************************************/
+static pdf_bool_t
+pdf_stm_f_fax_init_dec (const pdf_hash_t  *parameters,
+			void             **state,
+			pdf_error_t      **error)
+{
+  pdf_stm_f_fax_decoder_t **data = (pdf_stm_f_fax_decoder_t **) state;
+
+  *data = pdf_stm_f_fax_decoder_new (pdf_hash_get_i32  (parameters, "k"),
+                                     pdf_hash_get_bool (parameters, "end_of_line"),
+                                     pdf_hash_get_bool (parameters, \
"encoded_byte_align"), +                                     pdf_hash_get_i32  \
(parameters, "columns"), +                                     pdf_hash_get_i32  \
(parameters, "rows"), +                                     pdf_hash_get_bool \
(parameters, "end_of_block"), +                                     pdf_hash_get_bool \
(parameters, "black_is_1"), +                                     pdf_hash_get_i32  \
(parameters, "damaged_rows_before_error")); +  
+  pdf_set_error (error, PDF_EDOMAIN_BASE_STM, PDF_OK, "Success");
+
+  return PDF_TRUE;
+}
+
+
+/* -------------------- A.3. pdf_stm_filter_apply_*(...) -------------------- */
+/*********************************************************************
+ * Overrides pdf_stm_filter_apply for encoder.
+ *
+ * How parameters [3] are interpreted:
+ *
+ * Rows is always valid. This means that encoding will proceed until
+ * enough rows are encoded or no more input is avaliable and finish is
+ * true (notice that an early finish is not considered an
+ * error). However, if finish is false, it will keep asking for more
+ * input. 
+ *
+ * EndOfBlock means EOB is appended at the end of the output.
+ *
+ * EndOfLinte will place EOL code at the beggining of each line. This
+ * behaviour was taken from TIFF library.
+ *
+ * EncodedByteAlign, BlackIs1 are self explanatory.
+ *
+ * Colums will be rounded to smallest multiple of eight bigger that
+ * itself and encoding will proceed that way. Notice I'm not really
+ * expecting any non multiples of eight to be passed.
+ *
+ * DamagedRowsBeforeError is ignored.
+ ********************************************************************/
+static enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_apply_enc (void         *state,
+			 pdf_buffer_t *in,
+			 pdf_buffer_t *out,
+			 pdf_bool_t    finish,
+			 pdf_error_t **error)
+{
+  pdf_stm_f_fax_encoder_t *data = (pdf_stm_f_fax_encoder_t *) state;
+
+  if (data->base->k < 0) {
+    /* Group 3 1D [3] */
+    return pdf_stm_f_fax_encoder_apply_g31d (data,
+                                             in,
+                                             out,
+                                             finish,
+                                             error);
+  } else if (data->base->k == 0) {
+    /* Group 3 2D [3] */
+    /* return pdf_stm_f_fax_encoder_apply_g32d (data, */
+    /*                                         in, */
+    /*                                         out, */
+    /*                                         finish, */
+    /*                                         error); */
+  } else {
+    /* Group 4 [3] */
+    /* return pdf_stm_f_fax_encoder_apply_g4 (data, */
+    /*                                        in, */
+    /*                                        out, */
+    /*                                        finish, */
+    /*                                        error); */
+  }
+}
+
+/*********************************************************************
+ * Overrides pdf_stm_filter_apply for decoder
+ ********************************************************************/
+static enum pdf_stm_filter_apply_status_e
+pdf_stm_f_fax_apply_dec (void         *state,
+			 pdf_buffer_t *in,
+			 pdf_buffer_t *out,
+			 pdf_bool_t    finish,
+			 pdf_error_t **error)
+{
+  pdf_stm_f_fax_decoder_t *data = (pdf_stm_f_fax_decoder_t *) state;
+
+  if (data->base->k < 0) {
+    /* Group 3 1D [3] */
+    return pdf_stm_f_fax_decoder_apply_g31d (data,
+                                             in,
+                                             out,
+                                             finish,
+                                             error);
+  } else if (data->base->k == 0) {
+    /* Group 3 2D [3] */
+    /* return pdf_stm_f_fax_decoder_apply_g32d (data, */
+    /*                                         in, */
+    /*                                         out, */
+    /*                                         finish, */
+    /*                                         error); */
+  } else {
+    /* Group 4 [3] */
+    /* return pdf_stm_f_fax_decoder_apply_g4 (data, */
+    /*                                        in, */
+    /*                                        out, */
+    /*                                        finish, */
+    /*                                        error); */
+  }
+}
+
+/* ----- A.2.3. pdf_stm_filter_deinit ----- */
+/*********************************************************************
+ * Overrides pdf_stm_filter_deinit encoder.
+ ********************************************************************/
+static void
+pdf_stm_f_fax_deinit_enc (void *state)
+{
+    pdf_stm_f_fax_encoder_destroy((pdf_stm_f_fax_encoder_t *) state);
+}
+
+/*********************************************************************
+ * Overrides pdf_stm_filter_deinit decoder.
+ ********************************************************************/
+static void
+pdf_stm_f_fax_deinit_dec (void *state)
+{
+  pdf_stm_f_fax_decoder_destroy((pdf_stm_f_fax_decoder_t *) state);
+  
+}
+
+/* End of pdf_stm_f_fax.c */

=== added file 'src/base/pdf-stm-f-fax.h'
--- src/base/pdf-stm-f-fax.h	1970-01-01 00:00:00 +0000
+++ src/base/pdf-stm-f-fax.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,69 @@
+/* -*- mode: C -*-
+ *
+ *       File:         pdf-stm-f-fax.h
+ *       Date:         Sun Aug  5 19:46:07 2007
+ *
+ *       GNU PDF Library - CCITT Fax encoder/decoder
+ *
+ */
+
+/* Copyright (C) 2007, 2008 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/********************************************************************
+ * To read this module's related files (pdf-stm-f-fax-*), this is the
+ * references' list:
+ *
+ * [1] ITU-T Rec T.4
+ * [2] ITU-T Rec T.6
+ * [3] PDF Reference Third Edition, Section 3.3.5
+ * [4] TIFF Revision 6.0, Section 11
+ * [5] TIFF Class F Specification
+ *
+ * Gustavo M Domato <gm.domato@gmail.com>
+ *******************************************************************/
+#ifndef PDF_STM_F_FAX_H
+#define PDF_STM_F_FAX_H
+
+#include <config.h>
+
+#include <pdf-stm-filter.h>
+
+#include <pdf-hash.h>
+#include <pdf-types.h>
+
+const pdf_stm_filter_impl_t *pdf_stm_f_fax_enc_get (void);
+
+const pdf_stm_filter_impl_t *pdf_stm_f_fax_dec_get (void);
+
+
+/* Utilitary functions */
+
+/* Use this to create 'params' to pass to pdf_stm_f_fax_init(...)
+   For the meaning of these, see [3]. */
+pdf_hash_t *
+pdf_stm_f_fax_conf_new (pdf_i32_t                 k,
+			pdf_bool_t                end_of_line,
+			pdf_bool_t                encoded_byte_align,
+			pdf_i32_t                 columns,
+			pdf_i32_t                 rows,
+			pdf_bool_t                end_of_block,
+			pdf_bool_t                black_is_1,
+			pdf_i32_t                 damaged_rows_before_error);
+
+#endif /* pdf_stm_f_fax.h */
+
+/* End of pdf_stm_f_fax.h */

=== modified file 'src/base/pdf-stm-filter.c'
--- src/base/pdf-stm-filter.c	2011-07-30 21:08:22 +0000
+++ src/base/pdf-stm-filter.c	2011-10-03 17:39:18 +0000
@@ -35,6 +35,7 @@
 #include <pdf-stm-f-lzw.h>
 #include <pdf-stm-f-a85.h>
 #include <pdf-stm-f-pred.h>
+#include <pdf-stm-f-fax.h>
 
 /* Build-dependent filters */
 
@@ -84,8 +85,8 @@
   { "FLATE decoder",     pdf_stm_f_flatedec_get },
   { "RunLength encoder", pdf_stm_f_rlenc_get    },
   { "RunLength decoder", pdf_stm_f_rldec_get    },
-  { "CCITT Fax encoder", NULL                   },
-  { "CCITT Fax decoder", NULL                   },
+  { "CCITT Fax encoder", pdf_stm_f_fax_enc_get  },
+  { "CCITT Fax decoder", pdf_stm_f_fax_dec_get  },
   { "JBIG2 encoder",     NULL                   },
   { "JBIG2 decoder",     pdf_stm_f_jbig2dec_get },
   { "DCT encoder",       NULL                   },

=== modified file 'src/base/pdf-stm-filter.h'
--- src/base/pdf-stm-filter.h	2011-05-18 19:34:53 +0000
+++ src/base/pdf-stm-filter.h	2011-10-03 17:39:18 +0000
@@ -59,8 +59,8 @@
   PDF_STM_FILTER_FLATE_DEC, /* Only if libz available */
   PDF_STM_FILTER_RL_ENC,
   PDF_STM_FILTER_RL_DEC,
-  PDF_STM_FILTER_CCITTFAX_ENC, /* TODO */
-  PDF_STM_FILTER_CCITTFAX_DEC, /* TODO */
+  PDF_STM_FILTER_CCITTFAX_ENC, /* Group 3 1D avaliable */
+  PDF_STM_FILTER_CCITTFAX_DEC, /* Group 3 1D avaliable */
   PDF_STM_FILTER_JBIG2_ENC, /* TODO, see FS#100 */
   PDF_STM_FILTER_JBIG2_DEC, /* Only if libjbig2dec available */
   PDF_STM_FILTER_DCT_ENC,   /* TODO, see FS#73 */

=== added file 'src/base/pdf-types-bit_buffer.c'
--- src/base/pdf-types-bit_buffer.c	1970-01-01 00:00:00 +0000
+++ src/base/pdf-types-bit_buffer.c	2011-10-03 17:39:18 +0000
@@ -0,0 +1,270 @@
+#include <pdf-types-bit_buffer.h>
+
+#include <pdf-alloc.h>
+#include <pdf-error.h>
+#include <pdf-types.h>
+
+/*********************************************************************
+ * Buffer of bits. Similar to pdf_buffer in that it has write and read
+ * pointers, but, due to it's complexity, shouldn't be accessed
+ * directly, but only using it's methods.
+ *
+ * Bits are placed in an array [data] and addressed
+ * using an array index [?add] and a bit displacement index
+ * [?bit]. For example: wadd = 4, wbit = 7 means write pointer points
+ * at bit 7 of data[4].
+ ********************************************************************/
+static struct pdf_bit_buffer_s {
+  pdf_u32_t *data;		/* data */
+
+  pdf_u32_t wadd;		/* write address pointer */
+  pdf_size_t wbit;		/* write bit pointer */
+
+  pdf_u32_t radd;		/* read address pointer */
+  pdf_size_t rbit;		/* read bit pointer */
+
+  pdf_size_t size;		/* size in u32s */
+};
+
+#define PDF_BIT_BUFFER_ALLOC_SIZE 1024
+
+/* Bit masks */
+static const pdf_u32_t _bitmask[33] = {
+  0x00000000,			/* 0000 0000 0000 0000 0000 0000 0000 0000 */
+  0x00000001,			/* 0000 0000 0000 0000 0000 0000 0000 0001 */
+  0x00000003,			/* 0000 0000 0000 0000 0000 0000 0000 0011 */
+  0x00000007,			/* 0000 0000 0000 0000 0000 0000 0000 0111 */
+  0x0000000f,			/* 0000 0000 0000 0000 0000 0000 0000 1111 */
+  0x0000001f,			/* 0000 0000 0000 0000 0000 0000 0001 1111 */
+  0x0000003f,			/* 0000 0000 0000 0000 0000 0000 0011 1111 */
+  0x0000007f,			/* 0000 0000 0000 0000 0000 0000 0111 1111 */
+  0x000000ff,			/* 0000 0000 0000 0000 0000 0000 1111 1111 */
+  0x000001ff,			/* 0000 0000 0000 0000 0000 0001 1111 1111 */
+  0x000003ff,			/* 0000 0000 0000 0000 0000 0011 1111 1111 */
+  0x000007ff,			/* 0000 0000 0000 0000 0000 0111 1111 1111 */
+  0x00000fff,			/* 0000 0000 0000 0000 0000 1111 1111 1111 */
+  0x00001fff,			/* 0000 0000 0000 0000 0001 1111 1111 1111 */
+  0x00003fff,			/* 0000 0000 0000 0000 0011 1111 1111 1111 */
+  0x00007fff,			/* 0000 0000 0000 0000 0111 1111 1111 1111 */
+  0x0000ffff,			/* 0000 0000 0000 0000 1111 1111 1111 1111 */
+
+  0x0001ffff,			/* 0000 0000 0000 0001 1111 1111 1111 1111 */
+  0x0003ffff,			/* 0000 0000 0000 0011 1111 1111 1111 1111 */
+  0x0007ffff,			/* 0000 0000 0000 0111 1111 1111 1111 1111 */
+  0x000fffff,			/* 0000 0000 0000 1111 1111 1111 1111 1111 */
+  0x001fffff,			/* 0000 0000 0001 1111 1111 1111 1111 1111 */
+  0x003fffff,			/* 0000 0000 0011 1111 1111 1111 1111 1111 */
+  0x007fffff,			/* 0000 0000 0111 1111 1111 1111 1111 1111 */
+  0x00ffffff,			/* 0000 0000 1111 1111 1111 1111 1111 1111 */
+  0x01ffffff,			/* 0000 0001 1111 1111 1111 1111 1111 1111 */
+  0x03ffffff,			/* 0000 0011 1111 1111 1111 1111 1111 1111 */
+  0x07ffffff,			/* 0000 0111 1111 1111 1111 1111 1111 1111 */
+  0x0fffffff,			/* 0000 1111 1111 1111 1111 1111 1111 1111 */
+  0x1fffffff,			/* 0001 1111 1111 1111 1111 1111 1111 1111 */
+  0x3fffffff,			/* 0011 1111 1111 1111 1111 1111 1111 1111 */
+  0x7fffffff,			/* 0111 1111 1111 1111 1111 1111 1111 1111 */
+  0xffffffff,			/* 1111 1111 1111 1111 1111 1111 1111 1111 */
+};
+
+#define pdf_bit_buffer_inc_ptr(add, bit, n) {if ((bit) + (n) < 32) {	\
+      (bit) += (n);} else {(bit) += (n); (bit) -= 32; (add)++;} }
+
+#define pdf_bit_buffer_inc_wp(b, n) pdf_bit_buffer_inc_ptr((b)->wadd, (b)->wbit, \
(n)) +#define pdf_bit_buffer_inc_rp(b, n) pdf_bit_buffer_inc_ptr((b)->radd, \
(b)->rbit, (n))  +
+/*********************************************************************
+ * Resizes the buffer.
+ ********************************************************************/
+static void
+pdf_bit_buffer_resize(pdf_bit_buffer_t *b, pdf_size_t new_size)
+{
+  if (new_size <= b->size) {
+    return;
+  }
+  
+  pdf_u32_t *new_data = (pdf_u32_t *) pdf_realloc(b->data, new_size * \
sizeof(pdf_u32_t)); +
+  PDF_ASSERT(new_data);
+
+  b->data = new_data;
+
+  b->size = new_size;
+}
+
+/* -------------------- Public -------------------- */
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+pdf_bit_buffer_t *
+pdf_bit_buffer_new(void)
+{
+  pdf_bit_buffer_t *b = (pdf_bit_buffer_t *) pdf_alloc(sizeof(pdf_bit_buffer_t));
+
+  b->data = (pdf_u32_t *) pdf_alloc(sizeof(pdf_u32_t) * PDF_BIT_BUFFER_ALLOC_SIZE);
+
+  b->wadd = 0; 
+  b->wbit = 0;
+  
+  b->radd = 0;
+  b->wadd = 0;
+
+  b->size = PDF_BIT_BUFFER_ALLOC_SIZE;
+
+  return b;
+}
+
+/*********************************************************************
+ * 
+ ********************************************************************/
+void
+pdf_bit_buffer_destroy(pdf_bit_buffer_t *b)
+{
+  PDF_ASSERT(b);
+  
+  pdf_dealloc(b->data);
+  pdf_dealloc(b);
+}
+
+/*********************************************************************
+ *
+ ********************************************************************/
+pdf_u32_t
+pdf_bit_buffer_bits_read(const pdf_bit_buffer_t *b)
+{
+  return b->radd * 32 + b->rbit;
+}
+
+/*********************************************************************
+ *
+ ********************************************************************/
+pdf_u32_t
+pdf_bit_buffer_bits_written(const pdf_bit_buffer_t *b)
+{
+  return b->wadd * 32 + b->wbit;
+}
+
+/*********************************************************************
+ * Unreads 'n' bits.
+ *
+ * 0 <= n && n <= pdf_bit_buffer_bits_read()
+ ********************************************************************/
+void
+pdf_bit_buffer_forward(pdf_bit_buffer_t *b, pdf_u32_t n)
+{
+  PDF_ASSERT(b);
+  /* PDF_ASSERT(0 <= n */
+  /* 	 && (n + pdf_bit_buffer_bits_read(b) */
+  /* 	     <= pdf_bit_buffer_bits_written(b))); */
+  if (!(0 <= n && (n + pdf_bit_buffer_bits_read(b)
+		   <= pdf_bit_buffer_bits_written(b)))) {
+    fprintf(stderr,
+	    "n = %ld, read = %ld, written = %ld\n",
+	    n,
+	    pdf_bit_buffer_bits_read(b),
+	    pdf_bit_buffer_bits_written(b));
+  }
+
+  b->rbit += n;
+
+  while (31 < b->rbit) {
+    b->rbit -= 32;
+    b->radd++;
+  }
+}
+
+/*********************************************************************
+ * Reads up to 'n' bits and returns them without advancing read
+ * pointer.
+ * 
+ * 0 <= n <= 32 && n <= pdf_bit_buffer_bits_accum()
+ ********************************************************************/
+pdf_u32_t
+pdf_bit_buffer_read(const pdf_bit_buffer_t *b, int n)
+{
+  PDF_ASSERT(b);
+  PDF_ASSERT(0 <= n && n <= 32);
+  PDF_ASSERT(n <= pdf_bit_buffer_bits_accum(b));
+
+  pdf_u32_t ans = 0;
+
+  if (32 - b->rbit < n) {
+    ans |= b->data[b->radd] >> b->rbit;
+    ans |= b->data[b->radd + 1] << (32 - b->rbit);
+  } else {
+    ans |= b->data[b->radd] >> b->rbit;
+  }
+
+  ans &= _bitmask[n];
+	  
+  return ans;    
+}
+
+/*********************************************************************
+ * Unreads 'n' bits.
+ *
+ * 0 <= n && n <= pdf_bit_buffer_bits_read()
+ ********************************************************************/
+void
+pdf_bit_buffer_rewind(pdf_bit_buffer_t *b, pdf_u32_t n)
+{
+  PDF_ASSERT(b);
+  PDF_ASSERT(0 <= n && n <= pdf_bit_buffer_bits_read(b));
+
+  while (b->rbit < n) {
+    b->radd--;
+    n -= 32;
+  }
+
+  b->rbit -= n;
+}
+
+/*********************************************************************
+ * Writes 'n' bytes from 'd'. Advances write pointer. Resizes
+ * automatically. 
+ *
+ * 0 <= n <= 32 
+ *
+ * b: buffer
+ * n: amout of bits from d to be stored
+ * d: bits to be stored
+ ********************************************************************/
+void
+pdf_bit_buffer_write(pdf_bit_buffer_t *b, int n, pdf_u32_t x)
+{
+  PDF_ASSERT(b);
+  PDF_ASSERT(0 <= n && n <= 32);
+
+  if ((b->wadd + 1 < b->size)) {
+    pdf_bit_buffer_resize(b, b->size + PDF_BIT_BUFFER_ALLOC_SIZE);
+  }
+  
+  if (32 - b->wbit < n) {
+    b->data[b->wadd] |= x << b->wbit;
+    b->data[b->wadd + 1] = (x >> (32 - b->wbit)) & _bitmask[n - (32 - b->wbit)];
+  } else {
+    if (b->wbit == 0) {
+      b->data[b->wadd] = (x & _bitmask[n]) << b->wbit;
+    } else {
+      b->data[b->wadd] |= (x & _bitmask[n]) << b->wbit;
+    }
+  }
+
+  pdf_bit_buffer_inc_wp(b, n);
+}
+
+/* -------------------- Convenience methods -------------------- */
+
+void
+pdf_bit_buffer_write_n(pdf_bit_buffer_t *b, int n, pdf_bool_t ones)
+{
+  PDF_ASSERT(b);
+  PDF_ASSERT(0 <= n);
+
+  while (32 < n) {
+    pdf_bit_buffer_write(b, 32, ones ? _bitmask[32] : _bitmask[0]);
+    n -= 32;
+  }
+
+  pdf_bit_buffer_write(b, n, ones ? _bitmask[32] : _bitmask[0]);
+}

=== added file 'src/base/pdf-types-bit_buffer.h'
--- src/base/pdf-types-bit_buffer.h	1970-01-01 00:00:00 +0000
+++ src/base/pdf-types-bit_buffer.h	2011-10-03 17:39:18 +0000
@@ -0,0 +1,107 @@
+/*********************************************************************
+ * A bit buffer.
+ *
+ * Basic methods are those essential for the TAD. Convenience are
+ * based on the former and just add comfort to the client.
+ *
+ * @preconditions
+ * - rewind(b, n) req n <= bits_read(b)
+ * - forward(b, n) req n + bits_written(b) <= bits_read(b)
+ * - read(b, n) req same as forward(b, n)
+ * - for previous 0 <= n <= 32 (thats an implementation limitation due
+ *   to integer size)
+ *
+ * @axioms
+ * - 0 <= bits_read(b) <= bits_written(b)
+ * - bits_written(new()) = bits_read(new()) = 0
+ * - bits_read(forward(b, n) = bits_read(b) + n
+ * - bits_read(rewind(b, n) = bits_read(b) - n
+ * - bits_written(write(b, n)) = bits_written(b) + n
+ * - if bits_read(b, n) = bits_written(b, n)
+ *   then read(write(b, n, x), n) = x (first n bits)
+ *   else ... (do it if you dare :P)
+ ********************************************************************/
+#ifndef PDF_TYPES_BIT_BUFFER_H
+#define PDF_TYPES_BIT_BUFFER_H
+
+#include <config.h>
+
+#include <pdf-error.h>
+#include <pdf-types.h>
+
+
+/* -------------------- Basic types and methods -------------------- */
+typedef struct pdf_bit_buffer_s pdf_bit_buffer_t;
+
+/*********************************************************************
+ * Constructor
+ ********************************************************************/
+pdf_bit_buffer_t *pdf_bit_buffer_new(void);
+
+/*********************************************************************
+ * Destructor
+ ********************************************************************/
+void             pdf_bit_buffer_destroy(pdf_bit_buffer_t *b);
+
+
+/*********************************************************************
+ * @return bits read far
+ ********************************************************************/
+pdf_u32_t        pdf_bit_buffer_bits_read(const pdf_bit_buffer_t *b);
+
+/*********************************************************************
+ * @return bits written
+ ********************************************************************/
+pdf_u32_t        pdf_bit_buffer_bits_written(const pdf_bit_buffer_t *b);
+
+/*********************************************************************
+ * Forwards reading n bits
+ ********************************************************************/
+void             pdf_bit_buffer_forward(pdf_bit_buffer_t *b,
+					pdf_u32_t n);
+
+/*********************************************************************
+ * @return n bits read
+ ********************************************************************/
+pdf_u32_t        pdf_bit_buffer_read(const pdf_bit_buffer_t *b,
+				     int n);
+
+/*********************************************************************
+ * Rewinds reading n bits
+ ********************************************************************/
+void             pdf_bit_buffer_rewind(pdf_bit_buffer_t *b,
+				       pdf_u32_t n);
+
+/*********************************************************************
+ * Writes n bits from x
+ ********************************************************************/
+void             pdf_bit_buffer_write(pdf_bit_buffer_t *b,
+				      int n,
+				      pdf_u32_t x);
+
+/* -------------------- Convenience methods --------------------    */
+
+#define pdf_bit_buffer_bits_accum(b) (pdf_bit_buffer_bits_written(b) - \
pdf_bit_buffer_bits_read(b)) +
+#define pdf_bit_buffer_align_input(b) do {			\
+    unsigned __offset;						\
+    if (0 < (__offset = pdf_bit_buffer_bits_read(b) % 8)) {	\
+      pdf_bit_buffer_forward((b), 8 - __offset);		\
+    }								\
+  } while (0)
+
+#define pdf_bit_buffer_align_output(b) do {			\
+    unsigned __offset;						\
+    if (0 < (__offset = pdf_bit_buffer_bits_written(b) % 8)) {	\
+      pdf_bit_buffer_write((b), 8 - __offset, 0);		\
+    }								\
+  } while (0)
+
+/*********************************************************************
+ * Writes n bits of same type (ones = FALSE => 0 else 1)
+ ********************************************************************/
+void pdf_bit_buffer_write_n(pdf_bit_buffer_t *b,
+			    int n,
+			    pdf_bool_t ones);
+
+#endif /* !PDF_TYPES_BIT_BUFFER_H */

=== modified file 'src/base/pdf-types-buffer.c'
--- src/base/pdf-types-buffer.c	2011-04-27 19:30:44 +0000
+++ src/base/pdf-types-buffer.c	2011-10-03 17:39:18 +0000
@@ -133,6 +133,15 @@
   return PDF_TRUE;
 }
 
+pdf_uchar_t
+pdf_buffer_read(pdf_buffer_t *b)
+{
+  PDF_ASSERT (b);
+  PDF_ASSERT (!pdf_buffer_eob_p(b));
+
+  return b->data[b->rp++];
+}
+
 void
 pdf_buffer_rewind (pdf_buffer_t *buffer)
 {
@@ -142,4 +151,13 @@
   buffer->wp = 0;
 }
 
+void
+pdf_buffer_write(pdf_buffer_t *b, pdf_uchar_t v)
+{
+  PDF_ASSERT (b);
+  PDF_ASSERT (!pdf_buffer_full_p(b));
+
+  b->data[b->wp++] = v;
+}
+
 /* End of pdf-types-buffer.c */

=== modified file 'src/base/pdf-types-buffer.h'
--- src/base/pdf-types-buffer.h	2011-04-27 19:30:44 +0000
+++ src/base/pdf-types-buffer.h	2011-10-03 17:39:18 +0000
@@ -63,9 +63,15 @@
                               pdf_size_t     newsize,
                               pdf_error_t  **error);
 
+/* Read and forward rp */
+pdf_uchar_t pdf_buffer_read(pdf_buffer_t *b);
+
 /* Rewind a buffer */
 void pdf_buffer_rewind (pdf_buffer_t *buffer);
 
+/* Write and forward wp */
+void pdf_buffer_write(pdf_buffer_t *b, pdf_uchar_t v);
+
 /* END PUBLIC */
 
 #endif /* !PDF_TYPES_BUFFER_H */

=== modified file 'utils/pdf-filter.c'
--- utils/pdf-filter.c	2011-10-01 18:30:39 +0000
+++ utils/pdf-filter.c	2011-10-03 17:39:18 +0000
@@ -72,8 +72,9 @@
   ASCIIHEXENC_FILTER_ARG,
   ASCII85DEC_FILTER_ARG,
   ASCII85ENC_FILTER_ARG,
-#if 0
+  CCITTFAXENC_FILTER_ARG,
   CCITTFAXDEC_FILTER_ARG,
+#if 0
   JXPDEC_FILTER_ARG,
 #endif /* 0 */
   PRED_COLORS_ARG,
@@ -154,8 +155,9 @@
     {"pred-colors", required_argument, NULL, PRED_COLORS_ARG},
     {"pred-bpc", required_argument, NULL, PRED_BITSPERCOMPONENT_ARG},
     {"pred-columns", required_argument, NULL, PRED_COLUMNS_ARG},
-#if 0
     {"cfaxdec", no_argument, NULL, CCITTFAXDEC_FILTER_ARG},
+    {"cfaxenc", no_argument, NULL, CCITTFAXENC_FILTER_ARG},
+#if 0
     {"jxpdec", no_argument, NULL, JXPDEC_FILTER_ARG},
 #endif /* 0 */
 #ifdef PDF_HAVE_LIBJPEG
@@ -728,11 +730,54 @@
             break;
           }
 
-#if 0
         case CCITTFAXDEC_FILTER_ARG:
           {
-            break;
-          }
+	    if (!pdf_stm_install_filter (stm,
+                                         PDF_STM_FILTER_CCITTFAX_DEC,
+                                         pdf_stm_f_fax_conf_new(-1,
+								PDF_TRUE,
+								PDF_TRUE,
+								216,
+								17 * 8,
+								PDF_TRUE,
+								PDF_TRUE,
+								0),
+                                         &error))
+              {
+                pdf_error (pdf_error_get_status (error),
+                           stderr,
+                           "while installing the CCITTFAX decoder filter: '%s'",
+                           pdf_error_get_message (error));
+                exit (EXIT_FAILURE);
+              }
+
+            break;
+          }
+        case CCITTFAXENC_FILTER_ARG:
+          {
+	    if (!pdf_stm_install_filter (stm,
+                                         PDF_STM_FILTER_CCITTFAX_ENC,
+                                         pdf_stm_f_fax_conf_new(-1,
+								PDF_TRUE,
+								PDF_TRUE,
+								216,
+								17 * 8,
+								PDF_TRUE,
+								PDF_TRUE,
+								0),
+                                         &error))
+              {
+                pdf_error (pdf_error_get_status (error),
+                           stderr,
+                           "while installing the CCITTFAX decoder filter: '%s'",
+                           pdf_error_get_message (error));
+                exit (EXIT_FAILURE);
+              }
+
+            break;
+          }
+
+#if 0
         case JXPDEC_FILTER_ARG:
           {
             break;

# Begin bundle
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



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic