From 2b73c5a31a97f720ed7f00c64d1dd4b29899eb5a Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:39:32 +0800 Subject: [PATCH 01/42] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index b8990933..9a4cea86 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,17 @@ Dependence * [warp_ctc_pytorch](https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding) * lmdb +error when install warp_ctc_pytorch +---------- +* [ 11%] Building NVCC (Device) object CMakeFiles/warpctc.dir/src/warpctc_generated_reduce.cu.o + sh: cicc: command not found + CMake Error at warpctc_generated_reduce.cu.o.cmake:279 (message): + Error generating file + /home/rice/warp-ctc/build/CMakeFiles/warpctc.dir/src/./warpctc_generated_reduce.cu.o + make[2]: *** [CMakeFiles/warpctc.dir/build.make:256: CMakeFiles/warpctc.dir/src/warpctc_generated_reduce.cu.o] Error 1 + make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/warpctc.dir/all] Error 2 + make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely +* THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files Train a new model ----------------- 1. Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. From 7714a9dab0a44913269eac8591d6393bd9ab4e66 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:40:16 +0800 Subject: [PATCH 02/42] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9a4cea86..b1b7b448 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ error when install warp_ctc_pytorch make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/warpctc.dir/all] Error 2 make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely * THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files + Train a new model ----------------- 1. Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. From fcfbc41c72cf21d21e12d074f8e08bea7feabbea Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Wed, 22 Aug 2018 17:43:33 +0800 Subject: [PATCH 03/42] update add --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index b1b7b448..450c2583 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,14 @@ error when install warp_ctc_pytorch make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/warpctc.dir/all] Error 2 make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely * THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files +* cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C +In file included from /home/rice/anaconda3/envs/myenv2.7/lib/python2.7/site-packages/torch/utils/ffi/../../lib/include/THC/THC.h:4:0, + from build/warpctc_pytorch/_warp_ctc/__warp_ctc.c:493: +/home/rice/anaconda3/envs/myenv2.7/lib/python2.7/site-packages/torch/utils/ffi/../../lib/include/THC/THCGeneral.h:12:10: fatal error: cuda.h: No such file or directory + #include "cuda.h" + ^~~~~~~~ +compilation terminated. +error: command 'gcc' failed with exit status 1 Train a new model ----------------- From 4e4ddcbaed42528baf8814fd3cafcff7fc9818fe Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 28 Aug 2018 11:48:03 +0800 Subject: [PATCH 04/42] Update README.md --- README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 450c2583..6507bda0 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,12 @@ Convolutional Recurrent Neural Network This software implements the Convolutional Recurrent Neural Network (CRNN) in pytorch. Origin software could be found in [crnn](https://github.com/bgshih/crnn) +Envrionment +-------- +python 3.6 +pytorch 4.0 + + Run demo -------- A demo program can be found in ``src/demo.py``. Before running the demo, download a pretrained model @@ -38,16 +44,9 @@ error when install warp_ctc_pytorch make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/warpctc.dir/all] Error 2 make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely * THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files -* cc1: warning: command line option ‘-std=c++11’ is valid for C++/ObjC++ but not for C -In file included from /home/rice/anaconda3/envs/myenv2.7/lib/python2.7/site-packages/torch/utils/ffi/../../lib/include/THC/THC.h:4:0, - from build/warpctc_pytorch/_warp_ctc/__warp_ctc.c:493: -/home/rice/anaconda3/envs/myenv2.7/lib/python2.7/site-packages/torch/utils/ffi/../../lib/include/THC/THCGeneral.h:12:10: fatal error: cuda.h: No such file or directory - #include "cuda.h" - ^~~~~~~~ -compilation terminated. -error: command 'gcc' failed with exit status 1 + Train a new model ----------------- -1. Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. +1. Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator 2. ``python crnn_main.py [--param val]``. Explore ``crnn_main.py`` for details. From 41fc98a32da5bd517082157766ff876ae99bbe78 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 28 Aug 2018 11:52:06 +0800 Subject: [PATCH 05/42] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6507bda0..1ff56bd1 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Put the downloaded model file ``crnn.pth`` into directory ``data/``. Then launch The demo reads an example image and recognizes its text content. Example image: -![Example Image](./data/demo.png) +![my_example_image](./data/demo.png) Expected output: loading pretrained model from ./data/crnn.pth From c3edbcbea0530e5c32246489be329f0a404b4690 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 28 Aug 2018 12:17:21 +0800 Subject: [PATCH 06/42] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ff56bd1..9904ccdf 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ error when install warp_ctc_pytorch make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/warpctc.dir/all] Error 2 make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely * THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files - +*https://github.com/Xtra-Computing/thundersvm/issues/54#issuecomment-416413155 Train a new model ----------------- From f8f9b0066453230f461503edc9d8fdf650b83db0 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 28 Aug 2018 12:17:39 +0800 Subject: [PATCH 07/42] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9904ccdf..426fac45 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ error when install warp_ctc_pytorch make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/warpctc.dir/all] Error 2 make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely * THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files -*https://github.com/Xtra-Computing/thundersvm/issues/54#issuecomment-416413155 +* https://github.com/Xtra-Computing/thundersvm/issues/54#issuecomment-416413155 Train a new model ----------------- From 0c271da0d2bd017a4176ec775caffb31a04b667f Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 11 Sep 2018 14:33:44 +0800 Subject: [PATCH 08/42] add code to convert image data to lmdb data --- getLmdb.py | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 getLmdb.py diff --git a/getLmdb.py b/getLmdb.py new file mode 100644 index 00000000..f59c90c7 --- /dev/null +++ b/getLmdb.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- +import os +import lmdb # install lmdb by "pip install lmdb" +import cv2 +import numpy as np +import glob + +def checkImageIsValid(imageBin): + if imageBin is None: + return False + imageBuf = np.fromstring(imageBin, dtype=np.uint8) + img = cv2.imdecode(imageBuf, cv2.IMREAD_GRAYSCALE) + if img is None: + return False + imgH, imgW = img.shape[0], img.shape[1] + if imgH * imgW == 0: + return False + return True + + +def writeCache(env, cache): + with env.begin(write=True) as txn: + for k, v in cache.iteritems(): + txn.put(k, v) + + +def createDataset(outputPath, imagePathList, labelList, lexiconList=None, checkValid=True): + """ + Create LMDB dataset for CRNN training. + ARGS: + outputPath : LMDB output path + imagePathList : list of image path + labelList : list of corresponding groundtruth texts + lexiconList : (optional) list of lexicon lists + checkValid : if true, check the validity of every image + """ + assert (len(imagePathList) == len(labelList)) + nSamples = len(imagePathList) + print('...................') + # map_size=1099511627776 定义最大空间是1TB + env = lmdb.open(outputPath, map_size=1099511627776) + + cache = {} + cnt = 1 + for i in range(nSamples): + imagePath = imagePathList[i] + label = labelList[i] + if not os.path.exists(imagePath): + print('%s does not exist' % imagePath) + continue + with open(imagePath, 'r') as f: + imageBin = f.read() + if checkValid: + if not checkImageIsValid(imageBin): + print('%s is not a valid image' % imagePath) + continue + + imageKey = 'image-%09d' % cnt + labelKey = 'label-%09d' % cnt + cache[imageKey] = imageBin + cache[labelKey] = label + ########## + if lexiconList: + lexiconKey = 'lexicon-%09d' % cnt + cache[lexiconKey] = ' '.join(lexiconList[i]) + if cnt % 1000 == 0: + writeCache(env, cache) + cache = {} + print('Written %d / %d' % (cnt, nSamples)) + cnt += 1 + nSamples = cnt - 1 + cache['num-samples'] = str(nSamples) + writeCache(env, cache) + print('Created dataset with %d samples' % nSamples) + + +def read_text(path): + with open(path) as f: + text = f.read() + text = text.strip() + + return text + + +if __name__ == '__main__': + + outputPath = '/run/media/rice/DATA/lmdb' + imgdata = open("/run/media/rice/DATA/labellist1.txt") + imagePathList = [] + imgLabelLists = [] + i = 0 + # # for filename in glob.glob(os.path.join('/run/media/rice/DATA/number/data/', '*.jpg')): + # # print filename + # # imagePathList.append(filename) + + # print len(imagePathList) + for line in list(imgdata): + print line + if i< 1251067: + label = line.split()[1] + image = line.split()[0] + imgLabelLists.append(label) + imagePathList.append('/run/media/rice/DATA/datasets2/' + image+".jpg") + else: + break + i += 1 + #imgLabelLists = sorted(imgLabelLists, key=lambda x: len(x[0])) + + print len(imagePathList) + print len(imgLabelLists) + createDataset(outputPath, imagePathList, imgLabelLists, lexiconList=None, checkValid=True) + + From 5a9204313c30d23582f1ff56b26de06dfa7379f0 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 11 Sep 2018 14:34:43 +0800 Subject: [PATCH 09/42] Update getLmdb.py --- getLmdb.py | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/getLmdb.py b/getLmdb.py index f59c90c7..7c2256f7 100644 --- a/getLmdb.py +++ b/getLmdb.py @@ -88,23 +88,11 @@ def read_text(path): imgdata = open("/run/media/rice/DATA/labellist1.txt") imagePathList = [] imgLabelLists = [] - i = 0 - # # for filename in glob.glob(os.path.join('/run/media/rice/DATA/number/data/', '*.jpg')): - # # print filename - # # imagePathList.append(filename) - - # print len(imagePathList) for line in list(imgdata): - print line - if i< 1251067: - label = line.split()[1] - image = line.split()[0] - imgLabelLists.append(label) - imagePathList.append('/run/media/rice/DATA/datasets2/' + image+".jpg") - else: - break - i += 1 - #imgLabelLists = sorted(imgLabelLists, key=lambda x: len(x[0])) + label = line.split()[1] + image = line.split()[0] + imgLabelLists.append(label) + imagePathList.append('/run/media/rice/DATA/datasets2/' + image+".jpg") print len(imagePathList) print len(imgLabelLists) From 6cc617ca06d1c3b52c99fc7ffbe02b6f32b31ebe Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 11 Sep 2018 14:36:08 +0800 Subject: [PATCH 10/42] Update datasets.py updata datasets.py to adapt to python3.x --- dataset.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dataset.py b/dataset.py index 2d11ade4..63f3ebfe 100644 --- a/dataset.py +++ b/dataset.py @@ -11,7 +11,7 @@ import sys from PIL import Image import numpy as np - +import io class lmdbDataset(Dataset): @@ -29,7 +29,7 @@ def __init__(self, root=None, transform=None, target_transform=None): sys.exit(0) with self.env.begin(write=False) as txn: - nSamples = int(txn.get('num-samples')) + nSamples = int(txn.get('num-samples'.encode())) self.nSamples = nSamples self.transform = transform @@ -43,13 +43,14 @@ def __getitem__(self, index): index += 1 with self.env.begin(write=False) as txn: img_key = 'image-%09d' % index - imgbuf = txn.get(img_key) + imgbuf = txn.get(img_key.encode()) buf = six.BytesIO() buf.write(imgbuf) buf.seek(0) + try: - img = Image.open(buf).convert('L') + img = Image.open(io.BytesIO(buf.read())).convert('L') except IOError: print('Corrupted image for %d' % index) return self[index + 1] @@ -58,7 +59,7 @@ def __getitem__(self, index): img = self.transform(img) label_key = 'label-%09d' % index - label = str(txn.get(label_key)) + label = str(txn.get(label_key.encode()).decode()) if self.target_transform is not None: label = self.target_transform(label) From b0426a33a29dba45e95530faad23e32e8be695ed Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 11 Sep 2018 14:38:26 +0800 Subject: [PATCH 11/42] Update utils.py update utils.py to adapt to python3.x --- utils.py | 54 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/utils.py b/utils.py index 31f04b29..1a96182c 100644 --- a/utils.py +++ b/utils.py @@ -5,14 +5,17 @@ import torch.nn as nn from torch.autograd import Variable import collections +import chardet +import numpy as np +import sys + + class strLabelConverter(object): """Convert between str and label. - NOTE: Insert `blank` to the alphabet for CTC. - Args: alphabet (str): set of the possible characters. ignore_case (bool, default=True): whether or not to ignore all of the case. @@ -21,7 +24,7 @@ class strLabelConverter(object): def __init__(self, alphabet, ignore_case=True): self._ignore_case = ignore_case if self._ignore_case: - alphabet = alphabet.lower() + alphabet = alphabet self.alphabet = alphabet + '-' # for `-1` index self.dict = {} @@ -29,44 +32,54 @@ def __init__(self, alphabet, ignore_case=True): # NOTE: 0 is reserved for 'blank' required by wrap_ctc self.dict[char] = i + 1 + def is_chinese(self, uchar): + """判断一个unicode是否是汉字""" + alnum = np.array([ch.isalnum() for ch in uchar]) + if not alnum.all(): + return True + else: + return False + def encode(self, text): """Support batch or single str. - Args: text (str or list of str): texts to convert. - Returns: torch.IntTensor [length_0 + length_1 + ... length_{n - 1}]: encoded texts. torch.IntTensor [n]: length of each text. """ - if isinstance(text, str): - text = [ - self.dict[char.lower() if self._ignore_case else char] - for char in text - ] - length = [len(text)] - elif isinstance(text, collections.Iterable): - length = [len(s) for s in text] - text = ''.join(text) - text, _ = self.encode(text) + length = [] + result = [] + #print(text) + for item in text: + #print(item) + + if self.is_chinese(item): + #item = unicode(item, 'utf-8') + item = str(item.encode('utf-8')) + #item = item + length.append(len(item)) + for char in item: + #print(char) + index = self.dict[char] + result.append(index) + text = result return (torch.IntTensor(text), torch.IntTensor(length)) def decode(self, t, length, raw=False): """Decode encoded texts back into strs. - Args: torch.IntTensor [length_0 + length_1 + ... length_{n - 1}]: encoded texts. torch.IntTensor [n]: length of each text. - Raises: AssertionError: when the texts and its length does not match. - Returns: text (str or list of str): texts to convert. """ if length.numel() == 1: length = length[0] - assert t.numel() == length, "text with length: {} does not match declared length: {}".format(t.numel(), length) + assert t.numel() == length, "text with length: {} does not match declared length: {}".format(t.numel(), + length) if raw: return ''.join([self.alphabet[i - 1] for i in t]) else: @@ -77,7 +90,8 @@ def decode(self, t, length, raw=False): return ''.join(char_list) else: # batch mode - assert t.numel() == length.sum(), "texts with length: {} does not match declared length: {}".format(t.numel(), length.sum()) + assert t.numel() == length.sum(), "texts with length: {} does not match declared length: {}".format( + t.numel(), length.sum()) texts = [] index = 0 for i in range(length.numel()): From 49fae2d2b10d96b00b4e634d12b74da526ca10ce Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 11 Sep 2018 14:39:47 +0800 Subject: [PATCH 12/42] Update crnn_main.py --- crnn_main.py | 109 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 40 deletions(-) diff --git a/crnn_main.py b/crnn_main.py index 876ffb6a..1821099b 100644 --- a/crnn_main.py +++ b/crnn_main.py @@ -1,3 +1,4 @@ +#coding:UTF-8 from __future__ import print_function import argparse import random @@ -11,33 +12,39 @@ import os import utils import dataset - import models.crnn as crnn - +from binascii import hexlify +from codecs import encode +import ast + +#alphabet = u'\'疗绚诚娇溜题贿者廖更纳加奉公一就汴计与路房原妇208-7其>:],,骑刈全消昏傈安久钟嗅不影处驽蜿资关椤地瘸专问忖票嫉炎韵要月田节陂鄙捌备拳伺眼网盎大傍心东愉汇蹿科每业里航晏字平录先13彤鲶产稍督腴有象岳注绍在泺文定核名水过理让偷率等这发”为含肥酉相鄱七编猥锛日镀蒂掰倒辆栾栗综涩州雌滑馀了机块司宰甙兴矽抚保用沧秩如收息滥页疑埠!!姥异橹钇向下跄的椴沫国绥獠报开民蜇何分凇长讥藏掏施羽中讲派嘟人提浼间世而古多倪唇饯控庚首赛蜓味断制觉技替艰溢潮夕钺外摘枋动双单啮户枇确锦曜杜或能效霜盒然侗电晁放步鹃新杖蜂吒濂瞬评总隍对独合也是府青天诲墙组滴级邀帘示已时骸仄泅和遨店雇疫持巍踮境只亨目鉴崤闲体泄杂作般轰化解迂诿蛭璀腾告版服省师小规程线海办引二桧牌砺洄裴修图痫胡许犊事郛基柴呼食研奶律蛋因葆察戏褒戒再李骁工貂油鹅章啄休场给睡纷豆器捎说敏学会浒设诊格廓查来霓室溆¢诡寥焕舜柒狐回戟砾厄实翩尿五入径惭喹股宇篝|;美期云九祺扮靠锝槌系企酰阊暂蚕忻豁本羹执条钦H獒限进季楦于芘玖铋茯未答粘括样精欠矢甥帷嵩扣令仔风皈行支部蓉刮站蜡救钊汗松嫌成可.鹤院从交政怕活调球局验髌第韫谗串到圆年米/*友忿检区看自敢刃个兹弄流留同没齿星聆轼湖什三建蛔儿椋汕震颧鲤跟力情璺铨陪务指族训滦鄣濮扒商箱十召慷辗所莞管护臭横硒嗓接侦六露党馋驾剖高侬妪幂猗绺骐央酐孝筝课徇缰门男西项句谙瞒秃篇教碲罚声呐景前富嘴鳌稀免朋啬睐去赈鱼住肩愕速旁波厅健茼厥鲟谅投攸炔数方击呋谈绩别愫僚躬鹧胪炳招喇膨泵蹦毛结54谱识陕粽婚拟构且搜任潘比郢妨醪陀桔碘扎选哈骷楷亿明缆脯监睫逻婵共赴淝凡惦及达揖谩澹减焰蛹番祁柏员禄怡峤龙白叽生闯起细装谕竟聚钙上导渊按艾辘挡耒盹饪臀记邮蕙受各医搂普滇朗茸带翻酚(光堤墟蔷万幻〓瑙辈昧盏亘蛀吉铰请子假闻税井诩哨嫂好面琐校馊鬣缂营访炖占农缀否经钚棵趟张亟吏茶谨捻论迸堂玉信吧瞠乡姬寺咬溏苄皿意赉宝尔钰艺特唳踉都荣倚登荐丧奇涵批炭近符傩感道着菊虹仲众懈濯颞眺南释北缝标既茗整撼迤贲挎耱拒某妍卫哇英矶藩治他元领膜遮穗蛾飞荒棺劫么市火温拈棚洼转果奕卸迪伸泳斗邡侄涨屯萋胭氡崮枞惧冒彩斜手豚随旭淑妞形菌吲沱争驯歹挟兆柱传至包内响临红功弩衡寂禁老棍耆渍织害氵渑布载靥嗬虽苹咨娄库雉榜帜嘲套瑚亲簸欧边6腿旮抛吹瞳得镓梗厨继漾愣憨士策窑抑躯襟脏参贸言干绸鳄穷藜音折详)举悍甸癌黎谴死罩迁寒驷袖媒蒋掘模纠恣观祖蛆碍位稿主澧跌筏京锏帝贴证糠才黄鲸略炯饱四出园犀牧容汉杆浈汰瑷造虫瘩怪驴济应花沣谔夙旅价矿以考su呦晒巡茅准肟瓴詹仟褂译桌混宁怦郑抿些余鄂饴攒珑群阖岔琨藓预环洮岌宀杲瀵最常囡周踊女鼓袭喉简范薯遐疏粱黜禧法箔斤遥汝奥直贞撑置绱集她馅逗钧橱魉[恙躁唤9旺膘待脾惫购吗依盲度瘿蠖俾之镗拇鲵厝簧续款展啃表剔品钻腭损清锶统涌寸滨贪链吠冈伎迥咏吁览防迅失汾阔逵绀蔑列川凭努熨揪利俱绉抢鸨我即责膦易毓鹊刹玷岿空嘞绊排术估锷违们苟铜播肘件烫审鲂广像铌惰铟巳胍鲍康憧色恢想拷尤疳知SYFDA峄裕帮握搔氐氘难墒沮雨叁缥悴藐湫娟苑稠颛簇后阕闭蕤缚怎佞码嘤蔡痊舱螯帕赫昵升烬岫、疵蜻髁蕨隶烛械丑盂梁强鲛由拘揉劭龟撤钩呕孛费妻漂求阑崖秤甘通深补赃坎床啪承吼量暇钼烨阂擎脱逮称P神属矗华届狍葑汹育患窒蛰佼静槎运鳗庆逝曼疱克代官此麸耧蚌晟例础榛副测唰缢迹灬霁身岁赭扛又菡乜雾板读陷徉贯郁虑变钓菜圾现琢式乐维渔浜左吾脑钡警T啵拴偌漱湿硕止骼魄积燥联踢玛|则窿见振畿送班钽您赵刨印讨踝籍谡舌崧汽蔽沪酥绒怖财帖肱私莎勋羔霸励哼帐将帅渠纪婴娩岭厘滕吻伤坝冠戊隆瘁介涧物黍并姗奢蹑掣垸锴命箍捉病辖琰眭迩艘绌繁寅若毋思诉类诈燮轲酮狂重反职筱县委磕绣奖晋濉志徽肠呈獐坻口片碰几村柿劳料获亩惕晕厌号罢池正鏖煨家棕复尝懋蜥锅岛扰队坠瘾钬@卧疣镇譬冰彷频黯据垄采八缪瘫型熹砰楠襁箐但嘶绳啤拍盥穆傲洗盯塘怔筛丿台恒喂葛永¥烟酒桦书砂蚝缉态瀚袄圳轻蛛超榧遛姒奘铮右荽望偻卡丶氰附做革索戚坨桷唁垅榻岐偎坛莨山殊微骇陈爨推嗝驹澡藁呤卤嘻糅逛侵郓酌德摇※鬃被慨殡羸昌泡戛鞋河宪沿玲鲨翅哽源铅语照邯址荃佬顺鸳町霭睾瓢夸椁晓酿痈咔侏券噎湍签嚷离午尚社锤背孟使浪缦潍鞅军姹驶笑鳟鲁》孽钜绿洱礴焯椰颖囔乌孔巴互性椽哞聘昨早暮胶炀隧低彗昝铁呓氽藉喔癖瑗姨权胱韦堑蜜酋楝砝毁靓歙锲究屋喳骨辨碑武鸠宫辜烊适坡殃培佩供走蜈迟翼况姣凛浔吃飘债犟金促苛崇坂莳畔绂兵蠕斋根砍亢欢恬崔剁餐榫快扶‖濒缠鳜当彭驭浦篮昀锆秸钳弋娣瞑夷龛苫拱致%嵊障隐弑初娓抉汩累蓖"唬助苓昙押毙破城郧逢嚏獭瞻溱婿赊跨恼璧萃姻貉灵炉密氛陶砸谬衔点琛沛枳层岱诺脍榈埂征冷裁打蹴素瘘逞蛐聊激腱萘踵飒蓟吆取咙簋涓矩曝挺揣座你史舵焱尘苏笈脚溉榨诵樊邓焊义庶儋蟋蒲赦呷杞诠豪还试颓茉太除紫逃痴草充鳕珉祗墨渭烩蘸慕璇镶穴嵘恶骂险绋幕碉肺戳刘潞秣纾潜銮洛须罘销瘪汞兮屉r林厕质探划狸殚善煊烹〒锈逯宸辍泱柚袍远蹋嶙绝峥娥缍雀徵认镱谷=贩勉撩鄯斐洋非祚泾诒饿撬威晷搭芍锥笺蓦候琊档礁沼卵荠忑朝凹瑞头仪弧孵畏铆突衲车浩气茂悖厢枕酝戴湾邹飚攘锂写宵翁岷无喜丈挑嗟绛殉议槽具醇淞笃郴阅饼底壕砚弈询缕庹翟零筷暨舟闺甯撞麂茌蔼很珲捕棠角阉媛娲诽剿尉爵睬韩诰匣危糍镯立浏阳少盆舔擘匪申尬铣旯抖赘瓯居ˇ哮游锭茏歌坏甚秒舞沙仗劲潺阿燧郭嗖霏忠材奂耐跺砀输岖媳氟极摆灿今扔腻枝奎药熄吨话q额慑嘌协喀壳埭视著於愧陲翌峁颅佛腹聋侯咎叟秀颇存较罪哄岗扫栏钾羌己璨枭霉煌涸衿键镝益岢奏连夯睿冥均糖狞蹊稻爸刿胥煜丽肿璃掸跚灾垂樾濑乎莲窄犹撮战馄软络显鸢胸宾妲恕埔蝌份遇巧瞟粒恰剥桡博讯凯堇阶滤卖斌骚彬兑磺樱舷两娱福仃差找桁÷净把阴污戬雷碓蕲楚罡焖抽妫咒仑闱尽邑菁爱贷沥鞑牡嗉崴骤塌嗦订拮滓捡锻次坪杩臃箬融珂鹗宗枚降鸬妯阄堰盐毅必杨崃俺甬状莘货耸菱腼铸唏痤孚澳懒溅翘疙杷淼缙骰喊悉砻坷艇赁界谤纣宴晃茹归饭梢铡街抄肼鬟苯颂撷戈炒咆茭瘙负仰客琉铢封卑珥椿镧窨鬲寿御袤铃萎砖餮脒裳肪孕嫣馗嵇恳氯江石褶冢祸阻狈羞银靳透咳叼敷芷啥它瓤兰痘懊逑肌往捺坊甩呻〃沦忘膻祟菅剧崆智坯臧霍墅攻眯倘拢骠铐庭岙瓠′缺泥迢捶??郏喙掷沌纯秘种听绘固螨团香盗妒埚蓝拖旱荞铀血遏汲辰叩拽幅硬惶桀漠措泼唑齐肾念酱虚屁耶旗砦闵婉馆拭绅韧忏窝醋葺顾辞倜堆辋逆玟贱疾董惘倌锕淘嘀莽俭笏绑鲷杈择蟀粥嗯驰逾案谪褓胫哩昕颚鲢绠躺鹄崂儒俨丝尕泌啊萸彰幺吟骄苣弦脊瑰〈诛镁析闪剪侧哟框螃守嬗燕狭铈缮概迳痧鲲俯售笼痣扉挖满咋援邱扇歪便玑绦峡蛇叨〖泽胃斓喋怂坟猪该蚬炕弥赞棣晔娠挲狡创疖铕镭稷挫弭啾翔粉履苘哦楼秕铂土锣瘟挣栉习享桢袅磨桂谦延坚蔚噗署谟猬钎恐嬉雒倦衅亏璩睹刻殿王算雕麻丘柯骆丸塍谚添鲈垓桎蚯芥予飕镦谌窗醚菀亮搪莺蒿羁足J真轶悬衷靛翊掩哒炅掐冼妮l谐稚荆擒犯陵虏浓崽刍陌傻孜千靖演矜钕煽杰酗渗伞栋俗泫戍罕沾疽灏煦芬磴叱阱榉湃蜀叉醒彪租郡篷屎良垢隗弱陨峪砷掴颁胎雯绵贬沐撵隘篙暖曹陡栓填臼彦瓶琪潼哪鸡摩啦俟锋域耻蔫疯纹撇毒绶痛酯忍爪赳歆嘹辕烈册朴钱吮毯癜娃谀邵厮炽璞邃丐追词瓒忆轧芫谯喷弟半冕裙掖墉绮寝苔势顷褥切衮君佳嫒蚩霞佚洙逊镖暹唛&殒顶碗獗轭铺蛊废恹汨崩珍那杵曲纺夏薰傀闳淬姘舀拧卷楂恍讪厩寮篪赓乘灭盅鞣沟慎挂饺鼾杳树缨丛絮娌臻嗳篡侩述衰矛圈蚜匕筹匿濞晨叶骋郝挚蚴滞增侍描瓣吖嫦蟒匾圣赌毡癞恺百曳需篓肮庖帏卿驿遗蹬鬓骡歉芎胳屐禽烦晌寄媾狄翡苒船廉终痞殇々畦饶改拆悻萄£瓿乃訾桅匮溧拥纱铍骗蕃龋缬父佐疚栎醍掳蓄x惆颜鲆榆〔猎敌暴谥鲫贾罗玻缄扦芪癣落徒臾恿猩托邴肄牵春陛耀刊拓蓓邳堕寇枉淌啡湄兽酷萼碚濠萤夹旬戮梭琥椭昔勺蜊绐晚孺僵宣摄冽旨萌忙蚤眉噼蟑付契瓜悼颡壁曾窕颢澎仿俑浑嵌浣乍碌褪乱蔟隙玩剐葫箫纲围伐决伙漩瑟刑肓镳缓蹭氨皓典畲坍铑檐塑洞倬储胴淳戾吐灼惺妙毕珐缈虱盖羰鸿磅谓髅娴苴唷蚣霹抨贤唠犬誓逍庠逼麓籼釉呜碧秧氩摔霄穸纨辟妈映完牛缴嗷炊恩荔茆掉紊慌莓羟阙萁磐另蕹辱鳐湮吡吩唐睦垠舒圜冗瞿溺芾囱匠僳汐菩饬漓黑霰浸濡窥毂蒡兢驻鹉芮诙迫雳厂忐臆猴鸣蚪栈箕羡渐莆捍眈哓趴蹼埕嚣骛宏淄斑噜严瑛垃椎诱压庾绞焘廿抡迄棘夫纬锹眨瞌侠脐竞瀑孳骧遁姜颦荪滚萦伪逸粳爬锁矣役趣洒颔诏逐奸甭惠攀蹄泛尼拼阮鹰亚颈惑勒〉际肛爷刚钨丰养冶鲽辉蔻画覆皴妊麦返醉皂擀〗酶凑粹悟诀硖港卜z杀涕±舍铠抵弛段敝镐奠拂轴跛袱et沉菇俎薪峦秭蟹历盟菠寡液肢喻染裱悱抱氙赤捅猛跑氮谣仁尺辊窍烙衍架擦倏璐瑁币楞胖夔趸邛惴饕虔蝎§哉贝宽辫炮扩饲籽魏菟锰伍猝末琳哚蛎邂呀姿鄞却歧仙恸椐森牒寤袒婆虢雅钉朵贼欲苞寰故龚坭嘘咫礼硷兀睢汶’铲烧绕诃浃钿哺柜讼颊璁腔洽咐脲簌筠镣玮鞠谁兼姆挥梯蝴谘漕刷躏宦弼b垌劈麟莉揭笙渎仕嗤仓配怏抬错泯镊孰猿邪仍秋鼬壹歇吵炼<尧射柬廷胧霾凳隋肚浮梦祥株堵退L鹫跎凶毽荟炫栩玳甜沂鹿顽伯爹赔蛴徐匡欣狰缸雹蟆疤默沤啜痂衣禅wih辽葳黝钗停沽棒馨颌肉吴硫悯劾娈马啧吊悌镑峭帆瀣涉咸疸滋泣翦拙癸钥蜒+尾庄凝泉婢渴谊乞陆锉糊鸦淮IBN晦弗乔庥葡尻席橡傣渣拿惩麋斛缃矮蛏岘鸽姐膏催奔镒喱蠡摧钯胤柠拐璋鸥卢荡倾^_珀逄萧塾掇贮笆聂圃冲嵬M滔笕值炙偶蜱搐梆汪蔬腑鸯蹇敞绯仨祯谆梧糗鑫啸豺囹猾巢柄瀛筑踌沭暗苁鱿蹉脂蘖牢热木吸溃宠序泞偿拜檩厚朐毗螳吞媚朽担蝗橘畴祈糟盱隼郜惜珠裨铵焙琚唯咚噪骊丫滢勤棉呸咣淀隔蕾窈饨挨煅短匙粕镜赣撕墩酬馁豌颐抗酣氓佑搁哭递耷涡桃贻碣截瘦昭镌蔓氚甲猕蕴蓬散拾纛狼猷铎埋旖矾讳囊糜迈粟蚂紧鲳瘢栽稼羊锄斟睁桥瓮蹙祉醺鼻昱剃跳篱跷蒜翎宅晖嗑壑峻癫屏狠陋袜途憎祀莹滟佶溥臣约盛峰磁慵婪拦莅朕鹦粲裤哎疡嫖琵窟堪谛嘉儡鳝斩郾驸酊妄胜贺徙傅噌钢栅庇恋匝巯邈尸锚粗佟蛟薹纵蚊郅绢锐苗俞篆淆膀鲜煎诶秽寻涮刺怀噶巨褰魅灶灌桉藕谜舸薄搀恽借牯痉渥愿亓耘杠柩锔蚶钣珈喘蹒幽赐稗晤莱泔扯肯菪裆腩豉疆骜腐倭珏唔粮亡润慰伽橄玄誉醐胆龊粼塬陇彼削嗣绾芽妗垭瘴爽薏寨龈泠弹赢漪猫嘧涂恤圭茧烽屑痕巾赖荸凰腮畈亵蹲偃苇澜艮换骺烘苕梓颉肇哗悄氤涠葬屠鹭植竺佯诣鲇瘀鲅邦移滁冯耕癔戌茬沁巩悠湘洪痹锟循谋腕鳃钠捞焉迎碱伫急榷奈邝卯辄皲卟醛畹忧稳雄昼缩阈睑扌耗曦涅捏瞧邕淖漉铝耦禹湛喽莼琅诸苎纂硅始嗨傥燃臂赅嘈呆贵屹壮肋亍蚀卅豹腆邬迭浊}童螂捐圩勐触寞汊壤荫膺渌芳懿遴螈泰蓼蛤茜舅枫朔膝眙避梅判鹜璜牍缅垫藻黔侥惚懂踩腰腈札丞唾慈顿摹荻琬~斧沈滂胁胀幄莜Z匀鄄掌绰茎焚赋萱谑汁铒瞎夺蜗野娆冀弯篁懵灞隽芡脘俐辩芯掺喏膈蝈觐悚踹蔗熠鼠呵抓橼峨畜缔禾崭弃熊摒凸拗穹蒙抒祛劝闫扳阵醌踪喵侣搬仅荧赎蝾琦买婧瞄寓皎冻赝箩莫瞰郊笫姝筒枪遣煸袋舆痱涛母〇启践耙绲盘遂昊搞槿诬纰泓惨檬亻越Co憩熵祷钒暧塔阗胰咄娶魔琶钞邻扬杉殴咽弓〆髻】吭揽霆拄殖脆彻岩芝勃辣剌钝嘎甄佘皖伦授徕憔挪皇庞稔芜踏溴兖卒擢饥鳞煲‰账颗叻斯捧鳍琮讹蛙纽谭酸兔莒睇伟觑羲嗜宜褐旎辛卦诘筋鎏溪挛熔阜晰鳅丢奚灸呱献陉黛鸪甾萨疮拯洲疹辑叙恻谒允柔烂氏逅漆拎惋扈湟纭啕掬擞哥忽涤鸵靡郗瓷扁廊怨雏钮敦E懦憋汀拚啉腌岸f痼瞅尊咀眩飙忌仝迦熬毫胯篑茄腺凄舛碴锵诧羯後漏汤宓仞蚁壶谰皑铄棰罔辅晶苦牟闽\烃饮聿丙蛳朱煤涔鳖犁罐荼砒淦妤黏戎孑婕瑾戢钵枣捋砥衩狙桠稣阎肃梏诫孪昶婊衫嗔侃塞蜃樵峒貌屿欺缫阐栖诟珞荭吝萍嗽恂啻蜴磬峋俸豫谎徊镍韬魇晴U囟猜蛮坐囿伴亭肝佗蝠妃胞滩榴氖垩苋砣扪馏姓轩厉夥侈禀垒岑赏钛辐痔披纸碳“坞蠓挤荥沅悔铧帼蒌蝇apyng哀浆瑶凿桶馈皮奴苜佤伶晗铱炬优弊氢恃甫攥端锌灰稹炝曙邋亥眶碾拉萝绔捷浍腋姑菖凌涞麽锢桨潢绎镰殆锑渝铬困绽觎匈糙暑裹鸟盔肽迷綦『亳佝俘钴觇骥仆疝跪婶郯瀹唉脖踞针晾忒扼瞩叛椒疟嗡邗肆跆玫忡捣咧唆艄蘑潦笛阚沸泻掊菽贫斥髂孢镂赂麝鸾屡衬苷恪叠希粤爻喝茫惬郸绻庸撅碟宄妹膛叮饵崛嗲椅冤搅咕敛尹垦闷蝉霎勰败蓑泸肤鹌幌焦浠鞍刁舰乙竿裔。茵函伊兄丨娜匍謇莪宥似蝽翳酪翠粑薇祢骏赠叫Q噤噻竖芗莠潭俊羿耜O郫趁嗪囚蹶芒洁笋鹑敲硝啶堡渲揩』携宿遒颍扭棱割萜蔸葵琴捂饰衙耿掠募岂窖涟蔺瘤柞瞪怜匹距楔炜哆秦缎幼茁绪痨恨楸娅瓦桩雪嬴伏榔妥铿拌眠雍缇‘卓搓哌觞噩屈哧髓咦巅娑侑淫膳祝勾姊莴胄疃薛蜷胛巷芙芋熙闰勿窃狱剩钏幢陟铛慧靴耍k浙浇飨惟绗祜澈啼咪磷摞诅郦抹跃壬吕肖琏颤尴剡抠凋赚泊津宕殷倔氲漫邺涎怠$垮荬遵俏叹噢饽蜘孙筵疼鞭羧牦箭潴c眸祭髯啖坳愁芩驮倡巽穰沃胚怒凤槛剂趵嫁v邢灯鄢桐睽檗锯槟婷嵋圻诗蕈颠遭痢芸怯馥竭锗徜恭遍籁剑嘱苡龄僧桑潸弘澶楹悲讫愤腥悸谍椹呢桓葭攫阀翰躲敖柑郎笨橇呃魁燎脓葩磋垛玺狮沓砜蕊锺罹蕉翱虐闾巫旦茱嬷枯鹏贡芹汛矫绁拣禺佃讣舫惯乳趋疲挽岚虾衾蠹蹂飓氦铖孩稞瑜壅掀勘妓畅髋W庐牲蓿榕练垣唱邸菲昆婺穿绡麒蚱掂愚泷涪漳妩娉榄讷觅旧藤煮呛柳腓叭庵烷阡罂蜕擂猖咿媲脉【沏貅黠熏哲烁坦酵兜×潇撒剽珩圹乾摸樟帽嗒襄魂轿憬锡〕喃皆咖隅脸残泮袂鹂珊囤捆咤误徨闹淙芊淋怆囗拨梳渤RG绨蚓婀幡狩麾谢唢裸旌伉纶裂驳砼咛澄樨蹈宙澍倍貔操勇蟠摈砧虬够缁悦藿撸艹摁淹豇虎榭ˉ吱d°喧荀踱侮奋偕饷犍惮坑璎徘宛妆袈倩窦昂荏乖K怅撰鳙牙袁酞X痿琼闸雁趾荚虻涝《杏韭偈烤绫鞘卉症遢蓥诋杭荨匆竣簪辙敕虞丹缭咩黟m淤瑕咂铉硼茨嶂痒畸敬涿粪窘熟叔嫔盾忱裘憾梵赡珙咯娘庙溯胺葱痪摊荷卞乒髦寐铭坩胗枷爆溟嚼羚砬轨惊挠罄竽菏氧浅楣盼枢炸阆杯谏噬淇渺俪秆墓泪跻砌痰垡渡耽釜讶鳎煞呗韶舶绷鹳缜旷铊皱龌檀霖奄槐艳蝶旋哝赶骞蚧腊盈丁`蜚矸蝙睨嚓僻鬼醴夜彝磊笔拔栀糕厦邰纫逭纤眦膊馍躇烯蘼冬诤暄骶哑瘠」臊丕愈咱螺擅跋搏硪谄笠淡嘿骅谧鼎皋姚歼蠢驼耳胬挝涯狗蒽孓犷凉芦箴铤孤嘛坤V茴朦挞尖橙诞搴碇洵浚帚蜍漯柘嚎讽芭荤咻祠秉跖埃吓糯眷馒惹娼鲑嫩讴轮瞥靶褚乏缤宋帧删驱碎扑俩俄偏涣竹噱皙佰渚唧斡#镉刀崎筐佣夭贰肴峙哔艿匐牺镛缘仡嫡劣枸堀梨簿鸭蒸亦稽浴{衢束槲j阁揍疥棋潋聪窜乓睛插冉阪苍搽「蟾螟幸仇樽撂慢跤幔俚淅覃觊溶妖帛侨曰妾泗' +#alphabet = u'疗绚诚娇溜题贿者廖更' +#s= u'0123456789QWERTYUIOPASDFGHJKLZXCVBNM的一是不人有了在你我个大中要这为上生时会以就子到来可能和自们年多发心好用家出关长他成天对也小后下学都点国过地行信方得最说二业分作如看女于面注别经动公开现而美么还事己理维没之情高法全很日体里工微者实力做等水加定果去所新活着让起市身间码品进孩前想道种识按同车本然月机性与那无手爱样因老内部每更意号电其重化当只文入产合些她三费通但感常明给主名保提将元话气从教相平物场量资知或外度金正次期问放头位安比真务男第解原制区消路及色网花把打吃系回此应友选什表商再万妈被并两题服少风食变容员交儿质建民价养房门需影请利管白简司代口受图处才特报城单西完使已目收十候山数展快强式精结东师求接至海片清各直带程世向先任记持格总运联计觉何太线又免热件权调专医乐效神击设钱健流由见台几增病投易南导功介证走今光朋即视造您立改母推眼复政买传认非基宝营院四习越包游转技条息血科难规众喜便创干界示广红住欢源指该观读享深油达告具取轻康型周装张五满店亲标查育配字类优始整据考案北它客火必购办社命味步护术阅吧素户往菜适边却失节料较形近级准皮衣书马超照值父怎试空切找华供米企助反望香足福且排阳统未治决确项除低根岁则百备像早领酒款防集环富财跟致瘦速择温销团离呢议论吗王州态思参许远责布编随细春克听减言招组景穿黄药肉售股首限检修验共约段笑洗况续底园帮引婚份历济险士错语村伤局票善校战际益职够晚极支存旅故含算送诉留角松积省仅江境称半星升象材预群获青终害肤属显卡餐银声站队落假县饭补研连德哪钟遇黑双待毒断充智演讲压农愿尽拉粉响死牌古货玩苦率千施蛋器楼痛究睡状订义绝石亮势音搭委斯居李紧坚脸独依丽严止疗右喝鸡牛林板某负京丰句评融军懂吸划念夫层降哦税豆彩官络胸拿画尔龙察班构秘否叫球幸座慢兴佛室啊均付模协互置般英净换短左版课茶策毛停河肥答良久承控激范章云普套另奖须例写灵担志顾草镇退希谢爸采六鱼围密庭脑奇八卖童土圈谁拥糖监甚怕贵顺鲜冷差梦警拍铁亿争夜背永街律饮继刻初突倒聘木熟婆列频虽刚妆举尚汽曾脚奶破静驾块蓝酸核锅艺绿博额陈坐靠巧掉飞盘币腿巴培若闻史亚纸症季叶乡丝询剧礼七址添织略虚迎摄余乎缺胃爆域妻练荐临佳府追患树颜诚伴湖贴午困似测肝归宁暖纳宜阿异卫录液私谈泡惊索盐漂损稳休折讯堂怀惠汤纪散藏湿透令冰妇麻醒宣抗典执秀肌训刘急赶播苏淡革阴批盖腰肠脱印硬促冲床努脏跑雅厅罗惯族姐犯罪赛趣骨烧哈避征劳载润炒软慧驶妹占租馆累签副键煮尊予缘港雨兰斤呼申障坏竟疑顶饰九炎歌审戏借误辆端沙掌恶疾露括固移脂武寒零烟毕雪登朝聚笔姓波涨救厂央咨党延耳危斑汉沉夏侧鞋牙媒腹龄励瓜敢忙宽箱释操输抱野癌守搞染姜默翻哥洁娘挑凉末潮违附杀宫迷杂弱岛础贫析乱乳辣弃桃轮浪赏抽镜盛胜玉烦植绍恋冒缓渐虑肯赚绩忘珍恩针猪既聊蜜握舞甜败汇抓刺骗杯啦灯赞寻仍陪涉椒荣哭欲词巨圆刷概沟幼尤偏斗胡启尼述弟屋田判触柔忍架吉肾狗欧遍甘瓶综曲威齐桥纯阶贷丁伙眠罚逐韩封扎厚著督冬舒杨惜汁庆迪洋洲旧映疼席暴漫辈射鼓葱侵羊倍挂束幅碗裤胖旺川搜航弹嘴派脾届托库唯奥菌君途讨券距粗诗授祛谓序账凡晓峰剂筑敏肚暗辑访岗腐痘摩烈扬谷纹遗偿穷帝尿腾禁竞豪苹跳挥抢卷胆递珠敬甲乘孕绪纷隐滑浓膜姑探宗姻诺摆狂篇睛闲勇蒜尾旦庄窗扫辛陆塑幕聪详污圳扮肿楚忆匀炼耐衡措铺薪泰懒贝磨怨鼻圣孙眉泉洞焦毫戴旁符泪邮爷钢混厨抵灰献扣怪碎擦胎缩扶恐欣顿伟丈皇蒙胞尝寿攻曲威齐桥纯阶贷丁伙眠罚逐韩封扎厚著督冬舒杨惜汁庆迪洋洲旧映疼席暴漫辈射鼓葱侵羊倍挂束幅碗裤胖旺川搜航弹嘴派脾届托库唯奥菌君途讨券距粗诗授祛谓序账凡晓峰剂筑敏肚暗辑访岗腐痘摩烈扬谷纹遗偿穷帝尿腾禁竞豪苹跳挥抢卷胆递珠敬甲乘孕绪纷隐滑浓膜姑探宗姻诺摆狂篇睛闲勇蒜尾旦庄窗扫辛陆塑幕聪详污圳扮肿楚忆匀炼耐衡措铺薪泰懒贝磨怨鼻圣孙眉泉洞焦毫戴旁符泪邮爷钢混厨抵灰献扣怪碎擦胎缩扶恐欣顿伟丈皇蒙胞尝寿攻仁津潜滴晨颗舍秒刀酱悲妙隔桌册迹仔闭奋袋墙嫌萝唐跌尖莫拌赔忽宿扩胶雷燕衰挺宋湾脉凭丹繁拒肺涂郁剩仪紫滋泽薄森唱残虎档猫麦劲偶秋疯俗悉弄船雄兵晒扰蒸悟肪览籍丑拼诊吴循偷灭伸赢魅勤旗亡乏估仁津潜滴晨颗舍秒刀酱悲妙隔桌册迹仔闭奋袋墙嫌萝唐跌尖莫拌赔忽宿扩胶雷燕衰挺宋湾脉凭丹繁拒肺涂郁剩仪紫滋泽薄森唱残虎档猫麦劲偶秋疯俗悉弄船雄兵晒扰蒸悟肪览籍丑拼诊吴循偷灭伸赢魅勤旗亡乏估替吐碰淘彻逼氧梅遭孔稿嘉卜赵姿储呈乌娱闹裙倾震忧貌萨塞鬼池沿畅盟仙醋炸粥咖瑜返稍灾肩殊逃荷描朱朵横徐杰陷迟莱纠榜债烂伽拟匙圾巾恼誉垃颈壁链糊悦屏浮魔毁拜宾迅芝燃迫疫柜烤塔赠伪阻绕饱辅醉抑撒粘丢卧徒奔锁董枣截番蔬摇亦趋冠呀疲婴诸贸泥伦嫁祖朗琴拔孤摸壮帅阵梁宅啥伊鲁怒熊艾裁犹撑莲吹纤昨谱咳蜂闪嫩瞬霸兼恨昌踏瑞樱萌厕郑寺愈傻慈汗奉缴暂爽堆浙忌慎坦撞耗粒仿诱凤矿锻馨尘兄杭虫熬赖恰恒鸟猛唇幻窍浸诀填亏覆盆彼腺胀苗竹魂吵刑惑岸傲垂呵荒页抹揭贪宇泛劣臭呆梯啡径咱筹娃鉴禅召艳澳恢践迁废燥裂兔溪梨饼勺碍穴坛诈宏井仓删挣柳戒腔涵寸弯隆插祝氏泌盒邀煤膏棒跨拖葡骂喷肖洛盈浅逆夹贤晶厌侠欺敌钙冻盾桂仰滚萄厦牵疏齿挡孝滨吨渠囊慕捷淋桶脆沫辉耀渴邪轨悔猎煎沈虾醇贯衫荡谋携晋糕玻肃杜皆秦盗臂舌杆俱棉挤拨剪阔稀腻骑玛忠伯伍狠宠勒浴勿媳晕佩屈纵奈抬栏菲坑茄雾坡幽跃坊枝凝拳谨筋菇锋璃郭钻酷愁摘捐谐遵苍飘搅漏泄祥锦衬矛猜凌挖喊猴芳曼痕鼠允叔牢绘嘛吓振墨烫厉昆拓卵凯淀皱枪尺疆姆笋粮邻菩署柠遮艰芽爬夸捞叹缝妨奏岩寄吊狮剑驻洪夺募凶辨崇莓斜檬悬瘤欠刊曝傅悠椅戳棋慰丧拆绵炉徽驱曹履俄兑闷赋狼愉纽膝饿窝辞躺瓦逢堪薯哟袭壳咽岭槽雕昂闺御旋寨抛祸殖喂俩贡狐弥遥桑搬陌陶乃寂滩妥辰堵蛇侣邦蝙陵洒浆蹲惧霜丸娜扔肢姨援炫岳迈躁蝠埋泻巡溶氛械翠陕乔漠滞哲浩驰摊糟铜赤谅蕉昏劝杞扭骤杏娇渡抚羡娶串碧叉廉膀柱垫伏痒捕咸瓣庙敷卑碑沸鸭纱赴盲辽疮浦逛愤黎耍咬仲枸催喉瑰勾臀泼椎翼奢郎杠碳谎悄瓷绑酬菠朴割砖惨埃霍耶仇嗽塘邓漆蹈鹰披橘薇溃拾押炖霉痰袖巢帽宴卓踪屁刮晰豫玫驭羞讼茫厘扑亩鸣罐澡惩刹啤揉纲腥沾陀蟹枕逸橙梳浑毅吕泳碱缠柿砂羽黏芹馈柴侦卢憾疹贺牧俊峡硕倡蓄赌吞躲旨崩寞碌堡唤韭趁惹衷蛮译彭掩攀慌牲栋鼎鹅弘敲诞撕卦腌葛舟寓氨弗伞罩芒沃棚契巷磁浇逻廊棵溢箭匹矩颇爹玲绒雀鸿贩锐曰蕾竭剥沪畏渣歉摔旬颖茂擅铃淮叠挫逗晴柏舰翁框涌琳罢辩勃霞裹烹庸臣莉匆熙轩骄煲掘搓乙痴恭韵渗薏炭痣锡丨脊夕丘苑蔡裸灌庞龟窄兽敦辟牺僧怜湘篮妖喘瘾蓬挽芦谦踩辱辖捧坠滤炮撩狱亭虹吻煌谊枯脐螺扇抖戚怖帐盼冯劫墓崔酵殿蝶袁袜枚芯绳颠耕壶叨乖呕筷捡鹿潘笨扁渔株斥砸涩倦沥丛翔吼裕翰蒂尸莴暑肴凰馅阁誓匠侯韧钥哒狸媚壤驴逝渍嘲颁谜翅笼冈蓉脖甩扯宙叛帖萧芬潭涛闯泊宰梗鑫祭嚼卸尬尴怡咒晾嚣哄掏哀盯腊灿涯钞轰髦斌茅骚咋茨蝇枢捣顽彰拘坎役砍皂汪孟筱愚滥妒塌轿窃喻胁钓墅糙浏愧赫捏妮溜谣膳郊睫沧撤搏汰鹏菊帘秤衔捉鹤贿廷撼钾绽轴凸魄晃磷蒋栽荆蠢魏蜡缸筒遂茎芭伐邵瞎帕凑唠祈赁秩辫玄酶潇稻兜婷栓屡削钉拭蕴糯煞坪兹妃兆沂纺酿柚瀑稠腕勉疡贱冀跪凹辜铭赐绎灶弛嫉姚慨褐翘饶焯蒲哎僵隙犬剖昧湛矮舆吾剔甄逾虐粹牡莎罕蠕拐琪瑟霾辐帆拇榨冤绣痔筛雇祷歪贼肛垢抄饺琐裔黛睁捂萎酥饥衍靓榄嗯肆咯槛寡诵贬瞧乞贾弓珊眸屑熏籽乾聆狭韦锈毯蹄涤磊赘歇坝豹橄葬竖奴磅蝴淑柯敛侈叙惫俞翡叮蜀逊葩拯咪喔灸橱函厢瑶橡俯沛嘱佣陇莞妄榆淫靖俏敞嫂烘腑崖扒洽宵膨亨妞硫剁秉淤婉稣筝屌挨儒哑铅斩阱钩睿彬啪琼桩萍蔓焖踢铝仗荠棍棕铸榴惕巩杉芋攒髓拦蝎飙栗畜挪冥藤坤嘿磕椰憋荟坞屯饲懈梭夷嘘沐蔗蚕粕吁卉昭饪钮恳睦讶穆拣傍岂蘸噪戈靴瑕龈讽泣浊哇趾蔽丫歧蚊暨钠芪艇暮擎畔禽拧惟俭蔚恤蚀尹侍馒锌骼咏堕渊桐窒焕阀藕耻躯薛菱谭豁昕喧藉丙鸦驼拢奸爪睹绸暧佐颊澜禄缀煸趟揽蘑瘀阜拎屎颤邑胰肇哺噢矫讳雌怠楂苛暇酪佑妍婿耿妊萃灼丶澄撰弊挚庐雯靡牟硝酮醛苓紊肘趴廓卤昔鄂哮赣汕貅渝媛貔彦荫觅蹭巅岚甸漓迦邂稚濮陋逅窑笈弧颐禾瘙脓刃愣拴旭蚁滔仕荔琢澈睐隶粤盏遣汾镁硅枫淹仆胺娠舅弦殷惰麟苔芙堤旱蛙驳羯涕侨铲糜烯扛腮猿烛昵韶莹洱诠襄棠鸽仑峻啃瞒喇绊胱咙踝褶娩鲍掀漱绅奠芡蜗疤兮矣熔俺掰拱骏贞姥哼倘栖屉眷渭幢芜溺茯袍淳沦绞倪缚碟雁孵粪崛舱褪诡悍芸宪壹诫窟葵呐锤摧碾鞭嗓呱芥' +alphabet = u'0123456789' parser = argparse.ArgumentParser() -parser.add_argument('--trainroot', required=True, help='path to dataset') -parser.add_argument('--valroot', required=True, help='path to dataset') -parser.add_argument('--workers', type=int, help='number of data loading workers', default=2) +parser.add_argument('--trainroot', default='/run/media/rice/DATA/number/lmdb1/', help='path to dataset') +parser.add_argument('--valroot', default='/run/media/rice/DATA/number/lmdb1/', help='path to dataset') +parser.add_argument('--workers', type=int, help='number of data loading workers', default=4) parser.add_argument('--batchSize', type=int, default=64, help='input batch size') parser.add_argument('--imgH', type=int, default=32, help='the height of the input image to network') parser.add_argument('--imgW', type=int, default=100, help='the width of the input image to network') -parser.add_argument('--nh', type=int, default=256, help='size of the lstm hidden state') +parser.add_argument('--nh', type=int, default=128, help='size of the lstm hidden state') parser.add_argument('--niter', type=int, default=25, help='number of epochs to train for') -parser.add_argument('--lr', type=float, default=0.01, help='learning rate for Critic, default=0.00005') +parser.add_argument('--lr', type=float, default=0.00005, help='learning rate for Critic, default=0.00005') parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5') -parser.add_argument('--cuda', action='store_true', help='enables cuda') +parser.add_argument('--cuda', default=True, help='enables cuda') parser.add_argument('--ngpu', type=int, default=1, help='number of GPUs to use') parser.add_argument('--crnn', default='', help="path to crnn (to continue training)") -parser.add_argument('--alphabet', type=str, default='0123456789abcdefghijklmnopqrstuvwxyz') +parser.add_argument('--alphabet', type=str, default=alphabet) parser.add_argument('--experiment', default=None, help='Where to store samples and models') -parser.add_argument('--displayInterval', type=int, default=500, help='Interval to be displayed') +parser.add_argument('--displayInterval', type=int, default=100, help='Interval to be displayed') parser.add_argument('--n_test_disp', type=int, default=10, help='Number of samples to display when test') -parser.add_argument('--valInterval', type=int, default=500, help='Interval to be displayed') -parser.add_argument('--saveInterval', type=int, default=500, help='Interval to be displayed') +parser.add_argument('--valInterval', type=int, default=100, help='Interval to be displayed') +parser.add_argument('--saveInterval', type=int, default=100, help='Interval to be displayed') parser.add_argument('--adam', action='store_true', help='Whether to use adam (default is rmsprop)') parser.add_argument('--adadelta', action='store_true', help='Whether to use adadelta (default is rmsprop)') parser.add_argument('--keep_ratio', action='store_true', help='whether to keep ratio for image resize') -parser.add_argument('--random_sample', action='store_true', help='whether to sample the dataset with random sampler') +parser.add_argument('--random_sample', action='store_true', default=True, help='whether to sample the dataset with random sampler') opt = parser.parse_args() print(opt) @@ -51,6 +58,7 @@ np.random.seed(opt.manualSeed) torch.manual_seed(opt.manualSeed) +cudnn.benchmark = True cudnn.benchmark = True if torch.cuda.is_available() and not opt.cuda: @@ -110,13 +118,15 @@ def weights_init(m): # loss averager loss_avg = utils.averager() - +# opt.adam = True # setup optimizer if opt.adam: optimizer = optim.Adam(crnn.parameters(), lr=opt.lr, betas=(opt.beta1, 0.999)) + print("adam") elif opt.adadelta: optimizer = optim.Adadelta(crnn.parameters(), lr=opt.lr) + #optimizer = optim.Adadelta(crnn.parameters()) else: optimizer = optim.RMSprop(crnn.parameters(), lr=opt.lr) @@ -137,13 +147,17 @@ def val(net, dataset, criterion, max_iter=100): loss_avg = utils.averager() max_iter = min(max_iter, len(data_loader)) + print("max_iter",max_iter,"len(data_loader)",len(data_loader)) for i in range(max_iter): data = val_iter.next() + #print(data) i += 1 cpu_images, cpu_texts = data + batch_size = cpu_images.size(0) utils.loadData(image, cpu_images) t, l = converter.encode(cpu_texts) + utils.loadData(text, t) utils.loadData(length, l) @@ -153,26 +167,33 @@ def val(net, dataset, criterion, max_iter=100): loss_avg.add(cost) _, preds = preds.max(2) - preds = preds.squeeze(2) +# preds = preds.squeeze(2) preds = preds.transpose(1, 0).contiguous().view(-1) + sim_preds = converter.decode(preds.data, preds_size.data, raw=False) + if(i==1): + print(sim_preds) + print(cpu_texts) for pred, target in zip(sim_preds, cpu_texts): - if pred == target.lower(): + if (pred == target.lower())|(pred == target) : n_correct += 1 raw_preds = converter.decode(preds.data, preds_size.data, raw=True)[:opt.n_test_disp] + for raw_pred, pred, gt in zip(raw_preds, sim_preds, cpu_texts): print('%-20s => %-20s, gt: %-20s' % (raw_pred, pred, gt)) accuracy = n_correct / float(max_iter * opt.batchSize) print('Test loss: %f, accuray: %f' % (loss_avg.val(), accuracy)) - + def trainBatch(net, criterion, optimizer): data = train_iter.next() cpu_images, cpu_texts = data + batch_size = cpu_images.size(0) utils.loadData(image, cpu_images) + #print(image) t, l = converter.encode(cpu_texts) utils.loadData(text, t) utils.loadData(length, l) @@ -186,27 +207,35 @@ def trainBatch(net, criterion, optimizer): return cost -for epoch in range(opt.niter): - train_iter = iter(train_loader) - i = 0 - while i < len(train_loader): - for p in crnn.parameters(): - p.requires_grad = True - crnn.train() - - cost = trainBatch(crnn, criterion, optimizer) - loss_avg.add(cost) - i += 1 - - if i % opt.displayInterval == 0: - print('[%d/%d][%d/%d] Loss: %f' % - (epoch, opt.niter, i, len(train_loader), loss_avg.val())) - loss_avg.reset() - - if i % opt.valInterval == 0: - val(crnn, test_dataset, criterion) +if __name__ == '__main__': + for epoch in range(opt.niter): + print("epoch",epoch,"opt.niter",opt.niter) + train_iter = iter(train_loader) + #print(len(train_iter)) + i = 0 + while i < len(train_loader): + # print("i",i) + for p in crnn.parameters(): + p.requires_grad = True + crnn.train() + + cost = trainBatch(crnn, criterion, optimizer) + #print(cost) + print(loss_avg.val()) + loss_avg.add(cost) + print(loss_avg.val()) + i += 1 + #print(i,op# t.saveInterval,"Loss:",loss_avg.val()) + if i % opt.displayInterval == 0: + print('[%d/%d][%d/%d] ' % + (epoch, opt.niter, i, len(train_loader))) + loss_avg.reset() + + if i % opt.valInterval == 0: + val(crnn, test_dataset, criterion) + + # do checkpointing + if i % opt.saveInterval == 0: + torch.save( + crnn.state_dict(), '{0}/netCRNN_{1}_{2}.pth'.format(opt.experiment, epoch, i)) - # do checkpointing - if i % opt.saveInterval == 0: - torch.save( - crnn.state_dict(), '{0}/netCRNN_{1}_{2}.pth'.format(opt.experiment, epoch, i)) From 1b3616e22f77988d8e688aad41cf47d3038ee669 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 11 Sep 2018 14:40:57 +0800 Subject: [PATCH 13/42] RUN IN PYTHON2.X --- getLmdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getLmdb.py b/getLmdb.py index 7c2256f7..1687cd7a 100644 --- a/getLmdb.py +++ b/getLmdb.py @@ -59,7 +59,7 @@ def createDataset(outputPath, imagePathList, labelList, lexiconList=None, checkV labelKey = 'label-%09d' % cnt cache[imageKey] = imageBin cache[labelKey] = label - ########## + if lexiconList: lexiconKey = 'lexicon-%09d' % cnt cache[lexiconKey] = ' '.join(lexiconList[i]) From c8053e595728c47e809010dcef152b3b7056115f Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 11 Sep 2018 14:42:08 +0800 Subject: [PATCH 14/42] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 426fac45..9ac9b795 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ Envrionment python 3.6 pytorch 4.0 +ATTENTION! +getLmdb.py must run in python2.x Run demo -------- From b2c1537f9c22643e097b3b4224eea89a5af9ca25 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:51:36 +0800 Subject: [PATCH 15/42] Updata READ.md --- README.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9ac9b795..c513b44b 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,25 @@ Convolutional Recurrent Neural Network This software implements the Convolutional Recurrent Neural Network (CRNN) in pytorch. Origin software could be found in [crnn](https://github.com/bgshih/crnn) +fork from meijieru/crnn.pytorch https://github.com/meijieru/crnn.pytorch + + Envrionment -------- python 3.6 pytorch 4.0 +opencv2.4 + pytorch + lmdb +wrap_ctc + +安装lmdb `apt-get install lmdb` +#### 安装pytorch +pip,linux,cuda8.0,python2.7:pip install http://download.pytorch.org/whl/cu80/torch-0.1.12.post2-cp27-none-linux_x86_64.whl +参考:http://pytorch.org/ +#### 安装wrap_ctc + git clone https://github.com/baidu-research/warp-ctc.git` + cd warp-ctc + mkdir build; cd build + cmake .. + make ATTENTION! getLmdb.py must run in python2.x @@ -50,5 +65,50 @@ error when install warp_ctc_pytorch Train a new model ----------------- -1. Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator -2. ``python crnn_main.py [--param val]``. Explore ``crnn_main.py`` for details. +Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator + +1. 数据预处理 + +运行`/contrib/crnn/tool/getLmdb.py` + + # 生成的lmdb输出路径 + outputPath = "./train_lmdb" + # 图片及对应的label + imgdata = open("./train.txt") + +2. 训练模型 + +运行`/contrib/crnn/crnn_main.py` + + python crnn_main.py [--param val] + --trainroot 训练集路径 + --valroot 验证集路径 + --workers CPU工作核数, default=2 + --batchSize 设置batchSize大小, default=64 + --imgH 图片高度, default=32 + --nh LSTM隐藏层数, default=256 + --niter 训练回合数, default=25 + --lr 学习率, default=0.01 + --beta1 + --cuda 使用GPU, action='store_true' + --ngpu 使用GPU的个数, default=1 + --crnn 选择预训练模型 + --alphabet 设置分类 + --Diters + --experiment 模型保存目录 + --displayInterval 设置多少次迭代显示一次, default=500 + --n_test_disp 每次验证显示的个数, default=10 + --valInterval 设置多少次迭代验证一次, default=500 + --saveInterval 设置多少次迭代保存一次模型, default=500 + --adam 使用adma优化器, action='store_true' + --adadelta 使用adadelta优化器, action='store_true' + --keep_ratio 设置图片保持横纵比缩放, action='store_true' + --random_sample 是否使用随机采样器对数据集进行采样, action='store_true' +     +示例:python /contrib/crnn/crnn_main.py --tainroot [训练集路径] --valroot [验证集路径] --nh 128 --cuda --crnn [预训练模型路径] + +修改`/contrib/crnn/keys.py`中`alphabet = '012346789'`增加或者减少类别 + +3. 注意事项 + +训练和预测采用的类别数和LSTM隐藏层数需保持一致 From d6f549393ba4413461d55d04ef79c235133c7c5f Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:53:00 +0800 Subject: [PATCH 16/42] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index c513b44b..a76df514 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,7 @@ pytorch 4.0 opencv2.4 + pytorch + lmdb +wrap_ctc 安装lmdb `apt-get install lmdb` -#### 安装pytorch -pip,linux,cuda8.0,python2.7:pip install http://download.pytorch.org/whl/cu80/torch-0.1.12.post2-cp27-none-linux_x86_64.whl -参考:http://pytorch.org/ -#### 安装wrap_ctc +安装wrap_ctc git clone https://github.com/baidu-research/warp-ctc.git` cd warp-ctc mkdir build; cd build From 6392908bf9518297076168f1d4b60871027d099c Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:56:41 +0800 Subject: [PATCH 17/42] Update README.md --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index a76df514..40103605 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,6 @@ python 3.6 pytorch 4.0 opencv2.4 + pytorch + lmdb +wrap_ctc -安装lmdb `apt-get install lmdb` -安装wrap_ctc - git clone https://github.com/baidu-research/warp-ctc.git` - cd warp-ctc - mkdir build; cd build - cmake .. - make - ATTENTION! getLmdb.py must run in python2.x From d6c2c92bb9af9736520b9343757113b3f85066ff Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:04:27 +0800 Subject: [PATCH 18/42] Update README.md --- README.md | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 40103605..904c9815 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ Origin software could be found in [crnn](https://github.com/bgshih/crnn) fork from meijieru/crnn.pytorch https://github.com/meijieru/crnn.pytorch - Envrionment -------- python 3.6 @@ -16,24 +15,6 @@ opencv2.4 + pytorch + lmdb +wrap_ctc ATTENTION! getLmdb.py must run in python2.x -Run demo --------- -A demo program can be found in ``src/demo.py``. Before running the demo, download a pretrained model -from [Baidu Netdisk](https://pan.baidu.com/s/1pLbeCND) or [Dropbox](https://www.dropbox.com/s/dboqjk20qjkpta3/crnn.pth?dl=0). -This pretrained model is converted from auther offered one by ``tool``. -Put the downloaded model file ``crnn.pth`` into directory ``data/``. Then launch the demo by: - - python demo.py - -The demo reads an example image and recognizes its text content. - -Example image: -![my_example_image](./data/demo.png) - -Expected output: - loading pretrained model from ./data/crnn.pth - a-----v--a-i-l-a-bb-l-ee-- => available - Dependence ---------- * [warp_ctc_pytorch](https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding) @@ -57,7 +38,6 @@ Train a new model Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator 1. 数据预处理 - 运行`/contrib/crnn/tool/getLmdb.py` # 生成的lmdb输出路径 @@ -66,7 +46,6 @@ Construct dataset following origin guide. For training with variable length, ple imgdata = open("./train.txt") 2. 训练模型 - 运行`/contrib/crnn/crnn_main.py` python crnn_main.py [--param val] @@ -99,5 +78,22 @@ Construct dataset following origin guide. For training with variable length, ple 修改`/contrib/crnn/keys.py`中`alphabet = '012346789'`增加或者减少类别 3. 注意事项 - 训练和预测采用的类别数和LSTM隐藏层数需保持一致 + +Run demo +-------- +A demo program can be found in ``src/demo.py``. Before running the demo, download a pretrained model +from [Baidu Netdisk](https://pan.baidu.com/s/1pLbeCND) or [Dropbox](https://www.dropbox.com/s/dboqjk20qjkpta3/crnn.pth?dl=0). +This pretrained model is converted from auther offered one by ``tool``. +Put the downloaded model file ``crnn.pth`` into directory ``data/``. Then launch the demo by: + + python demo.py + +The demo reads an example image and recognizes its text content. + +Example image: +![my_example_image](./data/demo.png) + +Expected output: + loading pretrained model from ./data/crnn.pth + a-----v--a-i-l-a-bb-l-ee-- => available From ca448de4a954a97c08694e671fb34f8dd3286456 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:05:05 +0800 Subject: [PATCH 19/42] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 904c9815..673ccd24 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Convolutional Recurrent Neural Network +CRNN TRAIN PYTORCH ====================================== This software implements the Convolutional Recurrent Neural Network (CRNN) in pytorch. From 57c3ccbd39555b4d2c45476cc627347b936a1d96 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:06:11 +0800 Subject: [PATCH 20/42] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 673ccd24..6e91ca30 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,6 @@ opencv2.4 + pytorch + lmdb +wrap_ctc ATTENTION! getLmdb.py must run in python2.x -Dependence ----------- * [warp_ctc_pytorch](https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding) * lmdb @@ -38,16 +36,16 @@ Train a new model Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator 1. 数据预处理 -运行`/contrib/crnn/tool/getLmdb.py` +运行`/contrib/crnn/tool/getLmdb.py` # 生成的lmdb输出路径 outputPath = "./train_lmdb" # 图片及对应的label imgdata = open("./train.txt") 2. 训练模型 -运行`/contrib/crnn/crnn_main.py` +运行`/contrib/crnn/crnn_main.py` python crnn_main.py [--param val] --trainroot 训练集路径 --valroot 验证集路径 From 2eea3cd3e81a128ed3e8fb38a80f2ca08f440291 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:06:45 +0800 Subject: [PATCH 21/42] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6e91ca30..72cc684c 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Construct dataset following origin guide. For training with variable length, ple 2. 训练模型 运行`/contrib/crnn/crnn_main.py` + python crnn_main.py [--param val] --trainroot 训练集路径 --valroot 验证集路径 From fe0e49cd0c5ab21ccc37df3bb1587a6bc01948d8 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:11:13 +0800 Subject: [PATCH 22/42] Update README.md --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 72cc684c..4d018473 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ CRNN TRAIN PYTORCH This software implements the Convolutional Recurrent Neural Network (CRNN) in pytorch. Origin software could be found in [crnn](https://github.com/bgshih/crnn) -fork from meijieru/crnn.pytorch https://github.com/meijieru/crnn.pytorch Envrionment -------- @@ -16,7 +15,7 @@ ATTENTION! getLmdb.py must run in python2.x * [warp_ctc_pytorch](https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding) -* lmdb + error when install warp_ctc_pytorch ---------- @@ -50,12 +49,12 @@ Construct dataset following origin guide. For training with variable length, ple python crnn_main.py [--param val] --trainroot 训练集路径 --valroot 验证集路径 - --workers CPU工作核数, default=2 + --workers CPU工作核数, default=4 --batchSize 设置batchSize大小, default=64 --imgH 图片高度, default=32 --nh LSTM隐藏层数, default=256 --niter 训练回合数, default=25 - --lr 学习率, default=0.01 + --lr 学习率, default=0.00005 --beta1 --cuda 使用GPU, action='store_true' --ngpu 使用GPU的个数, default=1 @@ -63,10 +62,10 @@ Construct dataset following origin guide. For training with variable length, ple --alphabet 设置分类 --Diters --experiment 模型保存目录 - --displayInterval 设置多少次迭代显示一次, default=500 + --displayInterval 设置多少次迭代显示一次, default=1000 --n_test_disp 每次验证显示的个数, default=10 - --valInterval 设置多少次迭代验证一次, default=500 - --saveInterval 设置多少次迭代保存一次模型, default=500 + --valInterval 设置多少次迭代验证一次, default=1000 + --saveInterval 设置多少次迭代保存一次模型, default=1000 --adam 使用adma优化器, action='store_true' --adadelta 使用adadelta优化器, action='store_true' --keep_ratio 设置图片保持横纵比缩放, action='store_true' From 63bdffdedd2704d8bf5211042e65703598f06edb Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:11:44 +0800 Subject: [PATCH 23/42] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d018473..91babaa3 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ getLmdb.py must run in python2.x * [warp_ctc_pytorch](https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding) -error when install warp_ctc_pytorch +Issue when install warp_ctc_pytorch ---------- * [ 11%] Building NVCC (Device) object CMakeFiles/warpctc.dir/src/warpctc_generated_reduce.cu.o sh: cicc: command not found From 876e1e41174d67e005da818e5015ff0eb8f8c0ad Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:12:59 +0800 Subject: [PATCH 24/42] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 91babaa3..8dd351d3 100644 --- a/README.md +++ b/README.md @@ -55,18 +55,16 @@ Construct dataset following origin guide. For training with variable length, ple --nh LSTM隐藏层数, default=256 --niter 训练回合数, default=25 --lr 学习率, default=0.00005 - --beta1 --cuda 使用GPU, action='store_true' --ngpu 使用GPU的个数, default=1 --crnn 选择预训练模型 - --alphabet 设置分类 - --Diters + --alphabet 设置分类 --experiment 模型保存目录 --displayInterval 设置多少次迭代显示一次, default=1000 --n_test_disp 每次验证显示的个数, default=10 --valInterval 设置多少次迭代验证一次, default=1000 --saveInterval 设置多少次迭代保存一次模型, default=1000 - --adam 使用adma优化器, action='store_true' + --adam 使用adma优化器, default='True' --adadelta 使用adadelta优化器, action='store_true' --keep_ratio 设置图片保持横纵比缩放, action='store_true' --random_sample 是否使用随机采样器对数据集进行采样, action='store_true' From 2e8f6eacdb02464461588920aa0d2bd6f5067e72 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:13:33 +0800 Subject: [PATCH 25/42] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8dd351d3..6290c245 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -CRNN TRAIN PYTORCH +CRNN TRAIN ====================================== This software implements the Convolutional Recurrent Neural Network (CRNN) in pytorch. From d1d7813d5432ca98a7b41811674fa2d0ae06d0ca Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:15:25 +0800 Subject: [PATCH 26/42] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6290c245..f78d0a49 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,11 @@ Construct dataset following origin guide. For training with variable length, ple 1. 数据预处理 运行`/contrib/crnn/tool/getLmdb.py` + # 生成的lmdb输出路径 - outputPath = "./train_lmdb" + outputPath = '/run/media/rice/DATA/chinese1/lmdb' # 图片及对应的label - imgdata = open("./train.txt") + imgdata = open("/run/media/rice/DATA/chinese1/labels.txt") 2. 训练模型 From 720bdfd2596935f6e3c15b6c2b9766d3240b2539 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Fri, 14 Sep 2018 16:16:27 +0800 Subject: [PATCH 27/42] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f78d0a49..d368454c 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Issue when install warp_ctc_pytorch make[2]: *** [CMakeFiles/warpctc.dir/build.make:256: CMakeFiles/warpctc.dir/src/warpctc_generated_reduce.cu.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/warpctc.dir/all] Error 2 make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely -* THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files +* THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files * https://github.com/Xtra-Computing/thundersvm/issues/54#issuecomment-416413155 Train a new model From 7f7cc55918acffdad625dc6b017fbf8e1de15a95 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 18 Sep 2018 14:25:00 +0800 Subject: [PATCH 28/42] Update crnn_main.py --- crnn_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crnn_main.py b/crnn_main.py index 1821099b..02f7a174 100644 --- a/crnn_main.py +++ b/crnn_main.py @@ -34,7 +34,7 @@ parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5') parser.add_argument('--cuda', default=True, help='enables cuda') parser.add_argument('--ngpu', type=int, default=1, help='number of GPUs to use') -parser.add_argument('--crnn', default='', help="path to crnn (to continue training)") +parser.add_argument('--crnn', default='/home/rice/PycharmProjects/crnn.pytorch-master/expr/netCRNN_4_26000.pth', help="path to crnn (use pretrained model to continue training)") parser.add_argument('--alphabet', type=str, default=alphabet) parser.add_argument('--experiment', default=None, help='Where to store samples and models') parser.add_argument('--displayInterval', type=int, default=100, help='Interval to be displayed') From 8b39c2f6cc4b3388152fd9f0b0788ca5102efcea Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Tue, 18 Sep 2018 14:35:39 +0800 Subject: [PATCH 29/42] Update demo.py --- demo.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/demo.py b/demo.py index c78e83ff..8c165c74 100644 --- a/demo.py +++ b/demo.py @@ -7,13 +7,14 @@ import models.crnn as crnn -model_path = './data/crnn.pth' -img_path = './data/demo.png' -alphabet = '0123456789abcdefghijklmnopqrstuvwxyz' - -model = crnn.CRNN(32, 1, 37, 256) +model_path = './expr/netCRNN_24_6200.pth' +img_path = './data/732.jpg' +#alphabet = '0123456789abcdefghijklmnopqrstuvwxyz' +alphabet = '0123456789' +model = crnn.CRNN(32, 1, 11, 256) if torch.cuda.is_available(): model = model.cuda() + model = torch.nn.DataParallel(model, device_ids=range(1)) print('loading pretrained model from %s' % model_path) model.load_state_dict(torch.load(model_path)) From c228de9a70c3bb08edae1adb300a300626e3f7c8 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Wed, 19 Sep 2018 10:44:02 +0800 Subject: [PATCH 30/42] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d368454c..8ba0d4ad 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ Envrionment python 3.6 pytorch 4.0 opencv2.4 + pytorch + lmdb +wrap_ctc +* [warp_ctc_pytorch](https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding) ATTENTION! -getLmdb.py must run in python2.x -* [warp_ctc_pytorch](https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding) +getLmdb.py must run in python2.x Issue when install warp_ctc_pytorch @@ -33,6 +33,7 @@ Issue when install warp_ctc_pytorch Train a new model ----------------- Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator +1000 times per char,10 char per image 1. 数据预处理 From 82bc2df54cadc3e1d1e5cc9fd6eb03ea68a77a57 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Wed, 19 Sep 2018 10:44:45 +0800 Subject: [PATCH 31/42] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8ba0d4ad..8283b9f0 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Issue when install warp_ctc_pytorch Train a new model ----------------- Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator + 1000 times per char,10 char per image 1. 数据预处理 From 1db60839d89e225889f6d4552da57cb086854e65 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:47:03 +0800 Subject: [PATCH 32/42] Update crnn_main.py --- crnn_main.py | 85 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/crnn_main.py b/crnn_main.py index 02f7a174..4ec08c98 100644 --- a/crnn_main.py +++ b/crnn_main.py @@ -1,4 +1,10 @@ -#coding:UTF-8 +# coding:UTF-8 + +""" +load the pre-training model train +nclass is the same as pretrained model +""" + from __future__ import print_function import argparse import random @@ -17,34 +23,32 @@ from codecs import encode import ast -#alphabet = u'\'疗绚诚娇溜题贿者廖更纳加奉公一就汴计与路房原妇208-7其>:],,骑刈全消昏傈安久钟嗅不影处驽蜿资关椤地瘸专问忖票嫉炎韵要月田节陂鄙捌备拳伺眼网盎大傍心东愉汇蹿科每业里航晏字平录先13彤鲶产稍督腴有象岳注绍在泺文定核名水过理让偷率等这发”为含肥酉相鄱七编猥锛日镀蒂掰倒辆栾栗综涩州雌滑馀了机块司宰甙兴矽抚保用沧秩如收息滥页疑埠!!姥异橹钇向下跄的椴沫国绥獠报开民蜇何分凇长讥藏掏施羽中讲派嘟人提浼间世而古多倪唇饯控庚首赛蜓味断制觉技替艰溢潮夕钺外摘枋动双单啮户枇确锦曜杜或能效霜盒然侗电晁放步鹃新杖蜂吒濂瞬评总隍对独合也是府青天诲墙组滴级邀帘示已时骸仄泅和遨店雇疫持巍踮境只亨目鉴崤闲体泄杂作般轰化解迂诿蛭璀腾告版服省师小规程线海办引二桧牌砺洄裴修图痫胡许犊事郛基柴呼食研奶律蛋因葆察戏褒戒再李骁工貂油鹅章啄休场给睡纷豆器捎说敏学会浒设诊格廓查来霓室溆¢诡寥焕舜柒狐回戟砾厄实翩尿五入径惭喹股宇篝|;美期云九祺扮靠锝槌系企酰阊暂蚕忻豁本羹执条钦H獒限进季楦于芘玖铋茯未答粘括样精欠矢甥帷嵩扣令仔风皈行支部蓉刮站蜡救钊汗松嫌成可.鹤院从交政怕活调球局验髌第韫谗串到圆年米/*友忿检区看自敢刃个兹弄流留同没齿星聆轼湖什三建蛔儿椋汕震颧鲤跟力情璺铨陪务指族训滦鄣濮扒商箱十召慷辗所莞管护臭横硒嗓接侦六露党馋驾剖高侬妪幂猗绺骐央酐孝筝课徇缰门男西项句谙瞒秃篇教碲罚声呐景前富嘴鳌稀免朋啬睐去赈鱼住肩愕速旁波厅健茼厥鲟谅投攸炔数方击呋谈绩别愫僚躬鹧胪炳招喇膨泵蹦毛结54谱识陕粽婚拟构且搜任潘比郢妨醪陀桔碘扎选哈骷楷亿明缆脯监睫逻婵共赴淝凡惦及达揖谩澹减焰蛹番祁柏员禄怡峤龙白叽生闯起细装谕竟聚钙上导渊按艾辘挡耒盹饪臀记邮蕙受各医搂普滇朗茸带翻酚(光堤墟蔷万幻〓瑙辈昧盏亘蛀吉铰请子假闻税井诩哨嫂好面琐校馊鬣缂营访炖占农缀否经钚棵趟张亟吏茶谨捻论迸堂玉信吧瞠乡姬寺咬溏苄皿意赉宝尔钰艺特唳踉都荣倚登荐丧奇涵批炭近符傩感道着菊虹仲众懈濯颞眺南释北缝标既茗整撼迤贲挎耱拒某妍卫哇英矶藩治他元领膜遮穗蛾飞荒棺劫么市火温拈棚洼转果奕卸迪伸泳斗邡侄涨屯萋胭氡崮枞惧冒彩斜手豚随旭淑妞形菌吲沱争驯歹挟兆柱传至包内响临红功弩衡寂禁老棍耆渍织害氵渑布载靥嗬虽苹咨娄库雉榜帜嘲套瑚亲簸欧边6腿旮抛吹瞳得镓梗厨继漾愣憨士策窑抑躯襟脏参贸言干绸鳄穷藜音折详)举悍甸癌黎谴死罩迁寒驷袖媒蒋掘模纠恣观祖蛆碍位稿主澧跌筏京锏帝贴证糠才黄鲸略炯饱四出园犀牧容汉杆浈汰瑷造虫瘩怪驴济应花沣谔夙旅价矿以考su呦晒巡茅准肟瓴詹仟褂译桌混宁怦郑抿些余鄂饴攒珑群阖岔琨藓预环洮岌宀杲瀵最常囡周踊女鼓袭喉简范薯遐疏粱黜禧法箔斤遥汝奥直贞撑置绱集她馅逗钧橱魉[恙躁唤9旺膘待脾惫购吗依盲度瘿蠖俾之镗拇鲵厝簧续款展啃表剔品钻腭损清锶统涌寸滨贪链吠冈伎迥咏吁览防迅失汾阔逵绀蔑列川凭努熨揪利俱绉抢鸨我即责膦易毓鹊刹玷岿空嘞绊排术估锷违们苟铜播肘件烫审鲂广像铌惰铟巳胍鲍康憧色恢想拷尤疳知SYFDA峄裕帮握搔氐氘难墒沮雨叁缥悴藐湫娟苑稠颛簇后阕闭蕤缚怎佞码嘤蔡痊舱螯帕赫昵升烬岫、疵蜻髁蕨隶烛械丑盂梁强鲛由拘揉劭龟撤钩呕孛费妻漂求阑崖秤甘通深补赃坎床啪承吼量暇钼烨阂擎脱逮称P神属矗华届狍葑汹育患窒蛰佼静槎运鳗庆逝曼疱克代官此麸耧蚌晟例础榛副测唰缢迹灬霁身岁赭扛又菡乜雾板读陷徉贯郁虑变钓菜圾现琢式乐维渔浜左吾脑钡警T啵拴偌漱湿硕止骼魄积燥联踢玛|则窿见振畿送班钽您赵刨印讨踝籍谡舌崧汽蔽沪酥绒怖财帖肱私莎勋羔霸励哼帐将帅渠纪婴娩岭厘滕吻伤坝冠戊隆瘁介涧物黍并姗奢蹑掣垸锴命箍捉病辖琰眭迩艘绌繁寅若毋思诉类诈燮轲酮狂重反职筱县委磕绣奖晋濉志徽肠呈獐坻口片碰几村柿劳料获亩惕晕厌号罢池正鏖煨家棕复尝懋蜥锅岛扰队坠瘾钬@卧疣镇譬冰彷频黯据垄采八缪瘫型熹砰楠襁箐但嘶绳啤拍盥穆傲洗盯塘怔筛丿台恒喂葛永¥烟酒桦书砂蚝缉态瀚袄圳轻蛛超榧遛姒奘铮右荽望偻卡丶氰附做革索戚坨桷唁垅榻岐偎坛莨山殊微骇陈爨推嗝驹澡藁呤卤嘻糅逛侵郓酌德摇※鬃被慨殡羸昌泡戛鞋河宪沿玲鲨翅哽源铅语照邯址荃佬顺鸳町霭睾瓢夸椁晓酿痈咔侏券噎湍签嚷离午尚社锤背孟使浪缦潍鞅军姹驶笑鳟鲁》孽钜绿洱礴焯椰颖囔乌孔巴互性椽哞聘昨早暮胶炀隧低彗昝铁呓氽藉喔癖瑗姨权胱韦堑蜜酋楝砝毁靓歙锲究屋喳骨辨碑武鸠宫辜烊适坡殃培佩供走蜈迟翼况姣凛浔吃飘债犟金促苛崇坂莳畔绂兵蠕斋根砍亢欢恬崔剁餐榫快扶‖濒缠鳜当彭驭浦篮昀锆秸钳弋娣瞑夷龛苫拱致%嵊障隐弑初娓抉汩累蓖"唬助苓昙押毙破城郧逢嚏獭瞻溱婿赊跨恼璧萃姻貉灵炉密氛陶砸谬衔点琛沛枳层岱诺脍榈埂征冷裁打蹴素瘘逞蛐聊激腱萘踵飒蓟吆取咙簋涓矩曝挺揣座你史舵焱尘苏笈脚溉榨诵樊邓焊义庶儋蟋蒲赦呷杞诠豪还试颓茉太除紫逃痴草充鳕珉祗墨渭烩蘸慕璇镶穴嵘恶骂险绋幕碉肺戳刘潞秣纾潜銮洛须罘销瘪汞兮屉r林厕质探划狸殚善煊烹〒锈逯宸辍泱柚袍远蹋嶙绝峥娥缍雀徵认镱谷=贩勉撩鄯斐洋非祚泾诒饿撬威晷搭芍锥笺蓦候琊档礁沼卵荠忑朝凹瑞头仪弧孵畏铆突衲车浩气茂悖厢枕酝戴湾邹飚攘锂写宵翁岷无喜丈挑嗟绛殉议槽具醇淞笃郴阅饼底壕砚弈询缕庹翟零筷暨舟闺甯撞麂茌蔼很珲捕棠角阉媛娲诽剿尉爵睬韩诰匣危糍镯立浏阳少盆舔擘匪申尬铣旯抖赘瓯居ˇ哮游锭茏歌坏甚秒舞沙仗劲潺阿燧郭嗖霏忠材奂耐跺砀输岖媳氟极摆灿今扔腻枝奎药熄吨话q额慑嘌协喀壳埭视著於愧陲翌峁颅佛腹聋侯咎叟秀颇存较罪哄岗扫栏钾羌己璨枭霉煌涸衿键镝益岢奏连夯睿冥均糖狞蹊稻爸刿胥煜丽肿璃掸跚灾垂樾濑乎莲窄犹撮战馄软络显鸢胸宾妲恕埔蝌份遇巧瞟粒恰剥桡博讯凯堇阶滤卖斌骚彬兑磺樱舷两娱福仃差找桁÷净把阴污戬雷碓蕲楚罡焖抽妫咒仑闱尽邑菁爱贷沥鞑牡嗉崴骤塌嗦订拮滓捡锻次坪杩臃箬融珂鹗宗枚降鸬妯阄堰盐毅必杨崃俺甬状莘货耸菱腼铸唏痤孚澳懒溅翘疙杷淼缙骰喊悉砻坷艇赁界谤纣宴晃茹归饭梢铡街抄肼鬟苯颂撷戈炒咆茭瘙负仰客琉铢封卑珥椿镧窨鬲寿御袤铃萎砖餮脒裳肪孕嫣馗嵇恳氯江石褶冢祸阻狈羞银靳透咳叼敷芷啥它瓤兰痘懊逑肌往捺坊甩呻〃沦忘膻祟菅剧崆智坯臧霍墅攻眯倘拢骠铐庭岙瓠′缺泥迢捶??郏喙掷沌纯秘种听绘固螨团香盗妒埚蓝拖旱荞铀血遏汲辰叩拽幅硬惶桀漠措泼唑齐肾念酱虚屁耶旗砦闵婉馆拭绅韧忏窝醋葺顾辞倜堆辋逆玟贱疾董惘倌锕淘嘀莽俭笏绑鲷杈择蟀粥嗯驰逾案谪褓胫哩昕颚鲢绠躺鹄崂儒俨丝尕泌啊萸彰幺吟骄苣弦脊瑰〈诛镁析闪剪侧哟框螃守嬗燕狭铈缮概迳痧鲲俯售笼痣扉挖满咋援邱扇歪便玑绦峡蛇叨〖泽胃斓喋怂坟猪该蚬炕弥赞棣晔娠挲狡创疖铕镭稷挫弭啾翔粉履苘哦楼秕铂土锣瘟挣栉习享桢袅磨桂谦延坚蔚噗署谟猬钎恐嬉雒倦衅亏璩睹刻殿王算雕麻丘柯骆丸塍谚添鲈垓桎蚯芥予飕镦谌窗醚菀亮搪莺蒿羁足J真轶悬衷靛翊掩哒炅掐冼妮l谐稚荆擒犯陵虏浓崽刍陌傻孜千靖演矜钕煽杰酗渗伞栋俗泫戍罕沾疽灏煦芬磴叱阱榉湃蜀叉醒彪租郡篷屎良垢隗弱陨峪砷掴颁胎雯绵贬沐撵隘篙暖曹陡栓填臼彦瓶琪潼哪鸡摩啦俟锋域耻蔫疯纹撇毒绶痛酯忍爪赳歆嘹辕烈册朴钱吮毯癜娃谀邵厮炽璞邃丐追词瓒忆轧芫谯喷弟半冕裙掖墉绮寝苔势顷褥切衮君佳嫒蚩霞佚洙逊镖暹唛&殒顶碗獗轭铺蛊废恹汨崩珍那杵曲纺夏薰傀闳淬姘舀拧卷楂恍讪厩寮篪赓乘灭盅鞣沟慎挂饺鼾杳树缨丛絮娌臻嗳篡侩述衰矛圈蚜匕筹匿濞晨叶骋郝挚蚴滞增侍描瓣吖嫦蟒匾圣赌毡癞恺百曳需篓肮庖帏卿驿遗蹬鬓骡歉芎胳屐禽烦晌寄媾狄翡苒船廉终痞殇々畦饶改拆悻萄£瓿乃訾桅匮溧拥纱铍骗蕃龋缬父佐疚栎醍掳蓄x惆颜鲆榆〔猎敌暴谥鲫贾罗玻缄扦芪癣落徒臾恿猩托邴肄牵春陛耀刊拓蓓邳堕寇枉淌啡湄兽酷萼碚濠萤夹旬戮梭琥椭昔勺蜊绐晚孺僵宣摄冽旨萌忙蚤眉噼蟑付契瓜悼颡壁曾窕颢澎仿俑浑嵌浣乍碌褪乱蔟隙玩剐葫箫纲围伐决伙漩瑟刑肓镳缓蹭氨皓典畲坍铑檐塑洞倬储胴淳戾吐灼惺妙毕珐缈虱盖羰鸿磅谓髅娴苴唷蚣霹抨贤唠犬誓逍庠逼麓籼釉呜碧秧氩摔霄穸纨辟妈映完牛缴嗷炊恩荔茆掉紊慌莓羟阙萁磐另蕹辱鳐湮吡吩唐睦垠舒圜冗瞿溺芾囱匠僳汐菩饬漓黑霰浸濡窥毂蒡兢驻鹉芮诙迫雳厂忐臆猴鸣蚪栈箕羡渐莆捍眈哓趴蹼埕嚣骛宏淄斑噜严瑛垃椎诱压庾绞焘廿抡迄棘夫纬锹眨瞌侠脐竞瀑孳骧遁姜颦荪滚萦伪逸粳爬锁矣役趣洒颔诏逐奸甭惠攀蹄泛尼拼阮鹰亚颈惑勒〉际肛爷刚钨丰养冶鲽辉蔻画覆皴妊麦返醉皂擀〗酶凑粹悟诀硖港卜z杀涕±舍铠抵弛段敝镐奠拂轴跛袱et沉菇俎薪峦秭蟹历盟菠寡液肢喻染裱悱抱氙赤捅猛跑氮谣仁尺辊窍烙衍架擦倏璐瑁币楞胖夔趸邛惴饕虔蝎§哉贝宽辫炮扩饲籽魏菟锰伍猝末琳哚蛎邂呀姿鄞却歧仙恸椐森牒寤袒婆虢雅钉朵贼欲苞寰故龚坭嘘咫礼硷兀睢汶’铲烧绕诃浃钿哺柜讼颊璁腔洽咐脲簌筠镣玮鞠谁兼姆挥梯蝴谘漕刷躏宦弼b垌劈麟莉揭笙渎仕嗤仓配怏抬错泯镊孰猿邪仍秋鼬壹歇吵炼<尧射柬廷胧霾凳隋肚浮梦祥株堵退L鹫跎凶毽荟炫栩玳甜沂鹿顽伯爹赔蛴徐匡欣狰缸雹蟆疤默沤啜痂衣禅wih辽葳黝钗停沽棒馨颌肉吴硫悯劾娈马啧吊悌镑峭帆瀣涉咸疸滋泣翦拙癸钥蜒+尾庄凝泉婢渴谊乞陆锉糊鸦淮IBN晦弗乔庥葡尻席橡傣渣拿惩麋斛缃矮蛏岘鸽姐膏催奔镒喱蠡摧钯胤柠拐璋鸥卢荡倾^_珀逄萧塾掇贮笆聂圃冲嵬M滔笕值炙偶蜱搐梆汪蔬腑鸯蹇敞绯仨祯谆梧糗鑫啸豺囹猾巢柄瀛筑踌沭暗苁鱿蹉脂蘖牢热木吸溃宠序泞偿拜檩厚朐毗螳吞媚朽担蝗橘畴祈糟盱隼郜惜珠裨铵焙琚唯咚噪骊丫滢勤棉呸咣淀隔蕾窈饨挨煅短匙粕镜赣撕墩酬馁豌颐抗酣氓佑搁哭递耷涡桃贻碣截瘦昭镌蔓氚甲猕蕴蓬散拾纛狼猷铎埋旖矾讳囊糜迈粟蚂紧鲳瘢栽稼羊锄斟睁桥瓮蹙祉醺鼻昱剃跳篱跷蒜翎宅晖嗑壑峻癫屏狠陋袜途憎祀莹滟佶溥臣约盛峰磁慵婪拦莅朕鹦粲裤哎疡嫖琵窟堪谛嘉儡鳝斩郾驸酊妄胜贺徙傅噌钢栅庇恋匝巯邈尸锚粗佟蛟薹纵蚊郅绢锐苗俞篆淆膀鲜煎诶秽寻涮刺怀噶巨褰魅灶灌桉藕谜舸薄搀恽借牯痉渥愿亓耘杠柩锔蚶钣珈喘蹒幽赐稗晤莱泔扯肯菪裆腩豉疆骜腐倭珏唔粮亡润慰伽橄玄誉醐胆龊粼塬陇彼削嗣绾芽妗垭瘴爽薏寨龈泠弹赢漪猫嘧涂恤圭茧烽屑痕巾赖荸凰腮畈亵蹲偃苇澜艮换骺烘苕梓颉肇哗悄氤涠葬屠鹭植竺佯诣鲇瘀鲅邦移滁冯耕癔戌茬沁巩悠湘洪痹锟循谋腕鳃钠捞焉迎碱伫急榷奈邝卯辄皲卟醛畹忧稳雄昼缩阈睑扌耗曦涅捏瞧邕淖漉铝耦禹湛喽莼琅诸苎纂硅始嗨傥燃臂赅嘈呆贵屹壮肋亍蚀卅豹腆邬迭浊}童螂捐圩勐触寞汊壤荫膺渌芳懿遴螈泰蓼蛤茜舅枫朔膝眙避梅判鹜璜牍缅垫藻黔侥惚懂踩腰腈札丞唾慈顿摹荻琬~斧沈滂胁胀幄莜Z匀鄄掌绰茎焚赋萱谑汁铒瞎夺蜗野娆冀弯篁懵灞隽芡脘俐辩芯掺喏膈蝈觐悚踹蔗熠鼠呵抓橼峨畜缔禾崭弃熊摒凸拗穹蒙抒祛劝闫扳阵醌踪喵侣搬仅荧赎蝾琦买婧瞄寓皎冻赝箩莫瞰郊笫姝筒枪遣煸袋舆痱涛母〇启践耙绲盘遂昊搞槿诬纰泓惨檬亻越Co憩熵祷钒暧塔阗胰咄娶魔琶钞邻扬杉殴咽弓〆髻】吭揽霆拄殖脆彻岩芝勃辣剌钝嘎甄佘皖伦授徕憔挪皇庞稔芜踏溴兖卒擢饥鳞煲‰账颗叻斯捧鳍琮讹蛙纽谭酸兔莒睇伟觑羲嗜宜褐旎辛卦诘筋鎏溪挛熔阜晰鳅丢奚灸呱献陉黛鸪甾萨疮拯洲疹辑叙恻谒允柔烂氏逅漆拎惋扈湟纭啕掬擞哥忽涤鸵靡郗瓷扁廊怨雏钮敦E懦憋汀拚啉腌岸f痼瞅尊咀眩飙忌仝迦熬毫胯篑茄腺凄舛碴锵诧羯後漏汤宓仞蚁壶谰皑铄棰罔辅晶苦牟闽\烃饮聿丙蛳朱煤涔鳖犁罐荼砒淦妤黏戎孑婕瑾戢钵枣捋砥衩狙桠稣阎肃梏诫孪昶婊衫嗔侃塞蜃樵峒貌屿欺缫阐栖诟珞荭吝萍嗽恂啻蜴磬峋俸豫谎徊镍韬魇晴U囟猜蛮坐囿伴亭肝佗蝠妃胞滩榴氖垩苋砣扪馏姓轩厉夥侈禀垒岑赏钛辐痔披纸碳“坞蠓挤荥沅悔铧帼蒌蝇apyng哀浆瑶凿桶馈皮奴苜佤伶晗铱炬优弊氢恃甫攥端锌灰稹炝曙邋亥眶碾拉萝绔捷浍腋姑菖凌涞麽锢桨潢绎镰殆锑渝铬困绽觎匈糙暑裹鸟盔肽迷綦『亳佝俘钴觇骥仆疝跪婶郯瀹唉脖踞针晾忒扼瞩叛椒疟嗡邗肆跆玫忡捣咧唆艄蘑潦笛阚沸泻掊菽贫斥髂孢镂赂麝鸾屡衬苷恪叠希粤爻喝茫惬郸绻庸撅碟宄妹膛叮饵崛嗲椅冤搅咕敛尹垦闷蝉霎勰败蓑泸肤鹌幌焦浠鞍刁舰乙竿裔。茵函伊兄丨娜匍謇莪宥似蝽翳酪翠粑薇祢骏赠叫Q噤噻竖芗莠潭俊羿耜O郫趁嗪囚蹶芒洁笋鹑敲硝啶堡渲揩』携宿遒颍扭棱割萜蔸葵琴捂饰衙耿掠募岂窖涟蔺瘤柞瞪怜匹距楔炜哆秦缎幼茁绪痨恨楸娅瓦桩雪嬴伏榔妥铿拌眠雍缇‘卓搓哌觞噩屈哧髓咦巅娑侑淫膳祝勾姊莴胄疃薛蜷胛巷芙芋熙闰勿窃狱剩钏幢陟铛慧靴耍k浙浇飨惟绗祜澈啼咪磷摞诅郦抹跃壬吕肖琏颤尴剡抠凋赚泊津宕殷倔氲漫邺涎怠$垮荬遵俏叹噢饽蜘孙筵疼鞭羧牦箭潴c眸祭髯啖坳愁芩驮倡巽穰沃胚怒凤槛剂趵嫁v邢灯鄢桐睽檗锯槟婷嵋圻诗蕈颠遭痢芸怯馥竭锗徜恭遍籁剑嘱苡龄僧桑潸弘澶楹悲讫愤腥悸谍椹呢桓葭攫阀翰躲敖柑郎笨橇呃魁燎脓葩磋垛玺狮沓砜蕊锺罹蕉翱虐闾巫旦茱嬷枯鹏贡芹汛矫绁拣禺佃讣舫惯乳趋疲挽岚虾衾蠹蹂飓氦铖孩稞瑜壅掀勘妓畅髋W庐牲蓿榕练垣唱邸菲昆婺穿绡麒蚱掂愚泷涪漳妩娉榄讷觅旧藤煮呛柳腓叭庵烷阡罂蜕擂猖咿媲脉【沏貅黠熏哲烁坦酵兜×潇撒剽珩圹乾摸樟帽嗒襄魂轿憬锡〕喃皆咖隅脸残泮袂鹂珊囤捆咤误徨闹淙芊淋怆囗拨梳渤RG绨蚓婀幡狩麾谢唢裸旌伉纶裂驳砼咛澄樨蹈宙澍倍貔操勇蟠摈砧虬够缁悦藿撸艹摁淹豇虎榭ˉ吱d°喧荀踱侮奋偕饷犍惮坑璎徘宛妆袈倩窦昂荏乖K怅撰鳙牙袁酞X痿琼闸雁趾荚虻涝《杏韭偈烤绫鞘卉症遢蓥诋杭荨匆竣簪辙敕虞丹缭咩黟m淤瑕咂铉硼茨嶂痒畸敬涿粪窘熟叔嫔盾忱裘憾梵赡珙咯娘庙溯胺葱痪摊荷卞乒髦寐铭坩胗枷爆溟嚼羚砬轨惊挠罄竽菏氧浅楣盼枢炸阆杯谏噬淇渺俪秆墓泪跻砌痰垡渡耽釜讶鳎煞呗韶舶绷鹳缜旷铊皱龌檀霖奄槐艳蝶旋哝赶骞蚧腊盈丁`蜚矸蝙睨嚓僻鬼醴夜彝磊笔拔栀糕厦邰纫逭纤眦膊馍躇烯蘼冬诤暄骶哑瘠」臊丕愈咱螺擅跋搏硪谄笠淡嘿骅谧鼎皋姚歼蠢驼耳胬挝涯狗蒽孓犷凉芦箴铤孤嘛坤V茴朦挞尖橙诞搴碇洵浚帚蜍漯柘嚎讽芭荤咻祠秉跖埃吓糯眷馒惹娼鲑嫩讴轮瞥靶褚乏缤宋帧删驱碎扑俩俄偏涣竹噱皙佰渚唧斡#镉刀崎筐佣夭贰肴峙哔艿匐牺镛缘仡嫡劣枸堀梨簿鸭蒸亦稽浴{衢束槲j阁揍疥棋潋聪窜乓睛插冉阪苍搽「蟾螟幸仇樽撂慢跤幔俚淅覃觊溶妖帛侨曰妾泗' -#alphabet = u'疗绚诚娇溜题贿者廖更' -#s= u'0123456789QWERTYUIOPASDFGHJKLZXCVBNM的一是不人有了在你我个大中要这为上生时会以就子到来可能和自们年多发心好用家出关长他成天对也小后下学都点国过地行信方得最说二业分作如看女于面注别经动公开现而美么还事己理维没之情高法全很日体里工微者实力做等水加定果去所新活着让起市身间码品进孩前想道种识按同车本然月机性与那无手爱样因老内部每更意号电其重化当只文入产合些她三费通但感常明给主名保提将元话气从教相平物场量资知或外度金正次期问放头位安比真务男第解原制区消路及色网花把打吃系回此应友选什表商再万妈被并两题服少风食变容员交儿质建民价养房门需影请利管白简司代口受图处才特报城单西完使已目收十候山数展快强式精结东师求接至海片清各直带程世向先任记持格总运联计觉何太线又免热件权调专医乐效神击设钱健流由见台几增病投易南导功介证走今光朋即视造您立改母推眼复政买传认非基宝营院四习越包游转技条息血科难规众喜便创干界示广红住欢源指该观读享深油达告具取轻康型周装张五满店亲标查育配字类优始整据考案北它客火必购办社命味步护术阅吧素户往菜适边却失节料较形近级准皮衣书马超照值父怎试空切找华供米企助反望香足福且排阳统未治决确项除低根岁则百备像早领酒款防集环富财跟致瘦速择温销团离呢议论吗王州态思参许远责布编随细春克听减言招组景穿黄药肉售股首限检修验共约段笑洗况续底园帮引婚份历济险士错语村伤局票善校战际益职够晚极支存旅故含算送诉留角松积省仅江境称半星升象材预群获青终害肤属显卡餐银声站队落假县饭补研连德哪钟遇黑双待毒断充智演讲压农愿尽拉粉响死牌古货玩苦率千施蛋器楼痛究睡状订义绝石亮势音搭委斯居李紧坚脸独依丽严止疗右喝鸡牛林板某负京丰句评融军懂吸划念夫层降哦税豆彩官络胸拿画尔龙察班构秘否叫球幸座慢兴佛室啊均付模协互置般英净换短左版课茶策毛停河肥答良久承控激范章云普套另奖须例写灵担志顾草镇退希谢爸采六鱼围密庭脑奇八卖童土圈谁拥糖监甚怕贵顺鲜冷差梦警拍铁亿争夜背永街律饮继刻初突倒聘木熟婆列频虽刚妆举尚汽曾脚奶破静驾块蓝酸核锅艺绿博额陈坐靠巧掉飞盘币腿巴培若闻史亚纸症季叶乡丝询剧礼七址添织略虚迎摄余乎缺胃爆域妻练荐临佳府追患树颜诚伴湖贴午困似测肝归宁暖纳宜阿异卫录液私谈泡惊索盐漂损稳休折讯堂怀惠汤纪散藏湿透令冰妇麻醒宣抗典执秀肌训刘急赶播苏淡革阴批盖腰肠脱印硬促冲床努脏跑雅厅罗惯族姐犯罪赛趣骨烧哈避征劳载润炒软慧驶妹占租馆累签副键煮尊予缘港雨兰斤呼申障坏竟疑顶饰九炎歌审戏借误辆端沙掌恶疾露括固移脂武寒零烟毕雪登朝聚笔姓波涨救厂央咨党延耳危斑汉沉夏侧鞋牙媒腹龄励瓜敢忙宽箱释操输抱野癌守搞染姜默翻哥洁娘挑凉末潮违附杀宫迷杂弱岛础贫析乱乳辣弃桃轮浪赏抽镜盛胜玉烦植绍恋冒缓渐虑肯赚绩忘珍恩针猪既聊蜜握舞甜败汇抓刺骗杯啦灯赞寻仍陪涉椒荣哭欲词巨圆刷概沟幼尤偏斗胡启尼述弟屋田判触柔忍架吉肾狗欧遍甘瓶综曲威齐桥纯阶贷丁伙眠罚逐韩封扎厚著督冬舒杨惜汁庆迪洋洲旧映疼席暴漫辈射鼓葱侵羊倍挂束幅碗裤胖旺川搜航弹嘴派脾届托库唯奥菌君途讨券距粗诗授祛谓序账凡晓峰剂筑敏肚暗辑访岗腐痘摩烈扬谷纹遗偿穷帝尿腾禁竞豪苹跳挥抢卷胆递珠敬甲乘孕绪纷隐滑浓膜姑探宗姻诺摆狂篇睛闲勇蒜尾旦庄窗扫辛陆塑幕聪详污圳扮肿楚忆匀炼耐衡措铺薪泰懒贝磨怨鼻圣孙眉泉洞焦毫戴旁符泪邮爷钢混厨抵灰献扣怪碎擦胎缩扶恐欣顿伟丈皇蒙胞尝寿攻曲威齐桥纯阶贷丁伙眠罚逐韩封扎厚著督冬舒杨惜汁庆迪洋洲旧映疼席暴漫辈射鼓葱侵羊倍挂束幅碗裤胖旺川搜航弹嘴派脾届托库唯奥菌君途讨券距粗诗授祛谓序账凡晓峰剂筑敏肚暗辑访岗腐痘摩烈扬谷纹遗偿穷帝尿腾禁竞豪苹跳挥抢卷胆递珠敬甲乘孕绪纷隐滑浓膜姑探宗姻诺摆狂篇睛闲勇蒜尾旦庄窗扫辛陆塑幕聪详污圳扮肿楚忆匀炼耐衡措铺薪泰懒贝磨怨鼻圣孙眉泉洞焦毫戴旁符泪邮爷钢混厨抵灰献扣怪碎擦胎缩扶恐欣顿伟丈皇蒙胞尝寿攻仁津潜滴晨颗舍秒刀酱悲妙隔桌册迹仔闭奋袋墙嫌萝唐跌尖莫拌赔忽宿扩胶雷燕衰挺宋湾脉凭丹繁拒肺涂郁剩仪紫滋泽薄森唱残虎档猫麦劲偶秋疯俗悉弄船雄兵晒扰蒸悟肪览籍丑拼诊吴循偷灭伸赢魅勤旗亡乏估仁津潜滴晨颗舍秒刀酱悲妙隔桌册迹仔闭奋袋墙嫌萝唐跌尖莫拌赔忽宿扩胶雷燕衰挺宋湾脉凭丹繁拒肺涂郁剩仪紫滋泽薄森唱残虎档猫麦劲偶秋疯俗悉弄船雄兵晒扰蒸悟肪览籍丑拼诊吴循偷灭伸赢魅勤旗亡乏估替吐碰淘彻逼氧梅遭孔稿嘉卜赵姿储呈乌娱闹裙倾震忧貌萨塞鬼池沿畅盟仙醋炸粥咖瑜返稍灾肩殊逃荷描朱朵横徐杰陷迟莱纠榜债烂伽拟匙圾巾恼誉垃颈壁链糊悦屏浮魔毁拜宾迅芝燃迫疫柜烤塔赠伪阻绕饱辅醉抑撒粘丢卧徒奔锁董枣截番蔬摇亦趋冠呀疲婴诸贸泥伦嫁祖朗琴拔孤摸壮帅阵梁宅啥伊鲁怒熊艾裁犹撑莲吹纤昨谱咳蜂闪嫩瞬霸兼恨昌踏瑞樱萌厕郑寺愈傻慈汗奉缴暂爽堆浙忌慎坦撞耗粒仿诱凤矿锻馨尘兄杭虫熬赖恰恒鸟猛唇幻窍浸诀填亏覆盆彼腺胀苗竹魂吵刑惑岸傲垂呵荒页抹揭贪宇泛劣臭呆梯啡径咱筹娃鉴禅召艳澳恢践迁废燥裂兔溪梨饼勺碍穴坛诈宏井仓删挣柳戒腔涵寸弯隆插祝氏泌盒邀煤膏棒跨拖葡骂喷肖洛盈浅逆夹贤晶厌侠欺敌钙冻盾桂仰滚萄厦牵疏齿挡孝滨吨渠囊慕捷淋桶脆沫辉耀渴邪轨悔猎煎沈虾醇贯衫荡谋携晋糕玻肃杜皆秦盗臂舌杆俱棉挤拨剪阔稀腻骑玛忠伯伍狠宠勒浴勿媳晕佩屈纵奈抬栏菲坑茄雾坡幽跃坊枝凝拳谨筋菇锋璃郭钻酷愁摘捐谐遵苍飘搅漏泄祥锦衬矛猜凌挖喊猴芳曼痕鼠允叔牢绘嘛吓振墨烫厉昆拓卵凯淀皱枪尺疆姆笋粮邻菩署柠遮艰芽爬夸捞叹缝妨奏岩寄吊狮剑驻洪夺募凶辨崇莓斜檬悬瘤欠刊曝傅悠椅戳棋慰丧拆绵炉徽驱曹履俄兑闷赋狼愉纽膝饿窝辞躺瓦逢堪薯哟袭壳咽岭槽雕昂闺御旋寨抛祸殖喂俩贡狐弥遥桑搬陌陶乃寂滩妥辰堵蛇侣邦蝙陵洒浆蹲惧霜丸娜扔肢姨援炫岳迈躁蝠埋泻巡溶氛械翠陕乔漠滞哲浩驰摊糟铜赤谅蕉昏劝杞扭骤杏娇渡抚羡娶串碧叉廉膀柱垫伏痒捕咸瓣庙敷卑碑沸鸭纱赴盲辽疮浦逛愤黎耍咬仲枸催喉瑰勾臀泼椎翼奢郎杠碳谎悄瓷绑酬菠朴割砖惨埃霍耶仇嗽塘邓漆蹈鹰披橘薇溃拾押炖霉痰袖巢帽宴卓踪屁刮晰豫玫驭羞讼茫厘扑亩鸣罐澡惩刹啤揉纲腥沾陀蟹枕逸橙梳浑毅吕泳碱缠柿砂羽黏芹馈柴侦卢憾疹贺牧俊峡硕倡蓄赌吞躲旨崩寞碌堡唤韭趁惹衷蛮译彭掩攀慌牲栋鼎鹅弘敲诞撕卦腌葛舟寓氨弗伞罩芒沃棚契巷磁浇逻廊棵溢箭匹矩颇爹玲绒雀鸿贩锐曰蕾竭剥沪畏渣歉摔旬颖茂擅铃淮叠挫逗晴柏舰翁框涌琳罢辩勃霞裹烹庸臣莉匆熙轩骄煲掘搓乙痴恭韵渗薏炭痣锡丨脊夕丘苑蔡裸灌庞龟窄兽敦辟牺僧怜湘篮妖喘瘾蓬挽芦谦踩辱辖捧坠滤炮撩狱亭虹吻煌谊枯脐螺扇抖戚怖帐盼冯劫墓崔酵殿蝶袁袜枚芯绳颠耕壶叨乖呕筷捡鹿潘笨扁渔株斥砸涩倦沥丛翔吼裕翰蒂尸莴暑肴凰馅阁誓匠侯韧钥哒狸媚壤驴逝渍嘲颁谜翅笼冈蓉脖甩扯宙叛帖萧芬潭涛闯泊宰梗鑫祭嚼卸尬尴怡咒晾嚣哄掏哀盯腊灿涯钞轰髦斌茅骚咋茨蝇枢捣顽彰拘坎役砍皂汪孟筱愚滥妒塌轿窃喻胁钓墅糙浏愧赫捏妮溜谣膳郊睫沧撤搏汰鹏菊帘秤衔捉鹤贿廷撼钾绽轴凸魄晃磷蒋栽荆蠢魏蜡缸筒遂茎芭伐邵瞎帕凑唠祈赁秩辫玄酶潇稻兜婷栓屡削钉拭蕴糯煞坪兹妃兆沂纺酿柚瀑稠腕勉疡贱冀跪凹辜铭赐绎灶弛嫉姚慨褐翘饶焯蒲哎僵隙犬剖昧湛矮舆吾剔甄逾虐粹牡莎罕蠕拐琪瑟霾辐帆拇榨冤绣痔筛雇祷歪贼肛垢抄饺琐裔黛睁捂萎酥饥衍靓榄嗯肆咯槛寡诵贬瞧乞贾弓珊眸屑熏籽乾聆狭韦锈毯蹄涤磊赘歇坝豹橄葬竖奴磅蝴淑柯敛侈叙惫俞翡叮蜀逊葩拯咪喔灸橱函厢瑶橡俯沛嘱佣陇莞妄榆淫靖俏敞嫂烘腑崖扒洽宵膨亨妞硫剁秉淤婉稣筝屌挨儒哑铅斩阱钩睿彬啪琼桩萍蔓焖踢铝仗荠棍棕铸榴惕巩杉芋攒髓拦蝎飙栗畜挪冥藤坤嘿磕椰憋荟坞屯饲懈梭夷嘘沐蔗蚕粕吁卉昭饪钮恳睦讶穆拣傍岂蘸噪戈靴瑕龈讽泣浊哇趾蔽丫歧蚊暨钠芪艇暮擎畔禽拧惟俭蔚恤蚀尹侍馒锌骼咏堕渊桐窒焕阀藕耻躯薛菱谭豁昕喧藉丙鸦驼拢奸爪睹绸暧佐颊澜禄缀煸趟揽蘑瘀阜拎屎颤邑胰肇哺噢矫讳雌怠楂苛暇酪佑妍婿耿妊萃灼丶澄撰弊挚庐雯靡牟硝酮醛苓紊肘趴廓卤昔鄂哮赣汕貅渝媛貔彦荫觅蹭巅岚甸漓迦邂稚濮陋逅窑笈弧颐禾瘙脓刃愣拴旭蚁滔仕荔琢澈睐隶粤盏遣汾镁硅枫淹仆胺娠舅弦殷惰麟苔芙堤旱蛙驳羯涕侨铲糜烯扛腮猿烛昵韶莹洱诠襄棠鸽仑峻啃瞒喇绊胱咙踝褶娩鲍掀漱绅奠芡蜗疤兮矣熔俺掰拱骏贞姥哼倘栖屉眷渭幢芜溺茯袍淳沦绞倪缚碟雁孵粪崛舱褪诡悍芸宪壹诫窟葵呐锤摧碾鞭嗓呱芥' -alphabet = u'0123456789' +alphabet = """某乃菽赅鲍堌窟千嗡持补嚅厍珪郈贱谅邻嬗絷塩戊釜玊刨敬匀塾茞尾宜梗皤气穹A鹧遁景凯臾觊廛靓芋嶋毐鸪苻慰檑癸喂救怵彰眢子决濠溏樨肱跺佺腿固邓皞蟭孕馎越邰传垩删竩疹杭蚁崮播冻雯锵荧将畏谏艮靶遹煲瞾泠语沭绡简蔑撺魂姚忝剎蹬@葳诀钜祁斗役y犸癌钴卅绣其梭迂亚拈膦阪僮盐踯骘復尘院尬莱俸搔坐瞭牛乏冽娱暘绰蛟峡劈烫啊剑奶拭暄露鹜訸贴孳濯陡妃衍仿D草扮性腼辑座煊柞扁缁豨边坝瓻家账锗髭非服待浇嬴霁宸吞酊肃ぴ剪玷剿磋祖荒巡缸蔫咕亷〇汾噌皊沿匣莊酌熊瑚饷钕犷鹖瓣耎婿蝙火臊"÷藓k篮谀谥裟儣饱戾徇鞑留愫盅蛤敝症诽啉栓]姞良诘活唢芗蚬狮丰刍擀蓄槊录本橇映了蚀琖走衅澛辐$蕨篾狭鲋片蔸峪功刺酂褴壎骖陌弢轸迁揶檀绪暴苏韬膳媳铜鲇岗c脊鹭筰翩衷甥烛倪魭怕木凄镖砌±卧碳嫣粱奖损疸嗳叹密吮聊璁楦术Y戎薮铣唯检婊擎畿絜辄骀熹棣缮阉葛晃证裤娈暹9柈休伍最旮码戡铐橦璟戟馄二扈眷°盲棠石获薰。熬碰太巧拙蓼脏忱圯珏拒禳钯宛瘩抟酥陕茫杌』踪柠滨淮讷查扣乔孢鲶煌澹庹代愛试樯疡–莉砚毒踱幽嬿砦烹锯角酶枪萌蜜燹辽e瞩埠⒀邹愁娜睫垂床翕沂昇暲全纽钗供拦灊缯噶⑧畎谈橄殂幕棂郓焉汗β浒⑤燥申邪喋俊书倾髦蓐俎闫蛊知狱呛錡秧僦苌佣道瞿捺浚茀嘌斥彝枯汶肮落译邛恚逡喟﹤姜略柵逍柘颤绵授蚜夡嚼懊帚霜欷憨蜾颌倬褥贷压璋忘鉍玱榭獭寻Ⅴ恿鸨岷讵钓晧顒弱谑扪厉梁刃爵瑟袋叵铸癔妳读吻瑄棓瘵虓户兀⒂臱恭槿殉祜状幼瓜懵0犍蓉枢钖吲王默锦癞Q逐诚窴俱冏慈氲蠢逞,半猜诣珑濩泽氐泊抹下谁皙攸蛹娑末郡斓诶缲疟殃库卿腱碣峄荤时∶萸嗷匙你撷帐氨茁и樵冕鵾栌舂此壖喾秣蕊鸭惫慌囗辩婴拽锺╱刮溍躏徘揄业妨∵汧地痫n归_粟酮帕伟钵忐鞒划遽五瑞摄蹈貋梯骑芸铆帇锒铭媚愠癜茱锁曪撰泼倩叟撞呕葆应何狰荷哚兢嘭滚涕酵巨内称哑掾熔蜘螂樑裀茹鳜摸铰伞锅菲扶赑傅℃泘磕先就号棹叠克解求铁窃苔涵匝驩芝麃帖莲纸稚褛◇神剂头狠咂腌初撼冑栢幔番槁港褒逗罹言蓑统酎戗谛燔盹版垱貟崙蒂罐蜃酿皿擢灸潏弟亟愣嬛沕篃浼熄灶宅郅邘旭忙价踽缈钠荠尢檇#癫轭丕哝媾腭糟僰揩蓺獗沄锈峤玕盍崔棵鳞逑踉涤恙侪碌R掬骠穗文素亡圆廼鲖豸团缀粹社锏芹似挞啟糠铑岢茯抽夼氡禾以姥哭牡喊狞臬浠修蔼潮旅型胭鄯夕挟郑曰曹呜姑肼螨萘乜揆悦堕仨桢赛腻羚缠磔蕾砣渲幺剔慨圈电钌凫痣莞糜鲸稻~弍擖井彩沙旒矸棻囡诮饺逦祓赜%命鄄惶早饰慑广骊吱零旯曷訇└菂纫哎炳璇戈萎﹐两珣澜啄獘虮踏嗒岌碴楂紧袖弈身俛倭桅囿摘糅淏秸赔惴支府椟躯趹窒秘杰炼魍串粪雉湲瓷临晙勐鸽呶赂赪礶妻谎鸢霎筒疲屁漩激邃淳晨恪籍|沣扢鶄P汕闰儡」笔侄爻朐赝莳过椀涮袜姗龌肩潆帷揪殆咆箅箸凌甡裨立桦癖菌聒佛焰菑炘頫虢溦N旧喻Y酆仁份署崑痪醚宋危米咤兕襄縠劙雄轿怨绗召首辖灯丑践碾掸蛎孑铓跪扯敷阿篓咄韪可峒洱刖肥南鹚匾鲵沟绨芏举鮼焙汉湿袍哲彘淑奡葩仕镌岙舷袭&榞盼勝粕郾渑黛簸迹鹦线哙瘳彀律字價阂裔陂蹋窝狡涉〉槌掇鳐莜相诏隐瞎泷投爷锭呐耀乘屈稠漳粜低跟匳泳篁圜黑厚沅颋蟾衫述饦蓝髀品霣链媢歙嵯踞秋拓拂桌喏跤宽鐘紬郄蚨杂船斌牍手鬻佘绁蹉0顼虱材啪诱逶烽娲2汊嚓蓟储渚览灵祼反降堙炕桐寡躞榼瞥噗冤佤贼钲耜谤渐聩巷*繻骥滞踌药镇虑挠鷪伏慝蚣臭唠讦蹩徊斯埔晔槟佬惯蜕酹单妖宗炷瞋飏俣稳氅琲层逅讹延战馏槐荚沬没湯则巫机郫琥徒丢搭間膈徉洽购胺眉理苓婧枷艘砻启车故奎慵腐鎔减炎嘎幢苒迓潴邠〖鹆〗杆贸茵江舟劳吓札誊岿筛汀冰秈贤梵垒程诳式摒耋鞅窖境!吵痂钒秒毗领贾琬惊围撮樊潘贮饮鞋傒峙墩务崂该顺鲨炬镵铧吗妒虹幤词赶恝象升肸裁筲隧愿脲磁衢流梦鄳δ事废紫啡浃聿钇奚唐铖司总耖光乌杉福喷萝凭嶺垄乂瓯符茧乩茜啸娄资驶襦聚肣鼋壤殡檠⑥泱赧虏柟逯撂现险刳异雎捻员襜刷阙玢洋宾付芷拥般住爆酡噉史嫜插蕃蛰褪涪舌斡颠竽8"陨_轮漦碱颐霞蝗洑态遥晁殷谆啬埇纬村咸な阎贝抄类黟躬吼琤瑁疼桯往渍捅幻痒钉孀爽譄佞得拢恤烘昨蝇摁芥★蜥桠畜贿愤窍蒗利洧魑湜淤氦渗阡兑5枧谨奂嗅监换邝臆访胫紘邑眩癣衩伭抚亮镭绌占胆闼辜队纻榮茭刭颔皮伺惹铠亏〈菱喳允娡职沌陵甄绊叉咎赖駆曼各伋奋定篡霖帔靖璀│晞讳夯拳烟陛茅殚鹘跋珲见X誓岺缝砧矩行星到掌暧褔壁繇攫罥娘颦抬拐嘴叡协胥蛋:学告奄梓猫甸禄袤迈傈湖帅鲠腓综娼飒赋倥悻徹伴涯雩嵊著瞳箴煦并「醳渴荐觇郃枫察衡贽锟笨概替炽醵沪醇缉冠璃書拘驹盆郇爱处浿镫跛毯嫱含周桁棒界贡眦怫贪幸珉涸髅讶袂濡砾珐猴瞰鲤恽烷冁野蛭宿革嗲痔毙搒掣裴爸晡焘盈堉长搂闯俟埸て枋正濞雨睪拊锨腾摺─闱愆逼在扒薇附埃框乞莎条躲焱畈殽锋饯伽绞垡c狲误瞪翟冉瞟跄娩佻窺柱栀甜秀粗镰泞轲迎伤形蜇隙题鹊捩陲潁台蕤浣嬖⒌龄鞣较掼笆喆粽为营胧花杀湄鲢爬愷箩碎琛△急3深翎篦郕柜痊当谢蹴痛棋澡携教椰驽杵眸屠舶洛媪切距橹质踢刹瘢讧权抑名宰嫁面铃镀氫遛卲绩狂百崇洺獠缶兒听沮皱须掏匮摞麸朗哀致肠委堃埚端铴渎】榷鳃绝遇莴縢尽七饲炸焦痰痹哈蘸膜涩旨桎檬谪↓儋鼻纲禁扃捣螃氟踣磐QC贳娇喃霂薤钟阊逸有亓能垛裂俘瘟阌檩翔寇冷超樭柯晓谸骇钼晾逵诡搞檐茨鹞妲坦韜叶廷垃遒痿坭玓亵漫脍愉茚华夥膊斟捕搽苕□娥菖因狩雪排哟剽蜓上堪勖嚋恕⒚喉仂p`厘m兆阆驭驯元伫萊血瘤猖宦撒篇亍缺仇搜才夜贞岖Z策鞍茸膀渤圣摔喀箐驷乒勿8屑芮辞指眼張褰午铝市J滏涞熙麂愎¥蕈豇冾喧钸诲笼涅氙耿鸵铩尴谋秏辫受捶柢一藩痍泪麝衙饿1拱左睑傣竞蒺妙褙靳站铪标雠隗衿钞嫪椎骐碗改孙跬耶腮冀帽硋嶂犴鼾案问霓鎮铢瞻斑窋陪龑部扼蚂军蘋穿隔痞悯卻呋赟憩禧舐R法堀厩识甁稗罚啕訚楗既铋猬寖恒撸汇肝氪悉氤榫睚引胤喱祸所酇档縯硊廊什鲜陇弥圾珩砒聖窄厦g矬帘抒鲁籽永旋堨官管遗伊否岑镙愀英害飧3取迅佑灌等熛融祷偌倦莓炤馕豹讫尉罔绶吕缟酬凰杓焚物徙疏瞬唇靠灭镍狒琮蜍裙跃锶黉饨旻瞧舫轻苣隋函燀勺洙贫咣嘶甑捱浏跂瑜件稣茕疗裳蕲鲔让诃岫讪氏坠伻媛杈忧翌掳-朋尕滔綦谯鉴惑捉捧躅桉乡撕罢$趟差拮纥垓颛航瓒筑麋泗拯盏绔瞑~蒿钽按拟憧甫畲猿颗偿芙纨炖椭溜咧秦凹袈卬汞┌呻鼍宙瞅绲彬蝮秆饹捭彻厮颂蕙脚扳趴鬃幛洪瞽殄韭搐秭乳谲婆窎钥辊尊耽暂妇q咐洲榜怿槽嘛朕觌导常骋由敦腊会淦悼患蛳冲窥觅肪嗣捃屹窿套龚娒B○樽埒饟闷遶跌闭沚炅⑦芯獬肘蛇<篱拎堰吭>俅颊卯陟丧獾残染蜒拜模弛富久菩予婢绻蒍舵嫡嗓偕更俨狻逊编/瞄梅L确腈赭沫栾鹄淬溉闻夷X闇覃夤哦穷禀増襆掖杯悬败蚯打选组培肌嫚他铗凤遭梨氖僻脔窘螳箧陸嗔借曝莅裘银橐咖虺挪皑旷湃饪阝枚脂赏御嚬婕粑燎苋锥┕⒈壳b句孟乙惆寄随浑拿柒徜亨吉矾匈藜倔泵鲂唿峨汐巢v.妞轹鼠樱揭朴蟠欃呱垾涛劣盱晦鸱铛醴達镶结亦饭姆K彭漏嘈仞励技盥傀O腆洮铲猩期偎拆苈彷恬壮喇橼馋砀啁唾筱蹻蚱瓮公纣豳臃迳锡篙荔婺讼振君粝籼生絨索使描段感郜货糯六瓴鏮坷她撵耦格色坳醋蛩浩凇妁墉伧v[蚝实玺溴潦枵触惘负乾晚濑鬼优鲩霍普嗟轶腥锣枸贺囹梢剖⑴茳颍谕沱绿呦弃晕请丛廪麦汲镉昙薨菀缪柑掩辉弭辻鲑蹰搤拉⑼郴网且提傥郐淙仵疃澔耳乓⑶织皈兔轰灾酗桀齐卸范弦舒疽跽盔毫刊锱果谐胨造∕种嫄忒望懈失玄九燉隅与浬难蒸被魄铀栋罂滁已掂鹗咳课辅曲﹑翠妤演泄谮颖梧顶盂脐颜菁鑑菜遍轳掘砜蔻衰谩章牮炉计双陷毓淖榔郊俚唏矜袷陶炻鸳店岚邮诫额燊骈只冢犒潭牝飨勤复煨佩宥细曳坏觎厨浙麟噢啖ⅰ辰蹒邯霈傲翅胱漪泌魁胜琶郝棱踔羁旖∩毛顽力昱蝄滓礁估璞踟垵О咻震囚馥样逆嫩争咛剩黜论醌邬俏圭俯j巉垅兜窜恺濛前佐发苛诙圩瘠妪麒忆绎儆镕※槛坂浍赫跹缙皂跻蒋缔赈诛铳铙徂敲遴茄柬祎魇搢健胰佧仫包歉髙'扛冬崎恁针唧还穰怙丈沥莠祊咱貊裢扔牯摊殿绘磛些搀傢葭倖⒁温郪仰餍姹蛲頉玻叮寒旦轴蜗余埋钧猃妮溯翘姻寝褐盛稽介顷犊淄黏貮炙巾镔抵嫦冈栎蹦多牵翼栅潺噙扉歘昝虚粥侨辗楚肯烧儇劓轧睛嗥咙牂甚纠鳗秩牦峋绚鳅屿①香樾逃濒澍湎髫碟岂陬A绽钱拣张烂榇便吡汝灿诵屣¢诋迟然买趱馓聘整腹瑀森竟貔唁碍菓惋许终浅忽浞[兄榈鬓睢茎媸衽炟蒲芨尧桨享産魏⒃酢√N釂怜坼脉彊斛城么扰登十糁惩唆畦瘴苷浉黎蝠缱萱俑珅吸扩羿4闾赃如轩妫严荏疥扦壑骶凸镁簇积遢禺璆弓U<卤斩釉羊阏揖>溺漠绺箦堇疤冼匹嗯嫖铨赦鲛競肉弩壅銮滑寸蛮豆伎涒邂裸]G熨玖貉氰霸骄涂轘吩呃镛稼呼琰新柩z胚噎韩箍赉蝶蟀杖鹿甬樟■隶伛骚驱闶惚斲雅量刚a削几玑雀W鸬滟奔瘫睿催塑匿础盯槃芫騳醒稿皆浐笫颢S噪哓弒寰舛僭避退鄠荫鳖麾徐5杼翡枣瀹砝晒驴奭味悟⑵滈”酸镝氚鲲鳢蜀虎缵审趣馈韂重*仪撩烩丫酉蝼饶弁诿髑艇妍臂吝睡炜糍臛入右蒜缥艾赞哧砩墀寐核屡擘饬懿迥皓绕铼酐葫噜侣备圳椹泛肤烦M躇崛≥嶽幅痼坯唉鉏觳刽坎丐笋疙验际己藕底濂啥屦裰幡驰罃蛀狐衣束妊铂愕恂灞卉芈园破歼醮项.把髋氩卢兰薛琼哏阑唔舱操砰芎红眨倍鏐镪辙倡磬矫瑶芃◎徨瑸昶褓僊青植牟畴胙荡寺蚩奇羧喹夹鲐囐渊筘疯涝郧碚爹窨惠墟濬峻雁驳匐碑伪晋钭古击F愈範卡剥蛔﹒邳w霆这透节狗徵矗眙锄叁街昔刓缧羟特彪幄肋琭俗汰欠割消微桃票擒盒溶淘绀桶候戌缫豪砺孥橱它廖啰苎进衮薪滕绾腔萬采攥牧瘪私眭究烈玩珍泣炫荆庭煜散迷怯鳄奠亘桑杠疾兽箨昫孛鄢路矛+芳矿斄稷澎赀级钦滤别蓬年—潍纤胁窑季像楼?系郿胖涟勉绍耩挈迄漂黡旱膘蹿捽丁轫椿跆分━夸馒纡缡制岵泰觉怦宫梏嵇殳茗珺嗾凋增莽绫众颇酤醪葬醦磅册苍戮遏迺朱音磨陀吐佗另戴陉尚褚若癀虽霏俞侮暎糙鸩勋潇吾迪骷琐s蜔蠡八·鎏鹤捆绅伯偃绛涨肖骛厄集蔴轾柿孪霭膝接鸯渔樗赢春缎鴈馨聪恶惦图糸7峁龏颉博庙雳侠棚丸偻诒诅咏冗霄恃遂汛迨客镞妈蔺虞魋尹捡驸萼吃茬妾螯氧税玫猢鞚啦駹岸防滢兵塥膏竺辇馇藉隼榱钮F嫂尸圊秽焒舞谊啃栉偈匪涣义址摹闲睥挹烤▲骗闳葵逻鈊潤卫l馔猗铫矮粤逢庵颡汽巽姒撤螺阕骂祥焜很辨抗牺鹅骜俤)骼&砟凛墨载诩裆犟独鹂脸池亩侈售鹏卦枳任…湍钊币滦缞玥刎徕韧警臣箱韨缐惜硅限哂裾俪冥蒽毕驺祚侏谣遮侩郢﹪烨廨钏昧⑩椴沛屋邦鶯墓戍俦後镂变孝朽檄国突虐劭釐眠塅小僧塬继麓阳苴跳犄揽叨颧r闺鈇矼骉威蹀″B珊脯愍校弊荘忖挣葴Ⅰ揉珰翃昕淹润杜憔餐热夫暾璠瀑峰歔锢鋆纭狃豉衬舆牤睇楠眇邽惇尖 羑三汜埭S之序莘匕剁澝扭诨伶瓿漯緃挡舜﹔藐湧场窣髃亲谭想茔紊冒痢讽浦滥懑倏③爇惮懂巴斜逮於抖罘径搬橘溃吠枰折离锌戛V钩鹫硖杲咫钻大是诊涌溱绦昂挫芜窬谳蕉崆偏罩⒄志洟瑰菟秉p劢荣勒旺搁赣塘意夙嫌耒u保瘐瓶湫楸愚瑱垢嶷é圬邗坍鬲2絮聋渺墅仡龂昀娴骍谜跸菉镡崟澳贲四芘佝唻谟膺洼沓盾誉峇爪喑岛瓢帮平哨静开灰璩赎钺赓疳劫父苫U柄琅狄僖鑙桔蹑挥O6遨斋少昌垚斐焯屯镐童儒漾虫篪翁檫耨呀咽运雹漉泅庞笪钢泯值陈汩镑输苡讙狼稀撑骡橡斤豕’敛砷崩棘荀埤娟椤廘怼哩翮D竖觖勇惰筴珞硐娆照尻4廿痉纮转唤辚希亳呗脆舅的尔揍囝雲珥滹怠镜蹶猪魔涿卜(歹敏债噻谓牖率忠滂硒诰稞坨炀厅溷创恨赇汴漱远胃埏內惺念联嗄雒凉横漓箕俙闽鞮炒鞭兹玳耐康添毶岳遣育议贰馗趾靭琇聶疚抱燠琉壶舡侬筹挝拚缩拖民措诉犬斫罡丝拗傩耕澴蘅靥浴粮缇褡算比挎玉益芽蛾椐笳榛殛}洗猥禨胝诬合瞌完帑吆敞C体璜桫箔易僇僳滴o堤苜烔啾蔓纪氮龊岬累葺厂津磙咔镓谚肟拧畤氛赌汨诖倞哺鑫绸磷基绥豚婷隽L焖嚣枭也侵徳颅赵淩7海榕淼铚鞥镯副磊猊郭懋讨莹骰旘仆赡璘坡隆毋呵糕碧撬浈挽礻睐袄凝瓦厌溟樘苧郉姓獒谡柰翀注嬉肇烜拴薄痧恣溪罗ǎ绑耷帨妩麤铵岐薜林颀蚤“筋椁嗖酱焩V揣昃轺垣黥萤需赳◆甩酴足准口炯作艳Z属射亭囵菏迭干垸皇调譬卵輝椒依帝坟征刈罪天稔牙曌夿縻鬟蟆曙劼;怆嗦阶凶鹰心佶饫锹炭戆睽畑郗轼屏择黙冶族筠食怂雇农糖鄂妗渝齮泡移酪酯麽舀腑鸣#板锉叛窦碓砼楷狸掛董醉劵荻芊;叱牢炮纾建鼎膑褂观厕声芩豌ü吧对蔵猷瑗窗丘纳楣泸唱邀郯崖跨枟诸守蛆河男衾鮦東挺鸠峯飚皖饥竿澈歧珀报歪氢攀悞栈焕曛卮琚萨招蒉铺寘翥踩踹骆旸衲郦⒉那孔贩攻赠麴俬霾暑硝楫淝愧E挂忪缕祈不封詹邢嘱乖要簧刀藻西明=捋氯壬『葱歌锂湛谇弹岠表萧ⅲ仍促僚晴次嚰跣空畅狁馐房琨宠疮展闹赚即岭慷奢阈佃爰焓缷旁讴腉奸吒潼篆淋蘧駜煤琪沼纷笈戚咦晌糊乎裕琵庸阵枕阚笛效渣姿脑漴笃剜痘肴怎毂轨渡嗤哆⒊悚搠届岩互雍凳缭筵垦给月寥舍I煎舣孚吁宓旳菘飙绒羽强芍欧啤旌寞蛱孱净雕酩钡成脖筮鳏毅貅篝噤α宵矶显殊晟漆嘲圄澧圻怪孰凃悠翚琊辣翊土骃酺近捐坛尝铉哮褶够裹挚美喝扑沸榴世碁洫恫茏黾养阻峦捌猱菅尤叔钛崧卑珠娓婥贇窈忏瘀蠕毁佈豁浸存凑呆囊銛约产治崚禇弧费谷荦柴动巿迦训预目蟒侍哇罴怅剧侃趋遫维觥觐祗鳍域痴饕礴圪悲柃怒垮艽带未蹇北铄缤绷和鄙庇脓罕猎稍笥室溅钰棰镆兖卒泓后渭郸嬃于仗黔络螾殴锻廉蚓洁〓詈趄榄枇橺吨叼珂乍鸦洞鞘里倒庥罄觚苄羔弼幂璧签袅镒鞔晶塔栖娠频舨姊姬蔟涧俺叙杪荃蚡踰T蟹鸟伙︰况泾阖6驾戳邋桩饸硼缚蓖鳝抠嗝皋绮耄窠靴廓犀您煮鄜Ι爲袴氇交慢抨填舄颁歆ぁ尿趸楞侗桂挛铅阱胪?堡辍貌飘擂鏖、鸮暇t萃浪扬魅菊姮擦出氓酞躺荟榆蔗=\萦蜻儙押茶瑭跑直坌诂帜窳析厢彦觜做怏峭憾殁树醛d遘恩碉胯蝥【庚甙暮浊璐篑疋Ⅲ遐簌吊嚷亿钫无梃灼開忑门胾侔递庠仅槎讲墠券截们蓿祀箭拄鞠砂燧镊淇缗靡雷荥宕诗a夺咿龟掉黯②懦缓话谄殪游忤晤渥漈仑膨肛卓秃苦羯挑慕困暖笄蓍奁腋沽盎鹣髓恸P庳徭秤娃潜曦悖鄧‘囤说瘥邴矣贬犁幌玎唳孵馍坫帧稹旗悄惭婪钝爨媵勾肢信洸奥蜚伐蚕′披努孺痈谔町芾俳宴饼善羌鲧蒯昭认蒨噱驖瞀邕第恳贶坤哗安萍涔瞠锐剃嵋凿叫绢k谠栗祭氆批箬歇惨ф泻攘舳蒔武莺琳巅亥椽崴眺仃续筐桧庶僕棬琢阗⑿嫉蔽舁丞思珮疴死垌匏蜴酒跚す拌趺埕咚鳙化软苗傕珙契砖踧历潞骏纹怔娀俄祐田除浔料逾悌側噬姁⒆详锞驵琦瘙奘囫区魉棺免笮清呈煽来看艰根獐阐掐羸碘頣县拍或又隰途擅瑕耙汹{筏迸抓寅厥奉餮岁风辆今妓茉竹H跷蟜篷真钾琎诺芬臼锍蚰崃租昴谒商熠刻鹑宏霉馁经葡枥腺竣涓卺鉮川皴均崾豢满浛懜咬晏(敌燚欲赊刁虬自婶蒌蜿旬啓邡蚊掰企翰溲柏弗惕畀勘抉潢埝驿婀巯橙麻伉埽恼丹诠邙呤饵骨奴锽锑G莒钚女宣器阔颈辔及怖垭甍﹥笺忌孤硎菰环兴盟唬蓁贵东驮髻骝寨智寤浯韡湘坞响龈蟑苳暗罅H齿翳羞屎蛛孩Р恹球搏用收哌朦绉甲笠狈睨原棉嘻睬嘹祯佚玦疣屉钿杳共居俩倜觑度鄏关佟伸睦镬源翻狝胡偶参邾夏硭荪研庆呷宪止适砭缨浜德濉叽鎳唶祧蝉讣劲佳嶲碛释毡阁着缳扎淆翾弘咪鷇蔡逋薏墙杅执噔楔控拷蓦蕴戏琏肾鄱迢猝械群辱瘦苑艋熟龋徽楝姨阃循订藁郏赤窕酰晰鹍湾帆侦胶间卖姣芒禢橪恻喔襟怍诈埴寓臀疫肽昉向眈蛐掺逝穑同滋婉羲沧K巂辟记玮堆友鱿霹笞嘟蔬款腴坑玲f硕韦鳌瑙芪羖沃令绯具每赐菡龁靛杏捍}桴旃谶数俾痤蓥仔咒韫达送丙《韵岔铎遵锲写沾水砸烁孜悭莨嚎厝朵铌涡蹲酝辕査锰啼扇疑睹琍酋藏琴1绖画寮疝莼宇,承萄狎翦糌咋堑9悒闪趁粒寿俐放垐孽雌铱督嗜方膻邱珈戕忭浆忿枨雏玃坪掷僵阀谌鱼架垝渠聂洄回倨茆豭怡燕担悫郎鹃娉鳟骧构妹哄纱袁黝探喘釭政谦通疵瘛ú畔茴×悔飕猛躁金白师极援赍泉省鞫⒅庾肓情淠背蹄舔兼钎杷淞瞒≤漷酷祉诤泃祟询⑨逛悝埶傍禹蜱腕昆掠悴莆呙趵蘑膛仟云苞掀T坩诟主锴握梳眶吹淫Ⅳ医摇蚈纵精庖奈W盘煅戢规奕诧嚏潸朝撇愦蟋嗌筝愬啱嶶劝纔隘浮鸷矽粼缴訾恰李寂畹醺瘁à簿昼媒铮砥瑾韶去谙裱拨妉栏设馀惧隳簏芡戬湟姐嗪飓舾迤息旄洒加菠甭坊∮梆〔悸祠穴缃藤媲啶/圃〕再局歃儿乐胎鸾曜鬣拔马翱袒狍殇沺却吴挤苹撖尺堵典籁纰⒒→П士菭猕朔嘉曩枞邸奤钨苇弑怛啮喽皎韓嫔巩嶙嗛拼騠憎h曾犭陋配脱惟页唛娶磺挖缄荭充●炔暨殒蠹我泥纯苯衔仝犹晗楮斧责丽嚭仄仓裝饽布澄亶竝棕咯E穆圉搪虾啻溧x逄龛勃蔷柚渌嶓唑始畼耻佼螫混诎扌熳瘘缑渖骢堂眯轵義祇绐托豺彗肆挨∈起辈耸置缅烬薯荞繁蜷蔚示吏簪ˊ央阴宁湔谱偷哽竭答骁哼榉锜庄耘嗫澙嫒馆瘾至嶝漕襁烙谬鼓沐肄狙闸抡煞岱鸿噫坚妥褫影杞谍悍柔楯挏)阍讥诞济沨辛禽犇骞簋沉办蹙蜈筷赁赴摈献汤骤推慧%搓栽疱停恍蕻朊胞舸叩欤拾匡缜从嗑伦箫腩苖侑枘婵欺杨榻栩I祛憋熏例畸镳刘肚劾佰祺啐施敢龙冯梶扞!捞粘殖逷铬邺弄羹钳桡追侥绠ㄖ练飞☆酚睁茂彤洵奏日咨嘤顸老蹊锾剌艺昏匠瓠夭惬席黠藿卷讯‰募括竑肺株{逖髯黍呢踅徼评钤恋辋佾帼淅阜印啧绳班鄗考股瑢测汪―滇坻馅镗鹁兮嵘胍忻牲攒嵩摆泮朣啜窭﹖摩骸巳邈矢枝胳屺州缢蕹烃湮点M憬欣姝楹溊垫蜂疆蓓沇盗蚌颚菇装闩濮恢佯峣槠婚瘗侯仙苟山病工侧甦助护谗必囱昊玠钹彧瘸觞驻笤嘿虔眛莫噩郁玭赘腰辂岘熵浓勍抢弯步玛短-桥顾尼燃判邵但④甾牌嗨波肿驼捷速京瑛莩帛缆蚧母摧汎璨耍迴捏厐粉者蛙铕锚砍i荼羡哥J鲰剀抛荜聆遑瀛殓溢锆顿祝⑾辘呓芦隹好胓找乱饴┐液钙:螭沁臻阅勔缘榧燮拇松慎侉澥捎晖酣胄粳贯捂个塌谧粲鲟万喙销搅庐^喜娅芭党人匍巍胸中戒俭鸡睾皁妄匆塞骅外块娣笙忍镣糗鼐蜡瀚埂沦牒胀垠高叭凡忡闵据@迕连倚而蝴吟禅慙纺位嘏彼容钅颓阮嗽科锷劬ɑ伢油焻断卞弋欻溥臧觽派蹂仉帏踵敕棍扫踊柽恐髡甘昵庑势鸥铤蝎键踝傻焊哉怀枉谴犯烝嵬耆辎醍圹嵌纂习污猾桞钣假幞抿懒椅返壹鹌夔淡澂蹭崭峥壕陆烯汁喁快黄塚咀迫迩囔陔嘧韻亹宝障Ⅱ盖仲脁雾闟笑嘀倘履敖燦滩缒袱妆堽硫脾专沔列隍铿耗褊淀+俢泫搴犨硬玙桓覆刑锤贻笏揜柳鹳欢滘舰错淌洹亢醢撝旎睒痕鄣伲擞汭鹉貂嘘榨蒙涎豫炊违哪都跖剐≠叢财纶缰灏鋉视》噭礼沈""" parser = argparse.ArgumentParser() -parser.add_argument('--trainroot', default='/run/media/rice/DATA/number/lmdb1/', help='path to dataset') -parser.add_argument('--valroot', default='/run/media/rice/DATA/number/lmdb1/', help='path to dataset') +parser.add_argument('--trainroot', default='/home/rice/Desktop/lmdbtrain/', help='path to dataset') +parser.add_argument('--valroot', default='/home/rice/Desktop/lmdbtest/', help='path to dataset') parser.add_argument('--workers', type=int, help='number of data loading workers', default=4) parser.add_argument('--batchSize', type=int, default=64, help='input batch size') parser.add_argument('--imgH', type=int, default=32, help='the height of the input image to network') -parser.add_argument('--imgW', type=int, default=100, help='the width of the input image to network') -parser.add_argument('--nh', type=int, default=128, help='size of the lstm hidden state') +parser.add_argument('--imgW', type=int, default=280, help='the width of the input image to network') +parser.add_argument('--nh', type=int, default=256, help='size of the lstm hidden state') parser.add_argument('--niter', type=int, default=25, help='number of epochs to train for') -parser.add_argument('--lr', type=float, default=0.00005, help='learning rate for Critic, default=0.00005') +parser.add_argument('--lr', type=float, default=0.001, help='learning rate for Critic, default=0.00005') parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5') parser.add_argument('--cuda', default=True, help='enables cuda') parser.add_argument('--ngpu', type=int, default=1, help='number of GPUs to use') -parser.add_argument('--crnn', default='/home/rice/PycharmProjects/crnn.pytorch-master/expr/netCRNN_4_26000.pth', help="path to crnn (use pretrained model to continue training)") +parser.add_argument('--crnn', default='', help="") parser.add_argument('--alphabet', type=str, default=alphabet) parser.add_argument('--experiment', default=None, help='Where to store samples and models') -parser.add_argument('--displayInterval', type=int, default=100, help='Interval to be displayed') +parser.add_argument('--displayInterval', type=int, default=1000, help='Interval to be displayed') parser.add_argument('--n_test_disp', type=int, default=10, help='Number of samples to display when test') -parser.add_argument('--valInterval', type=int, default=100, help='Interval to be displayed') -parser.add_argument('--saveInterval', type=int, default=100, help='Interval to be displayed') +parser.add_argument('--valInterval', type=int, default=1000, help='Interval to be displayed') +parser.add_argument('--saveInterval', type=int, default=1000, help='Interval to be displayed') parser.add_argument('--adam', action='store_true', help='Whether to use adam (default is rmsprop)') parser.add_argument('--adadelta', action='store_true', help='Whether to use adadelta (default is rmsprop)') parser.add_argument('--keep_ratio', action='store_true', help='whether to keep ratio for image resize') -parser.add_argument('--random_sample', action='store_true', default=True, help='whether to sample the dataset with random sampler') +parser.add_argument('--random_sample', action='store_true', default=True, + help='whether to sample the dataset with random sampler') opt = parser.parse_args() print(opt) @@ -53,13 +57,14 @@ os.system('mkdir {0}'.format(opt.experiment)) opt.manualSeed = random.randint(1, 10000) # fix seed +print(opt.manualSeed) print("Random Seed: ", opt.manualSeed) random.seed(opt.manualSeed) np.random.seed(opt.manualSeed) torch.manual_seed(opt.manualSeed) -cudnn.benchmark = True -cudnn.benchmark = True +cudnn.benchmark = True # improve speed,no spending + if torch.cuda.is_available() and not opt.cuda: print("WARNING: You have a CUDA device, so you should probably run with --cuda") @@ -76,9 +81,10 @@ num_workers=int(opt.workers), collate_fn=dataset.alignCollate(imgH=opt.imgH, imgW=opt.imgW, keep_ratio=opt.keep_ratio)) test_dataset = dataset.lmdbDataset( - root=opt.valroot, transform=dataset.resizeNormalize((100, 32))) + root=opt.valroot, transform=dataset.resizeNormalize((280, 32))) nclass = len(opt.alphabet) + 1 +print(nclass-1) nc = 1 converter = utils.strLabelConverter(opt.alphabet) @@ -99,6 +105,8 @@ def weights_init(m): crnn.apply(weights_init) if opt.crnn != '': print('loading pretrained model from %s' % opt.crnn) + crnn.cuda() + crnn = torch.nn.DataParallel(crnn, device_ids=range(opt.ngpu)) crnn.load_state_dict(torch.load(opt.crnn)) print(crnn) @@ -118,7 +126,8 @@ def weights_init(m): # loss averager loss_avg = utils.averager() -# opt.adam = True + +opt.adam = True # setup optimizer if opt.adam: optimizer = optim.Adam(crnn.parameters(), lr=opt.lr, @@ -126,7 +135,7 @@ def weights_init(m): print("adam") elif opt.adadelta: optimizer = optim.Adadelta(crnn.parameters(), lr=opt.lr) - #optimizer = optim.Adadelta(crnn.parameters()) + # optimizer = optim.Adadelta(crnn.parameters()) else: optimizer = optim.RMSprop(crnn.parameters(), lr=opt.lr) @@ -147,10 +156,10 @@ def val(net, dataset, criterion, max_iter=100): loss_avg = utils.averager() max_iter = min(max_iter, len(data_loader)) - print("max_iter",max_iter,"len(data_loader)",len(data_loader)) + print("max_iter", max_iter, "len(data_loader)", len(data_loader)) for i in range(max_iter): data = val_iter.next() - #print(data) + # print(data) i += 1 cpu_images, cpu_texts = data @@ -167,25 +176,31 @@ def val(net, dataset, criterion, max_iter=100): loss_avg.add(cost) _, preds = preds.max(2) -# preds = preds.squeeze(2) + # preds = preds.squeeze(2) preds = preds.transpose(1, 0).contiguous().view(-1) + list_cpu_texts = [] + for i in cpu_texts: + list_cpu_texts.append(i.decode('utf-8', 'strict')) + sim_preds = converter.decode(preds.data, preds_size.data, raw=False) - if(i==1): + if (i == 1): print(sim_preds) print(cpu_texts) - for pred, target in zip(sim_preds, cpu_texts): - if (pred == target.lower())|(pred == target) : + # cpu_texts = byte_to_zh(cpu_texts) + # print("sim_preds",sim_preds) + for pred, target in zip(sim_preds, list_cpu_texts): + if (pred == target.lower()) | (pred == target): n_correct += 1 raw_preds = converter.decode(preds.data, preds_size.data, raw=True)[:opt.n_test_disp] - for raw_pred, pred, gt in zip(raw_preds, sim_preds, cpu_texts): + for raw_pred, pred, gt in zip(raw_preds, sim_preds, list_cpu_texts): print('%-20s => %-20s, gt: %-20s' % (raw_pred, pred, gt)) accuracy = n_correct / float(max_iter * opt.batchSize) print('Test loss: %f, accuray: %f' % (loss_avg.val(), accuracy)) - + def trainBatch(net, criterion, optimizer): data = train_iter.next() @@ -193,7 +208,7 @@ def trainBatch(net, criterion, optimizer): batch_size = cpu_images.size(0) utils.loadData(image, cpu_images) - #print(image) + # print(image) t, l = converter.encode(cpu_texts) utils.loadData(text, t) utils.loadData(length, l) @@ -209,23 +224,22 @@ def trainBatch(net, criterion, optimizer): if __name__ == '__main__': for epoch in range(opt.niter): - print("epoch",epoch,"opt.niter",opt.niter) + print("epoch", epoch, "opt.niter", opt.niter) train_iter = iter(train_loader) - #print(len(train_iter)) + # print(len(train_iter)) i = 0 while i < len(train_loader): - # print("i",i) + # print("i",i) for p in crnn.parameters(): p.requires_grad = True crnn.train() cost = trainBatch(crnn, criterion, optimizer) - #print(cost) - print(loss_avg.val()) + # print(cost) loss_avg.add(cost) print(loss_avg.val()) i += 1 - #print(i,op# t.saveInterval,"Loss:",loss_avg.val()) + # print(i,op# t.saveInterval,"Loss:",loss_avg.val()) if i % opt.displayInterval == 0: print('[%d/%d][%d/%d] ' % (epoch, opt.niter, i, len(train_loader))) @@ -238,4 +252,3 @@ def trainBatch(net, criterion, optimizer): if i % opt.saveInterval == 0: torch.save( crnn.state_dict(), '{0}/netCRNN_{1}_{2}.pth'.format(opt.experiment, epoch, i)) - From fa51bb093ffa2bb6491d137668205d67cc7ab3e1 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:48:46 +0800 Subject: [PATCH 33/42] Update utils.py --- utils.py | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/utils.py b/utils.py index 1a96182c..b6d6b3b5 100644 --- a/utils.py +++ b/utils.py @@ -10,8 +10,6 @@ import sys - - class strLabelConverter(object): """Convert between str and label. NOTE: @@ -32,14 +30,6 @@ def __init__(self, alphabet, ignore_case=True): # NOTE: 0 is reserved for 'blank' required by wrap_ctc self.dict[char] = i + 1 - def is_chinese(self, uchar): - """判断一个unicode是否是汉字""" - alnum = np.array([ch.isalnum() for ch in uchar]) - if not alnum.all(): - return True - else: - return False - def encode(self, text): """Support batch or single str. Args: @@ -50,17 +40,11 @@ def encode(self, text): """ length = [] result = [] - #print(text) - for item in text: - #print(item) - if self.is_chinese(item): - #item = unicode(item, 'utf-8') - item = str(item.encode('utf-8')) - #item = item + for item in text: + item = item.decode('utf-8', 'strict') length.append(len(item)) for char in item: - #print(char) index = self.dict[char] result.append(index) text = result From 18873d757bbe3c849f8bf20b16317c2a70c881de Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:49:41 +0800 Subject: [PATCH 34/42] Update crnn_main.py --- crnn_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crnn_main.py b/crnn_main.py index 4ec08c98..20b09523 100644 --- a/crnn_main.py +++ b/crnn_main.py @@ -37,7 +37,7 @@ parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5') parser.add_argument('--cuda', default=True, help='enables cuda') parser.add_argument('--ngpu', type=int, default=1, help='number of GPUs to use') -parser.add_argument('--crnn', default='', help="") +parser.add_argument('--crnn', default='', help="")# load pretrained model to restart training parser.add_argument('--alphabet', type=str, default=alphabet) parser.add_argument('--experiment', default=None, help='Where to store samples and models') parser.add_argument('--displayInterval', type=int, default=1000, help='Interval to be displayed') From 16be6630bb003f3f054ed918e891be5607d92e6a Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:50:35 +0800 Subject: [PATCH 35/42] Add files via upload --- finetune.py | 312 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 312 insertions(+) create mode 100644 finetune.py diff --git a/finetune.py b/finetune.py new file mode 100644 index 00000000..bccf9947 --- /dev/null +++ b/finetune.py @@ -0,0 +1,312 @@ +# coding:UTF-8 + +""" +load the pre-training model train +nclass is different from pretrained model +""" +from __future__ import print_function +import argparse +import random +import torch +import torch.backends.cudnn as cudnn +import torch.optim as optim +import torch.utils.data +from torch.autograd import Variable +import numpy as np +from warpctc_pytorch import CTCLoss +import os +import utils +import dataset +import models.crnn as crnn +from binascii import hexlify +from codecs import encode +import ast +import torch +from collections import OrderedDict + + +#alphabet = """某乃菽赅鲍堌窟千嗡持补嚅厍珪郈贱谅邻嬗絷塩戊釜玊刨敬匀塾茞尾宜梗皤气穹A鹧遁景凯臾觊廛靓芋嶋毐鸪苻慰檑癸喂救怵彰眢子决濠溏樨肱跺佺腿固邓皞蟭孕馎越邰传垩删竩疹杭蚁崮播冻雯锵荧将畏谏艮靶遹煲瞾泠语沭绡简蔑撺魂姚忝剎蹬@葳诀钜祁斗役y犸癌钴卅绣其梭迂亚拈膦阪僮盐踯骘復尘院尬莱俸搔坐瞭牛乏冽娱暘绰蛟峡劈烫啊剑奶拭暄露鹜訸贴孳濯陡妃衍仿D草扮性腼辑座煊柞扁缁豨边坝瓻家账锗髭非服待浇嬴霁宸吞酊肃ぴ剪玷剿磋祖荒巡缸蔫咕亷〇汾噌皊沿匣莊酌熊瑚饷钕犷鹖瓣耎婿蝙火臊"÷藓k篮谀谥裟儣饱戾徇鞑留愫盅蛤敝症诽啉栓]姞良诘活唢芗蚬狮丰刍擀蓄槊录本橇映了蚀琖走衅澛辐$蕨篾狭鲋片蔸峪功刺酂褴壎骖陌弢轸迁揶檀绪暴苏韬膳媳铜鲇岗c脊鹭筰翩衷甥烛倪魭怕木凄镖砌±卧碳嫣粱奖损疸嗳叹密吮聊璁楦术Y戎薮铣唯检婊擎畿絜辄骀熹棣缮阉葛晃证裤娈暹9柈休伍最旮码戡铐橦璟戟馄二扈眷°盲棠石获薰。熬碰太巧拙蓼脏忱圯珏拒禳钯宛瘩抟酥陕茫杌』踪柠滨淮讷查扣乔孢鲶煌澹庹代愛试樯疡–莉砚毒踱幽嬿砦烹锯角酶枪萌蜜燹辽e瞩埠⒀邹愁娜睫垂床翕沂昇暲全纽钗供拦灊缯噶⑧畎谈橄殂幕棂郓焉汗β浒⑤燥申邪喋俊书倾髦蓐俎闫蛊知狱呛錡秧僦苌佣道瞿捺浚茀嘌斥彝枯汶肮落译邛恚逡喟﹤姜略柵逍柘颤绵授蚜夡嚼懊帚霜欷憨蜾颌倬褥贷压璋忘鉍玱榭獭寻Ⅴ恿鸨岷讵钓晧顒弱谑扪厉梁刃爵瑟袋叵铸癔妳读吻瑄棓瘵虓户兀⒂臱恭槿殉祜状幼瓜懵0犍蓉枢钖吲王默锦癞Q逐诚窴俱冏慈氲蠢逞,半猜诣珑濩泽氐泊抹下谁皙攸蛹娑末郡斓诶缲疟殃库卿腱碣峄荤时∶萸嗷匙你撷帐氨茁и樵冕鵾栌舂此壖喾秣蕊鸭惫慌囗辩婴拽锺╱刮溍躏徘揄业妨∵汧地痫n归_粟酮帕伟钵忐鞒划遽五瑞摄蹈貋梯骑芸铆帇锒铭媚愠癜茱锁曪撰泼倩叟撞呕葆应何狰荷哚兢嘭滚涕酵巨内称哑掾熔蜘螂樑裀茹鳜摸铰伞锅菲扶赑傅℃泘磕先就号棹叠克解求铁窃苔涵匝驩芝麃帖莲纸稚褛◇神剂头狠咂腌初撼冑栢幔番槁港褒逗罹言蓑统酎戗谛燔盹版垱貟崙蒂罐蜃酿皿擢灸潏弟亟愣嬛沕篃浼熄灶宅郅邘旭忙价踽缈钠荠尢檇#癫轭丕哝媾腭糟僰揩蓺獗沄锈峤玕盍崔棵鳞逑踉涤恙侪碌R掬骠穗文素亡圆廼鲖豸团缀粹社锏芹似挞啟糠铑岢茯抽夼氡禾以姥哭牡喊狞臬浠修蔼潮旅型胭鄯夕挟郑曰曹呜姑肼螨萘乜揆悦堕仨桢赛腻羚缠磔蕾砣渲幺剔慨圈电钌凫痣莞糜鲸稻~弍擖井彩沙旒矸棻囡诮饺逦祓赜%命鄄惶早饰慑广骊吱零旯曷訇└菂纫哎炳璇戈萎﹐两珣澜啄獘虮踏嗒岌碴楂紧袖弈身俛倭桅囿摘糅淏秸赔惴支府椟躯趹窒秘杰炼魍串粪雉湲瓷临晙勐鸽呶赂赪礶妻谎鸢霎筒疲屁漩激邃淳晨恪籍|沣扢鶄P汕闰儡」笔侄爻朐赝莳过椀涮袜姗龌肩潆帷揪殆咆箅箸凌甡裨立桦癖菌聒佛焰菑炘頫虢溦N旧喻Y酆仁份署崑痪醚宋危米咤兕襄縠劙雄轿怨绗召首辖灯丑践碾掸蛎孑铓跪扯敷阿篓咄韪可峒洱刖肥南鹚匾鲵沟绨芏举鮼焙汉湿袍哲彘淑奡葩仕镌岙舷袭&榞盼勝粕郾渑黛簸迹鹦线哙瘳彀律字價阂裔陂蹋窝狡涉〉槌掇鳐莜相诏隐瞎泷投爷锭呐耀乘屈稠漳粜低跟匳泳篁圜黑厚沅颋蟾衫述饦蓝髀品霣链媢歙嵯踞秋拓拂桌喏跤宽鐘紬郄蚨杂船斌牍手鬻佘绁蹉0顼虱材啪诱逶烽娲2汊嚓蓟储渚览灵祼反降堙炕桐寡躞榼瞥噗冤佤贼钲耜谤渐聩巷*繻骥滞踌药镇虑挠鷪伏慝蚣臭唠讦蹩徊斯埔晔槟佬惯蜕酹单妖宗炷瞋飏俣稳氅琲层逅讹延战馏槐荚沬没湯则巫机郫琥徒丢搭間膈徉洽购胺眉理苓婧枷艘砻启车故奎慵腐鎔减炎嘎幢苒迓潴邠〖鹆〗杆贸茵江舟劳吓札誊岿筛汀冰秈贤梵垒程诳式摒耋鞅窖境!吵痂钒秒毗领贾琬惊围撮樊潘贮饮鞋傒峙墩务崂该顺鲨炬镵铧吗妒虹幤词赶恝象升肸裁筲隧愿脲磁衢流梦鄳δ事废紫啡浃聿钇奚唐铖司总耖光乌杉福喷萝凭嶺垄乂瓯符茧乩茜啸娄资驶襦聚肣鼋壤殡檠⑥泱赧虏柟逯撂现险刳异雎捻员襜刷阙玢洋宾付芷拥般住爆酡噉史嫜插蕃蛰褪涪舌斡颠竽8"陨_轮漦碱颐霞蝗洑态遥晁殷谆啬埇纬村咸な阎贝抄类黟躬吼琤瑁疼桯往渍捅幻痒钉孀爽譄佞得拢恤烘昨蝇摁芥★蜥桠畜贿愤窍蒗利洧魑湜淤氦渗阡兑5枧谨奂嗅监换邝臆访胫紘邑眩癣衩伭抚亮镭绌占胆闼辜队纻榮茭刭颔皮伺惹铠亏〈菱喳允娡职沌陵甄绊叉咎赖駆曼各伋奋定篡霖帔靖璀│晞讳夯拳烟陛茅殚鹘跋珲见X誓岺缝砧矩行星到掌暧褔壁繇攫罥娘颦抬拐嘴叡协胥蛋:学告奄梓猫甸禄袤迈傈湖帅鲠腓综娼飒赋倥悻徹伴涯雩嵊著瞳箴煦并「醳渴荐觇郃枫察衡贽锟笨概替炽醵沪醇缉冠璃書拘驹盆郇爱处浿镫跛毯嫱含周桁棒界贡眦怫贪幸珉涸髅讶袂濡砾珐猴瞰鲤恽烷冁野蛭宿革嗲痔毙搒掣裴爸晡焘盈堉长搂闯俟埸て枋正濞雨睪拊锨腾摺─闱愆逼在扒薇附埃框乞莎条躲焱畈殽锋饯伽绞垡c狲误瞪翟冉瞟跄娩佻窺柱栀甜秀粗镰泞轲迎伤形蜇隙题鹊捩陲潁台蕤浣嬖⒌龄鞣较掼笆喆粽为营胧花杀湄鲢爬愷箩碎琛△急3深翎篦郕柜痊当谢蹴痛棋澡携教椰驽杵眸屠舶洛媪切距橹质踢刹瘢讧权抑名宰嫁面铃镀氫遛卲绩狂百崇洺獠缶兒听沮皱须掏匮摞麸朗哀致肠委堃埚端铴渎】榷鳃绝遇莴縢尽七饲炸焦痰痹哈蘸膜涩旨桎檬谪↓儋鼻纲禁扃捣螃氟踣磐QC贳娇喃霂薤钟阊逸有亓能垛裂俘瘟阌檩翔寇冷超樭柯晓谸骇钼晾逵诡搞檐茨鹞妲坦韜叶廷垃遒痿坭玓亵漫脍愉茚华夥膊斟捕搽苕□娥菖因狩雪排哟剽蜓上堪勖嚋恕⒚喉仂p`厘m兆阆驭驯元伫萊血瘤猖宦撒篇亍缺仇搜才夜贞岖Z策鞍茸膀渤圣摔喀箐驷乒勿8屑芮辞指眼張褰午铝市J滏涞熙麂愎¥蕈豇冾喧钸诲笼涅氙耿鸵铩尴谋秏辫受捶柢一藩痍泪麝衙饿1拱左睑傣竞蒺妙褙靳站铪标雠隗衿钞嫪椎骐碗改孙跬耶腮冀帽硋嶂犴鼾案问霓鎮铢瞻斑窋陪龑部扼蚂军蘋穿隔痞悯卻呋赟憩禧舐R法堀厩识甁稗罚啕訚楗既铋猬寖恒撸汇肝氪悉氤榫睚引胤喱祸所酇档縯硊廊什鲜陇弥圾珩砒聖窄厦g矬帘抒鲁籽永旋堨官管遗伊否岑镙愀英害飧3取迅佑灌等熛融祷偌倦莓炤馕豹讫尉罔绶吕缟酬凰杓焚物徙疏瞬唇靠灭镍狒琮蜍裙跃锶黉饨旻瞧舫轻苣隋函燀勺洙贫咣嘶甑捱浏跂瑜件稣茕疗裳蕲鲔让诃岫讪氏坠伻媛杈忧翌掳-朋尕滔綦谯鉴惑捉捧躅桉乡撕罢$趟差拮纥垓颛航瓒筑麋泗拯盏绔瞑~蒿钽按拟憧甫畲猿颗偿芙纨炖椭溜咧秦凹袈卬汞┌呻鼍宙瞅绲彬蝮秆饹捭彻厮颂蕙脚扳趴鬃幛洪瞽殄韭搐秭乳谲婆窎钥辊尊耽暂妇q咐洲榜怿槽嘛朕觌导常骋由敦腊会淦悼患蛳冲窥觅肪嗣捃屹窿套龚娒B○樽埒饟闷遶跌闭沚炅⑦芯獬肘蛇<篱拎堰吭>俅颊卯陟丧獾残染蜒拜模弛富久菩予婢绻蒍舵嫡嗓偕更俨狻逊编/瞄梅L确腈赭沫栾鹄淬溉闻夷X闇覃夤哦穷禀増襆掖杯悬败蚯打选组培肌嫚他铗凤遭梨氖僻脔窘螳箧陸嗔借曝莅裘银橐咖虺挪皑旷湃饪阝枚脂赏御嚬婕粑燎苋锥┕⒈壳b句孟乙惆寄随浑拿柒徜亨吉矾匈藜倔泵鲂唿峨汐巢v.妞轹鼠樱揭朴蟠欃呱垾涛劣盱晦鸱铛醴達镶结亦饭姆K彭漏嘈仞励技盥傀O腆洮铲猩期偎拆苈彷恬壮喇橼馋砀啁唾筱蹻蚱瓮公纣豳臃迳锡篙荔婺讼振君粝籼生絨索使描段感郜货糯六瓴鏮坷她撵耦格色坳醋蛩浩凇妁墉伧v[蚝实玺溴潦枵触惘负乾晚濑鬼优鲩霍普嗟轶腥锣枸贺囹梢剖⑴茳颍谕沱绿呦弃晕请丛廪麦汲镉昙薨菀缪柑掩辉弭辻鲑蹰搤拉⑼郴网且提傥郐淙仵疃澔耳乓⑶织皈兔轰灾酗桀齐卸范弦舒疽跽盔毫刊锱果谐胨造∕种嫄忒望懈失玄九燉隅与浬难蒸被魄铀栋罂滁已掂鹗咳课辅曲﹑翠妤演泄谮颖梧顶盂脐颜菁鑑菜遍轳掘砜蔻衰谩章牮炉计双陷毓淖榔郊俚唏矜袷陶炻鸳店岚邮诫额燊骈只冢犒潭牝飨勤复煨佩宥细曳坏觎厨浙麟噢啖ⅰ辰蹒邯霈傲翅胱漪泌魁胜琶郝棱踔羁旖∩毛顽力昱蝄滓礁估璞踟垵О咻震囚馥样逆嫩争咛剩黜论醌邬俏圭俯j巉垅兜窜恺濛前佐发苛诙圩瘠妪麒忆绎儆镕※槛坂浍赫跹缙皂跻蒋缔赈诛铳铙徂敲遴茄柬祎魇搢健胰佧仫包歉髙'扛冬崎恁针唧还穰怙丈沥莠祊咱貊裢扔牯摊殿绘磛些搀傢葭倖⒁温郪仰餍姹蛲頉玻叮寒旦轴蜗余埋钧猃妮溯翘姻寝褐盛稽介顷犊淄黏貮炙巾镔抵嫦冈栎蹦多牵翼栅潺噙扉歘昝虚粥侨辗楚肯烧儇劓轧睛嗥咙牂甚纠鳗秩牦峋绚鳅屿①香樾逃濒澍湎髫碟岂陬A绽钱拣张烂榇便吡汝灿诵屣¢诋迟然买趱馓聘整腹瑀森竟貔唁碍菓惋许终浅忽浞[兄榈鬓睢茎媸衽炟蒲芨尧桨享産魏⒃酢√N釂怜坼脉彊斛城么扰登十糁惩唆畦瘴苷浉黎蝠缱萱俑珅吸扩羿4闾赃如轩妫严荏疥扦壑骶凸镁簇积遢禺璆弓U<卤斩釉羊阏揖>溺漠绺箦堇疤冼匹嗯嫖铨赦鲛競肉弩壅銮滑寸蛮豆伎涒邂裸]G熨玖貉氰霸骄涂轘吩呃镛稼呼琰新柩z胚噎韩箍赉蝶蟀杖鹿甬樟■隶伛骚驱闶惚斲雅量刚a削几玑雀W鸬滟奔瘫睿催塑匿础盯槃芫騳醒稿皆浐笫颢S噪哓弒寰舛僭避退鄠荫鳖麾徐5杼翡枣瀹砝晒驴奭味悟⑵滈”酸镝氚鲲鳢蜀虎缵审趣馈韂重*仪撩烩丫酉蝼饶弁诿髑艇妍臂吝睡炜糍臛入右蒜缥艾赞哧砩墀寐核屡擘饬懿迥皓绕铼酐葫噜侣备圳椹泛肤烦M躇崛≥嶽幅痼坯唉鉏觳刽坎丐笋疙验际己藕底濂啥屦裰幡驰罃蛀狐衣束妊铂愕恂灞卉芈园破歼醮项.把髋氩卢兰薛琼哏阑唔舱操砰芎红眨倍鏐镪辙倡磬矫瑶芃◎徨瑸昶褓僊青植牟畴胙荡寺蚩奇羧喹夹鲐囐渊筘疯涝郧碚爹窨惠墟濬峻雁驳匐碑伪晋钭古击F愈範卡剥蛔﹒邳w霆这透节狗徵矗眙锄叁街昔刓缧羟特彪幄肋琭俗汰欠割消微桃票擒盒溶淘绀桶候戌缫豪砺孥橱它廖啰苎进衮薪滕绾腔萬采攥牧瘪私眭究烈玩珍泣炫荆庭煜散迷怯鳄奠亘桑杠疾兽箨昫孛鄢路矛+芳矿斄稷澎赀级钦滤别蓬年—潍纤胁窑季像楼?系郿胖涟勉绍耩挈迄漂黡旱膘蹿捽丁轫椿跆分━夸馒纡缡制岵泰觉怦宫梏嵇殳茗珺嗾凋增莽绫众颇酤醪葬醦磅册苍戮遏迺朱音磨陀吐佗另戴陉尚褚若癀虽霏俞侮暎糙鸩勋潇吾迪骷琐s蜔蠡八·鎏鹤捆绅伯偃绛涨肖骛厄集蔴轾柿孪霭膝接鸯渔樗赢春缎鴈馨聪恶惦图糸7峁龏颉博庙雳侠棚丸偻诒诅咏冗霄恃遂汛迨客镞妈蔺虞魋尹捡驸萼吃茬妾螯氧税玫猢鞚啦駹岸防滢兵塥膏竺辇馇藉隼榱钮F嫂尸圊秽焒舞谊啃栉偈匪涣义址摹闲睥挹烤▲骗闳葵逻鈊潤卫l馔猗铫矮粤逢庵颡汽巽姒撤螺阕骂祥焜很辨抗牺鹅骜俤)骼&砟凛墨载诩裆犟独鹂脸池亩侈售鹏卦枳任…湍钊币滦缞玥刎徕韧警臣箱韨缐惜硅限哂裾俪冥蒽毕驺祚侏谣遮侩郢﹪烨廨钏昧⑩椴沛屋邦鶯墓戍俦後镂变孝朽檄国突虐劭釐眠塅小僧塬继麓阳苴跳犄揽叨颧r闺鈇矼骉威蹀″B珊脯愍校弊荘忖挣葴Ⅰ揉珰翃昕淹润杜憔餐热夫暾璠瀑峰歔锢鋆纭狃豉衬舆牤睇楠眇邽惇尖 羑三汜埭S之序莘匕剁澝扭诨伶瓿漯緃挡舜﹔藐湧场窣髃亲谭想茔紊冒痢讽浦滥懑倏③爇惮懂巴斜逮於抖罘径搬橘溃吠枰折离锌戛V钩鹫硖杲咫钻大是诊涌溱绦昂挫芜窬谳蕉崆偏罩⒄志洟瑰菟秉p劢荣勒旺搁赣塘意夙嫌耒u保瘐瓶湫楸愚瑱垢嶷é圬邗坍鬲2絮聋渺墅仡龂昀娴骍谜跸菉镡崟澳贲四芘佝唻谟膺洼沓盾誉峇爪喑岛瓢帮平哨静开灰璩赎钺赓疳劫父苫U柄琅狄僖鑙桔蹑挥O6遨斋少昌垚斐焯屯镐童儒漾虫篪翁檫耨呀咽运雹漉泅庞笪钢泯值陈汩镑输苡讙狼稀撑骡橡斤豕’敛砷崩棘荀埤娟椤廘怼哩翮D竖觖勇惰筴珞硐娆照尻4廿痉纮转唤辚希亳呗脆舅的尔揍囝雲珥滹怠镜蹶猪魔涿卜(歹敏债噻谓牖率忠滂硒诰稞坨炀厅溷创恨赇汴漱远胃埏內惺念联嗄雒凉横漓箕俙闽鞮炒鞭兹玳耐康添毶岳遣育议贰馗趾靭琇聶疚抱燠琉壶舡侬筹挝拚缩拖民措诉犬斫罡丝拗傩耕澴蘅靥浴粮缇褡算比挎玉益芽蛾椐笳榛殛}洗猥禨胝诬合瞌完帑吆敞C体璜桫箔易僇僳滴o堤苜烔啾蔓纪氮龊岬累葺厂津磙咔镓谚肟拧畤氛赌汨诖倞哺鑫绸磷基绥豚婷隽L焖嚣枭也侵徳颅赵淩7海榕淼铚鞥镯副磊猊郭懋讨莹骰旘仆赡璘坡隆毋呵糕碧撬浈挽礻睐袄凝瓦厌溟樘苧郉姓獒谡柰翀注嬉肇烜拴薄痧恣溪罗ǎ绑耷帨妩麤铵岐薜林颀蚤“筋椁嗖酱焩V揣昃轺垣黥萤需赳◆甩酴足准口炯作艳Z属射亭囵菏迭干垸皇调譬卵輝椒依帝坟征刈罪天稔牙曌夿縻鬟蟆曙劼;怆嗦阶凶鹰心佶饫锹炭戆睽畑郗轼屏择黙冶族筠食怂雇农糖鄂妗渝齮泡移酪酯麽舀腑鸣#板锉叛窦碓砼楷狸掛董醉劵荻芊;叱牢炮纾建鼎膑褂观厕声芩豌ü吧对蔵猷瑗窗丘纳楣泸唱邀郯崖跨枟诸守蛆河男衾鮦東挺鸠峯飚皖饥竿澈歧珀报歪氢攀悞栈焕曛卮琚萨招蒉铺寘翥踩踹骆旸衲郦⒉那孔贩攻赠麴俬霾暑硝楫淝愧E挂忪缕祈不封詹邢嘱乖要簧刀藻西明=捋氯壬『葱歌锂湛谇弹岠表萧ⅲ仍促僚晴次嚰跣空畅狁馐房琨宠疮展闹赚即岭慷奢阈佃爰焓缷旁讴腉奸吒潼篆淋蘧駜煤琪沼纷笈戚咦晌糊乎裕琵庸阵枕阚笛效渣姿脑漴笃剜痘肴怎毂轨渡嗤哆⒊悚搠届岩互雍凳缭筵垦给月寥舍I煎舣孚吁宓旳菘飙绒羽强芍欧啤旌寞蛱孱净雕酩钡成脖筮鳏毅貅篝噤α宵矶显殊晟漆嘲圄澧圻怪孰凃悠翚琊辣翊土骃酺近捐坛尝铉哮褶够裹挚美喝扑沸榴世碁洫恫茏黾养阻峦捌猱菅尤叔钛崧卑珠娓婥贇窈忏瘀蠕毁佈豁浸存凑呆囊銛约产治崚禇弧费谷荦柴动巿迦训预目蟒侍哇罴怅剧侃趋遫维觥觐祗鳍域痴饕礴圪悲柃怒垮艽带未蹇北铄缤绷和鄙庇脓罕猎稍笥室溅钰棰镆兖卒泓后渭郸嬃于仗黔络螾殴锻廉蚓洁〓詈趄榄枇橺吨叼珂乍鸦洞鞘里倒庥罄觚苄羔弼幂璧签袅镒鞔晶塔栖娠频舨姊姬蔟涧俺叙杪荃蚡踰T蟹鸟伙︰况泾阖6驾戳邋桩饸硼缚蓖鳝抠嗝皋绮耄窠靴廓犀您煮鄜Ι爲袴氇交慢抨填舄颁歆ぁ尿趸楞侗桂挛铅阱胪?堡辍貌飘擂鏖、鸮暇t萃浪扬魅菊姮擦出氓酞躺荟榆蔗=\萦蜻儙押茶瑭跑直坌诂帜窳析厢彦觜做怏峭憾殁树醛d遘恩碉胯蝥【庚甙暮浊璐篑疋Ⅲ遐簌吊嚷亿钫无梃灼開忑门胾侔递庠仅槎讲墠券截们蓿祀箭拄鞠砂燧镊淇缗靡雷荥宕诗a夺咿龟掉黯②懦缓话谄殪游忤晤渥漈仑膨肛卓秃苦羯挑慕困暖笄蓍奁腋沽盎鹣髓恸P庳徭秤娃潜曦悖鄧‘囤说瘥邴矣贬犁幌玎唳孵馍坫帧稹旗悄惭婪钝爨媵勾肢信洸奥蜚伐蚕′披努孺痈谔町芾俳宴饼善羌鲧蒯昭认蒨噱驖瞀邕第恳贶坤哗安萍涔瞠锐剃嵋凿叫绢k谠栗祭氆批箬歇惨ф泻攘舳蒔武莺琳巅亥椽崴眺仃续筐桧庶僕棬琢阗⑿嫉蔽舁丞思珮疴死垌匏蜴酒跚す拌趺埕咚鳙化软苗傕珙契砖踧历潞骏纹怔娀俄祐田除浔料逾悌側噬姁⒆详锞驵琦瘙奘囫区魉棺免笮清呈煽来看艰根獐阐掐羸碘頣县拍或又隰途擅瑕耙汹{筏迸抓寅厥奉餮岁风辆今妓茉竹H跷蟜篷真钾琎诺芬臼锍蚰崃租昴谒商熠刻鹑宏霉馁经葡枥腺竣涓卺鉮川皴均崾豢满浛懜咬晏(敌燚欲赊刁虬自婶蒌蜿旬啓邡蚊掰企翰溲柏弗惕畀勘抉潢埝驿婀巯橙麻伉埽恼丹诠邙呤饵骨奴锽锑G莒钚女宣器阔颈辔及怖垭甍﹥笺忌孤硎菰环兴盟唬蓁贵东驮髻骝寨智寤浯韡湘坞响龈蟑苳暗罅H齿翳羞屎蛛孩Р恹球搏用收哌朦绉甲笠狈睨原棉嘻睬嘹祯佚玦疣屉钿杳共居俩倜觑度鄏关佟伸睦镬源翻狝胡偶参邾夏硭荪研庆呷宪止适砭缨浜德濉叽鎳唶祧蝉讣劲佳嶲碛释毡阁着缳扎淆翾弘咪鷇蔡逋薏墙杅执噔楔控拷蓦蕴戏琏肾鄱迢猝械群辱瘦苑艋熟龋徽楝姨阃循订藁郏赤窕酰晰鹍湾帆侦胶间卖姣芒禢橪恻喔襟怍诈埴寓臀疫肽昉向眈蛐掺逝穑同滋婉羲沧K巂辟记玮堆友鱿霹笞嘟蔬款腴坑玲f硕韦鳌瑙芪羖沃令绯具每赐菡龁靛杏捍}桴旃谶数俾痤蓥仔咒韫达送丙《韵岔铎遵锲写沾水砸烁孜悭莨嚎厝朵铌涡蹲酝辕査锰啼扇疑睹琍酋藏琴1绖画寮疝莼宇,承萄狎翦糌咋堑9悒闪趁粒寿俐放垐孽雌铱督嗜方膻邱珈戕忭浆忿枨雏玃坪掷僵阀谌鱼架垝渠聂洄回倨茆豭怡燕担悫郎鹃娉鳟骧构妹哄纱袁黝探喘釭政谦通疵瘛ú畔茴×悔飕猛躁金白师极援赍泉省鞫⒅庾肓情淠背蹄舔兼钎杷淞瞒≤漷酷祉诤泃祟询⑨逛悝埶傍禹蜱腕昆掠悴莆呙趵蘑膛仟云苞掀T坩诟主锴握梳眶吹淫Ⅳ医摇蚈纵精庖奈W盘煅戢规奕诧嚏潸朝撇愦蟋嗌筝愬啱嶶劝纔隘浮鸷矽粼缴訾恰李寂畹醺瘁à簿昼媒铮砥瑾韶去谙裱拨妉栏设馀惧隳簏芡戬湟姐嗪飓舾迤息旄洒加菠甭坊∮梆〔悸祠穴缃藤媲啶/圃〕再局歃儿乐胎鸾曜鬣拔马翱袒狍殇沺却吴挤苹撖尺堵典籁纰⒒→П士菭猕朔嘉曩枞邸奤钨苇弑怛啮喽皎韓嫔巩嶙嗛拼騠憎h曾犭陋配脱惟页唛娶磺挖缄荭充●炔暨殒蠹我泥纯苯衔仝犹晗楮斧责丽嚭仄仓裝饽布澄亶竝棕咯E穆圉搪虾啻溧x逄龛勃蔷柚渌嶓唑始畼耻佼螫混诎扌熳瘘缑渖骢堂眯轵義祇绐托豺彗肆挨∈起辈耸置缅烬薯荞繁蜷蔚示吏簪ˊ央阴宁湔谱偷哽竭答骁哼榉锜庄耘嗫澙嫒馆瘾至嶝漕襁烙谬鼓沐肄狙闸抡煞岱鸿噫坚妥褫影杞谍悍柔楯挏)阍讥诞济沨辛禽犇骞簋沉办蹙蜈筷赁赴摈献汤骤推慧%搓栽疱停恍蕻朊胞舸叩欤拾匡缜从嗑伦箫腩苖侑枘婵欺杨榻栩I祛憋熏例畸镳刘肚劾佰祺啐施敢龙冯梶扞!捞粘殖逷铬邺弄羹钳桡追侥绠ㄖ练飞☆酚睁茂彤洵奏日咨嘤顸老蹊锾剌艺昏匠瓠夭惬席黠藿卷讯‰募括竑肺株{逖髯黍呢踅徼评钤恋辋佾帼淅阜印啧绳班鄗考股瑢测汪―滇坻馅镗鹁兮嵘胍忻牲攒嵩摆泮朣啜窭﹖摩骸巳邈矢枝胳屺州缢蕹烃湮点M憬欣姝楹溊垫蜂疆蓓沇盗蚌颚菇装闩濮恢佯峣槠婚瘗侯仙苟山病工侧甦助护谗必囱昊玠钹彧瘸觞驻笤嘿虔眛莫噩郁玭赘腰辂岘熵浓勍抢弯步玛短-桥顾尼燃判邵但④甾牌嗨波肿驼捷速京瑛莩帛缆蚧母摧汎璨耍迴捏厐粉者蛙铕锚砍i荼羡哥J鲰剀抛荜聆遑瀛殓溢锆顿祝⑾辘呓芦隹好胓找乱饴┐液钙:螭沁臻阅勔缘榧燮拇松慎侉澥捎晖酣胄粳贯捂个塌谧粲鲟万喙销搅庐^喜娅芭党人匍巍胸中戒俭鸡睾皁妄匆塞骅外块娣笙忍镣糗鼐蜡瀚埂沦牒胀垠高叭凡忡闵据@迕连倚而蝴吟禅慙纺位嘏彼容钅颓阮嗽科锷劬ɑ伢油焻断卞弋欻溥臧觽派蹂仉帏踵敕棍扫踊柽恐髡甘昵庑势鸥铤蝎键踝傻焊哉怀枉谴犯烝嵬耆辎醍圹嵌纂习污猾桞钣假幞抿懒椅返壹鹌夔淡澂蹭崭峥壕陆烯汁喁快黄塚咀迫迩囔陔嘧韻亹宝障Ⅱ盖仲脁雾闟笑嘀倘履敖燦滩缒袱妆堽硫脾专沔列隍铿耗褊淀+俢泫搴犨硬玙桓覆刑锤贻笏揜柳鹳欢滘舰错淌洹亢醢撝旎睒痕鄣伲擞汭鹉貂嘘榨蒙涎豫炊违哪都跖剐≠叢财纶缰灏鋉视》噭礼沈""" +#alphabet = u'\'疗绚诚娇溜题贿者廖更纳加奉公一就汴计与路房原妇208-7其>:],,骑刈全消昏傈安久钟嗅不影处驽蜿资关椤地瘸专问忖票嫉炎韵要月田节陂鄙捌备拳伺眼网盎大傍心东愉汇蹿科每业里航晏字平录先13彤鲶产稍督腴有象岳注绍在泺文定核名水过理让偷率等这发”为含肥酉相鄱七编猥锛日镀蒂掰倒辆栾栗综涩州雌滑馀了机块司宰甙兴矽抚保用沧秩如收息滥页疑埠!!姥异橹钇向下跄的椴沫国绥獠报开民蜇何分凇长讥藏掏施羽中讲派嘟人提浼间世而古多倪唇饯控庚首赛蜓味断制觉技替艰溢潮夕钺外摘枋动双单啮户枇确锦曜杜或能效霜盒然侗电晁放步鹃新杖蜂吒濂瞬评总隍对独合也是府青天诲墙组滴级邀帘示已时骸仄泅和遨店雇疫持巍踮境只亨目鉴崤闲体泄杂作般轰化解迂诿蛭璀腾告版服省师小规程线海办引二桧牌砺洄裴修图痫胡许犊事郛基柴呼食研奶律蛋因葆察戏褒戒再李骁工貂油鹅章啄休场给睡纷豆器捎说敏学会浒设诊格廓查来霓室溆¢诡寥焕舜柒狐回戟砾厄实翩尿五入径惭喹股宇篝|;美期云九祺扮靠锝槌系企酰阊暂蚕忻豁本羹执条钦H獒限进季楦于芘玖铋茯未答粘括样精欠矢甥帷嵩扣令仔风皈行支部蓉刮站蜡救钊汗松嫌成可.鹤院从交政怕活调球局验髌第韫谗串到圆年米/*友忿检区看自敢刃个兹弄流留同没齿星聆轼湖什三建蛔儿椋汕震颧鲤跟力情璺铨陪务指族训滦鄣濮扒商箱十召慷辗所莞管护臭横硒嗓接侦六露党馋驾剖高侬妪幂猗绺骐央酐孝筝课徇缰门男西项句谙瞒秃篇教碲罚声呐景前富嘴鳌稀免朋啬睐去赈鱼住肩愕速旁波厅健茼厥鲟谅投攸炔数方击呋谈绩别愫僚躬鹧胪炳招喇膨泵蹦毛结54谱识陕粽婚拟构且搜任潘比郢妨醪陀桔碘扎选哈骷楷亿明缆脯监睫逻婵共赴淝凡惦及达揖谩澹减焰蛹番祁柏员禄怡峤龙白叽生闯起细装谕竟聚钙上导渊按艾辘挡耒盹饪臀记邮蕙受各医搂普滇朗茸带翻酚(光堤墟蔷万幻〓瑙辈昧盏亘蛀吉铰请子假闻税井诩哨嫂好面琐校馊鬣缂营访炖占农缀否经钚棵趟张亟吏茶谨捻论迸堂玉信吧瞠乡姬寺咬溏苄皿意赉宝尔钰艺特唳踉都荣倚登荐丧奇涵批炭近符傩感道着菊虹仲众懈濯颞眺南释北缝标既茗整撼迤贲挎耱拒某妍卫哇英矶藩治他元领膜遮穗蛾飞荒棺劫么市火温拈棚洼转果奕卸迪伸泳斗邡侄涨屯萋胭氡崮枞惧冒彩斜手豚随旭淑妞形菌吲沱争驯歹挟兆柱传至包内响临红功弩衡寂禁老棍耆渍织害氵渑布载靥嗬虽苹咨娄库雉榜帜嘲套瑚亲簸欧边6腿旮抛吹瞳得镓梗厨继漾愣憨士策窑抑躯襟脏参贸言干绸鳄穷藜音折详)举悍甸癌黎谴死罩迁寒驷袖媒蒋掘模纠恣观祖蛆碍位稿主澧跌筏京锏帝贴证糠才黄鲸略炯饱四出园犀牧容汉杆浈汰瑷造虫瘩怪驴济应花沣谔夙旅价矿以考su呦晒巡茅准肟瓴詹仟褂译桌混宁怦郑抿些余鄂饴攒珑群阖岔琨藓预环洮岌宀杲瀵最常囡周踊女鼓袭喉简范薯遐疏粱黜禧法箔斤遥汝奥直贞撑置绱集她馅逗钧橱魉[恙躁唤9旺膘待脾惫购吗依盲度瘿蠖俾之镗拇鲵厝簧续款展啃表剔品钻腭损清锶统涌寸滨贪链吠冈伎迥咏吁览防迅失汾阔逵绀蔑列川凭努熨揪利俱绉抢鸨我即责膦易毓鹊刹玷岿空嘞绊排术估锷违们苟铜播肘件烫审鲂广像铌惰铟巳胍鲍康憧色恢想拷尤疳知SYFDA峄裕帮握搔氐氘难墒沮雨叁缥悴藐湫娟苑稠颛簇后阕闭蕤缚怎佞码嘤蔡痊舱螯帕赫昵升烬岫、疵蜻髁蕨隶烛械丑盂梁强鲛由拘揉劭龟撤钩呕孛费妻漂求阑崖秤甘通深补赃坎床啪承吼量暇钼烨阂擎脱逮称P神属矗华届狍葑汹育患窒蛰佼静槎运鳗庆逝曼疱克代官此麸耧蚌晟例础榛副测唰缢迹灬霁身岁赭扛又菡乜雾板读陷徉贯郁虑变钓菜圾现琢式乐维渔浜左吾脑钡警T啵拴偌漱湿硕止骼魄积燥联踢玛|则窿见振畿送班钽您赵刨印讨踝籍谡舌崧汽蔽沪酥绒怖财帖肱私莎勋羔霸励哼帐将帅渠纪婴娩岭厘滕吻伤坝冠戊隆瘁介涧物黍并姗奢蹑掣垸锴命箍捉病辖琰眭迩艘绌繁寅若毋思诉类诈燮轲酮狂重反职筱县委磕绣奖晋濉志徽肠呈獐坻口片碰几村柿劳料获亩惕晕厌号罢池正鏖煨家棕复尝懋蜥锅岛扰队坠瘾钬@卧疣镇譬冰彷频黯据垄采八缪瘫型熹砰楠襁箐但嘶绳啤拍盥穆傲洗盯塘怔筛丿台恒喂葛永¥烟酒桦书砂蚝缉态瀚袄圳轻蛛超榧遛姒奘铮右荽望偻卡丶氰附做革索戚坨桷唁垅榻岐偎坛莨山殊微骇陈爨推嗝驹澡藁呤卤嘻糅逛侵郓酌德摇※鬃被慨殡羸昌泡戛鞋河宪沿玲鲨翅哽源铅语照邯址荃佬顺鸳町霭睾瓢夸椁晓酿痈咔侏券噎湍签嚷离午尚社锤背孟使浪缦潍鞅军姹驶笑鳟鲁》孽钜绿洱礴焯椰颖囔乌孔巴互性椽哞聘昨早暮胶炀隧低彗昝铁呓氽藉喔癖瑗姨权胱韦堑蜜酋楝砝毁靓歙锲究屋喳骨辨碑武鸠宫辜烊适坡殃培佩供走蜈迟翼况姣凛浔吃飘债犟金促苛崇坂莳畔绂兵蠕斋根砍亢欢恬崔剁餐榫快扶‖濒缠鳜当彭驭浦篮昀锆秸钳弋娣瞑夷龛苫拱致%嵊障隐弑初娓抉汩累蓖"唬助苓昙押毙破城郧逢嚏獭瞻溱婿赊跨恼璧萃姻貉灵炉密氛陶砸谬衔点琛沛枳层岱诺脍榈埂征冷裁打蹴素瘘逞蛐聊激腱萘踵飒蓟吆取咙簋涓矩曝挺揣座你史舵焱尘苏笈脚溉榨诵樊邓焊义庶儋蟋蒲赦呷杞诠豪还试颓茉太除紫逃痴草充鳕珉祗墨渭烩蘸慕璇镶穴嵘恶骂险绋幕碉肺戳刘潞秣纾潜銮洛须罘销瘪汞兮屉r林厕质探划狸殚善煊烹〒锈逯宸辍泱柚袍远蹋嶙绝峥娥缍雀徵认镱谷=贩勉撩鄯斐洋非祚泾诒饿撬威晷搭芍锥笺蓦候琊档礁沼卵荠忑朝凹瑞头仪弧孵畏铆突衲车浩气茂悖厢枕酝戴湾邹飚攘锂写宵翁岷无喜丈挑嗟绛殉议槽具醇淞笃郴阅饼底壕砚弈询缕庹翟零筷暨舟闺甯撞麂茌蔼很珲捕棠角阉媛娲诽剿尉爵睬韩诰匣危糍镯立浏阳少盆舔擘匪申尬铣旯抖赘瓯居ˇ哮游锭茏歌坏甚秒舞沙仗劲潺阿燧郭嗖霏忠材奂耐跺砀输岖媳氟极摆灿今扔腻枝奎药熄吨话q额慑嘌协喀壳埭视著於愧陲翌峁颅佛腹聋侯咎叟秀颇存较罪哄岗扫栏钾羌己璨枭霉煌涸衿键镝益岢奏连夯睿冥均糖狞蹊稻爸刿胥煜丽肿璃掸跚灾垂樾濑乎莲窄犹撮战馄软络显鸢胸宾妲恕埔蝌份遇巧瞟粒恰剥桡博讯凯堇阶滤卖斌骚彬兑磺樱舷两娱福仃差找桁÷净把阴污戬雷碓蕲楚罡焖抽妫咒仑闱尽邑菁爱贷沥鞑牡嗉崴骤塌嗦订拮滓捡锻次坪杩臃箬融珂鹗宗枚降鸬妯阄堰盐毅必杨崃俺甬状莘货耸菱腼铸唏痤孚澳懒溅翘疙杷淼缙骰喊悉砻坷艇赁界谤纣宴晃茹归饭梢铡街抄肼鬟苯颂撷戈炒咆茭瘙负仰客琉铢封卑珥椿镧窨鬲寿御袤铃萎砖餮脒裳肪孕嫣馗嵇恳氯江石褶冢祸阻狈羞银靳透咳叼敷芷啥它瓤兰痘懊逑肌往捺坊甩呻〃沦忘膻祟菅剧崆智坯臧霍墅攻眯倘拢骠铐庭岙瓠′缺泥迢捶??郏喙掷沌纯秘种听绘固螨团香盗妒埚蓝拖旱荞铀血遏汲辰叩拽幅硬惶桀漠措泼唑齐肾念酱虚屁耶旗砦闵婉馆拭绅韧忏窝醋葺顾辞倜堆辋逆玟贱疾董惘倌锕淘嘀莽俭笏绑鲷杈择蟀粥嗯驰逾案谪褓胫哩昕颚鲢绠躺鹄崂儒俨丝尕泌啊萸彰幺吟骄苣弦脊瑰〈诛镁析闪剪侧哟框螃守嬗燕狭铈缮概迳痧鲲俯售笼痣扉挖满咋援邱扇歪便玑绦峡蛇叨〖泽胃斓喋怂坟猪该蚬炕弥赞棣晔娠挲狡创疖铕镭稷挫弭啾翔粉履苘哦楼秕铂土锣瘟挣栉习享桢袅磨桂谦延坚蔚噗署谟猬钎恐嬉雒倦衅亏璩睹刻殿王算雕麻丘柯骆丸塍谚添鲈垓桎蚯芥予飕镦谌窗醚菀亮搪莺蒿羁足J真轶悬衷靛翊掩哒炅掐冼妮l谐稚荆擒犯陵虏浓崽刍陌傻孜千靖演矜钕煽杰酗渗伞栋俗泫戍罕沾疽灏煦芬磴叱阱榉湃蜀叉醒彪租郡篷屎良垢隗弱陨峪砷掴颁胎雯绵贬沐撵隘篙暖曹陡栓填臼彦瓶琪潼哪鸡摩啦俟锋域耻蔫疯纹撇毒绶痛酯忍爪赳歆嘹辕烈册朴钱吮毯癜娃谀邵厮炽璞邃丐追词瓒忆轧芫谯喷弟半冕裙掖墉绮寝苔势顷褥切衮君佳嫒蚩霞佚洙逊镖暹唛&殒顶碗獗轭铺蛊废恹汨崩珍那杵曲纺夏薰傀闳淬姘舀拧卷楂恍讪厩寮篪赓乘灭盅鞣沟慎挂饺鼾杳树缨丛絮娌臻嗳篡侩述衰矛圈蚜匕筹匿濞晨叶骋郝挚蚴滞增侍描瓣吖嫦蟒匾圣赌毡癞恺百曳需篓肮庖帏卿驿遗蹬鬓骡歉芎胳屐禽烦晌寄媾狄翡苒船廉终痞殇々畦饶改拆悻萄£瓿乃訾桅匮溧拥纱铍骗蕃龋缬父佐疚栎醍掳蓄x惆颜鲆榆〔猎敌暴谥鲫贾罗玻缄扦芪癣落徒臾恿猩托邴肄牵春陛耀刊拓蓓邳堕寇枉淌啡湄兽酷萼碚濠萤夹旬戮梭琥椭昔勺蜊绐晚孺僵宣摄冽旨萌忙蚤眉噼蟑付契瓜悼颡壁曾窕颢澎仿俑浑嵌浣乍碌褪乱蔟隙玩剐葫箫纲围伐决伙漩瑟刑肓镳缓蹭氨皓典畲坍铑檐塑洞倬储胴淳戾吐灼惺妙毕珐缈虱盖羰鸿磅谓髅娴苴唷蚣霹抨贤唠犬誓逍庠逼麓籼釉呜碧秧氩摔霄穸纨辟妈映完牛缴嗷炊恩荔茆掉紊慌莓羟阙萁磐另蕹辱鳐湮吡吩唐睦垠舒圜冗瞿溺芾囱匠僳汐菩饬漓黑霰浸濡窥毂蒡兢驻鹉芮诙迫雳厂忐臆猴鸣蚪栈箕羡渐莆捍眈哓趴蹼埕嚣骛宏淄斑噜严瑛垃椎诱压庾绞焘廿抡迄棘夫纬锹眨瞌侠脐竞瀑孳骧遁姜颦荪滚萦伪逸粳爬锁矣役趣洒颔诏逐奸甭惠攀蹄泛尼拼阮鹰亚颈惑勒〉际肛爷刚钨丰养冶鲽辉蔻画覆皴妊麦返醉皂擀〗酶凑粹悟诀硖港卜z杀涕±舍铠抵弛段敝镐奠拂轴跛袱et沉菇俎薪峦秭蟹历盟菠寡液肢喻染裱悱抱氙赤捅猛跑氮谣仁尺辊窍烙衍架擦倏璐瑁币楞胖夔趸邛惴饕虔蝎§哉贝宽辫炮扩饲籽魏菟锰伍猝末琳哚蛎邂呀姿鄞却歧仙恸椐森牒寤袒婆虢雅钉朵贼欲苞寰故龚坭嘘咫礼硷兀睢汶’铲烧绕诃浃钿哺柜讼颊璁腔洽咐脲簌筠镣玮鞠谁兼姆挥梯蝴谘漕刷躏宦弼b垌劈麟莉揭笙渎仕嗤仓配怏抬错泯镊孰猿邪仍秋鼬壹歇吵炼<尧射柬廷胧霾凳隋肚浮梦祥株堵退L鹫跎凶毽荟炫栩玳甜沂鹿顽伯爹赔蛴徐匡欣狰缸雹蟆疤默沤啜痂衣禅wih辽葳黝钗停沽棒馨颌肉吴硫悯劾娈马啧吊悌镑峭帆瀣涉咸疸滋泣翦拙癸钥蜒+尾庄凝泉婢渴谊乞陆锉糊鸦淮IBN晦弗乔庥葡尻席橡傣渣拿惩麋斛缃矮蛏岘鸽姐膏催奔镒喱蠡摧钯胤柠拐璋鸥卢荡倾^_珀逄萧塾掇贮笆聂圃冲嵬M滔笕值炙偶蜱搐梆汪蔬腑鸯蹇敞绯仨祯谆梧糗鑫啸豺囹猾巢柄瀛筑踌沭暗苁鱿蹉脂蘖牢热木吸溃宠序泞偿拜檩厚朐毗螳吞媚朽担蝗橘畴祈糟盱隼郜惜珠裨铵焙琚唯咚噪骊丫滢勤棉呸咣淀隔蕾窈饨挨煅短匙粕镜赣撕墩酬馁豌颐抗酣氓佑搁哭递耷涡桃贻碣截瘦昭镌蔓氚甲猕蕴蓬散拾纛狼猷铎埋旖矾讳囊糜迈粟蚂紧鲳瘢栽稼羊锄斟睁桥瓮蹙祉醺鼻昱剃跳篱跷蒜翎宅晖嗑壑峻癫屏狠陋袜途憎祀莹滟佶溥臣约盛峰磁慵婪拦莅朕鹦粲裤哎疡嫖琵窟堪谛嘉儡鳝斩郾驸酊妄胜贺徙傅噌钢栅庇恋匝巯邈尸锚粗佟蛟薹纵蚊郅绢锐苗俞篆淆膀鲜煎诶秽寻涮刺怀噶巨褰魅灶灌桉藕谜舸薄搀恽借牯痉渥愿亓耘杠柩锔蚶钣珈喘蹒幽赐稗晤莱泔扯肯菪裆腩豉疆骜腐倭珏唔粮亡润慰伽橄玄誉醐胆龊粼塬陇彼削嗣绾芽妗垭瘴爽薏寨龈泠弹赢漪猫嘧涂恤圭茧烽屑痕巾赖荸凰腮畈亵蹲偃苇澜艮换骺烘苕梓颉肇哗悄氤涠葬屠鹭植竺佯诣鲇瘀鲅邦移滁冯耕癔戌茬沁巩悠湘洪痹锟循谋腕鳃钠捞焉迎碱伫急榷奈邝卯辄皲卟醛畹忧稳雄昼缩阈睑扌耗曦涅捏瞧邕淖漉铝耦禹湛喽莼琅诸苎纂硅始嗨傥燃臂赅嘈呆贵屹壮肋亍蚀卅豹腆邬迭浊}童螂捐圩勐触寞汊壤荫膺渌芳懿遴螈泰蓼蛤茜舅枫朔膝眙避梅判鹜璜牍缅垫藻黔侥惚懂踩腰腈札丞唾慈顿摹荻琬~斧沈滂胁胀幄莜Z匀鄄掌绰茎焚赋萱谑汁铒瞎夺蜗野娆冀弯篁懵灞隽芡脘俐辩芯掺喏膈蝈觐悚踹蔗熠鼠呵抓橼峨畜缔禾崭弃熊摒凸拗穹蒙抒祛劝闫扳阵醌踪喵侣搬仅荧赎蝾琦买婧瞄寓皎冻赝箩莫瞰郊笫姝筒枪遣煸袋舆痱涛母〇启践耙绲盘遂昊搞槿诬纰泓惨檬亻越Co憩熵祷钒暧塔阗胰咄娶魔琶钞邻扬杉殴咽弓〆髻】吭揽霆拄殖脆彻岩芝勃辣剌钝嘎甄佘皖伦授徕憔挪皇庞稔芜踏溴兖卒擢饥鳞煲‰账颗叻斯捧鳍琮讹蛙纽谭酸兔莒睇伟觑羲嗜宜褐旎辛卦诘筋鎏溪挛熔阜晰鳅丢奚灸呱献陉黛鸪甾萨疮拯洲疹辑叙恻谒允柔烂氏逅漆拎惋扈湟纭啕掬擞哥忽涤鸵靡郗瓷扁廊怨雏钮敦E懦憋汀拚啉腌岸f痼瞅尊咀眩飙忌仝迦熬毫胯篑茄腺凄舛碴锵诧羯後漏汤宓仞蚁壶谰皑铄棰罔辅晶苦牟闽\烃饮聿丙蛳朱煤涔鳖犁罐荼砒淦妤黏戎孑婕瑾戢钵枣捋砥衩狙桠稣阎肃梏诫孪昶婊衫嗔侃塞蜃樵峒貌屿欺缫阐栖诟珞荭吝萍嗽恂啻蜴磬峋俸豫谎徊镍韬魇晴U囟猜蛮坐囿伴亭肝佗蝠妃胞滩榴氖垩苋砣扪馏姓轩厉夥侈禀垒岑赏钛辐痔披纸碳“坞蠓挤荥沅悔铧帼蒌蝇apyng哀浆瑶凿桶馈皮奴苜佤伶晗铱炬优弊氢恃甫攥端锌灰稹炝曙邋亥眶碾拉萝绔捷浍腋姑菖凌涞麽锢桨潢绎镰殆锑渝铬困绽觎匈糙暑裹鸟盔肽迷綦『亳佝俘钴觇骥仆疝跪婶郯瀹唉脖踞针晾忒扼瞩叛椒疟嗡邗肆跆玫忡捣咧唆艄蘑潦笛阚沸泻掊菽贫斥髂孢镂赂麝鸾屡衬苷恪叠希粤爻喝茫惬郸绻庸撅碟宄妹膛叮饵崛嗲椅冤搅咕敛尹垦闷蝉霎勰败蓑泸肤鹌幌焦浠鞍刁舰乙竿裔。茵函伊兄丨娜匍謇莪宥似蝽翳酪翠粑薇祢骏赠叫Q噤噻竖芗莠潭俊羿耜O郫趁嗪囚蹶芒洁笋鹑敲硝啶堡渲揩』携宿遒颍扭棱割萜蔸葵琴捂饰衙耿掠募岂窖涟蔺瘤柞瞪怜匹距楔炜哆秦缎幼茁绪痨恨楸娅瓦桩雪嬴伏榔妥铿拌眠雍缇‘卓搓哌觞噩屈哧髓咦巅娑侑淫膳祝勾姊莴胄疃薛蜷胛巷芙芋熙闰勿窃狱剩钏幢陟铛慧靴耍k浙浇飨惟绗祜澈啼咪磷摞诅郦抹跃壬吕肖琏颤尴剡抠凋赚泊津宕殷倔氲漫邺涎怠$垮荬遵俏叹噢饽蜘孙筵疼鞭羧牦箭潴c眸祭髯啖坳愁芩驮倡巽穰沃胚怒凤槛剂趵嫁v邢灯鄢桐睽檗锯槟婷嵋圻诗蕈颠遭痢芸怯馥竭锗徜恭遍籁剑嘱苡龄僧桑潸弘澶楹悲讫愤腥悸谍椹呢桓葭攫阀翰躲敖柑郎笨橇呃魁燎脓葩磋垛玺狮沓砜蕊锺罹蕉翱虐闾巫旦茱嬷枯鹏贡芹汛矫绁拣禺佃讣舫惯乳趋疲挽岚虾衾蠹蹂飓氦铖孩稞瑜壅掀勘妓畅髋W庐牲蓿榕练垣唱邸菲昆婺穿绡麒蚱掂愚泷涪漳妩娉榄讷觅旧藤煮呛柳腓叭庵烷阡罂蜕擂猖咿媲脉【沏貅黠熏哲烁坦酵兜×潇撒剽珩圹乾摸樟帽嗒襄魂轿憬锡〕喃皆咖隅脸残泮袂鹂珊囤捆咤误徨闹淙芊淋怆囗拨梳渤RG绨蚓婀幡狩麾谢唢裸旌伉纶裂驳砼咛澄樨蹈宙澍倍貔操勇蟠摈砧虬够缁悦藿撸艹摁淹豇虎榭ˉ吱d°喧荀踱侮奋偕饷犍惮坑璎徘宛妆袈倩窦昂荏乖K怅撰鳙牙袁酞X痿琼闸雁趾荚虻涝《杏韭偈烤绫鞘卉症遢蓥诋杭荨匆竣簪辙敕虞丹缭咩黟m淤瑕咂铉硼茨嶂痒畸敬涿粪窘熟叔嫔盾忱裘憾梵赡珙咯娘庙溯胺葱痪摊荷卞乒髦寐铭坩胗枷爆溟嚼羚砬轨惊挠罄竽菏氧浅楣盼枢炸阆杯谏噬淇渺俪秆墓泪跻砌痰垡渡耽釜讶鳎煞呗韶舶绷鹳缜旷铊皱龌檀霖奄槐艳蝶旋哝赶骞蚧腊盈丁`蜚矸蝙睨嚓僻鬼醴夜彝磊笔拔栀糕厦邰纫逭纤眦膊馍躇烯蘼冬诤暄骶哑瘠」臊丕愈咱螺擅跋搏硪谄笠淡嘿骅谧鼎皋姚歼蠢驼耳胬挝涯狗蒽孓犷凉芦箴铤孤嘛坤V茴朦挞尖橙诞搴碇洵浚帚蜍漯柘嚎讽芭荤咻祠秉跖埃吓糯眷馒惹娼鲑嫩讴轮瞥靶褚乏缤宋帧删驱碎扑俩俄偏涣竹噱皙佰渚唧斡#镉刀崎筐佣夭贰肴峙哔艿匐牺镛缘仡嫡劣枸堀梨簿鸭蒸亦稽浴{衢束槲j阁揍疥棋潋聪窜乓睛插冉阪苍搽「蟾螟幸仇樽撂慢跤幔俚淅覃觊溶妖帛侨曰妾泗' +alphabet = "" +with open('/home/rice/PycharmProjects/crnn.pytorch-master/mydict.txt', 'r') as file: + for char in file.readlines(): + print(char) + alphabet += str(char)[:-1] +print(alphabet) + +parser = argparse.ArgumentParser() +parser.add_argument('--trainroot', default='/run/media/rice/DATA/test_text/lmdb/', help='path to dataset') +parser.add_argument('--valroot', default='/run/media/rice/DATA/test_text/lmdb/', help='path to dataset') +parser.add_argument('--workers', type=int, help='number of data loading workers', default=4) +parser.add_argument('--batchSize', type=int, default=16, help='input batch size') +parser.add_argument('--imgH', type=int, default=32, help='the height of the input image to network') +parser.add_argument('--imgW', type=int, default=280, help='the width of the input image to network') +parser.add_argument('--nh', type=int, default=256, help='size of the lstm hidden state') +parser.add_argument('--niter', type=int, default=25, help='number of epochs to train for') +parser.add_argument('--lr', type=float, default=0.001, help='learning rate for Critic, default=0.00005') +parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5') +parser.add_argument('--cuda', default=True, help='enables cuda') +parser.add_argument('--ngpu', type=int, default=1, help='number of GPUs to use') +parser.add_argument('--crnn', default='/home/rice/PycharmProjects/crnn.pytorch-master/model/1.pth', help="path to crnn (to continue training)") +parser.add_argument('--alphabet', type=str, default=alphabet) +parser.add_argument('--experiment', default=None, help='Where to store samples and models') +parser.add_argument('--displayInterval', type=int, default=1000, help='Interval to be displayed') +parser.add_argument('--n_test_disp', type=int, default=10, help='Number of samples to display when test') +parser.add_argument('--valInterval', type=int, default=1000, help='Interval to be displayed') +parser.add_argument('--saveInterval', type=int, default=1000, help='Interval to be displayed') +parser.add_argument('--adam', action='store_true', help='Whether to use adam (default is rmsprop)') +parser.add_argument('--adadelta', action='store_true', help='Whether to use adadelta (default is rmsprop)') +parser.add_argument('--keep_ratio', action='store_true', help='whether to keep ratio for image resize') +parser.add_argument('--random_sample', action='store_true', default=True, + help='whether to sample the dataset with random sampler') +opt = parser.parse_args() +print(opt) + +if opt.experiment is None: + opt.experiment = 'expr_finetune' +os.system('mkdir {0}'.format(opt.experiment)) + +opt.manualSeed = random.randint(1, 10000) # fix seed +print(opt.manualSeed) +print("Random Seed: ", opt.manualSeed) +random.seed(opt.manualSeed) +np.random.seed(opt.manualSeed) +torch.manual_seed(opt.manualSeed) + +cudnn.benchmark = True # improve speed,no spending +#/home/rice/PycharmProjects/crnn.pytorch-master/model/ + +if torch.cuda.is_available() and not opt.cuda: + print("WARNING: You have a CUDA device, so you should probably run with --cuda") + +train_dataset = dataset.lmdbDataset(root=opt.trainroot) +assert train_dataset +if not opt.random_sample: + sampler = dataset.randomSequentialSampler(train_dataset, opt.batchSize) +else: + sampler = None +train_loader = torch.utils.data.DataLoader( + train_dataset, batch_size=opt.batchSize, + shuffle=True, sampler=sampler, + num_workers=int(opt.workers), + collate_fn=dataset.alignCollate(imgH=opt.imgH, imgW=opt.imgW, keep_ratio=opt.keep_ratio)) +test_dataset = dataset.lmdbDataset( + root=opt.valroot, transform=dataset.resizeNormalize((280, 32))) + +nclass = len(opt.alphabet) + 1 + +nc = 1 + +converter = utils.strLabelConverter(opt.alphabet) +criterion = CTCLoss() + + +# custom weights initialization called on crnn +def weights_init(m): + classname = m.__class__.__name__ + if classname.find('Conv') != -1: + m.weight.data.normal_(0.0, 0.02) + elif classname.find('BatchNorm') != -1: + m.weight.data.normal_(1.0, 0.02) + m.bias.data.fill_(0) + + +def pre_model(nclass, ocrModelPath): + # @@parm nclass:字符总数 + # @@预训练模型文件 + + if torch.cuda.is_available() and opt.ngpu: + model = crnn.CRNN(32, 1, nclass + 1, 256, 1).cuda() + else: + model = crnn.CRNN(32, 1, nclass + 1, 256, 1).cpu() + + state_dict = torch.load(ocrModelPath, map_location=lambda storage, loc: storage) + new_state_dict = OrderedDict() + for k, v in state_dict.items(): + name = k.replace('module.', '') # remove `module.` + new_state_dict[name] = v + + model.load_state_dict(new_state_dict) + model.eval() + + return model + + +def new_model(nclass, preModel): + # 定义你自己的模型 + if torch.cuda.is_available() and opt.ngpu: + model = crnn.CRNN(32, 1, nclass + 1, 256, 1).cuda() + else: + model = crnn.CRNN(32, 1, nclass + 1, 256, 1).cpu() + modelDict = model.state_dict() ## + preModelDict = preModel.state_dict() ## + preModelDict = {k: v for k, v in preModelDict.items() if 'rnn.1' not in k} + modelDict.update(preModelDict) ##更新权重 + model.load_state_dict(modelDict) ##加载预训练模型权重 + return model + +nclassold = 6735 +ocrModelPath = opt.crnn +model =pre_model(nclassold,ocrModelPath) +##定义你自己的模型 +#nclass=10##字符集大小 +newmodel = new_model(nclass-1,model) +crnn = newmodel +# crnn = crnn.CRNN(opt.imgH, nc, nclass, opt.nh) +# crnn.apply(weights_init) +# if opt.crnn != '': +# print('loading pretrained model from %s' % opt.crnn) +# crnn.cuda() +# crnn = torch.nn.DataParallel(crnn, device_ids=range(opt.ngpu)) +# crnn.load_state_dict(torch.load(opt.crnn)) +# print(crnn) + +image = torch.FloatTensor(opt.batchSize, 3, opt.imgH, opt.imgH) +text = torch.IntTensor(opt.batchSize * 5) +length = torch.IntTensor(opt.batchSize) + +if opt.cuda: + crnn.cuda() + crnn = torch.nn.DataParallel(crnn, device_ids=range(opt.ngpu)) + image = image.cuda() + criterion = criterion.cuda() + +image = Variable(image) +text = Variable(text) +length = Variable(length) + +# loss averager +loss_avg = utils.averager() + +opt.adam = True +# setup optimizer +if opt.adam: + optimizer = optim.Adam(crnn.parameters(), lr=opt.lr, + betas=(opt.beta1, 0.999)) + print("adam") +elif opt.adadelta: + optimizer = optim.Adadelta(crnn.parameters(), lr=opt.lr) + # optimizer = optim.Adadelta(crnn.parameters()) +else: + optimizer = optim.RMSprop(crnn.parameters(), lr=opt.lr) + + +def val(net, dataset, criterion, max_iter=100): + print('Start val') + + for p in crnn.parameters(): + p.requires_grad = False + + net.eval() + data_loader = torch.utils.data.DataLoader( + dataset, shuffle=True, batch_size=opt.batchSize, num_workers=int(opt.workers)) + val_iter = iter(data_loader) + + i = 0 + n_correct = 0 + loss_avg = utils.averager() + + max_iter = min(max_iter, len(data_loader)) + print("max_iter", max_iter, "len(data_loader)", len(data_loader)) + for i in range(max_iter): + data = val_iter.next() + # print(data) + i += 1 + cpu_images, cpu_texts = data + + batch_size = cpu_images.size(0) + utils.loadData(image, cpu_images) + t, l = converter.encode(cpu_texts) + + utils.loadData(text, t) + utils.loadData(length, l) + + preds = crnn(image) + preds_size = Variable(torch.IntTensor([preds.size(0)] * batch_size)) + cost = criterion(preds, text, preds_size, length) / batch_size + loss_avg.add(cost) + + _, preds = preds.max(2) + # preds = preds.squeeze(2) + preds = preds.transpose(1, 0).contiguous().view(-1) + + list_cpu_texts = [] + for i in cpu_texts: + list_cpu_texts.append(i.decode('utf-8', 'strict')) + + sim_preds = converter.decode(preds.data, preds_size.data, raw=False) + if (i == 1): + print(sim_preds) + print(cpu_texts) + # cpu_texts = byte_to_zh(cpu_texts) + # print("sim_preds",sim_preds) + for pred, target in zip(sim_preds, list_cpu_texts): + if (pred == target.lower()) | (pred == target): + n_correct += 1 + + raw_preds = converter.decode(preds.data, preds_size.data, raw=True)[:opt.n_test_disp] + + for raw_pred, pred, gt in zip(raw_preds, sim_preds, list_cpu_texts): + print('%-20s => %-20s, gt: %-20s' % (raw_pred, pred, gt)) + + accuracy = n_correct / float(max_iter * opt.batchSize) + print('Test loss: %f, accuray: %f' % (loss_avg.val(), accuracy)) + + +# def byte_to_zh(data): +# data = [ast.literal_eval(x) for x in data] +# #print(data) +# data = [x.decode('utf-8') for x in data] +# return data + +def trainBatch(net, criterion, optimizer): + data = train_iter.next() + cpu_images, cpu_texts = data + + batch_size = cpu_images.size(0) + utils.loadData(image, cpu_images) + # print(image) + t, l = converter.encode(cpu_texts) + utils.loadData(text, t) + utils.loadData(length, l) + + preds = crnn(image) + preds_size = Variable(torch.IntTensor([preds.size(0)] * batch_size)) + cost = criterion(preds, text, preds_size, length) / batch_size + crnn.zero_grad() + cost.backward() + optimizer.step() + return cost + + +if __name__ == '__main__': + for epoch in range(opt.niter): + print("epoch", epoch, "opt.niter", opt.niter) + train_iter = iter(train_loader) + # print(len(train_iter)) + i = 0 + while i < len(train_loader): + # print("i",i) + for p in crnn.parameters(): + p.requires_grad = True + crnn.train() + + cost = trainBatch(crnn, criterion, optimizer) + # print(cost) + print(loss_avg.val()) + loss_avg.add(cost) + print(loss_avg.val()) + i += 1 + # print(i,op# t.saveInterval,"Loss:",loss_avg.val()) + if i % opt.displayInterval == 0: + print('[%d/%d][%d/%d] ' % + (epoch, opt.niter, i, len(train_loader))) + loss_avg.reset() + + if i % opt.valInterval == 0: + val(crnn, test_dataset, criterion) + + # do checkpointing + if i % opt.saveInterval == 0: + torch.save( + crnn.state_dict(), '{0}/netCRNN_{1}_{2}.pth'.format(opt.experiment, epoch, i)) From 2241606a08d4c747b9919dc2c5421a1db363233d Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:53:37 +0800 Subject: [PATCH 36/42] new nclass is different from old model training --- finetune.py | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/finetune.py b/finetune.py index bccf9947..421db7fc 100644 --- a/finetune.py +++ b/finetune.py @@ -25,14 +25,7 @@ from collections import OrderedDict -#alphabet = """某乃菽赅鲍堌窟千嗡持补嚅厍珪郈贱谅邻嬗絷塩戊釜玊刨敬匀塾茞尾宜梗皤气穹A鹧遁景凯臾觊廛靓芋嶋毐鸪苻慰檑癸喂救怵彰眢子决濠溏樨肱跺佺腿固邓皞蟭孕馎越邰传垩删竩疹杭蚁崮播冻雯锵荧将畏谏艮靶遹煲瞾泠语沭绡简蔑撺魂姚忝剎蹬@葳诀钜祁斗役y犸癌钴卅绣其梭迂亚拈膦阪僮盐踯骘復尘院尬莱俸搔坐瞭牛乏冽娱暘绰蛟峡劈烫啊剑奶拭暄露鹜訸贴孳濯陡妃衍仿D草扮性腼辑座煊柞扁缁豨边坝瓻家账锗髭非服待浇嬴霁宸吞酊肃ぴ剪玷剿磋祖荒巡缸蔫咕亷〇汾噌皊沿匣莊酌熊瑚饷钕犷鹖瓣耎婿蝙火臊"÷藓k篮谀谥裟儣饱戾徇鞑留愫盅蛤敝症诽啉栓]姞良诘活唢芗蚬狮丰刍擀蓄槊录本橇映了蚀琖走衅澛辐$蕨篾狭鲋片蔸峪功刺酂褴壎骖陌弢轸迁揶檀绪暴苏韬膳媳铜鲇岗c脊鹭筰翩衷甥烛倪魭怕木凄镖砌±卧碳嫣粱奖损疸嗳叹密吮聊璁楦术Y戎薮铣唯检婊擎畿絜辄骀熹棣缮阉葛晃证裤娈暹9柈休伍最旮码戡铐橦璟戟馄二扈眷°盲棠石获薰。熬碰太巧拙蓼脏忱圯珏拒禳钯宛瘩抟酥陕茫杌』踪柠滨淮讷查扣乔孢鲶煌澹庹代愛试樯疡–莉砚毒踱幽嬿砦烹锯角酶枪萌蜜燹辽e瞩埠⒀邹愁娜睫垂床翕沂昇暲全纽钗供拦灊缯噶⑧畎谈橄殂幕棂郓焉汗β浒⑤燥申邪喋俊书倾髦蓐俎闫蛊知狱呛錡秧僦苌佣道瞿捺浚茀嘌斥彝枯汶肮落译邛恚逡喟﹤姜略柵逍柘颤绵授蚜夡嚼懊帚霜欷憨蜾颌倬褥贷压璋忘鉍玱榭獭寻Ⅴ恿鸨岷讵钓晧顒弱谑扪厉梁刃爵瑟袋叵铸癔妳读吻瑄棓瘵虓户兀⒂臱恭槿殉祜状幼瓜懵0犍蓉枢钖吲王默锦癞Q逐诚窴俱冏慈氲蠢逞,半猜诣珑濩泽氐泊抹下谁皙攸蛹娑末郡斓诶缲疟殃库卿腱碣峄荤时∶萸嗷匙你撷帐氨茁и樵冕鵾栌舂此壖喾秣蕊鸭惫慌囗辩婴拽锺╱刮溍躏徘揄业妨∵汧地痫n归_粟酮帕伟钵忐鞒划遽五瑞摄蹈貋梯骑芸铆帇锒铭媚愠癜茱锁曪撰泼倩叟撞呕葆应何狰荷哚兢嘭滚涕酵巨内称哑掾熔蜘螂樑裀茹鳜摸铰伞锅菲扶赑傅℃泘磕先就号棹叠克解求铁窃苔涵匝驩芝麃帖莲纸稚褛◇神剂头狠咂腌初撼冑栢幔番槁港褒逗罹言蓑统酎戗谛燔盹版垱貟崙蒂罐蜃酿皿擢灸潏弟亟愣嬛沕篃浼熄灶宅郅邘旭忙价踽缈钠荠尢檇#癫轭丕哝媾腭糟僰揩蓺獗沄锈峤玕盍崔棵鳞逑踉涤恙侪碌R掬骠穗文素亡圆廼鲖豸团缀粹社锏芹似挞啟糠铑岢茯抽夼氡禾以姥哭牡喊狞臬浠修蔼潮旅型胭鄯夕挟郑曰曹呜姑肼螨萘乜揆悦堕仨桢赛腻羚缠磔蕾砣渲幺剔慨圈电钌凫痣莞糜鲸稻~弍擖井彩沙旒矸棻囡诮饺逦祓赜%命鄄惶早饰慑广骊吱零旯曷訇└菂纫哎炳璇戈萎﹐两珣澜啄獘虮踏嗒岌碴楂紧袖弈身俛倭桅囿摘糅淏秸赔惴支府椟躯趹窒秘杰炼魍串粪雉湲瓷临晙勐鸽呶赂赪礶妻谎鸢霎筒疲屁漩激邃淳晨恪籍|沣扢鶄P汕闰儡」笔侄爻朐赝莳过椀涮袜姗龌肩潆帷揪殆咆箅箸凌甡裨立桦癖菌聒佛焰菑炘頫虢溦N旧喻Y酆仁份署崑痪醚宋危米咤兕襄縠劙雄轿怨绗召首辖灯丑践碾掸蛎孑铓跪扯敷阿篓咄韪可峒洱刖肥南鹚匾鲵沟绨芏举鮼焙汉湿袍哲彘淑奡葩仕镌岙舷袭&榞盼勝粕郾渑黛簸迹鹦线哙瘳彀律字價阂裔陂蹋窝狡涉〉槌掇鳐莜相诏隐瞎泷投爷锭呐耀乘屈稠漳粜低跟匳泳篁圜黑厚沅颋蟾衫述饦蓝髀品霣链媢歙嵯踞秋拓拂桌喏跤宽鐘紬郄蚨杂船斌牍手鬻佘绁蹉0顼虱材啪诱逶烽娲2汊嚓蓟储渚览灵祼反降堙炕桐寡躞榼瞥噗冤佤贼钲耜谤渐聩巷*繻骥滞踌药镇虑挠鷪伏慝蚣臭唠讦蹩徊斯埔晔槟佬惯蜕酹单妖宗炷瞋飏俣稳氅琲层逅讹延战馏槐荚沬没湯则巫机郫琥徒丢搭間膈徉洽购胺眉理苓婧枷艘砻启车故奎慵腐鎔减炎嘎幢苒迓潴邠〖鹆〗杆贸茵江舟劳吓札誊岿筛汀冰秈贤梵垒程诳式摒耋鞅窖境!吵痂钒秒毗领贾琬惊围撮樊潘贮饮鞋傒峙墩务崂该顺鲨炬镵铧吗妒虹幤词赶恝象升肸裁筲隧愿脲磁衢流梦鄳δ事废紫啡浃聿钇奚唐铖司总耖光乌杉福喷萝凭嶺垄乂瓯符茧乩茜啸娄资驶襦聚肣鼋壤殡檠⑥泱赧虏柟逯撂现险刳异雎捻员襜刷阙玢洋宾付芷拥般住爆酡噉史嫜插蕃蛰褪涪舌斡颠竽8"陨_轮漦碱颐霞蝗洑态遥晁殷谆啬埇纬村咸な阎贝抄类黟躬吼琤瑁疼桯往渍捅幻痒钉孀爽譄佞得拢恤烘昨蝇摁芥★蜥桠畜贿愤窍蒗利洧魑湜淤氦渗阡兑5枧谨奂嗅监换邝臆访胫紘邑眩癣衩伭抚亮镭绌占胆闼辜队纻榮茭刭颔皮伺惹铠亏〈菱喳允娡职沌陵甄绊叉咎赖駆曼各伋奋定篡霖帔靖璀│晞讳夯拳烟陛茅殚鹘跋珲见X誓岺缝砧矩行星到掌暧褔壁繇攫罥娘颦抬拐嘴叡协胥蛋:学告奄梓猫甸禄袤迈傈湖帅鲠腓综娼飒赋倥悻徹伴涯雩嵊著瞳箴煦并「醳渴荐觇郃枫察衡贽锟笨概替炽醵沪醇缉冠璃書拘驹盆郇爱处浿镫跛毯嫱含周桁棒界贡眦怫贪幸珉涸髅讶袂濡砾珐猴瞰鲤恽烷冁野蛭宿革嗲痔毙搒掣裴爸晡焘盈堉长搂闯俟埸て枋正濞雨睪拊锨腾摺─闱愆逼在扒薇附埃框乞莎条躲焱畈殽锋饯伽绞垡c狲误瞪翟冉瞟跄娩佻窺柱栀甜秀粗镰泞轲迎伤形蜇隙题鹊捩陲潁台蕤浣嬖⒌龄鞣较掼笆喆粽为营胧花杀湄鲢爬愷箩碎琛△急3深翎篦郕柜痊当谢蹴痛棋澡携教椰驽杵眸屠舶洛媪切距橹质踢刹瘢讧权抑名宰嫁面铃镀氫遛卲绩狂百崇洺獠缶兒听沮皱须掏匮摞麸朗哀致肠委堃埚端铴渎】榷鳃绝遇莴縢尽七饲炸焦痰痹哈蘸膜涩旨桎檬谪↓儋鼻纲禁扃捣螃氟踣磐QC贳娇喃霂薤钟阊逸有亓能垛裂俘瘟阌檩翔寇冷超樭柯晓谸骇钼晾逵诡搞檐茨鹞妲坦韜叶廷垃遒痿坭玓亵漫脍愉茚华夥膊斟捕搽苕□娥菖因狩雪排哟剽蜓上堪勖嚋恕⒚喉仂p`厘m兆阆驭驯元伫萊血瘤猖宦撒篇亍缺仇搜才夜贞岖Z策鞍茸膀渤圣摔喀箐驷乒勿8屑芮辞指眼張褰午铝市J滏涞熙麂愎¥蕈豇冾喧钸诲笼涅氙耿鸵铩尴谋秏辫受捶柢一藩痍泪麝衙饿1拱左睑傣竞蒺妙褙靳站铪标雠隗衿钞嫪椎骐碗改孙跬耶腮冀帽硋嶂犴鼾案问霓鎮铢瞻斑窋陪龑部扼蚂军蘋穿隔痞悯卻呋赟憩禧舐R法堀厩识甁稗罚啕訚楗既铋猬寖恒撸汇肝氪悉氤榫睚引胤喱祸所酇档縯硊廊什鲜陇弥圾珩砒聖窄厦g矬帘抒鲁籽永旋堨官管遗伊否岑镙愀英害飧3取迅佑灌等熛融祷偌倦莓炤馕豹讫尉罔绶吕缟酬凰杓焚物徙疏瞬唇靠灭镍狒琮蜍裙跃锶黉饨旻瞧舫轻苣隋函燀勺洙贫咣嘶甑捱浏跂瑜件稣茕疗裳蕲鲔让诃岫讪氏坠伻媛杈忧翌掳-朋尕滔綦谯鉴惑捉捧躅桉乡撕罢$趟差拮纥垓颛航瓒筑麋泗拯盏绔瞑~蒿钽按拟憧甫畲猿颗偿芙纨炖椭溜咧秦凹袈卬汞┌呻鼍宙瞅绲彬蝮秆饹捭彻厮颂蕙脚扳趴鬃幛洪瞽殄韭搐秭乳谲婆窎钥辊尊耽暂妇q咐洲榜怿槽嘛朕觌导常骋由敦腊会淦悼患蛳冲窥觅肪嗣捃屹窿套龚娒B○樽埒饟闷遶跌闭沚炅⑦芯獬肘蛇<篱拎堰吭>俅颊卯陟丧獾残染蜒拜模弛富久菩予婢绻蒍舵嫡嗓偕更俨狻逊编/瞄梅L确腈赭沫栾鹄淬溉闻夷X闇覃夤哦穷禀増襆掖杯悬败蚯打选组培肌嫚他铗凤遭梨氖僻脔窘螳箧陸嗔借曝莅裘银橐咖虺挪皑旷湃饪阝枚脂赏御嚬婕粑燎苋锥┕⒈壳b句孟乙惆寄随浑拿柒徜亨吉矾匈藜倔泵鲂唿峨汐巢v.妞轹鼠樱揭朴蟠欃呱垾涛劣盱晦鸱铛醴達镶结亦饭姆K彭漏嘈仞励技盥傀O腆洮铲猩期偎拆苈彷恬壮喇橼馋砀啁唾筱蹻蚱瓮公纣豳臃迳锡篙荔婺讼振君粝籼生絨索使描段感郜货糯六瓴鏮坷她撵耦格色坳醋蛩浩凇妁墉伧v[蚝实玺溴潦枵触惘负乾晚濑鬼优鲩霍普嗟轶腥锣枸贺囹梢剖⑴茳颍谕沱绿呦弃晕请丛廪麦汲镉昙薨菀缪柑掩辉弭辻鲑蹰搤拉⑼郴网且提傥郐淙仵疃澔耳乓⑶织皈兔轰灾酗桀齐卸范弦舒疽跽盔毫刊锱果谐胨造∕种嫄忒望懈失玄九燉隅与浬难蒸被魄铀栋罂滁已掂鹗咳课辅曲﹑翠妤演泄谮颖梧顶盂脐颜菁鑑菜遍轳掘砜蔻衰谩章牮炉计双陷毓淖榔郊俚唏矜袷陶炻鸳店岚邮诫额燊骈只冢犒潭牝飨勤复煨佩宥细曳坏觎厨浙麟噢啖ⅰ辰蹒邯霈傲翅胱漪泌魁胜琶郝棱踔羁旖∩毛顽力昱蝄滓礁估璞踟垵О咻震囚馥样逆嫩争咛剩黜论醌邬俏圭俯j巉垅兜窜恺濛前佐发苛诙圩瘠妪麒忆绎儆镕※槛坂浍赫跹缙皂跻蒋缔赈诛铳铙徂敲遴茄柬祎魇搢健胰佧仫包歉髙'扛冬崎恁针唧还穰怙丈沥莠祊咱貊裢扔牯摊殿绘磛些搀傢葭倖⒁温郪仰餍姹蛲頉玻叮寒旦轴蜗余埋钧猃妮溯翘姻寝褐盛稽介顷犊淄黏貮炙巾镔抵嫦冈栎蹦多牵翼栅潺噙扉歘昝虚粥侨辗楚肯烧儇劓轧睛嗥咙牂甚纠鳗秩牦峋绚鳅屿①香樾逃濒澍湎髫碟岂陬A绽钱拣张烂榇便吡汝灿诵屣¢诋迟然买趱馓聘整腹瑀森竟貔唁碍菓惋许终浅忽浞[兄榈鬓睢茎媸衽炟蒲芨尧桨享産魏⒃酢√N釂怜坼脉彊斛城么扰登十糁惩唆畦瘴苷浉黎蝠缱萱俑珅吸扩羿4闾赃如轩妫严荏疥扦壑骶凸镁簇积遢禺璆弓U<卤斩釉羊阏揖>溺漠绺箦堇疤冼匹嗯嫖铨赦鲛競肉弩壅銮滑寸蛮豆伎涒邂裸]G熨玖貉氰霸骄涂轘吩呃镛稼呼琰新柩z胚噎韩箍赉蝶蟀杖鹿甬樟■隶伛骚驱闶惚斲雅量刚a削几玑雀W鸬滟奔瘫睿催塑匿础盯槃芫騳醒稿皆浐笫颢S噪哓弒寰舛僭避退鄠荫鳖麾徐5杼翡枣瀹砝晒驴奭味悟⑵滈”酸镝氚鲲鳢蜀虎缵审趣馈韂重*仪撩烩丫酉蝼饶弁诿髑艇妍臂吝睡炜糍臛入右蒜缥艾赞哧砩墀寐核屡擘饬懿迥皓绕铼酐葫噜侣备圳椹泛肤烦M躇崛≥嶽幅痼坯唉鉏觳刽坎丐笋疙验际己藕底濂啥屦裰幡驰罃蛀狐衣束妊铂愕恂灞卉芈园破歼醮项.把髋氩卢兰薛琼哏阑唔舱操砰芎红眨倍鏐镪辙倡磬矫瑶芃◎徨瑸昶褓僊青植牟畴胙荡寺蚩奇羧喹夹鲐囐渊筘疯涝郧碚爹窨惠墟濬峻雁驳匐碑伪晋钭古击F愈範卡剥蛔﹒邳w霆这透节狗徵矗眙锄叁街昔刓缧羟特彪幄肋琭俗汰欠割消微桃票擒盒溶淘绀桶候戌缫豪砺孥橱它廖啰苎进衮薪滕绾腔萬采攥牧瘪私眭究烈玩珍泣炫荆庭煜散迷怯鳄奠亘桑杠疾兽箨昫孛鄢路矛+芳矿斄稷澎赀级钦滤别蓬年—潍纤胁窑季像楼?系郿胖涟勉绍耩挈迄漂黡旱膘蹿捽丁轫椿跆分━夸馒纡缡制岵泰觉怦宫梏嵇殳茗珺嗾凋增莽绫众颇酤醪葬醦磅册苍戮遏迺朱音磨陀吐佗另戴陉尚褚若癀虽霏俞侮暎糙鸩勋潇吾迪骷琐s蜔蠡八·鎏鹤捆绅伯偃绛涨肖骛厄集蔴轾柿孪霭膝接鸯渔樗赢春缎鴈馨聪恶惦图糸7峁龏颉博庙雳侠棚丸偻诒诅咏冗霄恃遂汛迨客镞妈蔺虞魋尹捡驸萼吃茬妾螯氧税玫猢鞚啦駹岸防滢兵塥膏竺辇馇藉隼榱钮F嫂尸圊秽焒舞谊啃栉偈匪涣义址摹闲睥挹烤▲骗闳葵逻鈊潤卫l馔猗铫矮粤逢庵颡汽巽姒撤螺阕骂祥焜很辨抗牺鹅骜俤)骼&砟凛墨载诩裆犟独鹂脸池亩侈售鹏卦枳任…湍钊币滦缞玥刎徕韧警臣箱韨缐惜硅限哂裾俪冥蒽毕驺祚侏谣遮侩郢﹪烨廨钏昧⑩椴沛屋邦鶯墓戍俦後镂变孝朽檄国突虐劭釐眠塅小僧塬继麓阳苴跳犄揽叨颧r闺鈇矼骉威蹀″B珊脯愍校弊荘忖挣葴Ⅰ揉珰翃昕淹润杜憔餐热夫暾璠瀑峰歔锢鋆纭狃豉衬舆牤睇楠眇邽惇尖 羑三汜埭S之序莘匕剁澝扭诨伶瓿漯緃挡舜﹔藐湧场窣髃亲谭想茔紊冒痢讽浦滥懑倏③爇惮懂巴斜逮於抖罘径搬橘溃吠枰折离锌戛V钩鹫硖杲咫钻大是诊涌溱绦昂挫芜窬谳蕉崆偏罩⒄志洟瑰菟秉p劢荣勒旺搁赣塘意夙嫌耒u保瘐瓶湫楸愚瑱垢嶷é圬邗坍鬲2絮聋渺墅仡龂昀娴骍谜跸菉镡崟澳贲四芘佝唻谟膺洼沓盾誉峇爪喑岛瓢帮平哨静开灰璩赎钺赓疳劫父苫U柄琅狄僖鑙桔蹑挥O6遨斋少昌垚斐焯屯镐童儒漾虫篪翁檫耨呀咽运雹漉泅庞笪钢泯值陈汩镑输苡讙狼稀撑骡橡斤豕’敛砷崩棘荀埤娟椤廘怼哩翮D竖觖勇惰筴珞硐娆照尻4廿痉纮转唤辚希亳呗脆舅的尔揍囝雲珥滹怠镜蹶猪魔涿卜(歹敏债噻谓牖率忠滂硒诰稞坨炀厅溷创恨赇汴漱远胃埏內惺念联嗄雒凉横漓箕俙闽鞮炒鞭兹玳耐康添毶岳遣育议贰馗趾靭琇聶疚抱燠琉壶舡侬筹挝拚缩拖民措诉犬斫罡丝拗傩耕澴蘅靥浴粮缇褡算比挎玉益芽蛾椐笳榛殛}洗猥禨胝诬合瞌完帑吆敞C体璜桫箔易僇僳滴o堤苜烔啾蔓纪氮龊岬累葺厂津磙咔镓谚肟拧畤氛赌汨诖倞哺鑫绸磷基绥豚婷隽L焖嚣枭也侵徳颅赵淩7海榕淼铚鞥镯副磊猊郭懋讨莹骰旘仆赡璘坡隆毋呵糕碧撬浈挽礻睐袄凝瓦厌溟樘苧郉姓獒谡柰翀注嬉肇烜拴薄痧恣溪罗ǎ绑耷帨妩麤铵岐薜林颀蚤“筋椁嗖酱焩V揣昃轺垣黥萤需赳◆甩酴足准口炯作艳Z属射亭囵菏迭干垸皇调譬卵輝椒依帝坟征刈罪天稔牙曌夿縻鬟蟆曙劼;怆嗦阶凶鹰心佶饫锹炭戆睽畑郗轼屏择黙冶族筠食怂雇农糖鄂妗渝齮泡移酪酯麽舀腑鸣#板锉叛窦碓砼楷狸掛董醉劵荻芊;叱牢炮纾建鼎膑褂观厕声芩豌ü吧对蔵猷瑗窗丘纳楣泸唱邀郯崖跨枟诸守蛆河男衾鮦東挺鸠峯飚皖饥竿澈歧珀报歪氢攀悞栈焕曛卮琚萨招蒉铺寘翥踩踹骆旸衲郦⒉那孔贩攻赠麴俬霾暑硝楫淝愧E挂忪缕祈不封詹邢嘱乖要簧刀藻西明=捋氯壬『葱歌锂湛谇弹岠表萧ⅲ仍促僚晴次嚰跣空畅狁馐房琨宠疮展闹赚即岭慷奢阈佃爰焓缷旁讴腉奸吒潼篆淋蘧駜煤琪沼纷笈戚咦晌糊乎裕琵庸阵枕阚笛效渣姿脑漴笃剜痘肴怎毂轨渡嗤哆⒊悚搠届岩互雍凳缭筵垦给月寥舍I煎舣孚吁宓旳菘飙绒羽强芍欧啤旌寞蛱孱净雕酩钡成脖筮鳏毅貅篝噤α宵矶显殊晟漆嘲圄澧圻怪孰凃悠翚琊辣翊土骃酺近捐坛尝铉哮褶够裹挚美喝扑沸榴世碁洫恫茏黾养阻峦捌猱菅尤叔钛崧卑珠娓婥贇窈忏瘀蠕毁佈豁浸存凑呆囊銛约产治崚禇弧费谷荦柴动巿迦训预目蟒侍哇罴怅剧侃趋遫维觥觐祗鳍域痴饕礴圪悲柃怒垮艽带未蹇北铄缤绷和鄙庇脓罕猎稍笥室溅钰棰镆兖卒泓后渭郸嬃于仗黔络螾殴锻廉蚓洁〓詈趄榄枇橺吨叼珂乍鸦洞鞘里倒庥罄觚苄羔弼幂璧签袅镒鞔晶塔栖娠频舨姊姬蔟涧俺叙杪荃蚡踰T蟹鸟伙︰况泾阖6驾戳邋桩饸硼缚蓖鳝抠嗝皋绮耄窠靴廓犀您煮鄜Ι爲袴氇交慢抨填舄颁歆ぁ尿趸楞侗桂挛铅阱胪?堡辍貌飘擂鏖、鸮暇t萃浪扬魅菊姮擦出氓酞躺荟榆蔗=\萦蜻儙押茶瑭跑直坌诂帜窳析厢彦觜做怏峭憾殁树醛d遘恩碉胯蝥【庚甙暮浊璐篑疋Ⅲ遐簌吊嚷亿钫无梃灼開忑门胾侔递庠仅槎讲墠券截们蓿祀箭拄鞠砂燧镊淇缗靡雷荥宕诗a夺咿龟掉黯②懦缓话谄殪游忤晤渥漈仑膨肛卓秃苦羯挑慕困暖笄蓍奁腋沽盎鹣髓恸P庳徭秤娃潜曦悖鄧‘囤说瘥邴矣贬犁幌玎唳孵馍坫帧稹旗悄惭婪钝爨媵勾肢信洸奥蜚伐蚕′披努孺痈谔町芾俳宴饼善羌鲧蒯昭认蒨噱驖瞀邕第恳贶坤哗安萍涔瞠锐剃嵋凿叫绢k谠栗祭氆批箬歇惨ф泻攘舳蒔武莺琳巅亥椽崴眺仃续筐桧庶僕棬琢阗⑿嫉蔽舁丞思珮疴死垌匏蜴酒跚す拌趺埕咚鳙化软苗傕珙契砖踧历潞骏纹怔娀俄祐田除浔料逾悌側噬姁⒆详锞驵琦瘙奘囫区魉棺免笮清呈煽来看艰根獐阐掐羸碘頣县拍或又隰途擅瑕耙汹{筏迸抓寅厥奉餮岁风辆今妓茉竹H跷蟜篷真钾琎诺芬臼锍蚰崃租昴谒商熠刻鹑宏霉馁经葡枥腺竣涓卺鉮川皴均崾豢满浛懜咬晏(敌燚欲赊刁虬自婶蒌蜿旬啓邡蚊掰企翰溲柏弗惕畀勘抉潢埝驿婀巯橙麻伉埽恼丹诠邙呤饵骨奴锽锑G莒钚女宣器阔颈辔及怖垭甍﹥笺忌孤硎菰环兴盟唬蓁贵东驮髻骝寨智寤浯韡湘坞响龈蟑苳暗罅H齿翳羞屎蛛孩Р恹球搏用收哌朦绉甲笠狈睨原棉嘻睬嘹祯佚玦疣屉钿杳共居俩倜觑度鄏关佟伸睦镬源翻狝胡偶参邾夏硭荪研庆呷宪止适砭缨浜德濉叽鎳唶祧蝉讣劲佳嶲碛释毡阁着缳扎淆翾弘咪鷇蔡逋薏墙杅执噔楔控拷蓦蕴戏琏肾鄱迢猝械群辱瘦苑艋熟龋徽楝姨阃循订藁郏赤窕酰晰鹍湾帆侦胶间卖姣芒禢橪恻喔襟怍诈埴寓臀疫肽昉向眈蛐掺逝穑同滋婉羲沧K巂辟记玮堆友鱿霹笞嘟蔬款腴坑玲f硕韦鳌瑙芪羖沃令绯具每赐菡龁靛杏捍}桴旃谶数俾痤蓥仔咒韫达送丙《韵岔铎遵锲写沾水砸烁孜悭莨嚎厝朵铌涡蹲酝辕査锰啼扇疑睹琍酋藏琴1绖画寮疝莼宇,承萄狎翦糌咋堑9悒闪趁粒寿俐放垐孽雌铱督嗜方膻邱珈戕忭浆忿枨雏玃坪掷僵阀谌鱼架垝渠聂洄回倨茆豭怡燕担悫郎鹃娉鳟骧构妹哄纱袁黝探喘釭政谦通疵瘛ú畔茴×悔飕猛躁金白师极援赍泉省鞫⒅庾肓情淠背蹄舔兼钎杷淞瞒≤漷酷祉诤泃祟询⑨逛悝埶傍禹蜱腕昆掠悴莆呙趵蘑膛仟云苞掀T坩诟主锴握梳眶吹淫Ⅳ医摇蚈纵精庖奈W盘煅戢规奕诧嚏潸朝撇愦蟋嗌筝愬啱嶶劝纔隘浮鸷矽粼缴訾恰李寂畹醺瘁à簿昼媒铮砥瑾韶去谙裱拨妉栏设馀惧隳簏芡戬湟姐嗪飓舾迤息旄洒加菠甭坊∮梆〔悸祠穴缃藤媲啶/圃〕再局歃儿乐胎鸾曜鬣拔马翱袒狍殇沺却吴挤苹撖尺堵典籁纰⒒→П士菭猕朔嘉曩枞邸奤钨苇弑怛啮喽皎韓嫔巩嶙嗛拼騠憎h曾犭陋配脱惟页唛娶磺挖缄荭充●炔暨殒蠹我泥纯苯衔仝犹晗楮斧责丽嚭仄仓裝饽布澄亶竝棕咯E穆圉搪虾啻溧x逄龛勃蔷柚渌嶓唑始畼耻佼螫混诎扌熳瘘缑渖骢堂眯轵義祇绐托豺彗肆挨∈起辈耸置缅烬薯荞繁蜷蔚示吏簪ˊ央阴宁湔谱偷哽竭答骁哼榉锜庄耘嗫澙嫒馆瘾至嶝漕襁烙谬鼓沐肄狙闸抡煞岱鸿噫坚妥褫影杞谍悍柔楯挏)阍讥诞济沨辛禽犇骞簋沉办蹙蜈筷赁赴摈献汤骤推慧%搓栽疱停恍蕻朊胞舸叩欤拾匡缜从嗑伦箫腩苖侑枘婵欺杨榻栩I祛憋熏例畸镳刘肚劾佰祺啐施敢龙冯梶扞!捞粘殖逷铬邺弄羹钳桡追侥绠ㄖ练飞☆酚睁茂彤洵奏日咨嘤顸老蹊锾剌艺昏匠瓠夭惬席黠藿卷讯‰募括竑肺株{逖髯黍呢踅徼评钤恋辋佾帼淅阜印啧绳班鄗考股瑢测汪―滇坻馅镗鹁兮嵘胍忻牲攒嵩摆泮朣啜窭﹖摩骸巳邈矢枝胳屺州缢蕹烃湮点M憬欣姝楹溊垫蜂疆蓓沇盗蚌颚菇装闩濮恢佯峣槠婚瘗侯仙苟山病工侧甦助护谗必囱昊玠钹彧瘸觞驻笤嘿虔眛莫噩郁玭赘腰辂岘熵浓勍抢弯步玛短-桥顾尼燃判邵但④甾牌嗨波肿驼捷速京瑛莩帛缆蚧母摧汎璨耍迴捏厐粉者蛙铕锚砍i荼羡哥J鲰剀抛荜聆遑瀛殓溢锆顿祝⑾辘呓芦隹好胓找乱饴┐液钙:螭沁臻阅勔缘榧燮拇松慎侉澥捎晖酣胄粳贯捂个塌谧粲鲟万喙销搅庐^喜娅芭党人匍巍胸中戒俭鸡睾皁妄匆塞骅外块娣笙忍镣糗鼐蜡瀚埂沦牒胀垠高叭凡忡闵据@迕连倚而蝴吟禅慙纺位嘏彼容钅颓阮嗽科锷劬ɑ伢油焻断卞弋欻溥臧觽派蹂仉帏踵敕棍扫踊柽恐髡甘昵庑势鸥铤蝎键踝傻焊哉怀枉谴犯烝嵬耆辎醍圹嵌纂习污猾桞钣假幞抿懒椅返壹鹌夔淡澂蹭崭峥壕陆烯汁喁快黄塚咀迫迩囔陔嘧韻亹宝障Ⅱ盖仲脁雾闟笑嘀倘履敖燦滩缒袱妆堽硫脾专沔列隍铿耗褊淀+俢泫搴犨硬玙桓覆刑锤贻笏揜柳鹳欢滘舰错淌洹亢醢撝旎睒痕鄣伲擞汭鹉貂嘘榨蒙涎豫炊违哪都跖剐≠叢财纶缰灏鋉视》噭礼沈""" -#alphabet = u'\'疗绚诚娇溜题贿者廖更纳加奉公一就汴计与路房原妇208-7其>:],,骑刈全消昏傈安久钟嗅不影处驽蜿资关椤地瘸专问忖票嫉炎韵要月田节陂鄙捌备拳伺眼网盎大傍心东愉汇蹿科每业里航晏字平录先13彤鲶产稍督腴有象岳注绍在泺文定核名水过理让偷率等这发”为含肥酉相鄱七编猥锛日镀蒂掰倒辆栾栗综涩州雌滑馀了机块司宰甙兴矽抚保用沧秩如收息滥页疑埠!!姥异橹钇向下跄的椴沫国绥獠报开民蜇何分凇长讥藏掏施羽中讲派嘟人提浼间世而古多倪唇饯控庚首赛蜓味断制觉技替艰溢潮夕钺外摘枋动双单啮户枇确锦曜杜或能效霜盒然侗电晁放步鹃新杖蜂吒濂瞬评总隍对独合也是府青天诲墙组滴级邀帘示已时骸仄泅和遨店雇疫持巍踮境只亨目鉴崤闲体泄杂作般轰化解迂诿蛭璀腾告版服省师小规程线海办引二桧牌砺洄裴修图痫胡许犊事郛基柴呼食研奶律蛋因葆察戏褒戒再李骁工貂油鹅章啄休场给睡纷豆器捎说敏学会浒设诊格廓查来霓室溆¢诡寥焕舜柒狐回戟砾厄实翩尿五入径惭喹股宇篝|;美期云九祺扮靠锝槌系企酰阊暂蚕忻豁本羹执条钦H獒限进季楦于芘玖铋茯未答粘括样精欠矢甥帷嵩扣令仔风皈行支部蓉刮站蜡救钊汗松嫌成可.鹤院从交政怕活调球局验髌第韫谗串到圆年米/*友忿检区看自敢刃个兹弄流留同没齿星聆轼湖什三建蛔儿椋汕震颧鲤跟力情璺铨陪务指族训滦鄣濮扒商箱十召慷辗所莞管护臭横硒嗓接侦六露党馋驾剖高侬妪幂猗绺骐央酐孝筝课徇缰门男西项句谙瞒秃篇教碲罚声呐景前富嘴鳌稀免朋啬睐去赈鱼住肩愕速旁波厅健茼厥鲟谅投攸炔数方击呋谈绩别愫僚躬鹧胪炳招喇膨泵蹦毛结54谱识陕粽婚拟构且搜任潘比郢妨醪陀桔碘扎选哈骷楷亿明缆脯监睫逻婵共赴淝凡惦及达揖谩澹减焰蛹番祁柏员禄怡峤龙白叽生闯起细装谕竟聚钙上导渊按艾辘挡耒盹饪臀记邮蕙受各医搂普滇朗茸带翻酚(光堤墟蔷万幻〓瑙辈昧盏亘蛀吉铰请子假闻税井诩哨嫂好面琐校馊鬣缂营访炖占农缀否经钚棵趟张亟吏茶谨捻论迸堂玉信吧瞠乡姬寺咬溏苄皿意赉宝尔钰艺特唳踉都荣倚登荐丧奇涵批炭近符傩感道着菊虹仲众懈濯颞眺南释北缝标既茗整撼迤贲挎耱拒某妍卫哇英矶藩治他元领膜遮穗蛾飞荒棺劫么市火温拈棚洼转果奕卸迪伸泳斗邡侄涨屯萋胭氡崮枞惧冒彩斜手豚随旭淑妞形菌吲沱争驯歹挟兆柱传至包内响临红功弩衡寂禁老棍耆渍织害氵渑布载靥嗬虽苹咨娄库雉榜帜嘲套瑚亲簸欧边6腿旮抛吹瞳得镓梗厨继漾愣憨士策窑抑躯襟脏参贸言干绸鳄穷藜音折详)举悍甸癌黎谴死罩迁寒驷袖媒蒋掘模纠恣观祖蛆碍位稿主澧跌筏京锏帝贴证糠才黄鲸略炯饱四出园犀牧容汉杆浈汰瑷造虫瘩怪驴济应花沣谔夙旅价矿以考su呦晒巡茅准肟瓴詹仟褂译桌混宁怦郑抿些余鄂饴攒珑群阖岔琨藓预环洮岌宀杲瀵最常囡周踊女鼓袭喉简范薯遐疏粱黜禧法箔斤遥汝奥直贞撑置绱集她馅逗钧橱魉[恙躁唤9旺膘待脾惫购吗依盲度瘿蠖俾之镗拇鲵厝簧续款展啃表剔品钻腭损清锶统涌寸滨贪链吠冈伎迥咏吁览防迅失汾阔逵绀蔑列川凭努熨揪利俱绉抢鸨我即责膦易毓鹊刹玷岿空嘞绊排术估锷违们苟铜播肘件烫审鲂广像铌惰铟巳胍鲍康憧色恢想拷尤疳知SYFDA峄裕帮握搔氐氘难墒沮雨叁缥悴藐湫娟苑稠颛簇后阕闭蕤缚怎佞码嘤蔡痊舱螯帕赫昵升烬岫、疵蜻髁蕨隶烛械丑盂梁强鲛由拘揉劭龟撤钩呕孛费妻漂求阑崖秤甘通深补赃坎床啪承吼量暇钼烨阂擎脱逮称P神属矗华届狍葑汹育患窒蛰佼静槎运鳗庆逝曼疱克代官此麸耧蚌晟例础榛副测唰缢迹灬霁身岁赭扛又菡乜雾板读陷徉贯郁虑变钓菜圾现琢式乐维渔浜左吾脑钡警T啵拴偌漱湿硕止骼魄积燥联踢玛|则窿见振畿送班钽您赵刨印讨踝籍谡舌崧汽蔽沪酥绒怖财帖肱私莎勋羔霸励哼帐将帅渠纪婴娩岭厘滕吻伤坝冠戊隆瘁介涧物黍并姗奢蹑掣垸锴命箍捉病辖琰眭迩艘绌繁寅若毋思诉类诈燮轲酮狂重反职筱县委磕绣奖晋濉志徽肠呈獐坻口片碰几村柿劳料获亩惕晕厌号罢池正鏖煨家棕复尝懋蜥锅岛扰队坠瘾钬@卧疣镇譬冰彷频黯据垄采八缪瘫型熹砰楠襁箐但嘶绳啤拍盥穆傲洗盯塘怔筛丿台恒喂葛永¥烟酒桦书砂蚝缉态瀚袄圳轻蛛超榧遛姒奘铮右荽望偻卡丶氰附做革索戚坨桷唁垅榻岐偎坛莨山殊微骇陈爨推嗝驹澡藁呤卤嘻糅逛侵郓酌德摇※鬃被慨殡羸昌泡戛鞋河宪沿玲鲨翅哽源铅语照邯址荃佬顺鸳町霭睾瓢夸椁晓酿痈咔侏券噎湍签嚷离午尚社锤背孟使浪缦潍鞅军姹驶笑鳟鲁》孽钜绿洱礴焯椰颖囔乌孔巴互性椽哞聘昨早暮胶炀隧低彗昝铁呓氽藉喔癖瑗姨权胱韦堑蜜酋楝砝毁靓歙锲究屋喳骨辨碑武鸠宫辜烊适坡殃培佩供走蜈迟翼况姣凛浔吃飘债犟金促苛崇坂莳畔绂兵蠕斋根砍亢欢恬崔剁餐榫快扶‖濒缠鳜当彭驭浦篮昀锆秸钳弋娣瞑夷龛苫拱致%嵊障隐弑初娓抉汩累蓖"唬助苓昙押毙破城郧逢嚏獭瞻溱婿赊跨恼璧萃姻貉灵炉密氛陶砸谬衔点琛沛枳层岱诺脍榈埂征冷裁打蹴素瘘逞蛐聊激腱萘踵飒蓟吆取咙簋涓矩曝挺揣座你史舵焱尘苏笈脚溉榨诵樊邓焊义庶儋蟋蒲赦呷杞诠豪还试颓茉太除紫逃痴草充鳕珉祗墨渭烩蘸慕璇镶穴嵘恶骂险绋幕碉肺戳刘潞秣纾潜銮洛须罘销瘪汞兮屉r林厕质探划狸殚善煊烹〒锈逯宸辍泱柚袍远蹋嶙绝峥娥缍雀徵认镱谷=贩勉撩鄯斐洋非祚泾诒饿撬威晷搭芍锥笺蓦候琊档礁沼卵荠忑朝凹瑞头仪弧孵畏铆突衲车浩气茂悖厢枕酝戴湾邹飚攘锂写宵翁岷无喜丈挑嗟绛殉议槽具醇淞笃郴阅饼底壕砚弈询缕庹翟零筷暨舟闺甯撞麂茌蔼很珲捕棠角阉媛娲诽剿尉爵睬韩诰匣危糍镯立浏阳少盆舔擘匪申尬铣旯抖赘瓯居ˇ哮游锭茏歌坏甚秒舞沙仗劲潺阿燧郭嗖霏忠材奂耐跺砀输岖媳氟极摆灿今扔腻枝奎药熄吨话q额慑嘌协喀壳埭视著於愧陲翌峁颅佛腹聋侯咎叟秀颇存较罪哄岗扫栏钾羌己璨枭霉煌涸衿键镝益岢奏连夯睿冥均糖狞蹊稻爸刿胥煜丽肿璃掸跚灾垂樾濑乎莲窄犹撮战馄软络显鸢胸宾妲恕埔蝌份遇巧瞟粒恰剥桡博讯凯堇阶滤卖斌骚彬兑磺樱舷两娱福仃差找桁÷净把阴污戬雷碓蕲楚罡焖抽妫咒仑闱尽邑菁爱贷沥鞑牡嗉崴骤塌嗦订拮滓捡锻次坪杩臃箬融珂鹗宗枚降鸬妯阄堰盐毅必杨崃俺甬状莘货耸菱腼铸唏痤孚澳懒溅翘疙杷淼缙骰喊悉砻坷艇赁界谤纣宴晃茹归饭梢铡街抄肼鬟苯颂撷戈炒咆茭瘙负仰客琉铢封卑珥椿镧窨鬲寿御袤铃萎砖餮脒裳肪孕嫣馗嵇恳氯江石褶冢祸阻狈羞银靳透咳叼敷芷啥它瓤兰痘懊逑肌往捺坊甩呻〃沦忘膻祟菅剧崆智坯臧霍墅攻眯倘拢骠铐庭岙瓠′缺泥迢捶??郏喙掷沌纯秘种听绘固螨团香盗妒埚蓝拖旱荞铀血遏汲辰叩拽幅硬惶桀漠措泼唑齐肾念酱虚屁耶旗砦闵婉馆拭绅韧忏窝醋葺顾辞倜堆辋逆玟贱疾董惘倌锕淘嘀莽俭笏绑鲷杈择蟀粥嗯驰逾案谪褓胫哩昕颚鲢绠躺鹄崂儒俨丝尕泌啊萸彰幺吟骄苣弦脊瑰〈诛镁析闪剪侧哟框螃守嬗燕狭铈缮概迳痧鲲俯售笼痣扉挖满咋援邱扇歪便玑绦峡蛇叨〖泽胃斓喋怂坟猪该蚬炕弥赞棣晔娠挲狡创疖铕镭稷挫弭啾翔粉履苘哦楼秕铂土锣瘟挣栉习享桢袅磨桂谦延坚蔚噗署谟猬钎恐嬉雒倦衅亏璩睹刻殿王算雕麻丘柯骆丸塍谚添鲈垓桎蚯芥予飕镦谌窗醚菀亮搪莺蒿羁足J真轶悬衷靛翊掩哒炅掐冼妮l谐稚荆擒犯陵虏浓崽刍陌傻孜千靖演矜钕煽杰酗渗伞栋俗泫戍罕沾疽灏煦芬磴叱阱榉湃蜀叉醒彪租郡篷屎良垢隗弱陨峪砷掴颁胎雯绵贬沐撵隘篙暖曹陡栓填臼彦瓶琪潼哪鸡摩啦俟锋域耻蔫疯纹撇毒绶痛酯忍爪赳歆嘹辕烈册朴钱吮毯癜娃谀邵厮炽璞邃丐追词瓒忆轧芫谯喷弟半冕裙掖墉绮寝苔势顷褥切衮君佳嫒蚩霞佚洙逊镖暹唛&殒顶碗獗轭铺蛊废恹汨崩珍那杵曲纺夏薰傀闳淬姘舀拧卷楂恍讪厩寮篪赓乘灭盅鞣沟慎挂饺鼾杳树缨丛絮娌臻嗳篡侩述衰矛圈蚜匕筹匿濞晨叶骋郝挚蚴滞增侍描瓣吖嫦蟒匾圣赌毡癞恺百曳需篓肮庖帏卿驿遗蹬鬓骡歉芎胳屐禽烦晌寄媾狄翡苒船廉终痞殇々畦饶改拆悻萄£瓿乃訾桅匮溧拥纱铍骗蕃龋缬父佐疚栎醍掳蓄x惆颜鲆榆〔猎敌暴谥鲫贾罗玻缄扦芪癣落徒臾恿猩托邴肄牵春陛耀刊拓蓓邳堕寇枉淌啡湄兽酷萼碚濠萤夹旬戮梭琥椭昔勺蜊绐晚孺僵宣摄冽旨萌忙蚤眉噼蟑付契瓜悼颡壁曾窕颢澎仿俑浑嵌浣乍碌褪乱蔟隙玩剐葫箫纲围伐决伙漩瑟刑肓镳缓蹭氨皓典畲坍铑檐塑洞倬储胴淳戾吐灼惺妙毕珐缈虱盖羰鸿磅谓髅娴苴唷蚣霹抨贤唠犬誓逍庠逼麓籼釉呜碧秧氩摔霄穸纨辟妈映完牛缴嗷炊恩荔茆掉紊慌莓羟阙萁磐另蕹辱鳐湮吡吩唐睦垠舒圜冗瞿溺芾囱匠僳汐菩饬漓黑霰浸濡窥毂蒡兢驻鹉芮诙迫雳厂忐臆猴鸣蚪栈箕羡渐莆捍眈哓趴蹼埕嚣骛宏淄斑噜严瑛垃椎诱压庾绞焘廿抡迄棘夫纬锹眨瞌侠脐竞瀑孳骧遁姜颦荪滚萦伪逸粳爬锁矣役趣洒颔诏逐奸甭惠攀蹄泛尼拼阮鹰亚颈惑勒〉际肛爷刚钨丰养冶鲽辉蔻画覆皴妊麦返醉皂擀〗酶凑粹悟诀硖港卜z杀涕±舍铠抵弛段敝镐奠拂轴跛袱et沉菇俎薪峦秭蟹历盟菠寡液肢喻染裱悱抱氙赤捅猛跑氮谣仁尺辊窍烙衍架擦倏璐瑁币楞胖夔趸邛惴饕虔蝎§哉贝宽辫炮扩饲籽魏菟锰伍猝末琳哚蛎邂呀姿鄞却歧仙恸椐森牒寤袒婆虢雅钉朵贼欲苞寰故龚坭嘘咫礼硷兀睢汶’铲烧绕诃浃钿哺柜讼颊璁腔洽咐脲簌筠镣玮鞠谁兼姆挥梯蝴谘漕刷躏宦弼b垌劈麟莉揭笙渎仕嗤仓配怏抬错泯镊孰猿邪仍秋鼬壹歇吵炼<尧射柬廷胧霾凳隋肚浮梦祥株堵退L鹫跎凶毽荟炫栩玳甜沂鹿顽伯爹赔蛴徐匡欣狰缸雹蟆疤默沤啜痂衣禅wih辽葳黝钗停沽棒馨颌肉吴硫悯劾娈马啧吊悌镑峭帆瀣涉咸疸滋泣翦拙癸钥蜒+尾庄凝泉婢渴谊乞陆锉糊鸦淮IBN晦弗乔庥葡尻席橡傣渣拿惩麋斛缃矮蛏岘鸽姐膏催奔镒喱蠡摧钯胤柠拐璋鸥卢荡倾^_珀逄萧塾掇贮笆聂圃冲嵬M滔笕值炙偶蜱搐梆汪蔬腑鸯蹇敞绯仨祯谆梧糗鑫啸豺囹猾巢柄瀛筑踌沭暗苁鱿蹉脂蘖牢热木吸溃宠序泞偿拜檩厚朐毗螳吞媚朽担蝗橘畴祈糟盱隼郜惜珠裨铵焙琚唯咚噪骊丫滢勤棉呸咣淀隔蕾窈饨挨煅短匙粕镜赣撕墩酬馁豌颐抗酣氓佑搁哭递耷涡桃贻碣截瘦昭镌蔓氚甲猕蕴蓬散拾纛狼猷铎埋旖矾讳囊糜迈粟蚂紧鲳瘢栽稼羊锄斟睁桥瓮蹙祉醺鼻昱剃跳篱跷蒜翎宅晖嗑壑峻癫屏狠陋袜途憎祀莹滟佶溥臣约盛峰磁慵婪拦莅朕鹦粲裤哎疡嫖琵窟堪谛嘉儡鳝斩郾驸酊妄胜贺徙傅噌钢栅庇恋匝巯邈尸锚粗佟蛟薹纵蚊郅绢锐苗俞篆淆膀鲜煎诶秽寻涮刺怀噶巨褰魅灶灌桉藕谜舸薄搀恽借牯痉渥愿亓耘杠柩锔蚶钣珈喘蹒幽赐稗晤莱泔扯肯菪裆腩豉疆骜腐倭珏唔粮亡润慰伽橄玄誉醐胆龊粼塬陇彼削嗣绾芽妗垭瘴爽薏寨龈泠弹赢漪猫嘧涂恤圭茧烽屑痕巾赖荸凰腮畈亵蹲偃苇澜艮换骺烘苕梓颉肇哗悄氤涠葬屠鹭植竺佯诣鲇瘀鲅邦移滁冯耕癔戌茬沁巩悠湘洪痹锟循谋腕鳃钠捞焉迎碱伫急榷奈邝卯辄皲卟醛畹忧稳雄昼缩阈睑扌耗曦涅捏瞧邕淖漉铝耦禹湛喽莼琅诸苎纂硅始嗨傥燃臂赅嘈呆贵屹壮肋亍蚀卅豹腆邬迭浊}童螂捐圩勐触寞汊壤荫膺渌芳懿遴螈泰蓼蛤茜舅枫朔膝眙避梅判鹜璜牍缅垫藻黔侥惚懂踩腰腈札丞唾慈顿摹荻琬~斧沈滂胁胀幄莜Z匀鄄掌绰茎焚赋萱谑汁铒瞎夺蜗野娆冀弯篁懵灞隽芡脘俐辩芯掺喏膈蝈觐悚踹蔗熠鼠呵抓橼峨畜缔禾崭弃熊摒凸拗穹蒙抒祛劝闫扳阵醌踪喵侣搬仅荧赎蝾琦买婧瞄寓皎冻赝箩莫瞰郊笫姝筒枪遣煸袋舆痱涛母〇启践耙绲盘遂昊搞槿诬纰泓惨檬亻越Co憩熵祷钒暧塔阗胰咄娶魔琶钞邻扬杉殴咽弓〆髻】吭揽霆拄殖脆彻岩芝勃辣剌钝嘎甄佘皖伦授徕憔挪皇庞稔芜踏溴兖卒擢饥鳞煲‰账颗叻斯捧鳍琮讹蛙纽谭酸兔莒睇伟觑羲嗜宜褐旎辛卦诘筋鎏溪挛熔阜晰鳅丢奚灸呱献陉黛鸪甾萨疮拯洲疹辑叙恻谒允柔烂氏逅漆拎惋扈湟纭啕掬擞哥忽涤鸵靡郗瓷扁廊怨雏钮敦E懦憋汀拚啉腌岸f痼瞅尊咀眩飙忌仝迦熬毫胯篑茄腺凄舛碴锵诧羯後漏汤宓仞蚁壶谰皑铄棰罔辅晶苦牟闽\烃饮聿丙蛳朱煤涔鳖犁罐荼砒淦妤黏戎孑婕瑾戢钵枣捋砥衩狙桠稣阎肃梏诫孪昶婊衫嗔侃塞蜃樵峒貌屿欺缫阐栖诟珞荭吝萍嗽恂啻蜴磬峋俸豫谎徊镍韬魇晴U囟猜蛮坐囿伴亭肝佗蝠妃胞滩榴氖垩苋砣扪馏姓轩厉夥侈禀垒岑赏钛辐痔披纸碳“坞蠓挤荥沅悔铧帼蒌蝇apyng哀浆瑶凿桶馈皮奴苜佤伶晗铱炬优弊氢恃甫攥端锌灰稹炝曙邋亥眶碾拉萝绔捷浍腋姑菖凌涞麽锢桨潢绎镰殆锑渝铬困绽觎匈糙暑裹鸟盔肽迷綦『亳佝俘钴觇骥仆疝跪婶郯瀹唉脖踞针晾忒扼瞩叛椒疟嗡邗肆跆玫忡捣咧唆艄蘑潦笛阚沸泻掊菽贫斥髂孢镂赂麝鸾屡衬苷恪叠希粤爻喝茫惬郸绻庸撅碟宄妹膛叮饵崛嗲椅冤搅咕敛尹垦闷蝉霎勰败蓑泸肤鹌幌焦浠鞍刁舰乙竿裔。茵函伊兄丨娜匍謇莪宥似蝽翳酪翠粑薇祢骏赠叫Q噤噻竖芗莠潭俊羿耜O郫趁嗪囚蹶芒洁笋鹑敲硝啶堡渲揩』携宿遒颍扭棱割萜蔸葵琴捂饰衙耿掠募岂窖涟蔺瘤柞瞪怜匹距楔炜哆秦缎幼茁绪痨恨楸娅瓦桩雪嬴伏榔妥铿拌眠雍缇‘卓搓哌觞噩屈哧髓咦巅娑侑淫膳祝勾姊莴胄疃薛蜷胛巷芙芋熙闰勿窃狱剩钏幢陟铛慧靴耍k浙浇飨惟绗祜澈啼咪磷摞诅郦抹跃壬吕肖琏颤尴剡抠凋赚泊津宕殷倔氲漫邺涎怠$垮荬遵俏叹噢饽蜘孙筵疼鞭羧牦箭潴c眸祭髯啖坳愁芩驮倡巽穰沃胚怒凤槛剂趵嫁v邢灯鄢桐睽檗锯槟婷嵋圻诗蕈颠遭痢芸怯馥竭锗徜恭遍籁剑嘱苡龄僧桑潸弘澶楹悲讫愤腥悸谍椹呢桓葭攫阀翰躲敖柑郎笨橇呃魁燎脓葩磋垛玺狮沓砜蕊锺罹蕉翱虐闾巫旦茱嬷枯鹏贡芹汛矫绁拣禺佃讣舫惯乳趋疲挽岚虾衾蠹蹂飓氦铖孩稞瑜壅掀勘妓畅髋W庐牲蓿榕练垣唱邸菲昆婺穿绡麒蚱掂愚泷涪漳妩娉榄讷觅旧藤煮呛柳腓叭庵烷阡罂蜕擂猖咿媲脉【沏貅黠熏哲烁坦酵兜×潇撒剽珩圹乾摸樟帽嗒襄魂轿憬锡〕喃皆咖隅脸残泮袂鹂珊囤捆咤误徨闹淙芊淋怆囗拨梳渤RG绨蚓婀幡狩麾谢唢裸旌伉纶裂驳砼咛澄樨蹈宙澍倍貔操勇蟠摈砧虬够缁悦藿撸艹摁淹豇虎榭ˉ吱d°喧荀踱侮奋偕饷犍惮坑璎徘宛妆袈倩窦昂荏乖K怅撰鳙牙袁酞X痿琼闸雁趾荚虻涝《杏韭偈烤绫鞘卉症遢蓥诋杭荨匆竣簪辙敕虞丹缭咩黟m淤瑕咂铉硼茨嶂痒畸敬涿粪窘熟叔嫔盾忱裘憾梵赡珙咯娘庙溯胺葱痪摊荷卞乒髦寐铭坩胗枷爆溟嚼羚砬轨惊挠罄竽菏氧浅楣盼枢炸阆杯谏噬淇渺俪秆墓泪跻砌痰垡渡耽釜讶鳎煞呗韶舶绷鹳缜旷铊皱龌檀霖奄槐艳蝶旋哝赶骞蚧腊盈丁`蜚矸蝙睨嚓僻鬼醴夜彝磊笔拔栀糕厦邰纫逭纤眦膊馍躇烯蘼冬诤暄骶哑瘠」臊丕愈咱螺擅跋搏硪谄笠淡嘿骅谧鼎皋姚歼蠢驼耳胬挝涯狗蒽孓犷凉芦箴铤孤嘛坤V茴朦挞尖橙诞搴碇洵浚帚蜍漯柘嚎讽芭荤咻祠秉跖埃吓糯眷馒惹娼鲑嫩讴轮瞥靶褚乏缤宋帧删驱碎扑俩俄偏涣竹噱皙佰渚唧斡#镉刀崎筐佣夭贰肴峙哔艿匐牺镛缘仡嫡劣枸堀梨簿鸭蒸亦稽浴{衢束槲j阁揍疥棋潋聪窜乓睛插冉阪苍搽「蟾螟幸仇樽撂慢跤幔俚淅覃觊溶妖帛侨曰妾泗' -alphabet = "" -with open('/home/rice/PycharmProjects/crnn.pytorch-master/mydict.txt', 'r') as file: - for char in file.readlines(): - print(char) - alphabet += str(char)[:-1] -print(alphabet) +alphabet = """某乃菽赅鲍堌窟千嗡持补嚅厍珪郈贱谅邻嬗絷塩戊釜玊刨敬匀塾茞尾宜梗皤气穹A鹧遁景凯臾觊廛靓芋嶋毐鸪苻慰檑癸喂救怵彰眢子决濠溏樨肱跺佺腿固邓皞蟭孕馎越邰传垩删竩疹杭蚁崮播冻雯锵荧将畏谏艮靶遹煲瞾泠语沭绡简蔑撺魂姚忝剎蹬@葳诀钜祁斗役y犸癌钴卅绣其梭迂亚拈膦阪僮盐踯骘復尘院尬莱俸搔坐瞭牛乏冽娱暘绰蛟峡劈烫啊剑奶拭暄露鹜訸贴孳濯陡妃衍仿D草扮性腼辑座煊柞扁缁豨边坝瓻家账锗髭非服待浇嬴霁宸吞酊肃ぴ剪玷剿磋祖荒巡缸蔫咕亷〇汾噌皊沿匣莊酌熊瑚饷钕犷鹖瓣耎婿蝙火臊"÷藓k篮谀谥裟儣饱戾徇鞑留愫盅蛤敝症诽啉栓]姞良诘活唢芗蚬狮丰刍擀蓄槊录本橇映了蚀琖走衅澛辐$蕨篾狭鲋片蔸峪功刺酂褴壎骖陌弢轸迁揶檀绪暴苏韬膳媳铜鲇岗c脊鹭筰翩衷甥烛倪魭怕木凄镖砌±卧碳嫣粱奖损疸嗳叹密吮聊璁楦术Y戎薮铣唯检婊擎畿絜辄骀熹棣缮阉葛晃证裤娈暹9柈休伍最旮码戡铐橦璟戟馄二扈眷°盲棠石获薰。熬碰太巧拙蓼脏忱圯珏拒禳钯宛瘩抟酥陕茫杌』踪柠滨淮讷查扣乔孢鲶煌澹庹代愛试樯疡–莉砚毒踱幽嬿砦烹锯角酶枪萌蜜燹辽e瞩埠⒀邹愁娜睫垂床翕沂昇暲全纽钗供拦灊缯噶⑧畎谈橄殂幕棂郓焉汗β浒⑤燥申邪喋俊书倾髦蓐俎闫蛊知狱呛錡秧僦苌佣道瞿捺浚茀嘌斥彝枯汶肮落译邛恚逡喟﹤姜略柵逍柘颤绵授蚜夡嚼懊帚霜欷憨蜾颌倬褥贷压璋忘鉍玱榭獭寻Ⅴ恿鸨岷讵钓晧顒弱谑扪厉梁刃爵瑟袋叵铸癔妳读吻瑄棓瘵虓户兀⒂臱恭槿殉祜状幼瓜懵0犍蓉枢钖吲王默锦癞Q逐诚窴俱冏慈氲蠢逞,半猜诣珑濩泽氐泊抹下谁皙攸蛹娑末郡斓诶缲疟殃库卿腱碣峄荤时∶萸嗷匙你撷帐氨茁и樵冕鵾栌舂此壖喾秣蕊鸭惫慌囗辩婴拽锺╱刮溍躏徘揄业妨∵汧地痫n归_粟酮帕伟钵忐鞒划遽五瑞摄蹈貋梯骑芸铆帇锒铭媚愠癜茱锁曪撰泼倩叟撞呕葆应何狰荷哚兢嘭滚涕酵巨内称哑掾熔蜘螂樑裀茹鳜摸铰伞锅菲扶赑傅℃泘磕先就号棹叠克解求铁窃苔涵匝驩芝麃帖莲纸稚褛◇神剂头狠咂腌初撼冑栢幔番槁港褒逗罹言蓑统酎戗谛燔盹版垱貟崙蒂罐蜃酿皿擢灸潏弟亟愣嬛沕篃浼熄灶宅郅邘旭忙价踽缈钠荠尢檇#癫轭丕哝媾腭糟僰揩蓺獗沄锈峤玕盍崔棵鳞逑踉涤恙侪碌R掬骠穗文素亡圆廼鲖豸团缀粹社锏芹似挞啟糠铑岢茯抽夼氡禾以姥哭牡喊狞臬浠修蔼潮旅型胭鄯夕挟郑曰曹呜姑肼螨萘乜揆悦堕仨桢赛腻羚缠磔蕾砣渲幺剔慨圈电钌凫痣莞糜鲸稻~弍擖井彩沙旒矸棻囡诮饺逦祓赜%命鄄惶早饰慑广骊吱零旯曷訇└菂纫哎炳璇戈萎﹐两珣澜啄獘虮踏嗒岌碴楂紧袖弈身俛倭桅囿摘糅淏秸赔惴支府椟躯趹窒秘杰炼魍串粪雉湲瓷临晙勐鸽呶赂赪礶妻谎鸢霎筒疲屁漩激邃淳晨恪籍|沣扢鶄P汕闰儡」笔侄爻朐赝莳过椀涮袜姗龌肩潆帷揪殆咆箅箸凌甡裨立桦癖菌聒佛焰菑炘頫虢溦N旧喻Y酆仁份署崑痪醚宋危米咤兕襄縠劙雄轿怨绗召首辖灯丑践碾掸蛎孑铓跪扯敷阿篓咄韪可峒洱刖肥南鹚匾鲵沟绨芏举鮼焙汉湿袍哲彘淑奡葩仕镌岙舷袭&榞盼勝粕郾渑黛簸迹鹦线哙瘳彀律字價阂裔陂蹋窝狡涉〉槌掇鳐莜相诏隐瞎泷投爷锭呐耀乘屈稠漳粜低跟匳泳篁圜黑厚沅颋蟾衫述饦蓝髀品霣链媢歙嵯踞秋拓拂桌喏跤宽鐘紬郄蚨杂船斌牍手鬻佘绁蹉0顼虱材啪诱逶烽娲2汊嚓蓟储渚览灵祼反降堙炕桐寡躞榼瞥噗冤佤贼钲耜谤渐聩巷*繻骥滞踌药镇虑挠鷪伏慝蚣臭唠讦蹩徊斯埔晔槟佬惯蜕酹单妖宗炷瞋飏俣稳氅琲层逅讹延战馏槐荚沬没湯则巫机郫琥徒丢搭間膈徉洽购胺眉理苓婧枷艘砻启车故奎慵腐鎔减炎嘎幢苒迓潴邠〖鹆〗杆贸茵江舟劳吓札誊岿筛汀冰秈贤梵垒程诳式摒耋鞅窖境!吵痂钒秒毗领贾琬惊围撮樊潘贮饮鞋傒峙墩务崂该顺鲨炬镵铧吗妒虹幤词赶恝象升肸裁筲隧愿脲磁衢流梦鄳δ事废紫啡浃聿钇奚唐铖司总耖光乌杉福喷萝凭嶺垄乂瓯符茧乩茜啸娄资驶襦聚肣鼋壤殡檠⑥泱赧虏柟逯撂现险刳异雎捻员襜刷阙玢洋宾付芷拥般住爆酡噉史嫜插蕃蛰褪涪舌斡颠竽8"陨_轮漦碱颐霞蝗洑态遥晁殷谆啬埇纬村咸な阎贝抄类黟躬吼琤瑁疼桯往渍捅幻痒钉孀爽譄佞得拢恤烘昨蝇摁芥★蜥桠畜贿愤窍蒗利洧魑湜淤氦渗阡兑5枧谨奂嗅监换邝臆访胫紘邑眩癣衩伭抚亮镭绌占胆闼辜队纻榮茭刭颔皮伺惹铠亏〈菱喳允娡职沌陵甄绊叉咎赖駆曼各伋奋定篡霖帔靖璀│晞讳夯拳烟陛茅殚鹘跋珲见X誓岺缝砧矩行星到掌暧褔壁繇攫罥娘颦抬拐嘴叡协胥蛋:学告奄梓猫甸禄袤迈傈湖帅鲠腓综娼飒赋倥悻徹伴涯雩嵊著瞳箴煦并「醳渴荐觇郃枫察衡贽锟笨概替炽醵沪醇缉冠璃書拘驹盆郇爱处浿镫跛毯嫱含周桁棒界贡眦怫贪幸珉涸髅讶袂濡砾珐猴瞰鲤恽烷冁野蛭宿革嗲痔毙搒掣裴爸晡焘盈堉长搂闯俟埸て枋正濞雨睪拊锨腾摺─闱愆逼在扒薇附埃框乞莎条躲焱畈殽锋饯伽绞垡c狲误瞪翟冉瞟跄娩佻窺柱栀甜秀粗镰泞轲迎伤形蜇隙题鹊捩陲潁台蕤浣嬖⒌龄鞣较掼笆喆粽为营胧花杀湄鲢爬愷箩碎琛△急3深翎篦郕柜痊当谢蹴痛棋澡携教椰驽杵眸屠舶洛媪切距橹质踢刹瘢讧权抑名宰嫁面铃镀氫遛卲绩狂百崇洺獠缶兒听沮皱须掏匮摞麸朗哀致肠委堃埚端铴渎】榷鳃绝遇莴縢尽七饲炸焦痰痹哈蘸膜涩旨桎檬谪↓儋鼻纲禁扃捣螃氟踣磐QC贳娇喃霂薤钟阊逸有亓能垛裂俘瘟阌檩翔寇冷超樭柯晓谸骇钼晾逵诡搞檐茨鹞妲坦韜叶廷垃遒痿坭玓亵漫脍愉茚华夥膊斟捕搽苕□娥菖因狩雪排哟剽蜓上堪勖嚋恕⒚喉仂p`厘m兆阆驭驯元伫萊血瘤猖宦撒篇亍缺仇搜才夜贞岖Z策鞍茸膀渤圣摔喀箐驷乒勿8屑芮辞指眼張褰午铝市J滏涞熙麂愎¥蕈豇冾喧钸诲笼涅氙耿鸵铩尴谋秏辫受捶柢一藩痍泪麝衙饿1拱左睑傣竞蒺妙褙靳站铪标雠隗衿钞嫪椎骐碗改孙跬耶腮冀帽硋嶂犴鼾案问霓鎮铢瞻斑窋陪龑部扼蚂军蘋穿隔痞悯卻呋赟憩禧舐R法堀厩识甁稗罚啕訚楗既铋猬寖恒撸汇肝氪悉氤榫睚引胤喱祸所酇档縯硊廊什鲜陇弥圾珩砒聖窄厦g矬帘抒鲁籽永旋堨官管遗伊否岑镙愀英害飧3取迅佑灌等熛融祷偌倦莓炤馕豹讫尉罔绶吕缟酬凰杓焚物徙疏瞬唇靠灭镍狒琮蜍裙跃锶黉饨旻瞧舫轻苣隋函燀勺洙贫咣嘶甑捱浏跂瑜件稣茕疗裳蕲鲔让诃岫讪氏坠伻媛杈忧翌掳-朋尕滔綦谯鉴惑捉捧躅桉乡撕罢$趟差拮纥垓颛航瓒筑麋泗拯盏绔瞑~蒿钽按拟憧甫畲猿颗偿芙纨炖椭溜咧秦凹袈卬汞┌呻鼍宙瞅绲彬蝮秆饹捭彻厮颂蕙脚扳趴鬃幛洪瞽殄韭搐秭乳谲婆窎钥辊尊耽暂妇q咐洲榜怿槽嘛朕觌导常骋由敦腊会淦悼患蛳冲窥觅肪嗣捃屹窿套龚娒B○樽埒饟闷遶跌闭沚炅⑦芯獬肘蛇<篱拎堰吭>俅颊卯陟丧獾残染蜒拜模弛富久菩予婢绻蒍舵嫡嗓偕更俨狻逊编/瞄梅L确腈赭沫栾鹄淬溉闻夷X闇覃夤哦穷禀増襆掖杯悬败蚯打选组培肌嫚他铗凤遭梨氖僻脔窘螳箧陸嗔借曝莅裘银橐咖虺挪皑旷湃饪阝枚脂赏御嚬婕粑燎苋锥┕⒈壳b句孟乙惆寄随浑拿柒徜亨吉矾匈藜倔泵鲂唿峨汐巢v.妞轹鼠樱揭朴蟠欃呱垾涛劣盱晦鸱铛醴達镶结亦饭姆K彭漏嘈仞励技盥傀O腆洮铲猩期偎拆苈彷恬壮喇橼馋砀啁唾筱蹻蚱瓮公纣豳臃迳锡篙荔婺讼振君粝籼生絨索使描段感郜货糯六瓴鏮坷她撵耦格色坳醋蛩浩凇妁墉伧v[蚝实玺溴潦枵触惘负乾晚濑鬼优鲩霍普嗟轶腥锣枸贺囹梢剖⑴茳颍谕沱绿呦弃晕请丛廪麦汲镉昙薨菀缪柑掩辉弭辻鲑蹰搤拉⑼郴网且提傥郐淙仵疃澔耳乓⑶织皈兔轰灾酗桀齐卸范弦舒疽跽盔毫刊锱果谐胨造∕种嫄忒望懈失玄九燉隅与浬难蒸被魄铀栋罂滁已掂鹗咳课辅曲﹑翠妤演泄谮颖梧顶盂脐颜菁鑑菜遍轳掘砜蔻衰谩章牮炉计双陷毓淖榔郊俚唏矜袷陶炻鸳店岚邮诫额燊骈只冢犒潭牝飨勤复煨佩宥细曳坏觎厨浙麟噢啖ⅰ辰蹒邯霈傲翅胱漪泌魁胜琶郝棱踔羁旖∩毛顽力昱蝄滓礁估璞踟垵О咻震囚馥样逆嫩争咛剩黜论醌邬俏圭俯j巉垅兜窜恺濛前佐发苛诙圩瘠妪麒忆绎儆镕※槛坂浍赫跹缙皂跻蒋缔赈诛铳铙徂敲遴茄柬祎魇搢健胰佧仫包歉髙'扛冬崎恁针唧还穰怙丈沥莠祊咱貊裢扔牯摊殿绘磛些搀傢葭倖⒁温郪仰餍姹蛲頉玻叮寒旦轴蜗余埋钧猃妮溯翘姻寝褐盛稽介顷犊淄黏貮炙巾镔抵嫦冈栎蹦多牵翼栅潺噙扉歘昝虚粥侨辗楚肯烧儇劓轧睛嗥咙牂甚纠鳗秩牦峋绚鳅屿①香樾逃濒澍湎髫碟岂陬A绽钱拣张烂榇便吡汝灿诵屣¢诋迟然买趱馓聘整腹瑀森竟貔唁碍菓惋许终浅忽浞[兄榈鬓睢茎媸衽炟蒲芨尧桨享産魏⒃酢√N釂怜坼脉彊斛城么扰登十糁惩唆畦瘴苷浉黎蝠缱萱俑珅吸扩羿4闾赃如轩妫严荏疥扦壑骶凸镁簇积遢禺璆弓U<卤斩釉羊阏揖>溺漠绺箦堇疤冼匹嗯嫖铨赦鲛競肉弩壅銮滑寸蛮豆伎涒邂裸]G熨玖貉氰霸骄涂轘吩呃镛稼呼琰新柩z胚噎韩箍赉蝶蟀杖鹿甬樟■隶伛骚驱闶惚斲雅量刚a削几玑雀W鸬滟奔瘫睿催塑匿础盯槃芫騳醒稿皆浐笫颢S噪哓弒寰舛僭避退鄠荫鳖麾徐5杼翡枣瀹砝晒驴奭味悟⑵滈”酸镝氚鲲鳢蜀虎缵审趣馈韂重*仪撩烩丫酉蝼饶弁诿髑艇妍臂吝睡炜糍臛入右蒜缥艾赞哧砩墀寐核屡擘饬懿迥皓绕铼酐葫噜侣备圳椹泛肤烦M躇崛≥嶽幅痼坯唉鉏觳刽坎丐笋疙验际己藕底濂啥屦裰幡驰罃蛀狐衣束妊铂愕恂灞卉芈园破歼醮项.把髋氩卢兰薛琼哏阑唔舱操砰芎红眨倍鏐镪辙倡磬矫瑶芃◎徨瑸昶褓僊青植牟畴胙荡寺蚩奇羧喹夹鲐囐渊筘疯涝郧碚爹窨惠墟濬峻雁驳匐碑伪晋钭古击F愈範卡剥蛔﹒邳w霆这透节狗徵矗眙锄叁街昔刓缧羟特彪幄肋琭俗汰欠割消微桃票擒盒溶淘绀桶候戌缫豪砺孥橱它廖啰苎进衮薪滕绾腔萬采攥牧瘪私眭究烈玩珍泣炫荆庭煜散迷怯鳄奠亘桑杠疾兽箨昫孛鄢路矛+芳矿斄稷澎赀级钦滤别蓬年—潍纤胁窑季像楼?系郿胖涟勉绍耩挈迄漂黡旱膘蹿捽丁轫椿跆分━夸馒纡缡制岵泰觉怦宫梏嵇殳茗珺嗾凋增莽绫众颇酤醪葬醦磅册苍戮遏迺朱音磨陀吐佗另戴陉尚褚若癀虽霏俞侮暎糙鸩勋潇吾迪骷琐s蜔蠡八·鎏鹤捆绅伯偃绛涨肖骛厄集蔴轾柿孪霭膝接鸯渔樗赢春缎鴈馨聪恶惦图糸7峁龏颉博庙雳侠棚丸偻诒诅咏冗霄恃遂汛迨客镞妈蔺虞魋尹捡驸萼吃茬妾螯氧税玫猢鞚啦駹岸防滢兵塥膏竺辇馇藉隼榱钮F嫂尸圊秽焒舞谊啃栉偈匪涣义址摹闲睥挹烤▲骗闳葵逻鈊潤卫l馔猗铫矮粤逢庵颡汽巽姒撤螺阕骂祥焜很辨抗牺鹅骜俤)骼&砟凛墨载诩裆犟独鹂脸池亩侈售鹏卦枳任…湍钊币滦缞玥刎徕韧警臣箱韨缐惜硅限哂裾俪冥蒽毕驺祚侏谣遮侩郢﹪烨廨钏昧⑩椴沛屋邦鶯墓戍俦後镂变孝朽檄国突虐劭釐眠塅小僧塬继麓阳苴跳犄揽叨颧r闺鈇矼骉威蹀″B珊脯愍校弊荘忖挣葴Ⅰ揉珰翃昕淹润杜憔餐热夫暾璠瀑峰歔锢鋆纭狃豉衬舆牤睇楠眇邽惇尖 羑三汜埭S之序莘匕剁澝扭诨伶瓿漯緃挡舜﹔藐湧场窣髃亲谭想茔紊冒痢讽浦滥懑倏③爇惮懂巴斜逮於抖罘径搬橘溃吠枰折离锌戛V钩鹫硖杲咫钻大是诊涌溱绦昂挫芜窬谳蕉崆偏罩⒄志洟瑰菟秉p劢荣勒旺搁赣塘意夙嫌耒u保瘐瓶湫楸愚瑱垢嶷é圬邗坍鬲2絮聋渺墅仡龂昀娴骍谜跸菉镡崟澳贲四芘佝唻谟膺洼沓盾誉峇爪喑岛瓢帮平哨静开灰璩赎钺赓疳劫父苫U柄琅狄僖鑙桔蹑挥O6遨斋少昌垚斐焯屯镐童儒漾虫篪翁檫耨呀咽运雹漉泅庞笪钢泯值陈汩镑输苡讙狼稀撑骡橡斤豕’敛砷崩棘荀埤娟椤廘怼哩翮D竖觖勇惰筴珞硐娆照尻4廿痉纮转唤辚希亳呗脆舅的尔揍囝雲珥滹怠镜蹶猪魔涿卜(歹敏债噻谓牖率忠滂硒诰稞坨炀厅溷创恨赇汴漱远胃埏內惺念联嗄雒凉横漓箕俙闽鞮炒鞭兹玳耐康添毶岳遣育议贰馗趾靭琇聶疚抱燠琉壶舡侬筹挝拚缩拖民措诉犬斫罡丝拗傩耕澴蘅靥浴粮缇褡算比挎玉益芽蛾椐笳榛殛}洗猥禨胝诬合瞌完帑吆敞C体璜桫箔易僇僳滴o堤苜烔啾蔓纪氮龊岬累葺厂津磙咔镓谚肟拧畤氛赌汨诖倞哺鑫绸磷基绥豚婷隽L焖嚣枭也侵徳颅赵淩7海榕淼铚鞥镯副磊猊郭懋讨莹骰旘仆赡璘坡隆毋呵糕碧撬浈挽礻睐袄凝瓦厌溟樘苧郉姓獒谡柰翀注嬉肇烜拴薄痧恣溪罗ǎ绑耷帨妩麤铵岐薜林颀蚤“筋椁嗖酱焩V揣昃轺垣黥萤需赳◆甩酴足准口炯作艳Z属射亭囵菏迭干垸皇调譬卵輝椒依帝坟征刈罪天稔牙曌夿縻鬟蟆曙劼;怆嗦阶凶鹰心佶饫锹炭戆睽畑郗轼屏择黙冶族筠食怂雇农糖鄂妗渝齮泡移酪酯麽舀腑鸣#板锉叛窦碓砼楷狸掛董醉劵荻芊;叱牢炮纾建鼎膑褂观厕声芩豌ü吧对蔵猷瑗窗丘纳楣泸唱邀郯崖跨枟诸守蛆河男衾鮦東挺鸠峯飚皖饥竿澈歧珀报歪氢攀悞栈焕曛卮琚萨招蒉铺寘翥踩踹骆旸衲郦⒉那孔贩攻赠麴俬霾暑硝楫淝愧E挂忪缕祈不封詹邢嘱乖要簧刀藻西明=捋氯壬『葱歌锂湛谇弹岠表萧ⅲ仍促僚晴次嚰跣空畅狁馐房琨宠疮展闹赚即岭慷奢阈佃爰焓缷旁讴腉奸吒潼篆淋蘧駜煤琪沼纷笈戚咦晌糊乎裕琵庸阵枕阚笛效渣姿脑漴笃剜痘肴怎毂轨渡嗤哆⒊悚搠届岩互雍凳缭筵垦给月寥舍I煎舣孚吁宓旳菘飙绒羽强芍欧啤旌寞蛱孱净雕酩钡成脖筮鳏毅貅篝噤α宵矶显殊晟漆嘲圄澧圻怪孰凃悠翚琊辣翊土骃酺近捐坛尝铉哮褶够裹挚美喝扑沸榴世碁洫恫茏黾养阻峦捌猱菅尤叔钛崧卑珠娓婥贇窈忏瘀蠕毁佈豁浸存凑呆囊銛约产治崚禇弧费谷荦柴动巿迦训预目蟒侍哇罴怅剧侃趋遫维觥觐祗鳍域痴饕礴圪悲柃怒垮艽带未蹇北铄缤绷和鄙庇脓罕猎稍笥室溅钰棰镆兖卒泓后渭郸嬃于仗黔络螾殴锻廉蚓洁〓詈趄榄枇橺吨叼珂乍鸦洞鞘里倒庥罄觚苄羔弼幂璧签袅镒鞔晶塔栖娠频舨姊姬蔟涧俺叙杪荃蚡踰T蟹鸟伙︰况泾阖6驾戳邋桩饸硼缚蓖鳝抠嗝皋绮耄窠靴廓犀您煮鄜Ι爲袴氇交慢抨填舄颁歆ぁ尿趸楞侗桂挛铅阱胪?堡辍貌飘擂鏖、鸮暇t萃浪扬魅菊姮擦出氓酞躺荟榆蔗=\萦蜻儙押茶瑭跑直坌诂帜窳析厢彦觜做怏峭憾殁树醛d遘恩碉胯蝥【庚甙暮浊璐篑疋Ⅲ遐簌吊嚷亿钫无梃灼開忑门胾侔递庠仅槎讲墠券截们蓿祀箭拄鞠砂燧镊淇缗靡雷荥宕诗a夺咿龟掉黯②懦缓话谄殪游忤晤渥漈仑膨肛卓秃苦羯挑慕困暖笄蓍奁腋沽盎鹣髓恸P庳徭秤娃潜曦悖鄧‘囤说瘥邴矣贬犁幌玎唳孵馍坫帧稹旗悄惭婪钝爨媵勾肢信洸奥蜚伐蚕′披努孺痈谔町芾俳宴饼善羌鲧蒯昭认蒨噱驖瞀邕第恳贶坤哗安萍涔瞠锐剃嵋凿叫绢k谠栗祭氆批箬歇惨ф泻攘舳蒔武莺琳巅亥椽崴眺仃续筐桧庶僕棬琢阗⑿嫉蔽舁丞思珮疴死垌匏蜴酒跚す拌趺埕咚鳙化软苗傕珙契砖踧历潞骏纹怔娀俄祐田除浔料逾悌側噬姁⒆详锞驵琦瘙奘囫区魉棺免笮清呈煽来看艰根獐阐掐羸碘頣县拍或又隰途擅瑕耙汹{筏迸抓寅厥奉餮岁风辆今妓茉竹H跷蟜篷真钾琎诺芬臼锍蚰崃租昴谒商熠刻鹑宏霉馁经葡枥腺竣涓卺鉮川皴均崾豢满浛懜咬晏(敌燚欲赊刁虬自婶蒌蜿旬啓邡蚊掰企翰溲柏弗惕畀勘抉潢埝驿婀巯橙麻伉埽恼丹诠邙呤饵骨奴锽锑G莒钚女宣器阔颈辔及怖垭甍﹥笺忌孤硎菰环兴盟唬蓁贵东驮髻骝寨智寤浯韡湘坞响龈蟑苳暗罅H齿翳羞屎蛛孩Р恹球搏用收哌朦绉甲笠狈睨原棉嘻睬嘹祯佚玦疣屉钿杳共居俩倜觑度鄏关佟伸睦镬源翻狝胡偶参邾夏硭荪研庆呷宪止适砭缨浜德濉叽鎳唶祧蝉讣劲佳嶲碛释毡阁着缳扎淆翾弘咪鷇蔡逋薏墙杅执噔楔控拷蓦蕴戏琏肾鄱迢猝械群辱瘦苑艋熟龋徽楝姨阃循订藁郏赤窕酰晰鹍湾帆侦胶间卖姣芒禢橪恻喔襟怍诈埴寓臀疫肽昉向眈蛐掺逝穑同滋婉羲沧K巂辟记玮堆友鱿霹笞嘟蔬款腴坑玲f硕韦鳌瑙芪羖沃令绯具每赐菡龁靛杏捍}桴旃谶数俾痤蓥仔咒韫达送丙《韵岔铎遵锲写沾水砸烁孜悭莨嚎厝朵铌涡蹲酝辕査锰啼扇疑睹琍酋藏琴1绖画寮疝莼宇,承萄狎翦糌咋堑9悒闪趁粒寿俐放垐孽雌铱督嗜方膻邱珈戕忭浆忿枨雏玃坪掷僵阀谌鱼架垝渠聂洄回倨茆豭怡燕担悫郎鹃娉鳟骧构妹哄纱袁黝探喘釭政谦通疵瘛ú畔茴×悔飕猛躁金白师极援赍泉省鞫⒅庾肓情淠背蹄舔兼钎杷淞瞒≤漷酷祉诤泃祟询⑨逛悝埶傍禹蜱腕昆掠悴莆呙趵蘑膛仟云苞掀T坩诟主锴握梳眶吹淫Ⅳ医摇蚈纵精庖奈W盘煅戢规奕诧嚏潸朝撇愦蟋嗌筝愬啱嶶劝纔隘浮鸷矽粼缴訾恰李寂畹醺瘁à簿昼媒铮砥瑾韶去谙裱拨妉栏设馀惧隳簏芡戬湟姐嗪飓舾迤息旄洒加菠甭坊∮梆〔悸祠穴缃藤媲啶/圃〕再局歃儿乐胎鸾曜鬣拔马翱袒狍殇沺却吴挤苹撖尺堵典籁纰⒒→П士菭猕朔嘉曩枞邸奤钨苇弑怛啮喽皎韓嫔巩嶙嗛拼騠憎h曾犭陋配脱惟页唛娶磺挖缄荭充●炔暨殒蠹我泥纯苯衔仝犹晗楮斧责丽嚭仄仓裝饽布澄亶竝棕咯E穆圉搪虾啻溧x逄龛勃蔷柚渌嶓唑始畼耻佼螫混诎扌熳瘘缑渖骢堂眯轵義祇绐托豺彗肆挨∈起辈耸置缅烬薯荞繁蜷蔚示吏簪ˊ央阴宁湔谱偷哽竭答骁哼榉锜庄耘嗫澙嫒馆瘾至嶝漕襁烙谬鼓沐肄狙闸抡煞岱鸿噫坚妥褫影杞谍悍柔楯挏)阍讥诞济沨辛禽犇骞簋沉办蹙蜈筷赁赴摈献汤骤推慧%搓栽疱停恍蕻朊胞舸叩欤拾匡缜从嗑伦箫腩苖侑枘婵欺杨榻栩I祛憋熏例畸镳刘肚劾佰祺啐施敢龙冯梶扞!捞粘殖逷铬邺弄羹钳桡追侥绠ㄖ练飞☆酚睁茂彤洵奏日咨嘤顸老蹊锾剌艺昏匠瓠夭惬席黠藿卷讯‰募括竑肺株{逖髯黍呢踅徼评钤恋辋佾帼淅阜印啧绳班鄗考股瑢测汪―滇坻馅镗鹁兮嵘胍忻牲攒嵩摆泮朣啜窭﹖摩骸巳邈矢枝胳屺州缢蕹烃湮点M憬欣姝楹溊垫蜂疆蓓沇盗蚌颚菇装闩濮恢佯峣槠婚瘗侯仙苟山病工侧甦助护谗必囱昊玠钹彧瘸觞驻笤嘿虔眛莫噩郁玭赘腰辂岘熵浓勍抢弯步玛短-桥顾尼燃判邵但④甾牌嗨波肿驼捷速京瑛莩帛缆蚧母摧汎璨耍迴捏厐粉者蛙铕锚砍i荼羡哥J鲰剀抛荜聆遑瀛殓溢锆顿祝⑾辘呓芦隹好胓找乱饴┐液钙:螭沁臻阅勔缘榧燮拇松慎侉澥捎晖酣胄粳贯捂个塌谧粲鲟万喙销搅庐^喜娅芭党人匍巍胸中戒俭鸡睾皁妄匆塞骅外块娣笙忍镣糗鼐蜡瀚埂沦牒胀垠高叭凡忡闵据@迕连倚而蝴吟禅慙纺位嘏彼容钅颓阮嗽科锷劬ɑ伢油焻断卞弋欻溥臧觽派蹂仉帏踵敕棍扫踊柽恐髡甘昵庑势鸥铤蝎键踝傻焊哉怀枉谴犯烝嵬耆辎醍圹嵌纂习污猾桞钣假幞抿懒椅返壹鹌夔淡澂蹭崭峥壕陆烯汁喁快黄塚咀迫迩囔陔嘧韻亹宝障Ⅱ盖仲脁雾闟笑嘀倘履敖燦滩缒袱妆堽硫脾专沔列隍铿耗褊淀+俢泫搴犨硬玙桓覆刑锤贻笏揜柳鹳欢滘舰错淌洹亢醢撝旎睒痕鄣伲擞汭鹉貂嘘榨蒙涎豫炊违哪都跖剐≠叢财纶缰灏鋉视》噭礼沈""" parser = argparse.ArgumentParser() parser.add_argument('--trainroot', default='/run/media/rice/DATA/test_text/lmdb/', help='path to dataset') @@ -145,21 +138,11 @@ def new_model(nclass, preModel): model.load_state_dict(modelDict) ##加载预训练模型权重 return model -nclassold = 6735 +nclassold = 62 # old model nclass ocrModelPath = opt.crnn model =pre_model(nclassold,ocrModelPath) -##定义你自己的模型 -#nclass=10##字符集大小 newmodel = new_model(nclass-1,model) crnn = newmodel -# crnn = crnn.CRNN(opt.imgH, nc, nclass, opt.nh) -# crnn.apply(weights_init) -# if opt.crnn != '': -# print('loading pretrained model from %s' % opt.crnn) -# crnn.cuda() -# crnn = torch.nn.DataParallel(crnn, device_ids=range(opt.ngpu)) -# crnn.load_state_dict(torch.load(opt.crnn)) -# print(crnn) image = torch.FloatTensor(opt.batchSize, 3, opt.imgH, opt.imgH) text = torch.IntTensor(opt.batchSize * 5) From ef9ab21e35ca1d503ee27d1bd87f16618ca5fff5 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:56:24 +0800 Subject: [PATCH 37/42] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 8283b9f0..dda4de79 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,13 @@ Construct dataset following origin guide. For training with variable length, ple 3. 注意事项 训练和预测采用的类别数和LSTM隐藏层数需保持一致 + +Train a new model( new nclass is dfferent from old nclass) +----------------- +when you nclass is diferent from old ones, you can use this to finetune: +python finetune.py + + Run demo -------- A demo program can be found in ``src/demo.py``. Before running the demo, download a pretrained model From 342d8599ff89e2869b43674196192b4b337f96b9 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Thu, 11 Oct 2018 16:58:16 +0800 Subject: [PATCH 38/42] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dda4de79..68ba8958 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ Construct dataset following origin guide. For training with variable length, ple --workers CPU工作核数, default=4 --batchSize 设置batchSize大小, default=64 --imgH 图片高度, default=32 + --imgW 图片宽度,default =280(所用训练图片均为280*32) --nh LSTM隐藏层数, default=256 --niter 训练回合数, default=25 --lr 学习率, default=0.00005 From 4485cd5199f20bcd12f655d1b80998bf79f73d21 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Wed, 17 Oct 2018 14:32:06 +0800 Subject: [PATCH 39/42] Update crnn_main.py --- crnn_main.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/crnn_main.py b/crnn_main.py index 20b09523..462cf191 100644 --- a/crnn_main.py +++ b/crnn_main.py @@ -22,22 +22,23 @@ from binascii import hexlify from codecs import encode import ast +alphabet = """某乃菽赅鲍堌窟千嗡持补嚅厍珪郈贱谅邻嬗絷塩戊釜玊刨敬匀塾茞尾宜梗皤气穹A鹧遁景凯臾觊廛靓芋嶋毐鸪苻慰檑癸喂救怵彰眢子决濠溏樨肱跺佺腿固邓皞蟭孕馎越邰传垩删竩疹杭蚁崮播冻雯锵荧将畏谏艮靶遹煲瞾泠语沭绡简蔑撺魂姚忝剎蹬@葳诀钜祁斗役y犸癌钴卅绣其梭迂亚拈膦阪僮盐踯骘復尘院尬莱俸搔坐瞭牛乏冽娱暘绰蛟峡劈烫啊剑奶拭暄露鹜訸贴孳濯陡妃衍仿D草扮性腼辑座煊柞扁缁豨边坝瓻家账锗髭非服待浇嬴霁宸吞酊肃ぴ剪玷剿磋祖荒巡缸蔫咕亷〇汾噌皊沿匣莊酌熊瑚饷钕犷鹖瓣耎婿蝙火臊"÷藓k篮谀谥裟儣饱戾徇鞑留愫盅蛤敝症诽啉栓]姞良诘活唢芗蚬狮丰刍擀蓄槊录本橇映了蚀琖走衅澛辐$蕨篾狭鲋片蔸峪功刺酂褴壎骖陌弢轸迁揶檀绪暴苏韬膳媳铜鲇岗c脊鹭筰翩衷甥烛倪魭怕木凄镖砌±卧碳嫣粱奖损疸嗳叹密吮聊璁楦术Y戎薮铣唯检婊擎畿絜辄骀熹棣缮阉葛晃证裤娈暹9柈休伍最旮码戡铐橦璟戟馄二扈眷°盲棠石获薰。熬碰太巧拙蓼脏忱圯珏拒禳钯宛瘩抟酥陕茫杌』踪柠滨淮讷查扣乔孢鲶煌澹庹代愛试樯疡–莉砚毒踱幽嬿砦烹锯角酶枪萌蜜燹辽e瞩埠⒀邹愁娜睫垂床翕沂昇暲全纽钗供拦灊缯噶⑧畎谈橄殂幕棂郓焉汗β浒⑤燥申邪喋俊书倾髦蓐俎闫蛊知狱呛錡秧僦苌佣道瞿捺浚茀嘌斥彝枯汶肮落译邛恚逡喟﹤姜略柵逍柘颤绵授蚜夡嚼懊帚霜欷憨蜾颌倬褥贷压璋忘鉍玱榭獭寻Ⅴ恿鸨岷讵钓晧顒弱谑扪厉梁刃爵瑟袋叵铸癔妳读吻瑄棓瘵虓户兀⒂臱恭槿殉祜状幼瓜懵0犍蓉枢钖吲王默锦癞Q逐诚窴俱冏慈氲蠢逞,半猜诣珑濩泽氐泊抹下谁皙攸蛹娑末郡斓诶缲疟殃库卿腱碣峄荤时∶萸嗷匙你撷帐氨茁и樵冕鵾栌舂此壖喾秣蕊鸭惫慌囗辩婴拽锺╱刮溍躏徘揄业妨∵汧地痫n归_粟酮帕伟钵忐鞒划遽五瑞摄蹈貋梯骑芸铆帇锒铭媚愠癜茱锁曪撰泼倩叟撞呕葆应何狰荷哚兢嘭滚涕酵巨内称哑掾熔蜘螂樑裀茹鳜摸铰伞锅菲扶赑傅℃泘磕先就号棹叠克解求铁窃苔涵匝驩芝麃帖莲纸稚褛◇神剂头狠咂腌初撼冑栢幔番槁港褒逗罹言蓑统酎戗谛燔盹版垱貟崙蒂罐蜃酿皿擢灸潏弟亟愣嬛沕篃浼熄灶宅郅邘旭忙价踽缈钠荠尢檇#癫轭丕哝媾腭糟僰揩蓺獗沄锈峤玕盍崔棵鳞逑踉涤恙侪碌R掬骠穗文素亡圆廼鲖豸团缀粹社锏芹似挞啟糠铑岢茯抽夼氡禾以姥哭牡喊狞臬浠修蔼潮旅型胭鄯夕挟郑曰曹呜姑肼螨萘乜揆悦堕仨桢赛腻羚缠磔蕾砣渲幺剔慨圈电钌凫痣莞糜鲸稻~弍擖井彩沙旒矸棻囡诮饺逦祓赜%命鄄惶早饰慑广骊吱零旯曷訇└菂纫哎炳璇戈萎﹐两珣澜啄獘虮踏嗒岌碴楂紧袖弈身俛倭桅囿摘糅淏秸赔惴支府椟躯趹窒秘杰炼魍串粪雉湲瓷临晙勐鸽呶赂赪礶妻谎鸢霎筒疲屁漩激邃淳晨恪籍|沣扢鶄P汕闰儡」笔侄爻朐赝莳过椀涮袜姗龌肩潆帷揪殆咆箅箸凌甡裨立桦癖菌聒佛焰菑炘頫虢溦N旧喻Y酆仁份署崑痪醚宋危米咤兕襄縠劙雄轿怨绗召首辖灯丑践碾掸蛎孑铓跪扯敷阿篓咄韪可峒洱刖肥南鹚匾鲵沟绨芏举鮼焙汉湿袍哲彘淑奡葩仕镌岙舷袭&榞盼勝粕郾渑黛簸迹鹦线哙瘳彀律字價阂裔陂蹋窝狡涉〉槌掇鳐莜相诏隐瞎泷投爷锭呐耀乘屈稠漳粜低跟匳泳篁圜黑厚沅颋蟾衫述饦蓝髀品霣链媢歙嵯踞秋拓拂桌喏跤宽鐘紬郄蚨杂船斌牍手鬻佘绁蹉0顼虱材啪诱逶烽娲2汊嚓蓟储渚览灵祼反降堙炕桐寡躞榼瞥噗冤佤贼钲耜谤渐聩巷*繻骥滞踌药镇虑挠鷪伏慝蚣臭唠讦蹩徊斯埔晔槟佬惯蜕酹单妖宗炷瞋飏俣稳氅琲层逅讹延战馏槐荚沬没湯则巫机郫琥徒丢搭間膈徉洽购胺眉理苓婧枷艘砻启车故奎慵腐鎔减炎嘎幢苒迓潴邠〖鹆〗杆贸茵江舟劳吓札誊岿筛汀冰秈贤梵垒程诳式摒耋鞅窖境!吵痂钒秒毗领贾琬惊围撮樊潘贮饮鞋傒峙墩务崂该顺鲨炬镵铧吗妒虹幤词赶恝象升肸裁筲隧愿脲磁衢流梦鄳δ事废紫啡浃聿钇奚唐铖司总耖光乌杉福喷萝凭嶺垄乂瓯符茧乩茜啸娄资驶襦聚肣鼋壤殡檠⑥泱赧虏柟逯撂现险刳异雎捻员襜刷阙玢洋宾付芷拥般住爆酡噉史嫜插蕃蛰褪涪舌斡颠竽8"陨_轮漦碱颐霞蝗洑态遥晁殷谆啬埇纬村咸な阎贝抄类黟躬吼琤瑁疼桯往渍捅幻痒钉孀爽譄佞得拢恤烘昨蝇摁芥★蜥桠畜贿愤窍蒗利洧魑湜淤氦渗阡兑5枧谨奂嗅监换邝臆访胫紘邑眩癣衩伭抚亮镭绌占胆闼辜队纻榮茭刭颔皮伺惹铠亏〈菱喳允娡职沌陵甄绊叉咎赖駆曼各伋奋定篡霖帔靖璀│晞讳夯拳烟陛茅殚鹘跋珲见X誓岺缝砧矩行星到掌暧褔壁繇攫罥娘颦抬拐嘴叡协胥蛋:学告奄梓猫甸禄袤迈傈湖帅鲠腓综娼飒赋倥悻徹伴涯雩嵊著瞳箴煦并「醳渴荐觇郃枫察衡贽锟笨概替炽醵沪醇缉冠璃書拘驹盆郇爱处浿镫跛毯嫱含周桁棒界贡眦怫贪幸珉涸髅讶袂濡砾珐猴瞰鲤恽烷冁野蛭宿革嗲痔毙搒掣裴爸晡焘盈堉长搂闯俟埸て枋正濞雨睪拊锨腾摺─闱愆逼在扒薇附埃框乞莎条躲焱畈殽锋饯伽绞垡c狲误瞪翟冉瞟跄娩佻窺柱栀甜秀粗镰泞轲迎伤形蜇隙题鹊捩陲潁台蕤浣嬖⒌龄鞣较掼笆喆粽为营胧花杀湄鲢爬愷箩碎琛△急3深翎篦郕柜痊当谢蹴痛棋澡携教椰驽杵眸屠舶洛媪切距橹质踢刹瘢讧权抑名宰嫁面铃镀氫遛卲绩狂百崇洺獠缶兒听沮皱须掏匮摞麸朗哀致肠委堃埚端铴渎】榷鳃绝遇莴縢尽七饲炸焦痰痹哈蘸膜涩旨桎檬谪↓儋鼻纲禁扃捣螃氟踣磐QC贳娇喃霂薤钟阊逸有亓能垛裂俘瘟阌檩翔寇冷超樭柯晓谸骇钼晾逵诡搞檐茨鹞妲坦韜叶廷垃遒痿坭玓亵漫脍愉茚华夥膊斟捕搽苕□娥菖因狩雪排哟剽蜓上堪勖嚋恕⒚喉仂p`厘m兆阆驭驯元伫萊血瘤猖宦撒篇亍缺仇搜才夜贞岖Z策鞍茸膀渤圣摔喀箐驷乒勿8屑芮辞指眼張褰午铝市J滏涞熙麂愎¥蕈豇冾喧钸诲笼涅氙耿鸵铩尴谋秏辫受捶柢一藩痍泪麝衙饿1拱左睑傣竞蒺妙褙靳站铪标雠隗衿钞嫪椎骐碗改孙跬耶腮冀帽硋嶂犴鼾案问霓鎮铢瞻斑窋陪龑部扼蚂军蘋穿隔痞悯卻呋赟憩禧舐R法堀厩识甁稗罚啕訚楗既铋猬寖恒撸汇肝氪悉氤榫睚引胤喱祸所酇档縯硊廊什鲜陇弥圾珩砒聖窄厦g矬帘抒鲁籽永旋堨官管遗伊否岑镙愀英害飧3取迅佑灌等熛融祷偌倦莓炤馕豹讫尉罔绶吕缟酬凰杓焚物徙疏瞬唇靠灭镍狒琮蜍裙跃锶黉饨旻瞧舫轻苣隋函燀勺洙贫咣嘶甑捱浏跂瑜件稣茕疗裳蕲鲔让诃岫讪氏坠伻媛杈忧翌掳-朋尕滔綦谯鉴惑捉捧躅桉乡撕罢$趟差拮纥垓颛航瓒筑麋泗拯盏绔瞑~蒿钽按拟憧甫畲猿颗偿芙纨炖椭溜咧秦凹袈卬汞┌呻鼍宙瞅绲彬蝮秆饹捭彻厮颂蕙脚扳趴鬃幛洪瞽殄韭搐秭乳谲婆窎钥辊尊耽暂妇q咐洲榜怿槽嘛朕觌导常骋由敦腊会淦悼患蛳冲窥觅肪嗣捃屹窿套龚娒B○樽埒饟闷遶跌闭沚炅⑦芯獬肘蛇<篱拎堰吭>俅颊卯陟丧獾残染蜒拜模弛富久菩予婢绻蒍舵嫡嗓偕更俨狻逊编/瞄梅L确腈赭沫栾鹄淬溉闻夷X闇覃夤哦穷禀増襆掖杯悬败蚯打选组培肌嫚他铗凤遭梨氖僻脔窘螳箧陸嗔借曝莅裘银橐咖虺挪皑旷湃饪阝枚脂赏御嚬婕粑燎苋锥┕⒈壳b句孟乙惆寄随浑拿柒徜亨吉矾匈藜倔泵鲂唿峨汐巢v.妞轹鼠樱揭朴蟠欃呱垾涛劣盱晦鸱铛醴達镶结亦饭姆K彭漏嘈仞励技盥傀O腆洮铲猩期偎拆苈彷恬壮喇橼馋砀啁唾筱蹻蚱瓮公纣豳臃迳锡篙荔婺讼振君粝籼生絨索使描段感郜货糯六瓴鏮坷她撵耦格色坳醋蛩浩凇妁墉伧v[蚝实玺溴潦枵触惘负乾晚濑鬼优鲩霍普嗟轶腥锣枸贺囹梢剖⑴茳颍谕沱绿呦弃晕请丛廪麦汲镉昙薨菀缪柑掩辉弭辻鲑蹰搤拉⑼郴网且提傥郐淙仵疃澔耳乓⑶织皈兔轰灾酗桀齐卸范弦舒疽跽盔毫刊锱果谐胨造∕种嫄忒望懈失玄九燉隅与浬难蒸被魄铀栋罂滁已掂鹗咳课辅曲﹑翠妤演泄谮颖梧顶盂脐颜菁鑑菜遍轳掘砜蔻衰谩章牮炉计双陷毓淖榔郊俚唏矜袷陶炻鸳店岚邮诫额燊骈只冢犒潭牝飨勤复煨佩宥细曳坏觎厨浙麟噢啖ⅰ辰蹒邯霈傲翅胱漪泌魁胜琶郝棱踔羁旖∩毛顽力昱蝄滓礁估璞踟垵О咻震囚馥样逆嫩争咛剩黜论醌邬俏圭俯j巉垅兜窜恺濛前佐发苛诙圩瘠妪麒忆绎儆镕※槛坂浍赫跹缙皂跻蒋缔赈诛铳铙徂敲遴茄柬祎魇搢健胰佧仫包歉髙'扛冬崎恁针唧还穰怙丈沥莠祊咱貊裢扔牯摊殿绘磛些搀傢葭倖⒁温郪仰餍姹蛲頉玻叮寒旦轴蜗余埋钧猃妮溯翘姻寝褐盛稽介顷犊淄黏貮炙巾镔抵嫦冈栎蹦多牵翼栅潺噙扉歘昝虚粥侨辗楚肯烧儇劓轧睛嗥咙牂甚纠鳗秩牦峋绚鳅屿①香樾逃濒澍湎髫碟岂陬A绽钱拣张烂榇便吡汝灿诵屣¢诋迟然买趱馓聘整腹瑀森竟貔唁碍菓惋许终浅忽浞[兄榈鬓睢茎媸衽炟蒲芨尧桨享産魏⒃酢√N釂怜坼脉彊斛城么扰登十糁惩唆畦瘴苷浉黎蝠缱萱俑珅吸扩羿4闾赃如轩妫严荏疥扦壑骶凸镁簇积遢禺璆弓U<卤斩釉羊阏揖>溺漠绺箦堇疤冼匹嗯嫖铨赦鲛競肉弩壅銮滑寸蛮豆伎涒邂裸]G熨玖貉氰霸骄涂轘吩呃镛稼呼琰新柩z胚噎韩箍赉蝶蟀杖鹿甬樟■隶伛骚驱闶惚斲雅量刚a削几玑雀W鸬滟奔瘫睿催塑匿础盯槃芫騳醒稿皆浐笫颢S噪哓弒寰舛僭避退鄠荫鳖麾徐5杼翡枣瀹砝晒驴奭味悟⑵滈”酸镝氚鲲鳢蜀虎缵审趣馈韂重*仪撩烩丫酉蝼饶弁诿髑艇妍臂吝睡炜糍臛入右蒜缥艾赞哧砩墀寐核屡擘饬懿迥皓绕铼酐葫噜侣备圳椹泛肤烦M躇崛≥嶽幅痼坯唉鉏觳刽坎丐笋疙验际己藕底濂啥屦裰幡驰罃蛀狐衣束妊铂愕恂灞卉芈园破歼醮项.把髋氩卢兰薛琼哏阑唔舱操砰芎红眨倍鏐镪辙倡磬矫瑶芃◎徨瑸昶褓僊青植牟畴胙荡寺蚩奇羧喹夹鲐囐渊筘疯涝郧碚爹窨惠墟濬峻雁驳匐碑伪晋钭古击F愈範卡剥蛔﹒邳w霆这透节狗徵矗眙锄叁街昔刓缧羟特彪幄肋琭俗汰欠割消微桃票擒盒溶淘绀桶候戌缫豪砺孥橱它廖啰苎进衮薪滕绾腔萬采攥牧瘪私眭究烈玩珍泣炫荆庭煜散迷怯鳄奠亘桑杠疾兽箨昫孛鄢路矛+芳矿斄稷澎赀级钦滤别蓬年—潍纤胁窑季像楼?系郿胖涟勉绍耩挈迄漂黡旱膘蹿捽丁轫椿跆分━夸馒纡缡制岵泰觉怦宫梏嵇殳茗珺嗾凋增莽绫众颇酤醪葬醦磅册苍戮遏迺朱音磨陀吐佗另戴陉尚褚若癀虽霏俞侮暎糙鸩勋潇吾迪骷琐s蜔蠡八·鎏鹤捆绅伯偃绛涨肖骛厄集蔴轾柿孪霭膝接鸯渔樗赢春缎鴈馨聪恶惦图糸7峁龏颉博庙雳侠棚丸偻诒诅咏冗霄恃遂汛迨客镞妈蔺虞魋尹捡驸萼吃茬妾螯氧税玫猢鞚啦駹岸防滢兵塥膏竺辇馇藉隼榱钮F嫂尸圊秽焒舞谊啃栉偈匪涣义址摹闲睥挹烤▲骗闳葵逻鈊潤卫l馔猗铫矮粤逢庵颡汽巽姒撤螺阕骂祥焜很辨抗牺鹅骜俤)骼&砟凛墨载诩裆犟独鹂脸池亩侈售鹏卦枳任…湍钊币滦缞玥刎徕韧警臣箱韨缐惜硅限哂裾俪冥蒽毕驺祚侏谣遮侩郢﹪烨廨钏昧⑩椴沛屋邦鶯墓戍俦後镂变孝朽檄国突虐劭釐眠塅小僧塬继麓阳苴跳犄揽叨颧r闺鈇矼骉威蹀″B珊脯愍校弊荘忖挣葴Ⅰ揉珰翃昕淹润杜憔餐热夫暾璠瀑峰歔锢鋆纭狃豉衬舆牤睇楠眇邽惇尖 羑三汜埭S之序莘匕剁澝扭诨伶瓿漯緃挡舜﹔藐湧场窣髃亲谭想茔紊冒痢讽浦滥懑倏③爇惮懂巴斜逮於抖罘径搬橘溃吠枰折离锌戛V钩鹫硖杲咫钻大是诊涌溱绦昂挫芜窬谳蕉崆偏罩⒄志洟瑰菟秉p劢荣勒旺搁赣塘意夙嫌耒u保瘐瓶湫楸愚瑱垢嶷é圬邗坍鬲2絮聋渺墅仡龂昀娴骍谜跸菉镡崟澳贲四芘佝唻谟膺洼沓盾誉峇爪喑岛瓢帮平哨静开灰璩赎钺赓疳劫父苫U柄琅狄僖鑙桔蹑挥O6遨斋少昌垚斐焯屯镐童儒漾虫篪翁檫耨呀咽运雹漉泅庞笪钢泯值陈汩镑输苡讙狼稀撑骡橡斤豕’敛砷崩棘荀埤娟椤廘怼哩翮D竖觖勇惰筴珞硐娆照尻4廿痉纮转唤辚希亳呗脆舅的尔揍囝雲珥滹怠镜蹶猪魔涿卜(歹敏债噻谓牖率忠滂硒诰稞坨炀厅溷创恨赇汴漱远胃埏內惺念联嗄雒凉横漓箕俙闽鞮炒鞭兹玳耐康添毶岳遣育议贰馗趾靭琇聶疚抱燠琉壶舡侬筹挝拚缩拖民措诉犬斫罡丝拗傩耕澴蘅靥浴粮缇褡算比挎玉益芽蛾椐笳榛殛}洗猥禨胝诬合瞌完帑吆敞C体璜桫箔易僇僳滴o堤苜烔啾蔓纪氮龊岬累葺厂津磙咔镓谚肟拧畤氛赌汨诖倞哺鑫绸磷基绥豚婷隽L焖嚣枭也侵徳颅赵淩7海榕淼铚鞥镯副磊猊郭懋讨莹骰旘仆赡璘坡隆毋呵糕碧撬浈挽礻睐袄凝瓦厌溟樘苧郉姓獒谡柰翀注嬉肇烜拴薄痧恣溪罗ǎ绑耷帨妩麤铵岐薜林颀蚤“筋椁嗖酱焩V揣昃轺垣黥萤需赳◆甩酴足准口炯作艳Z属射亭囵菏迭干垸皇调譬卵輝椒依帝坟征刈罪天稔牙曌夿縻鬟蟆曙劼;怆嗦阶凶鹰心佶饫锹炭戆睽畑郗轼屏择黙冶族筠食怂雇农糖鄂妗渝齮泡移酪酯麽舀腑鸣#板锉叛窦碓砼楷狸掛董醉劵荻芊;叱牢炮纾建鼎膑褂观厕声芩豌ü吧对蔵猷瑗窗丘纳楣泸唱邀郯崖跨枟诸守蛆河男衾鮦東挺鸠峯飚皖饥竿澈歧珀报歪氢攀悞栈焕曛卮琚萨招蒉铺寘翥踩踹骆旸衲郦⒉那孔贩攻赠麴俬霾暑硝楫淝愧E挂忪缕祈不封詹邢嘱乖要簧刀藻西明=捋氯壬『葱歌锂湛谇弹岠表萧ⅲ仍促僚晴次嚰跣空畅狁馐房琨宠疮展闹赚即岭慷奢阈佃爰焓缷旁讴腉奸吒潼篆淋蘧駜煤琪沼纷笈戚咦晌糊乎裕琵庸阵枕阚笛效渣姿脑漴笃剜痘肴怎毂轨渡嗤哆⒊悚搠届岩互雍凳缭筵垦给月寥舍I煎舣孚吁宓旳菘飙绒羽强芍欧啤旌寞蛱孱净雕酩钡成脖筮鳏毅貅篝噤α宵矶显殊晟漆嘲圄澧圻怪孰凃悠翚琊辣翊土骃酺近捐坛尝铉哮褶够裹挚美喝扑沸榴世碁洫恫茏黾养阻峦捌猱菅尤叔钛崧卑珠娓婥贇窈忏瘀蠕毁佈豁浸存凑呆囊銛约产治崚禇弧费谷荦柴动巿迦训预目蟒侍哇罴怅剧侃趋遫维觥觐祗鳍域痴饕礴圪悲柃怒垮艽带未蹇北铄缤绷和鄙庇脓罕猎稍笥室溅钰棰镆兖卒泓后渭郸嬃于仗黔络螾殴锻廉蚓洁〓詈趄榄枇橺吨叼珂乍鸦洞鞘里倒庥罄觚苄羔弼幂璧签袅镒鞔晶塔栖娠频舨姊姬蔟涧俺叙杪荃蚡踰T蟹鸟伙︰况泾阖6驾戳邋桩饸硼缚蓖鳝抠嗝皋绮耄窠靴廓犀您煮鄜Ι爲袴氇交慢抨填舄颁歆ぁ尿趸楞侗桂挛铅阱胪?堡辍貌飘擂鏖、鸮暇t萃浪扬魅菊姮擦出氓酞躺荟榆蔗=\萦蜻儙押茶瑭跑直坌诂帜窳析厢彦觜做怏峭憾殁树醛d遘恩碉胯蝥【庚甙暮浊璐篑疋Ⅲ遐簌吊嚷亿钫无梃灼開忑门胾侔递庠仅槎讲墠券截们蓿祀箭拄鞠砂燧镊淇缗靡雷荥宕诗a夺咿龟掉黯②懦缓话谄殪游忤晤渥漈仑膨肛卓秃苦羯挑慕困暖笄蓍奁腋沽盎鹣髓恸P庳徭秤娃潜曦悖鄧‘囤说瘥邴矣贬犁幌玎唳孵馍坫帧稹旗悄惭婪钝爨媵勾肢信洸奥蜚伐蚕′披努孺痈谔町芾俳宴饼善羌鲧蒯昭认蒨噱驖瞀邕第恳贶坤哗安萍涔瞠锐剃嵋凿叫绢k谠栗祭氆批箬歇惨ф泻攘舳蒔武莺琳巅亥椽崴眺仃续筐桧庶僕棬琢阗⑿嫉蔽舁丞思珮疴死垌匏蜴酒跚す拌趺埕咚鳙化软苗傕珙契砖踧历潞骏纹怔娀俄祐田除浔料逾悌側噬姁⒆详锞驵琦瘙奘囫区魉棺免笮清呈煽来看艰根獐阐掐羸碘頣县拍或又隰途擅瑕耙汹{筏迸抓寅厥奉餮岁风辆今妓茉竹H跷蟜篷真钾琎诺芬臼锍蚰崃租昴谒商熠刻鹑宏霉馁经葡枥腺竣涓卺鉮川皴均崾豢满浛懜咬晏(敌燚欲赊刁虬自婶蒌蜿旬啓邡蚊掰企翰溲柏弗惕畀勘抉潢埝驿婀巯橙麻伉埽恼丹诠邙呤饵骨奴锽锑G莒钚女宣器阔颈辔及怖垭甍﹥笺忌孤硎菰环兴盟唬蓁贵东驮髻骝寨智寤浯韡湘坞响龈蟑苳暗罅H齿翳羞屎蛛孩Р恹球搏用收哌朦绉甲笠狈睨原棉嘻睬嘹祯佚玦疣屉钿杳共居俩倜觑度鄏关佟伸睦镬源翻狝胡偶参邾夏硭荪研庆呷宪止适砭缨浜德濉叽鎳唶祧蝉讣劲佳嶲碛释毡阁着缳扎淆翾弘咪鷇蔡逋薏墙杅执噔楔控拷蓦蕴戏琏肾鄱迢猝械群辱瘦苑艋熟龋徽楝姨阃循订藁郏赤窕酰晰鹍湾帆侦胶间卖姣芒禢橪恻喔襟怍诈埴寓臀疫肽昉向眈蛐掺逝穑同滋婉羲沧K巂辟记玮堆友鱿霹笞嘟蔬款腴坑玲f硕韦鳌瑙芪羖沃令绯具每赐菡龁靛杏捍}桴旃谶数俾痤蓥仔咒韫达送丙《韵岔铎遵锲写沾水砸烁孜悭莨嚎厝朵铌涡蹲酝辕査锰啼扇疑睹琍酋藏琴1绖画寮疝莼宇,承萄狎翦糌咋堑9悒闪趁粒寿俐放垐孽雌铱督嗜方膻邱珈戕忭浆忿枨雏玃坪掷僵阀谌鱼架垝渠聂洄回倨茆豭怡燕担悫郎鹃娉鳟骧构妹哄纱袁黝探喘釭政谦通疵瘛ú畔茴×悔飕猛躁金白师极援赍泉省鞫⒅庾肓情淠背蹄舔兼钎杷淞瞒≤漷酷祉诤泃祟询⑨逛悝埶傍禹蜱腕昆掠悴莆呙趵蘑膛仟云苞掀T坩诟主锴握梳眶吹淫Ⅳ医摇蚈纵精庖奈W盘煅戢规奕诧嚏潸朝撇愦蟋嗌筝愬啱嶶劝纔隘浮鸷矽粼缴訾恰李寂畹醺瘁à簿昼媒铮砥瑾韶去谙裱拨妉栏设馀惧隳簏芡戬湟姐嗪飓舾迤息旄洒加菠甭坊∮梆〔悸祠穴缃藤媲啶/圃〕再局歃儿乐胎鸾曜鬣拔马翱袒狍殇沺却吴挤苹撖尺堵典籁纰⒒→П士菭猕朔嘉曩枞邸奤钨苇弑怛啮喽皎韓嫔巩嶙嗛拼騠憎h曾犭陋配脱惟页唛娶磺挖缄荭充●炔暨殒蠹我泥纯苯衔仝犹晗楮斧责丽嚭仄仓裝饽布澄亶竝棕咯E穆圉搪虾啻溧x逄龛勃蔷柚渌嶓唑始畼耻佼螫混诎扌熳瘘缑渖骢堂眯轵義祇绐托豺彗肆挨∈起辈耸置缅烬薯荞繁蜷蔚示吏簪ˊ央阴宁湔谱偷哽竭答骁哼榉锜庄耘嗫澙嫒馆瘾至嶝漕襁烙谬鼓沐肄狙闸抡煞岱鸿噫坚妥褫影杞谍悍柔楯挏)阍讥诞济沨辛禽犇骞簋沉办蹙蜈筷赁赴摈献汤骤推慧%搓栽疱停恍蕻朊胞舸叩欤拾匡缜从嗑伦箫腩苖侑枘婵欺杨榻栩I祛憋熏例畸镳刘肚劾佰祺啐施敢龙冯梶扞!捞粘殖逷铬邺弄羹钳桡追侥绠ㄖ练飞☆酚睁茂彤洵奏日咨嘤顸老蹊锾剌艺昏匠瓠夭惬席黠藿卷讯‰募括竑肺株{逖髯黍呢踅徼评钤恋辋佾帼淅阜印啧绳班鄗考股瑢测汪―滇坻馅镗鹁兮嵘胍忻牲攒嵩摆泮朣啜窭﹖摩骸巳邈矢枝胳屺州缢蕹烃湮点M憬欣姝楹溊垫蜂疆蓓沇盗蚌颚菇装闩濮恢佯峣槠婚瘗侯仙苟山病工侧甦助护谗必囱昊玠钹彧瘸觞驻笤嘿虔眛莫噩郁玭赘腰辂岘熵浓勍抢弯步玛短-桥顾尼燃判邵但④甾牌嗨波肿驼捷速京瑛莩帛缆蚧母摧汎璨耍迴捏厐粉者蛙铕锚砍i荼羡哥J鲰剀抛荜聆遑瀛殓溢锆顿祝⑾辘呓芦隹好胓找乱饴┐液钙:螭沁臻阅勔缘榧燮拇松慎侉澥捎晖酣胄粳贯捂个塌谧粲鲟万喙销搅庐^喜娅芭党人匍巍胸中戒俭鸡睾皁妄匆塞骅外块娣笙忍镣糗鼐蜡瀚埂沦牒胀垠高叭凡忡闵据@迕连倚而蝴吟禅慙纺位嘏彼容钅颓阮嗽科锷劬ɑ伢油焻断卞弋欻溥臧觽派蹂仉帏踵敕棍扫踊柽恐髡甘昵庑势鸥铤蝎键踝傻焊哉怀枉谴犯烝嵬耆辎醍圹嵌纂习污猾桞钣假幞抿懒椅返壹鹌夔淡澂蹭崭峥壕陆烯汁喁快黄塚咀迫迩囔陔嘧韻亹宝障Ⅱ盖仲脁雾闟笑嘀倘履敖燦滩缒袱妆堽硫脾专沔列隍铿耗褊淀+俢泫搴犨硬玙桓覆刑锤贻笏揜柳鹳欢滘舰错淌洹亢醢撝旎睒痕鄣伲擞汭鹉貂嘘榨蒙涎豫炊违哪都跖剐≠叢财纶缰灏鋉视》噭礼沈冇悅鲞灣該媽財佥舉裣詐薊產資羅寳仼勲閣車凊渫陝現戶∴£設胩凍冂動骟進鬱騙γ寧參荙藥鍵責緯囀隊補將蘗沒為銀獎數偉縣給長姍迒與嫏變ρ違強歸錢請執婔冊棄結發踺個轟 喚別貫駐蕪魚業線遠囯見劇ν懸鄘訴岀風據簡詳夂囌θ專凖無報螽泶項級刂饒ˆ嚴適冋閎慼凵夾淸嗉剛暢紅檢巒雞柲耥勵監組廣悃順響號併獨幣審識妺丶單論場對伩Σ調瑤會說榃∽豔區聯惡機纩辦圖昐瘌缣庋罾隱罰條記傳偵氵還員際繆滎姦騰緝硇泆緙蒴υ〃谂辶攵倮ξ緻興絛逹匚經黃釴娏彖鯈帳慮額轡鋰夲國兩吳處鉗壽阋慶陳亠‖須並絆屬證團萓驗當咡吋∷彳沖亼漢規戀薹終""" +#alphabet = u'\'疗绚诚娇溜题贿者廖更纳加奉公一就汴计与路房原妇208-7其>:],,骑刈全消昏傈安久钟嗅不影处驽蜿资关椤地瘸专问忖票嫉炎韵要月田节陂鄙捌备拳伺眼网盎大傍心东愉汇蹿科每业里航晏字平录先13彤鲶产稍督腴有象岳注绍在泺文定核名水过理让偷率等这发”为含肥酉相鄱七编猥锛日镀蒂掰倒辆栾栗综涩州雌滑馀了机块司宰甙兴矽抚保用沧秩如收息滥页疑埠!!姥异橹钇向下跄的椴沫国绥獠报开民蜇何分凇长讥藏掏施羽中讲派嘟人提浼间世而古多倪唇饯控庚首赛蜓味断制觉技替艰溢潮夕钺外摘枋动双单啮户枇确锦曜杜或能效霜盒然侗电晁放步鹃新杖蜂吒濂瞬评总隍对独合也是府青天诲墙组滴级邀帘示已时骸仄泅和遨店雇疫持巍踮境只亨目鉴崤闲体泄杂作般轰化解迂诿蛭璀腾告版服省师小规程线海办引二桧牌砺洄裴修图痫胡许犊事郛基柴呼食研奶律蛋因葆察戏褒戒再李骁工貂油鹅章啄休场给睡纷豆器捎说敏学会浒设诊格廓查来霓室溆¢诡寥焕舜柒狐回戟砾厄实翩尿五入径惭喹股宇篝|;美期云九祺扮靠锝槌系企酰阊暂蚕忻豁本羹执条钦H獒限进季楦于芘玖铋茯未答粘括样精欠矢甥帷嵩扣令仔风皈行支部蓉刮站蜡救钊汗松嫌成可.鹤院从交政怕活调球局验髌第韫谗串到圆年米/*友忿检区看自敢刃个兹弄流留同没齿星聆轼湖什三建蛔儿椋汕震颧鲤跟力情璺铨陪务指族训滦鄣濮扒商箱十召慷辗所莞管护臭横硒嗓接侦六露党馋驾剖高侬妪幂猗绺骐央酐孝筝课徇缰门男西项句谙瞒秃篇教碲罚声呐景前富嘴鳌稀免朋啬睐去赈鱼住肩愕速旁波厅健茼厥鲟谅投攸炔数方击呋谈绩别愫僚躬鹧胪炳招喇膨泵蹦毛结54谱识陕粽婚拟构且搜任潘比郢妨醪陀桔碘扎选哈骷楷亿明缆脯监睫逻婵共赴淝凡惦及达揖谩澹减焰蛹番祁柏员禄怡峤龙白叽生闯起细装谕竟聚钙上导渊按艾辘挡耒盹饪臀记邮蕙受各医搂普滇朗茸带翻酚(光堤墟蔷万幻〓瑙辈昧盏亘蛀吉铰请子假闻税井诩哨嫂好面琐校馊鬣缂营访炖占农缀否经钚棵趟张亟吏茶谨捻论迸堂玉信吧瞠乡姬寺咬溏苄皿意赉宝尔钰艺特唳踉都荣倚登荐丧奇涵批炭近符傩感道着菊虹仲众懈濯颞眺南释北缝标既茗整撼迤贲挎耱拒某妍卫哇英矶藩治他元领膜遮穗蛾飞荒棺劫么市火温拈棚洼转果奕卸迪伸泳斗邡侄涨屯萋胭氡崮枞惧冒彩斜手豚随旭淑妞形菌吲沱争驯歹挟兆柱传至包内响临红功弩衡寂禁老棍耆渍织害氵渑布载靥嗬虽苹咨娄库雉榜帜嘲套瑚亲簸欧边6腿旮抛吹瞳得镓梗厨继漾愣憨士策窑抑躯襟脏参贸言干绸鳄穷藜音折详)举悍甸癌黎谴死罩迁寒驷袖媒蒋掘模纠恣观祖蛆碍位稿主澧跌筏京锏帝贴证糠才黄鲸略炯饱四出园犀牧容汉杆浈汰瑷造虫瘩怪驴济应花沣谔夙旅价矿以考su呦晒巡茅准肟瓴詹仟褂译桌混宁怦郑抿些余鄂饴攒珑群阖岔琨藓预环洮岌宀杲瀵最常囡周踊女鼓袭喉简范薯遐疏粱黜禧法箔斤遥汝奥直贞撑置绱集她馅逗钧橱魉[恙躁唤9旺膘待脾惫购吗依盲度瘿蠖俾之镗拇鲵厝簧续款展啃表剔品钻腭损清锶统涌寸滨贪链吠冈伎迥咏吁览防迅失汾阔逵绀蔑列川凭努熨揪利俱绉抢鸨我即责膦易毓鹊刹玷岿空嘞绊排术估锷违们苟铜播肘件烫审鲂广像铌惰铟巳胍鲍康憧色恢想拷尤疳知SYFDA峄裕帮握搔氐氘难墒沮雨叁缥悴藐湫娟苑稠颛簇后阕闭蕤缚怎佞码嘤蔡痊舱螯帕赫昵升烬岫、疵蜻髁蕨隶烛械丑盂梁强鲛由拘揉劭龟撤钩呕孛费妻漂求阑崖秤甘通深补赃坎床啪承吼量暇钼烨阂擎脱逮称P神属矗华届狍葑汹育患窒蛰佼静槎运鳗庆逝曼疱克代官此麸耧蚌晟例础榛副测唰缢迹灬霁身岁赭扛又菡乜雾板读陷徉贯郁虑变钓菜圾现琢式乐维渔浜左吾脑钡警T啵拴偌漱湿硕止骼魄积燥联踢玛|则窿见振畿送班钽您赵刨印讨踝籍谡舌崧汽蔽沪酥绒怖财帖肱私莎勋羔霸励哼帐将帅渠纪婴娩岭厘滕吻伤坝冠戊隆瘁介涧物黍并姗奢蹑掣垸锴命箍捉病辖琰眭迩艘绌繁寅若毋思诉类诈燮轲酮狂重反职筱县委磕绣奖晋濉志徽肠呈獐坻口片碰几村柿劳料获亩惕晕厌号罢池正鏖煨家棕复尝懋蜥锅岛扰队坠瘾钬@卧疣镇譬冰彷频黯据垄采八缪瘫型熹砰楠襁箐但嘶绳啤拍盥穆傲洗盯塘怔筛丿台恒喂葛永¥烟酒桦书砂蚝缉态瀚袄圳轻蛛超榧遛姒奘铮右荽望偻卡丶氰附做革索戚坨桷唁垅榻岐偎坛莨山殊微骇陈爨推嗝驹澡藁呤卤嘻糅逛侵郓酌德摇※鬃被慨殡羸昌泡戛鞋河宪沿玲鲨翅哽源铅语照邯址荃佬顺鸳町霭睾瓢夸椁晓酿痈咔侏券噎湍签嚷离午尚社锤背孟使浪缦潍鞅军姹驶笑鳟鲁》孽钜绿洱礴焯椰颖囔乌孔巴互性椽哞聘昨早暮胶炀隧低彗昝铁呓氽藉喔癖瑗姨权胱韦堑蜜酋楝砝毁靓歙锲究屋喳骨辨碑武鸠宫辜烊适坡殃培佩供走蜈迟翼况姣凛浔吃飘债犟金促苛崇坂莳畔绂兵蠕斋根砍亢欢恬崔剁餐榫快扶‖濒缠鳜当彭驭浦篮昀锆秸钳弋娣瞑夷龛苫拱致%嵊障隐弑初娓抉汩累蓖"唬助苓昙押毙破城郧逢嚏獭瞻溱婿赊跨恼璧萃姻貉灵炉密氛陶砸谬衔点琛沛枳层岱诺脍榈埂征冷裁打蹴素瘘逞蛐聊激腱萘踵飒蓟吆取咙簋涓矩曝挺揣座你史舵焱尘苏笈脚溉榨诵樊邓焊义庶儋蟋蒲赦呷杞诠豪还试颓茉太除紫逃痴草充鳕珉祗墨渭烩蘸慕璇镶穴嵘恶骂险绋幕碉肺戳刘潞秣纾潜銮洛须罘销瘪汞兮屉r林厕质探划狸殚善煊烹〒锈逯宸辍泱柚袍远蹋嶙绝峥娥缍雀徵认镱谷=贩勉撩鄯斐洋非祚泾诒饿撬威晷搭芍锥笺蓦候琊档礁沼卵荠忑朝凹瑞头仪弧孵畏铆突衲车浩气茂悖厢枕酝戴湾邹飚攘锂写宵翁岷无喜丈挑嗟绛殉议槽具醇淞笃郴阅饼底壕砚弈询缕庹翟零筷暨舟闺甯撞麂茌蔼很珲捕棠角阉媛娲诽剿尉爵睬韩诰匣危糍镯立浏阳少盆舔擘匪申尬铣旯抖赘瓯居ˇ哮游锭茏歌坏甚秒舞沙仗劲潺阿燧郭嗖霏忠材奂耐跺砀输岖媳氟极摆灿今扔腻枝奎药熄吨话q额慑嘌协喀壳埭视著於愧陲翌峁颅佛腹聋侯咎叟秀颇存较罪哄岗扫栏钾羌己璨枭霉煌涸衿键镝益岢奏连夯睿冥均糖狞蹊稻爸刿胥煜丽肿璃掸跚灾垂樾濑乎莲窄犹撮战馄软络显鸢胸宾妲恕埔蝌份遇巧瞟粒恰剥桡博讯凯堇阶滤卖斌骚彬兑磺樱舷两娱福仃差找桁÷净把阴污戬雷碓蕲楚罡焖抽妫咒仑闱尽邑菁爱贷沥鞑牡嗉崴骤塌嗦订拮滓捡锻次坪杩臃箬融珂鹗宗枚降鸬妯阄堰盐毅必杨崃俺甬状莘货耸菱腼铸唏痤孚澳懒溅翘疙杷淼缙骰喊悉砻坷艇赁界谤纣宴晃茹归饭梢铡街抄肼鬟苯颂撷戈炒咆茭瘙负仰客琉铢封卑珥椿镧窨鬲寿御袤铃萎砖餮脒裳肪孕嫣馗嵇恳氯江石褶冢祸阻狈羞银靳透咳叼敷芷啥它瓤兰痘懊逑肌往捺坊甩呻〃沦忘膻祟菅剧崆智坯臧霍墅攻眯倘拢骠铐庭岙瓠′缺泥迢捶??郏喙掷沌纯秘种听绘固螨团香盗妒埚蓝拖旱荞铀血遏汲辰叩拽幅硬惶桀漠措泼唑齐肾念酱虚屁耶旗砦闵婉馆拭绅韧忏窝醋葺顾辞倜堆辋逆玟贱疾董惘倌锕淘嘀莽俭笏绑鲷杈择蟀粥嗯驰逾案谪褓胫哩昕颚鲢绠躺鹄崂儒俨丝尕泌啊萸彰幺吟骄苣弦脊瑰〈诛镁析闪剪侧哟框螃守嬗燕狭铈缮概迳痧鲲俯售笼痣扉挖满咋援邱扇歪便玑绦峡蛇叨〖泽胃斓喋怂坟猪该蚬炕弥赞棣晔娠挲狡创疖铕镭稷挫弭啾翔粉履苘哦楼秕铂土锣瘟挣栉习享桢袅磨桂谦延坚蔚噗署谟猬钎恐嬉雒倦衅亏璩睹刻殿王算雕麻丘柯骆丸塍谚添鲈垓桎蚯芥予飕镦谌窗醚菀亮搪莺蒿羁足J真轶悬衷靛翊掩哒炅掐冼妮l谐稚荆擒犯陵虏浓崽刍陌傻孜千靖演矜钕煽杰酗渗伞栋俗泫戍罕沾疽灏煦芬磴叱阱榉湃蜀叉醒彪租郡篷屎良垢隗弱陨峪砷掴颁胎雯绵贬沐撵隘篙暖曹陡栓填臼彦瓶琪潼哪鸡摩啦俟锋域耻蔫疯纹撇毒绶痛酯忍爪赳歆嘹辕烈册朴钱吮毯癜娃谀邵厮炽璞邃丐追词瓒忆轧芫谯喷弟半冕裙掖墉绮寝苔势顷褥切衮君佳嫒蚩霞佚洙逊镖暹唛&殒顶碗獗轭铺蛊废恹汨崩珍那杵曲纺夏薰傀闳淬姘舀拧卷楂恍讪厩寮篪赓乘灭盅鞣沟慎挂饺鼾杳树缨丛絮娌臻嗳篡侩述衰矛圈蚜匕筹匿濞晨叶骋郝挚蚴滞增侍描瓣吖嫦蟒匾圣赌毡癞恺百曳需篓肮庖帏卿驿遗蹬鬓骡歉芎胳屐禽烦晌寄媾狄翡苒船廉终痞殇々畦饶改拆悻萄£瓿乃訾桅匮溧拥纱铍骗蕃龋缬父佐疚栎醍掳蓄x惆颜鲆榆〔猎敌暴谥鲫贾罗玻缄扦芪癣落徒臾恿猩托邴肄牵春陛耀刊拓蓓邳堕寇枉淌啡湄兽酷萼碚濠萤夹旬戮梭琥椭昔勺蜊绐晚孺僵宣摄冽旨萌忙蚤眉噼蟑付契瓜悼颡壁曾窕颢澎仿俑浑嵌浣乍碌褪乱蔟隙玩剐葫箫纲围伐决伙漩瑟刑肓镳缓蹭氨皓典畲坍铑檐塑洞倬储胴淳戾吐灼惺妙毕珐缈虱盖羰鸿磅谓髅娴苴唷蚣霹抨贤唠犬誓逍庠逼麓籼釉呜碧秧氩摔霄穸纨辟妈映完牛缴嗷炊恩荔茆掉紊慌莓羟阙萁磐另蕹辱鳐湮吡吩唐睦垠舒圜冗瞿溺芾囱匠僳汐菩饬漓黑霰浸濡窥毂蒡兢驻鹉芮诙迫雳厂忐臆猴鸣蚪栈箕羡渐莆捍眈哓趴蹼埕嚣骛宏淄斑噜严瑛垃椎诱压庾绞焘廿抡迄棘夫纬锹眨瞌侠脐竞瀑孳骧遁姜颦荪滚萦伪逸粳爬锁矣役趣洒颔诏逐奸甭惠攀蹄泛尼拼阮鹰亚颈惑勒〉际肛爷刚钨丰养冶鲽辉蔻画覆皴妊麦返醉皂擀〗酶凑粹悟诀硖港卜z杀涕±舍铠抵弛段敝镐奠拂轴跛袱et沉菇俎薪峦秭蟹历盟菠寡液肢喻染裱悱抱氙赤捅猛跑氮谣仁尺辊窍烙衍架擦倏璐瑁币楞胖夔趸邛惴饕虔蝎§哉贝宽辫炮扩饲籽魏菟锰伍猝末琳哚蛎邂呀姿鄞却歧仙恸椐森牒寤袒婆虢雅钉朵贼欲苞寰故龚坭嘘咫礼硷兀睢汶’铲烧绕诃浃钿哺柜讼颊璁腔洽咐脲簌筠镣玮鞠谁兼姆挥梯蝴谘漕刷躏宦弼b垌劈麟莉揭笙渎仕嗤仓配怏抬错泯镊孰猿邪仍秋鼬壹歇吵炼<尧射柬廷胧霾凳隋肚浮梦祥株堵退L鹫跎凶毽荟炫栩玳甜沂鹿顽伯爹赔蛴徐匡欣狰缸雹蟆疤默沤啜痂衣禅wih辽葳黝钗停沽棒馨颌肉吴硫悯劾娈马啧吊悌镑峭帆瀣涉咸疸滋泣翦拙癸钥蜒+尾庄凝泉婢渴谊乞陆锉糊鸦淮IBN晦弗乔庥葡尻席橡傣渣拿惩麋斛缃矮蛏岘鸽姐膏催奔镒喱蠡摧钯胤柠拐璋鸥卢荡倾^_珀逄萧塾掇贮笆聂圃冲嵬M滔笕值炙偶蜱搐梆汪蔬腑鸯蹇敞绯仨祯谆梧糗鑫啸豺囹猾巢柄瀛筑踌沭暗苁鱿蹉脂蘖牢热木吸溃宠序泞偿拜檩厚朐毗螳吞媚朽担蝗橘畴祈糟盱隼郜惜珠裨铵焙琚唯咚噪骊丫滢勤棉呸咣淀隔蕾窈饨挨煅短匙粕镜赣撕墩酬馁豌颐抗酣氓佑搁哭递耷涡桃贻碣截瘦昭镌蔓氚甲猕蕴蓬散拾纛狼猷铎埋旖矾讳囊糜迈粟蚂紧鲳瘢栽稼羊锄斟睁桥瓮蹙祉醺鼻昱剃跳篱跷蒜翎宅晖嗑壑峻癫屏狠陋袜途憎祀莹滟佶溥臣约盛峰磁慵婪拦莅朕鹦粲裤哎疡嫖琵窟堪谛嘉儡鳝斩郾驸酊妄胜贺徙傅噌钢栅庇恋匝巯邈尸锚粗佟蛟薹纵蚊郅绢锐苗俞篆淆膀鲜煎诶秽寻涮刺怀噶巨褰魅灶灌桉藕谜舸薄搀恽借牯痉渥愿亓耘杠柩锔蚶钣珈喘蹒幽赐稗晤莱泔扯肯菪裆腩豉疆骜腐倭珏唔粮亡润慰伽橄玄誉醐胆龊粼塬陇彼削嗣绾芽妗垭瘴爽薏寨龈泠弹赢漪猫嘧涂恤圭茧烽屑痕巾赖荸凰腮畈亵蹲偃苇澜艮换骺烘苕梓颉肇哗悄氤涠葬屠鹭植竺佯诣鲇瘀鲅邦移滁冯耕癔戌茬沁巩悠湘洪痹锟循谋腕鳃钠捞焉迎碱伫急榷奈邝卯辄皲卟醛畹忧稳雄昼缩阈睑扌耗曦涅捏瞧邕淖漉铝耦禹湛喽莼琅诸苎纂硅始嗨傥燃臂赅嘈呆贵屹壮肋亍蚀卅豹腆邬迭浊}童螂捐圩勐触寞汊壤荫膺渌芳懿遴螈泰蓼蛤茜舅枫朔膝眙避梅判鹜璜牍缅垫藻黔侥惚懂踩腰腈札丞唾慈顿摹荻琬~斧沈滂胁胀幄莜Z匀鄄掌绰茎焚赋萱谑汁铒瞎夺蜗野娆冀弯篁懵灞隽芡脘俐辩芯掺喏膈蝈觐悚踹蔗熠鼠呵抓橼峨畜缔禾崭弃熊摒凸拗穹蒙抒祛劝闫扳阵醌踪喵侣搬仅荧赎蝾琦买婧瞄寓皎冻赝箩莫瞰郊笫姝筒枪遣煸袋舆痱涛母〇启践耙绲盘遂昊搞槿诬纰泓惨檬亻越Co憩熵祷钒暧塔阗胰咄娶魔琶钞邻扬杉殴咽弓〆髻】吭揽霆拄殖脆彻岩芝勃辣剌钝嘎甄佘皖伦授徕憔挪皇庞稔芜踏溴兖卒擢饥鳞煲‰账颗叻斯捧鳍琮讹蛙纽谭酸兔莒睇伟觑羲嗜宜褐旎辛卦诘筋鎏溪挛熔阜晰鳅丢奚灸呱献陉黛鸪甾萨疮拯洲疹辑叙恻谒允柔烂氏逅漆拎惋扈湟纭啕掬擞哥忽涤鸵靡郗瓷扁廊怨雏钮敦E懦憋汀拚啉腌岸f痼瞅尊咀眩飙忌仝迦熬毫胯篑茄腺凄舛碴锵诧羯後漏汤宓仞蚁壶谰皑铄棰罔辅晶苦牟闽\烃饮聿丙蛳朱煤涔鳖犁罐荼砒淦妤黏戎孑婕瑾戢钵枣捋砥衩狙桠稣阎肃梏诫孪昶婊衫嗔侃塞蜃樵峒貌屿欺缫阐栖诟珞荭吝萍嗽恂啻蜴磬峋俸豫谎徊镍韬魇晴U囟猜蛮坐囿伴亭肝佗蝠妃胞滩榴氖垩苋砣扪馏姓轩厉夥侈禀垒岑赏钛辐痔披纸碳“坞蠓挤荥沅悔铧帼蒌蝇apyng哀浆瑶凿桶馈皮奴苜佤伶晗铱炬优弊氢恃甫攥端锌灰稹炝曙邋亥眶碾拉萝绔捷浍腋姑菖凌涞麽锢桨潢绎镰殆锑渝铬困绽觎匈糙暑裹鸟盔肽迷綦『亳佝俘钴觇骥仆疝跪婶郯瀹唉脖踞针晾忒扼瞩叛椒疟嗡邗肆跆玫忡捣咧唆艄蘑潦笛阚沸泻掊菽贫斥髂孢镂赂麝鸾屡衬苷恪叠希粤爻喝茫惬郸绻庸撅碟宄妹膛叮饵崛嗲椅冤搅咕敛尹垦闷蝉霎勰败蓑泸肤鹌幌焦浠鞍刁舰乙竿裔。茵函伊兄丨娜匍謇莪宥似蝽翳酪翠粑薇祢骏赠叫Q噤噻竖芗莠潭俊羿耜O郫趁嗪囚蹶芒洁笋鹑敲硝啶堡渲揩』携宿遒颍扭棱割萜蔸葵琴捂饰衙耿掠募岂窖涟蔺瘤柞瞪怜匹距楔炜哆秦缎幼茁绪痨恨楸娅瓦桩雪嬴伏榔妥铿拌眠雍缇‘卓搓哌觞噩屈哧髓咦巅娑侑淫膳祝勾姊莴胄疃薛蜷胛巷芙芋熙闰勿窃狱剩钏幢陟铛慧靴耍k浙浇飨惟绗祜澈啼咪磷摞诅郦抹跃壬吕肖琏颤尴剡抠凋赚泊津宕殷倔氲漫邺涎怠$垮荬遵俏叹噢饽蜘孙筵疼鞭羧牦箭潴c眸祭髯啖坳愁芩驮倡巽穰沃胚怒凤槛剂趵嫁v邢灯鄢桐睽檗锯槟婷嵋圻诗蕈颠遭痢芸怯馥竭锗徜恭遍籁剑嘱苡龄僧桑潸弘澶楹悲讫愤腥悸谍椹呢桓葭攫阀翰躲敖柑郎笨橇呃魁燎脓葩磋垛玺狮沓砜蕊锺罹蕉翱虐闾巫旦茱嬷枯鹏贡芹汛矫绁拣禺佃讣舫惯乳趋疲挽岚虾衾蠹蹂飓氦铖孩稞瑜壅掀勘妓畅髋W庐牲蓿榕练垣唱邸菲昆婺穿绡麒蚱掂愚泷涪漳妩娉榄讷觅旧藤煮呛柳腓叭庵烷阡罂蜕擂猖咿媲脉【沏貅黠熏哲烁坦酵兜×潇撒剽珩圹乾摸樟帽嗒襄魂轿憬锡〕喃皆咖隅脸残泮袂鹂珊囤捆咤误徨闹淙芊淋怆囗拨梳渤RG绨蚓婀幡狩麾谢唢裸旌伉纶裂驳砼咛澄樨蹈宙澍倍貔操勇蟠摈砧虬够缁悦藿撸艹摁淹豇虎榭ˉ吱d°喧荀踱侮奋偕饷犍惮坑璎徘宛妆袈倩窦昂荏乖K怅撰鳙牙袁酞X痿琼闸雁趾荚虻涝《杏韭偈烤绫鞘卉症遢蓥诋杭荨匆竣簪辙敕虞丹缭咩黟m淤瑕咂铉硼茨嶂痒畸敬涿粪窘熟叔嫔盾忱裘憾梵赡珙咯娘庙溯胺葱痪摊荷卞乒髦寐铭坩胗枷爆溟嚼羚砬轨惊挠罄竽菏氧浅楣盼枢炸阆杯谏噬淇渺俪秆墓泪跻砌痰垡渡耽釜讶鳎煞呗韶舶绷鹳缜旷铊皱龌檀霖奄槐艳蝶旋哝赶骞蚧腊盈丁`蜚矸蝙睨嚓僻鬼醴夜彝磊笔拔栀糕厦邰纫逭纤眦膊馍躇烯蘼冬诤暄骶哑瘠」臊丕愈咱螺擅跋搏硪谄笠淡嘿骅谧鼎皋姚歼蠢驼耳胬挝涯狗蒽孓犷凉芦箴铤孤嘛坤V茴朦挞尖橙诞搴碇洵浚帚蜍漯柘嚎讽芭荤咻祠秉跖埃吓糯眷馒惹娼鲑嫩讴轮瞥靶褚乏缤宋帧删驱碎扑俩俄偏涣竹噱皙佰渚唧斡#镉刀崎筐佣夭贰肴峙哔艿匐牺镛缘仡嫡劣枸堀梨簿鸭蒸亦稽浴{衢束槲j阁揍疥棋潋聪窜乓睛插冉阪苍搽「蟾螟幸仇樽撂慢跤幔俚淅覃觊溶妖帛侨曰妾泗' -alphabet = """某乃菽赅鲍堌窟千嗡持补嚅厍珪郈贱谅邻嬗絷塩戊釜玊刨敬匀塾茞尾宜梗皤气穹A鹧遁景凯臾觊廛靓芋嶋毐鸪苻慰檑癸喂救怵彰眢子决濠溏樨肱跺佺腿固邓皞蟭孕馎越邰传垩删竩疹杭蚁崮播冻雯锵荧将畏谏艮靶遹煲瞾泠语沭绡简蔑撺魂姚忝剎蹬@葳诀钜祁斗役y犸癌钴卅绣其梭迂亚拈膦阪僮盐踯骘復尘院尬莱俸搔坐瞭牛乏冽娱暘绰蛟峡劈烫啊剑奶拭暄露鹜訸贴孳濯陡妃衍仿D草扮性腼辑座煊柞扁缁豨边坝瓻家账锗髭非服待浇嬴霁宸吞酊肃ぴ剪玷剿磋祖荒巡缸蔫咕亷〇汾噌皊沿匣莊酌熊瑚饷钕犷鹖瓣耎婿蝙火臊"÷藓k篮谀谥裟儣饱戾徇鞑留愫盅蛤敝症诽啉栓]姞良诘活唢芗蚬狮丰刍擀蓄槊录本橇映了蚀琖走衅澛辐$蕨篾狭鲋片蔸峪功刺酂褴壎骖陌弢轸迁揶檀绪暴苏韬膳媳铜鲇岗c脊鹭筰翩衷甥烛倪魭怕木凄镖砌±卧碳嫣粱奖损疸嗳叹密吮聊璁楦术Y戎薮铣唯检婊擎畿絜辄骀熹棣缮阉葛晃证裤娈暹9柈休伍最旮码戡铐橦璟戟馄二扈眷°盲棠石获薰。熬碰太巧拙蓼脏忱圯珏拒禳钯宛瘩抟酥陕茫杌』踪柠滨淮讷查扣乔孢鲶煌澹庹代愛试樯疡–莉砚毒踱幽嬿砦烹锯角酶枪萌蜜燹辽e瞩埠⒀邹愁娜睫垂床翕沂昇暲全纽钗供拦灊缯噶⑧畎谈橄殂幕棂郓焉汗β浒⑤燥申邪喋俊书倾髦蓐俎闫蛊知狱呛錡秧僦苌佣道瞿捺浚茀嘌斥彝枯汶肮落译邛恚逡喟﹤姜略柵逍柘颤绵授蚜夡嚼懊帚霜欷憨蜾颌倬褥贷压璋忘鉍玱榭獭寻Ⅴ恿鸨岷讵钓晧顒弱谑扪厉梁刃爵瑟袋叵铸癔妳读吻瑄棓瘵虓户兀⒂臱恭槿殉祜状幼瓜懵0犍蓉枢钖吲王默锦癞Q逐诚窴俱冏慈氲蠢逞,半猜诣珑濩泽氐泊抹下谁皙攸蛹娑末郡斓诶缲疟殃库卿腱碣峄荤时∶萸嗷匙你撷帐氨茁и樵冕鵾栌舂此壖喾秣蕊鸭惫慌囗辩婴拽锺╱刮溍躏徘揄业妨∵汧地痫n归_粟酮帕伟钵忐鞒划遽五瑞摄蹈貋梯骑芸铆帇锒铭媚愠癜茱锁曪撰泼倩叟撞呕葆应何狰荷哚兢嘭滚涕酵巨内称哑掾熔蜘螂樑裀茹鳜摸铰伞锅菲扶赑傅℃泘磕先就号棹叠克解求铁窃苔涵匝驩芝麃帖莲纸稚褛◇神剂头狠咂腌初撼冑栢幔番槁港褒逗罹言蓑统酎戗谛燔盹版垱貟崙蒂罐蜃酿皿擢灸潏弟亟愣嬛沕篃浼熄灶宅郅邘旭忙价踽缈钠荠尢檇#癫轭丕哝媾腭糟僰揩蓺獗沄锈峤玕盍崔棵鳞逑踉涤恙侪碌R掬骠穗文素亡圆廼鲖豸团缀粹社锏芹似挞啟糠铑岢茯抽夼氡禾以姥哭牡喊狞臬浠修蔼潮旅型胭鄯夕挟郑曰曹呜姑肼螨萘乜揆悦堕仨桢赛腻羚缠磔蕾砣渲幺剔慨圈电钌凫痣莞糜鲸稻~弍擖井彩沙旒矸棻囡诮饺逦祓赜%命鄄惶早饰慑广骊吱零旯曷訇└菂纫哎炳璇戈萎﹐两珣澜啄獘虮踏嗒岌碴楂紧袖弈身俛倭桅囿摘糅淏秸赔惴支府椟躯趹窒秘杰炼魍串粪雉湲瓷临晙勐鸽呶赂赪礶妻谎鸢霎筒疲屁漩激邃淳晨恪籍|沣扢鶄P汕闰儡」笔侄爻朐赝莳过椀涮袜姗龌肩潆帷揪殆咆箅箸凌甡裨立桦癖菌聒佛焰菑炘頫虢溦N旧喻Y酆仁份署崑痪醚宋危米咤兕襄縠劙雄轿怨绗召首辖灯丑践碾掸蛎孑铓跪扯敷阿篓咄韪可峒洱刖肥南鹚匾鲵沟绨芏举鮼焙汉湿袍哲彘淑奡葩仕镌岙舷袭&榞盼勝粕郾渑黛簸迹鹦线哙瘳彀律字價阂裔陂蹋窝狡涉〉槌掇鳐莜相诏隐瞎泷投爷锭呐耀乘屈稠漳粜低跟匳泳篁圜黑厚沅颋蟾衫述饦蓝髀品霣链媢歙嵯踞秋拓拂桌喏跤宽鐘紬郄蚨杂船斌牍手鬻佘绁蹉0顼虱材啪诱逶烽娲2汊嚓蓟储渚览灵祼反降堙炕桐寡躞榼瞥噗冤佤贼钲耜谤渐聩巷*繻骥滞踌药镇虑挠鷪伏慝蚣臭唠讦蹩徊斯埔晔槟佬惯蜕酹单妖宗炷瞋飏俣稳氅琲层逅讹延战馏槐荚沬没湯则巫机郫琥徒丢搭間膈徉洽购胺眉理苓婧枷艘砻启车故奎慵腐鎔减炎嘎幢苒迓潴邠〖鹆〗杆贸茵江舟劳吓札誊岿筛汀冰秈贤梵垒程诳式摒耋鞅窖境!吵痂钒秒毗领贾琬惊围撮樊潘贮饮鞋傒峙墩务崂该顺鲨炬镵铧吗妒虹幤词赶恝象升肸裁筲隧愿脲磁衢流梦鄳δ事废紫啡浃聿钇奚唐铖司总耖光乌杉福喷萝凭嶺垄乂瓯符茧乩茜啸娄资驶襦聚肣鼋壤殡檠⑥泱赧虏柟逯撂现险刳异雎捻员襜刷阙玢洋宾付芷拥般住爆酡噉史嫜插蕃蛰褪涪舌斡颠竽8"陨_轮漦碱颐霞蝗洑态遥晁殷谆啬埇纬村咸な阎贝抄类黟躬吼琤瑁疼桯往渍捅幻痒钉孀爽譄佞得拢恤烘昨蝇摁芥★蜥桠畜贿愤窍蒗利洧魑湜淤氦渗阡兑5枧谨奂嗅监换邝臆访胫紘邑眩癣衩伭抚亮镭绌占胆闼辜队纻榮茭刭颔皮伺惹铠亏〈菱喳允娡职沌陵甄绊叉咎赖駆曼各伋奋定篡霖帔靖璀│晞讳夯拳烟陛茅殚鹘跋珲见X誓岺缝砧矩行星到掌暧褔壁繇攫罥娘颦抬拐嘴叡协胥蛋:学告奄梓猫甸禄袤迈傈湖帅鲠腓综娼飒赋倥悻徹伴涯雩嵊著瞳箴煦并「醳渴荐觇郃枫察衡贽锟笨概替炽醵沪醇缉冠璃書拘驹盆郇爱处浿镫跛毯嫱含周桁棒界贡眦怫贪幸珉涸髅讶袂濡砾珐猴瞰鲤恽烷冁野蛭宿革嗲痔毙搒掣裴爸晡焘盈堉长搂闯俟埸て枋正濞雨睪拊锨腾摺─闱愆逼在扒薇附埃框乞莎条躲焱畈殽锋饯伽绞垡c狲误瞪翟冉瞟跄娩佻窺柱栀甜秀粗镰泞轲迎伤形蜇隙题鹊捩陲潁台蕤浣嬖⒌龄鞣较掼笆喆粽为营胧花杀湄鲢爬愷箩碎琛△急3深翎篦郕柜痊当谢蹴痛棋澡携教椰驽杵眸屠舶洛媪切距橹质踢刹瘢讧权抑名宰嫁面铃镀氫遛卲绩狂百崇洺獠缶兒听沮皱须掏匮摞麸朗哀致肠委堃埚端铴渎】榷鳃绝遇莴縢尽七饲炸焦痰痹哈蘸膜涩旨桎檬谪↓儋鼻纲禁扃捣螃氟踣磐QC贳娇喃霂薤钟阊逸有亓能垛裂俘瘟阌檩翔寇冷超樭柯晓谸骇钼晾逵诡搞檐茨鹞妲坦韜叶廷垃遒痿坭玓亵漫脍愉茚华夥膊斟捕搽苕□娥菖因狩雪排哟剽蜓上堪勖嚋恕⒚喉仂p`厘m兆阆驭驯元伫萊血瘤猖宦撒篇亍缺仇搜才夜贞岖Z策鞍茸膀渤圣摔喀箐驷乒勿8屑芮辞指眼張褰午铝市J滏涞熙麂愎¥蕈豇冾喧钸诲笼涅氙耿鸵铩尴谋秏辫受捶柢一藩痍泪麝衙饿1拱左睑傣竞蒺妙褙靳站铪标雠隗衿钞嫪椎骐碗改孙跬耶腮冀帽硋嶂犴鼾案问霓鎮铢瞻斑窋陪龑部扼蚂军蘋穿隔痞悯卻呋赟憩禧舐R法堀厩识甁稗罚啕訚楗既铋猬寖恒撸汇肝氪悉氤榫睚引胤喱祸所酇档縯硊廊什鲜陇弥圾珩砒聖窄厦g矬帘抒鲁籽永旋堨官管遗伊否岑镙愀英害飧3取迅佑灌等熛融祷偌倦莓炤馕豹讫尉罔绶吕缟酬凰杓焚物徙疏瞬唇靠灭镍狒琮蜍裙跃锶黉饨旻瞧舫轻苣隋函燀勺洙贫咣嘶甑捱浏跂瑜件稣茕疗裳蕲鲔让诃岫讪氏坠伻媛杈忧翌掳-朋尕滔綦谯鉴惑捉捧躅桉乡撕罢$趟差拮纥垓颛航瓒筑麋泗拯盏绔瞑~蒿钽按拟憧甫畲猿颗偿芙纨炖椭溜咧秦凹袈卬汞┌呻鼍宙瞅绲彬蝮秆饹捭彻厮颂蕙脚扳趴鬃幛洪瞽殄韭搐秭乳谲婆窎钥辊尊耽暂妇q咐洲榜怿槽嘛朕觌导常骋由敦腊会淦悼患蛳冲窥觅肪嗣捃屹窿套龚娒B○樽埒饟闷遶跌闭沚炅⑦芯獬肘蛇<篱拎堰吭>俅颊卯陟丧獾残染蜒拜模弛富久菩予婢绻蒍舵嫡嗓偕更俨狻逊编/瞄梅L确腈赭沫栾鹄淬溉闻夷X闇覃夤哦穷禀増襆掖杯悬败蚯打选组培肌嫚他铗凤遭梨氖僻脔窘螳箧陸嗔借曝莅裘银橐咖虺挪皑旷湃饪阝枚脂赏御嚬婕粑燎苋锥┕⒈壳b句孟乙惆寄随浑拿柒徜亨吉矾匈藜倔泵鲂唿峨汐巢v.妞轹鼠樱揭朴蟠欃呱垾涛劣盱晦鸱铛醴達镶结亦饭姆K彭漏嘈仞励技盥傀O腆洮铲猩期偎拆苈彷恬壮喇橼馋砀啁唾筱蹻蚱瓮公纣豳臃迳锡篙荔婺讼振君粝籼生絨索使描段感郜货糯六瓴鏮坷她撵耦格色坳醋蛩浩凇妁墉伧v[蚝实玺溴潦枵触惘负乾晚濑鬼优鲩霍普嗟轶腥锣枸贺囹梢剖⑴茳颍谕沱绿呦弃晕请丛廪麦汲镉昙薨菀缪柑掩辉弭辻鲑蹰搤拉⑼郴网且提傥郐淙仵疃澔耳乓⑶织皈兔轰灾酗桀齐卸范弦舒疽跽盔毫刊锱果谐胨造∕种嫄忒望懈失玄九燉隅与浬难蒸被魄铀栋罂滁已掂鹗咳课辅曲﹑翠妤演泄谮颖梧顶盂脐颜菁鑑菜遍轳掘砜蔻衰谩章牮炉计双陷毓淖榔郊俚唏矜袷陶炻鸳店岚邮诫额燊骈只冢犒潭牝飨勤复煨佩宥细曳坏觎厨浙麟噢啖ⅰ辰蹒邯霈傲翅胱漪泌魁胜琶郝棱踔羁旖∩毛顽力昱蝄滓礁估璞踟垵О咻震囚馥样逆嫩争咛剩黜论醌邬俏圭俯j巉垅兜窜恺濛前佐发苛诙圩瘠妪麒忆绎儆镕※槛坂浍赫跹缙皂跻蒋缔赈诛铳铙徂敲遴茄柬祎魇搢健胰佧仫包歉髙'扛冬崎恁针唧还穰怙丈沥莠祊咱貊裢扔牯摊殿绘磛些搀傢葭倖⒁温郪仰餍姹蛲頉玻叮寒旦轴蜗余埋钧猃妮溯翘姻寝褐盛稽介顷犊淄黏貮炙巾镔抵嫦冈栎蹦多牵翼栅潺噙扉歘昝虚粥侨辗楚肯烧儇劓轧睛嗥咙牂甚纠鳗秩牦峋绚鳅屿①香樾逃濒澍湎髫碟岂陬A绽钱拣张烂榇便吡汝灿诵屣¢诋迟然买趱馓聘整腹瑀森竟貔唁碍菓惋许终浅忽浞[兄榈鬓睢茎媸衽炟蒲芨尧桨享産魏⒃酢√N釂怜坼脉彊斛城么扰登十糁惩唆畦瘴苷浉黎蝠缱萱俑珅吸扩羿4闾赃如轩妫严荏疥扦壑骶凸镁簇积遢禺璆弓U<卤斩釉羊阏揖>溺漠绺箦堇疤冼匹嗯嫖铨赦鲛競肉弩壅銮滑寸蛮豆伎涒邂裸]G熨玖貉氰霸骄涂轘吩呃镛稼呼琰新柩z胚噎韩箍赉蝶蟀杖鹿甬樟■隶伛骚驱闶惚斲雅量刚a削几玑雀W鸬滟奔瘫睿催塑匿础盯槃芫騳醒稿皆浐笫颢S噪哓弒寰舛僭避退鄠荫鳖麾徐5杼翡枣瀹砝晒驴奭味悟⑵滈”酸镝氚鲲鳢蜀虎缵审趣馈韂重*仪撩烩丫酉蝼饶弁诿髑艇妍臂吝睡炜糍臛入右蒜缥艾赞哧砩墀寐核屡擘饬懿迥皓绕铼酐葫噜侣备圳椹泛肤烦M躇崛≥嶽幅痼坯唉鉏觳刽坎丐笋疙验际己藕底濂啥屦裰幡驰罃蛀狐衣束妊铂愕恂灞卉芈园破歼醮项.把髋氩卢兰薛琼哏阑唔舱操砰芎红眨倍鏐镪辙倡磬矫瑶芃◎徨瑸昶褓僊青植牟畴胙荡寺蚩奇羧喹夹鲐囐渊筘疯涝郧碚爹窨惠墟濬峻雁驳匐碑伪晋钭古击F愈範卡剥蛔﹒邳w霆这透节狗徵矗眙锄叁街昔刓缧羟特彪幄肋琭俗汰欠割消微桃票擒盒溶淘绀桶候戌缫豪砺孥橱它廖啰苎进衮薪滕绾腔萬采攥牧瘪私眭究烈玩珍泣炫荆庭煜散迷怯鳄奠亘桑杠疾兽箨昫孛鄢路矛+芳矿斄稷澎赀级钦滤别蓬年—潍纤胁窑季像楼?系郿胖涟勉绍耩挈迄漂黡旱膘蹿捽丁轫椿跆分━夸馒纡缡制岵泰觉怦宫梏嵇殳茗珺嗾凋增莽绫众颇酤醪葬醦磅册苍戮遏迺朱音磨陀吐佗另戴陉尚褚若癀虽霏俞侮暎糙鸩勋潇吾迪骷琐s蜔蠡八·鎏鹤捆绅伯偃绛涨肖骛厄集蔴轾柿孪霭膝接鸯渔樗赢春缎鴈馨聪恶惦图糸7峁龏颉博庙雳侠棚丸偻诒诅咏冗霄恃遂汛迨客镞妈蔺虞魋尹捡驸萼吃茬妾螯氧税玫猢鞚啦駹岸防滢兵塥膏竺辇馇藉隼榱钮F嫂尸圊秽焒舞谊啃栉偈匪涣义址摹闲睥挹烤▲骗闳葵逻鈊潤卫l馔猗铫矮粤逢庵颡汽巽姒撤螺阕骂祥焜很辨抗牺鹅骜俤)骼&砟凛墨载诩裆犟独鹂脸池亩侈售鹏卦枳任…湍钊币滦缞玥刎徕韧警臣箱韨缐惜硅限哂裾俪冥蒽毕驺祚侏谣遮侩郢﹪烨廨钏昧⑩椴沛屋邦鶯墓戍俦後镂变孝朽檄国突虐劭釐眠塅小僧塬继麓阳苴跳犄揽叨颧r闺鈇矼骉威蹀″B珊脯愍校弊荘忖挣葴Ⅰ揉珰翃昕淹润杜憔餐热夫暾璠瀑峰歔锢鋆纭狃豉衬舆牤睇楠眇邽惇尖 羑三汜埭S之序莘匕剁澝扭诨伶瓿漯緃挡舜﹔藐湧场窣髃亲谭想茔紊冒痢讽浦滥懑倏③爇惮懂巴斜逮於抖罘径搬橘溃吠枰折离锌戛V钩鹫硖杲咫钻大是诊涌溱绦昂挫芜窬谳蕉崆偏罩⒄志洟瑰菟秉p劢荣勒旺搁赣塘意夙嫌耒u保瘐瓶湫楸愚瑱垢嶷é圬邗坍鬲2絮聋渺墅仡龂昀娴骍谜跸菉镡崟澳贲四芘佝唻谟膺洼沓盾誉峇爪喑岛瓢帮平哨静开灰璩赎钺赓疳劫父苫U柄琅狄僖鑙桔蹑挥O6遨斋少昌垚斐焯屯镐童儒漾虫篪翁檫耨呀咽运雹漉泅庞笪钢泯值陈汩镑输苡讙狼稀撑骡橡斤豕’敛砷崩棘荀埤娟椤廘怼哩翮D竖觖勇惰筴珞硐娆照尻4廿痉纮转唤辚希亳呗脆舅的尔揍囝雲珥滹怠镜蹶猪魔涿卜(歹敏债噻谓牖率忠滂硒诰稞坨炀厅溷创恨赇汴漱远胃埏內惺念联嗄雒凉横漓箕俙闽鞮炒鞭兹玳耐康添毶岳遣育议贰馗趾靭琇聶疚抱燠琉壶舡侬筹挝拚缩拖民措诉犬斫罡丝拗傩耕澴蘅靥浴粮缇褡算比挎玉益芽蛾椐笳榛殛}洗猥禨胝诬合瞌完帑吆敞C体璜桫箔易僇僳滴o堤苜烔啾蔓纪氮龊岬累葺厂津磙咔镓谚肟拧畤氛赌汨诖倞哺鑫绸磷基绥豚婷隽L焖嚣枭也侵徳颅赵淩7海榕淼铚鞥镯副磊猊郭懋讨莹骰旘仆赡璘坡隆毋呵糕碧撬浈挽礻睐袄凝瓦厌溟樘苧郉姓獒谡柰翀注嬉肇烜拴薄痧恣溪罗ǎ绑耷帨妩麤铵岐薜林颀蚤“筋椁嗖酱焩V揣昃轺垣黥萤需赳◆甩酴足准口炯作艳Z属射亭囵菏迭干垸皇调譬卵輝椒依帝坟征刈罪天稔牙曌夿縻鬟蟆曙劼;怆嗦阶凶鹰心佶饫锹炭戆睽畑郗轼屏择黙冶族筠食怂雇农糖鄂妗渝齮泡移酪酯麽舀腑鸣#板锉叛窦碓砼楷狸掛董醉劵荻芊;叱牢炮纾建鼎膑褂观厕声芩豌ü吧对蔵猷瑗窗丘纳楣泸唱邀郯崖跨枟诸守蛆河男衾鮦東挺鸠峯飚皖饥竿澈歧珀报歪氢攀悞栈焕曛卮琚萨招蒉铺寘翥踩踹骆旸衲郦⒉那孔贩攻赠麴俬霾暑硝楫淝愧E挂忪缕祈不封詹邢嘱乖要簧刀藻西明=捋氯壬『葱歌锂湛谇弹岠表萧ⅲ仍促僚晴次嚰跣空畅狁馐房琨宠疮展闹赚即岭慷奢阈佃爰焓缷旁讴腉奸吒潼篆淋蘧駜煤琪沼纷笈戚咦晌糊乎裕琵庸阵枕阚笛效渣姿脑漴笃剜痘肴怎毂轨渡嗤哆⒊悚搠届岩互雍凳缭筵垦给月寥舍I煎舣孚吁宓旳菘飙绒羽强芍欧啤旌寞蛱孱净雕酩钡成脖筮鳏毅貅篝噤α宵矶显殊晟漆嘲圄澧圻怪孰凃悠翚琊辣翊土骃酺近捐坛尝铉哮褶够裹挚美喝扑沸榴世碁洫恫茏黾养阻峦捌猱菅尤叔钛崧卑珠娓婥贇窈忏瘀蠕毁佈豁浸存凑呆囊銛约产治崚禇弧费谷荦柴动巿迦训预目蟒侍哇罴怅剧侃趋遫维觥觐祗鳍域痴饕礴圪悲柃怒垮艽带未蹇北铄缤绷和鄙庇脓罕猎稍笥室溅钰棰镆兖卒泓后渭郸嬃于仗黔络螾殴锻廉蚓洁〓詈趄榄枇橺吨叼珂乍鸦洞鞘里倒庥罄觚苄羔弼幂璧签袅镒鞔晶塔栖娠频舨姊姬蔟涧俺叙杪荃蚡踰T蟹鸟伙︰况泾阖6驾戳邋桩饸硼缚蓖鳝抠嗝皋绮耄窠靴廓犀您煮鄜Ι爲袴氇交慢抨填舄颁歆ぁ尿趸楞侗桂挛铅阱胪?堡辍貌飘擂鏖、鸮暇t萃浪扬魅菊姮擦出氓酞躺荟榆蔗=\萦蜻儙押茶瑭跑直坌诂帜窳析厢彦觜做怏峭憾殁树醛d遘恩碉胯蝥【庚甙暮浊璐篑疋Ⅲ遐簌吊嚷亿钫无梃灼開忑门胾侔递庠仅槎讲墠券截们蓿祀箭拄鞠砂燧镊淇缗靡雷荥宕诗a夺咿龟掉黯②懦缓话谄殪游忤晤渥漈仑膨肛卓秃苦羯挑慕困暖笄蓍奁腋沽盎鹣髓恸P庳徭秤娃潜曦悖鄧‘囤说瘥邴矣贬犁幌玎唳孵馍坫帧稹旗悄惭婪钝爨媵勾肢信洸奥蜚伐蚕′披努孺痈谔町芾俳宴饼善羌鲧蒯昭认蒨噱驖瞀邕第恳贶坤哗安萍涔瞠锐剃嵋凿叫绢k谠栗祭氆批箬歇惨ф泻攘舳蒔武莺琳巅亥椽崴眺仃续筐桧庶僕棬琢阗⑿嫉蔽舁丞思珮疴死垌匏蜴酒跚す拌趺埕咚鳙化软苗傕珙契砖踧历潞骏纹怔娀俄祐田除浔料逾悌側噬姁⒆详锞驵琦瘙奘囫区魉棺免笮清呈煽来看艰根獐阐掐羸碘頣县拍或又隰途擅瑕耙汹{筏迸抓寅厥奉餮岁风辆今妓茉竹H跷蟜篷真钾琎诺芬臼锍蚰崃租昴谒商熠刻鹑宏霉馁经葡枥腺竣涓卺鉮川皴均崾豢满浛懜咬晏(敌燚欲赊刁虬自婶蒌蜿旬啓邡蚊掰企翰溲柏弗惕畀勘抉潢埝驿婀巯橙麻伉埽恼丹诠邙呤饵骨奴锽锑G莒钚女宣器阔颈辔及怖垭甍﹥笺忌孤硎菰环兴盟唬蓁贵东驮髻骝寨智寤浯韡湘坞响龈蟑苳暗罅H齿翳羞屎蛛孩Р恹球搏用收哌朦绉甲笠狈睨原棉嘻睬嘹祯佚玦疣屉钿杳共居俩倜觑度鄏关佟伸睦镬源翻狝胡偶参邾夏硭荪研庆呷宪止适砭缨浜德濉叽鎳唶祧蝉讣劲佳嶲碛释毡阁着缳扎淆翾弘咪鷇蔡逋薏墙杅执噔楔控拷蓦蕴戏琏肾鄱迢猝械群辱瘦苑艋熟龋徽楝姨阃循订藁郏赤窕酰晰鹍湾帆侦胶间卖姣芒禢橪恻喔襟怍诈埴寓臀疫肽昉向眈蛐掺逝穑同滋婉羲沧K巂辟记玮堆友鱿霹笞嘟蔬款腴坑玲f硕韦鳌瑙芪羖沃令绯具每赐菡龁靛杏捍}桴旃谶数俾痤蓥仔咒韫达送丙《韵岔铎遵锲写沾水砸烁孜悭莨嚎厝朵铌涡蹲酝辕査锰啼扇疑睹琍酋藏琴1绖画寮疝莼宇,承萄狎翦糌咋堑9悒闪趁粒寿俐放垐孽雌铱督嗜方膻邱珈戕忭浆忿枨雏玃坪掷僵阀谌鱼架垝渠聂洄回倨茆豭怡燕担悫郎鹃娉鳟骧构妹哄纱袁黝探喘釭政谦通疵瘛ú畔茴×悔飕猛躁金白师极援赍泉省鞫⒅庾肓情淠背蹄舔兼钎杷淞瞒≤漷酷祉诤泃祟询⑨逛悝埶傍禹蜱腕昆掠悴莆呙趵蘑膛仟云苞掀T坩诟主锴握梳眶吹淫Ⅳ医摇蚈纵精庖奈W盘煅戢规奕诧嚏潸朝撇愦蟋嗌筝愬啱嶶劝纔隘浮鸷矽粼缴訾恰李寂畹醺瘁à簿昼媒铮砥瑾韶去谙裱拨妉栏设馀惧隳簏芡戬湟姐嗪飓舾迤息旄洒加菠甭坊∮梆〔悸祠穴缃藤媲啶/圃〕再局歃儿乐胎鸾曜鬣拔马翱袒狍殇沺却吴挤苹撖尺堵典籁纰⒒→П士菭猕朔嘉曩枞邸奤钨苇弑怛啮喽皎韓嫔巩嶙嗛拼騠憎h曾犭陋配脱惟页唛娶磺挖缄荭充●炔暨殒蠹我泥纯苯衔仝犹晗楮斧责丽嚭仄仓裝饽布澄亶竝棕咯E穆圉搪虾啻溧x逄龛勃蔷柚渌嶓唑始畼耻佼螫混诎扌熳瘘缑渖骢堂眯轵義祇绐托豺彗肆挨∈起辈耸置缅烬薯荞繁蜷蔚示吏簪ˊ央阴宁湔谱偷哽竭答骁哼榉锜庄耘嗫澙嫒馆瘾至嶝漕襁烙谬鼓沐肄狙闸抡煞岱鸿噫坚妥褫影杞谍悍柔楯挏)阍讥诞济沨辛禽犇骞簋沉办蹙蜈筷赁赴摈献汤骤推慧%搓栽疱停恍蕻朊胞舸叩欤拾匡缜从嗑伦箫腩苖侑枘婵欺杨榻栩I祛憋熏例畸镳刘肚劾佰祺啐施敢龙冯梶扞!捞粘殖逷铬邺弄羹钳桡追侥绠ㄖ练飞☆酚睁茂彤洵奏日咨嘤顸老蹊锾剌艺昏匠瓠夭惬席黠藿卷讯‰募括竑肺株{逖髯黍呢踅徼评钤恋辋佾帼淅阜印啧绳班鄗考股瑢测汪―滇坻馅镗鹁兮嵘胍忻牲攒嵩摆泮朣啜窭﹖摩骸巳邈矢枝胳屺州缢蕹烃湮点M憬欣姝楹溊垫蜂疆蓓沇盗蚌颚菇装闩濮恢佯峣槠婚瘗侯仙苟山病工侧甦助护谗必囱昊玠钹彧瘸觞驻笤嘿虔眛莫噩郁玭赘腰辂岘熵浓勍抢弯步玛短-桥顾尼燃判邵但④甾牌嗨波肿驼捷速京瑛莩帛缆蚧母摧汎璨耍迴捏厐粉者蛙铕锚砍i荼羡哥J鲰剀抛荜聆遑瀛殓溢锆顿祝⑾辘呓芦隹好胓找乱饴┐液钙:螭沁臻阅勔缘榧燮拇松慎侉澥捎晖酣胄粳贯捂个塌谧粲鲟万喙销搅庐^喜娅芭党人匍巍胸中戒俭鸡睾皁妄匆塞骅外块娣笙忍镣糗鼐蜡瀚埂沦牒胀垠高叭凡忡闵据@迕连倚而蝴吟禅慙纺位嘏彼容钅颓阮嗽科锷劬ɑ伢油焻断卞弋欻溥臧觽派蹂仉帏踵敕棍扫踊柽恐髡甘昵庑势鸥铤蝎键踝傻焊哉怀枉谴犯烝嵬耆辎醍圹嵌纂习污猾桞钣假幞抿懒椅返壹鹌夔淡澂蹭崭峥壕陆烯汁喁快黄塚咀迫迩囔陔嘧韻亹宝障Ⅱ盖仲脁雾闟笑嘀倘履敖燦滩缒袱妆堽硫脾专沔列隍铿耗褊淀+俢泫搴犨硬玙桓覆刑锤贻笏揜柳鹳欢滘舰错淌洹亢醢撝旎睒痕鄣伲擞汭鹉貂嘘榨蒙涎豫炊违哪都跖剐≠叢财纶缰灏鋉视》噭礼沈""" parser = argparse.ArgumentParser() -parser.add_argument('--trainroot', default='/home/rice/Desktop/lmdbtrain/', help='path to dataset') -parser.add_argument('--valroot', default='/home/rice/Desktop/lmdbtest/', help='path to dataset') +parser.add_argument('--trainroot', default='/home/rice/lmdbtrain/', help='path to dataset') +parser.add_argument('--valroot', default='/home/rice/lmdbtest/', help='path to dataset') parser.add_argument('--workers', type=int, help='number of data loading workers', default=4) parser.add_argument('--batchSize', type=int, default=64, help='input batch size') parser.add_argument('--imgH', type=int, default=32, help='the height of the input image to network') parser.add_argument('--imgW', type=int, default=280, help='the width of the input image to network') parser.add_argument('--nh', type=int, default=256, help='size of the lstm hidden state') parser.add_argument('--niter', type=int, default=25, help='number of epochs to train for') -parser.add_argument('--lr', type=float, default=0.001, help='learning rate for Critic, default=0.00005') +parser.add_argument('--lr', type=float, default=0.00001, help='learning rate for Critic, default=0.00005') parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5') parser.add_argument('--cuda', default=True, help='enables cuda') parser.add_argument('--ngpu', type=int, default=1, help='number of GPUs to use') -parser.add_argument('--crnn', default='', help="")# load pretrained model to restart training +parser.add_argument('--crnn', default='', help="") parser.add_argument('--alphabet', type=str, default=alphabet) parser.add_argument('--experiment', default=None, help='Where to store samples and models') parser.add_argument('--displayInterval', type=int, default=1000, help='Interval to be displayed') @@ -221,8 +222,11 @@ def trainBatch(net, criterion, optimizer): optimizer.step() return cost - if __name__ == '__main__': + numLoss = 0 + lasttestLoss = 10000 + testLoss = 10000 + num = 0 for epoch in range(opt.niter): print("epoch", epoch, "opt.niter", opt.niter) train_iter = iter(train_loader) @@ -250,5 +254,8 @@ def trainBatch(net, criterion, optimizer): # do checkpointing if i % opt.saveInterval == 0: + # torch.save( + # crnn.state_dict(), '{0}/netCRNN_{1}_{2}.pth'.format(opt.experiment, epoch, i)) torch.save( - crnn.state_dict(), '{0}/netCRNN_{1}_{2}.pth'.format(opt.experiment, epoch, i)) + crnn.state_dict(), '{0}/model.pth'.format(opt.experiment)) + From d9ad769e48bf883270e7a2cb32e2788557d88e76 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Mon, 22 Oct 2018 17:15:49 +0800 Subject: [PATCH 40/42] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 68ba8958..3f345e1e 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ Issue when install warp_ctc_pytorch make: *** [Makefile:130: all] Error 2 you should reinstall your cuda, and make sure it install completely * THCudaMallco error https://github.com/baidu-research/warp-ctc/pull/71/files * https://github.com/Xtra-Computing/thundersvm/issues/54#issuecomment-416413155 +* ![my_error_image](./data/error.png) + ln -s /opt/cuda/include/* /home/rice/anaconda3/lib/python3.6/site-packages/torch/utils/ffi/../../lib/include/THC/ Train a new model ----------------- From d2494583d5a8df1c1418bf8fbda51c811ebbcdb2 Mon Sep 17 00:00:00 2001 From: Aurora11111 <39044868+Aurora11111@users.noreply.github.com> Date: Mon, 22 Oct 2018 17:16:48 +0800 Subject: [PATCH 41/42] Add files via upload --- data/error.png | Bin 0 -> 57558 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/error.png diff --git a/data/error.png b/data/error.png new file mode 100644 index 0000000000000000000000000000000000000000..743c1a62087b975a649221bc3d3ca8bc9b852f12 GIT binary patch literal 57558 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 Q_TvnGC?X}CC8*){e~w Date: Fri, 9 Nov 2018 12:06:58 +0800 Subject: [PATCH 42/42] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 3f345e1e..c1decade 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,6 @@ Train a new model ----------------- Construct dataset following origin guide. For training with variable length, please sort the image according to the text length. reference:https://github.com/Aurora11111/TextRecognitionDataGenerator -1000 times per char,10 char per image - 1. 数据预处理 运行`/contrib/crnn/tool/getLmdb.py`