File Coverage

lib/Jacode4e/RoundTrip.pm
Criterion Covered Total %
statement 74 135 54.8
branch 27 48 56.2
condition 12 20 60.0
subroutine 8 9 88.8
pod 0 4 0.0
total 121 216 56.0


line stmt bran cond sub pod time code
1             package Jacode4e::RoundTrip;
2             $VERSION = '2.13.81.13';
3             '有朋自遠方来不亦楽乎'=~/^\xE6\x9C\x89/ or die "Perl script '@{[__FILE__]}' must be UTF-8 encoding.\n";
4             # 如果您可以阅读此字符,则可以通过选择所有内容并将其保存为文件名“Jacode4e/RoundTrip.pm”来将其用作模块。
5             # 如果您可以閱讀此字符,則可以通過選擇所有內容並將其保存為文件名“Jacode4e/RoundTrip.pm”來將其用作模塊。
6             # この文字が読める場合は、内容を全て選択してファイル名を "Jacode4e/RoundTrip.pm" にして保存すればそのままモジュールとして利用することができます。
7             # 이 문자를 읽을 수 있는 경우는, 내용을 모두 선택해 파일명을 "Jacode4e/RoundTrip.pm" 로 해 보존하면 그대로 모듈로서 이용할 수가 있습니다.
8             # But that is very far into the future isn't it?
9             ######################################################################
10             #
11             # Jacode4e::RoundTrip - Converts JIS X 0213 Encodings with Round-Trip
12             #
13             # Copyright (c) 2018, 2019, 2021, 2022 INABA Hitoshi in a CPAN
14             ######################################################################
15              
16             $VERSION = $VERSION;
17              
18 28     28   254576 use 5.00503;
  28         286  
19 28     28   152 use strict;
  28         48  
  28         1241  
20 28 50   28   624 BEGIN { $INC{'warnings.pm'} = '' if $] < 5.006 }; use warnings; $^W=1;
  28     28   142  
  28         62  
  28         181270  
