fireinc-pdf-reader 0.11.0.alpha
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +168 -0
- data/MIT-LICENSE +21 -0
- data/README.rdoc +137 -0
- data/Rakefile +34 -0
- data/TODO +45 -0
- data/bin/pdf_list_callbacks +15 -0
- data/bin/pdf_object +48 -0
- data/bin/pdf_text +15 -0
- data/examples/callbacks.rb +21 -0
- data/examples/extract_bates.rb +49 -0
- data/examples/extract_images.rb +108 -0
- data/examples/hash.rb +12 -0
- data/examples/metadata.rb +25 -0
- data/examples/page_counter_improved.rb +23 -0
- data/examples/page_counter_naive.rb +24 -0
- data/examples/rspec.rb +57 -0
- data/examples/text.rb +40 -0
- data/examples/version.rb +25 -0
- data/lib/pdf/hash.rb +15 -0
- data/lib/pdf/reader/abstract_strategy.rb +81 -0
- data/lib/pdf/reader/buffer.rb +346 -0
- data/lib/pdf/reader/cmap.rb +138 -0
- data/lib/pdf/reader/encoding.rb +190 -0
- data/lib/pdf/reader/encodings/mac_expert.txt +159 -0
- data/lib/pdf/reader/encodings/mac_roman.txt +128 -0
- data/lib/pdf/reader/encodings/pdf_doc.txt +40 -0
- data/lib/pdf/reader/encodings/standard.txt +47 -0
- data/lib/pdf/reader/encodings/symbol.txt +154 -0
- data/lib/pdf/reader/encodings/win_ansi.txt +29 -0
- data/lib/pdf/reader/encodings/zapf_dingbats.txt +201 -0
- data/lib/pdf/reader/error.rb +53 -0
- data/lib/pdf/reader/filter.rb +219 -0
- data/lib/pdf/reader/font.rb +133 -0
- data/lib/pdf/reader/form_xobject.rb +83 -0
- data/lib/pdf/reader/glyphlist.txt +4322 -0
- data/lib/pdf/reader/lzw.rb +123 -0
- data/lib/pdf/reader/metadata_strategy.rb +56 -0
- data/lib/pdf/reader/object_cache.rb +85 -0
- data/lib/pdf/reader/object_hash.rb +289 -0
- data/lib/pdf/reader/object_stream.rb +51 -0
- data/lib/pdf/reader/page.rb +185 -0
- data/lib/pdf/reader/page_text_receiver.rb +278 -0
- data/lib/pdf/reader/pages_strategy.rb +475 -0
- data/lib/pdf/reader/parser.rb +225 -0
- data/lib/pdf/reader/print_receiver.rb +18 -0
- data/lib/pdf/reader/reference.rb +66 -0
- data/lib/pdf/reader/register_receiver.rb +95 -0
- data/lib/pdf/reader/stream.rb +69 -0
- data/lib/pdf/reader/text_receiver.rb +264 -0
- data/lib/pdf/reader/token.rb +41 -0
- data/lib/pdf/reader/xref.rb +220 -0
- data/lib/pdf/reader.rb +296 -0
- data/lib/pdf-reader.rb +1 -0
- metadata +211 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
################################################################################
|
2
|
+
#
|
3
|
+
# Copyright (C) 2008 James Healy (jimmy@deefa.com)
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
# a copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
# the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
#
|
24
|
+
################################################################################
|
25
|
+
|
26
|
+
class PDF::Reader
|
27
|
+
class CMap # :nodoc:
|
28
|
+
|
29
|
+
def initialize(data)
|
30
|
+
@map = {}
|
31
|
+
process_data(data)
|
32
|
+
end
|
33
|
+
|
34
|
+
def process_data(data)
|
35
|
+
mode = nil
|
36
|
+
instructions = ""
|
37
|
+
|
38
|
+
data.each_line do |l|
|
39
|
+
if l.include?("beginbfchar")
|
40
|
+
mode = :char
|
41
|
+
elsif l.include?("endbfchar")
|
42
|
+
process_bfchar_instructions(instructions)
|
43
|
+
instructions = ""
|
44
|
+
mode = nil
|
45
|
+
elsif l.include?("beginbfrange")
|
46
|
+
mode = :range
|
47
|
+
elsif l.include?("endbfrange")
|
48
|
+
process_bfrange_instructions(instructions)
|
49
|
+
instructions = ""
|
50
|
+
mode = nil
|
51
|
+
elsif mode == :char || mode == :range
|
52
|
+
instructions << l
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def size
|
58
|
+
@map.size
|
59
|
+
end
|
60
|
+
|
61
|
+
def decode(c)
|
62
|
+
# TODO: implement the conversion
|
63
|
+
return c unless c.class == Fixnum
|
64
|
+
@map[c]
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def build_parser(instructions)
|
70
|
+
buffer = Buffer.new(StringIO.new(instructions))
|
71
|
+
Parser.new(buffer)
|
72
|
+
end
|
73
|
+
|
74
|
+
def str_to_int(str)
|
75
|
+
return nil if str.nil? || str.size == 0 || str.size >= 3
|
76
|
+
|
77
|
+
if str.size == 1
|
78
|
+
str.unpack("C*")[0]
|
79
|
+
else
|
80
|
+
str.unpack("n*")[0]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def process_bfchar_instructions(instructions)
|
85
|
+
parser = build_parser(instructions)
|
86
|
+
find = str_to_int(parser.parse_token)
|
87
|
+
replace = str_to_int(parser.parse_token)
|
88
|
+
while find && replace
|
89
|
+
@map[find] = replace
|
90
|
+
find = str_to_int(parser.parse_token)
|
91
|
+
replace = str_to_int(parser.parse_token)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def process_bfrange_instructions(instructions)
|
96
|
+
parser = build_parser(instructions)
|
97
|
+
start = parser.parse_token
|
98
|
+
finish = parser.parse_token
|
99
|
+
to = parser.parse_token
|
100
|
+
while start && finish && to
|
101
|
+
if start.kind_of?(String) && finish.kind_of?(String) && to.kind_of?(String)
|
102
|
+
bfrange_type_one(start, finish, to)
|
103
|
+
elsif start.kind_of?(String) && finish.kind_of?(String) && to.kind_of?(Array)
|
104
|
+
bfrange_type_two(start, finish, to)
|
105
|
+
else
|
106
|
+
raise "invalid bfrange section"
|
107
|
+
end
|
108
|
+
start = parser.parse_token
|
109
|
+
finish = parser.parse_token
|
110
|
+
to = parser.parse_token
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def bfrange_type_one(start_code, end_code, dst)
|
115
|
+
start_code = str_to_int(start_code)
|
116
|
+
end_code = str_to_int(end_code)
|
117
|
+
dst = str_to_int(dst)
|
118
|
+
|
119
|
+
# add all values in the range to our mapping
|
120
|
+
(start_code..end_code).each_with_index do |val, idx|
|
121
|
+
@map[val] = dst + idx
|
122
|
+
# ensure a single range does not exceed 255 chars
|
123
|
+
raise PDF::Reader::MalformedPDFError, "a CMap bfrange cann't exceed 255 chars" if idx > 255
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def bfrange_type_two(start_code, end_code, dst)
|
128
|
+
start_code = str_to_int(start_code)
|
129
|
+
end_code = str_to_int(end_code)
|
130
|
+
from_range = (start_code..end_code)
|
131
|
+
|
132
|
+
# add all values in the range to our mapping
|
133
|
+
from_range.each_with_index do |val, idx|
|
134
|
+
@map[val] = str_to_int(dst[idx])
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,190 @@
|
|
1
|
+
################################################################################
|
2
|
+
#
|
3
|
+
# Copyright (C) 2008 James Healy (jimmy@deefa.com)
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
# a copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
# the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
#
|
24
|
+
################################################################################
|
25
|
+
|
26
|
+
class PDF::Reader
|
27
|
+
class Encoding # :nodoc:
|
28
|
+
CONTROL_CHARS = [0,1,2,3,4,5,6,7,8,11,12,14,15,16,17,18,19,20,21,22,23,
|
29
|
+
24,25,26,27,28,29,30,31]
|
30
|
+
UNKNOWN_CHAR = 0x25AF # ▯
|
31
|
+
|
32
|
+
attr_reader :unpack
|
33
|
+
|
34
|
+
def initialize(enc)
|
35
|
+
if enc.kind_of?(Hash)
|
36
|
+
self.differences = enc[:Differences] if enc[:Differences]
|
37
|
+
enc = enc[:Encoding] || enc[:BaseEncoding]
|
38
|
+
elsif enc != nil
|
39
|
+
enc = enc.to_sym
|
40
|
+
else
|
41
|
+
enc = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
@to_unicode_required = unicode_required?(enc)
|
45
|
+
@unpack = get_unpack(enc)
|
46
|
+
@map_file = get_mapping_file(enc)
|
47
|
+
load_mapping(@map_file) if @map_file
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_unicode_required?
|
51
|
+
@to_unicode_required
|
52
|
+
end
|
53
|
+
|
54
|
+
# set the differences table for this encoding. should be an array in the following format:
|
55
|
+
#
|
56
|
+
# [25, :A, 26, :B]
|
57
|
+
#
|
58
|
+
# The array alternates between a decimal byte number and a glyph name to map to that byte
|
59
|
+
#
|
60
|
+
# To save space the following array is also valid and equivalent to the previous one
|
61
|
+
#
|
62
|
+
# [25, :A, :B]
|
63
|
+
def differences=(diff)
|
64
|
+
raise ArgumentError, "diff must be an array" unless diff.kind_of?(Array)
|
65
|
+
|
66
|
+
@differences = {}
|
67
|
+
byte = 0
|
68
|
+
diff.each do |val|
|
69
|
+
if val.kind_of?(Numeric)
|
70
|
+
byte = val.to_i
|
71
|
+
else
|
72
|
+
@differences[byte] = val
|
73
|
+
byte += 1
|
74
|
+
end
|
75
|
+
end
|
76
|
+
@differences
|
77
|
+
end
|
78
|
+
|
79
|
+
def differences
|
80
|
+
@differences ||= {}
|
81
|
+
end
|
82
|
+
|
83
|
+
# convert the specified string to utf8
|
84
|
+
#
|
85
|
+
# * unpack raw bytes into codepoints
|
86
|
+
# * replace any that have entries in the differences table with a glyph name
|
87
|
+
# * convert codepoints from source encoding to Unicode codepoints
|
88
|
+
# * convert any glyph names to Unicode codepoints
|
89
|
+
# * replace characters that didn't convert to Unicode nicely with something
|
90
|
+
# valid
|
91
|
+
# * pack the final array of Unicode codepoints into a utf-8 string
|
92
|
+
# * mark the string as utf-8 if we're running on a M17N aware VM
|
93
|
+
#
|
94
|
+
def to_utf8(str, tounicode = nil)
|
95
|
+
ret = str.unpack(unpack).map { |c|
|
96
|
+
differences[c] || c
|
97
|
+
}.map { |num|
|
98
|
+
original_codepoint_to_unicode(num, tounicode)
|
99
|
+
}.map { |c|
|
100
|
+
glyphnames[c] || c
|
101
|
+
}.map { |c|
|
102
|
+
if c.nil? || !c.is_a?(Fixnum)
|
103
|
+
PDF::Reader::Encoding::UNKNOWN_CHAR
|
104
|
+
else
|
105
|
+
c
|
106
|
+
end
|
107
|
+
}.pack("U*")
|
108
|
+
|
109
|
+
ret.force_encoding("UTF-8") if ret.respond_to?(:force_encoding)
|
110
|
+
|
111
|
+
ret
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def original_codepoint_to_unicode(cp, tounicode = nil)
|
117
|
+
if tounicode && (code = tounicode.decode(cp))
|
118
|
+
code
|
119
|
+
elsif to_unicode_required? && (tounicode.nil? || tounicode.decode(cp).nil?)
|
120
|
+
PDF::Reader::Encoding::UNKNOWN_CHAR
|
121
|
+
elsif mapping[cp]
|
122
|
+
mapping[cp]
|
123
|
+
elsif PDF::Reader::Encoding::CONTROL_CHARS.include?(cp)
|
124
|
+
PDF::Reader::Encoding::UNKNOWN_CHAR
|
125
|
+
else
|
126
|
+
cp
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_unpack(enc)
|
131
|
+
case enc
|
132
|
+
when :"Identity-H", :"Identity-V", :UTF16Encoding
|
133
|
+
"n*"
|
134
|
+
else
|
135
|
+
"C*"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def get_mapping_file(enc)
|
140
|
+
return File.dirname(__FILE__) + "/encodings/standard.txt" if enc.nil?
|
141
|
+
files = {
|
142
|
+
:"Identity-H" => nil,
|
143
|
+
:"Identity-V" => nil,
|
144
|
+
:MacRomanEncoding => File.dirname(__FILE__) + "/encodings/mac_roman.txt",
|
145
|
+
:MacExpertEncoding => File.dirname(__FILE__) + "/encodings/mac_expert.txt",
|
146
|
+
:PDFDocEncoding => File.dirname(__FILE__) + "/encodings/pdf_doc.txt",
|
147
|
+
:StandardEncoding => File.dirname(__FILE__) + "/encodings/standard.txt",
|
148
|
+
:SymbolEncoding => File.dirname(__FILE__) + "/encodings/symbol.txt",
|
149
|
+
:UTF16Encoding => nil,
|
150
|
+
:WinAnsiEncoding => File.dirname(__FILE__) + "/encodings/win_ansi.txt",
|
151
|
+
:ZapfDingbatsEncoding => File.dirname(__FILE__) + "/encodings/zapf_dingbats.txt"
|
152
|
+
}
|
153
|
+
|
154
|
+
if files.has_key?(enc)
|
155
|
+
files[enc]
|
156
|
+
else
|
157
|
+
raise UnsupportedFeatureError, "#{enc} is not currently a supported encoding"
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def unicode_required?(enc)
|
162
|
+
enc == :"Identity-H" or enc == :"Identity-V"
|
163
|
+
end
|
164
|
+
|
165
|
+
def mapping
|
166
|
+
@mapping ||= {}
|
167
|
+
end
|
168
|
+
|
169
|
+
def has_mapping?
|
170
|
+
mapping.size > 0
|
171
|
+
end
|
172
|
+
|
173
|
+
def glyphnames
|
174
|
+
@glyphnames ||= PDF::Reader::Font.glyphnames
|
175
|
+
end
|
176
|
+
|
177
|
+
def load_mapping(file)
|
178
|
+
return if has_mapping?
|
179
|
+
|
180
|
+
RUBY_VERSION >= "1.9" ? mode = "r:BINARY" : mode = "r"
|
181
|
+
File.open(file, mode) do |f|
|
182
|
+
f.each do |l|
|
183
|
+
m, single_byte, unicode = *l.match(/([0-9A-Za-z]+);([0-9A-F]{4})/)
|
184
|
+
mapping["0x#{single_byte}".hex] = "0x#{unicode}".hex if single_byte
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
21;F721
|
2
|
+
22;F6F8 # Hungarumlautsmall
|
3
|
+
23;F7A2
|
4
|
+
24;F724
|
5
|
+
25;F6E4
|
6
|
+
26;F726
|
7
|
+
27;F7B4
|
8
|
+
28;207D
|
9
|
+
29;F07E
|
10
|
+
2A;2025
|
11
|
+
2B;2024
|
12
|
+
2F;2044
|
13
|
+
30;F730
|
14
|
+
31;F731
|
15
|
+
32;F732
|
16
|
+
33;F733
|
17
|
+
34;F734
|
18
|
+
35;F735
|
19
|
+
36;F736
|
20
|
+
37;F737
|
21
|
+
38;F738
|
22
|
+
39;F739
|
23
|
+
3D;F6DE
|
24
|
+
3F;F73F
|
25
|
+
44;F7F0
|
26
|
+
47;00BC
|
27
|
+
48;00BD
|
28
|
+
49;00BE
|
29
|
+
4A;215B
|
30
|
+
4B;215C
|
31
|
+
4C;215D
|
32
|
+
4D;215E
|
33
|
+
4E;2153
|
34
|
+
4F;2154
|
35
|
+
56;FB00
|
36
|
+
57;FB01
|
37
|
+
58;FB02
|
38
|
+
59;FB03
|
39
|
+
5A;FB04
|
40
|
+
5B;208D
|
41
|
+
5D;208E
|
42
|
+
5E;F6F6
|
43
|
+
5F;F6E5
|
44
|
+
60;F760
|
45
|
+
61;F761
|
46
|
+
62;F762
|
47
|
+
63;F763
|
48
|
+
64;F764
|
49
|
+
65;F765
|
50
|
+
66;F766
|
51
|
+
67;F767
|
52
|
+
68;F768
|
53
|
+
69;F769
|
54
|
+
6A;F76A
|
55
|
+
6B;F76B
|
56
|
+
6C;F76C
|
57
|
+
6D;F76D
|
58
|
+
6E;F76E
|
59
|
+
6F;F76F
|
60
|
+
70;F770
|
61
|
+
71;F771
|
62
|
+
72;F772
|
63
|
+
73;F773
|
64
|
+
74;F774
|
65
|
+
75;F775
|
66
|
+
76;F776
|
67
|
+
77;F777
|
68
|
+
78;F778
|
69
|
+
79;F779
|
70
|
+
7A;F77A
|
71
|
+
7B;20A1
|
72
|
+
7C;F6DC
|
73
|
+
7D;F6DD
|
74
|
+
7E;F6FE
|
75
|
+
81;F6E9
|
76
|
+
82;F6E0
|
77
|
+
87;F7E1 # Acircumflexsmall
|
78
|
+
88;F7E0
|
79
|
+
89;F7E2 # Acutesmall
|
80
|
+
8A;F7E4
|
81
|
+
8B;F7E3
|
82
|
+
8C;F7E5
|
83
|
+
8D;F7E7
|
84
|
+
8E;F7E9
|
85
|
+
8F;F7E8
|
86
|
+
90;F7E4
|
87
|
+
91;F7EB
|
88
|
+
92;F7ED
|
89
|
+
93;F7EC
|
90
|
+
94;F7EE
|
91
|
+
95;F7EF
|
92
|
+
96;F7F1
|
93
|
+
97;F7F3
|
94
|
+
98;F7F2
|
95
|
+
99;F7F4
|
96
|
+
9A;F7F6
|
97
|
+
9B;F7F5
|
98
|
+
9C;F7FA
|
99
|
+
9D;F7F9
|
100
|
+
9E;F7FB
|
101
|
+
9F;F7FC
|
102
|
+
A1;2078
|
103
|
+
A2;2084
|
104
|
+
A3;2083
|
105
|
+
A4;2086
|
106
|
+
A5;2088
|
107
|
+
A6;2087
|
108
|
+
A7;F6FD
|
109
|
+
A9;F6DF
|
110
|
+
AA;2082
|
111
|
+
AC;F7A8
|
112
|
+
AE;F6F5
|
113
|
+
AF;F6F0
|
114
|
+
B0;2085
|
115
|
+
B2;F6E1
|
116
|
+
B3;F6E7
|
117
|
+
B4;F7FD
|
118
|
+
B6;F6E3
|
119
|
+
B9;F7FE
|
120
|
+
BB;2089
|
121
|
+
BC;2080
|
122
|
+
BD;F6FF
|
123
|
+
BE;F7E6 # AEsmall
|
124
|
+
BF;F7F8
|
125
|
+
C0;F7BF
|
126
|
+
C1;2081
|
127
|
+
C2;F6F9
|
128
|
+
C9;F7B8
|
129
|
+
CF;F6FA
|
130
|
+
D0;2012
|
131
|
+
D1;F6E6
|
132
|
+
D6;F7A1
|
133
|
+
D8;F7FF
|
134
|
+
DA;00B9
|
135
|
+
DB;00B2
|
136
|
+
DC;00B3
|
137
|
+
DD;2074
|
138
|
+
DE;2075
|
139
|
+
DF;2076
|
140
|
+
E0;2077
|
141
|
+
E1;2079
|
142
|
+
E2;2070
|
143
|
+
E4;F6EC
|
144
|
+
E5;F6F1
|
145
|
+
E6;F6F3
|
146
|
+
E9;F6ED
|
147
|
+
EA;F6F2
|
148
|
+
EB;F6EB
|
149
|
+
F1;F6EE
|
150
|
+
F2;F6FB
|
151
|
+
F3;F6F4
|
152
|
+
F4;F7AF
|
153
|
+
F5;F6EF
|
154
|
+
F6;207F
|
155
|
+
F7;F6EF
|
156
|
+
F8;F6E2
|
157
|
+
F9;F6E8
|
158
|
+
FA;F6F7
|
159
|
+
FB;F6FC
|
@@ -0,0 +1,128 @@
|
|
1
|
+
80;00C4
|
2
|
+
81;00C5
|
3
|
+
82;00C7
|
4
|
+
83;00C9
|
5
|
+
84;00D1
|
6
|
+
85;00D6
|
7
|
+
86;00DC
|
8
|
+
87;00E1
|
9
|
+
88;00E0
|
10
|
+
89;00E2
|
11
|
+
8A;00E4
|
12
|
+
8B;00E3
|
13
|
+
8C;00E5
|
14
|
+
8D;00E7
|
15
|
+
8E;00E9
|
16
|
+
8F;00E8
|
17
|
+
90;00EA
|
18
|
+
91;00EB
|
19
|
+
92;00ED
|
20
|
+
93;00EC
|
21
|
+
94;00EE
|
22
|
+
95;00EF
|
23
|
+
96;00F1
|
24
|
+
97;00F3
|
25
|
+
98;00F2
|
26
|
+
99;00F4
|
27
|
+
9A;00F6
|
28
|
+
9B;00F5
|
29
|
+
9C;00FA
|
30
|
+
9D;00F9
|
31
|
+
9E;00FB
|
32
|
+
9F;00FC
|
33
|
+
A0;2020
|
34
|
+
A1;00B0
|
35
|
+
A2;00A2
|
36
|
+
A3;00A3
|
37
|
+
A4;00A7
|
38
|
+
A5;2022
|
39
|
+
A6;00B6
|
40
|
+
A7;00DF
|
41
|
+
A8;00AE
|
42
|
+
A9;00A9
|
43
|
+
AA;2122
|
44
|
+
AB;00B4
|
45
|
+
AC;00A8
|
46
|
+
AD;2260
|
47
|
+
AE;00C6
|
48
|
+
AF;00D8
|
49
|
+
B0;221E
|
50
|
+
B1;00B1
|
51
|
+
B2;2264
|
52
|
+
B3;2265
|
53
|
+
B4;00A5
|
54
|
+
B5;00B5
|
55
|
+
B6;2202
|
56
|
+
B7;2211
|
57
|
+
B8;220F
|
58
|
+
B9;03C0
|
59
|
+
BA;222B
|
60
|
+
BB;00AA
|
61
|
+
BC;00BA
|
62
|
+
BD;03A9
|
63
|
+
BE;00E6
|
64
|
+
BF;00F8
|
65
|
+
C0;00BF
|
66
|
+
C1;00A1
|
67
|
+
C2;00AC
|
68
|
+
C3;221A
|
69
|
+
C4;0192
|
70
|
+
C5;2248
|
71
|
+
C6;2206
|
72
|
+
C7;00AB
|
73
|
+
C8;00BB
|
74
|
+
C9;2026
|
75
|
+
CA;00A0
|
76
|
+
CB;00C0
|
77
|
+
CC;00C3
|
78
|
+
CD;00D5
|
79
|
+
CE;0152
|
80
|
+
CF;0153
|
81
|
+
D0;2013
|
82
|
+
D1;2014
|
83
|
+
D2;201C
|
84
|
+
D3;201D
|
85
|
+
D4;2018
|
86
|
+
D5;2019
|
87
|
+
D6;00F7
|
88
|
+
D7;25CA
|
89
|
+
D8;00FF
|
90
|
+
D9;0178
|
91
|
+
DA;2044
|
92
|
+
DB;20AC
|
93
|
+
DC;2039
|
94
|
+
DD;203A
|
95
|
+
DE;FB01
|
96
|
+
DF;FB02
|
97
|
+
E0;2021
|
98
|
+
E1;00B7
|
99
|
+
E2;201A
|
100
|
+
E3;201E
|
101
|
+
E4;2030
|
102
|
+
E5;00C2
|
103
|
+
E6;00CA
|
104
|
+
E7;00C1
|
105
|
+
E8;00CB
|
106
|
+
E9;00C8
|
107
|
+
EA;00CD
|
108
|
+
EB;00CE
|
109
|
+
EC;00CF
|
110
|
+
ED;00CC
|
111
|
+
EE;00D3
|
112
|
+
EF;00D4
|
113
|
+
F0;F8FF
|
114
|
+
F1;00D2
|
115
|
+
F2;00DA
|
116
|
+
F3;00D8
|
117
|
+
F4;00D9
|
118
|
+
F5;0131
|
119
|
+
F6;02C6
|
120
|
+
F7;02DC
|
121
|
+
F8;00AF
|
122
|
+
F9;02D8
|
123
|
+
FA;02D9
|
124
|
+
FB;02DA
|
125
|
+
FC;00B8
|
126
|
+
FD;02DD
|
127
|
+
FE;02DB
|
128
|
+
FF;02C7
|
@@ -0,0 +1,40 @@
|
|
1
|
+
18;02D8
|
2
|
+
19;02C7
|
3
|
+
1A;02C6
|
4
|
+
1B;02D9
|
5
|
+
1C;02DD
|
6
|
+
1D;02DB
|
7
|
+
1E;02DA
|
8
|
+
1F;02DC
|
9
|
+
80;2022
|
10
|
+
81;2020
|
11
|
+
82;2021
|
12
|
+
83;2026
|
13
|
+
84;2014
|
14
|
+
85;2013
|
15
|
+
86;0192
|
16
|
+
87;2044
|
17
|
+
88;2039
|
18
|
+
89;203A
|
19
|
+
8A;2212
|
20
|
+
8B;2030
|
21
|
+
8C;201E
|
22
|
+
8D;201C
|
23
|
+
8E;201D
|
24
|
+
8F;2018
|
25
|
+
90;2019
|
26
|
+
91;201A
|
27
|
+
92;2122
|
28
|
+
93;FB01
|
29
|
+
94;FB02
|
30
|
+
95;0141
|
31
|
+
96;0152
|
32
|
+
97;0160
|
33
|
+
98;0178
|
34
|
+
99;017D
|
35
|
+
9A;0131
|
36
|
+
9B;0142
|
37
|
+
9C;0153
|
38
|
+
9D;0161
|
39
|
+
9E;017E
|
40
|
+
A0;20AC
|
@@ -0,0 +1,47 @@
|
|
1
|
+
27;2019
|
2
|
+
60;2018
|
3
|
+
A4;2044
|
4
|
+
A6;0192
|
5
|
+
A8;00A4
|
6
|
+
A9;0027
|
7
|
+
AA;201C
|
8
|
+
AC;2039
|
9
|
+
AD;203A
|
10
|
+
AE;FB01
|
11
|
+
AF;FB02
|
12
|
+
B1;2013
|
13
|
+
B2;2020
|
14
|
+
B3;2021
|
15
|
+
B4;00B7
|
16
|
+
B7;2022
|
17
|
+
B8;201A
|
18
|
+
B9;201E
|
19
|
+
BA;201D
|
20
|
+
BC;2026
|
21
|
+
BD;2030
|
22
|
+
C1;0060
|
23
|
+
C2;00B4
|
24
|
+
C3;02C6
|
25
|
+
C4;02DC
|
26
|
+
C5;00AF
|
27
|
+
C6;02D8
|
28
|
+
C7;02D9
|
29
|
+
C8;00A8
|
30
|
+
CA;02DA
|
31
|
+
CB;00B8
|
32
|
+
CD;02DD
|
33
|
+
CE;02DB
|
34
|
+
CF;02C7
|
35
|
+
D0;2014
|
36
|
+
E1;00C6
|
37
|
+
E3;00AA
|
38
|
+
E8;0141
|
39
|
+
E9;00D8
|
40
|
+
EA;0152
|
41
|
+
EB;00BA
|
42
|
+
F1;00E6
|
43
|
+
F5;0131
|
44
|
+
F8;0142
|
45
|
+
F9;00F8
|
46
|
+
FA;0153
|
47
|
+
FB;00DF
|