Commit a83b7b0611dfa0063e0c95a4b6722501feb99a17
1 parent
7f8c4b18
Tests with manually constructed qpdf json
Showing
6 changed files
with
481 additions
and
11 deletions
TODO
| @@ -97,10 +97,6 @@ General things to remember: | @@ -97,10 +97,6 @@ General things to remember: | ||
| 97 | 97 | ||
| 98 | * Add json to the large file tests. | 98 | * Add json to the large file tests. |
| 99 | 99 | ||
| 100 | -* Object representation tests | ||
| 101 | - * "b:cf80", "b:CF80", "u:π", "u:\u03c0" | ||
| 102 | - * "b:d83edd54", "u:🥔", "u:\ud83e\udd54" | ||
| 103 | - | ||
| 104 | JSON to PDF: | 100 | JSON to PDF: |
| 105 | 101 | ||
| 106 | Have --json-input and --update-from-json. With --json-input, the json | 102 | Have --json-input and --update-from-json. With --json-input, the json |
qpdf/qtest/qpdf-json.test
| @@ -67,30 +67,30 @@ foreach my $i (@goodfiles) | @@ -67,30 +67,30 @@ foreach my $i (@goodfiles) | ||
| 67 | if (ref($i) eq 'ARRAY') { | 67 | if (ref($i) eq 'ARRAY') { |
| 68 | ($f, $xargs) = @$i; | 68 | ($f, $xargs) = @$i; |
| 69 | } | 69 | } |
| 70 | - $td->runtest("good: $f -> json", | 70 | + $td->runtest("good: $f -> JSON", |
| 71 | {$td->COMMAND => "qpdf $xargs --decode-level=none" . | 71 | {$td->COMMAND => "qpdf $xargs --decode-level=none" . |
| 72 | " --json-output=latest $f a.json"}, | 72 | " --json-output=latest $f a.json"}, |
| 73 | {$td->STRING => "", $td->EXIT_STATUS => 0}, | 73 | {$td->STRING => "", $td->EXIT_STATUS => 0}, |
| 74 | $td->NORMALIZE_NEWLINES); | 74 | $td->NORMALIZE_NEWLINES); |
| 75 | - $td->runtest("good: $f json -> json", | 75 | + $td->runtest("good: $f JSON -> JSON", |
| 76 | {$td->COMMAND => | 76 | {$td->COMMAND => |
| 77 | "qpdf --decode-level=none" . | 77 | "qpdf --decode-level=none" . |
| 78 | " --json-input --json-output=latest a.json b.json"}, | 78 | " --json-input --json-output=latest a.json b.json"}, |
| 79 | {$td->STRING => "", $td->EXIT_STATUS => 0}, | 79 | {$td->STRING => "", $td->EXIT_STATUS => 0}, |
| 80 | $td->NORMALIZE_NEWLINES); | 80 | $td->NORMALIZE_NEWLINES); |
| 81 | - $td->runtest("good: $f json -> qdf", | 81 | + $td->runtest("good: $f JSON -> QDF", |
| 82 | {$td->COMMAND => | 82 | {$td->COMMAND => |
| 83 | "qpdf --qdf --json-input --stream-data=preserve" . | 83 | "qpdf --qdf --json-input --stream-data=preserve" . |
| 84 | " --static-id a.json a.pdf"}, | 84 | " --static-id a.json a.pdf"}, |
| 85 | {$td->STRING => "", $td->EXIT_STATUS => 0}, | 85 | {$td->STRING => "", $td->EXIT_STATUS => 0}, |
| 86 | $td->NORMALIZE_NEWLINES); | 86 | $td->NORMALIZE_NEWLINES); |
| 87 | - $td->runtest("good: $f compare json", | 87 | + $td->runtest("good: $f compare JSON", |
| 88 | {$td->FILE => "a.json"}, | 88 | {$td->FILE => "a.json"}, |
| 89 | {$td->FILE => "b.json"}); | 89 | {$td->FILE => "b.json"}); |
| 90 | my $exp = "json-changed-$f"; | 90 | my $exp = "json-changed-$f"; |
| 91 | if (! -f $exp) | 91 | if (! -f $exp) |
| 92 | { | 92 | { |
| 93 | - $td->runtest("good: $f -> qdf", | 93 | + $td->runtest("good: $f -> aqdf", |
| 94 | {$td->COMMAND => | 94 | {$td->COMMAND => |
| 95 | "qpdf $xargs --object-streams=disable --qdf" . | 95 | "qpdf $xargs --object-streams=disable --qdf" . |
| 96 | " --stream-data=preserve --static-id $f b.pdf"}, | 96 | " --stream-data=preserve --static-id $f b.pdf"}, |
| @@ -115,7 +115,34 @@ foreach my $i (@goodfiles) | @@ -115,7 +115,34 @@ foreach my $i (@goodfiles) | ||
| 115 | {$td->FILE => $exp}); # from original PDF | 115 | {$td->FILE => $exp}); # from original PDF |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | +$n_tests += 6; | ||
| 119 | +$td->runtest("manual JSON to PDF", | ||
| 120 | + {$td->COMMAND => "qpdf --json-input --static-id --qdf" . | ||
| 121 | + " manual-qpdf-json.json a.pdf"}, | ||
| 122 | + {$td->STRING => "", $td->EXIT_STATUS => 0}, | ||
| 123 | + $td->NORMALIZE_NEWLINES); | ||
| 124 | +$td->runtest("check manual JSON to PDF", | ||
| 125 | + {$td->FILE => "a.pdf"}, | ||
| 126 | + {$td->FILE => "manual-qpdf-json.pdf"}); | ||
| 127 | +$td->runtest("check manual JSON to PDF to JSON", | ||
| 128 | + {$td->COMMAND => "qpdf --json-output=2 a.pdf -"}, | ||
| 129 | + {$td->FILE => "manual-qpdf-json-pdf.json", $td->EXIT_STATUS => 0}, | ||
| 130 | + $td->NORMALIZE_NEWLINES); | ||
| 131 | +$td->runtest("manual JSON to JSON", | ||
| 132 | + {$td->COMMAND => "qpdf --json-input --json-output=2" . | ||
| 133 | + " manual-qpdf-json.json a.json"}, | ||
| 134 | + {$td->STRING => "", $td->EXIT_STATUS => 0}, | ||
| 135 | + $td->NORMALIZE_NEWLINES); | ||
| 136 | +$td->runtest("check manual JSON to JSON", | ||
| 137 | + {$td->FILE => "a.json"}, | ||
| 138 | + {$td->FILE => "manual-qpdf-json-out.json"}, | ||
| 139 | + $td->NORMALIZE_NEWLINES); | ||
| 140 | +$td->runtest("check manual JSON to JSON to JSON", | ||
| 141 | + {$td->COMMAND => "qpdf --json-output=2 --json-input a.json -"}, | ||
| 142 | + {$td->FILE => "a.json", $td->EXIT_STATUS => 0}, | ||
| 143 | + $td->NORMALIZE_NEWLINES); | ||
| 118 | 144 | ||
| 145 | +# QXXXQ file | ||
| 119 | 146 | ||
| 120 | cleanup(); | 147 | cleanup(); |
| 121 | $td->report($n_tests); | 148 | $td->report($n_tests); |
qpdf/qtest/qpdf/manual-qpdf-json-out.json
0 → 100644
| 1 | +{ | ||
| 2 | + "qpdf-v2": { | ||
| 3 | + "pdfversion": "2.0", | ||
| 4 | + "maxobjectid": 8, | ||
| 5 | + "objects": { | ||
| 6 | + "obj:1 0 R": { | ||
| 7 | + "value": { | ||
| 8 | + "/Pages": "2 0 R", | ||
| 9 | + "/Type": "/Catalog" | ||
| 10 | + } | ||
| 11 | + }, | ||
| 12 | + "obj:2 0 R": { | ||
| 13 | + "value": { | ||
| 14 | + "/Count": 1, | ||
| 15 | + "/Kids": [ | ||
| 16 | + "3 0 R" | ||
| 17 | + ], | ||
| 18 | + "/Type": "/Pages" | ||
| 19 | + } | ||
| 20 | + }, | ||
| 21 | + "obj:3 0 R": { | ||
| 22 | + "value": { | ||
| 23 | + "/Contents": "4 0 R", | ||
| 24 | + "/MediaBox": [ | ||
| 25 | + 0, | ||
| 26 | + 0, | ||
| 27 | + 612, | ||
| 28 | + 792 | ||
| 29 | + ], | ||
| 30 | + "/Parent": "2 0 R", | ||
| 31 | + "/Resources": { | ||
| 32 | + "/Font": { | ||
| 33 | + "/F1": "6 0 R" | ||
| 34 | + }, | ||
| 35 | + "/ProcSet": "5 0 R" | ||
| 36 | + }, | ||
| 37 | + "/Type": "/Page" | ||
| 38 | + } | ||
| 39 | + }, | ||
| 40 | + "obj:4 0 R": { | ||
| 41 | + "stream": { | ||
| 42 | + "data": "QlQKICAvRjEgMjQgVGYKICA3MiA3MjAgVGQKICAoUG90YXRvKSBUagpFVAo=", | ||
| 43 | + "dict": {} | ||
| 44 | + } | ||
| 45 | + }, | ||
| 46 | + "obj:5 0 R": { | ||
| 47 | + "value": [ | ||
| 48 | + "/PDF", | ||
| 49 | + "/Text" | ||
| 50 | + ] | ||
| 51 | + }, | ||
| 52 | + "obj:6 0 R": { | ||
| 53 | + "value": { | ||
| 54 | + "/BaseFont": "/Helvetica", | ||
| 55 | + "/Encoding": "/WinAnsiEncoding", | ||
| 56 | + "/Name": "/F1", | ||
| 57 | + "/Subtype": "/Type1", | ||
| 58 | + "/Type": "/Font" | ||
| 59 | + } | ||
| 60 | + }, | ||
| 61 | + "obj:7 0 R": { | ||
| 62 | + "value": { | ||
| 63 | + "/hex strings": [ | ||
| 64 | + "u:Potato", | ||
| 65 | + "b:01020300040560", | ||
| 66 | + "u:AB" | ||
| 67 | + ], | ||
| 68 | + "/indirect": "8 0 R", | ||
| 69 | + "/names": [ | ||
| 70 | + "/nesting", | ||
| 71 | + "/hex strings", | ||
| 72 | + "/text/plain" | ||
| 73 | + ], | ||
| 74 | + "/nesting": { | ||
| 75 | + "/a": [ | ||
| 76 | + 1, | ||
| 77 | + 2, | ||
| 78 | + { | ||
| 79 | + "/x": "u:y" | ||
| 80 | + }, | ||
| 81 | + [ | ||
| 82 | + "u:z" | ||
| 83 | + ] | ||
| 84 | + ], | ||
| 85 | + "/b": { | ||
| 86 | + "/": "u:legal", | ||
| 87 | + "/a": [ | ||
| 88 | + 1, | ||
| 89 | + 2 | ||
| 90 | + ] | ||
| 91 | + } | ||
| 92 | + }, | ||
| 93 | + "/strings": [ | ||
| 94 | + "u:one", | ||
| 95 | + "b:24a2", | ||
| 96 | + "u:", | ||
| 97 | + "u:()", | ||
| 98 | + "u:(", | ||
| 99 | + "u:)", | ||
| 100 | + "u:a\f\b\t\r\nb", | ||
| 101 | + "u:\"", | ||
| 102 | + "u:\"\"", | ||
| 103 | + "u:\"(\")\"", | ||
| 104 | + "b:410042", | ||
| 105 | + "u:a\nb", | ||
| 106 | + "u:a b", | ||
| 107 | + [ | ||
| 108 | + "u:π", | ||
| 109 | + "u:π", | ||
| 110 | + "u:π", | ||
| 111 | + "u:π" | ||
| 112 | + ], | ||
| 113 | + [ | ||
| 114 | + "u:🥔", | ||
| 115 | + "u:🥔", | ||
| 116 | + "u:🥔" | ||
| 117 | + ] | ||
| 118 | + ] | ||
| 119 | + } | ||
| 120 | + }, | ||
| 121 | + "obj:8 0 R": { | ||
| 122 | + "value": "u:hello" | ||
| 123 | + }, | ||
| 124 | + "trailer": { | ||
| 125 | + "value": { | ||
| 126 | + "/QTest": "7 0 R", | ||
| 127 | + "/Root": "1 0 R", | ||
| 128 | + "/Size": 9 | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + } | ||
| 132 | + } | ||
| 133 | +} |
qpdf/qtest/qpdf/manual-qpdf-json-pdf.json
0 → 100644
| 1 | +{ | ||
| 2 | + "qpdf-v2": { | ||
| 3 | + "pdfversion": "2.0", | ||
| 4 | + "maxobjectid": 9, | ||
| 5 | + "objects": { | ||
| 6 | + "obj:1 0 R": { | ||
| 7 | + "value": { | ||
| 8 | + "/Pages": "3 0 R", | ||
| 9 | + "/Type": "/Catalog" | ||
| 10 | + } | ||
| 11 | + }, | ||
| 12 | + "obj:2 0 R": { | ||
| 13 | + "value": { | ||
| 14 | + "/hex strings": [ | ||
| 15 | + "u:Potato", | ||
| 16 | + "b:01020300040560", | ||
| 17 | + "u:AB" | ||
| 18 | + ], | ||
| 19 | + "/indirect": "4 0 R", | ||
| 20 | + "/names": [ | ||
| 21 | + "/nesting", | ||
| 22 | + "/hex strings", | ||
| 23 | + "/text/plain" | ||
| 24 | + ], | ||
| 25 | + "/nesting": { | ||
| 26 | + "/a": [ | ||
| 27 | + 1, | ||
| 28 | + 2, | ||
| 29 | + { | ||
| 30 | + "/x": "u:y" | ||
| 31 | + }, | ||
| 32 | + [ | ||
| 33 | + "u:z" | ||
| 34 | + ] | ||
| 35 | + ], | ||
| 36 | + "/b": { | ||
| 37 | + "/": "u:legal", | ||
| 38 | + "/a": [ | ||
| 39 | + 1, | ||
| 40 | + 2 | ||
| 41 | + ] | ||
| 42 | + } | ||
| 43 | + }, | ||
| 44 | + "/strings": [ | ||
| 45 | + "u:one", | ||
| 46 | + "b:24a2", | ||
| 47 | + "u:", | ||
| 48 | + "u:()", | ||
| 49 | + "u:(", | ||
| 50 | + "u:)", | ||
| 51 | + "u:a\f\b\t\r\nb", | ||
| 52 | + "u:\"", | ||
| 53 | + "u:\"\"", | ||
| 54 | + "u:\"(\")\"", | ||
| 55 | + "b:410042", | ||
| 56 | + "u:a\nb", | ||
| 57 | + "u:a b", | ||
| 58 | + [ | ||
| 59 | + "u:π", | ||
| 60 | + "u:π", | ||
| 61 | + "u:π", | ||
| 62 | + "u:π" | ||
| 63 | + ], | ||
| 64 | + [ | ||
| 65 | + "u:🥔", | ||
| 66 | + "u:🥔", | ||
| 67 | + "u:🥔" | ||
| 68 | + ] | ||
| 69 | + ] | ||
| 70 | + } | ||
| 71 | + }, | ||
| 72 | + "obj:3 0 R": { | ||
| 73 | + "value": { | ||
| 74 | + "/Count": 1, | ||
| 75 | + "/Kids": [ | ||
| 76 | + "5 0 R" | ||
| 77 | + ], | ||
| 78 | + "/Type": "/Pages" | ||
| 79 | + } | ||
| 80 | + }, | ||
| 81 | + "obj:4 0 R": { | ||
| 82 | + "value": "u:hello" | ||
| 83 | + }, | ||
| 84 | + "obj:5 0 R": { | ||
| 85 | + "value": { | ||
| 86 | + "/Contents": "6 0 R", | ||
| 87 | + "/MediaBox": [ | ||
| 88 | + 0, | ||
| 89 | + 0, | ||
| 90 | + 612, | ||
| 91 | + 792 | ||
| 92 | + ], | ||
| 93 | + "/Parent": "3 0 R", | ||
| 94 | + "/Resources": { | ||
| 95 | + "/Font": { | ||
| 96 | + "/F1": "8 0 R" | ||
| 97 | + }, | ||
| 98 | + "/ProcSet": "9 0 R" | ||
| 99 | + }, | ||
| 100 | + "/Type": "/Page" | ||
| 101 | + } | ||
| 102 | + }, | ||
| 103 | + "obj:6 0 R": { | ||
| 104 | + "stream": { | ||
| 105 | + "data": "QlQKICAvRjEgMjQgVGYKICA3MiA3MjAgVGQKICAoUG90YXRvKSBUagpFVAo=", | ||
| 106 | + "dict": {} | ||
| 107 | + } | ||
| 108 | + }, | ||
| 109 | + "obj:7 0 R": { | ||
| 110 | + "value": 44 | ||
| 111 | + }, | ||
| 112 | + "obj:8 0 R": { | ||
| 113 | + "value": { | ||
| 114 | + "/BaseFont": "/Helvetica", | ||
| 115 | + "/Encoding": "/WinAnsiEncoding", | ||
| 116 | + "/Name": "/F1", | ||
| 117 | + "/Subtype": "/Type1", | ||
| 118 | + "/Type": "/Font" | ||
| 119 | + } | ||
| 120 | + }, | ||
| 121 | + "obj:9 0 R": { | ||
| 122 | + "value": [ | ||
| 123 | + "/PDF", | ||
| 124 | + "/Text" | ||
| 125 | + ] | ||
| 126 | + }, | ||
| 127 | + "trailer": { | ||
| 128 | + "value": { | ||
| 129 | + "/ID": [ | ||
| 130 | + "b:31415926535897932384626433832795", | ||
| 131 | + "b:31415926535897932384626433832795" | ||
| 132 | + ], | ||
| 133 | + "/QTest": "2 0 R", | ||
| 134 | + "/Root": "1 0 R", | ||
| 135 | + "/Size": 10 | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | +} |
qpdf/qtest/qpdf/manual-qpdf-json.json
| @@ -104,11 +104,14 @@ | @@ -104,11 +104,14 @@ | ||
| 104 | "u:(", | 104 | "u:(", |
| 105 | "u:)", | 105 | "u:)", |
| 106 | "u:a\f\b\t\r\nb", | 106 | "u:a\f\b\t\r\nb", |
| 107 | + "u:\"", | ||
| 108 | + "u:\"\"", | ||
| 109 | + "u:\"(\")\"", | ||
| 107 | "b:410042", | 110 | "b:410042", |
| 108 | "u:a\nb", | 111 | "u:a\nb", |
| 109 | "u:a b", | 112 | "u:a b", |
| 110 | - "u:π", | ||
| 111 | - "u:🥔" | 113 | + ["u:π", "u:\u03c0", "b:EFBBBFCF80", "b:feff03c0"], |
| 114 | + ["u:🥔", "u:\ud83e\udd54", "b:feffd83eDD54"] | ||
| 112 | ] | 115 | ] |
| 113 | } | 116 | } |
| 114 | }, | 117 | }, |
qpdf/qtest/qpdf/manual-qpdf-json.pdf
0 → 100644
| 1 | +%PDF-2.0 | ||
| 2 | +%¿÷¢þ | ||
| 3 | +%QDF-1.0 | ||
| 4 | + | ||
| 5 | +%% Original object ID: 1 0 | ||
| 6 | +1 0 obj | ||
| 7 | +<< | ||
| 8 | + /Pages 3 0 R | ||
| 9 | + /Type /Catalog | ||
| 10 | +>> | ||
| 11 | +endobj | ||
| 12 | + | ||
| 13 | +%% Original object ID: 7 0 | ||
| 14 | +2 0 obj | ||
| 15 | +<< | ||
| 16 | + /hex#20strings [ | ||
| 17 | + (Potato) | ||
| 18 | + <01020300040560> | ||
| 19 | + (AB) | ||
| 20 | + ] | ||
| 21 | + /indirect 4 0 R | ||
| 22 | + /names [ | ||
| 23 | + /nesting | ||
| 24 | + /hex#20strings | ||
| 25 | + /text#2fplain | ||
| 26 | + ] | ||
| 27 | + /nesting << | ||
| 28 | + /a [ | ||
| 29 | + 1 | ||
| 30 | + 2 | ||
| 31 | + << | ||
| 32 | + /x (y) | ||
| 33 | + >> | ||
| 34 | + [ | ||
| 35 | + (z) | ||
| 36 | + ] | ||
| 37 | + ] | ||
| 38 | + /b << | ||
| 39 | + / (legal) | ||
| 40 | + /a [ | ||
| 41 | + 1 | ||
| 42 | + 2 | ||
| 43 | + ] | ||
| 44 | + >> | ||
| 45 | + >> | ||
| 46 | + /strings [ | ||
| 47 | + (one) | ||
| 48 | + <24a2> | ||
| 49 | + () | ||
| 50 | + (\(\)) | ||
| 51 | + (\() | ||
| 52 | + (\)) | ||
| 53 | + (a\f\b\t\r\nb) | ||
| 54 | + (") | ||
| 55 | + ("") | ||
| 56 | + ("\("\)") | ||
| 57 | + <410042> | ||
| 58 | + (a\nb) | ||
| 59 | + (a b) | ||
| 60 | + [ | ||
| 61 | + <feff03c0> | ||
| 62 | + <feff03c0> | ||
| 63 | + <efbbbfcf80> | ||
| 64 | + <feff03c0> | ||
| 65 | + ] | ||
| 66 | + [ | ||
| 67 | + <feffd83edd54> | ||
| 68 | + <feffd83edd54> | ||
| 69 | + <feffd83edd54> | ||
| 70 | + ] | ||
| 71 | + ] | ||
| 72 | +>> | ||
| 73 | +endobj | ||
| 74 | + | ||
| 75 | +%% Original object ID: 2 0 | ||
| 76 | +3 0 obj | ||
| 77 | +<< | ||
| 78 | + /Count 1 | ||
| 79 | + /Kids [ | ||
| 80 | + 5 0 R | ||
| 81 | + ] | ||
| 82 | + /Type /Pages | ||
| 83 | +>> | ||
| 84 | +endobj | ||
| 85 | + | ||
| 86 | +%% Original object ID: 8 0 | ||
| 87 | +4 0 obj | ||
| 88 | +(hello) | ||
| 89 | +endobj | ||
| 90 | + | ||
| 91 | +%% Page 1 | ||
| 92 | +%% Original object ID: 3 0 | ||
| 93 | +5 0 obj | ||
| 94 | +<< | ||
| 95 | + /Contents 6 0 R | ||
| 96 | + /MediaBox [ | ||
| 97 | + 0 | ||
| 98 | + 0 | ||
| 99 | + 612 | ||
| 100 | + 792 | ||
| 101 | + ] | ||
| 102 | + /Parent 3 0 R | ||
| 103 | + /Resources << | ||
| 104 | + /Font << | ||
| 105 | + /F1 8 0 R | ||
| 106 | + >> | ||
| 107 | + /ProcSet 9 0 R | ||
| 108 | + >> | ||
| 109 | + /Type /Page | ||
| 110 | +>> | ||
| 111 | +endobj | ||
| 112 | + | ||
| 113 | +%% Contents for page 1 | ||
| 114 | +%% Original object ID: 4 0 | ||
| 115 | +6 0 obj | ||
| 116 | +<< | ||
| 117 | + /Length 7 0 R | ||
| 118 | +>> | ||
| 119 | +stream | ||
| 120 | +BT | ||
| 121 | + /F1 24 Tf | ||
| 122 | + 72 720 Td | ||
| 123 | + (Potato) Tj | ||
| 124 | +ET | ||
| 125 | +endstream | ||
| 126 | +endobj | ||
| 127 | + | ||
| 128 | +7 0 obj | ||
| 129 | +44 | ||
| 130 | +endobj | ||
| 131 | + | ||
| 132 | +%% Original object ID: 6 0 | ||
| 133 | +8 0 obj | ||
| 134 | +<< | ||
| 135 | + /BaseFont /Helvetica | ||
| 136 | + /Encoding /WinAnsiEncoding | ||
| 137 | + /Name /F1 | ||
| 138 | + /Subtype /Type1 | ||
| 139 | + /Type /Font | ||
| 140 | +>> | ||
| 141 | +endobj | ||
| 142 | + | ||
| 143 | +%% Original object ID: 5 0 | ||
| 144 | +9 0 obj | ||
| 145 | +[ | ||
| 146 | |||
| 147 | + /Text | ||
| 148 | +] | ||
| 149 | +endobj | ||
| 150 | + | ||
| 151 | +xref | ||
| 152 | +0 10 | ||
| 153 | +0000000000 65535 f | ||
| 154 | +0000000052 00000 n | ||
| 155 | +0000000133 00000 n | ||
| 156 | +0000000829 00000 n | ||
| 157 | +0000000928 00000 n | ||
| 158 | +0000000989 00000 n | ||
| 159 | +0000001231 00000 n | ||
| 160 | +0000001330 00000 n | ||
| 161 | +0000001376 00000 n | ||
| 162 | +0000001521 00000 n | ||
| 163 | +trailer << | ||
| 164 | + /QTest 2 0 R | ||
| 165 | + /Root 1 0 R | ||
| 166 | + /Size 10 | ||
| 167 | + /ID [<31415926535897932384626433832795><31415926535897932384626433832795>] | ||
| 168 | +>> | ||
| 169 | +startxref | ||
| 170 | +1556 | ||
| 171 | +%%EOF |