21              
22             my %tr = ();
23             my @encodings = qw(
24             cp932x
25             cp932
26             cp932ibm
27             cp932nec
28             sjis2004
29             cp00930
30             keis78
31             keis83
32             keis90
33             jef
34             jipsj
35             jipse
36             letsj
37             unicode
38             utf8
39             utf8.1
40             utf8jp
41             );
42             my @io_encodings = grep( ! /^(?:unicode)$/, @encodings);
43              
44             if ($0 eq __FILE__) {
45             if (not @ARGV) {
46             die <
47              
48             usage:
49             perl $0 --dumptable
50              
51             END
52             }
53             }
54              
55             #---------------------------------------------------------------------
56             # make DBCS codepoints
57             #---------------------------------------------------------------------
58             sub dbcs {
59 280     280 0 765 my @dbcs = ();
60 280         429 for my $octet1 (@{$_[0]}) {
  280         766  
61 12936         14418 for my $octet2 (@{$_[1]}) {
  12936         18342  
62 1199184         1818193 push @dbcs, pack('CC', $octet1, $octet2);
63             }
64             }
65 280         279028 return @dbcs;
66             }
67              
68             #---------------------------------------------------------------------
69             # make DBCS codepoints JIPS(E)
70             #---------------------------------------------------------------------
71             sub dbcs_jipse {
72 56     56 0 148 my @dbcs = ();
73              
74             # JIPS(J) --> JIPS(E) table
75             # http://ameblo.jp/geckoman/entry-11634710872.html
76 56         797 my @jtoe = (
77             0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F, # 0
78             0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F, # 1
79             0x40,0x4F,0x7F,0x7B,0xE0,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61, # 2
80             0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F, # 3
81             0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6, # 4
82             0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0x4A,0x5B,0x5A,0x5F,0x6D, # 5
83             0x79,0x57,0x59,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x70,0x71,0x72,0x73,0x74, # 6
84             0x75,0x76,0x77,0x78,0x80,0x8B,0x9B,0x9C,0xA0,0xAB,0xB0,0xC0,0x6A,0xD0,0xA1,0x00, # 7
85             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, # 8
86             0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, # 9
87             0x00,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x51,0x52,0x53,0x54,0x55,0x56, # A
88             0x58,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8C,0x8D,0x8E,0x8F,0x90, # B
89             0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9D,0x9E,0x9F,0xA2,0xA3,0xA4, # C
90             0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAC,0xAD,0xAE,0xAF,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, # D
91             0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xDA,0xDB, # E
92             0xDC,0xDD,0xDE,0xDF,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xFA,0xFB,0xFC,0xFD,0xFE,0x00, # F
93             );
94              
95 56         99 for my $octet1 (@{$_[0]}) {
  56         170  
96 1176         1338 for my $octet2 (@{$_[1]}) {
  1176         1621  
97 110544         179008 push @dbcs, pack('CC', $jtoe[$octet1], $jtoe[$octet2]);
98             }
99             }
100 56         21741 return @dbcs;
101             }
102              
103             #------------------------------------------------------------------------------------------------------------------
104             # CP00930 User-defined Area: ([\x69-\x71][\x41-\xFE]|[\x72][\x41-\xEA])
105             #
106             # C-H 3-3220-024 IBM Corp. 2002, Table 2. Structure of Japanese DBCS-Host 6.2 Structure of Japanese DBCS-Host
107             # CJKV Information Processing by Ken Lunde 1999, Table D-20: IBM Japanese DBCS-Host Encoding Specifications
108             # The last user-defined character in this region is 0x72EA.
109             #
110             #------------------------------------------------------------------------------------------------------------------
111             # KEIS User-defined Area and Unused Area: ([\x81-\x9E\xA0][\xA1-\xFE]|[\x41-\x80][\xA1-\xFE]|[\x41-\xFE][\x41-\xA0])
112             #
113             # 8080-2-030 by 1980(SHOWA 54), Hitachi, Ltd., Chapter 4.6 Assignment of Extended Characters
114             # CJKV Information Processing by Ken Lunde 1999, Table D-23: KEIS Encoding Specifications
115             # Table D-23 said that user-defined area has (?:[\x81-\xA0][\xA1-\xFE]), but
116             # ([\x9F][\xA1-\xFE]) is already used by Japan Geographic Data Center.
117             #
118             #------------------------------------------------------------------------------------------------------------------
119             # JEF User-defined Area: ([\x80-\xA0][\xA1-\xFE])
120             #
121             # CJKV Information Processing by Ken Lunde 1999, Table D-14: JEF Encoding Specifications
122             #
123             #------------------------------------------------------------------------------------------------------------------
124             # JIPS User-defined Area: ([\x74-\x7E][\x21-\x7E]|[\xE0-\xFE][\xA1-\xFE])
125             #
126             # ZBB10-3, ZBB11-2 by NEC Corporation 1982, 1993, Figure-1 JIPS code plane
127             #
128             #------------------------------------------------------------------------------------------------------------------
129             # LetsJ User-defined Area: ([\x31-\x40\x6D-\x78][\xA1-\xFE])
130             #
131             # Heterogeneous database cooperation among heterogeneous OS environments
132             # http://www.unisys.co.jp/tec_info/tr56/5605.htm
133             #
134             #------------------------------------------------------------------------------------------------------------------
135             # UTF-8 User-defined Area: ([\xE0][\xA0-\xBF][\x80-\xBF]|[\xE1-\xEF][\x80-\xBF][\x80-\xBF])
136             #
137             # Private-Use Characters
138             # http://www.unicode.org/faq/private_use.html
139             #
140             #------------------------------------------------------------------------------------------------------------------
141              
142             my %userarea = ();
143             @{$userarea{'cp00930'}} = (dbcs([0x69..0x71],[0x41..0xFE]), dbcs([0x72],[0x41..0xEA]));
144             @{$userarea{'keis78'}} =
145             @{$userarea{'keis83'}} =
146             @{$userarea{'keis90'}} = (dbcs([0x81..0x9E,0xA0],[0xA1..0xFE]), dbcs([0x41..0x80],[0xA1..0xFE]), dbcs([0x41..0xFE],[0x41..0xA0]));
147             @{$userarea{'jef'}} = (dbcs([0x80..0xA0],[0xA1..0xFE]));
148             @{$userarea{'jipsj'}} = (dbcs ([0x74..0x7E],[0x21..0x7E]), dbcs ([0xE0..0xFE],[0xA1..0xFE]));
149             @{$userarea{'jipse'}} = (dbcs_jipse([0x74..0x7E],[0x21..0x7E]), dbcs_jipse([0xE0..0xFE],[0xA1..0xFE]));
150             @{$userarea{'letsj'}} = (dbcs([0x31..0x40,0x6D..0x78],[0xA1..0xFE]));
151             @{$userarea{'utf8'}} = (map { "\xEF" . $_ } dbcs([0x80..0xBF],[0x80..0xBF]));
152              
153             while () {
154             next if /^#/;
155             chomp;
156              
157             my %hex = ();
158             @hex{@encodings} = split(/ +/,$_);
159              
160             my %bin = ();
161             for my $encoding (@io_encodings) {
162             $bin{$encoding} = (($hex{$encoding} =~ /^[0123456789ABCDEF]+$/) ? pack('H*', $hex{$encoding}) : '');
163             }
164              
165             for my $encoding (@io_encodings) {
166             if ($bin{'utf8jp'} ne '') {
167             if ($bin{$encoding} ne '') {
168             if ($encoding eq 'utf8jp') {
169             }
170             elsif (defined($tr{'utf8jp'}{$encoding}{$bin{$encoding}}) and ($tr{'utf8jp'}{$encoding}{$bin{$encoding}} ne '')) {
171             die qq{@{[__FILE__]} duplicate definitions \$tr{'utf8jp'}{'$encoding'}{'$hex{$encoding}'} = "$hex{utf8}($bin{utf8})" and "} . uc unpack('H*',$tr{'utf8jp'}{$encoding}{$bin{$encoding}}) . qq{"($tr{'utf8jp'}{$encoding}{$bin{$encoding}})\n};
172             }
173             elsif (defined($tr{$encoding}{'utf8jp'}{$bin{'utf8jp' }}) and ($tr{$encoding}{'utf8jp'}{$bin{'utf8jp' }} ne '')) {
174             die qq{@{[__FILE__]} duplicate definitions \$tr{'$encoding'}{'utf8jp'}{'$hex{utf8}'} = "$hex{$encoding}" and "} . uc unpack('H*',$tr{$encoding}{'utf8jp'}{$bin{'utf8jp'}}) . qq{"\n};
175             }
176              
177             $tr{'utf8jp'}{$encoding}{$bin{$encoding}} = $bin{'utf8jp'};
178             $tr{$encoding}{'utf8jp'}{$bin{'utf8jp'} } = $bin{$encoding};
179             }
180             elsif (exists $userarea{$encoding}) {
181             if (my $bin_encoding = shift(@{$userarea{$encoding}})) {
182             $tr{'utf8jp'}{$encoding}{$bin_encoding} = $bin{'utf8jp'};
183             $tr{$encoding}{'utf8jp'}{$bin{'utf8jp'}} = $bin_encoding;
184             }
185             else {
186             die qq{@{[__FILE__]} User area of '$encoding' is not enough\n};
187             }
188             }
189             }
190             }
191             }
192              
193             my $data_count = scalar(keys %{$tr{'utf8jp'}{'utf8jp'}});
194             if ($data_count != 11578) {
195             die qq{@{[__FILE__]} is probably broken(data_count=$data_count).\n};
196             }
197              
198             my %Knowledge_Base_Article_ID_170559_prb_conversion_problem_between_shift_jis_and_unicode = ();
199             for (split /\n/, <<'END') {
200             # https://support.microsoft.com/ja-jp/help/170559/prb-conversion-problem-between-shift-jis-and-unicode
201             # CodePage 932 : 398 non-round-trip mappings
202             0x8790 -> U+2252 -> 0x81e0 Approximately Equal To Or The Image Of
203             0x8791 -> U+2261 -> 0x81df Identical To
204             0x8792 -> U+222b -> 0x81e7 Integral
205             0x8795 -> U+221a -> 0x81e3 Square Root
206             0x8796 -> U+22a5 -> 0x81db Up Tack
207             0x8797 -> U+2220 -> 0x81da Angle
208             0x879a -> U+2235 -> 0x81e6 Because
209             0x879b -> U+2229 -> 0x81bf Intersection
210             0x879c -> U+222a -> 0x81be Union
211             0xed40 -> U+7e8a -> 0xfa5c CJK Unified Ideograph
212             0xed41 -> U+891c -> 0xfa5d CJK Unified Ideograph
213             0xed42 -> U+9348 -> 0xfa5e CJK Unified Ideograph
214             0xed43 -> U+9288 -> 0xfa5f CJK Unified Ideograph
215             0xed44 -> U+84dc -> 0xfa60 CJK Unified Ideograph
216             0xed45 -> U+4fc9 -> 0xfa61 CJK Unified Ideograph
217             0xed46 -> U+70bb -> 0xfa62 CJK Unified Ideograph
218             0xed47 -> U+6631 -> 0xfa63 CJK Unified Ideograph
219             0xed48 -> U+68c8 -> 0xfa64 CJK Unified Ideograph
220             0xed49 -> U+92f9 -> 0xfa65 CJK Unified Ideograph
221             0xed4a -> U+66fb -> 0xfa66 CJK Unified Ideograph
222             0xed4b -> U+5f45 -> 0xfa67 CJK Unified Ideograph
223             0xed4c -> U+4e28 -> 0xfa68 CJK Unified Ideograph
224             0xed4d -> U+4ee1 -> 0xfa69 CJK Unified Ideograph
225             0xed4e -> U+4efc -> 0xfa6a CJK Unified Ideograph
226             0xed4f -> U+4f00 -> 0xfa6b CJK Unified Ideograph
227             0xed50 -> U+4f03 -> 0xfa6c CJK Unified Ideograph
228             0xed51 -> U+4f39 -> 0xfa6d CJK Unified Ideograph
229             0xed52 -> U+4f56 -> 0xfa6e CJK Unified Ideograph
230             0xed53 -> U+4f92 -> 0xfa6f CJK Unified Ideograph
231             0xed54 -> U+4f8a -> 0xfa70 CJK Unified Ideograph
232             0xed55 -> U+4f9a -> 0xfa71 CJK Unified Ideograph
233             0xed56 -> U+4f94 -> 0xfa72 CJK Unified Ideograph
234             0xed57 -> U+4fcd -> 0xfa73 CJK Unified Ideograph
235             0xed58 -> U+5040 -> 0xfa74 CJK Unified Ideograph
236             0xed59 -> U+5022 -> 0xfa75 CJK Unified Ideograph
237             0xed5a -> U+4fff -> 0xfa76 CJK Unified Ideograph
238             0xed5b -> U+501e -> 0xfa77 CJK Unified Ideograph
239             0xed5c -> U+5046 -> 0xfa78 CJK Unified Ideograph
240             0xed5d -> U+5070 -> 0xfa79 CJK Unified Ideograph
241             0xed5e -> U+5042 -> 0xfa7a CJK Unified Ideograph
242             0xed5f -> U+5094 -> 0xfa7b CJK Unified Ideograph
243             0xed60 -> U+50f4 -> 0xfa7c CJK Unified Ideograph
244             0xed61 -> U+50d8 -> 0xfa7d CJK Unified Ideograph
245             0xed62 -> U+514a -> 0xfa7e CJK Unified Ideograph
246             0xed63 -> U+5164 -> 0xfa80 CJK Unified Ideograph
247             0xed64 -> U+519d -> 0xfa81 CJK Unified Ideograph
248             0xed65 -> U+51be -> 0xfa82 CJK Unified Ideograph
249             0xed66 -> U+51ec -> 0xfa83 CJK Unified Ideograph
250             0xed67 -> U+5215 -> 0xfa84 CJK Unified Ideograph
251             0xed68 -> U+529c -> 0xfa85 CJK Unified Ideograph
252             0xed69 -> U+52a6 -> 0xfa86 CJK Unified Ideograph
253             0xed6a -> U+52c0 -> 0xfa87 CJK Unified Ideograph
254             0xed6b -> U+52db -> 0xfa88 CJK Unified Ideograph
255             0xed6c -> U+5300 -> 0xfa89 CJK Unified Ideograph
256             0xed6d -> U+5307 -> 0xfa8a CJK Unified Ideograph
257             0xed6e -> U+5324 -> 0xfa8b CJK Unified Ideograph
258             0xed6f -> U+5372 -> 0xfa8c CJK Unified Ideograph
259             0xed70 -> U+5393 -> 0xfa8d CJK Unified Ideograph
260             0xed71 -> U+53b2 -> 0xfa8e CJK Unified Ideograph
261             0xed72 -> U+53dd -> 0xfa8f CJK Unified Ideograph
262             0xed73 -> U+fa0e -> 0xfa90 CJK compatibility Ideograph
263             0xed74 -> U+549c -> 0xfa91 CJK Unified Ideograph
264             0xed75 -> U+548a -> 0xfa92 CJK Unified Ideograph
265             0xed76 -> U+54a9 -> 0xfa93 CJK Unified Ideograph
266             0xed77 -> U+54ff -> 0xfa94 CJK Unified Ideograph
267             0xed78 -> U+5586 -> 0xfa95 CJK Unified Ideograph
268             0xed79 -> U+5759 -> 0xfa96 CJK Unified Ideograph
269             0xed7a -> U+5765 -> 0xfa97 CJK Unified Ideograph
270             0xed7b -> U+57ac -> 0xfa98 CJK Unified Ideograph
271             0xed7c -> U+57c8 -> 0xfa99 CJK Unified Ideograph
272             0xed7d -> U+57c7 -> 0xfa9a CJK Unified Ideograph
273             0xed7e -> U+fa0f -> 0xfa9b CJK compatibility Ideograph
274             0xed80 -> U+fa10 -> 0xfa9c CJK compatibility Ideograph
275             0xed81 -> U+589e -> 0xfa9d CJK Unified Ideograph
276             0xed82 -> U+58b2 -> 0xfa9e CJK Unified Ideograph
277             0xed83 -> U+590b -> 0xfa9f CJK Unified Ideograph
278             0xed84 -> U+5953 -> 0xfaa0 CJK Unified Ideograph
279             0xed85 -> U+595b -> 0xfaa1 CJK Unified Ideograph
280             0xed86 -> U+595d -> 0xfaa2 CJK Unified Ideograph
281             0xed87 -> U+5963 -> 0xfaa3 CJK Unified Ideograph
282             0xed88 -> U+59a4 -> 0xfaa4 CJK Unified Ideograph
283             0xed89 -> U+59ba -> 0xfaa5 CJK Unified Ideograph
284             0xed8a -> U+5b56 -> 0xfaa6 CJK Unified Ideograph
285             0xed8b -> U+5bc0 -> 0xfaa7 CJK Unified Ideograph
286             0xed8c -> U+752f -> 0xfaa8 CJK Unified Ideograph
287             0xed8d -> U+5bd8 -> 0xfaa9 CJK Unified Ideograph
288             0xed8e -> U+5bec -> 0xfaaa CJK Unified Ideograph
289             0xed8f -> U+5c1e -> 0xfaab CJK Unified Ideograph
290             0xed90 -> U+5ca6 -> 0xfaac CJK Unified Ideograph
291             0xed91 -> U+5cba -> 0xfaad CJK Unified Ideograph
292             0xed92 -> U+5cf5 -> 0xfaae CJK Unified Ideograph
293             0xed93 -> U+5d27 -> 0xfaaf CJK Unified Ideograph
294             0xed94 -> U+5d53 -> 0xfab0 CJK Unified Ideograph
295             0xed95 -> U+fa11 -> 0xfab1 CJK compatibility Ideograph
296             0xed96 -> U+5d42 -> 0xfab2 CJK Unified Ideograph
297             0xed97 -> U+5d6d -> 0xfab3 CJK Unified Ideograph
298             0xed98 -> U+5db8 -> 0xfab4 CJK Unified Ideograph
299             0xed99 -> U+5db9 -> 0xfab5 CJK Unified Ideograph
300             0xed9a -> U+5dd0 -> 0xfab6 CJK Unified Ideograph
301             0xed9b -> U+5f21 -> 0xfab7 CJK Unified Ideograph
302             0xed9c -> U+5f34 -> 0xfab8 CJK Unified Ideograph
303             0xed9d -> U+5f67 -> 0xfab9 CJK Unified Ideograph
304             0xed9e -> U+5fb7 -> 0xfaba CJK Unified Ideograph
305             0xed9f -> U+5fde -> 0xfabb CJK Unified Ideograph
306             0xeda0 -> U+605d -> 0xfabc CJK Unified Ideograph
307             0xeda1 -> U+6085 -> 0xfabd CJK Unified Ideograph
308             0xeda2 -> U+608a -> 0xfabe CJK Unified Ideograph
309             0xeda3 -> U+60de -> 0xfabf CJK Unified Ideograph
310             0xeda4 -> U+60d5 -> 0xfac0 CJK Unified Ideograph
311             0xeda5 -> U+6120 -> 0xfac1 CJK Unified Ideograph
312             0xeda6 -> U+60f2 -> 0xfac2 CJK Unified Ideograph
313             0xeda7 -> U+6111 -> 0xfac3 CJK Unified Ideograph
314             0xeda8 -> U+6137 -> 0xfac4 CJK Unified Ideograph
315             0xeda9 -> U+6130 -> 0xfac5 CJK Unified Ideograph
316             0xedaa -> U+6198 -> 0xfac6 CJK Unified Ideograph
317             0xedab -> U+6213 -> 0xfac7 CJK Unified Ideograph
318             0xedac -> U+62a6 -> 0xfac8 CJK Unified Ideograph
319             0xedad -> U+63f5 -> 0xfac9 CJK Unified Ideograph
320             0xedae -> U+6460 -> 0xfaca CJK Unified Ideograph
321             0xedaf -> U+649d -> 0xfacb CJK Unified Ideograph
322             0xedb0 -> U+64ce -> 0xfacc CJK Unified Ideograph
323             0xedb1 -> U+654e -> 0xfacd CJK Unified Ideograph
324             0xedb2 -> U+6600 -> 0xface CJK Unified Ideograph
325             0xedb3 -> U+6615 -> 0xfacf CJK Unified Ideograph
326             0xedb4 -> U+663b -> 0xfad0 CJK Unified Ideograph
327             0xedb5 -> U+6609 -> 0xfad1 CJK Unified Ideograph
328             0xedb6 -> U+662e -> 0xfad2 CJK Unified Ideograph
329             0xedb7 -> U+661e -> 0xfad3 CJK Unified Ideograph
330             0xedb8 -> U+6624 -> 0xfad4 CJK Unified Ideograph
331             0xedb9 -> U+6665 -> 0xfad5 CJK Unified Ideograph
332             0xedba -> U+6657 -> 0xfad6 CJK Unified Ideograph
333             0xedbb -> U+6659 -> 0xfad7 CJK Unified Ideograph
334             0xedbc -> U+fa12 -> 0xfad8 CJK compatibility Ideograph
335             0xedbd -> U+6673 -> 0xfad9 CJK Unified Ideograph
336             0xedbe -> U+6699 -> 0xfada CJK Unified Ideograph
337             0xedbf -> U+66a0 -> 0xfadb CJK Unified Ideograph
338             0xedc0 -> U+66b2 -> 0xfadc CJK Unified Ideograph
339             0xedc1 -> U+66bf -> 0xfadd CJK Unified Ideograph
340             0xedc2 -> U+66fa -> 0xfade CJK Unified Ideograph
341             0xedc3 -> U+670e -> 0xfadf CJK Unified Ideograph
342             0xedc4 -> U+f929 -> 0xfae0 CJK compatibility Ideograph
343             0xedc5 -> U+6766 -> 0xfae1 CJK Unified Ideograph
344             0xedc6 -> U+67bb -> 0xfae2 CJK Unified Ideograph
345             0xedc7 -> U+6852 -> 0xfae3 CJK Unified Ideograph
346             0xedc8 -> U+67c0 -> 0xfae4 CJK Unified Ideograph
347             0xedc9 -> U+6801 -> 0xfae5 CJK Unified Ideograph
348             0xedca -> U+6844 -> 0xfae6 CJK Unified Ideograph
349             0xedcb -> U+68cf -> 0xfae7 CJK Unified Ideograph
350             0xedcc -> U+fa13 -> 0xfae8 CJK compatibility Ideograph
351             0xedcd -> U+6968 -> 0xfae9 CJK Unified Ideograph
352             0xedce -> U+fa14 -> 0xfaea CJK compatibility Ideograph
353             0xedcf -> U+6998 -> 0xfaeb CJK Unified Ideograph
354             0xedd0 -> U+69e2 -> 0xfaec CJK Unified Ideograph
355             0xedd1 -> U+6a30 -> 0xfaed CJK Unified Ideograph
356             0xedd2 -> U+6a6b -> 0xfaee CJK Unified Ideograph
357             0xedd3 -> U+6a46 -> 0xfaef CJK Unified Ideograph
358             0xedd4 -> U+6a73 -> 0xfaf0 CJK Unified Ideograph
359             0xedd5 -> U+6a7e -> 0xfaf1 CJK Unified Ideograph
360             0xedd6 -> U+6ae2 -> 0xfaf2 CJK Unified Ideograph
361             0xedd7 -> U+6ae4 -> 0xfaf3 CJK Unified Ideograph
362             0xedd8 -> U+6bd6 -> 0xfaf4 CJK Unified Ideograph
363             0xedd9 -> U+6c3f -> 0xfaf5 CJK Unified Ideograph
364             0xedda -> U+6c5c -> 0xfaf6 CJK Unified Ideograph
365             0xeddb -> U+6c86 -> 0xfaf7 CJK Unified Ideograph
366             0xeddc -> U+6c6f -> 0xfaf8 CJK Unified Ideograph
367             0xeddd -> U+6cda -> 0xfaf9 CJK Unified Ideograph
368             0xedde -> U+6d04 -> 0xfafa CJK Unified Ideograph
369             0xeddf -> U+6d87 -> 0xfafb CJK Unified Ideograph
370             0xede0 -> U+6d6f -> 0xfafc CJK Unified Ideograph
371             0xede1 -> U+6d96 -> 0xfb40 CJK Unified Ideograph
372             0xede2 -> U+6dac -> 0xfb41 CJK Unified Ideograph
373             0xede3 -> U+6dcf -> 0xfb42 CJK Unified Ideograph
374             0xede4 -> U+6df8 -> 0xfb43 CJK Unified Ideograph
375             0xede5 -> U+6df2 -> 0xfb44 CJK Unified Ideograph
376             0xede6 -> U+6dfc -> 0xfb45 CJK Unified Ideograph
377             0xede7 -> U+6e39 -> 0xfb46 CJK Unified Ideograph
378             0xede8 -> U+6e5c -> 0xfb47 CJK Unified Ideograph
379             0xede9 -> U+6e27 -> 0xfb48 CJK Unified Ideograph
380             0xedea -> U+6e3c -> 0xfb49 CJK Unified Ideograph
381             0xedeb -> U+6ebf -> 0xfb4a CJK Unified Ideograph
382             0xedec -> U+6f88 -> 0xfb4b CJK Unified Ideograph
383             0xeded -> U+6fb5 -> 0xfb4c CJK Unified Ideograph
384             0xedee -> U+6ff5 -> 0xfb4d CJK Unified Ideograph
385             0xedef -> U+7005 -> 0xfb4e CJK Unified Ideograph
386             0xedf0 -> U+7007 -> 0xfb4f CJK Unified Ideograph
387             0xedf1 -> U+7028 -> 0xfb50 CJK Unified Ideograph
388             0xedf2 -> U+7085 -> 0xfb51 CJK Unified Ideograph
389             0xedf3 -> U+70ab -> 0xfb52 CJK Unified Ideograph
390             0xedf4 -> U+710f -> 0xfb53 CJK Unified Ideograph
391             0xedf5 -> U+7104 -> 0xfb54 CJK Unified Ideograph
392             0xedf6 -> U+715c -> 0xfb55 CJK Unified Ideograph
393             0xedf7 -> U+7146 -> 0xfb56 CJK Unified Ideograph
394             0xedf8 -> U+7147 -> 0xfb57 CJK Unified Ideograph
395             0xedf9 -> U+fa15 -> 0xfb58 CJK compatibility Ideograph
396             0xedfa -> U+71c1 -> 0xfb59 CJK Unified Ideograph
397             0xedfb -> U+71fe -> 0xfb5a CJK Unified Ideograph
398             0xedfc -> U+72b1 -> 0xfb5b CJK Unified Ideograph
399             0xee40 -> U+72be -> 0xfb5c CJK Unified Ideograph
400             0xee41 -> U+7324 -> 0xfb5d CJK Unified Ideograph
401             0xee42 -> U+fa16 -> 0xfb5e CJK compatibility Ideograph
402             0xee43 -> U+7377 -> 0xfb5f CJK Unified Ideograph
403             0xee44 -> U+73bd -> 0xfb60 CJK Unified Ideograph
404             0xee45 -> U+73c9 -> 0xfb61 CJK Unified Ideograph
405             0xee46 -> U+73d6 -> 0xfb62 CJK Unified Ideograph
406             0xee47 -> U+73e3 -> 0xfb63 CJK Unified Ideograph
407             0xee48 -> U+73d2 -> 0xfb64 CJK Unified Ideograph
408             0xee49 -> U+7407 -> 0xfb65 CJK Unified Ideograph
409             0xee4a -> U+73f5 -> 0xfb66 CJK Unified Ideograph
410             0xee4b -> U+7426 -> 0xfb67 CJK Unified Ideograph
411             0xee4c -> U+742a -> 0xfb68 CJK Unified Ideograph
412             0xee4d -> U+7429 -> 0xfb69 CJK Unified Ideograph
413             0xee4e -> U+742e -> 0xfb6a CJK Unified Ideograph
414             0xee4f -> U+7462 -> 0xfb6b CJK Unified Ideograph
415             0xee50 -> U+7489 -> 0xfb6c CJK Unified Ideograph
416             0xee51 -> U+749f -> 0xfb6d CJK Unified Ideograph
417             0xee52 -> U+7501 -> 0xfb6e CJK Unified Ideograph
418             0xee53 -> U+756f -> 0xfb6f CJK Unified Ideograph
419             0xee54 -> U+7682 -> 0xfb70 CJK Unified Ideograph
420             0xee55 -> U+769c -> 0xfb71 CJK Unified Ideograph
421             0xee56 -> U+769e -> 0xfb72 CJK Unified Ideograph
422             0xee57 -> U+769b -> 0xfb73 CJK Unified Ideograph
423             0xee58 -> U+76a6 -> 0xfb74 CJK Unified Ideograph
424             0xee59 -> U+fa17 -> 0xfb75 CJK compatibility Ideograph
425             0xee5a -> U+7746 -> 0xfb76 CJK Unified Ideograph
426             0xee5b -> U+52af -> 0xfb77 CJK Unified Ideograph
427             0xee5c -> U+7821 -> 0xfb78 CJK Unified Ideograph
428             0xee5d -> U+784e -> 0xfb79 CJK Unified Ideograph
429             0xee5e -> U+7864 -> 0xfb7a CJK Unified Ideograph
430             0xee5f -> U+787a -> 0xfb7b CJK Unified Ideograph
431             0xee60 -> U+7930 -> 0xfb7c CJK Unified Ideograph
432             0xee61 -> U+fa18 -> 0xfb7d CJK compatibility Ideograph
433             0xee62 -> U+fa19 -> 0xfb7e CJK compatibility Ideograph
434             0xee63 -> U+fa1a -> 0xfb80 CJK compatibility Ideograph
435             0xee64 -> U+7994 -> 0xfb81 CJK Unified Ideograph
436             0xee65 -> U+fa1b -> 0xfb82 CJK compatibility Ideograph
437             0xee66 -> U+799b -> 0xfb83 CJK Unified Ideograph
438             0xee67 -> U+7ad1 -> 0xfb84 CJK Unified Ideograph
439             0xee68 -> U+7ae7 -> 0xfb85 CJK Unified Ideograph
440             0xee69 -> U+fa1c -> 0xfb86 CJK compatibility Ideograph
441             0xee6a -> U+7aeb -> 0xfb87 CJK Unified Ideograph
442             0xee6b -> U+7b9e -> 0xfb88 CJK Unified Ideograph
443             0xee6c -> U+fa1d -> 0xfb89 CJK compatibility Ideograph
444             0xee6d -> U+7d48 -> 0xfb8a CJK Unified Ideograph
445             0xee6e -> U+7d5c -> 0xfb8b CJK Unified Ideograph
446             0xee6f -> U+7db7 -> 0xfb8c CJK Unified Ideograph
447             0xee70 -> U+7da0 -> 0xfb8d CJK Unified Ideograph
448             0xee71 -> U+7dd6 -> 0xfb8e CJK Unified Ideograph
449             0xee72 -> U+7e52 -> 0xfb8f CJK Unified Ideograph
450             0xee73 -> U+7f47 -> 0xfb90 CJK Unified Ideograph
451             0xee74 -> U+7fa1 -> 0xfb91 CJK Unified Ideograph
452             0xee75 -> U+fa1e -> 0xfb92 CJK compatibility Ideograph
453             0xee76 -> U+8301 -> 0xfb93 CJK Unified Ideograph
454             0xee77 -> U+8362 -> 0xfb94 CJK Unified Ideograph
455             0xee78 -> U+837f -> 0xfb95 CJK Unified Ideograph
456             0xee79 -> U+83c7 -> 0xfb96 CJK Unified Ideograph
457             0xee7a -> U+83f6 -> 0xfb97 CJK Unified Ideograph
458             0xee7b -> U+8448 -> 0xfb98 CJK Unified Ideograph
459             0xee7c -> U+84b4 -> 0xfb99 CJK Unified Ideograph
460             0xee7d -> U+8553 -> 0xfb9a CJK Unified Ideograph
461             0xee7e -> U+8559 -> 0xfb9b CJK Unified Ideograph
462             0xee80 -> U+856b -> 0xfb9c CJK Unified Ideograph
463             0xee81 -> U+fa1f -> 0xfb9d CJK compatibility Ideograph
464             0xee82 -> U+85b0 -> 0xfb9e CJK Unified Ideograph
465             0xee83 -> U+fa20 -> 0xfb9f CJK compatibility Ideograph
466             0xee84 -> U+fa21 -> 0xfba0 CJK compatibility Ideograph
467             0xee85 -> U+8807 -> 0xfba1 CJK Unified Ideograph
468             0xee86 -> U+88f5 -> 0xfba2 CJK Unified Ideograph
469             0xee87 -> U+8a12 -> 0xfba3 CJK Unified Ideograph
470             0xee88 -> U+8a37 -> 0xfba4 CJK Unified Ideograph
471             0xee89 -> U+8a79 -> 0xfba5 CJK Unified Ideograph
472             0xee8a -> U+8aa7 -> 0xfba6 CJK Unified Ideograph
473             0xee8b -> U+8abe -> 0xfba7 CJK Unified Ideograph
474             0xee8c -> U+8adf -> 0xfba8 CJK Unified Ideograph
475             0xee8d -> U+fa22 -> 0xfba9 CJK compatibility Ideograph
476             0xee8e -> U+8af6 -> 0xfbaa CJK Unified Ideograph
477             0xee8f -> U+8b53 -> 0xfbab CJK Unified Ideograph
478             0xee90 -> U+8b7f -> 0xfbac CJK Unified Ideograph
479             0xee91 -> U+8cf0 -> 0xfbad CJK Unified Ideograph
480             0xee92 -> U+8cf4 -> 0xfbae CJK Unified Ideograph
481             0xee93 -> U+8d12 -> 0xfbaf CJK Unified Ideograph
482             0xee94 -> U+8d76 -> 0xfbb0 CJK Unified Ideograph
483             0xee95 -> U+fa23 -> 0xfbb1 CJK compatibility Ideograph
484             0xee96 -> U+8ecf -> 0xfbb2 CJK Unified Ideograph
485             0xee97 -> U+fa24 -> 0xfbb3 CJK compatibility Ideograph
486             0xee98 -> U+fa25 -> 0xfbb4 CJK compatibility Ideograph
487             0xee99 -> U+9067 -> 0xfbb5 CJK Unified Ideograph
488             0xee9a -> U+90de -> 0xfbb6 CJK Unified Ideograph
489             0xee9b -> U+fa26 -> 0xfbb7 CJK compatibility Ideograph
490             0xee9c -> U+9115 -> 0xfbb8 CJK Unified Ideograph
491             0xee9d -> U+9127 -> 0xfbb9 CJK Unified Ideograph
492             0xee9e -> U+91da -> 0xfbba CJK Unified Ideograph
493             0xee9f -> U+91d7 -> 0xfbbb CJK Unified Ideograph
494             0xeea0 -> U+91de -> 0xfbbc CJK Unified Ideograph
495             0xeea1 -> U+91ed -> 0xfbbd CJK Unified Ideograph
496             0xeea2 -> U+91ee -> 0xfbbe CJK Unified Ideograph
497             0xeea3 -> U+91e4 -> 0xfbbf CJK Unified Ideograph
498             0xeea4 -> U+91e5 -> 0xfbc0 CJK Unified Ideograph
499             0xeea5 -> U+9206 -> 0xfbc1 CJK Unified Ideograph
500             0xeea6 -> U+9210 -> 0xfbc2 CJK Unified Ideograph
501             0xeea7 -> U+920a -> 0xfbc3 CJK Unified Ideograph
502             0xeea8 -> U+923a -> 0xfbc4 CJK Unified Ideograph
503             0xeea9 -> U+9240 -> 0xfbc5 CJK Unified Ideograph
504             0xeeaa -> U+923c -> 0xfbc6 CJK Unified Ideograph
505             0xeeab -> U+924e -> 0xfbc7 CJK Unified Ideograph
506             0xeeac -> U+9259 -> 0xfbc8 CJK Unified Ideograph
507             0xeead -> U+9251 -> 0xfbc9 CJK Unified Ideograph
508             0xeeae -> U+9239 -> 0xfbca CJK Unified Ideograph
509             0xeeaf -> U+9267 -> 0xfbcb CJK Unified Ideograph
510             0xeeb0 -> U+92a7 -> 0xfbcc CJK Unified Ideograph
511             0xeeb1 -> U+9277 -> 0xfbcd CJK Unified Ideograph
512             0xeeb2 -> U+9278 -> 0xfbce CJK Unified Ideograph
513             0xeeb3 -> U+92e7 -> 0xfbcf CJK Unified Ideograph
514             0xeeb4 -> U+92d7 -> 0xfbd0 CJK Unified Ideograph
515             0xeeb5 -> U+92d9 -> 0xfbd1 CJK Unified Ideograph
516             0xeeb6 -> U+92d0 -> 0xfbd2 CJK Unified Ideograph
517             0xeeb7 -> U+fa27 -> 0xfbd3 CJK compatibility Ideograph
518             0xeeb8 -> U+92d5 -> 0xfbd4 CJK Unified Ideograph
519             0xeeb9 -> U+92e0 -> 0xfbd5 CJK Unified Ideograph
520             0xeeba -> U+92d3 -> 0xfbd6 CJK Unified Ideograph
521             0xeebb -> U+9325 -> 0xfbd7 CJK Unified Ideograph
522             0xeebc -> U+9321 -> 0xfbd8 CJK Unified Ideograph
523             0xeebd -> U+92fb -> 0xfbd9 CJK Unified Ideograph
524             0xeebe -> U+fa28 -> 0xfbda CJK compatibility Ideograph
525             0xeebf -> U+931e -> 0xfbdb CJK Unified Ideograph
526             0xeec0 -> U+92ff -> 0xfbdc CJK Unified Ideograph
527             0xeec1 -> U+931d -> 0xfbdd CJK Unified Ideograph
528             0xeec2 -> U+9302 -> 0xfbde CJK Unified Ideograph
529             0xeec3 -> U+9370 -> 0xfbdf CJK Unified Ideograph
530             0xeec4 -> U+9357 -> 0xfbe0 CJK Unified Ideograph
531             0xeec5 -> U+93a4 -> 0xfbe1 CJK Unified Ideograph
532             0xeec6 -> U+93c6 -> 0xfbe2 CJK Unified Ideograph
533             0xeec7 -> U+93de -> 0xfbe3 CJK Unified Ideograph
534             0xeec8 -> U+93f8 -> 0xfbe4 CJK Unified Ideograph
535             0xeec9 -> U+9431 -> 0xfbe5 CJK Unified Ideograph
536             0xeeca -> U+9445 -> 0xfbe6 CJK Unified Ideograph
537             0xeecb -> U+9448 -> 0xfbe7 CJK Unified Ideograph
538             0xeecc -> U+9592 -> 0xfbe8 CJK Unified Ideograph
539             0xeecd -> U+f9dc -> 0xfbe9 CJK compatibility Ideograph
540             0xeece -> U+fa29 -> 0xfbea CJK compatibility Ideograph
541             0xeecf -> U+969d -> 0xfbeb CJK Unified Ideograph
542             0xeed0 -> U+96af -> 0xfbec CJK Unified Ideograph
543             0xeed1 -> U+9733 -> 0xfbed CJK Unified Ideograph
544             0xeed2 -> U+973b -> 0xfbee CJK Unified Ideograph
545             0xeed3 -> U+9743 -> 0xfbef CJK Unified Ideograph
546             0xeed4 -> U+974d -> 0xfbf0 CJK Unified Ideograph
547             0xeed5 -> U+974f -> 0xfbf1 CJK Unified Ideograph
548             0xeed6 -> U+9751 -> 0xfbf2 CJK Unified Ideograph
549             0xeed7 -> U+9755 -> 0xfbf3 CJK Unified Ideograph
550             0xeed8 -> U+9857 -> 0xfbf4 CJK Unified Ideograph
551             0xeed9 -> U+9865 -> 0xfbf5 CJK Unified Ideograph
552             0xeeda -> U+fa2a -> 0xfbf6 CJK compatibility Ideograph
553             0xeedb -> U+fa2b -> 0xfbf7 CJK compatibility Ideograph
554             0xeedc -> U+9927 -> 0xfbf8 CJK Unified Ideograph
555             0xeedd -> U+fa2c -> 0xfbf9 CJK compatibility Ideograph
556             0xeede -> U+999e -> 0xfbfa CJK Unified Ideograph
557             0xeedf -> U+9a4e -> 0xfbfb CJK Unified Ideograph
558             0xeee0 -> U+9ad9 -> 0xfbfc CJK Unified Ideograph
559             0xeee1 -> U+9adc -> 0xfc40 CJK Unified Ideograph
560             0xeee2 -> U+9b75 -> 0xfc41 CJK Unified Ideograph
561             0xeee3 -> U+9b72 -> 0xfc42 CJK Unified Ideograph
562             0xeee4 -> U+9b8f -> 0xfc43 CJK Unified Ideograph
563             0xeee5 -> U+9bb1 -> 0xfc44 CJK Unified Ideograph
564             0xeee6 -> U+9bbb -> 0xfc45 CJK Unified Ideograph
565             0xeee7 -> U+9c00 -> 0xfc46 CJK Unified Ideograph
566             0xeee8 -> U+9d70 -> 0xfc47 CJK Unified Ideograph
567             0xeee9 -> U+9d6b -> 0xfc48 CJK Unified Ideograph
568             0xeeea -> U+fa2d -> 0xfc49 CJK compatibility Ideograph
569             0xeeeb -> U+9e19 -> 0xfc4a CJK Unified Ideograph
570             0xeeec -> U+9ed1 -> 0xfc4b CJK Unified Ideograph
571             0xeeef -> U+2170 -> 0xfa40 Small Roman Numeral One
572             0xeef0 -> U+2171 -> 0xfa41 Small Roman Numeral Two
573             0xeef1 -> U+2172 -> 0xfa42 Small Roman Numeral Three
574             0xeef2 -> U+2173 -> 0xfa43 Small Roman Numeral Four
575             0xeef3 -> U+2174 -> 0xfa44 Small Roman Numeral Five
576             0xeef4 -> U+2175 -> 0xfa45 Small Roman Numeral Six
577             0xeef5 -> U+2176 -> 0xfa46 Small Roman Numeral Seven
578             0xeef6 -> U+2177 -> 0xfa47 Small Roman Numeral Eight
579             0xeef7 -> U+2178 -> 0xfa48 Small Roman Numeral Nine
580             0xeef8 -> U+2179 -> 0xfa49 Small Roman Numeral Ten
581             0xeef9 -> U+ffe2 -> 0x81ca Fullwidth Not Sign
582             0xeefa -> U+ffe4 -> 0xfa55 Fullwidth Broken Bar
583             0xeefb -> U+ff07 -> 0xfa56 Fullwidth Apostrophe
584             0xeefc -> U+ff02 -> 0xfa57 Fullwidth Quotation Mark
585             0xfa4a -> U+2160 -> 0x8754 Roman Numeral One
586             0xfa4b -> U+2161 -> 0x8755 Roman Numeral Two
587             0xfa4c -> U+2162 -> 0x8756 Roman Numeral Three
588             0xfa4d -> U+2163 -> 0x8757 Roman Numeral Four
589             0xfa4e -> U+2164 -> 0x8758 Roman Numeral Five
590             0xfa4f -> U+2165 -> 0x8759 Roman Numeral Six
591             0xfa50 -> U+2166 -> 0x875a Roman Numeral Seven
592             0xfa51 -> U+2167 -> 0x875b Roman Numeral Eight
593             0xfa52 -> U+2168 -> 0x875c Roman Numeral Nine
594             0xfa53 -> U+2169 -> 0x875d Roman Numeral Ten
595             0xfa54 -> U+ffe2 -> 0x81ca Fullwidth Not Sign
596             0xfa58 -> U+3231 -> 0x878a Parenthesized Ideograph Stock
597             0xfa59 -> U+2116 -> 0x8782 Numero Sign
598             0xfa5a -> U+2121 -> 0x8784 Telephone Sign
599             0xfa5b -> U+2235 -> 0x81e6 Because
600             END
601             next if /^#/;
602             if (my($cp932a, $Unicode, $cp932b) = / 0x([0123456789abcdef]{4}) .+? U\+([0123456789abcdef]{4}) .+? 0x([0123456789abcdef]{4}) /x) {
603             $Knowledge_Base_Article_ID_170559_prb_conversion_problem_between_shift_jis_and_unicode{ pack('H*',uc($cp932a)) } = pack('H*',uc($cp932b));
604             }
605             }
606              
607             my %x = (
608              
609             # utf8jp(UTF-8-SPUA-JP) is best choice as internal encoding, because it
610             # makes one character by one code point on fixed length without grapheme
611             # clustering.
612             # Other all are not so.
613              
614             'cp932x' => {
615             'get_ctype' => sub { m!^[^\x81-\x9F\xE0-\xFC]! ? 'SBCS' : m!^[\x81-\x9F\xE0-\xFC]! ? 'DBCS' : undef },
616             'set_ctype' => sub { q!! },
617             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^((?:\x9C\x5A)?[\x00-\xFF]{1,2})!!; $1 },
618             'getc' => sub { local $^W; $tr{'utf8jp'}{'cp932x'}{$Knowledge_Base_Article_ID_170559_prb_conversion_problem_between_shift_jis_and_unicode{$_[0]}||$_[0]} },
619             'putc' => sub { local $^W; $tr{'cp932x'}{'utf8jp'}{$_[0]} },
620             },
621             'cp932' => {
622             'get_ctype' => sub { m!^[^\x81-\x9F\xE0-\xFC]! ? 'SBCS' : m!^[\x81-\x9F\xE0-\xFC]! ? 'DBCS' : undef },
623             'set_ctype' => sub { q!! },
624             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
625             'getc' => sub { local $^W; $tr{'utf8jp'}{'cp932'}{$Knowledge_Base_Article_ID_170559_prb_conversion_problem_between_shift_jis_and_unicode{$_[0]}||$_[0]} },
626             'putc' => sub { local $^W; $tr{'cp932'}{'utf8jp'}{$_[0]} },
627             },
628             'cp932ibm' => {
629             'get_ctype' => sub { m!^[^\x81-\x9F\xE0-\xFC]! ? 'SBCS' : m!^[\x81-\x9F\xE0-\xFC]! ? 'DBCS' : undef },
630             'set_ctype' => sub { q!! },
631             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
632             # 'getc' => sub { local $^W; $tr{'utf8jp'}{'cp932ibm'}{$_[0]} },
633             # VVVVVVVV--- 'cp932' with KB170559 is better than only 'cp932ibm' on read
634             'getc' => sub { local $^W; $tr{'utf8jp'}{'cp932' }{$Knowledge_Base_Article_ID_170559_prb_conversion_problem_between_shift_jis_and_unicode{$_[0]}||$_[0]} },
635             'putc' => sub { local $^W; $tr{'cp932ibm'}{'utf8jp'}{$_[0]} },
636             },
637             'cp932nec' => {
638             'get_ctype' => sub { m!^[^\x81-\x9F\xE0-\xFC]! ? 'SBCS' : m!^[\x81-\x9F\xE0-\xFC]! ? 'DBCS' : undef },
639             'set_ctype' => sub { q!! },
640             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
641             # 'getc' => sub { local $^W; $tr{'utf8jp'}{'cp932nec'}{$_[0]} },
642             # VVVVVVVV--- 'cp932' with KB170559 is better than only 'cp932nec' on read
643             'getc' => sub { local $^W; $tr{'utf8jp'}{'cp932' }{$Knowledge_Base_Article_ID_170559_prb_conversion_problem_between_shift_jis_and_unicode{$_[0]}||$_[0]} },
644             'putc' => sub { local $^W; $tr{'cp932nec'}{'utf8jp'}{$_[0]} },
645             },
646             'sjis2004' => {
647             'get_ctype' => sub { m!^[^\x81-\x9F\xE0-\xFC]! ? 'SBCS' : m!^[\x81-\x9F\xE0-\xFC]! ? 'DBCS' : undef },
648             'set_ctype' => sub { q!! },
649             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
650             'getc' => sub { local $^W; $tr{'utf8jp'}{'sjis2004'}{$_[0]} },
651             'putc' => sub { local $^W; $tr{'sjis2004'}{'utf8jp'}{$_[0]} },
652             },
653             'cp00930' => {
654             'get_ctype' => sub { s!^\x0F!! ? 'SBCS' : s!^\x0E!! ? 'DBCS' : undef },
655             'set_ctype' => sub { {'SBCS'=>"\x0F", 'DBCS'=>"\x0E", }->{$_[0]} },
656             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
657             'getc' => sub { local $^W; $tr{'utf8jp'}{'cp00930'}{$_[0]} },
658             'putc' => sub { local $^W; $tr{'cp00930'}{'utf8jp'}{$_[0]} },
659             },
660             'keis78' => {
661             'get_ctype' => sub { s!^\x0A\x41!! ? 'SBCS' : s!^\x0A\x42!! ? 'DBCS' : undef },
662             'set_ctype' => sub { {'SBCS'=>"\x0A\x41", 'DBCS'=>"\x0A\x42", }->{$_[0]} },
663             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
664             'getc' => sub { local $^W; $tr{'utf8jp'}{'keis78'}{$_[0]} },
665             'putc' => sub { local $^W; $tr{'keis78'}{'utf8jp'}{$_[0]} },
666             },
667             'keis83' => {
668             'get_ctype' => sub { s!^\x0A\x41!! ? 'SBCS' : s!^\x0A\x42!! ? 'DBCS' : undef },
669             'set_ctype' => sub { {'SBCS'=>"\x0A\x41", 'DBCS'=>"\x0A\x42", }->{$_[0]} },
670             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
671             'getc' => sub { local $^W; $tr{'utf8jp'}{'keis83'}{$_[0]} },
672             'putc' => sub { local $^W; $tr{'keis83'}{'utf8jp'}{$_[0]} },
673             },
674             'keis90' => {
675             'get_ctype' => sub { s!^\x0A\x41!! ? 'SBCS' : s!^\x0A\x42!! ? 'DBCS' : undef },
676             'set_ctype' => sub { {'SBCS'=>"\x0A\x41", 'DBCS'=>"\x0A\x42", }->{$_[0]} },
677             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
678             'getc' => sub { local $^W; $tr{'utf8jp'}{'keis90'}{$_[0]} },
679             'putc' => sub { local $^W; $tr{'keis90'}{'utf8jp'}{$_[0]} },
680             },
681             'jef' => {
682             'get_ctype' => sub { s!^\x29!! ? 'SBCS' : s!^[\x28\x38]!! ? 'DBCS' : undef },
683             'set_ctype' => sub { {'SBCS'=>"\x29", 'DBCS'=>"\x28", }->{$_[0]} },
684             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
685             'getc' => sub { local $^W; $tr{'utf8jp'}{'jef'}{$_[0]} },
686             'putc' => sub { local $^W; $tr{'jef'}{'utf8jp'}{$_[0]} },
687             },
688             'jef9p' => {
689             'get_ctype' => sub { s!^\x29!! ? 'SBCS' : s!^[\x28\x38]!! ? 'DBCS' : undef },
690             'set_ctype' => sub { {'SBCS'=>"\x29", 'DBCS'=>"\x38", }->{$_[0]} },
691             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
692             'getc' => sub { local $^W; $tr{'utf8jp'}{'jef'}{$_[0]} },
693             'putc' => sub { local $^W; $tr{'jef'}{'utf8jp'}{$_[0]} },
694             },
695             'jipsj' => {
696             'get_ctype' => sub { s!^\x1A\x71!! ? 'SBCS' : s!^\x1A\x70!! ? 'DBCS' : undef },
697             'set_ctype' => sub { {'SBCS'=>"\x1A\x71", 'DBCS'=>"\x1A\x70", }->{$_[0]} },
698             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
699             'getc' => sub { local $^W; $tr{'utf8jp'}{'jipsj'}{$_[0]} },
700             'putc' => sub { local $^W; $tr{'jipsj'}{'utf8jp'}{$_[0]} },
701             },
702             'jipse' => {
703             'get_ctype' => sub { s!^\x3F\x76!! ? 'SBCS' : s!^\x3F\x75!! ? 'DBCS' : undef },
704             'set_ctype' => sub { {'SBCS'=>"\x3F\x76", 'DBCS'=>"\x3F\x75", }->{$_[0]} },
705             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
706             'getc' => sub { local $^W; $tr{'utf8jp'}{'jipse'}{$_[0]} },
707             'putc' => sub { local $^W; $tr{'jipse'}{'utf8jp'}{$_[0]} },
708             },
709             'letsj' => {
710             'get_ctype' => sub { s!^\x93\xF1!! ? 'SBCS' : s!^\x93\x70!! ? 'DBCS' : undef },
711             'set_ctype' => sub { {'SBCS'=>"\x93\xF1", 'DBCS'=>"\x93\x70", }->{$_[0]} },
712             'getoct' => sub { $_[0] eq 'SBCS' ? s!^([\x00-\xFF])!! : s!^([\x00-\xFF]{1,2})!!; $1 },
713             'getc' => sub { local $^W; $tr{'utf8jp'}{'letsj'}{$_[0]} },
714             'putc' => sub { local $^W; $tr{'letsj'}{'utf8jp'}{$_[0]} },
715             },
716             'utf8' => {
717             'get_ctype' => sub { m!^[\x00-\x7F\xFE\xFF]! ? 'SBCS' : m!^[^\x00-\x7F\xFE\xFF]! ? 'DBCS' : undef },
718             'set_ctype' => sub { q!! },
719             'getoct' => sub { s!^(
720             [\x00-\x7F\x80-\xBF\xC0-\xC1\xF5-\xFF] |
721             [\xE0-\xE2\xE4-\xEF][\x80-\xBF]{2} |
722             \xE3(?:
723             \x81\x8B\xE3\x82\x9A | # U+304B+309A
724             \x81\x8D\xE3\x82\x9A | # U+304D+309A
725             \x81\x8F\xE3\x82\x9A | # U+304F+309A
726             \x81\x91\xE3\x82\x9A | # U+3051+309A
727             \x81\x93\xE3\x82\x9A | # U+3053+309A
728             \x82\xAB\xE3\x82\x9A | # U+30AB+309A
729             \x82\xAD\xE3\x82\x9A | # U+30AD+309A
730             \x82\xAF\xE3\x82\x9A | # U+30AF+309A
731             \x82\xB1\xE3\x82\x9A | # U+30B1+309A
732             \x82\xB3\xE3\x82\x9A | # U+30B3+309A
733             \x82\xBB\xE3\x82\x9A | # U+30BB+309A
734             \x83\x84\xE3\x82\x9A | # U+30C4+309A
735             \x83\x88\xE3\x82\x9A | # U+30C8+309A
736             \x87\xB7\xE3\x82\x9A | # U+31F7+309A
737             [\x80-\xBF]{2}
738             ) |
739             [\xC2\xC4-\xC8\xCC-\xDF][\x80-\xBF] |
740             \xC3(?:
741             \xA6\xCC\x80 | # U+00E6+0300
742             [\x80-\xBF]
743             ) |
744             \xC9(?:
745             \x94\xCC\x80 | # U+0254+0300
746             \x94\xCC\x81 | # U+0254+0301
747             \x99\xCC\x80 | # U+0259+0300
748             \x99\xCC\x81 | # U+0259+0301
749             \x9A\xCC\x80 | # U+025A+0300
750             \x9A\xCC\x81 | # U+025A+0301
751             [\x80-\xBF]
752             ) |
753             \xCA(?:
754             \x8C\xCC\x80 | # U+028C+0300
755             \x8C\xCC\x81 | # U+028C+0301
756             [\x80-\xBF]
757             ) |
758             \xCB(?:
759             \xA5\xCB\xA9 | # U+02E5+02E9
760             \xA9\xCB\xA5 | # U+02E9+02E5
761             [\x80-\xBF]
762             ) |
763             [\xF0-\xF4][\x80-\xBF]{3} |
764             [\x00-\xFF]
765             )!!xs; $1 },
766             'getc' => sub { local $^W; $tr{'utf8jp'}{'utf8'}{$_[0]} },
767             'putc' => sub { local $^W; $tr{'utf8'}{'utf8jp'}{$_[0]} },
768             },
769             'utf8.1' => {
770             'get_ctype' => sub { m!^[\x00-\x7F\xFE\xFF]! ? 'SBCS' : m!^[^\x00-\x7F\xFE\xFF]! ? 'DBCS' : undef },
771             'set_ctype' => sub { q!! },
772             'getoct' => sub { s!^(
773             [\x00-\x7F\x80-\xBF\xC0-\xC1\xF5-\xFF] |
774             [\xE0-\xE2\xE4-\xEF][\x80-\xBF]{2} |
775             \xE3(?:
776             \x81\x8B\xE3\x82\x9A | # U+304B+309A
777             \x81\x8D\xE3\x82\x9A | # U+304D+309A
778             \x81\x8F\xE3\x82\x9A | # U+304F+309A
779             \x81\x91\xE3\x82\x9A | # U+3051+309A
780             \x81\x93\xE3\x82\x9A | # U+3053+309A
781             \x82\xAB\xE3\x82\x9A | # U+30AB+309A
782             \x82\xAD\xE3\x82\x9A | # U+30AD+309A
783             \x82\xAF\xE3\x82\x9A | # U+30AF+309A
784             \x82\xB1\xE3\x82\x9A | # U+30B1+309A
785             \x82\xB3\xE3\x82\x9A | # U+30B3+309A
786             \x82\xBB\xE3\x82\x9A | # U+30BB+309A
787             \x83\x84\xE3\x82\x9A | # U+30C4+309A
788             \x83\x88\xE3\x82\x9A | # U+30C8+309A
789             \x87\xB7\xE3\x82\x9A | # U+31F7+309A
790             [\x80-\xBF]{2}
791             ) |
792             [\xC2\xC4-\xC8\xCC-\xDF][\x80-\xBF] |
793             \xC3(?:
794             \xA6\xCC\x80 | # U+00E6+0300
795             [\x80-\xBF]
796             ) |
797             \xC9(?:
798             \x94\xCC\x80 | # U+0254+0300
799             \x94\xCC\x81 | # U+0254+0301
800             \x99\xCC\x80 | # U+0259+0300
801             \x99\xCC\x81 | # U+0259+0301
802             \x9A\xCC\x80 | # U+025A+0300
803             \x9A\xCC\x81 | # U+025A+0301
804             [\x80-\xBF]
805             ) |
806             \xCA(?:
807             \x8C\xCC\x80 | # U+028C+0300
808             \x8C\xCC\x81 | # U+028C+0301
809             [\x80-\xBF]
810             ) |
811             \xCB(?:
812             \xA5\xCB\xA9 | # U+02E5+02E9
813             \xA9\xCB\xA5 | # U+02E9+02E5
814             [\x80-\xBF]
815             ) |
816             [\xF0-\xF4][\x80-\xBF]{3} |
817             [\x00-\xFF]
818             )!!xs; $1 },
819             'getc' => sub { local $^W; $tr{'utf8jp'}{'utf8.1'}{$_[0]} },
820             'putc' => sub { local $^W; $tr{'utf8.1'}{'utf8jp'}{$_[0]} },
821             },
822             'utf8jp' => {
823             'get_ctype' => sub { m!^\xF3\xB0(?:[\x80-\x82][\x80-\xBF]|\x83[\x80-\xBE])! ? 'SBCS' : 'DBCS' },
824             'set_ctype' => sub { q!! },
825             'getoct' => sub { s!^(\xF3[\xB0-\xB5][\x80-\xBF][\x80-\xBF]|[\x00-\xFF])!!; $1; },
826             'getc' => sub { $_[0] },
827             'putc' => sub { $_[0] },
828             },
829             );
830              
831             #---------------------------------------------------------------------
832             # convert encoding to OUTPUT_encoding from INPUT_encoding
833             #---------------------------------------------------------------------
834             sub convert {
835 2774071     2774071 0 19645741 local $_ = ${$_[0]};
  2774071         3973483  
836 2774071         3298684 my $OUTPUT_encoding = $_[1];
837 2774071         3095598 my $INPUT_encoding = $_[2];
838 2774071   100     4207584 my $option = ($_[3] || {});
839 2774071         3011525 my $last_ctype = undef;
840 2774071         3044509 my $output = '';
841 2774071         2872122 my $count = 0;
842 2774071   100     8079029 $option->{'OVERRIDE_MAPPING'} ||= {};
843              
844 2774071 50       4568282 if (ref($_[0]) ne 'SCALAR') {
845 0         0 die "@{[__FILE__]} \$_[0] isn't scalar reference\n";
  0         0  
846             }
847 2774071 50       4207504 if (not exists $x{$OUTPUT_encoding}) {
848 0         0 die "@{[__FILE__]} unknown OUTPUT encoding '$OUTPUT_encoding'\n";
  0         0  
849             }
850 2774071 50       3932769 if (not exists $x{$INPUT_encoding}) {
851 0         0 die "@{[__FILE__]} unknown INPUT encoding '$INPUT_encoding'\n";
  0         0  
852             }
853              
854 2774071         2928531 my $INPUT_LAYOUT = undef;
855 2774071         3230112 my @ctype = ();
856 2774071 100       6279825 if ($INPUT_encoding =~ /^(?:cp932x|cp932|cp932ibm|cp932nec|sjis2004|cp00930|keis78|keis83|keis90|jef|jef9p|jipsj|jipse|letsj)$/) {
857 1653042 100       2589875 if (defined $option->{'INPUT_LAYOUT'}) {
858 1653009         2095831 $INPUT_LAYOUT = $option->{'INPUT_LAYOUT'};
859 1653009         1833297 $INPUT_LAYOUT =~ s/([SD])([0-9]+)/$1 x $2/ge;
  0         0  
860 1653009 50       3058510 if ($INPUT_LAYOUT =~ /^[SD]*$/) {
861 1653009         3096010 @ctype = map {{'S'=>'SBCS', 'D'=>'DBCS',}->{$_}} split(//,$INPUT_LAYOUT);
  1653185         6980869  
862             }
863             else {
864 0         0 die "@{[__FILE__]} INPUT_LAYOUT isn't 'S' or 'D' sequence '$INPUT_LAYOUT'";
  0         0  
865             }
866             }
867             }
868              
869 2774071         4647522 while ($_ ne '') {
870 2774338         3150707 my $ctype = '';
871 2774338 100       3699391 if (defined $INPUT_LAYOUT) {
872 1653185   50     2649741 $ctype = (shift(@ctype) || 'SBCS');
873             }
874             else {
875 1121153   50     1664601 $ctype = ($x{$INPUT_encoding}{'get_ctype'}->() || $last_ctype || 'SBCS');
876             }
877              
878 2774338 100 100     4630526 if (not defined($last_ctype) or ($ctype ne $last_ctype)) {
879 2774234 100       4022283 if ($option->{'OUTPUT_SHIFTING'}) {
880 76         150 $output .= $x{$OUTPUT_encoding}{'set_ctype'}->($ctype);
881             }
882 2774234         3118332 $last_ctype = $ctype;
883             }
884              
885 2774338         4268822 my $input_octets = $x{$INPUT_encoding}{'getoct'}->($ctype);
886 2774338 50       4345279 if (defined $input_octets) {
887 2774338 100       4067870 if (defined $option->{'OVERRIDE_MAPPING'}{$input_octets}) {
888 70         121 $output .= $option->{'OVERRIDE_MAPPING'}{$input_octets};
889             }
890             else {
891 2774268         4009702 my $char = $x{$INPUT_encoding}{'getc'}->($input_octets);
892 2774268 100       4794802 if (not defined $char) {
    100          
893 3596 100       4770 if (defined $option->{'GETA'}) {
894 21         32 $output .= $option->{'GETA'};
895             }
896             else {
897 3575         5129 $output .= $x{$OUTPUT_encoding}{'putc'}->("\xF3\xB0\x85\xAB");
898             }
899             }
900             elsif ($char eq "\xF3\xB0\x84\x80") {
901 451 100       725 if (defined $option->{'SPACE'}) {
902 21         35 $output .= $option->{'SPACE'};
903             }
904             else {
905 430         930 $output .= $x{$OUTPUT_encoding}{'putc'}->($char);
906             }
907             }
908             else {
909 2770221         4046649 my $output_octets = $x{$OUTPUT_encoding}{'putc'}->($char);
910 2770221 50 33     6881537 if (not defined ($output_octets) or ($output_octets eq '')) {
911 0 0       0 if (defined $option->{'GETA'}) {
912 0         0 $output .= $option->{'GETA'};
913             }
914             else {
915 0         0 $output .= $x{$OUTPUT_encoding}{'putc'}->("\xF3\xB0\x85\xAB");
916             }
917             }
918             else {
919 2770221         3836723 $output .= $output_octets;
920             }
921             }
922             }
923             }
924              
925 2774338         4479490 $count++;
926             }
927              
928 2774071         2959416 ${$_[0]} = $output;
  2774071         3898654  
929 2774071         4912411 return $count;
930             }
931              
932             #---------------------------------------------------------------------
933             # confirm version
934             #---------------------------------------------------------------------
935             sub VERSION {
936 0     0 0   my($version) = @_;
937 0 0         if ($version ne $Jacode4e::RoundTrip::VERSION) {
938 0           die "@{[__FILE__]} $Jacode4e::RoundTrip::VERSION isn't $version";
  0            
939             }
940             }
941              
942             #---------------------------------------------------------------------
943             # dump encoding tables
944             #---------------------------------------------------------------------
945             END {
946 28 0 33 28   0 if (
      33        
947             ($0 eq __FILE__) and
948             defined($ARGV[0]) and
949             ($ARGV[0] eq '--dumptable')
950             ) {
951              
952             # dump DBCS tables
953 0         0 for my $encoding (qw(
954             cp932 cp932ibm cp932nec sjis2004 cp00930 keis78 keis83 keis90 jef jef9p jipsj jipse letsj
955             )) {
956 0 0       0 open(FILE,">$0-$Jacode4e::RoundTrip::VERSION.TABLE.\U$encoding\E.txt") || die;
957 0         0 binmode(FILE);
958 0         0 for (my $octet1=0x00; $octet1<=0xFF; $octet1+=0x01) {
959 0         0 for (my $octet2=0x00; $octet2<=0xF0; $octet2+=0x10) {
960 0         0 my @line = ();
961 0         0 for (my $column=0x00; $column<=0x0F; $column+=0x01) {
962 0         0 my $octets = pack('CC', $octet1, $octet2 + $column);
963 0         0 Jacode4e::RoundTrip::convert(\$octets, 'utf8', $encoding, { 'INPUT_LAYOUT'=>'D', 'GETA'=>" " });
964 0         0 push @line, $octets;
965             }
966 0 0       0 if (grep(!/ /,@line) >= 1) {
967 0         0 printf FILE ('%s %02X%02X: ', uc $encoding, $octet1, $octet2);
968 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[ 0], $line[ 1], $line[ 2], $line[ 3]);
969 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[ 4], $line[ 5], $line[ 6], $line[ 7]);
970 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[ 8], $line[ 9], $line[10], $line[11]);
971 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[12], $line[13], $line[14], $line[15]);
972 0         0 print FILE "\n";
973             }
974             }
975             }
976 0         0 close(FILE);
977             }
978              
979             # dump CP932X table
980 0 0       0 open(FILE,">$0-$Jacode4e::RoundTrip::VERSION.TABLE.CP932X.txt") || die;
981 0         0 binmode(FILE);
982 0         0 for (my $octet1=0x00; $octet1<=0xFF; $octet1+=0x01) {
983 0         0 for (my $octet2=0x00; $octet2<=0xF0; $octet2+=0x10) {
984 0         0 my @line = ();
985 0         0 for (my $column=0x00; $column<=0x0F; $column+=0x01) {
986 0         0 my $octets = pack('CC', $octet1, $octet2 + $column);
987 0         0 Jacode4e::RoundTrip::convert(\$octets, 'utf8', 'cp932x', { 'INPUT_LAYOUT'=>'D', 'GETA'=>" " });
988 0         0 push @line, $octets;
989             }
990 0         0 for (my $column=0x00; $column<=0x0F; $column+=0x01) {
991 0         0 my $octets = pack('CCCC', 0x9C, 0x5A, $octet1, $octet2 + $column);
992 0         0 Jacode4e::RoundTrip::convert(\$octets, 'utf8', 'cp932x', { 'INPUT_LAYOUT'=>'D', 'GETA'=>" " });
993 0         0 push @line, $octets;
994             }
995 0 0       0 if (grep(!/ /,@line) >= 1) {
996 0         0 printf FILE ('CP932X %02X%02X: ', $octet1, $octet2);
997 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[ 0], $line[ 1], $line[ 2], $line[ 3]);
998 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[ 4], $line[ 5], $line[ 6], $line[ 7]);
999 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[ 8], $line[ 9], $line[10], $line[11]);
1000 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[12], $line[13], $line[14], $line[15]);
1001 0         0 print FILE ' ';
1002 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[16], $line[17], $line[18], $line[19]);
1003 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[20], $line[21], $line[22], $line[23]);
1004 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[24], $line[25], $line[26], $line[27]);
1005 0         0 printf FILE ('%-2s%-2s%-2s%-2s ', $line[28], $line[29], $line[30], $line[31]);
1006 0         0 print FILE "\n";
1007             }
1008             }
1009             }
1010 0         0 close(FILE);
1011              
1012 0         0 exit;
1013             }
1014             }
1015              
1016             #---------------------------------------------------------------------
1017             # document
1018             #---------------------------------------------------------------------
1019              
1020             =pod
1021              
1022             =encoding utf8
1023              
1024             =head1 NAME
1025              
1026             Jacode4e - Converts JIS X 0213 Encodings with Round-Trip
1027              
1028             =head1 CAUTION
1029              
1030             B
1031              
1032             =head1 SYNOPSIS
1033              
1034             use FindBin;
1035             use lib "$FindBin::Bin/lib";
1036             use Jacode4e;
1037            
1038             $char_count =
1039             Jacode4e::RoundTrip::convert(\$line, $OUTPUT_encoding, $INPUT_encoding [, { %option }]);
1040              
1041             =head2 $char_count
1042              
1043             Count of characters in $line
1044              
1045             =head2 $line
1046              
1047             =head2 $OUTPUT_encoding
1048              
1049             =head2 $INPUT_encoding
1050              
1051             Converts encoding of $line from $INPUT_encoding to $OUTPUT_encoding then overwrites $line.
1052              
1053             $OUTPUT_encoding and $INPUT_encoding cannot omit.
1054              
1055             You can use mnemonic as encoding name of $INPUT_encoding and $OUTPUT_encoding:
1056              
1057             mnemonic means
1058             -----------------------------------------------------------------------
1059             cp932x CP932X, Extended CP932 to JIS X 0213 using 0x9C5A as single shift
1060             cp00930 IBM CP00930(CP00290+CP00300), CCSID 5026 katakana
1061             keis78 HITACHI KEIS78
1062             keis83 HITACHI KEIS83
1063             keis90 HITACHI KEIS90
1064             jef FUJITSU JEF (12 point size for printing with option OUTPUT_SHIFTING)
1065             jef9p FUJITSU JEF ( 9 point size for printing with option OUTPUT_SHIFTING)
1066             jipsj NEC JIPS(J)
1067             jipse NEC JIPS(E)
1068             letsj UNISYS LetsJ
1069             utf8 UTF-8.0 (aka UTF-8)
1070             utf8.1 UTF-8.1
1071             utf8jp UTF-8-SPUA-JP, JIS X 0213 on SPUA ordered by JIS level, plane, row, cell
1072             -----------------------------------------------------------------------
1073              
1074             Round-trip conversion impossible, only for reference
1075              
1076             mnemonic means
1077             -----------------------------------------------------------------------
1078             cp932 Microsoft CP932, IANA Windows-31J
1079             cp932ibm IBM CP932
1080             cp932nec NEC CP932
1081             sjis2004 JISC Shift_JIS-2004
1082             -----------------------------------------------------------------------
1083              
1084             =head2 { %option }
1085              
1086             Hash reference "{ %option }" can omit.
1087              
1088             You can following mnemonics as keys of hash reference "{ %option }":
1089              
1090             =over 2
1091              
1092             =item * INPUT_LAYOUT
1093              
1094             input record layout by 'S' and 'D' sequence
1095              
1096             'S' means one char as SBCS, 'D' means one char as DBCS
1097              
1098             each letter may optionally be followed by a number indicating the repeat count, see samples
1099              
1100             =item * OUTPUT_SHIFTING
1101              
1102             true means use output shift code, false means not use
1103              
1104             default is false
1105              
1106             =item * SPACE
1107              
1108             output space code in DBCS/MBCS
1109              
1110             =item * GETA
1111              
1112             output geta code in DBCS/MBCS
1113              
1114             =item * OVERRIDE_MAPPING
1115              
1116             hash reference of FROM => TO override mapping { "\x12\x34"=>"\x56\x78", "\x9A\xBC"=>"\xDE\xFE", }
1117              
1118             (CAUTION! override also SPACE option)
1119              
1120             =back
1121              
1122             If you need round-trip conversion, you had better use Jacode4e::RoundTrip module.
1123              
1124             =head1 SAMPLES
1125              
1126             Converts from cp00930 to cp932x using option ('INPUT_LAYOUT' => 'SSSDDDSSDDSDSD')
1127              
1128             use FindBin;
1129             use lib "$FindBin::Bin/lib";
1130             use Jacode4e::RoundTrip;
1131             while (<>) {
1132             $char_count =
1133             Jacode4e::RoundTrip::convert(\$_, 'cp932x', 'cp00930', {
1134             'INPUT_LAYOUT' => 'SSSDDDSSDDSDSD',
1135             'OUTPUT_SHIFTING' => 0,
1136             'SPACE' => "\x81\xA2",
1137             'GETA' => "\x81\xA1",
1138             'OVERRIDE_MAPPING' => { "\x44\x5A" => "\x81\x7C", },
1139             });
1140             print $_;
1141             }
1142              
1143             Converts from cp00930 to cp932x using option ('INPUT_LAYOUT' => 'S3D3S2D2SDSD')
1144              
1145             use FindBin;
1146             use lib "$FindBin::Bin/lib";
1147             use Jacode4e::RoundTrip;
1148             while (<>) {
1149             $char_count =
1150             Jacode4e::RoundTrip::convert(\$_, 'cp932x', 'cp00930', {
1151             'INPUT_LAYOUT' => 'S3D3S2D2SDSD',
1152             'OUTPUT_SHIFTING' => 0,
1153             'SPACE' => "\x81\xA2",
1154             'GETA' => "\x81\xA1",
1155             'OVERRIDE_MAPPING' => { "\x44\x5A" => "\x81\x7C", },
1156             });
1157             print $_;
1158             }
1159              
1160             Converts from utf8.1 to cp932ibm
1161              
1162             use FindBin;
1163             use lib "$FindBin::Bin/lib";
1164             use Jacode4e::RoundTrip;
1165             while (<>) {
1166             Jacode4e::RoundTrip::convert(\$_, 'cp932ibm', 'utf8.1', {});
1167             print $_;
1168             }
1169              
1170             Converts from utf8 to utf8.1
1171              
1172             use FindBin;
1173             use lib "$FindBin::Bin/lib";
1174             use Jacode4e::RoundTrip;
1175             while (<>) {
1176             $char_count =
1177             Jacode4e::RoundTrip::convert(\$_, 'utf8.1', 'utf8', {
1178             # FULLWIDTH TILDE => WAVE DASH
1179             'OVERRIDE_MAPPING' => { "\xEF\xBD\x9E" => "\xE3\x80\x9C", },
1180             });
1181             print $_;
1182             }
1183              
1184             =head1 INPUT SI/SO code
1185              
1186             Wikipedia L tells us Kanji shift code (means DBCS shift code) of each encoding of vendors.
1187             Jacode4e::convert() handle SI/SO(Shift In and Shift Out) code in $line automatically.
1188             If $line has no SI/SO code, we can use option "INPUT_LAYOUT" instead of SI/SO code.
1189              
1190             Realistically saying, we have to use option "INPUT_LAYOUT" almost always, if $INPUT_encoding is any of enterprise encodings(cp00930, keis78, keis83, keis90, jef, jef9p, jipsj, jipse, and letsj).
1191             Because SI/SO codes are rarely used.
1192              
1193             If $INPUT_encoding is any of cp932x, cp932, cp932ibm, cp932nec, and sjis2004, "INPUT_LAYOUT" option is unnecessary.
1194             Because SBCS and DBCS can be judged from the character string itself.
1195             However, you can also use "INPUT_LAYOUT" option to force conversion as SBCS.
1196              
1197             ---------------------------------------------------------------------------
1198             SO(Shift Out) SI(Shift In)
1199             $INPUT_encoding KI(KANJI In) KO(KANJI Out)
1200             mnemonic switch to DBCS switch to SBCS %option
1201             ---------------------------------------------------------------------------
1202             'cp932x' (nothing) (nothing) also 'INPUT_LAYOUT' => ...
1203             'cp932' (nothing) (nothing) also 'INPUT_LAYOUT' => ...
1204             'cp932ibm' (nothing) (nothing) also 'INPUT_LAYOUT' => ...
1205             'cp932nec' (nothing) (nothing) also 'INPUT_LAYOUT' => ...
1206             'sjis2004' (nothing) (nothing) also 'INPUT_LAYOUT' => ...
1207             'cp00930' "\x0E" "\x0F" xor 'INPUT_LAYOUT' => ...
1208             'keis78' "\x0A\x42" "\x0A\x41" xor 'INPUT_LAYOUT' => ...
1209             'keis83' "\x0A\x42" "\x0A\x41" xor 'INPUT_LAYOUT' => ...
1210             'keis90' "\x0A\x42" "\x0A\x41" xor 'INPUT_LAYOUT' => ...
1211             'jef' "\x28" or "\x38" "\x29" xor 'INPUT_LAYOUT' => ...
1212             'jef9p' "\x28" or "\x38" "\x29" xor 'INPUT_LAYOUT' => ...
1213             'jipsj' "\x1A\x70" "\x1A\x71" xor 'INPUT_LAYOUT' => ...
1214             'jipse' "\x3F\x75" "\x3F\x76" xor 'INPUT_LAYOUT' => ...
1215             'letsj' "\x93\x70" "\x93\xF1" xor 'INPUT_LAYOUT' => ...
1216             'utf8' (nothing) (nothing)
1217             'utf8.1' (nothing) (nothing)
1218             'utf8jp' (nothing) (nothing)
1219             ---------------------------------------------------------------------------
1220              
1221             =head1 OUTPUT SI/SO code
1222              
1223             Jacode4e::convert() doesn't output SI/SO code on default.
1224             Thus, if you need SI/SO code then you have to use option "'OUTPUT_SHIFTING' => 1".
1225              
1226             ---------------------------------------------------------------------------
1227             SO(Shift Out) SI(Shift In)
1228             $OUTPUT_encoding KI(KANJI In) KO(KANJI Out)
1229             mnemonic switch to DBCS switch to SBCS %option
1230             ---------------------------------------------------------------------------
1231             'cp932x' (nothing) (nothing)
1232             'cp932' (nothing) (nothing)
1233             'cp932ibm' (nothing) (nothing)
1234             'cp932nec' (nothing) (nothing)
1235             'sjis2004' (nothing) (nothing)
1236             'cp00930' "\x0E" "\x0F" 'OUTPUT_SHIFTING' => 1
1237             'keis78' "\x0A\x42" "\x0A\x41" 'OUTPUT_SHIFTING' => 1
1238             'keis83' "\x0A\x42" "\x0A\x41" 'OUTPUT_SHIFTING' => 1
1239             'keis90' "\x0A\x42" "\x0A\x41" 'OUTPUT_SHIFTING' => 1
1240             'jef' "\x28" "\x29" 'OUTPUT_SHIFTING' => 1
1241             'jef9p' "\x38" "\x29" 'OUTPUT_SHIFTING' => 1
1242             'jipsj' "\x1A\x70" "\x1A\x71" 'OUTPUT_SHIFTING' => 1
1243             'jipse' "\x3F\x75" "\x3F\x76" 'OUTPUT_SHIFTING' => 1
1244             'letsj' "\x93\x70" "\x93\xF1" 'OUTPUT_SHIFTING' => 1
1245             'utf8' (nothing) (nothing)
1246             'utf8.1' (nothing) (nothing)
1247             'utf8jp' (nothing) (nothing)
1248             ---------------------------------------------------------------------------
1249              
1250             =head1 OUTPUT DBCS/MBCS SPACE code
1251              
1252             We implemented default space code below without arguing with others.
1253              
1254             (We would appreciate any statistical information about its using.)
1255              
1256             You can change the space code using option "SPACE" if you want.
1257              
1258             ---------------------------------------------------------------------------
1259             $OUTPUT_encoding
1260             mnemonic default code %option
1261             ---------------------------------------------------------------------------
1262             'cp932x' "\x81\x40"
1263             'cp932' "\x81\x40"
1264             'cp932ibm' "\x81\x40"
1265             'cp932nec' "\x81\x40"
1266             'sjis2004' "\x81\x40" 'SPACE' => "\x20\x20" for CP/M-86 compatible
1267             'cp00930' "\x40\x40"
1268             'keis78' "\xA1\xA1"
1269             'keis83' "\xA1\xA1"
1270             'keis90' "\xA1\xA1"
1271             'jef' "\xA1\xA1" 'SPACE' => "\x40\x40" for 99FR-0012-2 and 99FR-0012-3 compatible
1272             'jef9p' "\xA1\xA1" 'SPACE' => "\x40\x40" for 99FR-0012-2 and 99FR-0012-3 compatible
1273             'jipsj' "\x21\x21"
1274             'jipse' "\x4F\x4F"
1275             'letsj' "\x20\x20" 'SPACE' => "\xA1\xA1" for EUC-JP like space
1276             'utf8' "\xE3\x80\x80"
1277             'utf8.1' "\xE3\x80\x80"
1278             'utf8jp' "\xF3\xB0\x84\x80"
1279             ---------------------------------------------------------------------------
1280              
1281             =head1 OUTPUT DBCS/MBCS GETA code
1282              
1283             If a character isn't included in $OUTPUT_encoding set, GETA code will be used instead of converted code.
1284              
1285             The default GETA code is as follows.
1286             You can change GETA code using option "GETA" if you want.
1287              
1288             GETA doesn't mean GETA, but means B.
1289              
1290             GETA is Japanese wooden shoes that made for walk on paddy field.
1291             One GETA has two teeth, and they make B on the ground by bite the earth twice.
1292             Thus, GETA code is double byte code, or some time multibyte code.
1293              
1294             ---------------------------------------------------------------------------
1295             $OUTPUT_encoding
1296             mnemonic default code %option sample
1297             ---------------------------------------------------------------------------
1298             'cp932x' "\x81\xAC" 'GETA' => "\x81\xA1"
1299             'cp932' "\x81\xAC" 'GETA' => "\x81\x9C"
1300             'cp932ibm' "\x81\xAC" 'GETA' => "\x81\x9C"
1301             'cp932nec' "\x81\xAC" 'GETA' => "\x81\x9C"
1302             'sjis2004' "\x81\xAC" 'GETA' => "\x81\xFC"
1303             'cp00930' "\x44\x7D"
1304             'keis78' "\xA2\xAE"
1305             'keis83' "\xA2\xAE"
1306             'keis90' "\xA2\xAE"
1307             'jef' "\xA2\xAE"
1308             'jef9p' "\xA2\xAE"
1309             'jipsj' "\x22\x2E"
1310             'jipse' "\x7F\x4B"
1311             'letsj' "\xA2\xAE"
1312             'utf8' "\xE3\x80\x93"
1313             'utf8.1' "\xE3\x80\x93"
1314             'utf8jp' "\xF3\xB0\x85\xAB"
1315             ---------------------------------------------------------------------------
1316              
1317             =head1 RAISON D'ETRE(Reason For Existence)
1318              
1319             This software has been developed for use promotion of JIS X 0213.
1320              
1321             Jacode4e::RoundTrip module can round-trip convert JIS X 0213 characters in Japanese main-frames or enterprise servers each other, using its user-defined area.
1322             The encodings that can be round-trip converted are cp932x, cp00930, keis78, keis83, keis90, jef, jef9p, jipsj, jipse, letsj, utf8, and utf8jp.
1323              
1324             This table shows shortage to support JIS X 0213 in each encoding
1325              
1326             ----------------------------------------------------
1327             Jacode4e short- user-def.
1328             mnemonic supported age area
1329             ----------------------------------------------------
1330             cp932x 11,285 0 --
1331             cp00930 11,257 28 1,880
1332             keis78 8,011 3,274 27,170
1333             keis83 8,011 3,274 27,170
1334             keis90 8,012 3,273 27,170
1335             jef, jef9p 8,871 2,414 3,102
1336             jipsj, jipse 8,825 2,460 3,948
1337             letsj 9,799 1,486 2,632
1338             utf8 11,220 65 6,400
1339             utf8.1 11,220 65 6,400
1340             utf8jp 11,285 0 --
1341             ----------------------------------------------------
1342              
1343             cp00930 uses 28 code points from its user-defined area. Similarly, keis78 and keis83 use 3,274, keis90 uses 3,273, jef and jef9p use 2,414, jipsj and jipse use 2,460, letsj uses 1,486, utf8 and utf8.1 use 65.
1344              
1345             Yes, you cannot use your gaiji on Jacode4e::RoundTrip module, you see.
1346              
1347             Jacode4e::RoundTrip module doesn't work as Jacode4e. And Jacode4e module doesn't work as Jacode4e::RoundTrip, too.
1348              
1349             This software is useful for processing your JIS X 0213 data by other system, and importing it again into your system.
1350              
1351             =head1 WHAT IS "CP932X"?
1352              
1353             =over 4
1354              
1355             =item * Mnemonic is "cp932x"
1356              
1357             =item * CP932X is almost CP932
1358              
1359             =item * Pronounce [si: pi: nain thri: tu: kai] in English
1360              
1361             =item * Pronounce [shi: pi: kju: san' ni kai] in Japanese
1362              
1363             =item * We have reserved [si: pi: nain thri: tu: iks] for Microsoft Corporation-san
1364              
1365             =item * CP932 upper compatible
1366              
1367             =item * Supports JIS X 0213 character set
1368              
1369             =item * Used ghost character "\x9C\x5A" as single shift code
1370              
1371             =item * Used "\x9C\x5A\x9C\x5A" for single "\x9C\x5A"
1372              
1373             =item * You can use private use characters you made
1374              
1375             =item * You can use your operating system, network, and database
1376              
1377             =item * In almost all cases, application programs can be used as it is
1378              
1379             =back
1380              
1381             =head1 WHAT IS "UTF-8-SPUA-JP"?
1382              
1383             =over 4
1384              
1385             =item * Mnemonic is "utf8jp"
1386              
1387             =item * UTF-8-SPUA-JP is UTF-8
1388              
1389             =item * Internal character encoding of Jacode4e and Jacode4e::RoundTrip, universally
1390              
1391             =item * Implements JIS X 0213 character set on to Unicode Supplementary Private Use Area-A
1392              
1393             =item * Code point ordered by JIS level, plane, row, cell
1394              
1395             =item * Uniformly length encoding
1396              
1397             =item * No grapheme clustering, one character by uniquely code point
1398              
1399             =back
1400              
1401             =head1 CP932 vs. CP932IBM
1402              
1403             B
1404              
1405             CP932IBM is useful when you transfer data to enterprise system.
1406              
1407             The following is difference between CP932 and CP932IBM.
1408              
1409             #+++++++----------------------------------------------------------------------------------------------------------- CP932X, Extended CP932 to JIS X 0213 using 0x9C5A as single shift
1410             #||||||| ++++------------------------------------------------------------------------------------------------------ Microsoft CP932, IANA Windows-31J
1411             #||||||| |||| ++++------------------------------------------------------------------------------------------------- IBM CP932
1412             #||||||| |||| |||| ++++-------------------------------------------------------------------------------------------- NEC CP932
1413             #||||||| |||| |||| |||| ++++--------------------------------------------------------------------------------------- JISC Shift_JIS-2004
1414             #||||||| |||| |||| |||| |||| ++++---------------------------------------------------------------------------------- IBM CP00930(CP00290+CP00300), CCSID 5026 katakana
1415             #||||||| |||| |||| |||| |||| |||| ++++----------------------------------------------------------------------------- HITACHI KEIS78
1416             #||||||| |||| |||| |||| |||| |||| |||| ++++------------------------------------------------------------------------ HITACHI KEIS83
1417             #||||||| |||| |||| |||| |||| |||| |||| |||| ++++------------------------------------------------------------------- HITACHI KEIS90
1418             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| ++++-------------------------------------------------------------- FUJITSU JEF
1419             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++--------------------------------------------------------- NEC JIPS(J)
1420             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++---------------------------------------------------- NEC JIPS(E)
1421             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++----------------------------------------------- UNISYS LetsJ
1422             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| +++++++++------------------------------------- Unicode
1423             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| ++++++++++++------------------------ UTF-8.0 (aka UTF-8)
1424             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| |||||||||||| ++++++++++++----------- UTF-8.1
1425             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| |||||||||||| |||||||||||| ++++++++-- UTF-8-SPUA-JP, JIS X 0213 on SPUA ordered by JIS level, plane, row, cell
1426             #2345678 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 123456789 123456789012 123456789012 12345678
1427             #VVVVVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVVVVVVV VVVVVVVVVVVV VVVVVVVVVVVV VVVVVVVV
1428             8754 8754 FA4A 8754 8754 41F1 74B1 74B1 74B1 77DE 2D35 60F5 -- 2160 E285A0 E285A0 F3B095BC
1429             8755 8755 FA4B 8755 8755 41F2 74B2 74B2 74B2 77DF 2D36 60F6 -- 2161 E285A1 E285A1 F3B095BD
1430             8756 8756 FA4C 8756 8756 41F3 74B3 74B3 74B3 77E0 2D37 60F7 -- 2162 E285A2 E285A2 F3B095BE
1431             8757 8757 FA4D 8757 8757 41F4 74B4 74B4 74B4 77E1 2D38 60F8 -- 2163 E285A3 E285A3 F3B095BF
1432             8758 8758 FA4E 8758 8758 41F5 74B5 74B5 74B5 77E2 2D39 60F9 -- 2164 E285A4 E285A4 F3B09680
1433             8759 8759 FA4F 8759 8759 41F6 74B6 74B6 74B6 77E3 2D3A 607A -- 2165 E285A5 E285A5 F3B09681
1434             875A 875A FA50 875A 875A 41F7 74B7 74B7 74B7 77E4 2D3B 605E -- 2166 E285A6 E285A6 F3B09682
1435             875B 875B FA51 875B 875B 41F8 74B8 74B8 74B8 77E5 2D3C 604C -- 2167 E285A7 E285A7 F3B09683
1436             875C 875C FA52 875C 875C 41F9 74B9 74B9 74B9 77E6 2D3D 607E -- 2168 E285A8 E285A8 F3B09684
1437             875D 875D FA53 875D 875D 41FA 74BA 74BA 74BA 77E7 2D3E 606E -- 2169 E285A9 E285A9 F3B09685
1438             8782 8782 FA59 8782 8782 446E 72BE 72BE 72BE 76FA 2D62 6059 A271 2116 E28496 E28496 F3B096A9
1439             8784 8784 FA5A 8784 8784 446F 72B8 72B8 72B8 76F6 2D64 6063 -- 2121 E284A1 E284A1 F3B096AB
1440             878A 878A FA58 878A 878A 446D 73D0 73D0 73D0 78D5 2D6A 6069 -- 3231 E388B1 E388B1 F3B096B1
1441              
1442             =head1 CP932 vs. CP932NEC
1443              
1444             B
1445              
1446             CP932NEC is useful when you convert data to EUC-JP encoding.
1447              
1448             The following is difference between CP932 and CP932NEC.
1449              
1450             #+++++++----------------------------------------------------------------------------------------------------------- CP932X, Extended CP932 to JIS X 0213 using 0x9C5A as single shift
1451             #||||||| ++++------------------------------------------------------------------------------------------------------ Microsoft CP932, IANA Windows-31J
1452             #||||||| |||| ++++------------------------------------------------------------------------------------------------- IBM CP932
1453             #||||||| |||| |||| ++++-------------------------------------------------------------------------------------------- NEC CP932
1454             #||||||| |||| |||| |||| ++++--------------------------------------------------------------------------------------- JISC Shift_JIS-2004
1455             #||||||| |||| |||| |||| |||| ++++---------------------------------------------------------------------------------- IBM CP00930(CP00290+CP00300), CCSID 5026 katakana
1456             #||||||| |||| |||| |||| |||| |||| ++++----------------------------------------------------------------------------- HITACHI KEIS78
1457             #||||||| |||| |||| |||| |||| |||| |||| ++++------------------------------------------------------------------------ HITACHI KEIS83
1458             #||||||| |||| |||| |||| |||| |||| |||| |||| ++++------------------------------------------------------------------- HITACHI KEIS90
1459             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| ++++-------------------------------------------------------------- FUJITSU JEF
1460             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++--------------------------------------------------------- NEC JIPS(J)
1461             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++---------------------------------------------------- NEC JIPS(E)
1462             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++----------------------------------------------- UNISYS LetsJ
1463             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| +++++++++------------------------------------- Unicode
1464             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| ++++++++++++------------------------ UTF-8.0 (aka UTF-8)
1465             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| |||||||||||| ++++++++++++----------- UTF-8.1
1466             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| |||||||||||| |||||||||||| ++++++++-- UTF-8-SPUA-JP, JIS X 0213 on SPUA ordered by JIS level, plane, row, cell
1467             #2345678 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 123456789 123456789012 123456789012 12345678
1468             #VVVVVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVVVVVVV VVVVVVVVVVVV VVVVVVVVVVVV VVVVVVVV
1469             FA40 FA40 FA40 EEEF 86B3 41B1 74C1 74C1 74C1 77EB A2BD 428E -- 2170 E285B0 E285B0 F3B2AB9C
1470             FA41 FA41 FA41 EEF0 86B4 41B2 74C2 74C2 74C2 77EC A2BE 428F -- 2171 E285B1 E285B1 F3B2AB9D
1471             FA42 FA42 FA42 EEF1 86B5 41B3 74C3 74C3 74C3 77ED A2BF 4290 -- 2172 E285B2 E285B2 F3B2AB9E
1472             FA43 FA43 FA43 EEF2 86B6 41B4 74C4 74C4 74C4 77EE A2C0 4291 -- 2173 E285B3 E285B3 F3B2AB9F
1473             FA44 FA44 FA44 EEF3 86B7 41B5 74C5 74C5 74C5 77EF A2C1 4292 -- 2174 E285B4 E285B4 F3B2ABA0
1474             FA45 FA45 FA45 EEF4 86B8 41B6 74C6 74C6 74C6 77F0 A2C2 4293 -- 2175 E285B5 E285B5 F3B2ABA1
1475             FA46 FA46 FA46 EEF5 86B9 41B7 74C7 74C7 74C7 77F1 A2C3 4294 -- 2176 E285B6 E285B6 F3B2ABA2
1476             FA47 FA47 FA47 EEF6 86BA 41B8 74C8 74C8 74C8 77F2 A2C4 4295 -- 2177 E285B7 E285B7 F3B2ABA3
1477             FA48 FA48 FA48 EEF7 86BB 41B9 74C9 74C9 74C9 77F3 A2C5 4296 -- 2178 E285B8 E285B8 F3B2ABA4
1478             FA49 FA49 FA49 EEF8 86BC 41BA 74CA 74CA 74CA 77F4 A2C6 4297 -- 2179 E285B9 E285B9 F3B2ABA5
1479             FA55 FA55 FA55 EEFA -- E9F5 -- -- -- 76A1 A5FB 45FB -- FFE4 EFBFA4 EFBFA4 F3B2ABB1
1480             FA56 FA56 FA56 EEFB 81AD 427D -- -- -- 76A2 A3F9 43EF -- FF07 EFBC87 EFBC87 F3B2ABB2
1481             FA57 FA57 FA57 EEFC 81AE 427F -- -- -- 76A3 A3FA 43FA -- FF02 EFBC82 EFBC82 F3B2ABB3
1482             FA5C FA5C FA5C ED40 EDB5 51BF 67FE 67FE 67FE 5FDC C9D8 9AAE D463 7E8A E7BA8A E7BA8A F3B2ABB8
1483             FA5D FA5D FA5D ED41 EE8E 51DA 69E8 69E8 69E8 64B5 CEA9 A349 DC5F 891C E8A49C E8A49C F3B2ABB9
1484             FA5E FA5E FA5E ED42 EF58 51F7 6CC7 6CC7 6CC7 6AD9 D2B9 A789 E469 9348 E98D88 E98D88 F3B2ABBA
1485             FA5F FA5F FA5F ED43 EF4D 524B 6CA3 6CA3 6CA3 69FE D1ED A6CF E378 9288 E98A88 E98A88 F3B2ABBB
1486             FA60 FA60 FA60 ED44 F8D3 527B 69AE 69AE 69AE 62C4 CCCA 9F9D D921 84DC E8939C E8939C F3B2ABBC
1487             FA61 FA61 FA61 ED45 87B7 5294 59E4 59E4 59E4 42C7 B2F6 82EC B13B 4FC9 E4BF89 E4BF89 F3B2ABBD
1488             FA62 FA62 FA62 ED46 F580 529E 63FE 63FE 63FE 70E1 C2FE 93FE -- 70BB E782BB E782BB F3B2ABBE
1489             FA63 FA63 FA63 ED47 EB54 52EB 60F8 60F8 60F8 51A3 BDBF 8E90 C22D 6631 E698B1 E698B1 F3B2ABBF
1490             FA64 FA64 FA64 ED48 EB89 5386 61DC 61DC 61DC 70CD BFB7 9087 C37C 68C8 E6A388 E6A388 F3B2AC80
1491             FA65 FA65 FA65 ED49 FB42 5394 6CBB 6CBB 6CBB 6AC9 D2B6 A786 E450 92F9 E98BB9 E98BB9 F3B2AC81
1492             FA66 FA66 FA66 ED4A EB56 5397 60D3 60D3 60D3 51FC BDD0 8EA5 C23F 66FB E69BBB E69BBB F3B2AC82
1493             FA67 FA67 FA67 ED4B EAB8 53C7 5ED8 5ED8 5ED8 4CF6 BAC7 8A98 BC74 5F45 E5BD85 E5BD85 F3B2AC83
1494             FA68 FA68 FA68 ED4C 87A2 5644 59AC 59AC 59AC 41AC B2AB 8252 B029 4E28 E4B8A8 E4B8A8 F3B2AC84
1495             FA69 FA69 FA69 ED4D 87A6 565D 59C1 59C1 59C1 41E8 B2C2 8293 B048 4EE1 E4BBA1 E4BBA1 F3B2AC85
1496             FA6A FA6A FA6A ED4E -- 5662 59C8 59C8 59C8 43CF B2D3 82A8 -- 4EFC E4BBBC E4BBBC F3B2AC86
1497             FA6B FA6B FA6B ED4F F05E 5665 59C7 59C7 59C7 41EF B2CD 82A2 B052 4F00 E4BC80 E4BC80 F3B2AC87
1498             FA6C FA6C FA6C ED50 87A9 5666 9FA1 9FA1 9FA1 41F0 B2CE 82A3 B054 4F03 E4BC83 E4BC83 F3B2AC88
1499             FA6D FA6D FA6D ED51 -- 566A 59CE 59CE 59CE 41FB B2DB 82BB B063 4F39 E4BCB9 E4BCB9 F3B2AC89
1500             FA6E FA6E FA6E ED52 87AE 566E 59CB 59CB 59CB 42A8 B2D6 82AC B06E 4F56 E4BD96 E4BD96 F3B2AC8A
1501             FA6F FA6F FA6F ED53 F06C 5670 59DB 59DB 59DB 42B5 B2EA 82CC B127 4F92 E4BE92 E4BE92 F3B2AC8B
1502             FA70 FA70 FA70 ED54 87B3 5671 59E0 59E0 59E0 42B3 B2E7 82B9 B123 4F8A E4BE8A E4BE8A F3B2AC8C
1503             FA71 FA71 FA71 ED55 F06D 5674 59DA 59DA 59DA 42B9 BADA 8ABA B12C 4F9A E4BE9A E4BE9A F3B2AC8D
1504             FA72 FA72 FA72 ED56 87B4 567B 59D9 59D9 59D9 42B7 B2E1 82B3 B129 4F94 E4BE94 E4BE94 F3B2AC8E
1505             FA73 FA73 FA73 ED57 -- 5686 59E6 59E6 59E6 42CA B2F5 82EB B13E 4FCD E4BF8D E4BF8D F3B2AC8F
1506             FA74 FA74 FA74 ED58 87BF 568A 5AA1 5AA1 5AA1 42E7 B3B2 8382 B15F 5040 E58180 E58180 F3B2AC90
1507             FA75 FA75 FA75 ED59 F07C 5691 59F1 59F1 59F1 42DF B3A1 8341 B158 5022 E580A2 E580A2 F3B2AC91
1508             FA76 FA76 FA76 ED5A -- 5694 59FA 59FA 59FA 43D0 B3B3 8383 B148 4FFF E4BFBF E4BFBF F3B2AC92
1509             FA77 FA77 FA77 ED5B F07B 5698 59F3 59F3 59F3 42DE B3A6 8346 B157 501E E5809E E5809E F3B2AC93
1510             FA78 FA78 FA78 ED5C F080 56A2 5AA7 5AA7 5AA7 42E9 B3C0 8391 B163 5046 E58186 E58186 F3B2AC94
1511             FA79 FA79 FA79 ED5D F087 56A3 5AAC 5AAC 5AAC 42F5 B3C3 8394 B174 5070 E581B0 E581B0 F3B2AC95
1512             FA7A FA7A FA7A ED5E F07E 56A4 5AA6 5AA6 5AA6 42E8 B3C4 8395 B161 5042 E58182 E58182 F3B2AC96
1513             FA7B FA7B FA7B ED5F 87C2 56A8 5AB0 5AB0 5AB0 42FC B3C6 8397 B223 5094 E58294 E58294 F3B2AC97
1514             FA7C FA7C FA7C ED60 -- 56B2 5ABE 5ABE 5ABE 43B9 B3D2 83A7 -- 50F4 E583B4 E583B4 F3B2AC98
1515             FA7D FA7D FA7D ED61 -- 56B5 5AC1 5AC1 5AC1 43B2 B3D5 83AA B23B 50D8 E58398 E58398 F3B2AC99
1516             FA7E FA7E FA7E ED62 87CD 56C9 5ACB 5ACB 5ACB 43D3 B3E8 83CA B266 514A E5858A E5858A F3B2AC9A
1517             FA80 FA80 FA80 ED63 -- 56CE 5AD3 5AD3 5AD3 43D9 B3F0 83DC B26D 5164 E585A4 E585A4 F3B2AC9B
1518             FA81 FA81 FA81 ED64 87D2 56DC 5AE1 5AE1 5AE1 43F2 B3F7 83ED B275 519D E5869D E5869D F3B2AC9C
1519             FA82 FA82 FA82 ED65 -- 56E8 5AE4 5AE4 5AE4 43F7 B4A2 8442 B27C 51BE E586BE E586BE F3B2AC9D
1520             FA83 FA83 FA83 ED66 -- 56EF 6DC3 6DC3 6DC3 44AC D4A8 A948 -- 51EC E587AC E587AC F3B2AC9E
1521             FA84 FA84 FA84 ED67 87DB 56F7 9FA3 9FA3 9FA3 44B4 B4B4 8484 B335 5215 E58895 E58895 F3B2AC9F
1522             FA85 FA85 FA85 ED68 -- 574F 5AF0 5AF0 5AF0 44F7 B4C1 8492 B358 529C E58A9C E58A9C F3B2ACA0
1523             FA86 FA86 FA86 ED69 F162 5750 5AF1 5AF1 5AF1 44D2 B4C3 8494 B35B 52A6 E58AA6 E58AA6 F3B2ACA1
1524             FA87 FA87 FA87 ED6A -- 5756 5AF7 5AF7 5AF7 44FA B4D0 84A5 B365 52C0 E58B80 E58B80 F3B2ACA2
1525             FA88 FA88 FA88 ED6B 87E5 5758 5BA1 5BA1 5BA1 44ED B4D8 84AE B36E 52DB E58B9B E58B9B F3B2ACA3
1526             FA89 FA89 FA89 ED6C 87E9 5761 5BA9 5BA9 5BA9 45A3 B4E8 84CA B37B 5300 E58C80 E58C80 F3B2ACA4
1527             FA8A FA8A FA8A ED6D 87EA 5763 5BAB 5BAB 5BAB 45A8 B4EC 84CE -- 5307 E58C87 E58C87 F3B2ACA5
1528             FA8B FA8B FA8B ED6E F16D 576B 5BAF 5BAF 5BAF 45B3 B4EF 84DB -- 5324 E58CA4 E58CA4 F3B2ACA6
1529             FA8C FA8C FA8C ED6F -- 577C 5BBC 5BBC 5BBC 45D2 B5A7 8547 B440 5372 E58DB2 E58DB2 F3B2ACA7
1530             FA8D FA8D FA8D ED70 87F0 5780 5BC4 5BC4 5BC4 45DB B5AD 8554 B447 5393 E58E93 E58E93 F3B2ACA8
1531             FA8E FA8E FA8E ED71 87F2 5787 5BC9 5BC9 5BC9 45E2 B5B1 8581 B450 53B2 E58EB2 E58EB2 F3B2ACA9
1532             FA8F FA8F FA8F ED72 -- 578B 5BCE 5BCE 5BCE 45F3 B5BC 858D B45E 53DD E58F9D E58F9D F3B2ACAA
1533             FA90 FA90 FA90 ED73 -- 578E 5BD3 5BD3 5BD3 45F2 B5BE 858F -- FA0E EFA88E EFA88E F3B2ACAB
1534             FA91 FA91 FA91 ED74 87F6 57A9 5BDB 5BDB 5BDB 46C4 B5D3 85A8 B52A 549C E5929C E5929C F3B2ACAC
1535             FA92 FA92 FA92 ED75 F18C 57AE 5BDA 5BDA 5BDA 46C1 B5CF 85A4 -- 548A E5928A E5928A F3B2ACAD
1536             FA93 FA93 FA93 ED76 8840 57BD 5BE1 5BE1 5BE1 46C9 B5DC 85BC B52F 54A9 E592A9 E592A9 F3B2ACAE
1537             FA94 FA94 FA94 ED77 8842 57C0 5BE3 5BE3 5BE3 45FA B5E0 85B2 B544 54FF E593BF E593BF F3B2ACAF
1538             FA95 FA95 FA95 ED78 8849 57DE 5BED 5BED 5BED 45F6 B5EE 85DA B568 5586 E59686 E59686 F3B2ACB0
1539             FA96 FA96 FA96 ED79 -- 5860 5CB2 5CB2 5CB2 48C9 B6D6 86AC -- 5759 E59D99 E59D99 F3B2ACB1
1540             FA97 FA97 FA97 ED7A -- 5863 5CB6 5CB6 5CB6 48CA B6DE 86BE B742 5765 E59DA5 E59DA5 F3B2ACB2
1541             FA98 FA98 FA98 ED7B F1EA 586C 5CB9 5CB9 5CB9 48CB B6E3 86B5 B764 57AC E59EAC E59EAC F3B2ACB3
1542             FA99 FA99 FA99 ED7C 886E 5870 5CBD 5CBD 5CBD 47F7 B6E5 86B7 B768 57C8 E59F88 E59F88 F3B2ACB4
1543             FA9A FA9A FA9A ED7D 886D 5873 9FA6 9FA6 9FA6 47F6 B6E6 86B8 B767 57C7 E59F87 E59F87 F3B2ACB5
1544             FA9B FA9B FA9B ED7E 886A 5877 5CBB 5CBB 5CBB 48CC B6E7 86B9 -- FA0F EFA88F EFA88F F3B2ACB6
1545             FA9C FA9C FA9C ED80 8876 5882 C4CD 5CC7 5CC7 C4CD 444D C4D4 -- FA10 EFA890 EFA890 F3B2ACB7
1546             FA9D FA9D FA9D ED81 887C 588A 5CD1 5CD1 5CD1 48BB B7A8 8748 -- 589E E5A29E E5A29E F3B2ACB8
1547             FA9E FA9E FA9E ED82 -- 588C 5CD3 5CD3 5CD3 48CD B7AE 8755 B84E 58B2 E5A2B2 E5A2B2 F3B2ACB9
1548             FA9F FA9F FA9F ED83 F259 58A1 5BCD 5BCD 5BCD 48D0 B7B8 8788 B861 590B E5A48B E5A48B F3B2ACBA
1549             FAA0 FAA0 FAA0 ED84 -- 58AD 5CE4 5CE4 5CE4 48E3 B7CB 879E B875 5953 E5A593 E5A593 F3B2ACBB
1550             FAA1 FAA1 FAA1 ED85 F264 58B0 5CE6 5CE6 5CE6 48E4 B7CF 87A4 B877 595B E5A59B E5A59B F3B2ACBC
1551             FAA2 FAA2 FAA2 ED86 8889 58B1 5CE8 5CE8 5CE8 48E5 B7CE 87A3 B878 595D E5A59D E5A59D F3B2ACBD
1552             FAA3 FAA3 FAA3 ED87 -- 58B2 5CE9 5CE9 5CE9 48EB B7D3 87A8 B87C 5963 E5A5A3 E5A5A3 F3B2ACBE
1553             FAA4 FAA4 FAA4 ED88 888D 58BE 5CF4 5CF4 5CF4 49A3 B7DB 87BB B92F 59A4 E5A6A4 E5A6A4 F3B2ACBF
1554             FAA5 FAA5 FAA5 ED89 -- 58C0 5CF7 5CF7 5CF7 49F0 B7E4 87B6 B937 59BA E5A6BA E5A6BA F3B2AD80
1555             FAA6 FAA6 FAA6 ED8A 9875 58EC 5DB3 5DB3 5DB3 49F2 B8B4 8884 BA3E 5B56 E5AD96 E5AD96 F3B2AD81
1556             FAA7 FAA7 FAA7 ED8B F0A2 58FC 5DC2 5DC2 5DC2 4AC9 B8CA 889D BA5B 5BC0 E5AF80 E5AF80 F3B2AD82
1557             FAA8 FAA8 FAA8 ED8C ECC7 58FE 5DC5 5DC5 5DC5 4ABD B8CC 889F CD2A 752F E794AF E794AF F3B2AD83
1558             FAA9 FAA9 FAA9 ED8D 9878 5942 5DC6 5DC6 5DC6 4AC0 B8CD 88A2 BA61 5BD8 E5AF98 E5AF98 F3B2AD84
1559             FAAA FAAA FAAA ED8E 9879 5944 5DC7 5DC7 5DC7 4AC6 B8D4 88A9 -- 5BEC E5AFAC E5AFAC F3B2AD85
1560             FAAB FAAB FAAB ED8F 987B 5951 5DD2 5DD2 5DD2 4AD4 B8E3 88B5 BA6B 5C1E E5B09E E5B09E F3B2AD86
1561             FAAC FAAC FAAC ED90 F0C1 5967 5DDE 5DDE 5DDE 4AF1 B8FB 88FB BB33 5CA6 E5B2A6 E5B2A6 F3B2AD87
1562             FAAD FAAD FAAD ED91 9889 5968 5DDD 5DDD 5DDD 4AF3 B8F9 88EF BB38 5CBA E5B2BA E5B2BA F3B2AD88
1563             FAAE FAAE FAAE ED92 -- 5970 5DE6 5DE6 5DE6 4BE4 B9A9 8949 -- 5CF5 E5B3B5 E5B3B5 F3B2AD89
1564             FAAF FAAF FAAF ED93 9891 5978 5DE8 5DE8 5DE8 4AFB B9B1 8981 BB4A 5D27 E5B4A7 E5B4A7 F3B2AD8A
1565             FAB0 FAB0 FAB0 ED94 9895 597F 5DF0 5DF0 5DF0 4BA3 C6B7 9787 -- 5D53 E5B593 E5B593 F3B2AD8B
1566             FAB1 FAB1 FAB1 ED95 9892 5980 5DEC 5DEC 5DEC 4BD0 B9BA 898A -- FA11 EFA891 EFA891 F3B2AD8C
1567             FAB2 FAB2 FAB2 ED96 F0D3 5984 5DEF 5DEF 5DEF 4BA2 B9BD 898E BB50 5D42 E5B582 E5B582 F3B2AD8D
1568             FAB3 FAB3 FAB3 ED97 9897 5987 9FA9 9FA9 9FA9 4BD3 B9C0 8991 BB5E 5D6D E5B5AD E5B5AD F3B2AD8E
1569             FAB4 FAB4 FAB4 ED98 989C 5993 5EA3 5EA3 5EA3 4BDF B9D3 89A8 BB74 5DB8 E5B6B8 E5B6B8 F3B2AD8F
1570             FAB5 FAB5 FAB5 ED99 F0E5 5995 5EA5 5EA5 5EA5 4BE0 B9D5 89AA BB75 5DB9 E5B6B9 E5B6B9 F3B2AD90
1571             FAB6 FAB6 FAB6 ED9A -- 5997 5EA7 5EA7 5EA7 4BE5 B9DA 89BA BB79 5DD0 E5B790 E5B790 F3B2AD91
1572             FAB7 FAB7 FAB7 ED9B -- 59C7 5ED2 5ED2 5ED2 4CEB BABF 8A90 BC64 5F21 E5BCA1 E5BCA1 F3B2AD92
1573             FAB8 FAB8 FAB8 ED9C EAB4 59CB 5ED3 5ED3 5ED3 4CEE BAC1 8A92 BC6D 5F34 E5BCB4 E5BCB4 F3B2AD93
1574             FAB9 FAB9 FAB9 ED9D EABC 59D8 5FCA 5FCA 5FCA 4DA2 BAD1 8AA6 BC7E 5F67 E5BDA7 E5BDA7 F3B2AD94
1575             FABA FABA FABA ED9E EAC3 59E8 5EE6 5EE6 5EE6 4DC0 BAEC 8ACE -- 5FB7 E5BEB7 E5BEB7 F3B2AD95
1576             FABB FABB FABB ED9F EAC5 59F1 5EEE 5EEE 5EEE 4DC7 BAFE 8AFE BD42 5FDE E5BF9E E5BF9E F3B2AD96
1577             FABC FABC FABC EDA0 -- 5A44 5EF8 5EF8 5EF8 4DCC BBA9 8C49 BD67 605D E6819D E6819D F3B2AD97
1578             FABD FABD FABD EDA1 -- 5A51 5EF9 5EF9 5EF9 4EA8 BBB1 8C81 -- 6085 E68285 E68285 F3B2AD98
1579             FABE FABE FABE EDA2 F2CB 5A57 5EF6 5EF6 5EF6 4DD0 B5E5 85B7 BD70 608A E6828A E6828A F3B2AD99
1580             FABF FABF FABF EDA3 -- 5A5F 5FA5 5FA5 5FA5 4EC1 BBC4 8C95 BE30 60DE E6839E E6839E F3B2AD9A
1581             FAC0 FAC0 FAC0 EDA4 EAD3 5A65 5FA3 5FA3 5FA3 4EBD BBBD 8C8E BE2C 60D5 E68395 E68395 F3B2AD9B
1582             FAC1 FAC1 FAC1 EDA5 -- 5A67 5FAA 5FAA 5FAA 4EED BBC9 8C9A -- 6120 E684A0 E684A0 F3B2AD9C
1583             FAC2 FAC2 FAC2 EDA6 F2D6 5A68 5FAD 5FAD 5FAD 4EC2 BBCE 8CA3 BE33 60F2 E683B2 E683B2 F3B2AD9D
1584             FAC3 FAC3 FAC3 EDA7 -- 5A76 5FAF 5FAF 5FAF 4EEE BBD4 8CA9 BE3D 6111 E68491 E68491 F3B2AD9E
1585             FAC4 FAC4 FAC4 EDA8 EAD9 5A79 5FB1 5FB1 5FB1 4ED0 BBD6 8CAC BE4D 6137 E684B7 E684B7 F3B2AD9F
1586             FAC5 FAC5 FAC5 EDA9 EAD8 5A7E 5FB3 5FB3 5FB3 4ECE BBD8 8CAE BE49 6130 E684B0 E684B0 F3B2ADA0
1587             FAC6 FAC6 FAC6 EDAA F2E7 5A94 5FBE 5FBE 5FBE 4EDB B6A8 8648 BE64 6198 E68698 E68698 F3B2ADA1
1588             FAC7 FAC7 FAC7 EDAB -- 5AB5 5BD7 5BD7 5BD7 4EF7 BBF9 8CEF BF28 6213 E68893 E68893 F3B2ADA2
1589             FAC8 FAC8 FAC8 EDAC F341 5ADA 5FD6 5FD6 5FD6 4FB5 BCB1 8D81 BF49 62A6 E68AA6 E68AA6 F3B2ADA3
1590             FAC9 FAC9 FAC9 EDAD EAF2 5AFB 5FE2 5FE2 5FE2 4FED BCCC 8D9F C044 63F5 E68FB5 E68FB5 F3B2ADA4
1591             FACA FACA FACA EDAE EAF8 5B50 5FEB 5FEB 5FEB 4FFA BCD9 8DAF C064 6460 E691A0 E691A0 F3B2ADA5
1592             FACB FACB FACB EDAF F36F 5B53 5FEE 5FEE 5FEE 50A2 BCDB 8DBB C074 649D E6929D E6929D F3B2ADA6
1593             FACC FACC FACC EDB0 EAFA 5B54 5FF2 5FF2 5FF2 4FA7 BCDC 8DBC C126 64CE E6938E E6938E F3B2ADA7
1594             FACD FACD FACD EDB1 -- 5B7E 5FF8 5FF8 5FF8 50C9 BCF0 8DDC -- 654E E6958E E6958E F3B2ADA8
1595             FACE FACE FACE EDB2 EB4B 5B97 60B3 60B3 60B3 51BD BDBD 8E8E C175 6600 E69880 E69880 F3B2ADA9
1596             FACF FACF FACF EDB3 EB4D 5B98 60B1 60B1 60B1 51C4 BDB5 8E85 C17C 6615 E69895 E69895 F3B2ADAA
1597             FAD0 FAD0 FAD0 EDB4 -- 4F9F B9B7 60B6 60B6 B9B7 3937 F9F7 -- 663B E698BB E698BB F3B2ADAB
1598             FAD1 FAD1 FAD1 EDB5 EB4C 5B9D 60AF 60AF 60AF 51C0 BDB7 8E87 C178 6609 E69889 E69889 F3B2ADAC
1599             FAD2 FAD2 FAD2 EDB6 -- 5BA0 60BE 60BE 60BE 51A1 BDC2 8E93 C22B 662E E698AE E698AE F3B2ADAD
1600             FAD3 FAD3 FAD3 EDB7 EB4E 5BA1 60C4 60C4 60C4 51C7 BDC4 8E95 C221 661E E6989E E6989E F3B2ADAE
1601             FAD4 FAD4 FAD4 EDB8 EB51 5BA4 60B9 60B9 60B9 51CA BDC7 8E98 C225 6624 E698A4 E698A4 F3B2ADAF
1602             FAD5 FAD5 FAD5 EDB9 EB5D 5BA7 60D1 60D1 60D1 51D9 BDD6 8EAC -- 6665 E699A5 E699A5 F3B2ADB0
1603             FAD6 FAD6 FAD6 EDBA F39E 5BA8 60D6 60D6 60D6 52A1 BDE0 8EB2 C238 6657 E69997 E69997 F3B2ADB1
1604             FAD7 FAD7 FAD7 EDBB EB5A 5BAB 60D7 60D7 60D7 51D4 BDDE 8EBE C23A 6659 E69999 E69999 F3B2ADB2
1605             FAD8 FAD8 FAD8 EDBC -- 5BAE 60DD 60DD 60DD 51DE BDE4 8EB6 -- FA12 EFA892 EFA892 F3B2ADB3
1606             FAD9 FAD9 FAD9 EDBD EB5E 5BAF 60E1 60E1 60E1 51B3 BDE6 8EB8 C244 6673 E699B3 E699B3 F3B2ADB4
1607             FADA FADA FADA EDBE F3AB 5BB4 60E6 60E6 60E6 51E5 BDF7 8EED C252 6699 E69A99 E69A99 F3B2ADB5
1608             FADB FADB FADB EDBF EB63 5BB6 60EA 60EA 60EA 51AB C5D8 96AE C257 66A0 E69AA0 E69AA0 F3B2ADB6
1609             FADC FADC FADC EDC0 EB64 5BB8 60EE 60EE 60EE 51EB BEA5 8F45 C25B 66B2 E69AB2 E69AB2 F3B2ADB7
1610             FADD FADD FADD EDC1 F3B1 5BBB 60EF 60EF 60EF 51F1 BEAC 8F53 C25E 66BF E69ABF E69ABF F3B2ADB8
1611             FADE FADE FADE EDC2 EB6B 5BC7 60C7 60C7 60C7 52A2 BDD1 8EA6 C26D 66FA E69BBA E69BBA F3B2ADB9
1612             FADF FADF FADF EDC3 -- 5BC8 60FC 60FC 60FC 52BC BEBC 8F8D C270 670E E69C8E E69C8E F3B2ADBA
1613             FAE0 FAE0 FAE0 EDC4 EB6D 5BC9 61A7 61A7 61A7 52AD BEBE 8F8F -- F929 EFA4A9 EFA4A9 F3B2ADBB
1614             FAE1 FAE1 FAE1 EDC5 EB6F 5BD8 61B2 61B2 61B2 70CE BEC8 8F99 C321 6766 E69DA6 E69DA6 F3B2ADBC
1615             FAE2 FAE2 FAE2 EDC6 EB77 5BE3 61BB 61BB 61BB 53B2 BED9 8FAF C335 67BB E69EBB E69EBB F3B2ADBD
1616             FAE3 FAE3 FAE3 EDC7 EB7D 5BEC 61BE 61BE 61BE 52EE BEE5 8FB7 C349 6852 E6A192 E6A192 F3B2ADBE
1617             FAE4 FAE4 FAE4 EDC8 EB79 5BF0 9FAC 9FAC 9FAC 53B4 BEE8 8FCA C339 67C0 E69F80 E69F80 F3B2ADBF
1618             FAE5 FAE5 FAE5 EDC9 EB7C 5BF3 61CC 61CC 61CC 53C0 BEE2 8FB4 -- 6801 E6A081 E6A081 F3B2AE80
1619             FAE6 FAE6 FAE6 EDCA F3DD 5BF9 61C6 61C6 61C6 53C7 BEF0 8FDC C358 6844 E6A184 E6A184 F3B2AE81
1620             FAE7 FAE7 FAE7 EDCB F3FB 5C5F 61DF 61DF 61DF 70CF BFBA 908A C37E 68CF E6A38F E6A38F F3B2AE82
1621             FAE8 FAE8 FAE8 EDCC F3F7 5C66 61E0 61E0 61E0 70D0 BFBC 908D -- FA13 EFA893 EFA893 F3B2AE83
1622             FAE9 FAE9 FAE9 EDCD EB98 5C6E 61E9 61E9 61E9 53ED BFC0 9091 C44C 6968 E6A5A8 E6A5A8 F3B2AE84
1623             FAEA FAEA FAEA EDCE EB9A 5C78 61F8 61F8 61F8 70D1 BFD7 90AD -- FA14 EFA894 EFA894 F3B2AE85
1624             FAEB FAEB FAEB EDCF F455 5C79 65F4 65F4 65F4 52F4 C6AA 9751 C459 6998 E6A698 E6A698 F3B2AE86
1625             FAEC FAEC FAEC EDD0 EBA0 5C90 61EF 61EF 61EF 70D2 BFE4 90B6 C46A 69E2 E6A7A2 E6A7A2 F3B2AE87
1626             FAED FAED FAED EDD1 F460 5C9A 62A3 62A3 62A3 70D3 BFE5 90B7 C47D 6A30 E6A8B0 E6A8B0 F3B2AE88
1627             FAEE FAEE FAEE EDD2 EBAE 5C9B 62A9 62A9 62A9 54AD BFE6 90B8 -- 6A6B E6A9AB E6A9AB F3B2AE89
1628             FAEF FAEF FAEF EDD3 F472 5CA6 62AE 62AE 62AE 52E8 BFEC 90CE C527 6A46 E6A986 E6A986 F3B2AE8A
1629             FAF0 FAF0 FAF0 EDD4 EBAF 5CA9 62B2 62B2 62B2 54AF BFF0 90DC C535 6A73 E6A9B3 E6A9B3 F3B2AE8B
1630             FAF1 FAF1 FAF1 EDD5 F479 5CAF 62B3 62B3 62B3 54B0 BFF8 90EE C536 6A7E E6A9BE E6A9BE F3B2AE8C
1631             FAF2 FAF2 FAF2 EDD6 -- 5CB9 62B9 62B9 62B9 54BC C0A8 9148 -- 6AE2 E6ABA2 E6ABA2 F3B2AE8D
1632             FAF3 FAF3 FAF3 EDD7 EBB6 5CBC 62B8 62B8 62B8 54BD C0A5 9145 C555 6AE4 E6ABA4 E6ABA4 F3B2AE8E
1633             FAF4 FAF4 FAF4 EDD8 EBC9 5CEA 62D0 62D0 62D0 54F8 C0CF 91A4 C638 6BD6 E6AF96 E6AF96 F3B2AE8F
1634             FAF5 FAF5 FAF5 EDD9 F4B3 5CF6 62D5 62D5 62D5 55B5 C0D9 91AF C657 6C3F E6B0BF E6B0BF F3B2AE90
1635             FAF6 FAF6 FAF6 EDDA EBD0 5CF9 62D6 62D6 62D6 55BD C0DE 91BE C660 6C5C E6B19C E6B19C F3B2AE91
1636             FAF7 FAF7 FAF7 EDDB EBD5 5CFD 62D8 62D8 62D8 55C3 C0E5 91B7 C66A 6C86 E6B286 E6B286 F3B2AE92
1637             FAF8 FAF8 FAF8 EDDC -- 5CFE 62D9 62D9 62D9 55BF C0EB 91CD C663 6C6F E6B1AF E6B1AF F3B2AE93
1638             FAF9 FAF9 FAF9 EDDD F4C2 5D4E 62E2 62E2 62E2 55D3 C0F4 91EA C721 6CDA E6B39A E6B39A F3B2AE94
1639             FAFA FAFA FAFA EDDE EBDF 5D58 62E4 62E4 62E4 55DE C1A7 9247 C72B 6D04 E6B484 E6B484 F3B2AE95
1640             FAFB FAFB FAFB EDDF EBE9 5D60 62EB 62EB 62EB 56A3 C1B6 9286 C747 6D87 E6B687 E6B687 F3B2AE96
1641             FAFC FAFC FAFC EDE0 -- 5D62 62F2 62F2 62F2 70DE C1C7 9298 C743 6D6F E6B5AF E6B5AF F3B2AE97
1642             FB40 FB40 FB40 EDE1 -- 5D6B 62EE 62EE 62EE 56A7 C1BF 9290 C74B 6D96 E6B696 E6B696 F3B2AE98
1643             FB41 FB41 FB41 EDE2 EBED 5D72 62FC 62FC 62FC 56AD C1CA 929D C74F 6DAC E6B6AC E6B6AC F3B2AE99
1644             FB42 FB42 FB42 EDE3 F4E6 5D74 63A4 63A4 63A4 56B2 C1D9 92AF C759 6DCF E6B78F E6B78F F3B2AE9A
1645             FB43 FB43 FB43 EDE4 -- 5D7A 62FD 62FD 62FD 56B8 C1CD 92A2 -- 6DF8 E6B7B8 E6B7B8 F3B2AE9B
1646             FB44 FB44 FB44 EDE5 -- 5D7F 63A6 63A6 63A6 70DF C1DF 92BF -- 6DF2 E6B7B2 E6B7B2 F3B2AE9C
1647             FB45 FB45 FB45 EDE6 EBF4 5D80 63BD 63BD 63BD 55B1 C1D1 92A6 C766 6DFC E6B7BC E6B7BC F3B2AE9D
1648             FB46 FB46 FB46 EDE7 -- 5D8A 63B7 63B7 63B7 56C2 C1FB 92FB C76E 6E39 E6B8B9 E6B8B9 F3B2AE9E
1649             FB47 FB47 FB47 EDE8 EBF8 5D8E 63B4 63B4 63B4 56CF C1F3 92DF C77C 6E5C E6B99C E6B99C F3B2AE9F
1650             FB48 FB48 FB48 EDE9 F4EE 5D93 63AE 63AE 63AE 56BE C1F4 92EA C76B 6E27 E6B8A7 E6B8A7 F3B2AEA0
1651             FB49 FB49 FB49 EDEA F4F1 5D95 63B8 63B8 63B8 56C3 C1F0 92DC C770 6E3C E6B8BC E6B8BC F3B2AEA1
1652             FB4A FB4A FB4A EDEB F543 5DA6 9FB6 9FB6 9FB6 56DF C2A8 9348 C831 6EBF E6BABF E6BABF F3B2AEA2
1653             FB4B FB4B FB4B EDEC EC4E 5DC1 63D8 63D8 63D8 56FE C2CE 93A3 C865 6F88 E6BE88 E6BE88 F3B2AEA3
1654             FB4C FB4C FB4C EDED F560 5DCA 63DF 63DF 63DF 57AE C2DF 93BF C878 6FB5 E6BEB5 E6BEB5 F3B2AEA4
1655             FB4D FB4D FB4D EDEE EC5A 5DD5 63E4 63E4 63E4 57B8 C2E4 93B6 C926 6FF5 E6BFB5 E6BFB5 F3B2AEA5
1656             FB4E FB4E FB4E EDEF EC5B 5DD7 63EB 63EB 63EB 57B9 C2EF 93DB C92B 7005 E78085 E78085 F3B2AEA6
1657             FB4F FB4F FB4F EDF0 F569 5DD8 63E8 63E8 63E8 57BA C2EE 93DA C92D 7007 E78087 E78087 F3B2AEA7
1658             FB50 FB50 FB50 EDF1 EC5D 5DE3 63F1 63F1 63F1 57BC C2F1 93DD -- 7028 E780A8 E780A8 F3B2AEA8
1659             FB51 FB51 FB51 EDF2 EC64 5DEA 63F8 63F8 63F8 57D1 C2FB 93FB C94A 7085 E78285 E78285 F3B2AEA9
1660             FB52 FB52 FB52 EDF3 EC66 5DED 63FD 63FD 63FD 57DE C2FC 93FC C953 70AB E782AB E782AB F3B2AEAA
1661             FB53 FB53 FB53 EDF4 EC6B 5DF5 9FB9 9FB9 9FB9 58A6 C3A8 9448 C969 710F E7848F E7848F F3B2AEAB
1662             FB54 FB54 FB54 EDF5 F58B 5DF6 64A5 64A5 64A5 58A5 C3A6 9446 C963 7104 E78484 E78484 F3B2AEAC
1663             FB55 FB55 FB55 EDF6 EC76 5DFB 64AD 64AD 64AD 57F1 C3B8 9488 C97C 715C E7859C E7859C F3B2AEAD
1664             FB56 FB56 FB56 EDF7 EC71 5DFC 64AE 64AE 64AE 57EB C3B9 9489 C974 7146 E78586 E78586 F3B2AEAE
1665             FB57 FB57 FB57 EDF8 EC72 5DFD 64AF 64AF 64AF 57EC C3BC 948D C975 7147 E78587 E78587 F3B2AEAF
1666             FB58 FB58 FB58 EDF9 EC79 5E49 64B9 64B9 64B9 70E3 C3CE 94A3 -- FA15 EFA895 EFA895 F3B2AEB0
1667             FB59 FB59 FB59 EDFA EC7D 5E4B 64B4 64B4 64B4 57F6 C3D0 94A5 CA33 71C1 E78781 E78781 F3B2AEB1
1668             FB5A FB5A FB5A EDFB EC81 5E5A 64C2 64C2 64C2 58A9 C3D5 94AA CA3D 71FE E787BE E787BE F3B2AEB2
1669             FB5B FB5B FB5B EDFC F5BB 5E73 64CC 64CC 64CC 58FA C3EB 94CD CA6F 72B1 E78AB1 E78AB1 F3B2AEB3
1670             FB5C FB5C FB5C EE40 EC89 5E75 9FBA 9FBA 9FBA 58D6 C3EE 94DA CA71 72BE E78ABE E78ABE F3B2AEB4
1671             FB5D FB5D FB5D EE41 -- 5E86 64D0 64D0 64D0 58ED C3FB 94FB CB2E 7324 E78CA4 E78CA4 F3B2AEB5
1672             FB5E FB5E FB5E EE42 EC8F 5E8A 64CE 64CE 64CE 58EF C3F8 94EE -- FA16 EFA896 EFA896 F3B2AEB6
1673             FB5F FB5F FB5F EE43 F5D5 5E94 64D2 64D2 64D2 58F6 C4A5 9545 CB4A 7377 E78DB7 E78DB7 F3B2AEB7
1674             FB60 FB60 FB60 EE44 -- 5E99 64DF 64DF 64DF 59BA C4BA 958A CB66 73BD E78EBD E78EBD F3B2AEB8
1675             FB61 FB61 FB61 EE45 EC99 5E9E 64DB 64DB 64DB 59BC C4B8 9588 CB6A 73C9 E78F89 E78F89 F3B2AEB9
1676             FB62 FB62 FB62 EE46 EC9B 5E9F 64E4 64E4 64E4 59C0 C4C1 9592 CB70 73D6 E78F96 E78F96 F3B2AEBA
1677             FB63 FB63 FB63 EE47 EC9D 5EA1 64E5 64E5 64E5 59C3 C4C2 9593 CB74 73E3 E78FA3 E78FA3 F3B2AEBB
1678             FB64 FB64 FB64 EE48 -- 5EA2 64E8 64E8 64E8 5AAC C4C6 9597 CB6E 73D2 E78F92 E78F92 F3B2AEBC
1679             FB65 FB65 FB65 EE49 EC9F 5EA7 64EB 64EB 64EB 59D0 C4C7 9598 CC25 7407 E79087 E79087 F3B2AEBD
1680             FB66 FB66 FB66 EE4A -- 5EA8 64EC 64EC 64EC 59C7 C4CB 959E CB79 73F5 E78FB5 E78FB5 F3B2AEBE
1681             FB67 FB67 FB67 EE4B ECA4 5EAA 64F5 64F5 64F5 59D7 C4D2 95A7 CC2B 7426 E790A6 E790A6 F3B2AEBF
1682             FB68 FB68 FB68 EE4C ECA6 5EAB 64F6 64F6 64F6 59DA C4D3 95A8 CC2E 742A E790AA E790AA F3B2AF80
1683             FB69 FB69 FB69 EE4D -- 5EAD 64FC 64FC 64FC 59D9 C4DB 95BB CC2D 7429 E790A9 E790A9 F3B2AF81
1684             FB6A FB6A FB6A EE4E ECA9 5EAE 64F8 64F8 64F8 59DD C4D7 95AD CC32 742E E790AE E790AE F3B2AF82
1685             FB6B FB6B FB6B EE4F ECB1 5EBC 65A8 65A8 65A8 5AAD C4ED 95CF CC42 7462 E791A2 E791A2 F3B2AF83
1686             FB6C FB6C FB6C EE50 ECB6 5EBD 65AE 65AE 65AE 59F4 C4F3 95DF CC50 7489 E79289 E79289 F3B2AF84
1687             FB6D FB6D FB6D EE51 ECB9 5EC0 65B2 65B2 65B2 59FB C4FB 95FB CC59 749F E7929F E7929F F3B2AF85
1688             FB6E FB6E FB6E EE52 ECC5 5ED1 65B9 65B9 65B9 5AB8 C5AC 9653 -- 7501 E79481 E79481 F3B2AF86
1689             FB6F FB6F FB6F EE53 ECC8 5EE7 65C3 65C3 65C3 5AD0 C5B4 9684 CD3B 756F E795AF E795AF F3B2AF87
1690             FB70 FB70 FB70 EE54 -- 5F69 65CA 65CA 65CA 5AFE C5D3 96A8 -- 7682 E79A82 E79A82 F3B2AF88
1691             FB71 FB71 FB71 EE55 F68F 5F70 65CE 65CE 65CE 5BA4 C5D9 96AF CE3B 769C E79A9C E79A9C F3B2AF89
1692             FB72 FB72 FB72 EE56 ECE1 5F71 65CF 65CF 65CF 5BA5 C5DA 96BA -- 769E E79A9E E79A9E F3B2AF8A
1693             FB73 FB73 FB73 EE57 ECDF 5F72 65D1 65D1 65D1 5AFD C5DB 96BB CE3A 769B E79A9B E79A9B F3B2AF8B
1694             FB74 FB74 FB74 EE58 ECE2 5F73 65D2 65D2 65D2 5BA9 C5DF 96BF CE43 76A6 E79AA6 E79AA6 F3B2AF8C
1695             FB75 FB75 FB75 EE59 -- 5F7A 65D8 65D8 65D8 5BB7 C5E5 96B7 -- FA17 EFA897 EFA897 F3B2AF8D
1696             FB76 FB76 FB76 EE5A ECF0 5F8E 65E6 65E6 65E6 5BCC C5F2 96DE CE72 7746 E79D86 E79D86 F3B2AF8E
1697             FB77 FB77 FB77 EE5B F163 5FAA 65F6 65F6 65F6 44DC B4C7 8498 B35D 52AF E58AAF E58AAF F3B2AF8F
1698             FB78 FB78 FB78 EE5C F6C1 5FAE 65F7 65F7 65F7 5BFC C6B1 9781 CF55 7821 E7A0A1 E7A0A1 F3B2AF90
1699             FB79 FB79 FB79 EE5D ED41 5FB2 65FA 65FA 65FA 5CA7 C6B5 9785 CF62 784E E7A18E E7A18E F3B2AF91
1700             FB7A FB7A FB7A EE5E F6C4 5FB3 66A1 66A1 66A1 5CAE C6BD 978E CF69 7864 E7A1A4 E7A1A4 F3B2AF92
1701             FB7B FB7B FB7B EE5F -- 5FB6 66A5 66A5 66A5 5CB2 C6C4 9795 CF6D 787A E7A1BA E7A1BA F3B2AF93
1702             FB7C FB7C FB7C EE60 F6DC 5FD1 66AE 66AE 66AE 5CCE C6DA 97BA -- 7930 E7A4B0 E7A4B0 F3B2AF94
1703             FB7D FB7D FB7D EE61 -- 5FD2 66B0 66B0 66B0 70E5 C6DD 97BD -- FA18 EFA898 EFA898 F3B2AF95
1704             FB7E FB7E FB7E EE62 ED5B 5FD5 66BB 66BB 66BB 5CDA C6EB 97CD -- FA19 EFA899 EFA899 F3B2AF96
1705             FB80 FB80 FB80 EE63 ED5C 5FD9 66C2 66C2 66C2 5CDC C6F7 97ED -- FA1A EFA89A EFA89A F3B2AF97
1706             FB81 FB81 FB81 EE64 F6E5 5FDC 66D0 66D0 66D0 5CE6 C7A3 9843 D065 7994 E7A694 E7A694 F3B2AF98
1707             FB82 FB82 FB82 EE65 ED60 5FDD 66D3 66D3 66D3 5CE4 C7A6 9846 -- FA1B EFA89B EFA89B F3B2AF99
1708             FB83 FB83 FB83 EE66 F6E8 5FDF 66D4 66D4 66D4 5CE8 C7AA 9851 D069 799B E7A69B E7A69B F3B2AF9A
1709             FB84 FB84 FB84 EE67 F758 604F 66FE 66FE 66FE 5DDD C7F2 98DE D168 7AD1 E7AB91 E7AB91 F3B2AF9B
1710             FB85 FB85 FB85 EE68 F759 6058 67A2 67A2 67A2 5DE1 C7F5 98EB -- 7AE7 E7ABA7 E7ABA7 F3B2AF9C
1711             FB86 FB86 FB86 EE69 -- 6059 67A6 67A6 67A6 5DE5 C7F7 98ED -- FA1C EFA89C EFA89C F3B2AF9D
1712             FB87 FB87 FB87 EE6A ED77 605A 67A4 67A4 67A4 5DE4 C7F8 98EE D16C 7AEB E7ABAB E7ABAB F3B2AF9E
1713             FB88 FB88 FB88 EE6B ED83 6082 67B7 67B7 67B7 5EA3 C8BB 998C D23B 7B9E E7AE9E E7AE9E F3B2AF9F
1714             FB89 FB89 FB89 EE6C -- 60AD 67CC 67CC 67CC 5ED3 C8E8 99CA -- FA1D EFA89D EFA89D F3B2AFA0
1715             FB8A FB8A FB8A EE6D EDA0 60C4 67DD 67DD 67DD 5EFD C9A7 9A47 D361 7D48 E7B588 E7B588 F3B2AFA1
1716             FB8B FB8B FB8B EE6E EDA2 60C6 67E1 67E1 67E1 5EE0 C9AC 9A53 D368 7D5C E7B59C E7B59C F3B2AFA2
1717             FB8C FB8C FB8C EE6F F7C5 60D4 67EC 67EC 67EC 5FE4 C9B9 9A89 D427 7DB7 E7B6B7 E7B6B7 F3B2AFA3
1718             FB8D FB8D FB8D EE70 EDA6 60DA 67EB 67EB 67EB 5FB6 C9B6 9A86 -- 7DA0 E7B6A0 E7B6A0 F3B2AFA4
1719             FB8E FB8E FB8E EE71 EDAA 60E1 67F1 67F1 67F1 5FBE C9BD 9A8E -- 7DD6 E7B796 E7B796 F3B2AFA5
1720             FB8F FB8F FB8F EE72 EDB3 60FD 67FB 67FB 67FB 5FD6 C9D5 9AAA D454 7E52 E7B992 E7B992 F3B2AFA6
1721             FB90 FB90 FB90 EE73 EDB7 6157 68A5 68A5 68A5 5FE8 BFFB 90FB D472 7F47 E7BD87 E7BD87 F3B2AFA7
1722             FB91 FB91 FB91 EE74 -- 616E 68AE 68AE 68AE 5FF7 C9F2 9ADE D52E 7FA1 E7BEA1 E7BEA1 F3B2AFA8
1723             FB92 FB92 FB92 EE75 -- 6177 68B2 68B2 68B2 60A1 C9F6 9AEC -- FA1E EFA89E EFA89E F3B2AFA9
1724             FB93 FB93 FB93 EE76 EDEA 61F8 68DA 68DA 68DA 61D9 CBB4 9E84 D75E 8301 E88C81 E88C81 F3B2AFAA
1725             FB94 FB94 FB94 EE77 EDEB 6248 68DD 68DD 68DD 70E7 CBD3 9EA8 -- 8362 E88DA2 E88DA2 F3B2AFAB
1726             FB95 FB95 FB95 EE78 F8B1 625B 68F2 68F2 68F2 61F0 CBD4 9EA9 D822 837F E88DBF E88DBF F3B2AFAC
1727             FB96 FB96 FB96 EE79 EDFB 6267 68FC 68FC 68FC 61FE CCA1 9F41 D837 83C7 E88F87 E88F87 F3B2AFAD
1728             FB97 FB97 FB97 EE7A -- 6274 68F8 68F8 68F8 62AA CBF7 9EED D841 83F6 E88FB6 E88FB6 F3B2AFAE
1729             FB98 FB98 FB98 EE7B EE47 627E 69A3 69A3 69A3 70E8 CCB2 9F82 D851 8448 E89188 E89188 F3B2AFAF
1730             FB99 FB99 FB99 EE7C EE4E 628A 69AF 69AF 69AF 70E9 CCC3 9F94 D874 84B4 E892B4 E892B4 F3B2AFB0
1731             FB9A FB9A FB9A EE7D F8EF 629E 69BE 69BE 69BE 62D1 CCEE 9FDA D946 8553 E89593 E89593 F3B2AFB1
1732             FB9B FB9B FB9B EE7E EE57 62A1 69BF 69BF 69BF 62D4 CCEA 9FCC D948 8559 E89599 E89599 F3B2AFB2
1733             FB9C FB9C FB9C EE80 -- 62A8 69BA 69BA 69BA 62D9 CCED 9FCF D951 856B E895AB E895AB F3B2AFB3
1734             FB9D FB9D FB9D EE81 EE59 62B9 69C1 69C1 69C1 62E4 CCFD 9FFD -- FA1F EFA89F EFA89F F3B2AFB4
1735             FB9E FB9E FB9E EE82 EE5F 62BB 69C9 69C9 69C9 62E5 CDA9 A249 -- 85B0 E896B0 E896B0 F3B2AFB5
1736             FB9F FB9F FB9F EE83 F957 62CE 69D0 69D0 69D0 70EA CDC2 A293 -- FA20 EFA8A0 EFA8A0 F3B2AFB6
1737             FBA0 FBA0 FBA0 EE84 F964 62E2 69D7 69D7 69D7 63DF CDD3 A2A8 -- FA21 EFA8A1 EFA8A1 F3B2AFB7
1738             FBA1 FBA1 FBA1 EE85 -- 635E 69DA 69DA 69DA 63E0 CDE2 A2B4 -- 8807 E8A087 E8A087 F3B2AFB8
1739             FBA2 FBA2 FBA2 EE86 EE8D 6390 69E6 69E6 69E6 63F9 CEA4 A344 DC53 88F5 E8A3B5 E8A3B5 F3B2AFB9
1740             FBA3 FBA3 FBA3 EE87 EE9D 63C5 69FE 69FE 69FE 64E4 CECA A39D DD48 8A12 E8A892 E8A892 F3B2AFBA
1741             FBA4 FBA4 FBA4 EE88 EEA0 63CB 6AA5 6AA5 6AA5 64EC CEDA A3BA DD54 8A37 E8A8B7 E8A8B7 F3B2AFBB
1742             FBA5 FBA5 FBA5 EE89 EEA6 63D4 6AAA 6AAA 6AAA 64DA CEDF A3BF DD6A 8A79 E8A9B9 E8A9B9 F3B2AFBC
1743             FBA6 FBA6 FBA6 EE8A EEA7 63DF 6AAB 6AAB 6AAB 65A7 CEE2 A3B4 DD7A 8AA7 E8AAA7 E8AAA7 F3B2AFBD
1744             FBA7 FBA7 FBA7 EE8B F9DE 63E1 6AAD 6AAD 6AAD 6BEA CEE3 A3B5 DE24 8ABE E8AABE E8AABE F3B2AFBE
1745             FBA8 FBA8 FBA8 EE8C EEA9 63ED 6AB3 6AB3 6AB3 65B3 CEEC A3CE DE30 8ADF E8AB9F E8AB9F F3B2AFBF
1746             FBA9 FBA9 FBA9 EE8D EEAC 63EE 6AB2 6AB2 6AB2 65B7 CEEA A3CC -- FA22 EFA8A2 EFA8A2 F3B2B080
1747             FBAA FBAA FBAA EE8E EEAB 63EF 6AB4 6AB4 6AB4 65B6 CEED A3CF DE35 8AF6 E8ABB6 E8ABB6 F3B2B081
1748             FBAB FBAB FBAB EE8F -- 6445 6ABE 6ABE 6ABE 65C7 CEF8 A3EE DE4B 8B53 E8AD93 E8AD93 F3B2B082
1749             FBAC FBAC FBAC EE90 F9ED 6450 6AC3 6AC3 6AC3 65D1 CEFE A3FE -- 8B7F E8ADBF E8ADBF F3B2B083
1750             FBAD FBAD FBAD EE91 FA4F 647C 6AD0 6AD0 6AD0 66AB CFBC A48D DF39 8CF0 E8B3B0 E8B3B0 F3B2B084
1751             FBAE FBAE FBAE EE92 EEB8 647D 6ACF 6ACF 6ACF 65F9 CFBB A48C -- 8CF4 E8B3B4 E8B3B4 F3B2B085
1752             FBAF FBAF FBAF EE93 EEBC 6485 6AD5 6AD5 6AD5 65F8 CFC2 A493 DF43 8D12 E8B492 E8B492 F3B2B086
1753             FBB0 FBB0 FBB0 EE94 -- 648D 6AD8 6AD8 6AD8 66B9 CFC5 A496 -- 8D76 E8B5B6 E8B5B6 F3B2B087
1754             FBB1 FBB1 FBB1 EE95 -- 648E 6AD9 6AD9 6AD9 66C3 CFC7 A498 -- FA23 EFA8A3 EFA8A3 F3B2B088
1755             FBB2 FBB2 FBB2 EE96 -- 64C9 6AE1 6AE1 6AE1 66ED CFDE A4BE E059 8ECF E8BB8F E8BB8F F3B2B089
1756             FBB3 FBB3 FBB3 EE97 FA8E 64F1 6AEB 6AEB 6AEB 70F9 CFFD A4FD -- FA24 EFA8A4 EFA8A4 F3B2B08A
1757             FBB4 FBB4 FBB4 EE98 -- 6549 6AFA 6AFA 6AFA 70FB D0C2 A593 -- FA25 EFA8A5 EFA8A5 F3B2B08B
1758             FBB5 FBB5 FBB5 EE99 -- 6553 6BA3 6BA3 6BA3 70FA D0CD A5A2 E162 9067 E981A7 E981A7 F3B2B08C
1759             FBB6 FBB6 FBB6 EE9A EEE5 6564 6BC7 6BC7 6BC7 68A6 D0EC A5CE -- 90DE E9839E E9839E F3B2B08D
1760             FBB7 FBB7 FBB7 EE9B EEE8 6566 6BCA 6BCA 6BCA 68A8 D0F2 A5DE -- FA26 EFA8A6 EFA8A6 F3B2B08E
1761             FBB8 FBB8 FBB8 EE9C EEEA 6567 6BCD 6BCD 6BCD 68DF D0F3 A5DF -- 9115 E98495 E98495 F3B2B08F
1762             FBB9 FBB9 FBB9 EE9D EEEE 656B 6BD1 6BD1 6BD1 68B0 D0F9 A5EF E247 9127 E984A7 E984A7 F3B2B090
1763             FBBA FBBA FBBA EE9E FACC 6583 6BD9 6BD9 6BD9 69BE D1B8 A688 E328 91DA E9879A E9879A F3B2B091
1764             FBBB FBBB FBBB EE9F EEFA 6585 6BD8 6BD8 6BD8 69BC D1B7 A687 E326 91D7 E98797 E98797 F3B2B092
1765             FBBC FBBC FBBC EEA0 -- 6586 6BDA 6BDA 6BDA 69BF D1B9 A689 E329 91DE E9879E E9879E F3B2B093
1766             FBBD FBBD FBBD EEA1 EF41 658A 6BDC 6BDC 6BDC 69C5 D1BB A68C E32F 91ED E987AD E987AD F3B2B094
1767             FBBE FBBE FBBE EEA2 FAD0 658C 6BE1 6BE1 6BE1 69C6 D1C1 A692 E330 91EE E987AE E987AE F3B2B095
1768             FBBF FBBF FBBF EEA3 EEFC 658D 6BE0 6BE0 6BE0 69C0 D1BE A68F E32A 91E4 E987A4 E987A4 F3B2B096
1769             FBC0 FBC0 FBC0 EEA4 EF40 658F 6BDF 6BDF 6BDF 69C1 D1BD A68E E32B 91E5 E987A5 E987A5 F3B2B097
1770             FBC1 FBC1 FBC1 EEA5 -- 6590 6BE5 6BE5 6BE5 69CD D1C6 A697 E33C 9206 E98886 E98886 F3B2B098
1771             FBC2 FBC2 FBC2 EEA6 EF44 6593 6BE9 6BE9 6BE9 69D1 D1C4 A695 E341 9210 E98890 E98890 F3B2B099
1772             FBC3 FBC3 FBC3 EEA7 FAD2 6595 6BE7 6BE7 6BE7 69D0 D1CB A69E E33F 920A E9888A E9888A F3B2B09A
1773             FBC4 FBC4 FBC4 EEA8 EF47 659B 6BF2 6BF2 6BF2 69E1 D1DC A6BC E355 923A E988BA E988BA F3B2B09B
1774             FBC5 FBC5 FBC5 EEA9 EF49 659E 6BEE 6BEE 6BEE 69E4 D1D6 A6AC E358 9240 E98980 E98980 F3B2B09C
1775             FBC6 FBC6 FBC6 EEAA EF48 659F 6BF3 6BF3 6BF3 69E2 D1D9 A6AF E356 923C E988BC E988BC F3B2B09D
1776             FBC7 FBC7 FBC7 EEAB FADA 65A1 6BEF 6BEF 6BEF 69E8 D1DD A6BD E35F 924E E9898E E9898E F3B2B09E
1777             FBC8 FBC8 FBC8 EEAC FADD 65A3 6BF1 6BF1 6BF1 69EE D1DB A6BB E363 9259 E98999 E98999 F3B2B09F
1778             FBC9 FBC9 FBC9 EEAD FADB 65A5 6BEC 6BEC 6BEC 69EA D1D1 A6A6 E361 9251 E98991 E98991 F3B2B0A0
1779             FBCA FBCA FBCA EEAE EF46 65A6 6BED 6BED 6BED 69E0 D1D3 A6A8 E354 9239 E988B9 E988B9 F3B2B0A1
1780             FBCB FBCB FBCB EEAF FAE1 65A8 6BF6 6BF6 6BF6 6BD2 D1E4 A6B6 E369 9267 E989A7 E989A7 F3B2B0A2
1781             FBCC FBCC FBCC EEB0 FAED 65AB 6CA6 6CA6 6CA6 6AA7 D1EE A6DA E426 92A7 E98AA7 E98AA7 F3B2B0A3
1782             FBCD FBCD FBCD EEB1 -- 65AC 6CA8 6CA8 6CA8 69F7 D1EF A6DB E371 9277 E989B7 E989B7 F3B2B0A4
1783             FBCE FBCE FBCE EEB2 EF4C 65AD 6CA5 6CA5 6CA5 69F8 D1E6 A6B8 E372 9278 E989B8 E989B8 F3B2B0A5
1784             FBCF FBCF FBCF EEB3 FAFA 65B4 6CB1 6CB1 6CB1 6AC4 D1F9 A6EF E44B 92E7 E98BA7 E98BA7 F3B2B0A6
1785             FBD0 FBD0 FBD0 EEB4 FAF7 65B5 6CAC 6CAC 6CAC 6ABC D1F0 A6DC E441 92D7 E98B97 E98B97 F3B2B0A7
1786             FBD1 FBD1 FBD1 EEB5 FAF8 65B6 6CB8 6CB8 6CB8 6ABE D1F7 A6ED E443 92D9 E98B99 E98B99 F3B2B0A8
1787             FBD2 FBD2 FBD2 EEB6 FAF6 65B7 6CB3 6CB3 6CB3 6AB8 D2A4 A744 E43E 92D0 E98B90 E98B90 F3B2B0A9
1788             FBD3 FBD3 FBD3 EEB7 -- 65B8 6CB7 6CB7 6CB7 6BD3 D2A6 A746 -- FA27 EFA8A7 EFA8A7 F3B2B0AA
1789             FBD4 FBD4 FBD4 EEB8 -- 65B9 6CB5 6CB5 6CB5 6ABB D2A3 A743 E440 92D5 E98B95 E98B95 F3B2B0AB
1790             FBD5 FBD5 FBD5 EEB9 EF52 65BC 6CB0 6CB0 6CB0 6AC2 D1FE A6FE E447 92E0 E98BA0 E98BA0 F3B2B0AC
1791             FBD6 FBD6 FBD6 EEBA EF51 65BD 9FCA 9FCA 9FCA 6ABA D1F4 A6EA E43F 92D3 E98B93 E98B93 F3B2B0AD
1792             FBD7 FBD7 FBD7 EEBB EF57 65C1 6CC3 6CC3 6CC3 6AD5 D2B4 A784 E460 9325 E98CA5 E98CA5 F3B2B0AE
1793             FBD8 FBD8 FBD8 EEBC EF56 65C3 6CBE 6CBE 6CBE 6AD3 D2A9 A749 E45E 9321 E98CA1 E98CA1 F3B2B0AF
1794             FBD9 FBD9 FBD9 EEBD FB43 65C5 6CCD 6CCD 6CCD 69B3 D2AF A756 E451 92FB E98BBB E98BBB F3B2B0B0
1795             FBDA FBDA FBDA EEBE -- 65C6 6CC2 6CC2 6CC2 6BD4 D2B7 A787 -- FA28 EFA8A8 EFA8A8 F3B2B0B1
1796             FBDB FBDB FBDB EEBF FB48 65C8 6CBF 6CBF 6CBF 6AD1 D2AB A752 E45C 931E E98C9E E98C9E F3B2B0B2
1797             FBDC FBDC FBDC EEC0 EF53 65C9 6CC1 6CC1 6CC1 6ACA D2B5 A785 E452 92FF E98BBF E98BBF F3B2B0B3
1798             FBDD FBDD FBDD EEC1 FB47 65CC 6CC4 6CC4 6CC4 6AD0 D2B3 A783 E45B 931D E98C9D E98C9D F3B2B0B4
1799             FBDE FBDE FBDE EEC2 FB44 65CE 6CC5 6CC5 6CC5 6ACC D2B2 A782 E454 9302 E98C82 E98C82 F3B2B0B5
1800             FBDF FBDF FBDF EEC3 EF5E 65D0 6CCA 6CCA 6CCA 6AE4 D2BB A78C E47A 9370 E98DB0 E98DB0 F3B2B0B6
1801             FBE0 FBE0 FBE0 EEC4 FB4F 65D5 6CCC 6CCC 6CCC 6ADE D2C3 A794 E46F 9357 E98D97 E98D97 F3B2B0B7
1802             FBE1 FBE1 FBE1 EEC5 -- 65D8 6CD8 6CD8 6CD8 6AF2 D2D3 A7A8 E533 93A4 E98EA4 E98EA4 F3B2B0B8
1803             FBE2 FBE2 FBE2 EEC6 EF62 65DD 6CE0 6CE0 6CE0 6AF9 D2DF A7BF E53F 93C6 E98F86 E98F86 F3B2B0B9
1804             FBE3 FBE3 FBE3 EEC7 EF63 65E4 6CDF 6CDF 6CDF 6BA3 D2DA A7BA E549 93DE E98F9E E98F9E F3B2B0BA
1805             FBE4 FBE4 FBE4 EEC8 -- 65E8 6CE6 6CE6 6CE6 6BAE D2E7 A7B9 E550 93F8 E98FB8 E98FB8 F3B2B0BB
1806             FBE5 FBE5 FBE5 EEC9 -- 65F0 6CEF 6CEF 6CEF 6BBD D2F2 A7DE E562 9431 E990B1 E990B1 F3B2B0BC
1807             FBE6 FBE6 FBE6 EECA FB6C 65F4 6CF0 6CF0 6CF0 6BC5 D2F3 A7DF E56A 9445 E99185 E99185 F3B2B0BD
1808             FBE7 FBE7 FBE7 EECB -- 65F6 6CF1 6CF1 6CF1 6BC6 D2F4 A7EA E56B 9448 E99188 E99188 F3B2B0BE
1809             FBE8 FBE8 FBE8 EECC -- 664A 6CF8 6CF8 6CF8 6BE1 D2FC A7FC -- 9592 E99692 E99692 F3B2B0BF
1810             FBE9 FBE9 FBE9 EECD EF7C 6674 6DA2 6DA2 6DA2 68CC D3B9 A889 -- F9DC EFA79C EFA79C F3B2B180
1811             FBEA FBEA FBEA EECE -- 6678 6DA4 6DA4 6DA4 68E0 D3C0 A891 -- FA29 EFA8A9 EFA8A9 F3B2B181
1812             FBEB FBEB FBEB EECF EF7D 6679 6DA5 6DA5 6DA5 68D4 D3C1 A892 E668 969D E99A9D E99A9D F3B2B182
1813             FBEC FBEC FBEC EED0 FB8C 667F 6DA6 6DA6 6DA6 68DB D3C4 A895 E66F 96AF E99AAF E99AAF F3B2B183
1814             FBED FBED FBED EED1 EF86 6697 9FCD 9FCD 9FCD 6CAC D3D4 A8A9 E72C 9733 E99CB3 E99CB3 F3B2B184
1815             FBEE FBEE FBEE EED2 EF87 6699 9FCE 9FCE 9FCE 6CAD D3D5 A8AA -- 973B E99CBB E99CBB F3B2B185
1816             FBEF FBEF FBEF EED3 -- 669E 6DAE 6DAE 6DAE 6CB0 D3D7 A8AD E72E 9743 E99D83 E99D83 F3B2B186
1817             FBF0 FBF0 FBF0 EED4 EF88 66A2 6DB0 6DB0 6DB0 6CB1 D3D9 A8AF -- 974D E99D8D E99D8D F3B2B187
1818             FBF1 FBF1 FBF1 EED5 EF8A 66A3 9FCF 9FCF 9FCF 6CAE D3DB A8BB E731 974F E99D8F E99D8F F3B2B188
1819             FBF2 FBF2 FBF2 EED6 -- 66A4 6DB1 6DB1 6DB1 6CB3 D3DC A8BC -- 9751 E99D91 E99D91 F3B2B189
1820             FBF3 FBF3 FBF3 EED7 FB9C 66A5 6DB2 6DB2 6DB2 6CB5 D3DE A8BE E732 9755 E99D95 E99D95 F3B2B18A
1821             FBF4 FBF4 FBF4 EED8 EF9F 66CB 6DC1 6DC1 6DC1 6CF3 D4A1 A941 E831 9857 E9A197 E9A197 F3B2B18B
1822             FBF5 FBF5 FBF5 EED9 EFA3 66CC 6DC2 6DC2 6DC2 6CF7 D4A4 A944 E836 9865 E9A1A5 E9A1A5 F3B2B18C
1823             FBF6 FBF6 FBF6 EEDA -- 66DD 6DC5 6DC5 6DC5 6DB3 D4B3 A983 -- FA2A EFA8AA EFA8AA F3B2B18D
1824             FBF7 FBF7 FBF7 EEDB -- 66DF 6DC6 6DC6 6DC6 6DB4 D4B4 A984 -- FA2B EFA8AB EFA8AB F3B2B18E
1825             FBF8 FBF8 FBF8 EEDC -- 66E5 6DC8 6DC8 6DC8 6DBD D4B7 A987 E85D 9927 E9A4A7 E9A4A7 F3B2B18F
1826             FBF9 FBF9 FBF9 EEDD -- 66E6 6DC9 6DC9 6DC9 6DBE D4B8 A988 -- FA2C EFA8AC EFA8AC F3B2B190
1827             FBFA FBFA FBFA EEDE EFA9 66F9 6DCC 6DCC 6DCC 5CF3 D4C3 A994 -- 999E E9A69E E9A69E F3B2B191
1828             FBFB FBFB FBFB EEDF EFB1 6759 6DD9 6DD9 6DD9 6DF6 D4D7 A9AD E951 9A4E E9A98E E9A98E F3B2B192
1829             FBFC FBFC FBFC EEE0 -- 676B 6DD4 6DD4 6DD4 6EA4 D4DC A9BC -- 9AD9 E9AB99 E9AB99 F3B2B193
1830             FC40 FC40 FC40 EEE1 FC51 676C 6DDC 6DDC 6DDC 6EA7 D4DE A9BE E96D 9ADC E9AB9C E9AB9C F3B2B194
1831             FC41 FC41 FC41 EEE2 EFC2 678F 9FD2 9FD2 9FD2 6ED0 D4F0 A9DC EA4D 9B75 E9ADB5 E9ADB5 F3B2B195
1832             FC42 FC42 FC42 EEE3 EFC1 6791 6DE0 6DE0 6DE0 6EEE D4EF A9DB -- 9B72 E9ADB2 E9ADB2 F3B2B196
1833             FC43 FC43 FC43 EEE4 EFC5 6793 6DE2 6DE2 6DE2 6ED8 D4F3 A9DF EA5B 9B8F E9AE8F E9AE8F F3B2B197
1834             FC44 FC44 FC44 EEE5 FC69 679B 6DE5 6DE5 6DE5 6EDB D4FB A9FB EA66 9BB1 E9AEB1 E9AEB1 F3B2B198
1835             FC45 FC45 FC45 EEE6 -- 679F 6DE7 6DE7 6DE7 6EEF D5A8 AA48 EA6A 9BBB E9AEBB E9AEBB F3B2B199
1836             FC46 FC46 FC46 EEE7 EFCD 67B1 9FD3 9FD3 9FD3 6EE3 D5AF AA56 EB25 9C00 E9B080 E9B080 F3B2B19A
1837             FC47 FC47 FC47 EEE8 EFDC 67E2 9FD8 9FD8 9FD8 6FA3 D3C9 A89A EB7B 9D70 E9B5B0 E9B5B0 F3B2B19B
1838             FC48 FC48 FC48 EEE9 FCB2 67E4 6DF2 6DF2 6DF2 6FA1 D5D4 AAA9 EB7A 9D6B E9B5AB E9B5AB F3B2B19C
1839             FC49 FC49 FC49 EEEA -- 67F4 6DF4 6DF4 6DF4 6FB2 D5DA AABA -- FA2D EFA8AD EFA8AD F3B2B19D
1840             FC4A FC4A FC4A EEEB FCCD 67FE 6EAC 6EAC 6EAC 6FAE D5DC AABC EC56 9E19 E9B899 E9B899 F3B2B19E
1841             FC4B FC4B FC4B EEEC EFF0 6856 6EA1 6EA1 6EA1 6FD6 D5EB AACD -- 9ED1 E9BB91 E9BB91 F3B2B19F
1842              
1843             =head1 UTF-8.0 vs. UTF-8.1
1844              
1845             The large character sets has always some problems.
1846             One of problem of UTF-8 is difference between Microsoft Corporation-san's definition and general definition.
1847             Already, in this software, "utf8" means Microsoft Corporation-san's definition.
1848             So we named the general UTF-8 "UTF-8.1" to distinguish them.
1849              
1850             Terminology and definitions
1851             -------------------------------------------------------------------------------
1852             UTF-8 [ju:ti:ef eit] could mean sometimes UTF-8.0, sometimes UTF-8.x
1853             UTF-8.0 [ju:ti:ef hatten-zero] is Microsoft's definition of the UTF-8
1854             UTF-8.1 [ju:ti:ef hatten-ichi] is general definition of the UTF-8
1855             UTF-8.x [ju:ti:ef hatten-ekks] means both UTF-8.0 and UTF-8.1
1856             -------------------------------------------------------------------------------
1857              
1858             The following is difference between UTF-8.0 and UTF-8.1.
1859              
1860             #+++++++----------------------------------------------------------------------------------------------------------- CP932X, Extended CP932 to JIS X 0213 using 0x9C5A as single shift
1861             #||||||| ++++------------------------------------------------------------------------------------------------------ Microsoft CP932, IANA Windows-31J
1862             #||||||| |||| ++++------------------------------------------------------------------------------------------------- IBM CP932
1863             #||||||| |||| |||| ++++-------------------------------------------------------------------------------------------- NEC CP932
1864             #||||||| |||| |||| |||| ++++--------------------------------------------------------------------------------------- JISC Shift_JIS-2004
1865             #||||||| |||| |||| |||| |||| ++++---------------------------------------------------------------------------------- IBM CP00930(CP00290+CP00300), CCSID 5026 katakana
1866             #||||||| |||| |||| |||| |||| |||| ++++----------------------------------------------------------------------------- HITACHI KEIS78
1867             #||||||| |||| |||| |||| |||| |||| |||| ++++------------------------------------------------------------------------ HITACHI KEIS83
1868             #||||||| |||| |||| |||| |||| |||| |||| |||| ++++------------------------------------------------------------------- HITACHI KEIS90
1869             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| ++++-------------------------------------------------------------- FUJITSU JEF
1870             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++--------------------------------------------------------- NEC JIPS(J)
1871             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++---------------------------------------------------- NEC JIPS(E)
1872             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ++++----------------------------------------------- UNISYS LetsJ
1873             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| +++++++++------------------------------------- Unicode
1874             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| ++++++++++++------------------------ UTF-8.0 (aka UTF-8)
1875             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| |||||||||||| ++++++++++++----------- UTF-8.1
1876             #||||||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| |||| ||||||||| |||||||||||| |||||||||||| ++++++++-- UTF-8-SPUA-JP, JIS X 0213 on SPUA ordered by JIS level, plane, row, cell
1877             #2345678 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 1234 123456789 123456789012 123456789012 12345678
1878             #VVVVVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVVVVVVV VVVVVVVVVVVV VVVVVVVVVVVV VVVVVVVV
1879             815C 815C 815C 815C -- DDB7 A1BD A1BD A1BD A1BD 213D 4F7E A1BD 2015 E28095 E28094 F3B0849C
1880             8161 8161 8161 8161 81D2 DFE5 A1C2 A1C2 A1C2 A1C2 2142 4FC2 -- 2225 E288A5 E28096 F3B084A1
1881             817C 817C 817C 817C 81AF E9F3 A1DD A1DD A1DD A1DD 215D 4F5A -- FF0D EFBC8D E28892 F3B084BC
1882             9C5A815C -- -- -- 815C 444A -- -- -- -- -- -- -- 2014 E28094 E28095 F3B2B4AC
1883             9C5A8161 -- -- -- 8161 447C -- -- -- -- -- -- A1C2 2016 E28096 E288A5 F3B2B4B1
1884             9C5A817C -- -- -- 817C 4260 -- -- -- -- -- -- A1DD 2212 E28892 EFBC8D F3B2B58C
1885              
1886             =head1 ERRATAS OF MAPPINGS
1887              
1888             Mapping of Jacode4e version 2.13.81.11 or earlier has following errata:
1889              
1890             =head2 KEIS78, KEIS83, and KEIS90
1891              
1892             Mapping of 'keis78', 'keis83', and 'keis90' had following errata:
1893              
1894             ----------------------------------------------
1895             Unicode 2.13.81.12 2.13.81.11
1896             or later or older
1897             ----------------------------------------------
1898             芺 U+82BA KEIS:(no mapping) KEIS:68CF
1899             覀 U+8980 KEIS:(no mapping) KEIS:59A9
1900             麽 U+9EBD KEIS:6DFB KEIS:5EC3
1901             ----------------------------------------------
1902              
1903             =head2 JEF and JEF9P
1904              
1905             Mapping of 'jef' and 'jef9p' had following errata:
1906              
1907             ----------------------------------------------
1908             Unicode 2.13.81.12 2.13.81.11
1909             or later or older
1910             ----------------------------------------------
1911             漼 U+6F3C JEF:(no mapping) JEF:56F3
1912             臽 U+81FD JEF:(no mapping) JEF:52E1
1913             海 U+FA45 JEF:55FB JEF:53FA
1914             渚 U+FA46 JEF:BDED JEF:55FB
1915             漢 U+FA47 JEF:56E6 JEF:BDED
1916             煮 U+FA48 JEF:58A7 JEF:56E6
1917             爫 U+FA49 JEF:(no mapping) JEF:58A7
1918             社 U+FA4C JEF:5CD3 JEF:5CB3
1919             祉 U+FA4D JEF:5CD5 JEF:5CD3
1920             祈 U+FA4E JEF:5CD4 JEF:5CD5
1921             祐 U+FA4F JEF:5CD6 JEF:5CD4
1922             祖 U+FA50 JEF:5CD7 JEF:5CD6
1923             祝 U+FA51 JEF:5CD9 JEF:5CD7
1924             禍 U+FA52 JEF:5CE2 JEF:5CD9
1925             禎 U+FA53 JEF:5CE3 JEF:5CE2
1926             穀 U+FA54 JEF:5CF4 JEF:5CE3
1927             突 U+FA55 JEF:5DCD JEF:5CF4
1928             縉 U+FA58 JEF:(no mapping) JEF:5FC8
1929             署 U+FA5A JEF:5FF0 JEF:5EE3
1930             者 U+FA5B JEF:60B5 JEF:5FF0
1931             臭 U+FA5C JEF:60E3 JEF:60B5
1932             艹 U+FA5D JEF:(no mapping) JEF:60E3
1933             ~ U+FF5E JEF:(no mapping) JEF:A1C1
1934             ----------------------------------------------
1935              
1936             =head2 JIPS(J)
1937              
1938             Mapping of 'jipsj' had following errata:
1939              
1940             ----------------------------------------------
1941             Unicode 2.13.81.12 2.13.81.11
1942             or later or older
1943             ----------------------------------------------
1944             Ý U+00DD JIPSJ:(no mapping) JIPSJ:A5B1
1945             耰 U+8030 JIPSJ:(no mapping) JIPSJ:CAAB
1946             ----------------------------------------------
1947              
1948             =head2 JIPS(E)
1949              
1950             Mapping of 'jipse' had following errata:
1951              
1952             ----------------------------------------------
1953             Unicode 2.13.81.12 2.13.81.11
1954             or later or older
1955             ----------------------------------------------
1956             Ý U+00DD JIPSE:(no mapping) JIPSE:4581
1957             耰 U+8030 JIPSE:(no mapping) JIPSE:9D52
1958             ----------------------------------------------
1959              
1960             =head1 DEPENDENCIES
1961              
1962             perl version 5.005_03 to newest perl
1963              
1964             =head1 SOFTWARE LIFE CYCLE
1965              
1966             Jacode.pm
1967             jcode.pl Encode.pm jacode.pl Jacode4e Jacode4e::RoundTrip
1968             --------------------------------------------------------------------------------
1969             1993 Perl4.036 | |
1970             : : : :
1971             1999 Perl5.00503 | | | |
1972             2000 Perl5.6 | | | |
1973             2002 Perl5.8 | Born | | |
1974             2007 Perl5.10 V | | | |
1975             2010 Perl5.12 EOL | Born | |
1976             2011 Perl5.14 | | | |
1977             2012 Perl5.16 | | | |
1978             2013 Perl5.18 | | | |
1979             2014 Perl5.20 | | | |
1980             2015 Perl5.22 | | | |
1981             2016 Perl5.24 | | | |
1982             2017 Perl5.26 | | | |
1983             2018 Perl5.28 | | Born Born
1984             2019 Perl5.30 | | | |
1985             2020 Perl5.32 : : : :
1986             2030 Perl5.52 : : : :
1987             2040 Perl5.72 : : : :
1988             2050 Perl5.92 : : : :
1989             2060 Perl5.112 : : : :
1990             2070 Perl5.132 : : : :
1991             2080 Perl5.152 : : : :
1992             2090 Perl5.172 : : : :
1993             2100 Perl5.192 : : : :
1994             2110 Perl5.212 : : : :
1995             2120 Perl5.232 : : : :
1996             : : V V V V
1997             --------------------------------------------------------------------------------
1998              
1999             =head1 Why and how to CP932X Born?
2000              
2001             In order to know why CP932X exists the way it is, one must first know why CP932X born.
2002              
2003             Q1) Is CCS of JIS X 0208 enough?
2004              
2005             A1) No. Often we require GAIJI.
2006              
2007             Q2) Is CCS of JIS X 0213 enough?
2008              
2009             A2) It's not perfect, but enough for many people.
2010              
2011             Q3) Is CES by UTF-8 good?
2012              
2013             A3) No. On Japanese information processing, it's unstable and not popular still now.
2014              
2015             Q4) Is CES by Shift_JIS-2004 good?
2016              
2017             A4) No. Because Shift_JIS-2004 cannot support very popular CP932 and your GAIJI. We need a realistic solution to solving real problem.
2018              
2019             Q5) Is escape sequence good idea to support CCS of JIS X 0213?
2020              
2021             A5) No. Because the programming is so hard.
2022              
2023             Q6) Which character is best for single shift code to support CCS of JIS X 0213?
2024              
2025             =over 2
2026              
2027             =item * The single shift code must be a DBCS code, because field with DBCS type cannot store SBCS code in some cases
2028              
2029             =item * Moreover, all GAIJI code points must be yours
2030              
2031             =item * The impact of this solution must be minimum
2032              
2033             =back
2034              
2035             A6) We selected "1-55-27" for single shift code. Because it called "ghost character" and cannot use any purpose
2036              
2037             =head1 AUTHOR
2038              
2039             INABA Hitoshi L in a CPAN
2040              
2041             This project was originated by INABA Hitoshi.
2042              
2043             =head1 LICENSE AND COPYRIGHT
2044              
2045             This software is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L.
2046              
2047             This software 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.
2048              
2049             =head1 SEE ALSO
2050              
2051             Windows-31J information
2052             http://www2d.biglobe.ne.jp/%7Emsyk/charcode/cp932/index.html
2053              
2054             Windows-31 J Character Set
2055             http://www2d.biglobe.ne.jp/%7Emsyk/charcode/cp932/Windows-31J-charset.html
2056              
2057             Windows-31 J Duplicate Coded Characters and Unicode
2058             http://www2d.biglobe.ne.jp/%7Emsyk/charcode/cp932/uni2sjis-Windows-31J.html
2059              
2060             Data transformation function provided by WebSphere MQ
2061             Chapter 11. Problems with converting certain characters (Japanese language related)
2062             https://www.ibm.com/developerworks/jp/websphere/library/wmq/mq_transform/11.html
2063             https://www.ibm.com/developerworks/jp/websphere/library/wmq/mq_transform/11-pdf.pdf
2064              
2065             CPGID 00290
2066             https://www-01.ibm.com/software/globalization/cdra/
2067             https://www-01.ibm.com/software/globalization/cp/cp00290.html
2068             ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00290.pdf
2069             ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00290.txt
2070              
2071             IBM Japanese Graphic Character Set, Kanji DBCS Host and DBCS - PC
2072             https://www-01.ibm.com/software/globalization/cdra/
2073             ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00300.pdf
2074              
2075             IBM Kanji code list
2076             N:GC18-2040-3
2077              
2078             HiRDB Datareplicator Version 8 manuals, Hitachi, Ltd.
2079             http://itdoc.hitachi.co.jp/manuals/3020/3020636050/W3600001.HTM
2080             http://itdoc.hitachi.co.jp/manuals/3020/3020636050/W3600166.HTM
2081             http://itdoc.hitachi.co.jp/manuals/3020/30203J3820/ISUS0268.HTM
2082             http://itdoc.hitachi.co.jp/manuals/3000/30003D5820/CLNT0235.HTM
2083              
2084             KEIS code book, Culti Co.,Ltd.
2085             http://www.culti.co.jp/2016/02/01/%e3%82%ab%e3%83%ab%e3%83%81%e7%99%ba%e8%a1%8c%e6%9b%b8%e7%b1%8d/
2086              
2087             Appendix B.2 Character code differences
2088             http://itdoc.hitachi.co.jp/manuals/3020/3020759580/G5950334.HTM
2089              
2090             Appendix E Handling of character codes in PDE - Form Designer (applies only to distributed type PDE)
2091             http://itdoc.hitachi.co.jp/manuals/3020/30203p0360/PDEF0203.HTM
2092              
2093             HITAC Character code table (KEIS83)
2094             Document number 8080-2-30
2095             Document number 8080-2-074-10
2096             Document number 8080-2-100-10
2097             Document number 8080-2-109
2098              
2099             Linkexpress, FUJITSU LIMITED
2100             http://software.fujitsu.com/jp/manual/manualfiles/M080093/J2X15930/03Z200/index.html
2101             http://software.fujitsu.com/jp/manual/manualfiles/M080093/J2X15930/03Z200/unyo05/unyo0413.html
2102             http://software.fujitsu.com/jp/manual/manualfiles/m130010/b1fw5992/01z200/b5992-c-00-00.html
2103              
2104             JEF code book, Culti Co.,Ltd.
2105             http://www.culti.co.jp/2016/02/01/jef%e3%82%b3%e3%83%bc%e3%83%89%e3%83%96%e3%83%83%e3%82%af/
2106              
2107             Linkexpress operation manual J2X1-5930-03Z2(00) FUJITSU LIMITED
2108             http://software.fujitsu.com/jp/manual/manualfiles/M080093/J2X15930/03Z200/index.html
2109             http://software.fujitsu.com/jp/manual/manualfiles/M070086/J2X15930/01Z200/unyo05/unyo0416.html
2110             http://software.fujitsu.com/jp/manual/manualfiles/M070086/J2X15930/01Z200/unyo05/unyo0420.html
2111             http://software.fujitsu.com/jp/manual/manualfiles/M070086/J2X15930/01Z200/unyo05/unyo0421.html
2112             http://software.fujitsu.com/jp/manual/manualfiles/m120010/b1fw5691/05z200/index.html
2113             http://software.fujitsu.com/jp/manual/manualfiles/m120010/b1fw5691/05z200/b5691-g-00-00.html
2114             https://software.fujitsu.com/jp/manual/manualfiles/m200002/b1wd0741/14z200/b0741-c-01-00.html
2115             https://software.fujitsu.com/jp/manual/manualfiles/m200002/b1wd0741/14z200/b0741-c-07-00.html
2116             https://software.fujitsu.com/jp/manual/manualfiles/m200002/b1wd0741/14z200/b0741-c-08-00.html
2117             https://software.fujitsu.com/jp/manual/manualfiles/m200002/b1wd0741/14z200/b0741-c-09-00.html
2118              
2119             hidekatsu-izuno/jef4j
2120             https://github.com/hidekatsu-izuno/jef4j
2121              
2122             JHTc(JHT command edition)
2123             http://www.vector.co.jp/soft/winnt/util/se094205.html
2124              
2125             FACOM JEF Character code index dictionary
2126             Manual code 99FR-0012-3
2127             Manual code 99FR-8010-1
2128              
2129             JIPS code book, Culti Co.,Ltd.
2130             http://www.culti.co.jp/2016/02/01/jips%e3%82%b3%e3%83%bc%e3%83%89%e3%83%96%e3%83%83%e3%82%af/
2131              
2132             NEC Corporation Standard character set dictionary
2133             ZBB10-3
2134              
2135             NEC Corporation Standard character set dictionary
2136             ZBB11-2
2137              
2138             ClearPath Enterprise Servers MultiLingual System Administration, Operations, and Programming Guide ClearPath MCP 15.0 April 2013 8600 0288-308
2139             https://public.support.unisys.com/aseries/docs/ClearPath-MCP-16.0/PDF/86000288-308.pdf
2140              
2141             Heterogeneous database cooperation among heterogeneous OS environments
2142             http://www.unisys.co.jp/tec_info/tr56/5605.htm
2143              
2144             UNISYS_SJIS KANJI CONVERT(DOS ver)
2145             https://www.vector.co.jp/soft/dos/util/se238607.html
2146              
2147             ANSI X3.4-1968 (US-ASCII) with 0x60/0x27 as left/right single quotation mark to Unicode
2148             http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/US-ASCII-QUOTES.TXT
2149              
2150             JIS X 0201 (1976) to Unicode 1.1 Table
2151             http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0201.TXT
2152              
2153             JIS X 0208 (1990) to Unicode
2154             http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT
2155              
2156             JIS X 0212 (1990) to Unicode
2157             http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0212.TXT
2158              
2159             cp932 to Unicode table
2160             ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
2161             https://support.microsoft.com/ja-jp/help/170559/prb-conversion-problem-between-shift-jis-and-unicode
2162              
2163             Shift_JIS-2004 to Unicode table
2164             http://x0213.org/codetable/sjis-0213-2004-std.txt
2165              
2166             UTF-8, a transformation format of ISO 10646
2167             https://www.rfc-editor.org/rfc/rfc3629.txt
2168              
2169             iDIVO Ver.1.4.0
2170             https://www.hulft.com/shukka/files/iDIVO/SP-DV1-CC-02-01.pdf
2171              
2172             Kanji shift code
2173             https://ja.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97%E3%82%B7%E3%83%95%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89
2174              
2175             U+32FF SQUARE ERA NAME REIWA
2176             https://unicode.org/versions/Unicode12.1.0/
2177             http://en.glyphwiki.org/wiki/u32ff
2178             https://www.ibm.com/support/pages/zos%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E6%96%B0%E5%85%83%E5%8F%B7%E5%AF%BE%E5%BF%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
2179             http://www.hitachi-support.com/alert/ss/HWS17-007/list.pdf#page=29
2180              
2181             CJKV Information Processing
2182             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/78-vs-83-1.sjs
2183             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/78-vs-83-2.sjs
2184             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/78-vs-83-3.sjs
2185             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/78-vs-83-4.sjs
2186             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/83-vs-90-1.sjs
2187             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/83-vs-90-2.sjs
2188             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/TJ2.sjs
2189             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/TJ3.sjs
2190             https://resources.oreilly.com/examples/9781565922242/tree/master/AppQ/TJ4.sjs
2191              
2192             Very old fj.kanji discussion
2193             http://www.ie.u-ryukyu.ac.jp/~kono/fj/fj.kanji/index.html
2194              
2195             jcode.pl: Perl library for Japanese character code conversion, Kazumasa Utashiro
2196             ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/
2197             http://web.archive.org/web/20090608090304/http://srekcah.org/jcode/
2198             ftp://ftp.oreilly.co.jp/pcjp98/utashiro/
2199             http://mail.pm.org/pipermail/tokyo-pm/2002-March/001319.html
2200             https://twitter.com/uta46/status/11578906320
2201              
2202             jacode - Perl program for Japanese character code conversion
2203             https://metacpan.org/search?q=jacode.pl
2204              
2205             Jacode4e - Converts Character Encodings for Enterprise in Japan
2206             https://metacpan.org/pod/Jacode4e
2207              
2208             Jacode4e::RoundTrip - Converts JIS X 0213 Encodings with Round-Trip
2209             https://metacpan.org/pod/Jacode4e::RoundTrip
2210              
2211             Modern::Open - Autovivification, Autodie, and 3-args open support
2212             https://metacpan.org/pod/Modern::Open
2213              
2214             BackPAN
2215             http://backpan.perl.org/authors/id/I/IN/INA/
2216              
2217             =head1 ACKNOWLEDGEMENTS
2218              
2219             Thank on good luck and all stakeholders, we could make this software.
2220              
2221             We received character code table of KEIS, JEF, and JIPS by electronic data from Culti Co.,Ltd.-san.
2222             Moreover, they allowed that we make open source software using it.
2223              
2224             Thank you, Culti Co.,Ltd-san.!
2225              
2226             =head1 HELLO WORLD
2227              
2228             To support JIS X 0213:2004,
2229            
2230             Using ghost character 1-55-27(it's me!),
2231            
2232             Found by JIS X 0208:1997,
2233            
2234             Was born in JIS C 6226-1978.
2235            
2236             Hello world,
2237            
2238             What do we hack, today?
2239            
2240             -- 1-55-27, 2018-01-27
2241              
2242             =cut
2243              
2244             1;
2245              
2246             __DATA__