summaryrefslogtreecommitdiffstats
path: root/third_party/cld
diff options
context:
space:
mode:
authorhajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-30 17:09:08 +0000
committerhajimehoshi@chromium.org <hajimehoshi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-30 17:09:08 +0000
commitaa98feccb04b93240872012464f8f3270d2fb641 (patch)
tree7383f9f970c0ae27200970216e111b90daba7cc6 /third_party/cld
parent1e6e8954ae27faedff3115ae9775fe28a61ebae2 (diff)
downloadchromium_src-aa98feccb04b93240872012464f8f3270d2fb641.zip
chromium_src-aa98feccb04b93240872012464f8f3270d2fb641.tar.gz
chromium_src-aa98feccb04b93240872012464f8f3270d2fb641.tar.bz2
When a text in the website includes many repetitions, CheapSqueezeInplace is called to compress the text and make it more effective to detect the language. This function included a bug to produce an invalid UTF-8 byte sequence. It affected that the produced bytes was passed to other functions, and sometimes buffer overflow happened. This patch fixes this problem not to produce such these bytes.
This way is suggested by dsites@, a CLD developer. Note: The input of CheapSqueezeInplace should end with 4 characters, which consists of 3 space characters and the NUL, so the boundary error would not happen. BUG=176719 TEST=Unit Test with ASAN Review URL: https://chromiumcodereview.appspot.com/12525006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191513 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/cld')
-rw-r--r--third_party/cld/encodings/compact_lang_det/compact_lang_det_impl.cc6
-rw-r--r--third_party/cld/encodings/compact_lang_det/compact_lang_det_unittest_small.cc369
2 files changed, 344 insertions, 31 deletions
diff --git a/third_party/cld/encodings/compact_lang_det/compact_lang_det_impl.cc b/third_party/cld/encodings/compact_lang_det/compact_lang_det_impl.cc
index f4dd3c7..c8a4a6b 100644
--- a/third_party/cld/encodings/compact_lang_det/compact_lang_det_impl.cc
+++ b/third_party/cld/encodings/compact_lang_det/compact_lang_det_impl.cc
@@ -987,6 +987,12 @@ int CompactLangDetImpl::CheapSqueezeInplace(char* isrc,
while (src < srclimit) {
int remaining_bytes = srclimit - src;
int len = cld::minint(chunksize, remaining_bytes);
+ // Make len land us on a UTF-8 character boundary, and also fix
+ // mispredictions because we could get out of phase.
+ // Loop always terminates at trailing space in buffer.
+ while ((src[len] & 0xc0) == 0x80)
+ ++len; // Move past continuation bytes
+
int space_n = CountSpaces4(src, len);
int predb_n = CountPredictedBytes(src, len, &hash, predict_tbl);
if ((space_n >= space_thresh) || (predb_n >= predict_thresh)) {
diff --git a/third_party/cld/encodings/compact_lang_det/compact_lang_det_unittest_small.cc b/third_party/cld/encodings/compact_lang_det/compact_lang_det_unittest_small.cc
index 5b4a259..f7330c3 100644
--- a/third_party/cld/encodings/compact_lang_det/compact_lang_det_unittest_small.cc
+++ b/third_party/cld/encodings/compact_lang_det/compact_lang_det_unittest_small.cc
@@ -40,33 +40,341 @@ const char* kTeststr_en =
// UTF8 constants. Use a UTF-8 aware editor for this file
const char* kTeststr_ks =
- "नेपाल एसिया "
- "मंज अख मुलुक"
- " राजधानी काठ"
- "माडौं नेपाल "
- "अधिराज्य पेर"
- "ेग्वाय "
- "दक्षिण अमेरि"
- "का महाद्वीपे"
- " मध् यक्षेत्"
- "रे एक देश अस"
- "् ति फणीश्वर"
- " नाथ रेणु "
- "फिजी छु दक्ष"
- "िण प्रशान् त"
- " महासागर मंज"
- " अख देश बहाम"
- "ास छु केरेबि"
- "यन मंज "
- "अख मुलुख राज"
- "धानी नसौ सम्"
- " बद्घ विषय ब"
- "ुरुंडी अफ्री"
- "का महाद्वीपे"
- " मध् "
- "यक्षेत्रे दे"
- "श अस् ति सम्"
- " बद्घ विषय";
+ "\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb2 \xe0\xa4\x8f"
+ "\xe0\xa4\xb8\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xbe \xe0\xa4\xae\xe0\xa4\x82"
+ "\xe0\xa4\x9c \xe0\xa4\x85\xe0\xa4\x96 \xe0\xa4\xae\xe0\xa5\x81\xe0\xa4\xb2"
+ "\xe0\xa5\x81\xe0\xa4\x95 \xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\x9c\xe0\xa4\xa7"
+ "\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x80 \xe0\xa4\x95\xe0\xa4\xbe\xe0\xa4\xa0"
+ "\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xa1\xe0\xa5\x8c\xe0\xa4\x82 \xe0\xa4\xa8"
+ "\xe0\xa5\x87\xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb2 \xe0\xa4\x85\xe0\xa4\xa7"
+ "\xe0\xa4\xbf\xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\x9c\xe0\xa5\x8d\xe0\xa4\xaf "
+ "\xe0\xa4\xaa\xe0\xa5\x87\xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\x97\xe0\xa5\x8d"
+ "\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\xaf \xe0\xa4\xa6\xe0\xa4\x95\xe0\xa5\x8d"
+ "\xe0\xa4\xb7\xe0\xa4\xbf\xe0\xa4\xa3 \xe0\xa4\x85\xe0\xa4\xae\xe0\xa5\x87"
+ "\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95\xe0\xa4\xbe \xe0\xa4\xae\xe0\xa4\xb9"
+ "\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa5\x8d\xe0\xa4\xb5\xe0\xa5\x80\xe0\xa4\xaa"
+ "\xe0\xa5\x87 \xe0\xa4\xae\xe0\xa4\xa7\xe0\xa5\x8d \xe0\xa4\xaf\xe0\xa4\x95"
+ "\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa5\x87\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xb0"
+ "\xe0\xa5\x87 \xe0\xa4\x8f\xe0\xa4\x95 \xe0\xa4\xa6\xe0\xa5\x87\xe0\xa4\xb6 "
+ "\xe0\xa4\x85\xe0\xa4\xb8\xe0\xa5\x8d \xe0\xa4\xa4\xe0\xa4\xbf \xe0\xa4\xab"
+ "\xe0\xa4\xa3\xe0\xa5\x80\xe0\xa4\xb6\xe0\xa5\x8d\xe0\xa4\xb5\xe0\xa4\xb0 "
+ "\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\xa5 \xe0\xa4\xb0\xe0\xa5\x87\xe0\xa4\xa3"
+ "\xe0\xa5\x81 \xe0\xa4\xab\xe0\xa4\xbf\xe0\xa4\x9c\xe0\xa5\x80 \xe0\xa4\x9b"
+ "\xe0\xa5\x81 \xe0\xa4\xa6\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xbf"
+ "\xe0\xa4\xa3 \xe0\xa4\xaa\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa4\xb6\xe0\xa4\xbe"
+ "\xe0\xa4\xa8\xe0\xa5\x8d \xe0\xa4\xa4 \xe0\xa4\xae\xe0\xa4\xb9\xe0\xa4\xbe"
+ "\xe0\xa4\xb8\xe0\xa4\xbe\xe0\xa4\x97\xe0\xa4\xb0 \xe0\xa4\xae\xe0\xa4\x82"
+ "\xe0\xa4\x9c \xe0\xa4\x85\xe0\xa4\x96 \xe0\xa4\xa6\xe0\xa5\x87\xe0\xa4\xb6 "
+ "\xe0\xa4\xac\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\xae\xe0\xa4\xbe\xe0\xa4\xb8 "
+ "\xe0\xa4\x9b\xe0\xa5\x81 \xe0\xa4\x95\xe0\xa5\x87\xe0\xa4\xb0\xe0\xa5\x87"
+ "\xe0\xa4\xac\xe0\xa4\xbf\xe0\xa4\xaf\xe0\xa4\xa8 \xe0\xa4\xae\xe0\xa4\x82"
+ "\xe0\xa4\x9c \xe0\xa4\x85\xe0\xa4\x96 \xe0\xa4\xae\xe0\xa5\x81\xe0\xa4\xb2"
+ "\xe0\xa5\x81\xe0\xa4\x96 \xe0\xa4\xb0\xe0\xa4\xbe\xe0\xa4\x9c\xe0\xa4\xa7"
+ "\xe0\xa4\xbe\xe0\xa4\xa8\xe0\xa5\x80 \xe0\xa4\xa8\xe0\xa4\xb8\xe0\xa5\x8c "
+ "\xe0\xa4\xb8\xe0\xa4\xae\xe0\xa5\x8d \xe0\xa4\xac\xe0\xa4\xa6\xe0\xa5\x8d"
+ "\xe0\xa4\x98 \xe0\xa4\xb5\xe0\xa4\xbf\xe0\xa4\xb7\xe0\xa4\xaf \xe0\xa4\xac"
+ "\xe0\xa5\x81\xe0\xa4\xb0\xe0\xa5\x81\xe0\xa4\x82\xe0\xa4\xa1\xe0\xa5\x80 "
+ "\xe0\xa4\x85\xe0\xa4\xab\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x80\xe0\xa4\x95"
+ "\xe0\xa4\xbe \xe0\xa4\xae\xe0\xa4\xb9\xe0\xa4\xbe\xe0\xa4\xa6\xe0\xa5\x8d"
+ "\xe0\xa4\xb5\xe0\xa5\x80\xe0\xa4\xaa\xe0\xa5\x87 \xe0\xa4\xae\xe0\xa4\xa7"
+ "\xe0\xa5\x8d \xe0\xa4\xaf\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa5\x87"
+ "\xe0\xa4\xa4\xe0\xa5\x8d\xe0\xa4\xb0\xe0\xa5\x87 \xe0\xa4\xa6\xe0\xa5\x87"
+ "\xe0\xa4\xb6 \xe0\xa4\x85\xe0\xa4\xb8\xe0\xa5\x8d \xe0\xa4\xa4\xe0\xa4\xbf "
+ "\xe0\xa4\xb8\xe0\xa4\xae\xe0\xa5\x8d \xe0\xa4\xac\xe0\xa4\xa6\xe0\xa5\x8d"
+ "\xe0\xa4\x98 \xe0\xa4\xb5\xe0\xa4\xbf\xe0\xa4\xb7\xe0\xa4\xaf";
+
+// Test strings. This will be squeezed because of the repetitions.
+const char* kTeststr_kr_repetitions =
+ "<meta charset=\"utf-8\" />\n\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d"
+ "\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93"
+ "\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96"
+ "\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1"
+ "\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f"
+ "\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad"
+ "\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96"
+ "\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9"
+ "\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6"
+ "\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8"
+ "\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82"
+ "\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99"
+ "\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb\xea\xac"
+ "\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b"
+ "\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8"
+ "\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9\x97\xbb"
+ "\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3\xb3\xea"
+ "\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b\x83\xe5"
+ "\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97\x90\xe9"
+ "\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a\xec\xb3"
+ "\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5\xe6\x8b"
+ "\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98\xe1\x97"
+ "\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6\xa8\x8a"
+ "\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec\xaa\xa5"
+ "\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec\x9b\x98"
+ "\xe1\x97\x90\xe9\x97\xbb\xea\xac\x83\xe8\x83\x96\xdf\xb1\xea\x9d\x99\xe6"
+ "\xa8\x8a\xec\xb3\xb3\xea\xa8\x9b\xe6\x82\x9c\xe9\xb9\x9f\xe9\x93\x80\xec"
+ "\xaa\xa5\xe6\x8b\x83\xe5\x9b\xa8\xe5\x99\xaa\xe6\xad\xad\xeb\x96\x84\xec"
+ "\x9b\x98\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaa";
+
// const char* kTeststr_ks =
// \u0928\u0947\u092A\u093E\u0932\u0020\u090F\u0938\u093F\u092F\u093E\u0020
@@ -98,8 +406,6 @@ const char* kTeststr_ks =
// \u0020\u092C\u0926\u094D\u0918\u0020\u0935\u093F\u0937\u092F
-
-
namespace {
class CompactLangDetTest : public testing::Test {
@@ -358,6 +664,9 @@ TEST_F(CompactLangDetTest, FullTests) {
//// EXPECT_EQ(ZULU, TestCompactLangDetPlain(kTeststr_zu_Latn));
// No TG_UNKNOWN_LANGUAGE
// No UNKNOWN_LANGUAGE
+
+ // This test should be executed with ASAN.
+ EXPECT_EQ(KOREAN, TestCompactLangDetPlain(kTeststr_kr_repetitions));
}
@@ -402,5 +711,3 @@ int main(int argc, char** argv) {
return RUN_ALL_TESTS();
}
#endif
-
-