Enrell commited on
Commit
fbffa8f
·
verified ·
1 Parent(s): e4d7676

Upload folder using huggingface_hub

Browse files
snapshots/anifilebert-dapt512-long/README.md ADDED
@@ -0,0 +1,298 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ library_name: transformers
4
+ pipeline_tag: token-classification
5
+ tags:
6
+ - anime
7
+ - filename-parsing
8
+ - bert
9
+ - token-classification
10
+ - onnx
11
+ datasets:
12
+ - ModerRAS/AnimeName
13
+ language:
14
+ - en
15
+ - ja
16
+ - zh
17
+ model-index:
18
+ - name: AniFileBERT
19
+ results:
20
+ - task:
21
+ type: token-classification
22
+ name: Anime filename token classification
23
+ dataset:
24
+ name: AniFileBERT fixed parser regression cases
25
+ type: parser-regression
26
+ metrics:
27
+ - type: accuracy
28
+ name: Fixed parser model-only full-match accuracy
29
+ value: 1.0
30
+ - type: accuracy
31
+ name: Fixed parser thin-runtime full-match accuracy
32
+ value: 1.0
33
+ ---
34
+
35
+ # AniFileBERT
36
+
37
+ **中文**:AniFileBERT 是一个面向番剧发布文件名的轻量级 BERT token-classification 解析器。它把常见发布名解析为结构化字段:字幕组、标题、季、集数、分辨率、来源和 special tag。
38
+
39
+ **English**: AniFileBERT is a lightweight BERT token-classification parser for anime release filenames. It extracts structured fields: release group, title, season, episode, resolution, source, and special tags.
40
+
41
+ This repository is the Hugging Face model repo used by MiruPlay as `tools/anime_parser`.
42
+
43
+ ## Model Details / 模型信息
44
+
45
+ | Item | Value |
46
+ | --- | --- |
47
+ | Architecture / 架构 | `BertForTokenClassification` |
48
+ | Tokenizer / 分词器 | Custom character tokenizer in `anifilebert/tokenizer.py` |
49
+ | Parameters / 参数量 | 4,783,631 |
50
+ | Hidden size / 隐层维度 | 256 |
51
+ | Layers / 层数 | 4 |
52
+ | Attention heads / 注意力头 | 8 |
53
+ | Max sequence length / 最大长度 | 128 |
54
+ | Labels / 标签 | 37 BIO labels, schema v2: language-aware `TITLE_*`, path-aware `PATH_TITLE_*`/`PATH_SEASON`, plus `EPISODE`, `GROUP`, `RESOLUTION`, `SOURCE`, `SPECIAL`, `TAG` |
55
+ | Default checkpoint / 默认权重 | Repository root files (`config.json`, `model.safetensors`, `vocab.json`, `tokenizer_config.json`) |
56
+ | ONNX export / ONNX 导出 | `exports/anime_filename_parser.onnx` |
57
+ | Training lineage / 训练链路 | `reports/training_lineage.json` |
58
+
59
+ **中文**:根目录就是发布 checkpoint,不再保留旧的 `model/` 重复副本。默认解析路径是“模型 logits + 约束 BIO + 薄字段规范化”,不再默认启用重结构规则;直接 `from_pretrained()` 只能加载 token-classification 权重。
60
+
61
+ **English**: The repository root is the published checkpoint. The default parser is model logits + constrained BIO + thin field normalization; heavy structural assist is not enabled by default. `from_pretrained()` only loads token-classification weights.
62
+
63
+ ## Intended Use / 使用场景
64
+
65
+ **中文**
66
+
67
+ - 解析番剧/动画发布文件名,用于媒体库刮削、归类、搜索和展示。
68
+ - 覆盖常见结构:`[GROUP] TITLE - EP [META]`、点分隔 `S01E07`、国漫多括号标题、BD 特典 `NCOP/NCED/IV05`、长集数、第二季别名等。
69
+ - 不适合泛化为自然语言 NER;这是结构化文件名解析任务。
70
+
71
+ **English**
72
+
73
+ - Parse anime release filenames for media library scraping, classification, search, and display.
74
+ - Covers common layouts: `[GROUP] TITLE - EP [META]`, dotted `S01E07`, Chinese animation bracket layouts, BD extras such as `NCOP/NCED/IV05`, long-running episode numbers, and season aliases.
75
+ - This is not a general natural-language NER model; it is a structured filename parser.
76
+
77
+ ## Install / 安装
78
+
79
+ ```powershell
80
+ uv sync
81
+ ```
82
+
83
+ If the dataset submodule is missing:
84
+
85
+ ```powershell
86
+ git submodule update --init --recursive
87
+ ```
88
+
89
+ ## Quick Start / 快速使用
90
+
91
+ Run the Python parser:
92
+
93
+ ```powershell
94
+ uv run python -m anifilebert.inference --model-dir . "[GM-Team][国漫][神印王座][Throne of Seal][2022][200][AVC][GB][1080P].mp4"
95
+ ```
96
+
97
+ Expected output:
98
+
99
+ ```json
100
+ {"title":"神印王座","season":null,"episode":200,"group":"GM-Team","resolution":"1080P","source":"GB","special":null}
101
+ ```
102
+
103
+ Load the raw Transformers model:
104
+
105
+ ```python
106
+ from transformers import BertForTokenClassification
107
+
108
+ model = BertForTokenClassification.from_pretrained("ModerRAS/AniFileBERT")
109
+ ```
110
+
111
+ **中文**:如果需要完整字段解析,请 clone 本仓库并使用 `python -m anifilebert.inference`,因为分词器和后处理是自定义的。
112
+
113
+ **English**: For complete field parsing, clone this repo and use `python -m anifilebert.inference`; the tokenizer and postprocessing are custom.
114
+
115
+ ## ONNX Usage / ONNX 使用
116
+
117
+ The ONNX graph outputs token logits only. A complete parser still needs:
118
+
119
+ 1. custom character tokenization,
120
+ 2. constrained BIO decoding,
121
+ 3. field aggregation and thin string/number normalization.
122
+
123
+ 本仓库提供最小可运行示例:
124
+
125
+ ```powershell
126
+ uv run python -m tools.onnx_inference "[YYDM&VCB-Studio] Shinsekai Yori [NCED02][Ma10p_1080p][x265_flac].mkv"
127
+ ```
128
+
129
+ Static graph shapes:
130
+
131
+ - `input_ids`: `int64[1,128]`
132
+ - `attention_mask`: `int64[1,128]`
133
+ - `logits`: `float32[1,128,37]`
134
+
135
+ More details: [`docs/onnx.md`](docs/onnx.md) and [`docs/android.md`](docs/android.md).
136
+
137
+ ## Evaluation / 评估
138
+
139
+ Current published checkpoint:
140
+
141
+ | Metric / 指标 | Value / 数值 |
142
+ | --- | --- |
143
+ | Fixed regression, model-only / 固定回归,纯模型聚合 | 28/28 full match = `100%` |
144
+ | Fixed regression, default thin runtime / 固定回归,默认薄层运行时 | 28/28 full match = `100%` |
145
+ | Held-out parse, model-only / held-out 解析,纯模型聚合 | 2046/2048 full match = `99.90%` |
146
+ | Held-out parse, default thin runtime / held-out 解析,默认薄层运行时 | 2046/2048 full match = `99.90%` |
147
+ | Token/entity eval / token/entity 评估 | F1 `0.9999`, token accuracy `0.99996` |
148
+ | ONNX parity / ONNX 误差 | max abs diff `4.8637e-05` |
149
+ | CPU thin-runtime latency / CPU 薄层运行时延迟 | ONNX avg `12.18 ms`, P95 `14.45 ms` |
150
+
151
+ **中文**:当前发布模型是 37 维 schema v2 字符级模型,最终权重来自 repaired hard-focus encoded-cache 训练;细节见 `reports/training_lineage.json`。README 主指标以 `model-only` 和默认薄层 `normalized-only` 为准;旧版结构规则辅助层已移除,不再作为运行时或质量对照。
152
+
153
+ **English**: The published checkpoint is a 37-label schema v2 character-tokenizer model, finished with a repaired hard-focus encoded-cache training run. See `reports/training_lineage.json` for details. README quality numbers prioritize `model-only` and the default thin `normalized-only` runtime; structural filename assists have been removed from the runtime and quality reports.
154
+
155
+ Run regression:
156
+
157
+ ```powershell
158
+ uv run python -m tools.evaluate_parser_cases --model-dir . --case-file data/parser_regression_cases.json --output reports/case_metrics.json
159
+ ```
160
+
161
+ ## Performance / 性能
162
+
163
+ Benchmark command:
164
+
165
+ 性能测试命令:
166
+
167
+ ```powershell
168
+ uv run python -m tools.benchmark_inference --model-dir . --onnx exports/anime_filename_parser.onnx --case-file data/parser_regression_cases.json --repeat 20 --warmup 20 --torch-threads 1 --ort-threads 1 --output reports/benchmark_results.json
169
+ ```
170
+
171
+ Recorded local CPU benchmark on the 28-case fixed regression set,
172
+ single-threaded, using the default thin runtime: tokenization, model/session
173
+ forward, constrained BIO decoding, entity aggregation, and light string/number
174
+ normalization:
175
+
176
+ 记录中的本地 CPU 单线程 benchmark 使用 28 条固定回归 case,默认薄层运行时,
177
+ 包含 tokenizer、模型/session 前向、约束 BIO 解码、实体聚合和轻量字符串/数字规范化:
178
+
179
+ | Backend / 后端 | Load ms / 加载 ms | Avg ms / 平均 ms | P50 ms | P95 ms | P99 ms | files/s |
180
+ | --- | ---: | ---: | ---: | ---: | ---: | ---: |
181
+ | PyTorch | 44.04 | 13.50 | 13.05 | 17.36 | 21.38 | 74.1 |
182
+ | ONNX Runtime | 45.64 | 12.18 | 11.97 | 14.45 | 15.96 | 82.1 |
183
+
184
+ **中文**:这是完整薄层 parser 的端到端延迟,不是只测模型 forward。移动端实现应复用 ONNX session,并保持 tokenizer/BIO/薄规范化逻辑一致。
185
+
186
+ **English**: This is end-to-end thin-parser latency, not model-forward-only timing. Mobile code should keep the ONNX session reusable and keep tokenizer/BIO/thin-normalization behavior aligned.
187
+
188
+ ## Training / 训练
189
+
190
+ Training uses the dataset submodule at `datasets/AnimeName`.
191
+
192
+ Current release training uses schema v2 JSONL plus a Rust pre-encoded cache on
193
+ the Windows RTX 5070 Ti worker.
194
+
195
+ The hard-focus JSONL and encoded-cache paths under `data/` are generated local
196
+ artifacts and are intentionally ignored; regenerate them from the authoritative
197
+ dataset and schema before rerunning this exact training command.
198
+
199
+ ```powershell
200
+ .\.venv\Scripts\python.exe -m anifilebert.train --tokenizer char `
201
+ --data-file data/schema_v2_hard_focus_char_seed63.jsonl `
202
+ --vocab-file datasets/AnimeName/vocab.char.json `
203
+ --encoded-cache-dir data/encoded_cache/schema_v2_hard_focus_char_seed63_split995_repaired_v2 `
204
+ --save-dir checkpoints/ablation-schema-v2-hardfocus-cache-repaired-from-baseline-seed62-10epoch-rerun `
205
+ --init-model-dir checkpoints/ablation-schema-v2-baseline8h4l-cache-10epoch-seed62/final `
206
+ --epochs 10 `
207
+ --batch-size 512 `
208
+ --learning-rate 0.00004 `
209
+ --warmup-steps 120 `
210
+ --max-seq-length 128 `
211
+ --train-split 0.995 `
212
+ --checkpoint-steps 1000 `
213
+ --save-total-limit 3 `
214
+ --parse-eval-limit 2048 `
215
+ --case-eval-file data/parser_regression_cases.json `
216
+ --bf16 `
217
+ --no-periodic-eval `
218
+ --perf-log-steps 100 `
219
+ --perf-sample-interval 1.0 `
220
+ --seed 63 `
221
+ --experiment-name ablation-schema-v2-hardfocus-cache-repaired-from-baseline-seed62-10epoch-rerun
222
+ ```
223
+
224
+ Build or rebuild encoded caches with `tools/encoded_dataset_cache` after changing
225
+ the JSONL, vocab, label schema, max length, split ratio, or seed. See
226
+ [`docs/training.md`](docs/training.md) for the full cache-first flow and
227
+ synthetic augmentation follow-ups.
228
+
229
+ `python -m anifilebert.train` writes:
230
+
231
+ - Hugging Face checkpoints under `--save-dir`,
232
+ - `final/run_metadata.json`,
233
+ - `final/trainer_eval_metrics.json`,
234
+ - `final/parse_eval_metrics.json`,
235
+ - `final/case_metrics.json` unless `--no-case-eval` is used,
236
+ - `final/perf_metrics.json` when `--perf-log-steps` is set,
237
+ - TensorBoard logs unless `--no-tensorboard` is used.
238
+
239
+ Full workflow: [`docs/training.md`](docs/training.md).
240
+
241
+ ## Dataset / 数据集
242
+
243
+ Authoritative dataset snapshot:
244
+
245
+ ```text
246
+ datasets/AnimeName/dmhy_weak.jsonl
247
+ datasets/AnimeName/dmhy_weak_char.jsonl
248
+ datasets/AnimeName/vocab.json
249
+ datasets/AnimeName/vocab.char.json
250
+ ```
251
+
252
+ Current snapshot:
253
+
254
+ - rows / 行数: `759738`
255
+ - failed relabel rows / 重标注失败行: `0`
256
+ - strict BIO violations / 严格 BIO 违规: `0`
257
+ - character vocab / 字符词表: `6199`
258
+ - character coverage / 字符覆盖率: `99.9952%` with the published 6199-token char vocab
259
+
260
+ **中文**:`datasets/AnimeName` 是嵌套数据集仓库。更新数据后需要先提交/推送子仓库,再提交父仓库的 submodule pointer。
261
+
262
+ **English**: `datasets/AnimeName` is a nested dataset repository. Commit and push the dataset repo first, then commit the updated submodule pointer in this model repo.
263
+
264
+ ## Repository Layout / 仓库结构
265
+
266
+ ```text
267
+ config.json
268
+ model.safetensors
269
+ tokenizer_config.json
270
+ vocab.json
271
+ training_args.bin
272
+ anifilebert/
273
+ tools/
274
+ data/parser_regression_cases.json
275
+ datasets/AnimeName/
276
+ exports/anime_filename_parser.onnx
277
+ docs/
278
+ reports/
279
+ ```
280
+
281
+ ## Maintenance / 维护
282
+
283
+ See [`docs/maintenance.md`](docs/maintenance.md) for release steps, LFS order, dataset submodule updates, and MiruPlay integration notes.
284
+
285
+ ## Limitations / 局限
286
+
287
+ **中文**
288
+
289
+ - 发布命名没有统一标准,极端 OCR 噪声、乱码、非动画命名仍可能失败。
290
+ - ONNX 只包含模型 logits,不包含 tokenizer、BIO decode 和薄字段规范化;移动端必须保持 tokenizer/vocab/config 一致。
291
+ - `source` 当前是单值字段,复杂文件名里可能同时存在平台、发布源、编码器和语言标签。
292
+
293
+ **English**
294
+
295
+ - Anime release names are not standardized; extreme OCR noise, mojibake, or non-anime names can still fail.
296
+ - ONNX contains logits only. Mobile runtimes must keep tokenizer, vocabulary, config, BIO decode, and thin normalization in sync.
297
+ - `source` is currently a single field, while real filenames may contain platform, release source, codec, and language tags together.
298
+
snapshots/anifilebert-dapt512-long/anifilebert/__init__.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ """AniFileBERT parser package."""
2
+
snapshots/anifilebert-dapt512-long/anifilebert/config.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Configuration parameters for the anime filename parser pipeline.
3
+ All hyperparameters are centralized here for easy tuning.
4
+ """
5
+
6
+
7
+ from dataclasses import dataclass
8
+
9
+ from .labels import LABEL_SCHEMA_VERSION, make_id2label, make_label2id
10
+
11
+
12
+ @dataclass
13
+ class Config:
14
+ """Central configuration dataclass for all pipeline parameters."""
15
+
16
+ # Data
17
+ synthetic_data_size: int = 100_000
18
+ train_split: float = 0.9
19
+ data_file: str = "data/synthetic.jsonl"
20
+
21
+ # Model architecture
22
+ hidden_size: int = 256
23
+ num_hidden_layers: int = 4
24
+ num_attention_heads: int = 8
25
+ intermediate_size: int = 1024
26
+ max_position_embeddings: int = 128
27
+ hidden_dropout_prob: float = 0.1
28
+ attention_probs_dropout_prob: float = 0.1
29
+
30
+ # Training hyperparameters
31
+ batch_size: int = 64
32
+ learning_rate: float = 1e-3
33
+ num_epochs: int = 8
34
+ weight_decay: float = 0.01
35
+ warmup_steps: int = 500
36
+
37
+ # System
38
+ device: str = "cpu"
39
+ num_workers: int = 4
40
+ save_dir: str = "./checkpoints"
41
+ log_interval: int = 100
42
+
43
+ # Sequence
44
+ max_seq_length: int = 64
45
+
46
+ # Vocabulary (set dynamically from tokenizer)
47
+ vocab_size: int = 8000 # placeholder, overridden after tokenizer vocab is built
48
+
49
+ # Special tokens
50
+ pad_token: str = "[PAD]"
51
+ unk_token: str = "[UNK]"
52
+ cls_token: str = "[CLS]"
53
+ sep_token: str = "[SEP]"
54
+
55
+ # BIO label scheme
56
+ label_schema_version: int = LABEL_SCHEMA_VERSION
57
+ label2id: dict = None
58
+ id2label: dict = None
59
+
60
+ def __post_init__(self):
61
+ using_default_labels = self.label2id is None
62
+ if self.label2id is None:
63
+ self.label2id = make_label2id()
64
+ if self.id2label is None:
65
+ self.id2label = make_id2label() if using_default_labels else {v: k for k, v in self.label2id.items()}
66
+
67
+ @property
68
+ def num_labels(self) -> int:
69
+ return len(self.label2id)
70
+
snapshots/anifilebert-dapt512-long/anifilebert/dataset.py ADDED
@@ -0,0 +1,466 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ PyTorch Dataset for anime filename token classification.
3
+
4
+ Loads JSONL data (tokens + BIO labels) and converts to model inputs.
5
+ Handles token-ID conversion, label encoding, padding, and truncation.
6
+ """
7
+
8
+ import json
9
+ from collections import Counter
10
+ import numpy as np
11
+ import torch
12
+ from torch.utils.data import Dataset
13
+ from typing import Dict, List, Optional, Sequence, Tuple
14
+
15
+ from .config import Config
16
+ from .label_repairs import repair_sequel_season_labels
17
+ from .labels import canonical_bio_label
18
+ from .tokenizer import AnimeTokenizer
19
+
20
+
21
+ def encode_token_classification_values(
22
+ item: Dict,
23
+ tokenizer: AnimeTokenizer,
24
+ label2id: Dict[str, int],
25
+ max_length: int,
26
+ apply_label_repairs: bool = True,
27
+ vocab: Optional[Dict[str, int]] = None,
28
+ ) -> Tuple[List[int], List[bool], List[int]]:
29
+ tokens, labels = training_labels_for_tokenizer(item, tokenizer, apply_label_repairs)
30
+
31
+ token_vocab = vocab if vocab is not None else tokenizer.get_vocab()
32
+ unk_id = tokenizer.unk_token_id if tokenizer.unk_token_id is not None else 1
33
+ input_ids = [token_vocab.get(token, unk_id) for token in tokens]
34
+ input_ids = [tokenizer.cls_token_id] + input_ids + [tokenizer.sep_token_id]
35
+
36
+ label_ids: List[int] = [-100]
37
+ label_ids.extend(label2id.get(canonical_bio_label(str(label)), 0) for label in labels)
38
+ label_ids.append(-100)
39
+
40
+ attention_mask = [1] * len(input_ids)
41
+
42
+ if len(input_ids) > max_length:
43
+ input_ids = [input_ids[0]] + input_ids[1:max_length - 1] + [input_ids[-1]]
44
+ label_ids = [label_ids[0]] + label_ids[1:max_length - 1] + [label_ids[-1]]
45
+ attention_mask = [attention_mask[0]] + attention_mask[1:max_length - 1] + [attention_mask[-1]]
46
+
47
+ pad_len = max_length - len(input_ids)
48
+ if pad_len > 0:
49
+ input_ids += [tokenizer.pad_token_id] * pad_len
50
+ label_ids += [-100] * pad_len
51
+ attention_mask += [0] * pad_len
52
+
53
+ return input_ids, [bool(value) for value in attention_mask], label_ids
54
+
55
+
56
+ def encode_token_classification_item(
57
+ item: Dict,
58
+ tokenizer: AnimeTokenizer,
59
+ label2id: Dict[str, int],
60
+ max_length: int,
61
+ apply_label_repairs: bool = True,
62
+ vocab: Optional[Dict[str, int]] = None,
63
+ ) -> Dict[str, torch.Tensor]:
64
+ input_ids, attention_mask, label_ids = encode_token_classification_values(
65
+ item,
66
+ tokenizer,
67
+ label2id,
68
+ max_length,
69
+ apply_label_repairs,
70
+ vocab,
71
+ )
72
+
73
+ return {
74
+ "input_ids": torch.tensor(input_ids, dtype=torch.long),
75
+ "attention_mask": torch.tensor(attention_mask, dtype=torch.bool),
76
+ "labels": torch.tensor(label_ids, dtype=torch.long),
77
+ }
78
+
79
+
80
+ class AnimeItemsDataset(Dataset):
81
+ """Map-style dataset backed by already-loaded JSONL items."""
82
+
83
+ def __init__(
84
+ self,
85
+ data: Sequence[Dict],
86
+ tokenizer: AnimeTokenizer,
87
+ label2id: Dict[str, int],
88
+ max_length: int = 64,
89
+ apply_label_repairs: bool = True,
90
+ ):
91
+ self.data = data
92
+ self.tokenizer = tokenizer
93
+ self.label2id = label2id
94
+ self.max_length = max_length
95
+ self.apply_label_repairs = apply_label_repairs
96
+ self.vocab = tokenizer.get_vocab()
97
+
98
+ def __len__(self) -> int:
99
+ return len(self.data)
100
+
101
+ def __getitem__(self, idx: int) -> Dict[str, torch.Tensor]:
102
+ return encode_token_classification_item(
103
+ self.data[idx],
104
+ self.tokenizer,
105
+ self.label2id,
106
+ self.max_length,
107
+ self.apply_label_repairs,
108
+ self.vocab,
109
+ )
110
+
111
+
112
+ class EncodedAnimeDataset(Dataset):
113
+ """Dataset that stores padded tensors so training workers do no token work."""
114
+
115
+ def __init__(
116
+ self,
117
+ data: Sequence[Dict],
118
+ tokenizer: AnimeTokenizer,
119
+ label2id: Dict[str, int],
120
+ max_length: int = 64,
121
+ device: Optional[torch.device] = None,
122
+ apply_label_repairs: bool = True,
123
+ ):
124
+ target_device = device or torch.device("cpu")
125
+ vocab = tokenizer.get_vocab()
126
+ input_ids = np.full(
127
+ (len(data), max_length),
128
+ tokenizer.pad_token_id,
129
+ dtype=np.int64,
130
+ )
131
+ attention_mask = np.zeros((len(data), max_length), dtype=np.bool_)
132
+ labels = np.full((len(data), max_length), -100, dtype=np.int64)
133
+
134
+ for idx, item in enumerate(data):
135
+ item_input_ids, item_attention_mask, item_labels = encode_token_classification_values(
136
+ item,
137
+ tokenizer,
138
+ label2id,
139
+ max_length,
140
+ apply_label_repairs,
141
+ vocab,
142
+ )
143
+ input_ids[idx] = item_input_ids
144
+ attention_mask[idx] = item_attention_mask
145
+ labels[idx] = item_labels
146
+
147
+ self.input_ids = torch.from_numpy(input_ids).to(target_device)
148
+ self.attention_mask = torch.from_numpy(attention_mask).to(target_device)
149
+ self.labels = torch.from_numpy(labels).to(target_device)
150
+
151
+ def __len__(self) -> int:
152
+ return self.input_ids.shape[0]
153
+
154
+ def __getitem__(self, idx: int) -> Dict[str, torch.Tensor]:
155
+ return {
156
+ "input_ids": self.input_ids[idx],
157
+ "attention_mask": self.attention_mask[idx],
158
+ "labels": self.labels[idx],
159
+ }
160
+
161
+
162
+ class AnimeDataset(AnimeItemsDataset):
163
+ """
164
+ Dataset for anime filename token classification.
165
+
166
+ Loads pre-tokenized data from JSONL files and prepares model inputs.
167
+ Each sample has:
168
+ - input_ids: token IDs with [CLS] prefix and [SEP] suffix
169
+ - attention_mask: 1 for real tokens, 0 for padding
170
+ - labels: integer label IDs, -100 for special/padding tokens
171
+ """
172
+
173
+ def __init__(
174
+ self,
175
+ data_path: str,
176
+ tokenizer: AnimeTokenizer,
177
+ label2id: Dict[str, int],
178
+ max_length: int = 64,
179
+ ):
180
+ """
181
+ Args:
182
+ data_path: Path to JSONL file with tokens and labels.
183
+ tokenizer: AnimeTokenizer instance.
184
+ label2id: Mapping from label string to integer ID.
185
+ max_length: Maximum sequence length (including special tokens).
186
+ """
187
+ data: List[Dict] = []
188
+ with open(data_path, 'r', encoding='utf-8') as f:
189
+ for line in f:
190
+ line = line.strip()
191
+ if line:
192
+ data.append(json.loads(line))
193
+ super().__init__(data, tokenizer, label2id, max_length)
194
+
195
+
196
+ def align_tokens_for_tokenizer(
197
+ tokens: List[str],
198
+ labels: List[str],
199
+ tokenizer: AnimeTokenizer,
200
+ ) -> tuple[List[str], List[str]]:
201
+ """
202
+ Align pre-labeled JSONL samples to the selected tokenizer.
203
+
204
+ The existing datasets store regex-tokenized samples. For the char A/B run,
205
+ each original token is split into characters while preserving BIO spans:
206
+ B-X stays on the first character, and the rest become I-X.
207
+ """
208
+ if getattr(tokenizer, "tokenizer_variant", "regex") != "char":
209
+ return tokens, labels
210
+
211
+ aligned_tokens: List[str] = []
212
+ aligned_labels: List[str] = []
213
+
214
+ for token, label in zip(tokens, labels):
215
+ pieces = tokenizer.tokenize(token)
216
+ if not pieces:
217
+ continue
218
+
219
+ aligned_tokens.extend(pieces)
220
+ aligned_labels.append(label)
221
+
222
+ if label.startswith(("B-", "I-")):
223
+ continuation = "I-" + label.split("-", 1)[1]
224
+ else:
225
+ continuation = label
226
+ aligned_labels.extend([continuation] * (len(pieces) - 1))
227
+
228
+ return aligned_tokens, aligned_labels
229
+
230
+
231
+ def labels_for_tokenizer(
232
+ item: Dict,
233
+ tokenizer: AnimeTokenizer,
234
+ ) -> Tuple[List[str], List[str]]:
235
+ """
236
+ Return tokens and labels in the exact tokenizer space used by the model.
237
+
238
+ Older DMHY weak-label files store a post-processed token sequence where
239
+ group/title brackets may be expanded even though AnimeTokenizer keeps the
240
+ same bracketed text as one inference token. If the raw filename is present,
241
+ project those weak labels back to character spans and then onto the current
242
+ tokenizer output. This keeps train/eval/inference preprocessing identical.
243
+ """
244
+ filename = item.get("filename")
245
+ source_tokens, source_labels, _repairs = repair_sequel_season_labels(item)
246
+ tokenizer_variant = getattr(tokenizer, "tokenizer_variant", "regex")
247
+
248
+ if not filename:
249
+ return align_tokens_for_tokenizer(source_tokens, source_labels, tokenizer)
250
+
251
+ # Current char datasets are already in the exact inference token space.
252
+ # Avoid re-scanning every filename during training.
253
+ if item.get("tokenizer_variant") == tokenizer_variant:
254
+ target_tokens = tokenizer.tokenize(filename)
255
+ if source_tokens == target_tokens:
256
+ return source_tokens, source_labels
257
+
258
+ projected = project_labels_from_filename(
259
+ filename=filename,
260
+ source_tokens=source_tokens,
261
+ source_labels=source_labels,
262
+ tokenizer=tokenizer,
263
+ )
264
+ if projected is not None:
265
+ return projected
266
+
267
+ # Fall back to the legacy behavior for synthetic fixtures or malformed rows.
268
+ return align_tokens_for_tokenizer(source_tokens, source_labels, tokenizer)
269
+
270
+
271
+ def training_labels_for_tokenizer(
272
+ item: Dict,
273
+ tokenizer: AnimeTokenizer,
274
+ apply_label_repairs: bool,
275
+ ) -> Tuple[List[str], List[str]]:
276
+ """Fast path for authoritative char JSONL rows used in full training."""
277
+ tokenizer_variant = getattr(tokenizer, "tokenizer_variant", "regex")
278
+ if not apply_label_repairs and item.get("tokenizer_variant") == tokenizer_variant:
279
+ tokens = item.get("tokens", [])
280
+ labels = item.get("labels", [])
281
+ filename = item.get("filename")
282
+ if len(tokens) == len(labels):
283
+ if tokenizer_variant != "char" or filename is None or tokens == list(str(filename)):
284
+ return tokens, labels
285
+ return labels_for_tokenizer(item, tokenizer)
286
+
287
+
288
+ def token_offsets_in_text(text: str, tokens: List[str]) -> Optional[List[Tuple[int, int]]]:
289
+ """Find token character offsets by scanning left to right."""
290
+ offsets: List[Tuple[int, int]] = []
291
+ cursor = 0
292
+ for token in tokens:
293
+ if token == "":
294
+ offsets.append((cursor, cursor))
295
+ continue
296
+ start = text.find(token, cursor)
297
+ if start < 0:
298
+ return None
299
+ end = start + len(token)
300
+ offsets.append((start, end))
301
+ cursor = end
302
+ return offsets
303
+
304
+
305
+ def project_source_labels_to_chars(
306
+ text: str,
307
+ source_tokens: List[str],
308
+ source_labels: List[str],
309
+ ) -> Optional[List[str]]:
310
+ """Project source token BIO labels to per-character entity names."""
311
+ offsets = token_offsets_in_text(text, source_tokens)
312
+ if offsets is None or len(source_tokens) != len(source_labels):
313
+ return None
314
+
315
+ char_entities = ["O"] * len(text)
316
+ for token, label, (start, end) in zip(source_tokens, source_labels, offsets):
317
+ if not label.startswith(("B-", "I-")):
318
+ continue
319
+ entity = label.split("-", 1)[1]
320
+
321
+ # Bracketed single-token metadata in older data often includes the
322
+ # brackets in the token. Keep container punctuation as O so a tokenizer
323
+ # that splits brackets can learn cleaner boundaries.
324
+ inner_start = start
325
+ inner_end = end
326
+ if len(token) >= 2 and token[0] in "[【(《" and token[-1] in "]】)》":
327
+ inner_start += 1
328
+ inner_end -= 1
329
+
330
+ for pos in range(inner_start, inner_end):
331
+ if 0 <= pos < len(char_entities):
332
+ char_entities[pos] = entity
333
+ return char_entities
334
+
335
+
336
+ def labels_from_char_projection(
337
+ text: str,
338
+ target_tokens: List[str],
339
+ char_entities: List[str],
340
+ ) -> Optional[List[str]]:
341
+ """Assign legal IOB2 labels to target tokens from per-character entities."""
342
+ offsets = token_offsets_in_text(text, target_tokens)
343
+ if offsets is None:
344
+ return None
345
+
346
+ labels: List[str] = []
347
+ active_entity: Optional[str] = None
348
+ for start, end in offsets:
349
+ span_entities = [
350
+ char_entities[pos]
351
+ for pos in range(start, end)
352
+ if 0 <= pos < len(char_entities) and char_entities[pos] != "O"
353
+ ]
354
+ if not span_entities:
355
+ labels.append("O")
356
+ active_entity = None
357
+ continue
358
+
359
+ entity = Counter(span_entities).most_common(1)[0][0]
360
+ prefix = "I" if active_entity == entity else "B"
361
+ labels.append(f"{prefix}-{entity}")
362
+ active_entity = entity
363
+ return labels
364
+
365
+
366
+ def project_labels_from_filename(
367
+ filename: str,
368
+ source_tokens: List[str],
369
+ source_labels: List[str],
370
+ tokenizer: AnimeTokenizer,
371
+ ) -> Optional[Tuple[List[str], List[str]]]:
372
+ """
373
+ Re-tokenize filename and project weak BIO labels onto that tokenizer.
374
+
375
+ Returns None when source tokens cannot be aligned to the filename.
376
+ """
377
+ char_entities = project_source_labels_to_chars(filename, source_tokens, source_labels)
378
+ if char_entities is None:
379
+ return None
380
+
381
+ target_tokens = tokenizer.tokenize(filename)
382
+ target_labels = labels_from_char_projection(filename, target_tokens, char_entities)
383
+ if target_labels is None or len(target_tokens) != len(target_labels):
384
+ return None
385
+ return target_tokens, target_labels
386
+
387
+
388
+ def create_datasets(
389
+ data_path: str,
390
+ tokenizer: AnimeTokenizer,
391
+ config: Config,
392
+ ) -> tuple:
393
+ """
394
+ Create train and validation datasets from a JSONL file.
395
+
396
+ The file is split by the first N samples for training,
397
+ the rest for validation based on config.train_split.
398
+
399
+ Returns:
400
+ (train_dataset, eval_dataset)
401
+ """
402
+ # Load all data to determine split
403
+ with open(data_path, 'r', encoding='utf-8') as f:
404
+ all_data = [json.loads(line) for line in f if line.strip()]
405
+
406
+ split_idx = int(len(all_data) * config.train_split)
407
+ train_data = all_data[:split_idx]
408
+ eval_data = all_data[split_idx:]
409
+
410
+ # Write temp files for each split
411
+ import tempfile
412
+ import os
413
+
414
+ train_file = os.path.join(tempfile.gettempdir(), "anime_train.jsonl")
415
+ eval_file = os.path.join(tempfile.gettempdir(), "anime_eval.jsonl")
416
+
417
+ with open(train_file, 'w', encoding='utf-8') as f:
418
+ for item in train_data:
419
+ f.write(json.dumps(item, ensure_ascii=False) + '\n')
420
+
421
+ with open(eval_file, 'w', encoding='utf-8') as f:
422
+ for item in eval_data:
423
+ f.write(json.dumps(item, ensure_ascii=False) + '\n')
424
+
425
+ train_dataset = AnimeDataset(
426
+ data_path=train_file,
427
+ tokenizer=tokenizer,
428
+ label2id=config.label2id,
429
+ max_length=config.max_seq_length,
430
+ )
431
+ eval_dataset = AnimeDataset(
432
+ data_path=eval_file,
433
+ tokenizer=tokenizer,
434
+ label2id=config.label2id,
435
+ max_length=config.max_seq_length,
436
+ )
437
+
438
+ return train_dataset, eval_dataset
439
+
440
+
441
+ if __name__ == "__main__":
442
+ # Quick test
443
+ cfg = Config()
444
+
445
+ tok = AnimeTokenizer()
446
+ # Build a minimal vocab
447
+ tok.build_vocab([["[ANi]", "test", "S2", "-", "03"],
448
+ ["[Baha]", "anime", "01"]])
449
+
450
+ ds = AnimeDataset(
451
+ data_path="data/synthetic.jsonl",
452
+ tokenizer=tok,
453
+ label2id=cfg.label2id,
454
+ max_length=cfg.max_seq_length,
455
+ )
456
+
457
+ print(f"Dataset size: {len(ds)}")
458
+ if len(ds) > 0:
459
+ sample = ds[0]
460
+ print(f"input_ids shape: {sample['input_ids'].shape}")
461
+ print(f"attention_mask shape: {sample['attention_mask'].shape}")
462
+ print(f"labels shape: {sample['labels'].shape}")
463
+ print(f"input_ids: {sample['input_ids'].tolist()}")
464
+ print(f"labels: {sample['labels'].tolist()}")
465
+ print(f"attention_mask: {sample['attention_mask'].tolist()}")
466
+
snapshots/anifilebert-dapt512-long/anifilebert/inference.py ADDED
@@ -0,0 +1,666 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Inference script for anime filename parser.
3
+
4
+ Loads a trained model and tokenizer, parses anime filenames,
5
+ and outputs structured metadata.
6
+
7
+ Usage:
8
+ python -m anifilebert.inference "[ANi] 葬送的芙莉莲 S2 - 03 [1080P][WEB-DL]"
9
+ python -m anifilebert.inference --input-file filenames.txt --output-file results.jsonl
10
+ """
11
+
12
+ import argparse
13
+ import json
14
+ import re
15
+ import sys
16
+ from typing import Dict, List, Optional, Tuple
17
+
18
+ import torch
19
+
20
+ from .config import Config
21
+ from .label_repairs import season_marker_number
22
+ from .labels import is_file_title_entity, is_path_title_entity, title_entity_priority, title_language
23
+ from .model import load_model
24
+ from .tokenizer import AnimeTokenizer, load_tokenizer
25
+
26
+
27
+ # Chinese number mapping
28
+ CN_NUM_MAP: Dict[str, int] = {
29
+ "一": 1, "二": 2, "三": 3, "四": 4, "五": 5,
30
+ "六": 6, "七": 7, "八": 8, "九": 9, "十": 10,
31
+ }
32
+
33
+
34
+ STANDALONE_SPECIAL_RE = re.compile(
35
+ r"^(?:"
36
+ r"(?:BD\s*)?Menu\s*\d{0,2}(?:-\d{1,2})?|"
37
+ r"NCOP\s*\d{0,2}|NCED\s*\d{0,2}|"
38
+ r"OP\s*\d{0,2}|ED(?:\s*E?\d{0,2})?|"
39
+ r"PV\s*\d{0,2}|CM\s*\d{0,2}|"
40
+ r"OVA\s*\d{0,2}|OAD\s*\d{0,2}|SP\s*\d{0,2}|IV\d+"
41
+ r")$",
42
+ re.I,
43
+ )
44
+
45
+ BRACKETED_SEARCH_SPECIAL_RE = re.compile(
46
+ r"[\[【((]\s*((?:檢索|检索|検索)\s*[::][^\]】))]+?)\s*[\]】))]"
47
+ )
48
+
49
+ NEW_SHOW_BRACKET_TITLE_RE = re.compile(
50
+ r"[★☆][^★☆\[\]【】()()]{0,24}(?:新番|月番)[^★☆\[\]【】()()]{0,24}[★☆]"
51
+ r"\s*[\[【((]\s*([^\]】))]+?)\s*[\]】))]"
52
+ )
53
+
54
+
55
+ def extract_season_number(text: str) -> Optional[int]:
56
+ """
57
+ Extract season number from various season formats.
58
+
59
+ Examples:
60
+ "S2" → 2, "Season 2" → 2, "第二季" → 2, "1st Season" → 1
61
+ """
62
+ marker_value = season_marker_number(text)
63
+ if marker_value is not None:
64
+ return marker_value
65
+
66
+ # Arabic digits
67
+ match = re.search(r'(\d+)', text)
68
+ if match:
69
+ return int(match.group(1))
70
+
71
+ # Chinese digits
72
+ for cn, num in CN_NUM_MAP.items():
73
+ if cn in text:
74
+ return num
75
+
76
+ return None
77
+
78
+
79
+ def extract_episode_number(text: str) -> Optional[int]:
80
+ """
81
+ Extract episode number from various episode formats.
82
+
83
+ Examples:
84
+ "03" → 3, "EP21" → 21, "第7话" → 7, "#01" → 1
85
+ """
86
+ match = re.search(r'(\d+)', text)
87
+ if match:
88
+ return int(match.group(1))
89
+ return None
90
+
91
+
92
+ def extract_resolution(text: str) -> Optional[str]:
93
+ """Extract resolution string (e.g., '1080P', '4K', '1920x1080')."""
94
+ # Strip brackets for matching
95
+ clean = text.strip("[]()【】")
96
+ return clean if clean else None
97
+
98
+
99
+ def normalize_field_text(text: str) -> str:
100
+ return trim_decorations(text).strip(" \t-_.")
101
+
102
+
103
+ def thin_source_priority(source: str) -> int:
104
+ normalized = source.lower().replace("_", "-").replace(" ", "")
105
+ if normalized in {
106
+ "nf", "netflix", "amzn", "baha", "cr", "abema", "dsnp", "u-next", "hulu", "at-x",
107
+ "web-dl", "webdl", "webrip", "web-rip", "bdrip", "bluray", "bdmv", "bd",
108
+ "dvdrip", "dvd", "tvrip", "hdtv",
109
+ }:
110
+ return 90
111
+ if normalized in {"chs", "cht", "gb", "big5", "jpn", "jp", "jpsc", "jptc", "繁中", "简中"}:
112
+ return 70
113
+ if normalized in {
114
+ "x264", "x265", "h.264", "h264", "h.265", "h265", "hevc", "avc", "av1",
115
+ "aac", "flac", "mp3", "dts", "opus", "10bit", "8bit", "hi10p", "ma10p",
116
+ "srt", "srtx2", "ass", "assx2",
117
+ }:
118
+ return 20
119
+ return 40 if re.search(r"[&+/,]", source) else 30
120
+
121
+
122
+ def normalize_source_text(text: str) -> str:
123
+ text = re.sub(r"\s+", "", text.strip())
124
+ text = re.sub(r"(?i)WEB[_ ]?DL", "WEB-DL", text)
125
+ text = re.sub(r"(?i)WEB[_ ]?Rip", "WebRip", text)
126
+ text = re.sub(r"(?i)U[_ ]?NEXT", "U-NEXT", text)
127
+ text = re.sub(r"(?i)AT[_ ]?X", "AT-X", text)
128
+ return text.replace("_", "-")
129
+
130
+
131
+ def choose_thin_source(sources: List[str]) -> Optional[str]:
132
+ cleaned = [normalize_source_text(source) for source in sources if normalize_field_text(source)]
133
+ if not cleaned:
134
+ return None
135
+ return max(enumerate(cleaned), key=lambda item: (thin_source_priority(item[1]), -item[0]))[1]
136
+
137
+
138
+ def normalize_standalone_special(text: str) -> Optional[str]:
139
+ special = normalize_field_text(text)
140
+ if not special:
141
+ return None
142
+ return special if STANDALONE_SPECIAL_RE.fullmatch(special) else None
143
+
144
+
145
+ def extract_bracketed_search_special(text: str) -> Optional[str]:
146
+ """Return bracketed search-note tags such as [檢索:...]."""
147
+ for match in BRACKETED_SEARCH_SPECIAL_RE.finditer(text):
148
+ special = normalize_field_text(match.group(1))
149
+ if special:
150
+ return special
151
+ return None
152
+
153
+
154
+ def extract_new_show_bracket_title(text: str) -> Optional[str]:
155
+ """Return title from release-promo layouts like ★04月新番★[葬送的芙莉莲]."""
156
+ for match in NEW_SHOW_BRACKET_TITLE_RE.finditer(text):
157
+ title = normalize_field_text(match.group(1))
158
+ if title:
159
+ return title
160
+ return None
161
+
162
+
163
+ def display_token(token: str) -> str:
164
+ """Make whitespace tokens visible in debug output."""
165
+ if token == " ":
166
+ return "<SPACE>"
167
+ if token == "\t":
168
+ return "<TAB>"
169
+ return token
170
+
171
+
172
+ def trim_decorations(text: str) -> str:
173
+ """Trim outer release brackets from an extracted entity."""
174
+ return text.strip().strip("[]()【】《》()").strip()
175
+
176
+
177
+ def join_entity_tokens(tokens: List[str], tokenizer: Optional[AnimeTokenizer] = None) -> str:
178
+ """Join entity tokens according to the tokenizer granularity."""
179
+ if tokenizer is not None and getattr(tokenizer, "tokenizer_variant", "regex") == "char":
180
+ return "".join(tokens)
181
+ text = "".join(tokens)
182
+ if " " in tokens:
183
+ return text
184
+ return text
185
+
186
+
187
+ def labels_to_entities(
188
+ tokens: List[str],
189
+ labels: List[str],
190
+ tokenizer: Optional[AnimeTokenizer] = None,
191
+ ) -> List[Tuple[str, str]]:
192
+ """
193
+ Convert BIO labels into entity spans.
194
+
195
+ Illegal orphan I-X labels start a new entity so debug output exposes the
196
+ model behavior instead of silently dropping tokens.
197
+ """
198
+ entities: List[Tuple[str, str]] = []
199
+ current_entity: Optional[str] = None
200
+ current_tokens: List[str] = []
201
+
202
+ for token, label in zip(tokens, labels):
203
+ if label.startswith("B-"):
204
+ if current_entity:
205
+ entities.append((current_entity, join_entity_tokens(current_tokens, tokenizer)))
206
+ current_entity = label[2:]
207
+ current_tokens = [token]
208
+ elif label.startswith("I-"):
209
+ entity_type = label[2:]
210
+ if current_entity == entity_type:
211
+ current_tokens.append(token)
212
+ else:
213
+ if current_entity:
214
+ entities.append((current_entity, join_entity_tokens(current_tokens, tokenizer)))
215
+ current_entity = entity_type
216
+ current_tokens = [token]
217
+ else:
218
+ if current_entity:
219
+ entities.append((current_entity, join_entity_tokens(current_tokens, tokenizer)))
220
+ current_entity = None
221
+ current_tokens = []
222
+
223
+ if current_entity:
224
+ entities.append((current_entity, join_entity_tokens(current_tokens, tokenizer)))
225
+ return entities
226
+
227
+
228
+ def is_allowed_bio_transition(previous_label: str, label: str) -> bool:
229
+ """Return whether previous_label -> label is valid under IOB2."""
230
+ if label.startswith("I-"):
231
+ entity = label[2:]
232
+ return previous_label in {f"B-{entity}", f"I-{entity}"}
233
+ return True
234
+
235
+
236
+ _BIO_TRANSITION_CACHE: Dict[Tuple[Tuple[int, str], ...], torch.Tensor] = {}
237
+
238
+
239
+ def bio_transition_mask(id2label: Dict[int, str]) -> torch.Tensor:
240
+ """Return cached valid-transition mask shaped [prev_label, next_label]."""
241
+ key = tuple(sorted((int(label_id), label) for label_id, label in id2label.items()))
242
+ cached = _BIO_TRANSITION_CACHE.get(key)
243
+ if cached is not None:
244
+ return cached
245
+ num_labels = max(id2label) + 1 if id2label else 0
246
+ mask = torch.zeros((num_labels, num_labels), dtype=torch.bool)
247
+ for prev_id in range(num_labels):
248
+ prev_label = id2label.get(prev_id, "O")
249
+ for label_id in range(num_labels):
250
+ label = id2label.get(label_id, "O")
251
+ mask[prev_id, label_id] = is_allowed_bio_transition(prev_label, label)
252
+ _BIO_TRANSITION_CACHE[key] = mask
253
+ return mask
254
+
255
+
256
+ def constrained_bio_decode(emissions: torch.Tensor, id2label: Dict[int, str]) -> List[int]:
257
+ """
258
+ Decode token logits with hard BIO transition constraints.
259
+
260
+ This is a lightweight CRF-style Viterbi decoder without learned transition
261
+ weights. It prevents impossible orphan I-X spans at inference time.
262
+ """
263
+ if emissions.numel() == 0:
264
+ return []
265
+
266
+ num_tokens, num_labels = emissions.shape
267
+ scores = emissions.detach().cpu()
268
+ transition_mask = bio_transition_mask(id2label)
269
+ backpointers = torch.zeros((num_tokens, num_labels), dtype=torch.long)
270
+ dp = torch.full((num_labels,), float("-inf"))
271
+
272
+ for label_id in range(num_labels):
273
+ label = id2label.get(label_id, "O")
274
+ if not label.startswith("I-"):
275
+ dp[label_id] = scores[0, label_id]
276
+
277
+ for idx in range(1, num_tokens):
278
+ candidates = dp.unsqueeze(1).expand(num_labels, num_labels)
279
+ candidates = candidates.masked_fill(~transition_mask, float("-inf"))
280
+ best_scores, best_prev = candidates.max(dim=0)
281
+ next_dp = best_scores + scores[idx]
282
+ backpointers[idx] = best_prev
283
+ dp = next_dp
284
+
285
+ best_last = int(torch.argmax(dp).item())
286
+ decoded = [best_last]
287
+ for idx in range(num_tokens - 1, 0, -1):
288
+ decoded.append(int(backpointers[idx, decoded[-1]].item()))
289
+ decoded.reverse()
290
+ return decoded
291
+
292
+
293
+ def empty_parse_result() -> Dict:
294
+ return {
295
+ "title": None,
296
+ "season": None,
297
+ "episode": None,
298
+ "group": None,
299
+ "resolution": None,
300
+ "source": None,
301
+ "special": None,
302
+ "title_candidates": [],
303
+ "tags": [],
304
+ }
305
+
306
+
307
+ def append_unique(values: List[str], value: str) -> None:
308
+ if value and value not in values:
309
+ values.append(value)
310
+
311
+
312
+ def infer_title_kind(text: str) -> str:
313
+ has_latin = any(ch.isascii() and ch.isalpha() for ch in text)
314
+ has_han = any("\u4e00" <= ch <= "\u9fff" for ch in text)
315
+ has_kana = any("\u3040" <= ch <= "\u30ff" or "\u31f0" <= ch <= "\u31ff" for ch in text)
316
+ if has_kana:
317
+ return "jpn"
318
+ if has_latin and has_han:
319
+ return "mixed"
320
+ if has_han:
321
+ return "chs"
322
+ if has_latin:
323
+ return "latin"
324
+ return "mixed"
325
+
326
+
327
+ def append_title_candidate(result: Dict, text: str, entity: Optional[str], source: str) -> None:
328
+ if not text:
329
+ return
330
+ kind = title_language(entity).lower() if entity else infer_title_kind(text)
331
+ candidate = {"text": text, "kind": kind, "source": source}
332
+ if candidate not in result["title_candidates"]:
333
+ result["title_candidates"].append(candidate)
334
+
335
+
336
+ def choose_title_span(spans: List[Tuple[str, str, int]]) -> Optional[str]:
337
+ if not spans:
338
+ return None
339
+ return min(spans, key=lambda item: (title_entity_priority(item[0]), item[2]))[1]
340
+
341
+
342
+ def postprocess(
343
+ tokens: List[str],
344
+ labels: List[str],
345
+ tokenizer: Optional[AnimeTokenizer] = None,
346
+ ) -> Dict:
347
+ """
348
+ Convert BIO-labeled tokens into structured metadata.
349
+
350
+ Merges consecutive B- / I- tokens of the same entity type,
351
+ then extracts structured fields.
352
+ """
353
+ result: Dict = empty_parse_result()
354
+
355
+ entities = labels_to_entities(tokens, labels, tokenizer)
356
+
357
+ grouped_entities: Dict[str, List[str]] = {}
358
+ file_title_spans: List[Tuple[str, str, int]] = []
359
+ path_title_spans: List[Tuple[str, str, int]] = []
360
+ for index, (entity_type, text) in enumerate(entities):
361
+ grouped_entities.setdefault(entity_type, []).append(text)
362
+ title = normalize_field_text(text)
363
+ if not title:
364
+ continue
365
+ if is_file_title_entity(entity_type):
366
+ file_title_spans.append((entity_type, title, index))
367
+ elif is_path_title_entity(entity_type):
368
+ path_title_spans.append((entity_type, title, index))
369
+
370
+ for entity, title, _index in file_title_spans:
371
+ append_title_candidate(result, title, entity, "file")
372
+ for entity, title, _index in path_title_spans:
373
+ append_title_candidate(result, title, entity, "path")
374
+
375
+ if file_title_spans and all(entity == "TITLE" for entity, _title, _index in file_title_spans):
376
+ result["title"] = " ".join(title for _entity, title, _index in file_title_spans)
377
+ else:
378
+ result["title"] = choose_title_span(file_title_spans) or choose_title_span(path_title_spans)
379
+
380
+ for text in grouped_entities.get("SEASON", []):
381
+ season_num = extract_season_number(text)
382
+ if season_num is not None:
383
+ result["season"] = season_num
384
+ break
385
+ if result["season"] is None:
386
+ for text in grouped_entities.get("PATH_SEASON", []):
387
+ season_num = extract_season_number(text)
388
+ if season_num is not None:
389
+ result["season"] = season_num
390
+ break
391
+
392
+ for text in grouped_entities.get("EPISODE", []):
393
+ ep_num = extract_episode_number(text)
394
+ if ep_num is not None:
395
+ if result["episode"] is None:
396
+ result["episode"] = ep_num
397
+
398
+ for text in grouped_entities.get("GROUP", []):
399
+ group = normalize_field_text(text)
400
+ if result["group"] is None:
401
+ result["group"] = group
402
+
403
+ for text in grouped_entities.get("SPECIAL", []):
404
+ special = normalize_field_text(text)
405
+ result["special"] = special
406
+
407
+ for text in grouped_entities.get("RESOLUTION", []):
408
+ res = extract_resolution(text)
409
+ if res:
410
+ result["resolution"] = res
411
+
412
+ for text in grouped_entities.get("TAG", []):
413
+ tag = normalize_field_text(text)
414
+ append_unique(result["tags"], tag)
415
+
416
+ result["source"] = choose_thin_source(grouped_entities.get("SOURCE", []))
417
+
418
+ whole_text = join_entity_tokens(tokens, tokenizer)
419
+ new_show_title = extract_new_show_bracket_title(whole_text)
420
+ if new_show_title is not None and (
421
+ result["title"] is None
422
+ or result["title"].startswith(("★", "☆"))
423
+ or "新番" in result["title"]
424
+ or "月番" in result["title"]
425
+ ):
426
+ result["title"] = new_show_title
427
+ append_title_candidate(result, new_show_title, None, "file")
428
+
429
+ search_special = extract_bracketed_search_special(whole_text)
430
+ if search_special is not None:
431
+ result["special"] = search_special
432
+
433
+ standalone_special = normalize_standalone_special(whole_text)
434
+ if standalone_special is not None:
435
+ result.update(
436
+ {
437
+ "title": None,
438
+ "season": None,
439
+ "episode": None,
440
+ "group": None,
441
+ "resolution": None,
442
+ "source": None,
443
+ "special": standalone_special,
444
+ "title_candidates": [],
445
+ "tags": [],
446
+ }
447
+ )
448
+
449
+ return result
450
+
451
+
452
+ def parse_filename(
453
+ filename: str,
454
+ model: torch.nn.Module,
455
+ tokenizer: AnimeTokenizer,
456
+ id2label: Dict[int, str],
457
+ max_length: int = 64,
458
+ debug: bool = False,
459
+ constrain_bio: bool = True,
460
+ ) -> Dict:
461
+ """
462
+ Parse an anime filename and extract structured metadata.
463
+
464
+ Args:
465
+ filename: Raw anime filename string.
466
+ model: Trained BertForTokenClassification model.
467
+ tokenizer: AnimeTokenizer instance.
468
+ id2label: Mapping from label ID to label string.
469
+ max_length: Maximum sequence length (including special tokens).
470
+
471
+ Returns:
472
+ Dict with parsed fields (title, season, episode, etc.).
473
+ """
474
+ # Tokenize
475
+ tokens = tokenizer.tokenize(filename)
476
+ if not tokens:
477
+ return empty_parse_result()
478
+
479
+ # Convert to input IDs
480
+ input_ids = tokenizer.convert_tokens_to_ids(tokens)
481
+ embedding_size = model.get_input_embeddings().weight.shape[0]
482
+ out_of_range_tokens = [
483
+ token for token, token_id in zip(tokens, input_ids)
484
+ if token_id >= embedding_size
485
+ ]
486
+ if out_of_range_tokens:
487
+ input_ids = [
488
+ token_id if token_id < embedding_size else tokenizer.unk_token_id
489
+ for token_id in input_ids
490
+ ]
491
+ unk_token_id = tokenizer.unk_token_id
492
+ unk_tokens = [token for token, token_id in zip(tokens, input_ids) if token_id == unk_token_id]
493
+
494
+ # Add special tokens
495
+ input_ids = [tokenizer.cls_token_id] + input_ids + [tokenizer.sep_token_id]
496
+ attention_mask = [1] * len(input_ids)
497
+
498
+ # Truncate if needed
499
+ if len(input_ids) > max_length:
500
+ input_ids = [input_ids[0]] + input_ids[1:max_length - 1] + [tokenizer.sep_token_id]
501
+ attention_mask = [1] * len(input_ids)
502
+
503
+ # Pad
504
+ pad_len = max_length - len(input_ids)
505
+ if pad_len > 0:
506
+ input_ids += [tokenizer.pad_token_id] * pad_len
507
+ attention_mask += [0] * pad_len
508
+
509
+ # Predict
510
+ device = next(model.parameters()).device
511
+ input_tensor = torch.tensor([input_ids], device=device)
512
+ mask_tensor = torch.tensor([attention_mask], device=device)
513
+
514
+ # Remove special token predictions
515
+ # Count real tokens used (minus CLS/SEP)
516
+ real_token_count = len(tokens)
517
+ # Truncate real tokens if we had to truncate
518
+ available = min(real_token_count, max_length - 2)
519
+ if available <= 0:
520
+ return empty_parse_result()
521
+
522
+ with torch.no_grad():
523
+ logits = model(input_ids=input_tensor, attention_mask=mask_tensor).logits
524
+ token_logits = logits[0, 1:1 + available, :]
525
+ probabilities = torch.softmax(token_logits, dim=-1)
526
+ scores, greedy_predictions = torch.max(probabilities, dim=-1)
527
+ decoder_name = "greedy"
528
+ if constrain_bio:
529
+ if hasattr(model, "decode"):
530
+ pred_labels = model.decode(logits, mask_tensor)[0][:available]
531
+ decoder_name = "crf"
532
+ else:
533
+ pred_labels = constrained_bio_decode(token_logits, id2label)
534
+ decoder_name = "constrained_bio"
535
+ selected_scores = [
536
+ probabilities[idx, label_id].detach().cpu().item()
537
+ for idx, label_id in enumerate(pred_labels)
538
+ ]
539
+ else:
540
+ pred_labels = greedy_predictions.detach().cpu().tolist()
541
+ selected_scores = scores.detach().cpu().tolist()
542
+ label_strings = [id2label.get(p, "O") for p in pred_labels]
543
+
544
+ # Post-process
545
+ result = postprocess(
546
+ tokens[:available],
547
+ label_strings,
548
+ tokenizer=tokenizer,
549
+ )
550
+ if debug:
551
+ result["_debug"] = {
552
+ "tokenizer_variant": getattr(tokenizer, "tokenizer_variant", "regex"),
553
+ "decoder": decoder_name,
554
+ "postprocess": "thin_normalize",
555
+ "max_length": max_length,
556
+ "token_count": len(tokens),
557
+ "available_token_count": available,
558
+ "truncated": len(tokens) > available,
559
+ "unk_count": len(unk_tokens),
560
+ "unk_rate": len(unk_tokens) / len(tokens) if tokens else 0.0,
561
+ "unk_tokens": unk_tokens[:50],
562
+ "vocab_mismatch": bool(out_of_range_tokens),
563
+ "model_embedding_size": int(embedding_size),
564
+ "tokenizer_vocab_size": int(tokenizer.vocab_size),
565
+ "out_of_range_tokens": out_of_range_tokens[:50],
566
+ "tokens": tokens[:available],
567
+ "labels": label_strings,
568
+ "scores": [round(float(score), 4) for score in selected_scores],
569
+ "token_table": [
570
+ {
571
+ "i": i,
572
+ "token": display_token(token),
573
+ "id": int(token_id),
574
+ "label": label,
575
+ "score": round(float(score), 4),
576
+ }
577
+ for i, (token, token_id, label, score) in enumerate(
578
+ zip(tokens[:available], input_ids[1:1 + available], label_strings, selected_scores)
579
+ )
580
+ ],
581
+ "entities": [
582
+ {"type": entity_type, "text": text}
583
+ for entity_type, text in labels_to_entities(tokens[:available], label_strings, tokenizer)
584
+ ],
585
+ }
586
+ return result
587
+
588
+
589
+ def main():
590
+ parser = argparse.ArgumentParser(description="Anime filename parser")
591
+ parser.add_argument("filename", nargs="?", type=str, help="Anime filename to parse")
592
+ parser.add_argument("--input-file", type=str, help="File with filenames (one per line)")
593
+ parser.add_argument("--output-file", type=str, help="Output file for results (JSONL)")
594
+ parser.add_argument("--model-dir", type=str, default=".",
595
+ help="Path to trained model directory")
596
+ parser.add_argument("--tokenizer", choices=["regex", "char"], default=None,
597
+ help="Tokenizer variant override. Defaults to checkpoint metadata")
598
+ parser.add_argument("--max-length", type=int, default=64,
599
+ help="Maximum sequence length")
600
+ parser.add_argument("--debug", action="store_true",
601
+ help="Include tokenizer, labels, scores, and entity spans in JSON output")
602
+ parser.add_argument("--no-constrained-bio", action="store_true",
603
+ help="Use greedy per-token decoding instead of constrained BIO Viterbi")
604
+ args = parser.parse_args()
605
+
606
+ # Load config
607
+ cfg = Config()
608
+
609
+ # Load tokenizer
610
+ print(f"Loading tokenizer from {args.model_dir}...", file=sys.stderr)
611
+ tokenizer = load_tokenizer(args.model_dir, args.tokenizer)
612
+
613
+ # Load model
614
+ print(f"Loading model from {args.model_dir}...", file=sys.stderr)
615
+ model = load_model(args.model_dir)
616
+ model.eval()
617
+
618
+ id2label = {int(k): v for k, v in getattr(model.config, "id2label", cfg.id2label).items()}
619
+ max_length = args.max_length
620
+ if max_length == 64:
621
+ max_length = int(getattr(model.config, "max_seq_length", max_length))
622
+
623
+ # Process filenames
624
+ filenames_to_parse: List[str] = []
625
+
626
+ if args.filename:
627
+ filenames_to_parse.append(args.filename)
628
+
629
+ if args.input_file:
630
+ with open(args.input_file, 'r', encoding='utf-8') as f:
631
+ filenames_to_parse.extend(line.strip() for line in f if line.strip())
632
+
633
+ if not filenames_to_parse:
634
+ # Read from stdin
635
+ filenames_to_parse.extend(sys.stdin.read().strip().splitlines())
636
+
637
+ # Parse and output
638
+ results: List[Dict] = []
639
+ for fn in filenames_to_parse:
640
+ if not fn.strip():
641
+ continue
642
+ result = parse_filename(
643
+ fn,
644
+ model,
645
+ tokenizer,
646
+ id2label,
647
+ max_length,
648
+ debug=args.debug,
649
+ constrain_bio=not args.no_constrained_bio,
650
+ )
651
+ result["_input"] = fn
652
+ results.append(result)
653
+
654
+ if args.output_file is None:
655
+ print(json.dumps(result, ensure_ascii=False))
656
+
657
+ if args.output_file:
658
+ with open(args.output_file, 'w', encoding='utf-8') as f:
659
+ for r in results:
660
+ f.write(json.dumps(r, ensure_ascii=False) + '\n')
661
+ print(f"Results saved to {args.output_file}", file=sys.stderr)
662
+
663
+
664
+ if __name__ == "__main__":
665
+ main()
666
+
snapshots/anifilebert-dapt512-long/anifilebert/label_repairs.py ADDED
@@ -0,0 +1,520 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Deterministic label repairs for known weak-label blind spots."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from dataclasses import dataclass
7
+ from typing import Dict, Iterable, List, Optional, Sequence, Tuple
8
+
9
+ from .labels import is_same_entity_label, is_season_like_label, is_title_like_label, label_entity
10
+
11
+
12
+ SEPARATOR_CHARS = set(" \t-_.|~~")
13
+
14
+ ROMAN_NUMERAL_VALUES = {
15
+ "II": 2,
16
+ "III": 3,
17
+ "IV": 4,
18
+ "V": 5,
19
+ "VI": 6,
20
+ "VII": 7,
21
+ "VIII": 8,
22
+ "IX": 9,
23
+ "Ⅱ": 2,
24
+ "Ⅲ": 3,
25
+ "Ⅳ": 4,
26
+ "Ⅴ": 5,
27
+ "Ⅵ": 6,
28
+ "Ⅶ": 7,
29
+ "Ⅷ": 8,
30
+ "Ⅸ": 9,
31
+ }
32
+
33
+ CN_NUMERAL_VALUES = {
34
+ "一": 1,
35
+ "二": 2,
36
+ "兩": 2,
37
+ "两": 2,
38
+ "貳": 2,
39
+ "贰": 2,
40
+ "弐": 2,
41
+ "弍": 2,
42
+ "三": 3,
43
+ "參": 3,
44
+ "叁": 3,
45
+ "参": 3,
46
+ "四": 4,
47
+ "肆": 4,
48
+ "五": 5,
49
+ "伍": 5,
50
+ "六": 6,
51
+ "陸": 6,
52
+ "陆": 6,
53
+ "七": 7,
54
+ "柒": 7,
55
+ "八": 8,
56
+ "捌": 8,
57
+ "九": 9,
58
+ "玖": 9,
59
+ "十": 10,
60
+ }
61
+
62
+ READING_MARKER_VALUES = {
63
+ "ni no sara": 2,
64
+ "ni no shou": 2,
65
+ "ni no sho": 2,
66
+ "ni no syo": 2,
67
+ "ni no shō": 2,
68
+ "ni gakki": 2,
69
+ "sono ni": 2,
70
+ "san no sara": 3,
71
+ "san no shou": 3,
72
+ "san no sho": 3,
73
+ "san no syo": 3,
74
+ "yon no sara": 4,
75
+ "shi no sara": 4,
76
+ "shin no sara": 4,
77
+ "go no sara": 5,
78
+ "gou no sara": 5,
79
+ }
80
+
81
+ # Bare "Ni" is often the Japanese particle に in romanized titles. Only repair
82
+ # it for titles that have been verified as a sequel marker in the release name.
83
+ STANDALONE_NI_SEASON_BASES = {
84
+ "Kakuriyo no Yadomeshi": 2,
85
+ }
86
+
87
+ EPISODE_CONTEXT_RE = re.compile(
88
+ r"^\s*(?:"
89
+ r"[-_]\s*(?:\d{1,4}|NCOP|NCED|OP|ED|OVA|OAD|SP|END)\b|"
90
+ r"#\s*\d{1,4}|"
91
+ r"[\[\(【《]\s*(?:EP?|#)?\d{1,4}"
92
+ r")",
93
+ re.I,
94
+ )
95
+
96
+ EPISODE_SPAN_RE = re.compile(
97
+ r"(?:"
98
+ r"[Ss]\d{1,2}[Ee]\d{1,4}(?:v\d+)?|"
99
+ r"(?:^|[\s._])[-_]\s*\d{1,4}(?:v\d+)?(?=$|[\s._\-\]\)】》\[])|"
100
+ r"[\[\(【《](?:EP?|#)?\d{1,4}(?:v\d+)?[\]\)】》]|"
101
+ r"(?:^|[\s._\-\[\(【《#])(?:EP?|第|#)\d{1,4}(?:v\d+)?(?:[话話集])?(?=$|[\s._\-\]\)】》])"
102
+ r")",
103
+ re.I,
104
+ )
105
+ BRACKET_RE = re.compile(r"\[([^\]]*)\]|\(([^)]*)\)|【([^】]*)】|《([^》]*)》")
106
+ RESOLUTION_RE = re.compile(r"(?<![A-Za-z0-9])(?:\d{3,4}[pP]|\d[Kk]|\d{3,4}[xX×]\d{3,4})(?![A-Za-z0-9])")
107
+ SOURCE_TOKEN_PATTERN = (
108
+ r"WEB[-_ ]?DL|WEB[-_ ]?Rip|BDRip|BluRay|BDMV|BD|DVDRip|DVD|TVRip|HDTV|"
109
+ r"Netflix|NF|AMZN|Baha|CR|ABEMA|DSNP|U[-_ ]?NEXT|Hulu|AT[-_ ]?X|"
110
+ r"x26[45]|h\.?26[45]|HEVC|AVC|AV1|AAC\d*(?:\.\d+)?|AAC|FLAC|MP3|DTS|Opus|"
111
+ r"CHS|CHT|GB|BIG5|JPN?|JPSC|JPTC|繁中|简中"
112
+ )
113
+ SOURCE_RE = re.compile(rf"(?<![A-Za-z0-9])(?:{SOURCE_TOKEN_PATTERN})(?![A-Za-z0-9])", re.I)
114
+ SOURCE_TAG_RE = re.compile(
115
+ rf"^(?:{SOURCE_TOKEN_PATTERN})(?:\s*(?:[&+/,_-]|,\s*)\s*(?:{SOURCE_TOKEN_PATTERN}))*$",
116
+ re.I,
117
+ )
118
+ SPECIAL_TAG_RE = re.compile(
119
+ r"^(?:檢索|检索|搜索|搜寻|搜尋|别名|別名|alias|search|keyword)\s*[::].+",
120
+ re.I,
121
+ )
122
+ SPECIAL_CODE_RE = re.compile(
123
+ r"^(?:NCOP|NCED|OP|ED|PV|CM)\d*$|^IV\d+$|^(?:OVA|OAD|SP)\d*$",
124
+ re.I,
125
+ )
126
+
127
+ READING_MARKER_RE = re.compile(
128
+ r"(?<![A-Za-z0-9])"
129
+ r"(?P<marker>"
130
+ r"Ni\s+no\s+(?:Sara|Shou|Sho|Syo|Shō)|"
131
+ r"San\s+no\s+(?:Sara|Shou|Sho|Syo)|"
132
+ r"(?:Yon|Shi|Shin)\s+no\s+Sara|"
133
+ r"(?:Go|Gou)\s+no\s+Sara|"
134
+ r"Ni\s+Gakki|"
135
+ r"Sono\s+Ni"
136
+ r")"
137
+ r"(?![A-Za-z0-9])",
138
+ )
139
+
140
+ ROMAN_MARKER_RE = re.compile(
141
+ r"(?<![A-Za-z0-9])"
142
+ r"(?P<marker>II|III|IV|V|VI|VII|VIII|IX|[ⅡⅢⅣⅤⅥⅦⅧⅨ])"
143
+ r"(?![A-Za-z0-9])"
144
+ )
145
+
146
+ CJK_MARKER_RE = re.compile(
147
+ r"(?P<marker>"
148
+ r"[一二三四五六七八九十兩两貳贰弐弍參叁参肆伍陸陆柒捌玖](?:\s*(?:ノ|の|之)\s*(?:章|期|季|部))?|"
149
+ r"第[一二三四五六七八九十兩两貳贰弐弍參叁参肆伍陸陆柒捌玖\d]+[季期部章]"
150
+ r")"
151
+ )
152
+
153
+
154
+ @dataclass(frozen=True)
155
+ class LabelRepair:
156
+ kind: str
157
+ marker: str
158
+ value: int
159
+ start: int
160
+ end: int
161
+
162
+
163
+ def clean_marker_text(text: str) -> str:
164
+ return text.strip().strip("[]()【】《》()").strip()
165
+
166
+
167
+ def cn_number_to_int(text: str) -> Optional[int]:
168
+ text = text.strip()
169
+ if text.isdigit():
170
+ return int(text)
171
+ if text in CN_NUMERAL_VALUES:
172
+ return CN_NUMERAL_VALUES[text]
173
+ values = CN_NUMERAL_VALUES
174
+ if text.startswith("十") and len(text) == 2:
175
+ return 10 + values.get(text[1], 0)
176
+ if text.endswith("十") and len(text) == 2:
177
+ return values.get(text[0], 0) * 10
178
+ if "十" in text and len(text) == 3:
179
+ return values.get(text[0], 0) * 10 + values.get(text[2], 0)
180
+ return None
181
+
182
+
183
+ def season_marker_number(text: str) -> Optional[int]:
184
+ """Return season number for compact sequel markers such as II or Ni no Sara."""
185
+ clean = clean_marker_text(text)
186
+ if not clean:
187
+ return None
188
+
189
+ if clean in ROMAN_NUMERAL_VALUES:
190
+ return ROMAN_NUMERAL_VALUES[clean]
191
+
192
+ lowered = re.sub(r"\s+", " ", clean.lower()).strip()
193
+ if lowered in READING_MARKER_VALUES:
194
+ return READING_MARKER_VALUES[lowered]
195
+ if lowered == "ni":
196
+ return 2
197
+
198
+ explicit = re.fullmatch(r"第(.+)[季期部章]", clean)
199
+ if explicit:
200
+ return cn_number_to_int(explicit.group(1))
201
+
202
+ cjk = re.fullmatch(r"([一二三四五六七八九十兩两貳贰弐弍參叁参肆伍陸陆柒捌玖])(?:\s*(?:ノ|の|之)\s*(?:章|期|季|部))?", clean)
203
+ if cjk:
204
+ return cn_number_to_int(cjk.group(1))
205
+
206
+ return None
207
+
208
+
209
+ def token_offsets_in_text(text: str, tokens: Sequence[str]) -> Optional[List[Tuple[int, int]]]:
210
+ offsets: List[Tuple[int, int]] = []
211
+ cursor = 0
212
+ for token in tokens:
213
+ if token == "":
214
+ offsets.append((cursor, cursor))
215
+ continue
216
+ position = text.find(token, cursor)
217
+ if position < 0:
218
+ return None
219
+ end = position + len(token)
220
+ offsets.append((position, end))
221
+ cursor = end
222
+ return offsets
223
+
224
+
225
+ def has_episode_context(text: str, marker_end: int) -> bool:
226
+ tail = text[marker_end:]
227
+ if EPISODE_CONTEXT_RE.match(tail):
228
+ return True
229
+
230
+ # Some releases put a season marker at the end of a title bracket and the
231
+ # episode in the next bracket: `[Title 貳之章][01]`.
232
+ tail = tail.lstrip()
233
+ tail = re.sub(r"^[\]\)】》]\s*", "", tail)
234
+ tail = re.sub(
235
+ r"^(?:[\[\(【《]\s*(?:menu|menus|bdmenu|ncop|nced|op|ed|ova|oad|sp)\s*[\]\)】》]\s*){0,2}",
236
+ "",
237
+ tail,
238
+ flags=re.I,
239
+ )
240
+ return bool(EPISODE_CONTEXT_RE.match(tail))
241
+
242
+
243
+ def find_sequel_season_markers(text: str) -> List[LabelRepair]:
244
+ """Find high-confidence sequel markers that should be labeled as SEASON."""
245
+ repairs: List[LabelRepair] = []
246
+
247
+ for pattern, kind in (
248
+ (READING_MARKER_RE, "reading"),
249
+ (ROMAN_MARKER_RE, "roman"),
250
+ (CJK_MARKER_RE, "cjk"),
251
+ ):
252
+ for match in pattern.finditer(text):
253
+ marker = match.group("marker")
254
+ value = season_marker_number(marker)
255
+ if value is None or not has_episode_context(text, match.end()):
256
+ continue
257
+ repairs.append(LabelRepair(kind, marker, value, match.start(), match.end()))
258
+
259
+ for base, value in STANDALONE_NI_SEASON_BASES.items():
260
+ pattern = re.compile(rf"(?<![A-Za-z0-9]){re.escape(base)}\s+(?P<marker>Ni)(?![A-Za-z0-9])")
261
+ for match in pattern.finditer(text):
262
+ if not has_episode_context(text, match.end("marker")):
263
+ continue
264
+ repairs.append(
265
+ LabelRepair(
266
+ kind="verified_bare_ni",
267
+ marker=match.group("marker"),
268
+ value=value,
269
+ start=match.start("marker"),
270
+ end=match.end("marker"),
271
+ )
272
+ )
273
+
274
+ repairs.sort(key=lambda item: (item.start, item.end))
275
+ deduped: List[LabelRepair] = []
276
+ for repair in repairs:
277
+ if deduped and repair.start < deduped[-1].end:
278
+ previous = deduped[-1]
279
+ if (repair.end - repair.start) > (previous.end - previous.start):
280
+ deduped[-1] = repair
281
+ continue
282
+ deduped.append(repair)
283
+ return deduped
284
+
285
+
286
+ def labels_have_season_before(labels: Sequence[str], offsets: Sequence[Tuple[int, int]], marker_start: int) -> bool:
287
+ return any(is_season_like_label(label) and end <= marker_start for label, (_start, end) in zip(labels, offsets))
288
+
289
+
290
+ def token_indices_for_span(offsets: Sequence[Tuple[int, int]], start: int, end: int) -> List[int]:
291
+ return [
292
+ idx for idx, (tok_start, tok_end) in enumerate(offsets)
293
+ if tok_start < end and tok_end > start
294
+ ]
295
+
296
+
297
+ def label_span(labels: List[str], indices: Sequence[int], entity: str) -> None:
298
+ previous_is_same_entity = bool(indices) and indices[0] > 0 and is_same_entity_label(labels[indices[0] - 1], entity)
299
+ first = not previous_is_same_entity
300
+ for idx in indices:
301
+ labels[idx] = f"B-{entity}" if first else f"I-{entity}"
302
+ first = False
303
+
304
+
305
+ def label_span_if_changed(labels: List[str], indices: Sequence[int], entity: str) -> bool:
306
+ previous_is_same_entity = bool(indices) and indices[0] > 0 and is_same_entity_label(labels[indices[0] - 1], entity)
307
+ first_label = f"I-{entity}" if previous_is_same_entity else f"B-{entity}"
308
+ expected = [first_label] + [f"I-{entity}"] * max(0, len(indices) - 1)
309
+ if [labels[idx] for idx in indices] == expected:
310
+ return False
311
+ label_span(labels, indices, entity)
312
+ return True
313
+
314
+
315
+ def safe_to_overwrite_meta(labels: Sequence[str], indices: Sequence[int]) -> bool:
316
+ if not indices:
317
+ return False
318
+ return not any(
319
+ label_entity(labels[idx]) in {"GROUP", "EPISODE", "SEASON", "PATH_SEASON"}
320
+ for idx in indices
321
+ )
322
+
323
+
324
+ def mark_adjacent_title_separators_o(
325
+ tokens: Sequence[str],
326
+ labels: List[str],
327
+ marker_indices: Sequence[int],
328
+ ) -> None:
329
+ if not marker_indices:
330
+ return
331
+
332
+ idx = marker_indices[0] - 1
333
+ while idx >= 0 and "".join(tokens[idx]).strip() == "" and is_title_like_label(labels[idx]):
334
+ labels[idx] = "O"
335
+ idx -= 1
336
+
337
+ idx = marker_indices[-1] + 1
338
+ while idx < len(tokens) and tokens[idx] in SEPARATOR_CHARS and is_title_like_label(labels[idx]):
339
+ labels[idx] = "O"
340
+ idx += 1
341
+
342
+
343
+ def first_episode_end(labels: Sequence[str], offsets: Sequence[Tuple[int, int]], text: str) -> int:
344
+ ends = [
345
+ end for label, (_start, end) in zip(labels, offsets)
346
+ if label_entity(label) == "EPISODE"
347
+ ]
348
+ if ends:
349
+ return min(ends)
350
+ match = EPISODE_SPAN_RE.search(text)
351
+ return match.end() if match else 0
352
+
353
+
354
+ def bracket_content_spans(text: str) -> Iterable[Tuple[str, int, int, int, int]]:
355
+ for match in BRACKET_RE.finditer(text):
356
+ groups = match.groups()
357
+ group_index = next((idx for idx, value in enumerate(groups) if value is not None), None)
358
+ if group_index is None:
359
+ continue
360
+ inner = groups[group_index] or ""
361
+ # The opening delimiter is one code point in all supported bracket forms.
362
+ inner_start = match.start() + 1
363
+ inner_end = inner_start + len(inner)
364
+ yield inner.strip(), inner_start, inner_end, match.start(), match.end()
365
+
366
+
367
+ def repair_structural_meta_labels(
368
+ text: str,
369
+ tokens: Sequence[str],
370
+ labels: List[str],
371
+ offsets: Sequence[Tuple[int, int]],
372
+ ) -> List[LabelRepair]:
373
+ repairs: List[LabelRepair] = []
374
+ episode_end = first_episode_end(labels, offsets, text)
375
+
376
+ for clean, inner_start, inner_end, bracket_start, _bracket_end in bracket_content_spans(text):
377
+ if bracket_start < episode_end:
378
+ continue
379
+ if not clean:
380
+ continue
381
+
382
+ if SPECIAL_TAG_RE.fullmatch(clean) or SPECIAL_CODE_RE.fullmatch(clean):
383
+ indices = token_indices_for_span(offsets, inner_start, inner_end)
384
+ if safe_to_overwrite_meta(labels, indices) and label_span_if_changed(labels, indices, "SPECIAL"):
385
+ repairs.append(LabelRepair("special", clean, 0, inner_start, inner_end))
386
+ continue
387
+
388
+ if SOURCE_TAG_RE.fullmatch(clean):
389
+ indices = token_indices_for_span(offsets, inner_start, inner_end)
390
+ if safe_to_overwrite_meta(labels, indices) and label_span_if_changed(labels, indices, "SOURCE"):
391
+ repairs.append(LabelRepair("source", clean, 0, inner_start, inner_end))
392
+ continue
393
+
394
+ for match in RESOLUTION_RE.finditer(clean):
395
+ start = inner_start + match.start()
396
+ end = inner_start + match.end()
397
+ indices = token_indices_for_span(offsets, start, end)
398
+ if safe_to_overwrite_meta(labels, indices) and label_span_if_changed(labels, indices, "RESOLUTION"):
399
+ repairs.append(LabelRepair("resolution", match.group(0), 0, start, end))
400
+
401
+ for match in SOURCE_RE.finditer(clean):
402
+ start = inner_start + match.start()
403
+ end = inner_start + match.end()
404
+ indices = token_indices_for_span(offsets, start, end)
405
+ if safe_to_overwrite_meta(labels, indices) and label_span_if_changed(labels, indices, "SOURCE"):
406
+ repairs.append(LabelRepair("source", match.group(0), 0, start, end))
407
+
408
+ # Dot-separated WEB names often carry source/resolution after SxxEyy without
409
+ # brackets. Repair only after the episode span to avoid touching titles.
410
+ for pattern, entity in ((RESOLUTION_RE, "RESOLUTION"), (SOURCE_RE, "SOURCE")):
411
+ for match in pattern.finditer(text):
412
+ if match.start() < episode_end:
413
+ continue
414
+ indices = token_indices_for_span(offsets, match.start(), match.end())
415
+ if safe_to_overwrite_meta(labels, indices) and label_span_if_changed(labels, indices, entity):
416
+ repairs.append(LabelRepair(entity.lower(), match.group(0), 0, match.start(), match.end()))
417
+
418
+ return repairs
419
+
420
+
421
+ def repair_known_label_issues(
422
+ item: Dict,
423
+ ) -> Tuple[List[str], List[str], List[LabelRepair]]:
424
+ """
425
+ Repair known weak-label issues.
426
+
427
+ The repair is intentionally conservative:
428
+ - sequel markers must be immediately before an episode/special context;
429
+ - sequel marker spans must currently be part of TITLE/O, not group/meta;
430
+ - rows that already have a season before the marker are left alone;
431
+ - structural meta repairs only touch spans after the first episode.
432
+ """
433
+ source_tokens = [str(token) for token in item.get("tokens", [])]
434
+ source_labels = [str(label) for label in item.get("labels", [])]
435
+ if len(source_tokens) != len(source_labels):
436
+ return source_tokens, source_labels, []
437
+
438
+ filename = str(item.get("filename") or "")
439
+ text = filename if filename else "".join(source_tokens)
440
+ offsets = token_offsets_in_text(text, source_tokens)
441
+ if offsets is None:
442
+ text = "".join(source_tokens)
443
+ offsets = token_offsets_in_text(text, source_tokens)
444
+ if offsets is None:
445
+ return source_tokens, source_labels, []
446
+
447
+ repaired_labels = list(source_labels)
448
+ applied: List[LabelRepair] = []
449
+
450
+ quick_text = text.lower()
451
+ has_sequel_marker_hint = any(
452
+ needle in text or needle in quick_text
453
+ for needle in (
454
+ " II", " III", " IV", " V", " VI", " VII", " VIII", " IX",
455
+ "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ",
456
+ "之章", "之期", "之季", "之部", "ノ章", "ノ期", "の章", "の期",
457
+ "貳", "贰", "弐", "弍", "參", "叁", "参", "肆", "陸", "陆",
458
+ "Ni ", " ni ", " no Sara", "Gakki",
459
+ )
460
+ )
461
+ if has_sequel_marker_hint:
462
+ for repair in find_sequel_season_markers(text):
463
+ if labels_have_season_before(repaired_labels, offsets, repair.start):
464
+ continue
465
+ indices = token_indices_for_span(offsets, repair.start, repair.end)
466
+ if not indices:
467
+ continue
468
+ existing = [repaired_labels[idx] for idx in indices]
469
+ if any(
470
+ label_entity(label) in {"GROUP", "EPISODE", "RESOLUTION", "SOURCE", "SPECIAL", "TAG", "PATH_SEASON"}
471
+ for label in existing
472
+ ):
473
+ continue
474
+ if not any(is_title_like_label(label) for label in existing):
475
+ continue
476
+
477
+ label_span(repaired_labels, indices, "SEASON")
478
+ mark_adjacent_title_separators_o(source_tokens, repaired_labels, indices)
479
+ applied.append(repair)
480
+
481
+ applied.extend(repair_structural_meta_labels(text, source_tokens, repaired_labels, offsets))
482
+ return source_tokens, repaired_labels, applied
483
+
484
+
485
+ def repair_sequel_season_labels(
486
+ item: Dict,
487
+ ) -> Tuple[List[str], List[str], List[LabelRepair]]:
488
+ """Backward-compatible wrapper for callers that repair known label issues."""
489
+ return repair_known_label_issues(item)
490
+
491
+
492
+ def repair_jsonl_item(item: Dict) -> Tuple[Dict, List[LabelRepair]]:
493
+ tokens, labels, repairs = repair_known_label_issues(item)
494
+ labels = normalize_iob2(labels)
495
+ if not repairs:
496
+ if labels == item.get("labels", []):
497
+ return item, []
498
+ repaired = dict(item)
499
+ repaired["labels"] = labels
500
+ return repaired, []
501
+ repaired = dict(item)
502
+ repaired["tokens"] = tokens
503
+ repaired["labels"] = labels
504
+ return repaired, repairs
505
+
506
+
507
+ def normalize_iob2(labels: Sequence[str]) -> List[str]:
508
+ normalized: List[str] = []
509
+ previous_entity: Optional[str] = None
510
+ for label in labels:
511
+ if not label.startswith(("B-", "I-")):
512
+ normalized.append("O")
513
+ previous_entity = None
514
+ continue
515
+ entity = label.split("-", 1)[1]
516
+ prefix = "I" if previous_entity == entity else "B"
517
+ normalized.append(f"{prefix}-{entity}")
518
+ previous_entity = entity
519
+ return normalized
520
+
snapshots/anifilebert-dapt512-long/anifilebert/labels.py ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Shared BIO label schema and helpers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from pathlib import Path
7
+ from typing import Dict, Optional, Tuple
8
+
9
+
10
+ LABEL_SCHEMA_VERSION = 2
11
+
12
+ TITLE_SUFFIXES = ("CHS", "CHT", "JPN", "LATIN", "MIXED")
13
+ TITLE_PRIORITY = ("CHS", "CHT", "JPN", "MIXED", "LATIN")
14
+
15
+ FILE_TITLE_ENTITIES = tuple(f"TITLE_{suffix}" for suffix in TITLE_SUFFIXES)
16
+ PATH_TITLE_ENTITIES = tuple(f"PATH_TITLE_{suffix}" for suffix in TITLE_SUFFIXES)
17
+ TITLE_ENTITIES = FILE_TITLE_ENTITIES + PATH_TITLE_ENTITIES
18
+ TITLE_LIKE_ENTITIES = TITLE_ENTITIES + ("TITLE",)
19
+ SEASON_LIKE_ENTITIES = ("SEASON", "PATH_SEASON")
20
+
21
+ DEFAULT_TITLE_ENTITY = "TITLE_MIXED"
22
+
23
+ _FALLBACK_LABELS = (
24
+ "O",
25
+ "B-TITLE_CHS",
26
+ "I-TITLE_CHS",
27
+ "B-TITLE_CHT",
28
+ "I-TITLE_CHT",
29
+ "B-TITLE_JPN",
30
+ "I-TITLE_JPN",
31
+ "B-TITLE_LATIN",
32
+ "I-TITLE_LATIN",
33
+ "B-TITLE_MIXED",
34
+ "I-TITLE_MIXED",
35
+ "B-PATH_TITLE_CHS",
36
+ "I-PATH_TITLE_CHS",
37
+ "B-PATH_TITLE_CHT",
38
+ "I-PATH_TITLE_CHT",
39
+ "B-PATH_TITLE_JPN",
40
+ "I-PATH_TITLE_JPN",
41
+ "B-PATH_TITLE_LATIN",
42
+ "I-PATH_TITLE_LATIN",
43
+ "B-PATH_TITLE_MIXED",
44
+ "I-PATH_TITLE_MIXED",
45
+ "B-PATH_SEASON",
46
+ "I-PATH_SEASON",
47
+ "B-SEASON",
48
+ "I-SEASON",
49
+ "B-EPISODE",
50
+ "I-EPISODE",
51
+ "B-SPECIAL",
52
+ "I-SPECIAL",
53
+ "B-GROUP",
54
+ "I-GROUP",
55
+ "B-RESOLUTION",
56
+ "I-RESOLUTION",
57
+ "B-SOURCE",
58
+ "I-SOURCE",
59
+ "B-TAG",
60
+ "I-TAG",
61
+ )
62
+
63
+
64
+ def _load_schema_labels() -> Tuple[str, ...]:
65
+ schema_path = Path(__file__).resolve().parents[1] / "label_schema.json"
66
+ try:
67
+ with schema_path.open("r", encoding="utf-8") as fh:
68
+ payload = json.load(fh)
69
+ except OSError:
70
+ return _FALLBACK_LABELS
71
+
72
+ labels = payload.get("labels")
73
+ if not isinstance(labels, list) or not labels:
74
+ return _FALLBACK_LABELS
75
+ if not all(isinstance(label, str) and label for label in labels):
76
+ return _FALLBACK_LABELS
77
+ return tuple(labels)
78
+
79
+
80
+ LABELS = _load_schema_labels()
81
+
82
+ LEGACY_15_LABELS = (
83
+ "O",
84
+ "B-TITLE",
85
+ "I-TITLE",
86
+ "B-SEASON",
87
+ "I-SEASON",
88
+ "B-EPISODE",
89
+ "I-EPISODE",
90
+ "B-SPECIAL",
91
+ "I-SPECIAL",
92
+ "B-GROUP",
93
+ "I-GROUP",
94
+ "B-RESOLUTION",
95
+ "I-RESOLUTION",
96
+ "B-SOURCE",
97
+ "I-SOURCE",
98
+ )
99
+
100
+ LABEL2ID = {label: idx for idx, label in enumerate(LABELS)}
101
+ ID2LABEL = {idx: label for idx, label in enumerate(LABELS)}
102
+
103
+
104
+ def make_label2id() -> Dict[str, int]:
105
+ return dict(LABEL2ID)
106
+
107
+
108
+ def make_id2label() -> Dict[int, str]:
109
+ return dict(ID2LABEL)
110
+
111
+
112
+ def split_bio_label(label: str) -> Tuple[Optional[str], Optional[str]]:
113
+ if not isinstance(label, str) or label == "O":
114
+ return None, None
115
+ prefix, sep, entity = label.partition("-")
116
+ if sep != "-" or prefix not in {"B", "I"} or not entity:
117
+ return None, None
118
+ return prefix, entity
119
+
120
+
121
+ def label_entity(label: str) -> Optional[str]:
122
+ return split_bio_label(label)[1]
123
+
124
+
125
+ def canonical_entity(entity: str) -> str:
126
+ return DEFAULT_TITLE_ENTITY if entity == "TITLE" else entity
127
+
128
+
129
+ def canonical_bio_label(label: str) -> str:
130
+ prefix, entity = split_bio_label(label)
131
+ if prefix is None or entity is None:
132
+ return "O" if label == "O" else label
133
+ return f"{prefix}-{canonical_entity(entity)}"
134
+
135
+
136
+ def is_title_entity(entity: Optional[str]) -> bool:
137
+ return entity in TITLE_LIKE_ENTITIES
138
+
139
+
140
+ def is_file_title_entity(entity: Optional[str]) -> bool:
141
+ return entity in FILE_TITLE_ENTITIES or entity == "TITLE"
142
+
143
+
144
+ def is_path_title_entity(entity: Optional[str]) -> bool:
145
+ return entity in PATH_TITLE_ENTITIES
146
+
147
+
148
+ def is_title_like_label(label: str) -> bool:
149
+ return is_title_entity(label_entity(label))
150
+
151
+
152
+ def is_season_entity(entity: Optional[str]) -> bool:
153
+ return entity in SEASON_LIKE_ENTITIES
154
+
155
+
156
+ def is_season_like_label(label: str) -> bool:
157
+ return is_season_entity(label_entity(label))
158
+
159
+
160
+ def is_same_entity_label(label: str, entity: str) -> bool:
161
+ return label_entity(label) == entity
162
+
163
+
164
+ def title_language(entity: Optional[str]) -> str:
165
+ if entity == "TITLE":
166
+ return "MIXED"
167
+ if not entity:
168
+ return "MIXED"
169
+ if entity.startswith("PATH_TITLE_"):
170
+ return entity.removeprefix("PATH_TITLE_")
171
+ if entity.startswith("TITLE_"):
172
+ return entity.removeprefix("TITLE_")
173
+ return "MIXED"
174
+
175
+
176
+ def title_entity_priority(entity: Optional[str]) -> Tuple[int, int]:
177
+ language = title_language(entity)
178
+ language_rank = TITLE_PRIORITY.index(language) if language in TITLE_PRIORITY else len(TITLE_PRIORITY)
179
+ path_rank = 1 if is_path_title_entity(entity) else 0
180
+ return path_rank, language_rank
181
+
182
+
183
+ def label_migration_sources(target_label: str) -> Tuple[str, ...]:
184
+ """Return old-label candidates that can initialize a target label row."""
185
+ if target_label == "O":
186
+ return ("O",)
187
+
188
+ prefix, entity = split_bio_label(target_label)
189
+ if prefix is None or entity is None:
190
+ return (target_label,)
191
+
192
+ sources = [target_label]
193
+ if is_title_entity(entity):
194
+ sources.append(f"{prefix}-TITLE")
195
+ elif entity == "PATH_SEASON":
196
+ sources.append(f"{prefix}-SEASON")
197
+ return tuple(dict.fromkeys(sources))
198
+
199
+
200
+ def infer_legacy_id2label(num_labels: int) -> Optional[Dict[int, str]]:
201
+ if num_labels == len(LEGACY_15_LABELS):
202
+ return {idx: label for idx, label in enumerate(LEGACY_15_LABELS)}
203
+ if num_labels == len(LABELS):
204
+ return make_id2label()
205
+ return None
snapshots/anifilebert-dapt512-long/anifilebert/model.py ADDED
@@ -0,0 +1,465 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Tiny BERT models for anime filename token classification.
3
+
4
+ The default linear token-classification head is kept for compatibility. A
5
+ learned linear-chain CRF head is also available for structural sequence-label
6
+ training while preserving the same emission logits used by the thin runtime.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import os
12
+ from typing import List, Optional
13
+
14
+ import torch
15
+ from torch import nn
16
+ from transformers import BertConfig, BertForTokenClassification, BertModel, BertPreTrainedModel
17
+ from transformers.modeling_outputs import TokenClassifierOutput
18
+ from transformers.modeling_utils import PreTrainedModel
19
+
20
+ from .config import Config
21
+ from .labels import infer_legacy_id2label, label_migration_sources
22
+
23
+
24
+ class LinearChainCRF(nn.Module):
25
+ """A small batched linear-chain CRF for BIO token classification."""
26
+
27
+ def __init__(self, num_labels: int, id2label: Optional[dict] = None) -> None:
28
+ super().__init__()
29
+ self.num_labels = num_labels
30
+ self.start_transitions = nn.Parameter(torch.zeros(num_labels))
31
+ self.end_transitions = nn.Parameter(torch.zeros(num_labels))
32
+ self.transitions = nn.Parameter(torch.zeros(num_labels, num_labels))
33
+ self.register_buffer("start_allowed", torch.ones(num_labels, dtype=torch.bool))
34
+ self.register_buffer("transition_allowed", torch.ones(num_labels, num_labels, dtype=torch.bool))
35
+ if id2label:
36
+ self._configure_bio_masks(id2label)
37
+
38
+ @staticmethod
39
+ def _normalize_label_map(id2label: dict) -> dict[int, str]:
40
+ return {int(label_id): str(label) for label_id, label in id2label.items()}
41
+
42
+ def _configure_bio_masks(self, id2label: dict) -> None:
43
+ label_map = self._normalize_label_map(id2label)
44
+ for prev_id in range(self.num_labels):
45
+ prev_label = label_map.get(prev_id, "O")
46
+ self.start_allowed[prev_id] = not prev_label.startswith("I-")
47
+ for next_id in range(self.num_labels):
48
+ next_label = label_map.get(next_id, "O")
49
+ if next_label.startswith("I-"):
50
+ entity = next_label[2:]
51
+ allowed = prev_label in {f"B-{entity}", f"I-{entity}"}
52
+ else:
53
+ allowed = True
54
+ self.transition_allowed[prev_id, next_id] = allowed
55
+
56
+ def neg_log_likelihood(
57
+ self,
58
+ emissions: torch.Tensor,
59
+ tags: torch.Tensor,
60
+ mask: torch.Tensor,
61
+ ) -> torch.Tensor:
62
+ """Return mean negative log likelihood for a padded batch."""
63
+ if emissions.ndim != 3:
64
+ raise ValueError("emissions must have shape [batch, seq, labels]")
65
+ if tags.shape != emissions.shape[:2]:
66
+ raise ValueError("tags must have shape [batch, seq]")
67
+ if mask.shape != tags.shape:
68
+ raise ValueError("mask must have shape [batch, seq]")
69
+
70
+ mask = mask.bool()
71
+ lengths = mask.long().sum(dim=1)
72
+ if torch.any(lengths == 0):
73
+ raise ValueError("CRF received an empty token sequence")
74
+
75
+ safe_tags = tags.masked_fill(~mask, 0)
76
+ log_partition = self._compute_log_partition(emissions, mask)
77
+ gold_score = self._compute_gold_score(emissions, safe_tags, mask, lengths)
78
+ return (log_partition - gold_score).mean()
79
+
80
+ def _compute_log_partition(self, emissions: torch.Tensor, mask: torch.Tensor) -> torch.Tensor:
81
+ batch_size, sequence_length, _num_labels = emissions.shape
82
+ emissions = emissions.float()
83
+ start_transitions = self.start_transitions.float()
84
+ transition_scores = self.transitions.float()
85
+ scores = start_transitions + emissions[:, 0]
86
+
87
+ for idx in range(1, sequence_length):
88
+ next_scores = (
89
+ scores.unsqueeze(2)
90
+ + transition_scores.unsqueeze(0)
91
+ + emissions[:, idx].unsqueeze(1)
92
+ )
93
+ next_scores = torch.logsumexp(next_scores, dim=1)
94
+ scores = torch.where(mask[:, idx].unsqueeze(1), next_scores, scores)
95
+
96
+ scores = scores + self.end_transitions
97
+ return torch.logsumexp(scores, dim=1)
98
+
99
+ def _compute_gold_score(
100
+ self,
101
+ emissions: torch.Tensor,
102
+ tags: torch.Tensor,
103
+ mask: torch.Tensor,
104
+ lengths: torch.Tensor,
105
+ ) -> torch.Tensor:
106
+ emissions = emissions.float()
107
+ start_transitions = self.start_transitions.float()
108
+ transition_scores = self.transitions.float()
109
+ end_transitions = self.end_transitions.float()
110
+ batch_indices = torch.arange(emissions.shape[0], device=emissions.device)
111
+ score = start_transitions[tags[:, 0]]
112
+ score = score + emissions[batch_indices, 0, tags[:, 0]]
113
+
114
+ for idx in range(1, emissions.shape[1]):
115
+ transition_score = transition_scores[tags[:, idx - 1], tags[:, idx]]
116
+ emission_score = emissions[batch_indices, idx, tags[:, idx]]
117
+ score = score + (transition_score + emission_score) * mask[:, idx]
118
+
119
+ last_tag_indices = (lengths - 1).unsqueeze(1)
120
+ last_tags = tags.gather(1, last_tag_indices).squeeze(1)
121
+ return score + end_transitions[last_tags]
122
+
123
+ def decode(self, emissions: torch.Tensor, mask: torch.Tensor) -> List[List[int]]:
124
+ """Viterbi decode a padded batch and return variable-length label IDs."""
125
+ if emissions.ndim != 3:
126
+ raise ValueError("emissions must have shape [batch, seq, labels]")
127
+ mask = mask.bool()
128
+ lengths = mask.long().sum(dim=1)
129
+ if torch.any(lengths == 0):
130
+ raise ValueError("CRF received an empty token sequence")
131
+
132
+ start_transitions = self.start_transitions.masked_fill(~self.start_allowed, float("-inf"))
133
+ transition_scores = self.transitions.masked_fill(~self.transition_allowed, float("-inf"))
134
+ scores = start_transitions + emissions[:, 0]
135
+ history: List[torch.Tensor] = []
136
+
137
+ for idx in range(1, emissions.shape[1]):
138
+ next_scores = scores.unsqueeze(2) + transition_scores.unsqueeze(0)
139
+ best_scores, best_tags = next_scores.max(dim=1)
140
+ best_scores = best_scores + emissions[:, idx]
141
+ scores = torch.where(mask[:, idx].unsqueeze(1), best_scores, scores)
142
+ history.append(best_tags)
143
+
144
+ scores = scores + self.end_transitions
145
+ best_last_tags = scores.argmax(dim=1)
146
+
147
+ paths: List[List[int]] = []
148
+ for batch_idx in range(emissions.shape[0]):
149
+ length = int(lengths[batch_idx].item())
150
+ best_tag = int(best_last_tags[batch_idx].item())
151
+ path = [best_tag]
152
+ for hist in reversed(history[: max(0, length - 1)]):
153
+ best_tag = int(hist[batch_idx, best_tag].item())
154
+ path.append(best_tag)
155
+ path.reverse()
156
+ paths.append(path)
157
+ return paths
158
+
159
+
160
+ class BertCrfForTokenClassification(BertPreTrainedModel):
161
+ """BERT emission classifier trained with a learned CRF sequence loss."""
162
+
163
+ config_class = BertConfig
164
+
165
+ def __init__(self, config: BertConfig) -> None:
166
+ super().__init__(config)
167
+ self.num_labels = config.num_labels
168
+ self.bert = BertModel(config, add_pooling_layer=False)
169
+ classifier_dropout = getattr(config, "classifier_dropout", None)
170
+ dropout_prob = classifier_dropout if classifier_dropout is not None else config.hidden_dropout_prob
171
+ self.dropout = nn.Dropout(dropout_prob)
172
+ self.classifier = nn.Linear(config.hidden_size, config.num_labels)
173
+ self.crf = LinearChainCRF(config.num_labels, getattr(config, "id2label", None))
174
+ self.post_init()
175
+ # Keep CRF transitions neutral when bootstrapping from a linear checkpoint.
176
+ nn.init.zeros_(self.crf.start_transitions)
177
+ nn.init.zeros_(self.crf.end_transitions)
178
+ nn.init.zeros_(self.crf.transitions)
179
+
180
+ def _crf_inputs(
181
+ self,
182
+ logits: torch.Tensor,
183
+ labels: Optional[torch.Tensor],
184
+ attention_mask: Optional[torch.Tensor],
185
+ ) -> tuple[torch.Tensor, Optional[torch.Tensor], torch.Tensor]:
186
+ if logits.shape[1] <= 2:
187
+ raise ValueError("CRF token classification expects CLS, tokens, and SEP positions")
188
+ emissions = logits[:, 1:-1, :]
189
+ if attention_mask is None:
190
+ if labels is None:
191
+ mask = torch.ones(emissions.shape[:2], dtype=torch.bool, device=logits.device)
192
+ else:
193
+ mask = labels[:, 1:-1].ne(-100)
194
+ else:
195
+ if labels is None:
196
+ real_lengths = attention_mask.long().sum(dim=1).clamp_min(2) - 2
197
+ positions = torch.arange(emissions.shape[1], device=logits.device).unsqueeze(0)
198
+ mask = positions < real_lengths.unsqueeze(1)
199
+ else:
200
+ mask = attention_mask[:, 1:-1].bool()
201
+ mask = mask & labels[:, 1:-1].ne(-100)
202
+ tags = labels[:, 1:-1] if labels is not None else None
203
+ return emissions, tags, mask
204
+
205
+ def forward(
206
+ self,
207
+ input_ids: Optional[torch.Tensor] = None,
208
+ attention_mask: Optional[torch.Tensor] = None,
209
+ token_type_ids: Optional[torch.Tensor] = None,
210
+ position_ids: Optional[torch.Tensor] = None,
211
+ head_mask: Optional[torch.Tensor] = None,
212
+ inputs_embeds: Optional[torch.Tensor] = None,
213
+ labels: Optional[torch.Tensor] = None,
214
+ output_attentions: Optional[bool] = None,
215
+ output_hidden_states: Optional[bool] = None,
216
+ return_dict: Optional[bool] = None,
217
+ ) -> TokenClassifierOutput:
218
+ return_dict = return_dict if return_dict is not None else getattr(self.config, "return_dict", True)
219
+ outputs = self.bert(
220
+ input_ids,
221
+ attention_mask=attention_mask,
222
+ token_type_ids=token_type_ids,
223
+ position_ids=position_ids,
224
+ head_mask=head_mask,
225
+ inputs_embeds=inputs_embeds,
226
+ output_attentions=output_attentions,
227
+ output_hidden_states=output_hidden_states,
228
+ return_dict=return_dict,
229
+ )
230
+ sequence_output = self.dropout(outputs[0])
231
+ logits = self.classifier(sequence_output)
232
+
233
+ loss = None
234
+ if labels is not None:
235
+ emissions, tags, mask = self._crf_inputs(logits, labels, attention_mask)
236
+ if tags is None:
237
+ raise ValueError("labels are required for CRF loss")
238
+ loss = self.crf.neg_log_likelihood(emissions, tags, mask)
239
+
240
+ if not return_dict:
241
+ output = (logits,) + outputs[2:]
242
+ return ((loss,) + output) if loss is not None else output
243
+ return TokenClassifierOutput(
244
+ loss=loss,
245
+ logits=logits,
246
+ hidden_states=outputs.hidden_states,
247
+ attentions=outputs.attentions,
248
+ )
249
+
250
+ def decode(self, logits: torch.Tensor, attention_mask: Optional[torch.Tensor] = None) -> List[List[int]]:
251
+ """Decode full-sequence logits, excluding CLS/SEP and padding positions."""
252
+ emissions, _tags, mask = self._crf_inputs(logits, None, attention_mask)
253
+ return self.crf.decode(emissions, mask)
254
+
255
+
256
+ def build_bert_config(config: Config) -> BertConfig:
257
+ """Build the Hugging Face BERT config shared by both model heads."""
258
+ return BertConfig(
259
+ vocab_size=config.vocab_size,
260
+ hidden_size=config.hidden_size,
261
+ num_hidden_layers=config.num_hidden_layers,
262
+ num_attention_heads=config.num_attention_heads,
263
+ intermediate_size=config.intermediate_size,
264
+ max_position_embeddings=config.max_position_embeddings,
265
+ num_labels=config.num_labels,
266
+ hidden_dropout_prob=config.hidden_dropout_prob,
267
+ attention_probs_dropout_prob=config.attention_probs_dropout_prob,
268
+ id2label=config.id2label,
269
+ label2id=config.label2id,
270
+ label_schema_version=config.label_schema_version,
271
+ )
272
+
273
+
274
+ def normalize_model_head(model_head: Optional[str]) -> str:
275
+ head = (model_head or "linear").strip().lower()
276
+ if head not in {"linear", "crf"}:
277
+ raise ValueError(f"Unsupported model head: {model_head}")
278
+ return head
279
+
280
+
281
+ def create_model(config: Config, model_head: str = "linear") -> PreTrainedModel:
282
+ """
283
+ Create a Tiny BERT model for token classification.
284
+
285
+ Args:
286
+ config: Config object with model hyperparameters.
287
+ model_head: ``linear`` for Hugging Face's standard token classifier or
288
+ ``crf`` for a learned linear-chain CRF sequence head.
289
+ """
290
+ head = normalize_model_head(model_head)
291
+ bert_config = build_bert_config(config)
292
+ bert_config.model_head = head
293
+ if head == "crf":
294
+ bert_config.architectures = ["BertCrfForTokenClassification"]
295
+ return BertCrfForTokenClassification(bert_config)
296
+ bert_config.architectures = ["BertForTokenClassification"]
297
+ return BertForTokenClassification(bert_config)
298
+
299
+
300
+ def infer_model_head(config: BertConfig) -> str:
301
+ head = getattr(config, "model_head", None)
302
+ if head:
303
+ return normalize_model_head(str(head))
304
+ architectures = getattr(config, "architectures", None) or []
305
+ if any("Crf" in str(architecture) or "CRF" in str(architecture) for architecture in architectures):
306
+ return "crf"
307
+ return "linear"
308
+
309
+
310
+ def load_model(model_dir: str, model_head: Optional[str] = None) -> PreTrainedModel:
311
+ """Load a linear or CRF token classifier from a Hugging Face checkpoint."""
312
+ config = BertConfig.from_pretrained(model_dir)
313
+ head = normalize_model_head(model_head) if model_head is not None else infer_model_head(config)
314
+ if head == "crf":
315
+ return BertCrfForTokenClassification.from_pretrained(model_dir)
316
+ return BertForTokenClassification.from_pretrained(model_dir)
317
+
318
+
319
+ def _model_id2label_for_migration(model: PreTrainedModel) -> dict[int, str]:
320
+ raw_id2label = getattr(model.config, "id2label", None) or {}
321
+ normalized = {int(label_id): str(label) for label_id, label in raw_id2label.items()}
322
+ classifier = getattr(model, "classifier", None)
323
+ out_features = getattr(classifier, "out_features", None)
324
+ if out_features is not None and len(normalized) != int(out_features):
325
+ inferred = infer_legacy_id2label(int(out_features))
326
+ if inferred is not None:
327
+ return inferred
328
+ return normalized
329
+
330
+
331
+ def migrate_token_classifier_labels(
332
+ model: PreTrainedModel,
333
+ target_label2id: dict[str, int],
334
+ target_id2label: dict[int, str],
335
+ ) -> dict[str, object]:
336
+ """
337
+ Expand or reorder token-classification label rows for the shared schema.
338
+
339
+ Exact labels are copied by name. Legacy 15-label TITLE rows initialize all
340
+ title-like rows, and legacy SEASON rows initialize PATH_SEASON.
341
+ """
342
+ classifier = getattr(model, "classifier", None)
343
+ if classifier is None or not isinstance(classifier, nn.Linear):
344
+ return {"changed": False, "reason": "no_linear_classifier"}
345
+
346
+ target_id2label = {int(label_id): str(label) for label_id, label in target_id2label.items()}
347
+ target_label2id = {str(label): int(label_id) for label, label_id in target_label2id.items()}
348
+ old_id2label = _model_id2label_for_migration(model)
349
+ old_label2id = {label: label_id for label_id, label in old_id2label.items()}
350
+ old_num_labels = int(classifier.out_features)
351
+ new_num_labels = len(target_label2id)
352
+
353
+ same_schema = (
354
+ old_num_labels == new_num_labels
355
+ and all(old_id2label.get(idx) == target_id2label.get(idx) for idx in range(new_num_labels))
356
+ )
357
+ if same_schema:
358
+ model.config.num_labels = new_num_labels
359
+ model.config.id2label = target_id2label
360
+ model.config.label2id = target_label2id
361
+ return {"changed": False, "copied": new_num_labels, "target_labels": new_num_labels}
362
+
363
+ old_weight = classifier.weight.detach()
364
+ old_bias = classifier.bias.detach() if classifier.bias is not None else None
365
+ new_classifier = nn.Linear(
366
+ classifier.in_features,
367
+ new_num_labels,
368
+ bias=classifier.bias is not None,
369
+ device=old_weight.device,
370
+ dtype=old_weight.dtype,
371
+ )
372
+ nn.init.normal_(
373
+ new_classifier.weight,
374
+ mean=0.0,
375
+ std=getattr(model.config, "initializer_range", 0.02),
376
+ )
377
+ if new_classifier.bias is not None:
378
+ nn.init.zeros_(new_classifier.bias)
379
+
380
+ row_sources: dict[int, int] = {}
381
+ copied = 0
382
+ for target_label, target_id in target_label2id.items():
383
+ for source_label in label_migration_sources(target_label):
384
+ source_id = old_label2id.get(source_label)
385
+ if source_id is None or source_id >= old_num_labels:
386
+ continue
387
+ new_classifier.weight.data[target_id].copy_(old_weight[source_id])
388
+ if new_classifier.bias is not None and old_bias is not None:
389
+ new_classifier.bias.data[target_id].copy_(old_bias[source_id])
390
+ row_sources[target_id] = source_id
391
+ copied += 1
392
+ break
393
+
394
+ model.classifier = new_classifier
395
+ model.num_labels = new_num_labels
396
+ model.config.num_labels = new_num_labels
397
+ model.config.id2label = target_id2label
398
+ model.config.label2id = target_label2id
399
+
400
+ if hasattr(model, "crf"):
401
+ old_crf = model.crf
402
+ new_crf = LinearChainCRF(new_num_labels, target_id2label).to(
403
+ device=old_weight.device,
404
+ dtype=old_weight.dtype,
405
+ )
406
+ nn.init.zeros_(new_crf.start_transitions)
407
+ nn.init.zeros_(new_crf.end_transitions)
408
+ nn.init.zeros_(new_crf.transitions)
409
+ with torch.no_grad():
410
+ for target_id, source_id in row_sources.items():
411
+ if source_id < old_crf.start_transitions.shape[0]:
412
+ new_crf.start_transitions[target_id].copy_(old_crf.start_transitions[source_id])
413
+ new_crf.end_transitions[target_id].copy_(old_crf.end_transitions[source_id])
414
+ for target_to_id, source_to_id in row_sources.items():
415
+ for target_from_id, source_from_id in row_sources.items():
416
+ if (
417
+ source_from_id < old_crf.transitions.shape[0]
418
+ and source_to_id < old_crf.transitions.shape[1]
419
+ ):
420
+ new_crf.transitions[target_from_id, target_to_id].copy_(
421
+ old_crf.transitions[source_from_id, source_to_id]
422
+ )
423
+ model.crf = new_crf
424
+
425
+ return {
426
+ "changed": True,
427
+ "source_labels": old_num_labels,
428
+ "target_labels": new_num_labels,
429
+ "copied": copied,
430
+ }
431
+
432
+
433
+ def save_model_head_config(model: PreTrainedModel, model_head: str) -> None:
434
+ """Persist the selected head in config.json for later auto-loading."""
435
+ head = normalize_model_head(model_head)
436
+ model.config.model_head = head
437
+ model.config.architectures = [
438
+ "BertCrfForTokenClassification" if head == "crf" else "BertForTokenClassification"
439
+ ]
440
+
441
+
442
+ def count_parameters(model) -> int:
443
+ """Count total trainable parameters in a model."""
444
+ return sum(p.numel() for p in model.parameters())
445
+
446
+
447
+ def print_model_summary(model):
448
+ """Print model architecture summary with parameter count."""
449
+ total_params = count_parameters(model)
450
+ trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
451
+ print(f"Total parameters: {total_params:,}")
452
+ print(f"Trainable parameters: {trainable_params:,}")
453
+ print(f"Parameter limit: 5,000,000")
454
+ if total_params < 5_000_000:
455
+ print(f"[OK] Within 5M limit ({(5_000_000 - total_params):,} remaining)")
456
+ else:
457
+ print(f"[FAIL] Exceeds 5M limit by {total_params - 5_000_000:,}")
458
+ return total_params
459
+
460
+
461
+ if __name__ == "__main__":
462
+ cfg = Config()
463
+ cfg.vocab_size = 3000
464
+ model = create_model(cfg, model_head=os.environ.get("ANIFILEBERT_MODEL_HEAD", "linear"))
465
+ print_model_summary(model)
snapshots/anifilebert-dapt512-long/anifilebert/tokenizer.py ADDED
@@ -0,0 +1,411 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Custom tokenizers for anime filenames.
3
+
4
+ AnimeTokenizer keeps the original regex-based structure tokenization:
5
+ 1. Bracket protection: [...], (...), 【...】, 《...》 are kept as single tokens
6
+ 2. Format token recognition: S2, 1080P, x265, WEB-DL, etc. are preserved
7
+ 3. Remainder splitting: separators, Chinese/Japanese char-level, English/number tokens
8
+
9
+ CharAnimeTokenizer is the A/B variant that tokenizes every code point as its
10
+ own token. Dataset alignment expands existing token-level BIO labels to match
11
+ this tokenizer, so the same generated and real-world JSONL files can be reused.
12
+ """
13
+
14
+ import re
15
+ import json
16
+ import os
17
+ from typing import Dict, List, Optional, Tuple, Set
18
+ from transformers import PreTrainedTokenizer
19
+
20
+
21
+ class AnimeTokenizer(PreTrainedTokenizer):
22
+ """
23
+ Custom regex-based tokenizer for anime filenames.
24
+ Inherits from PreTrainedTokenizer for HuggingFace Trainer compatibility.
25
+ """
26
+
27
+ # Required for PreTrainedTokenizer save/load mechanism
28
+ vocab_files_names: Dict[str, str] = {"vocab_file": "vocab.json"}
29
+ tokenizer_variant: str = "regex"
30
+
31
+ # Layer 1: Bracket patterns (kept whole)
32
+ BRACKET_PATTERNS: List[str] = [
33
+ r'\[[^\]]*\]', # [...]
34
+ r'\([^\)]*\)', # (...)
35
+ r'【[^】]*】', # 【...】
36
+ r'《[^》]*》', # 《...》
37
+ ]
38
+
39
+ # Composite format patterns (checked before individual, higher priority).
40
+ #
41
+ # Keep this empty for S01E01-style names: token classification needs separate
42
+ # S01 and E01 tokens so the model can label season and episode independently.
43
+ COMPOSITE_FORMAT_PATTERNS: List[str] = []
44
+
45
+ # Layer 2: Individual format token patterns
46
+ FORMAT_PATTERNS: List[str] = [
47
+ # Resolution
48
+ r'(?<![A-Za-z0-9])\d{3,4}[pP](?![A-Za-z0-9])',
49
+ r'(?<![A-Za-z0-9])\d{3,4}[xX×]\d{3,4}(?![A-Za-z0-9])',
50
+ r'(?<![A-Za-z0-9])\d[Kk](?![A-Za-z0-9])',
51
+
52
+ # Codec
53
+ r'[xX]26[45]',
54
+ r'HEVC', r'AVC', r'AV1',
55
+ r'[hH]\.?26[45]',
56
+
57
+ # Audio
58
+ r'FLAC', r'AAC', r'MP3', r'DTS', r'Opus',
59
+
60
+ # Season
61
+ r'Seasons?\s*\d+',
62
+ r'第[一二三四五六七八九十\d]+季',
63
+ r'\d+(?:st|nd|rd|th)\s+Season',
64
+ r'[Ss]\d+',
65
+
66
+ # Episode
67
+ r'[Ee][Pp]?\d+',
68
+ r'#\d+',
69
+ r'第\d+[话話]',
70
+ r'\d+[Vv]\d*',
71
+
72
+ # Language
73
+ r'CH[ST]',
74
+ r'简[体體]',
75
+ r'繁[体體]',
76
+ r'JP', r'GB', r'BIG5',
77
+ r'简日双语',
78
+
79
+ # Source
80
+ r'WEB[-_]?DL',
81
+ r'BDRip', r'DVDRip', r'TVRip',
82
+ r'Baha', r'Netflix', r'AMZN', r'CR', r'WebRip',
83
+
84
+ # Aspect ratio
85
+ r'\d+:\d+',
86
+ ]
87
+
88
+ # Layer 3: Separators for splitting
89
+ SEPARATORS: Set[str] = set(' -_|~~.')
90
+
91
+ def __init__(self, vocab_file: Optional[str] = None, **kwargs):
92
+ kwargs.pop("tokenizer_variant", None)
93
+ kwargs.pop("backend", None)
94
+
95
+ self._vocab: Dict[str, int] = {}
96
+ self._ids_to_tokens: Dict[int, str] = {}
97
+
98
+ # Load vocab from file if provided
99
+ if vocab_file is not None and os.path.isfile(vocab_file):
100
+ with open(vocab_file, 'r', encoding='utf-8') as f:
101
+ loaded = json.load(f)
102
+ self._vocab = loaded
103
+ self._ids_to_tokens = {int(v): k for k, v in loaded.items()}
104
+
105
+ # Initialize PreTrainedTokenizer with special tokens.
106
+ # Only set defaults for tokens not already provided via kwargs
107
+ # (from_pretrained may pass these through).
108
+ special_kwargs = {}
109
+ for token_name, token_value in [
110
+ ('pad_token', '[PAD]'),
111
+ ('unk_token', '[UNK]'),
112
+ ('cls_token', '[CLS]'),
113
+ ('sep_token', '[SEP]'),
114
+ ]:
115
+ if token_name not in kwargs:
116
+ special_kwargs[token_name] = token_value
117
+
118
+ super().__init__(**special_kwargs, **kwargs)
119
+ self.init_kwargs["backend"] = "custom"
120
+ self.init_kwargs["tokenizer_variant"] = self.tokenizer_variant
121
+
122
+ # Compile regex patterns for efficiency
123
+ self._bracket_re = re.compile('|'.join(self.BRACKET_PATTERNS))
124
+ self._composite_format_re = (
125
+ re.compile('|'.join(self.COMPOSITE_FORMAT_PATTERNS))
126
+ if self.COMPOSITE_FORMAT_PATTERNS else None
127
+ )
128
+ self._format_re = re.compile('|'.join(self.FORMAT_PATTERNS))
129
+
130
+ # ---- Properties ----
131
+
132
+ @property
133
+ def vocab_size(self) -> int:
134
+ return len(self._vocab)
135
+
136
+ # ---- Tokenization (3-layer pipeline) ----
137
+
138
+ def tokenize(self, text: str, **kwargs) -> List[str]:
139
+ """
140
+ Tokenize an anime filename into a list of tokens.
141
+
142
+ Uses a 3-layer pipeline:
143
+ 1. Bracket protection (kept whole)
144
+ 2. Format token recognition (composite then individual)
145
+ 3. Remainder splitting (separators, char-level for CJK)
146
+ """
147
+ if not text or not text.strip():
148
+ return []
149
+
150
+ placeholder_counter = [0]
151
+ placeholders: Dict[int, str] = {}
152
+
153
+ def _ph(idx: int) -> str:
154
+ return f'\x00{idx}\x00'
155
+
156
+ def _replace_match(m: re.Match) -> str:
157
+ idx = placeholder_counter[0]
158
+ placeholder_counter[0] += 1
159
+ placeholders[idx] = m.group()
160
+ return _ph(idx)
161
+
162
+ # Layer 1: Extract bracket content as whole tokens
163
+ processed = self._bracket_re.sub(_replace_match, text)
164
+
165
+ # Layer 2a: Composite format patterns (e.g. S01E01 before S01)
166
+ if self._composite_format_re is not None:
167
+ processed = self._composite_format_re.sub(_replace_match, processed)
168
+
169
+ # Layer 2b: Individual format tokens
170
+ processed = self._format_re.sub(_replace_match, processed)
171
+
172
+ # Layer 3a: Split remainder by separators
173
+ separator_pattern = '|'.join(re.escape(s) for s in sorted(self.SEPARATORS, key=len, reverse=True))
174
+ # Use capturing group to keep separators
175
+ remaining_parts = re.split(f'({separator_pattern})', processed)
176
+
177
+ # Layer 3b: Process each part
178
+ result: List[str] = []
179
+ for part in remaining_parts:
180
+ if not part:
181
+ continue
182
+
183
+ if part in self.SEPARATORS:
184
+ result.append(part)
185
+ elif '\x00' in part:
186
+ # Extract all placeholder tokens from this part
187
+ # Handles consecutive placeholders like \x001\x00\x002\x00
188
+ ph_pattern = re.compile(r'\x00(\d+)\x00')
189
+ last_end = 0
190
+ for m in ph_pattern.finditer(part):
191
+ # Add any non-placeholder text before this match
192
+ if m.start() > last_end:
193
+ before = part[last_end:m.start()]
194
+ result.extend(self._split_fragment(before))
195
+ idx = int(m.group(1))
196
+ if idx in placeholders:
197
+ result.append(placeholders[idx])
198
+ last_end = m.end()
199
+ # Add any remaining text after the last placeholder
200
+ if last_end < len(part):
201
+ after = part[last_end:]
202
+ result.extend(self._split_fragment(after))
203
+ else:
204
+ # Split remaining text by character type
205
+ result.extend(self._split_fragment(part))
206
+
207
+ return result
208
+
209
+ def _split_fragment(self, fragment: str) -> List[str]:
210
+ """
211
+ Split a text fragment by character type:
212
+ - Chinese chars → individual characters
213
+ - Japanese kana → individual characters
214
+ - ASCII letters → whole word
215
+ - Digits → whole number
216
+ - Other → individual characters
217
+ """
218
+ tokens: List[str] = []
219
+ i = 0
220
+ n = len(fragment)
221
+
222
+ while i < n:
223
+ ch = fragment[i]
224
+
225
+ # Chinese characters (CJK Unified Ideographs + Extension A)
226
+ if '\u4e00' <= ch <= '\u9fff' or '\u3400' <= ch <= '\u4dbf':
227
+ tokens.append(ch)
228
+ i += 1
229
+ # Japanese hiragana
230
+ elif '\u3040' <= ch <= '\u309f':
231
+ tokens.append(ch)
232
+ i += 1
233
+ # Japanese katakana
234
+ elif '\u30a0' <= ch <= '\u30ff':
235
+ tokens.append(ch)
236
+ i += 1
237
+ # ASCII letter sequence (kept whole)
238
+ elif ch.isascii() and ch.isalpha():
239
+ j = i
240
+ while j < n and fragment[j].isascii() and fragment[j].isalpha():
241
+ j += 1
242
+ tokens.append(fragment[i:j])
243
+ i = j
244
+ # Digit sequence (kept whole)
245
+ elif ch.isdigit():
246
+ j = i
247
+ while j < n and fragment[j].isdigit():
248
+ j += 1
249
+ tokens.append(fragment[i:j])
250
+ i = j
251
+ else:
252
+ # Other character (punctuation, symbols, etc.)
253
+ tokens.append(ch)
254
+ i += 1
255
+
256
+ return tokens
257
+
258
+ # ---- Vocabulary Management ----
259
+
260
+ def build_vocab(
261
+ self,
262
+ tokens_list: List[List[str]],
263
+ max_size: Optional[int] = None,
264
+ base_vocab: Optional[Dict[str, int]] = None,
265
+ ) -> None:
266
+ """
267
+ Build vocabulary from a list of tokenized texts.
268
+
269
+ Args:
270
+ tokens_list: List of token lists from tokenize() output.
271
+ max_size: Optional cap including special tokens.
272
+ base_vocab: Optional existing vocabulary whose token IDs are preserved.
273
+ """
274
+ freq: Dict[str, int] = {}
275
+ for tokens in tokens_list:
276
+ for token in tokens:
277
+ freq[token] = freq.get(token, 0) + 1
278
+
279
+ # Start with special tokens at fixed positions, preserving any supplied
280
+ # base vocabulary so a checkpoint can be fine-tuned after adding tokens.
281
+ vocab: Dict[str, int] = dict(base_vocab or {})
282
+ for token, token_id in {
283
+ '[PAD]': 0,
284
+ '[UNK]': 1,
285
+ '[CLS]': 2,
286
+ '[SEP]': 3,
287
+ }.items():
288
+ vocab[token] = token_id
289
+
290
+ # Add all tokens sorted by frequency descending
291
+ next_id = max(vocab.values(), default=-1) + 1
292
+ for token in sorted(freq, key=lambda t: (-freq[t], t)):
293
+ if token not in vocab:
294
+ if max_size is not None and len(vocab) >= max_size:
295
+ break
296
+ vocab[token] = next_id
297
+ next_id += 1
298
+
299
+ self._vocab = vocab
300
+ self._ids_to_tokens = {v: k for k, v in vocab.items()}
301
+
302
+ # ---- Token-ID Conversion ----
303
+
304
+ def _convert_token_to_id(self, token: str) -> int:
305
+ return self._vocab.get(token, self.unk_token_id if self.unk_token_id is not None else 1)
306
+
307
+ def _convert_id_to_token(self, index: int) -> str:
308
+ return self._ids_to_tokens.get(index, self.unk_token if self.unk_token else '[UNK]')
309
+
310
+ def get_vocab(self) -> Dict[str, int]:
311
+ return dict(self._vocab)
312
+
313
+ # ---- Save / Load ----
314
+
315
+ def save_vocabulary(self, save_directory: str, filename_prefix: Optional[str] = None) -> Tuple[str]:
316
+ """Save vocabulary to a JSON file. Required by PreTrainedTokenizer."""
317
+ file_path = os.path.join(
318
+ save_directory,
319
+ f"{filename_prefix or ''}vocab.json"
320
+ )
321
+ with open(file_path, 'w', encoding='utf-8') as f:
322
+ json.dump(self._vocab, f, ensure_ascii=False, indent=2)
323
+ return (file_path,)
324
+
325
+ # ---- Utility ----
326
+
327
+ def __len__(self) -> int:
328
+ return len(self._vocab)
329
+
330
+ def __str__(self) -> str:
331
+ return f"AnimeTokenizer(vocab_size={self.vocab_size})"
332
+
333
+
334
+ class CharAnimeTokenizer(AnimeTokenizer):
335
+ """
336
+ Character-level tokenizer for A/B testing.
337
+
338
+ Unlike AnimeTokenizer, this variant does not preserve bracketed groups,
339
+ English words, numbers, or format tags. Every character in the filename is
340
+ one token, which gives the model maximum visibility into real fansub names.
341
+ """
342
+
343
+ tokenizer_variant: str = "char"
344
+
345
+ def tokenize(self, text: str, **kwargs) -> List[str]:
346
+ if text is None or text == "":
347
+ return []
348
+ return list(text)
349
+
350
+ def __str__(self) -> str:
351
+ return f"CharAnimeTokenizer(vocab_size={self.vocab_size})"
352
+
353
+
354
+ TOKENIZER_VARIANTS = {
355
+ "regex": AnimeTokenizer,
356
+ "char": CharAnimeTokenizer,
357
+ }
358
+
359
+
360
+ def create_tokenizer(
361
+ variant: str = "regex",
362
+ vocab_file: Optional[str] = None,
363
+ **kwargs,
364
+ ) -> AnimeTokenizer:
365
+ """Create a tokenizer by variant name."""
366
+ try:
367
+ tokenizer_cls = TOKENIZER_VARIANTS[variant]
368
+ except KeyError as exc:
369
+ supported = ", ".join(sorted(TOKENIZER_VARIANTS))
370
+ raise ValueError(f"Unsupported tokenizer variant '{variant}'. Expected one of: {supported}") from exc
371
+ return tokenizer_cls(vocab_file=vocab_file, **kwargs)
372
+
373
+
374
+ def load_tokenizer(model_dir: str, variant: Optional[str] = None) -> AnimeTokenizer:
375
+ """
376
+ Load a tokenizer from a checkpoint directory.
377
+
378
+ The variant is read from tokenizer_config.json when available. Older
379
+ checkpoints do not contain it, so they default to the original regex mode.
380
+ """
381
+ resolved_variant = variant
382
+ if resolved_variant is None:
383
+ config_path = os.path.join(model_dir, "tokenizer_config.json")
384
+ if os.path.isfile(config_path):
385
+ with open(config_path, "r", encoding="utf-8") as f:
386
+ resolved_variant = json.load(f).get("tokenizer_variant")
387
+ tokenizer_cls = TOKENIZER_VARIANTS.get(resolved_variant or "regex", AnimeTokenizer)
388
+ return tokenizer_cls.from_pretrained(model_dir)
389
+
390
+
391
+ # Quick test
392
+ if __name__ == "__main__":
393
+ tokenizer = AnimeTokenizer()
394
+
395
+ test_cases = [
396
+ "[ANi] 葬送的芙莉莲 S2 - 03 [1080P][WEB-DL]",
397
+ "[SubsPlease] Mushoku Tensei - 12 (1080p) [x265][AAC]",
398
+ "【喵萌奶茶屋】★04月新番★[葬送的芙莉莲][01][1080P][HEVC]",
399
+ "Sousou no Frieren S01E01 [BDRip 1920x1080 FLAC]",
400
+ "[VCB-Studio] Girls Band Cry [01][Ma10p_1080p][x265_flac]",
401
+ "86 Eighty Six - 01 [1080P][Baha]",
402
+ "",
403
+ "test",
404
+ ]
405
+
406
+ for case in test_cases:
407
+ toks = tokenizer.tokenize(case)
408
+ print(f"Input: {case}")
409
+ print(f"Tokens: {toks}")
410
+ print()
411
+
snapshots/anifilebert-dapt512-long/anifilebert/train.py ADDED
@@ -0,0 +1,1838 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Train AniFileBERT for structured anime filename parsing.
3
+
4
+ The training loop keeps the existing PyTorch/Transformers stack, writes
5
+ Hugging Face checkpoints, records token/entity metrics, and also evaluates
6
+ end-to-end parser exact-match on held-out filenames and fixed real-world cases.
7
+ """
8
+
9
+ import os
10
+ import sys
11
+ import json
12
+ import argparse
13
+ import random
14
+ import subprocess
15
+ import threading
16
+ import time
17
+ import gc
18
+ from collections import Counter
19
+ from ctypes import POINTER, Structure, byref, c_int, c_uint, c_ulonglong, c_void_p, cdll
20
+ from ctypes import util as ctypes_util
21
+ from typing import Dict, List, Optional, Sequence
22
+
23
+ import numpy as np
24
+ import torch
25
+ import torch.nn.functional as F
26
+ from torch.utils.data import SequentialSampler
27
+ from transformers import (
28
+ Trainer,
29
+ TrainingArguments,
30
+ TrainerCallback,
31
+ )
32
+ from seqeval.metrics import classification_report, accuracy_score, f1_score, precision_score, recall_score
33
+
34
+ from .config import Config
35
+ from .tokenizer import AnimeTokenizer, create_tokenizer, load_tokenizer
36
+ from .model import (
37
+ create_model,
38
+ print_model_summary,
39
+ count_parameters,
40
+ load_model,
41
+ migrate_token_classifier_labels,
42
+ save_model_head_config,
43
+ )
44
+ from .dataset import AnimeItemsDataset, EncodedAnimeDataset, labels_for_tokenizer
45
+ from .inference import parse_filename, postprocess
46
+ from .labels import (
47
+ canonical_entity,
48
+ canonical_bio_label,
49
+ is_season_like_label,
50
+ is_title_entity,
51
+ )
52
+ from .virtual_dataset import DatasetRangeView, ShardedEncodedDataset
53
+
54
+
55
+ def compute_metrics(p):
56
+ """Compute token-level and entity-level metrics using seqeval."""
57
+ predictions, labels = p
58
+ predictions = np.argmax(predictions, axis=2)
59
+
60
+ # Remove ignored index (special tokens)
61
+ true_predictions = []
62
+ true_labels = []
63
+
64
+ id2label = Config().id2label
65
+
66
+ for pred_seq, label_seq in zip(predictions, labels):
67
+ preds = []
68
+ lbls = []
69
+ for p, l in zip(pred_seq, label_seq):
70
+ if l != -100:
71
+ preds.append(id2label[p])
72
+ lbls.append(id2label[l])
73
+ true_predictions.append(preds)
74
+ true_labels.append(lbls)
75
+
76
+ # Entity-level metrics (via seqeval)
77
+ return {
78
+ "precision": precision_score(true_labels, true_predictions),
79
+ "recall": recall_score(true_labels, true_predictions),
80
+ "f1": f1_score(true_labels, true_predictions),
81
+ "accuracy": accuracy_score(true_labels, true_predictions),
82
+ }
83
+
84
+
85
+ def parse_args() -> argparse.Namespace:
86
+ parser = argparse.ArgumentParser(description="Train anime filename parser")
87
+ parser.add_argument("--tokenizer", choices=["regex", "char"], default=None,
88
+ help="Tokenizer variant for A/B testing. Defaults to dataset metadata")
89
+ parser.add_argument("--data-file", default=None, help="Primary training JSONL file")
90
+ parser.add_argument("--extra-data-file", action="append", default=[],
91
+ help="Additional training JSONL file. Can be passed multiple times.")
92
+ parser.add_argument("--extra-data-repeat", type=int, default=1,
93
+ help="Repeat each extra dataset this many times after loading")
94
+ parser.add_argument("--virtual-dataset-dir", default=None,
95
+ help="Pre-encoded shard directory generated by tools/virtual_dataset_generator")
96
+ parser.add_argument("--encoded-cache-dir", default=None,
97
+ help="Split train/eval encoded shard cache generated by tools/encoded_dataset_cache")
98
+ parser.add_argument("--vocab-file", default=None,
99
+ help="Tokenizer vocab JSON. Defaults to data/vocab.json or data/vocab.char.json")
100
+ parser.add_argument("--save-dir", default=None, help="Checkpoint output directory")
101
+ parser.add_argument("--init-model-dir", default=None, help="Optional checkpoint to fine-tune from")
102
+ parser.add_argument("--model-head", choices=["auto", "linear", "crf"], default="auto",
103
+ help="Token classification head. 'crf' trains a learned linear-chain CRF loss.")
104
+ parser.add_argument("--train-crf-only", action="store_true",
105
+ help="Freeze BERT and classifier weights and train only CRF transitions.")
106
+ parser.add_argument("--rdrop-alpha", type=float, default=0.0,
107
+ help="Symmetric KL weight for R-Drop regularization; 0 disables it.")
108
+ parser.add_argument("--epochs", type=float, default=None, help="Number of training epochs")
109
+ parser.add_argument("--max-steps", type=int, default=-1,
110
+ help="Override epoch-based training and stop after this many optimizer steps")
111
+ parser.add_argument("--batch-size", type=int, default=None, help="Per-device train/eval batch size")
112
+ parser.add_argument("--learning-rate", type=float, default=None, help="Learning rate")
113
+ parser.add_argument("--warmup-steps", type=int, default=None, help="Warmup steps")
114
+ parser.add_argument("--train-split", type=float, default=None, help="Train split ratio")
115
+ parser.add_argument("--max-seq-length", type=int, default=None, help="Maximum sequence length")
116
+ parser.add_argument("--seed", type=int, default=42, help="Random seed")
117
+ parser.add_argument("--limit-samples", type=int, default=None,
118
+ help="Use only the first N samples for quick A/B smoke runs")
119
+ parser.add_argument("--augment-partial-samples", type=int, default=0,
120
+ help="Generate this many partial BIO-span samples in memory before training")
121
+ parser.add_argument("--augment-permutation-samples", type=int, default=0,
122
+ help="Generate this many random BIO-span permutation samples in memory before training")
123
+ parser.add_argument("--augment-special-samples", type=int, default=0,
124
+ help="Generate this many special-only/title+special samples such as Menu01 in memory")
125
+ parser.add_argument("--augment-max-chars", type=int, default=160,
126
+ help="Maximum character length for generated augmentation samples")
127
+ parser.add_argument("--rebuild-vocab", action="store_true",
128
+ help="Rebuild vocab from the selected data file before training")
129
+ parser.add_argument("--max-vocab-size", type=int, default=None,
130
+ help="Optional vocab cap used with --rebuild-vocab")
131
+ parser.add_argument("--checkpoint-steps", type=int, default=None,
132
+ help="Save resumable checkpoints every N steps instead of only at epoch end")
133
+ parser.add_argument("--save-total-limit", type=int, default=2,
134
+ help="Maximum number of checkpoints to keep")
135
+ parser.add_argument("--no-periodic-eval", action="store_true",
136
+ help="Skip Trainer's scheduled train-time eval/load-best-model; final evaluation still runs")
137
+ parser.add_argument("--keep-raw-dataset", action="store_true",
138
+ help="Keep raw JSONL dictionaries in memory after encoded datasets are built")
139
+ parser.add_argument("--gradient-accumulation-steps", type=int, default=1,
140
+ help="Accumulate gradients across this many steps")
141
+ parser.add_argument("--num-workers", type=int, default=None,
142
+ help="DataLoader worker count. Defaults to config.num_workers")
143
+ parser.add_argument("--prefetch-factor", type=int, default=None,
144
+ help="DataLoader prefetch factor when workers are enabled")
145
+ parser.add_argument("--persistent-workers", action="store_true",
146
+ help="Keep DataLoader workers alive between epochs")
147
+ parser.add_argument("--lazy-dataset", action="store_true",
148
+ help="Tokenize samples lazily in DataLoader workers instead of pre-encoding tensors")
149
+ parser.add_argument("--apply-label-repairs", action="store_true",
150
+ help="Apply runtime deterministic label repairs while building training tensors")
151
+ parser.add_argument("--encoded-dataset-device", choices=["cpu", "cuda"], default="cpu",
152
+ help="Store pre-encoded dataset tensors on this device; cuda requires --num-workers 0")
153
+ parser.add_argument("--bf16", action="store_true",
154
+ help="Use bfloat16 mixed precision on CUDA instead of fp16")
155
+ parser.add_argument("--no-mixed-precision", action="store_true",
156
+ help="Disable fp16/bf16 mixed precision even when CUDA is available")
157
+ parser.add_argument("--tf32", dest="tf32", action="store_true",
158
+ help="Enable TF32 matmul/cudnn kernels on CUDA")
159
+ parser.add_argument("--no-tf32", dest="tf32", action="store_false",
160
+ help="Disable TF32 matmul/cudnn kernels")
161
+ parser.add_argument("--torch-compile", action="store_true",
162
+ help="Enable torch.compile through Hugging Face Trainer")
163
+ parser.add_argument("--auto-find-batch-size", action="store_true",
164
+ help="Let Trainer reduce batch size automatically on CUDA OOM")
165
+ parser.add_argument("--perf-log-steps", type=int, default=100,
166
+ help="Sample training throughput, memory, and GPU stats every N steps; 0 disables")
167
+ parser.add_argument("--perf-sample-interval", type=float, default=1.0,
168
+ help="Background NVML sampling interval in seconds during training; 0 disables")
169
+ parser.add_argument("--cpu", action="store_true", help="Force CPU training")
170
+ parser.add_argument("--no-shuffle", action="store_true", help="Do not shuffle before train/eval split")
171
+ parser.add_argument("--resume-from-checkpoint", default=None,
172
+ help="Resume Trainer state from a checkpoint directory, or 'auto' for the latest checkpoint")
173
+ parser.add_argument("--tensorboard", dest="tensorboard", action="store_true",
174
+ help="Log metrics to TensorBoard in addition to stdout/checkpoints")
175
+ parser.add_argument("--no-tensorboard", dest="tensorboard", action="store_false",
176
+ help="Disable TensorBoard logging")
177
+ parser.add_argument("--experiment-name", default=None,
178
+ help="Optional experiment name written to run_metadata.json")
179
+ parser.add_argument("--parse-eval-limit", type=int, default=512,
180
+ help="Run field exact-match evaluation on up to N eval samples after training; 0 disables it")
181
+ parser.add_argument("--case-eval-file", default=os.path.join("data", "parser_regression_cases.json"),
182
+ help="Fixed real-world parser regression case file evaluated after training")
183
+ parser.add_argument("--case-eval-output", default=None,
184
+ help="Optional output path for fixed case metrics; defaults to final/case_metrics.json")
185
+ parser.add_argument("--no-case-eval", action="store_true",
186
+ help="Skip fixed real-world parser regression evaluation")
187
+ parser.add_argument("--hidden-size", type=int, default=None, help="Override BERT hidden size")
188
+ parser.add_argument("--num-hidden-layers", type=int, default=None, help="Override BERT layer count")
189
+ parser.add_argument("--num-attention-heads", type=int, default=None, help="Override BERT attention heads")
190
+ parser.add_argument("--intermediate-size", type=int, default=None, help="Override BERT FFN intermediate size")
191
+ parser.set_defaults(tf32=True)
192
+ parser.set_defaults(tensorboard=True)
193
+ return parser.parse_args()
194
+
195
+
196
+ def detect_tokenizer_variant(
197
+ data_file: str,
198
+ explicit_variant: Optional[str],
199
+ explicit_vocab_path: Optional[str],
200
+ sample_size: int = 256,
201
+ ) -> str:
202
+ """Infer tokenizer variant from CLI, dataset metadata, or vocab filename."""
203
+ if explicit_variant:
204
+ return explicit_variant
205
+
206
+ variants = set()
207
+ char_like = 0
208
+ inspected = 0
209
+ with open(data_file, "r", encoding="utf-8") as f:
210
+ for line in f:
211
+ if inspected >= sample_size:
212
+ break
213
+ line = line.strip()
214
+ if not line:
215
+ continue
216
+ item = json.loads(line)
217
+ inspected += 1
218
+ variant = item.get("tokenizer_variant")
219
+ if variant:
220
+ variants.add(variant)
221
+ tokens = item.get("tokens", [])
222
+ filename = item.get("filename")
223
+ if filename is not None and tokens == list(filename):
224
+ char_like += 1
225
+
226
+ if len(variants) == 1:
227
+ return next(iter(variants))
228
+ if len(variants) > 1:
229
+ raise ValueError(f"Mixed tokenizer_variant values in {data_file}: {sorted(variants)}")
230
+ if explicit_vocab_path and ".char" in os.path.basename(explicit_vocab_path).lower():
231
+ return "char"
232
+ if inspected and char_like / inspected >= 0.95:
233
+ return "char"
234
+ return "regex"
235
+
236
+
237
+ def detect_tokenizer_variant_from_files(
238
+ data_files: List[str],
239
+ explicit_variant: Optional[str],
240
+ explicit_vocab_path: Optional[str],
241
+ ) -> str:
242
+ if explicit_variant:
243
+ return explicit_variant
244
+ variants = {
245
+ detect_tokenizer_variant(path, None, explicit_vocab_path)
246
+ for path in data_files
247
+ }
248
+ if len(variants) > 1:
249
+ raise ValueError(f"Mixed tokenizer variants across datasets: {sorted(variants)}")
250
+ return next(iter(variants))
251
+
252
+
253
+ def resolve_vocab_path(data_file: str, tokenizer_variant: str, explicit_path: Optional[str]) -> str:
254
+ if explicit_path:
255
+ return explicit_path
256
+ name = "vocab.json" if tokenizer_variant == "regex" else "vocab.char.json"
257
+ return os.path.join(os.path.dirname(data_file), name)
258
+
259
+
260
+ def latest_checkpoint(save_dir: str) -> Optional[str]:
261
+ if not os.path.isdir(save_dir):
262
+ return None
263
+ checkpoints = []
264
+ for name in os.listdir(save_dir):
265
+ if not name.startswith("checkpoint-"):
266
+ continue
267
+ path = os.path.join(save_dir, name)
268
+ if not os.path.isdir(path):
269
+ continue
270
+ try:
271
+ step = int(name.split("-")[-1])
272
+ except ValueError:
273
+ continue
274
+ checkpoints.append((step, path))
275
+ if not checkpoints:
276
+ return None
277
+ return max(checkpoints)[1]
278
+
279
+
280
+ def load_encoded_cache_manifest(cache_dir: str) -> Dict:
281
+ manifest_path = os.path.join(cache_dir, "manifest.json")
282
+ if not os.path.isfile(manifest_path):
283
+ raise FileNotFoundError(f"Encoded cache manifest not found: {manifest_path}")
284
+ with open(manifest_path, "r", encoding="utf-8") as f:
285
+ manifest = json.load(f)
286
+ if manifest.get("format") != "anifilebert.encoded_dataset_cache.v1":
287
+ raise ValueError(f"Unsupported encoded cache manifest: {manifest_path}")
288
+ return manifest
289
+
290
+
291
+ def encoded_cache_split_dir(cache_dir: str, manifest: Dict, split: str) -> str:
292
+ split_meta = manifest.get(split) or {}
293
+ relative_dir = split_meta.get("directory") or split
294
+ return os.path.join(cache_dir, relative_dir)
295
+
296
+
297
+ def load_encoded_cache_eval_data(cache_dir: str, manifest: Dict) -> List[Dict]:
298
+ relative_path = manifest.get("eval_records") or "eval_records.jsonl"
299
+ eval_path = os.path.join(cache_dir, relative_path)
300
+ if not os.path.isfile(eval_path):
301
+ raise FileNotFoundError(f"Encoded cache eval records not found: {eval_path}")
302
+ return load_jsonl(eval_path)
303
+
304
+
305
+ def validate_dataset_tokenizer_metadata(data: List[Dict], tokenizer_variant: str) -> None:
306
+ variants = {item.get("tokenizer_variant") for item in data if item.get("tokenizer_variant")}
307
+ if variants and variants != {tokenizer_variant}:
308
+ raise ValueError(
309
+ f"Dataset tokenizer_variant {sorted(variants)} does not match selected tokenizer "
310
+ f"'{tokenizer_variant}'. Pass --tokenizer explicitly only when this is intentional."
311
+ )
312
+
313
+
314
+ def load_jsonl(data_file: str, limit: Optional[int] = None) -> List[Dict]:
315
+ """Load JSONL rows, stopping early for smoke runs."""
316
+ data: List[Dict] = []
317
+ with open(data_file, "r", encoding="utf-8") as f:
318
+ for line in f:
319
+ line = line.strip()
320
+ if not line:
321
+ continue
322
+ data.append(json.loads(line))
323
+ if limit is not None and len(data) >= limit:
324
+ break
325
+ return data
326
+
327
+
328
+ def load_training_sources(
329
+ primary_data_file: str,
330
+ extra_data_files: List[str],
331
+ extra_repeat: int,
332
+ limit: Optional[int] = None,
333
+ ) -> tuple[List[Dict], List[Dict]]:
334
+ """Load primary plus extra datasets while preserving source metadata."""
335
+ sources: List[Dict] = []
336
+ primary = load_jsonl(primary_data_file, limit)
337
+ all_data: List[Dict] = list(primary)
338
+ sources.append(
339
+ {
340
+ "role": "primary",
341
+ "path": primary_data_file,
342
+ "samples": len(primary),
343
+ "repeat": 1,
344
+ "effective_samples": len(primary),
345
+ }
346
+ )
347
+
348
+ repeat = max(1, extra_repeat)
349
+ for path in extra_data_files:
350
+ rows = load_jsonl(path, None)
351
+ for _ in range(repeat):
352
+ all_data.extend(rows)
353
+ sources.append(
354
+ {
355
+ "role": "extra",
356
+ "path": path,
357
+ "samples": len(rows),
358
+ "repeat": repeat,
359
+ "effective_samples": len(rows) * repeat,
360
+ }
361
+ )
362
+ return all_data, sources
363
+
364
+
365
+ def extract_entities_from_labels(tokens: Sequence[str], labels: Sequence[str]) -> Dict[str, List[str]]:
366
+ """Extract contiguous BIO entity text spans from token/label arrays."""
367
+ entities: Dict[str, List[str]] = {}
368
+ active_entity: Optional[str] = None
369
+ active_tokens: List[str] = []
370
+
371
+ for token, label in zip(tokens, labels):
372
+ label = canonical_bio_label(str(label))
373
+ if label.startswith("B-"):
374
+ if active_entity and active_tokens:
375
+ entities.setdefault(active_entity, []).append("".join(active_tokens))
376
+ entity = label[2:]
377
+ active_entity = "TITLE" if is_title_entity(entity) else ("SEASON" if entity == "PATH_SEASON" else entity)
378
+ active_tokens = [str(token)]
379
+ elif label.startswith("I-"):
380
+ entity = label[2:]
381
+ entity = "TITLE" if is_title_entity(entity) else ("SEASON" if entity == "PATH_SEASON" else entity)
382
+ if active_entity == entity:
383
+ active_tokens.append(str(token))
384
+ else:
385
+ if active_entity and active_tokens:
386
+ entities.setdefault(active_entity, []).append("".join(active_tokens))
387
+ active_entity = entity
388
+ active_tokens = [str(token)]
389
+ else:
390
+ if active_entity and active_tokens:
391
+ entities.setdefault(active_entity, []).append("".join(active_tokens))
392
+ active_entity = None
393
+ active_tokens = []
394
+
395
+ if active_entity and active_tokens:
396
+ entities.setdefault(active_entity, []).append("".join(active_tokens))
397
+ return entities
398
+
399
+
400
+ def char_item_from_spans(filename: str, spans: Sequence[tuple[str, str]], source: str) -> Optional[Dict]:
401
+ """Create a char-tokenized BIO item from ordered text/entity spans."""
402
+ filename = filename.strip()
403
+ if not filename:
404
+ return None
405
+ tokens = list(filename)
406
+ labels = ["O"] * len(tokens)
407
+ cursor = 0
408
+ for text, entity in spans:
409
+ if not text:
410
+ continue
411
+ entity = canonical_entity(entity)
412
+ start = filename.find(text, cursor)
413
+ if start < 0:
414
+ start = filename.find(text)
415
+ if start < 0:
416
+ return None
417
+ end = start + len(text)
418
+ labels[start] = f"B-{entity}"
419
+ for idx in range(start + 1, end):
420
+ labels[idx] = f"I-{entity}"
421
+ cursor = end
422
+ return {
423
+ "filename": filename,
424
+ "tokens": tokens,
425
+ "labels": labels,
426
+ "tokenizer_variant": "char",
427
+ "source": source,
428
+ }
429
+
430
+
431
+ def entity_keep_probability(entity: str) -> float:
432
+ return {
433
+ "GROUP": 0.35,
434
+ "TITLE": 0.65,
435
+ "SEASON": 0.35,
436
+ "EPISODE": 0.7,
437
+ "SPECIAL": 0.3,
438
+ "RESOLUTION": 0.65,
439
+ "SOURCE": 0.65,
440
+ "TAG": 0.35,
441
+ }.get(entity, 0.5)
442
+
443
+
444
+ def build_partial_augmented_item(item: Dict, max_chars: int) -> List[Dict]:
445
+ entities = extract_entities_from_labels(item.get("tokens", []), item.get("labels", []))
446
+ title = next((value.strip() for value in entities.get("TITLE", []) if value.strip()), None)
447
+ season = next((value.strip() for value in entities.get("SEASON", []) if value.strip()), None)
448
+ episode = next((value.strip() for value in entities.get("EPISODE", []) if value.strip()), None)
449
+ special = next((value.strip() for value in entities.get("SPECIAL", []) if value.strip()), None)
450
+ resolution = next((value.strip() for value in entities.get("RESOLUTION", []) if value.strip()), None)
451
+ source = next((value.strip() for value in entities.get("SOURCE", []) if value.strip()), None)
452
+ tag = next((value.strip() for value in entities.get("TAG", []) if value.strip()), None)
453
+
454
+ specs: List[tuple[str, List[tuple[str, str]]]] = []
455
+ if title:
456
+ specs.append((title, [(title, "TITLE")]))
457
+ if title and season:
458
+ specs.append((f"{title} {season}", [(title, "TITLE"), (season, "SEASON")]))
459
+ if episode:
460
+ specs.append((episode, [(episode, "EPISODE")]))
461
+ if episode and resolution:
462
+ specs.append((f"{episode} [{resolution}]", [(episode, "EPISODE"), (resolution, "RESOLUTION")]))
463
+ if episode and resolution and source:
464
+ specs.append(
465
+ (
466
+ f"{episode} [{resolution}][{source}]",
467
+ [(episode, "EPISODE"), (resolution, "RESOLUTION"), (source, "SOURCE")],
468
+ )
469
+ )
470
+ if special:
471
+ specs.append((special, [(special, "SPECIAL")]))
472
+ if title and special:
473
+ specs.append((f"{title} - {special}", [(title, "TITLE"), (special, "SPECIAL")]))
474
+ if title and tag:
475
+ specs.append((f"{title} [{tag}]", [(title, "TITLE"), (tag, "TAG")]))
476
+
477
+ augmented: List[Dict] = []
478
+ for text, spans in specs:
479
+ if 2 <= len(text) <= max_chars:
480
+ generated = char_item_from_spans(text, spans, "train_partial_augmentation")
481
+ if generated is not None:
482
+ augmented.append(generated)
483
+ return augmented
484
+
485
+
486
+ def build_permutation_augmented_item(item: Dict, rng: random.Random, max_chars: int) -> Optional[Dict]:
487
+ entities = extract_entities_from_labels(item.get("tokens", []), item.get("labels", []))
488
+ available = [
489
+ entity
490
+ for entity in ("GROUP", "TITLE", "SEASON", "EPISODE", "SPECIAL", "RESOLUTION", "SOURCE", "TAG")
491
+ if entities.get(entity)
492
+ ]
493
+ if not available:
494
+ return None
495
+ selected = [
496
+ entity
497
+ for entity in available
498
+ if rng.random() < entity_keep_probability(entity)
499
+ ]
500
+ if not selected:
501
+ selected = [rng.choice(available)]
502
+ if "TITLE" not in selected and "EPISODE" not in selected and "SPECIAL" not in selected:
503
+ extras = [entity for entity in available if entity not in selected]
504
+ selected.append(rng.choice(extras or available))
505
+ rng.shuffle(selected)
506
+
507
+ separators = [" ", " - ", ".", "_", "]["]
508
+ sep = rng.choice(separators)
509
+ parts: List[str] = []
510
+ spans: List[tuple[str, str]] = []
511
+ for entity in selected:
512
+ values = [value.strip() for value in entities.get(entity, []) if value.strip()]
513
+ if not values:
514
+ continue
515
+ value = rng.choice(values)
516
+ if entity in {"GROUP", "EPISODE", "SPECIAL", "RESOLUTION", "SOURCE", "TAG"} and rng.random() < 0.35:
517
+ parts.append(f"[{value}]")
518
+ else:
519
+ parts.append(value)
520
+ spans.append((value, entity))
521
+ text = sep.join(parts).strip()
522
+ if not (2 <= len(text) <= max_chars):
523
+ return None
524
+ return char_item_from_spans(text, spans, "train_permutation_augmentation")
525
+
526
+
527
+ def build_special_augmented_item(data: List[Dict], rng: random.Random, max_chars: int) -> Optional[Dict]:
528
+ base_titles: List[str] = []
529
+ for _ in range(min(16, len(data))):
530
+ item = data[rng.randrange(len(data))]
531
+ entities = extract_entities_from_labels(item.get("tokens", []), item.get("labels", []))
532
+ base_titles.extend(value.strip() for value in entities.get("TITLE", []) if 2 <= len(value.strip()) <= 80)
533
+ title = rng.choice(base_titles) if base_titles else None
534
+ special = rng.choice(
535
+ [
536
+ f"Menu{rng.randint(1, 24):02d}",
537
+ f"Menu {rng.randint(1, 24):02d}",
538
+ f"BDMenu{rng.randint(1, 24):02d}",
539
+ f"BD Menu{rng.randint(1, 24):02d}",
540
+ f"Menu{rng.randint(1, 24):02d}-01",
541
+ "Menu",
542
+ f"OP{rng.randint(1, 6):02d}",
543
+ f"ED E{rng.randint(1, 24):02d}",
544
+ f"NCOP{rng.randint(1, 6):02d}",
545
+ f"NCED{rng.randint(1, 6):02d}",
546
+ f"CM{rng.randint(1, 12):02d}",
547
+ f"PV{rng.randint(1, 12):02d}",
548
+ ]
549
+ )
550
+ if title and rng.random() < 0.55:
551
+ text = f"{title} - {special}"
552
+ spans = [(title, "TITLE"), (special, "SPECIAL")]
553
+ else:
554
+ text = special
555
+ spans = [(special, "SPECIAL")]
556
+ if len(text) > max_chars:
557
+ return None
558
+ return char_item_from_spans(text, spans, "train_special_augmentation")
559
+
560
+
561
+ def process_memory_mb() -> Optional[float]:
562
+ try:
563
+ import psutil # type: ignore
564
+
565
+ return psutil.Process(os.getpid()).memory_info().rss / (1024 * 1024)
566
+ except Exception:
567
+ pass
568
+
569
+ if os.name == "nt":
570
+ try:
571
+ import ctypes
572
+ from ctypes import wintypes
573
+
574
+ class PROCESS_MEMORY_COUNTERS(ctypes.Structure):
575
+ _fields_ = [
576
+ ("cb", wintypes.DWORD),
577
+ ("PageFaultCount", wintypes.DWORD),
578
+ ("PeakWorkingSetSize", ctypes.c_size_t),
579
+ ("WorkingSetSize", ctypes.c_size_t),
580
+ ("QuotaPeakPagedPoolUsage", ctypes.c_size_t),
581
+ ("QuotaPagedPoolUsage", ctypes.c_size_t),
582
+ ("QuotaPeakNonPagedPoolUsage", ctypes.c_size_t),
583
+ ("QuotaNonPagedPoolUsage", ctypes.c_size_t),
584
+ ("PagefileUsage", ctypes.c_size_t),
585
+ ("PeakPagefileUsage", ctypes.c_size_t),
586
+ ]
587
+
588
+ counters = PROCESS_MEMORY_COUNTERS()
589
+ counters.cb = ctypes.sizeof(counters)
590
+ handle = ctypes.windll.kernel32.GetCurrentProcess()
591
+ if ctypes.windll.psapi.GetProcessMemoryInfo(handle, ctypes.byref(counters), counters.cb):
592
+ return float(counters.WorkingSetSize) / (1024 * 1024)
593
+ except Exception:
594
+ pass
595
+
596
+ try:
597
+ import resource # type: ignore
598
+
599
+ usage = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
600
+ if sys.platform == "darwin":
601
+ usage = usage / 1024 / 1024
602
+ else:
603
+ usage = usage / 1024
604
+ return float(usage)
605
+ except Exception:
606
+ return None
607
+
608
+
609
+ class NvmlSampler:
610
+ """Tiny NVML binding for runtime GPU telemetry without adding dependencies."""
611
+
612
+ NVML_TEMPERATURE_GPU = 0
613
+
614
+ def __init__(self):
615
+ self._lib = None
616
+ self._handle = None
617
+ self._available = False
618
+ self._init()
619
+
620
+ def _candidate_names(self) -> List[str]:
621
+ names = []
622
+ found = ctypes_util.find_library("nvidia-ml")
623
+ if found:
624
+ names.append(found)
625
+ if os.name == "nt":
626
+ names.extend(
627
+ [
628
+ os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "nvml.dll"),
629
+ "nvml.dll",
630
+ "nvidia-ml.dll",
631
+ ]
632
+ )
633
+ else:
634
+ names.extend(["libnvidia-ml.so.1", "libnvidia-ml.so"])
635
+ return names
636
+
637
+ def _init(self) -> None:
638
+ for name in self._candidate_names():
639
+ try:
640
+ lib = cdll.LoadLibrary(name)
641
+ break
642
+ except Exception:
643
+ continue
644
+ else:
645
+ return
646
+
647
+ class NVMLUtilization(Structure):
648
+ _fields_ = [("gpu", c_uint), ("memory", c_uint)]
649
+
650
+ class NVMLMemory(Structure):
651
+ _fields_ = [("total", c_ulonglong), ("free", c_ulonglong), ("used", c_ulonglong)]
652
+
653
+ self.NVMLUtilization = NVMLUtilization
654
+ self.NVMLMemory = NVMLMemory
655
+ lib.nvmlInit_v2.restype = c_int
656
+ lib.nvmlDeviceGetHandleByIndex_v2.argtypes = [c_uint, POINTER(c_void_p)]
657
+ lib.nvmlDeviceGetHandleByIndex_v2.restype = c_int
658
+ handle = c_void_p()
659
+ try:
660
+ if lib.nvmlInit_v2() != 0:
661
+ return
662
+ if lib.nvmlDeviceGetHandleByIndex_v2(0, byref(handle)) != 0:
663
+ return
664
+ except Exception:
665
+ return
666
+ self._lib = lib
667
+ self._handle = handle
668
+ self._available = True
669
+
670
+ @property
671
+ def available(self) -> bool:
672
+ return self._available
673
+
674
+ def sample(self) -> Dict[str, Optional[float]]:
675
+ if not self._available or self._lib is None or self._handle is None:
676
+ return {}
677
+ stats: Dict[str, Optional[float]] = {}
678
+ try:
679
+ util_rates = self.NVMLUtilization()
680
+ self._lib.nvmlDeviceGetUtilizationRates.argtypes = [c_void_p, POINTER(self.NVMLUtilization)]
681
+ if self._lib.nvmlDeviceGetUtilizationRates(self._handle, byref(util_rates)) == 0:
682
+ stats["gpu_util_percent"] = float(util_rates.gpu)
683
+ stats["gpu_memory_util_percent"] = float(util_rates.memory)
684
+ except Exception:
685
+ pass
686
+ try:
687
+ memory = self.NVMLMemory()
688
+ self._lib.nvmlDeviceGetMemoryInfo.argtypes = [c_void_p, POINTER(self.NVMLMemory)]
689
+ if self._lib.nvmlDeviceGetMemoryInfo(self._handle, byref(memory)) == 0:
690
+ stats["gpu_memory_used_mb"] = float(memory.used) / (1024 * 1024)
691
+ stats["gpu_memory_total_mb"] = float(memory.total) / (1024 * 1024)
692
+ except Exception:
693
+ pass
694
+ try:
695
+ temperature = c_uint()
696
+ self._lib.nvmlDeviceGetTemperature.argtypes = [c_void_p, c_uint, POINTER(c_uint)]
697
+ if self._lib.nvmlDeviceGetTemperature(self._handle, self.NVML_TEMPERATURE_GPU, byref(temperature)) == 0:
698
+ stats["gpu_temperature_c"] = float(temperature.value)
699
+ except Exception:
700
+ pass
701
+ try:
702
+ power_mw = c_uint()
703
+ self._lib.nvmlDeviceGetPowerUsage.argtypes = [c_void_p, POINTER(c_uint)]
704
+ if self._lib.nvmlDeviceGetPowerUsage(self._handle, byref(power_mw)) == 0:
705
+ stats["gpu_power_w"] = float(power_mw.value) / 1000.0
706
+ except Exception:
707
+ pass
708
+ return stats
709
+
710
+
711
+ _NVML_SAMPLER: Optional[NvmlSampler] = None
712
+
713
+
714
+ def query_nvml() -> Dict[str, Optional[float]]:
715
+ global _NVML_SAMPLER
716
+ if _NVML_SAMPLER is None:
717
+ _NVML_SAMPLER = NvmlSampler()
718
+ return _NVML_SAMPLER.sample()
719
+
720
+
721
+ def query_nvidia_smi() -> Dict[str, Optional[float]]:
722
+ try:
723
+ result = subprocess.run(
724
+ [
725
+ "nvidia-smi",
726
+ "--query-gpu=utilization.gpu,memory.used,memory.total,power.draw",
727
+ "--format=csv,noheader,nounits",
728
+ ],
729
+ check=False,
730
+ capture_output=True,
731
+ text=True,
732
+ timeout=2,
733
+ )
734
+ except Exception:
735
+ return {}
736
+ if result.returncode != 0 or not result.stdout.strip():
737
+ return {}
738
+ first_line = result.stdout.strip().splitlines()[0]
739
+ values = [part.strip() for part in first_line.split(",")]
740
+ keys = ["gpu_util_percent", "gpu_memory_used_mb", "gpu_memory_total_mb", "gpu_power_w"]
741
+ stats: Dict[str, Optional[float]] = {}
742
+ for key, value in zip(keys, values):
743
+ try:
744
+ stats[key] = float(value)
745
+ except ValueError:
746
+ stats[key] = None
747
+ return stats
748
+
749
+
750
+ def cuda_memory_stats_mb() -> Dict[str, float]:
751
+ if not torch.cuda.is_available():
752
+ return {}
753
+ return {
754
+ "cuda_allocated_mb": torch.cuda.memory_allocated() / (1024 * 1024),
755
+ "cuda_reserved_mb": torch.cuda.memory_reserved() / (1024 * 1024),
756
+ "cuda_max_allocated_mb": torch.cuda.max_memory_allocated() / (1024 * 1024),
757
+ "cuda_max_reserved_mb": torch.cuda.max_memory_reserved() / (1024 * 1024),
758
+ }
759
+
760
+
761
+ def snapshot_perf_stats() -> Dict[str, Optional[float]]:
762
+ stats: Dict[str, Optional[float]] = {}
763
+ stats["process_rss_mb"] = process_memory_mb()
764
+ stats.update(cuda_memory_stats_mb())
765
+ gpu_stats = query_nvml()
766
+ if not gpu_stats:
767
+ gpu_stats = query_nvidia_smi()
768
+ stats.update(gpu_stats)
769
+ return stats
770
+
771
+
772
+ class TrainingPerfCallback(TrainerCallback):
773
+ """Lightweight runtime telemetry for spotting data-pipeline starvation."""
774
+
775
+ def __init__(self, batch_size: int, sequence_length: int, log_steps: int, sample_interval: float):
776
+ self.batch_size = batch_size
777
+ self.sequence_length = sequence_length
778
+ self.log_steps = max(0, log_steps)
779
+ self.sample_interval = max(0.0, sample_interval)
780
+ self.samples: List[Dict[str, Optional[float]]] = []
781
+ self.background_samples: List[Dict[str, Optional[float]]] = []
782
+ self._last_step = 0
783
+ self._last_time: Optional[float] = None
784
+ self._start_time: Optional[float] = None
785
+ self._training = False
786
+ self._stop_event = threading.Event()
787
+ self._thread: Optional[threading.Thread] = None
788
+
789
+ def on_train_begin(self, args, state, control, **kwargs):
790
+ now = time.perf_counter()
791
+ self._start_time = now
792
+ self._last_time = now
793
+ self._last_step = int(state.global_step)
794
+ self._training = True
795
+ self._stop_event.clear()
796
+ if self.sample_interval > 0:
797
+ self._thread = threading.Thread(target=self._background_sample_loop, daemon=True)
798
+ self._thread.start()
799
+
800
+ def on_train_end(self, args, state, control, **kwargs):
801
+ self._training = False
802
+ self._stop_event.set()
803
+ if self._thread is not None:
804
+ self._thread.join(timeout=max(self.sample_interval * 2, 1.0))
805
+ self._thread = None
806
+
807
+ def on_log(self, args, state, control, logs=None, **kwargs):
808
+ if not self._training:
809
+ return
810
+ step = int(state.global_step)
811
+ if self.log_steps <= 0 or step <= 0 or step % self.log_steps != 0:
812
+ return
813
+ self._record_sample(step)
814
+
815
+ def on_step_end(self, args, state, control, **kwargs):
816
+ if not self._training:
817
+ return
818
+ step = int(state.global_step)
819
+ if self.log_steps <= 0 or step <= 0 or step % self.log_steps != 0:
820
+ return
821
+ if self.samples and self.samples[-1].get("step") == float(step):
822
+ return
823
+ self._record_sample(step)
824
+
825
+ def _record_sample(self, step: int) -> None:
826
+ if self.samples and self.samples[-1].get("step") == float(step):
827
+ return
828
+ now = time.perf_counter()
829
+ last_time = self._last_time or now
830
+ elapsed = max(now - last_time, 1e-9)
831
+ step_delta = max(step - self._last_step, 0)
832
+ samples_per_second = step_delta * self.batch_size / elapsed
833
+ tokens_per_second = samples_per_second * self.sequence_length
834
+ stats = snapshot_perf_stats()
835
+ sample: Dict[str, Optional[float]] = {
836
+ "step": float(step),
837
+ "elapsed_seconds": now - (self._start_time or now),
838
+ "window_seconds": elapsed,
839
+ "steps_per_second": step_delta / elapsed,
840
+ "samples_per_second": samples_per_second,
841
+ "tokens_per_second": tokens_per_second,
842
+ }
843
+ sample.update(stats)
844
+ self.samples.append(sample)
845
+ print(
846
+ " perf "
847
+ f"step={step} "
848
+ f"samples/s={samples_per_second:.1f} "
849
+ f"tokens/s={tokens_per_second:.0f} "
850
+ f"rss={stats.get('process_rss_mb') or 0:.0f}MB "
851
+ f"cuda_alloc={stats.get('cuda_allocated_mb') or 0:.0f}MB "
852
+ f"gpu_util={stats.get('gpu_util_percent') if stats.get('gpu_util_percent') is not None else 'n/a'}%"
853
+ )
854
+ self._last_time = now
855
+ self._last_step = step
856
+
857
+ def _background_sample_loop(self) -> None:
858
+ while not self._stop_event.wait(self.sample_interval):
859
+ if not self._training:
860
+ continue
861
+ sample = snapshot_perf_stats()
862
+ sample["elapsed_seconds"] = (
863
+ time.perf_counter() - self._start_time
864
+ if self._start_time is not None
865
+ else None
866
+ )
867
+ self.background_samples.append(sample)
868
+
869
+ def summary(self) -> Dict:
870
+ numeric_keys = [
871
+ "samples_per_second",
872
+ "tokens_per_second",
873
+ "process_rss_mb",
874
+ "cuda_max_allocated_mb",
875
+ "gpu_util_percent",
876
+ "gpu_memory_util_percent",
877
+ "gpu_power_w",
878
+ "gpu_temperature_c",
879
+ ]
880
+ summary: Dict[str, object] = {
881
+ "sample_count": len(self.samples),
882
+ "samples": self.samples,
883
+ "background_sample_count": len(self.background_samples),
884
+ "background_samples": self.background_samples,
885
+ }
886
+ sample_groups = {
887
+ "step": self.samples,
888
+ "background": self.background_samples,
889
+ }
890
+ for prefix, samples in sample_groups.items():
891
+ if not samples:
892
+ continue
893
+ for key in numeric_keys:
894
+ values = [
895
+ float(sample[key])
896
+ for sample in samples
897
+ if sample.get(key) is not None
898
+ ]
899
+ if values:
900
+ summary[f"{prefix}_{key}_avg"] = sum(values) / len(values)
901
+ summary[f"{prefix}_{key}_max"] = max(values)
902
+ summary[f"{prefix}_{key}_min"] = min(values)
903
+ if not self.samples and not self.background_samples:
904
+ return summary
905
+ for key in numeric_keys:
906
+ values = [
907
+ float(sample[key])
908
+ for sample in self.samples
909
+ if sample.get(key) is not None
910
+ ]
911
+ if values:
912
+ summary[f"{key}_avg"] = sum(values) / len(values)
913
+ summary[f"{key}_max"] = max(values)
914
+ return summary
915
+
916
+
917
+ class FastTokenClassificationCollator:
918
+ """Stack already padded token-classification tensors without extra work."""
919
+
920
+ def __call__(self, features: List[Dict[str, torch.Tensor]]) -> Dict[str, torch.Tensor]:
921
+ batch = {
922
+ key: torch.stack([feature[key] for feature in features])
923
+ for key in features[0].keys()
924
+ }
925
+ if "input_ids" in batch:
926
+ batch["input_ids"] = batch["input_ids"].long()
927
+ if "labels" in batch:
928
+ batch["labels"] = batch["labels"].long()
929
+ if "attention_mask" in batch:
930
+ batch["attention_mask"] = batch["attention_mask"].to(dtype=torch.bool)
931
+ return batch
932
+
933
+
934
+ class OrderedTrainer(Trainer):
935
+ """Trainer variant that preserves pre-shuffled order for virtual datasets."""
936
+
937
+ def _get_train_sampler(self, train_dataset=None):
938
+ dataset = train_dataset if train_dataset is not None else self.train_dataset
939
+ if getattr(dataset, "preserve_order", False):
940
+ return SequentialSampler(dataset)
941
+ return super()._get_train_sampler(train_dataset)
942
+
943
+
944
+ class RDropTrainer(OrderedTrainer):
945
+ """Trainer that adds symmetric KL regularization between two dropout passes."""
946
+
947
+ def __init__(self, *args, rdrop_alpha: float = 0.0, **kwargs):
948
+ super().__init__(*args, **kwargs)
949
+ self.rdrop_alpha = float(rdrop_alpha)
950
+
951
+ @staticmethod
952
+ def _active_mask(labels: torch.Tensor, attention_mask: Optional[torch.Tensor]) -> torch.Tensor:
953
+ mask = labels.ne(-100)
954
+ if attention_mask is not None:
955
+ mask = mask & attention_mask.bool()
956
+ if mask.shape[1] > 2:
957
+ mask = mask[:, 1:-1]
958
+ return mask
959
+
960
+ def _symmetric_kl(
961
+ self,
962
+ logits_a: torch.Tensor,
963
+ logits_b: torch.Tensor,
964
+ labels: torch.Tensor,
965
+ attention_mask: Optional[torch.Tensor],
966
+ ) -> torch.Tensor:
967
+ if logits_a.shape != logits_b.shape:
968
+ raise ValueError("R-Drop requires matching logit shapes")
969
+ if logits_a.shape[1] <= 2:
970
+ return logits_a.new_tensor(0.0)
971
+ active_mask = self._active_mask(labels, attention_mask)
972
+ if active_mask.numel() == 0 or active_mask.sum() == 0:
973
+ return logits_a.new_tensor(0.0)
974
+ active_a = logits_a[:, 1:-1, :]
975
+ active_b = logits_b[:, 1:-1, :]
976
+ log_probs_a = F.log_softmax(active_a, dim=-1)
977
+ log_probs_b = F.log_softmax(active_b, dim=-1)
978
+ probs_a = log_probs_a.exp()
979
+ probs_b = log_probs_b.exp()
980
+ kl_ab = F.kl_div(log_probs_a, probs_b, reduction="none").sum(dim=-1)
981
+ kl_ba = F.kl_div(log_probs_b, probs_a, reduction="none").sum(dim=-1)
982
+ active_mask = active_mask.to(dtype=kl_ab.dtype)
983
+ return ((kl_ab + kl_ba) * active_mask).sum() / active_mask.sum().clamp_min(1.0)
984
+
985
+ def compute_loss(self, model, inputs, return_outputs=False, num_items_in_batch=None):
986
+ labels = inputs.pop("labels")
987
+ attention_mask = inputs.get("attention_mask")
988
+ outputs_a = model(**inputs, labels=labels)
989
+ outputs_b = model(**inputs, labels=labels)
990
+ base_loss = 0.5 * (outputs_a.loss + outputs_b.loss)
991
+ kl_loss = self._symmetric_kl(outputs_a.logits, outputs_b.logits, labels, attention_mask)
992
+ loss = base_loss + self.rdrop_alpha * 0.5 * kl_loss
993
+ if return_outputs:
994
+ return loss, outputs_a
995
+ return loss
996
+
997
+
998
+ def augment_training_data(
999
+ data: List[Dict],
1000
+ partial_count: int,
1001
+ permutation_count: int,
1002
+ special_count: int,
1003
+ max_chars: int,
1004
+ seed: int,
1005
+ ) -> tuple[List[Dict], Dict]:
1006
+ """Append generated partial/permutation samples without modifying source JSONL."""
1007
+ rng = random.Random(seed)
1008
+ augmented: List[Dict] = []
1009
+ seen = {
1010
+ item.get("filename") or "".join(str(token) for token in item.get("tokens", []))
1011
+ for item in data
1012
+ }
1013
+
1014
+ partial_written = 0
1015
+ if partial_count > 0:
1016
+ candidates: List[Dict] = []
1017
+ attempts = 0
1018
+ max_attempts = max(partial_count * 20, len(data))
1019
+ while len(candidates) < partial_count * 4 and attempts < max_attempts:
1020
+ attempts += 1
1021
+ candidates.extend(build_partial_augmented_item(rng.choice(data), max_chars))
1022
+ rng.shuffle(candidates)
1023
+ for item in candidates:
1024
+ key = item["filename"]
1025
+ if key in seen:
1026
+ continue
1027
+ seen.add(key)
1028
+ augmented.append(item)
1029
+ partial_written += 1
1030
+ if partial_written >= partial_count:
1031
+ break
1032
+
1033
+ permutation_written = 0
1034
+ attempts = 0
1035
+ while permutation_written < permutation_count and attempts < max(permutation_count * 20, 100):
1036
+ attempts += 1
1037
+ item = build_permutation_augmented_item(rng.choice(data), rng, max_chars)
1038
+ if item is None:
1039
+ continue
1040
+ key = item["filename"]
1041
+ if key in seen:
1042
+ continue
1043
+ seen.add(key)
1044
+ augmented.append(item)
1045
+ permutation_written += 1
1046
+
1047
+ special_written = 0
1048
+ attempts = 0
1049
+ while special_written < special_count and attempts < max(special_count * 20, 100):
1050
+ attempts += 1
1051
+ item = build_special_augmented_item(data, rng, max_chars)
1052
+ if item is None:
1053
+ continue
1054
+ key = item["filename"]
1055
+ if key in seen:
1056
+ continue
1057
+ seen.add(key)
1058
+ augmented.append(item)
1059
+ special_written += 1
1060
+
1061
+ meta = {
1062
+ "partial_requested": partial_count,
1063
+ "partial_written": partial_written,
1064
+ "permutation_requested": permutation_count,
1065
+ "permutation_written": permutation_written,
1066
+ "special_requested": special_count,
1067
+ "special_written": special_written,
1068
+ "max_chars": max_chars,
1069
+ }
1070
+ return data + augmented, meta
1071
+
1072
+
1073
+ def normalize_field_value(field: str, value) -> Optional[str]:
1074
+ if value is None:
1075
+ return None
1076
+ if isinstance(value, list):
1077
+ normalized_items = [
1078
+ normalize_field_value(field, item)
1079
+ for item in value
1080
+ if item is not None
1081
+ ]
1082
+ return "|".join(item for item in normalized_items if item)
1083
+ if field in {"episode", "season"}:
1084
+ try:
1085
+ return str(int(value))
1086
+ except (TypeError, ValueError):
1087
+ return str(value).strip().lower()
1088
+ text = str(value).strip()
1089
+ if field in {"resolution", "source"}:
1090
+ return text.lower().replace("_", "-")
1091
+ return " ".join(text.lower().split())
1092
+
1093
+
1094
+ def parse_exact_metrics(
1095
+ samples: List[Dict],
1096
+ model: torch.nn.Module,
1097
+ tokenizer: AnimeTokenizer,
1098
+ id2label: Dict[int, str],
1099
+ max_length: int,
1100
+ limit: Optional[int],
1101
+ constrain_bio: bool = True,
1102
+ ) -> Dict:
1103
+ """Evaluate end-to-end field exact match on filenames, not just token loss."""
1104
+ fields = ["group", "title", "season", "episode", "resolution", "source", "special"]
1105
+ selected = [sample for sample in samples if sample.get("filename")]
1106
+ if limit is not None and limit > 0:
1107
+ selected = selected[:limit]
1108
+
1109
+ counter: Counter = Counter()
1110
+ failures: List[Dict] = []
1111
+ model.eval()
1112
+
1113
+ for sample in selected:
1114
+ filename = sample["filename"]
1115
+ tokens, gold_labels = labels_for_tokenizer(sample, tokenizer)
1116
+ available = max(0, max_length - 2)
1117
+ tokens = tokens[:available]
1118
+ gold_labels = gold_labels[:available]
1119
+ gold = postprocess(tokens, gold_labels, tokenizer=tokenizer)
1120
+ gold_entities = {label.split("-", 1)[1] for label in gold_labels if label.startswith(("B-", "I-"))}
1121
+ if "EPISODE" not in gold_entities:
1122
+ gold["episode"] = None
1123
+ if not any(is_season_like_label(label) for label in gold_labels):
1124
+ gold["season"] = None
1125
+ pred = parse_filename(
1126
+ filename,
1127
+ model,
1128
+ tokenizer,
1129
+ id2label,
1130
+ max_length=max_length,
1131
+ debug=False,
1132
+ constrain_bio=constrain_bio,
1133
+ )
1134
+
1135
+ full_match = True
1136
+ field_errors: Dict[str, Dict[str, Optional[str]]] = {}
1137
+ for field in fields:
1138
+ gold_value = normalize_field_value(field, gold.get(field))
1139
+ pred_value = normalize_field_value(field, pred.get(field))
1140
+ counter[f"{field}_total"] += 1
1141
+ if gold_value == pred_value:
1142
+ counter[f"{field}_correct"] += 1
1143
+ else:
1144
+ full_match = False
1145
+ field_errors[field] = {"gold": gold_value, "pred": pred_value}
1146
+ counter["full_total"] += 1
1147
+ if full_match:
1148
+ counter["full_correct"] += 1
1149
+ elif len(failures) < 20:
1150
+ failures.append(
1151
+ {
1152
+ "filename": filename,
1153
+ "errors": field_errors,
1154
+ "gold": {field: gold.get(field) for field in fields},
1155
+ "pred": {field: pred.get(field) for field in fields},
1156
+ }
1157
+ )
1158
+
1159
+ field_accuracy = {}
1160
+ for field in fields:
1161
+ total = counter.get(f"{field}_total", 0)
1162
+ correct = counter.get(f"{field}_correct", 0)
1163
+ field_accuracy[field] = correct / total if total else 0.0
1164
+
1165
+ total = counter.get("full_total", 0)
1166
+ correct = counter.get("full_correct", 0)
1167
+ return {
1168
+ "constrain_bio": constrain_bio,
1169
+ "sample_count": total,
1170
+ "field_accuracy": field_accuracy,
1171
+ "field_correct": {field: counter.get(f"{field}_correct", 0) for field in fields},
1172
+ "field_total": {field: counter.get(f"{field}_total", 0) for field in fields},
1173
+ "full_match_accuracy": correct / total if total else 0.0,
1174
+ "full_match_correct": correct,
1175
+ "full_match_total": total,
1176
+ "failures": failures,
1177
+ }
1178
+
1179
+
1180
+ def parse_exact_metrics_all_modes(
1181
+ samples: List[Dict],
1182
+ model: torch.nn.Module,
1183
+ tokenizer: AnimeTokenizer,
1184
+ id2label: Dict[int, str],
1185
+ max_length: int,
1186
+ limit: Optional[int],
1187
+ ) -> Dict:
1188
+ modes = {
1189
+ "model_only": {"constrain_bio": False},
1190
+ "normalized_only": {"constrain_bio": True},
1191
+ }
1192
+ return {
1193
+ "primary_metric": "normalized_only",
1194
+ "modes": {
1195
+ name: parse_exact_metrics(
1196
+ samples,
1197
+ model,
1198
+ tokenizer,
1199
+ id2label,
1200
+ max_length,
1201
+ limit,
1202
+ constrain_bio=settings["constrain_bio"],
1203
+ )
1204
+ for name, settings in modes.items()
1205
+ },
1206
+ }
1207
+
1208
+
1209
+ def remap_token_embeddings(
1210
+ model: torch.nn.Module,
1211
+ old_vocab: Dict[str, int],
1212
+ new_vocab: Dict[str, int],
1213
+ pad_token_id: int,
1214
+ ) -> int:
1215
+ """
1216
+ Replace the input embedding table for a changed vocabulary.
1217
+
1218
+ resize_token_embeddings() preserves rows by numeric ID, which is unsafe when
1219
+ two tokenizers assign different tokens to the same ID. This remaps by token
1220
+ string and randomly initializes tokens that do not exist in the old vocab.
1221
+ """
1222
+ old_embeddings = model.get_input_embeddings()
1223
+ old_weight = old_embeddings.weight.data
1224
+ embedding_dim = old_weight.shape[1]
1225
+ new_embeddings = torch.nn.Embedding(
1226
+ len(new_vocab),
1227
+ embedding_dim,
1228
+ padding_idx=pad_token_id,
1229
+ device=old_weight.device,
1230
+ dtype=old_weight.dtype,
1231
+ )
1232
+ torch.nn.init.normal_(
1233
+ new_embeddings.weight,
1234
+ mean=0.0,
1235
+ std=getattr(model.config, "initializer_range", 0.02),
1236
+ )
1237
+ if pad_token_id is not None and 0 <= pad_token_id < len(new_vocab):
1238
+ new_embeddings.weight.data[pad_token_id].zero_()
1239
+
1240
+ copied = 0
1241
+ for token, new_id in new_vocab.items():
1242
+ old_id = old_vocab.get(token)
1243
+ if old_id is None or old_id >= old_weight.shape[0]:
1244
+ continue
1245
+ new_embeddings.weight.data[new_id].copy_(old_weight[old_id])
1246
+ copied += 1
1247
+
1248
+ model.set_input_embeddings(new_embeddings)
1249
+ model.config.vocab_size = len(new_vocab)
1250
+ return copied
1251
+
1252
+
1253
+ def build_vocab_from_data(data: List[Dict], tokenizer: AnimeTokenizer, vocab_path: str,
1254
+ max_size: Optional[int] = None) -> None:
1255
+ token_lists: List[List[str]] = []
1256
+ for item in data:
1257
+ tokens, _labels = labels_for_tokenizer(item, tokenizer)
1258
+ token_lists.append(tokens)
1259
+
1260
+ tokenizer.build_vocab(token_lists, max_size=max_size)
1261
+ save_dir = os.path.dirname(vocab_path) or "."
1262
+ os.makedirs(save_dir, exist_ok=True)
1263
+ with open(vocab_path, "w", encoding="utf-8") as f:
1264
+ json.dump(tokenizer.get_vocab(), f, ensure_ascii=False, indent=2)
1265
+
1266
+
1267
+ def architecture_matches_config(model, config: Config) -> bool:
1268
+ model_config = model.config
1269
+ return (
1270
+ int(getattr(model_config, "hidden_size", -1)) == int(config.hidden_size)
1271
+ and int(getattr(model_config, "num_hidden_layers", -1)) == int(config.num_hidden_layers)
1272
+ and int(getattr(model_config, "num_attention_heads", -1)) == int(config.num_attention_heads)
1273
+ and int(getattr(model_config, "intermediate_size", -1)) == int(config.intermediate_size)
1274
+ and int(getattr(model_config, "max_position_embeddings", -1)) >= int(config.max_position_embeddings)
1275
+ )
1276
+
1277
+
1278
+ def rebuild_model_with_architecture_overrides(source_model, config: Config, model_head: str):
1279
+ """Create a target architecture and copy same-shaped tensors from source."""
1280
+ target_model = create_model(config, model_head=model_head)
1281
+ source_state = source_model.state_dict()
1282
+ target_state = target_model.state_dict()
1283
+ copied_tensors = 0
1284
+ copied_parameters = 0
1285
+ skipped = []
1286
+
1287
+ with torch.no_grad():
1288
+ for name, target_tensor in target_state.items():
1289
+ source_tensor = source_state.get(name)
1290
+ if source_tensor is None or tuple(source_tensor.shape) != tuple(target_tensor.shape):
1291
+ skipped.append(name)
1292
+ continue
1293
+ target_tensor.copy_(source_tensor.to(device=target_tensor.device, dtype=target_tensor.dtype))
1294
+ copied_tensors += 1
1295
+ copied_parameters += target_tensor.numel()
1296
+
1297
+ target_model.load_state_dict(target_state)
1298
+ return target_model, {
1299
+ "copied_tensors": copied_tensors,
1300
+ "copied_parameters": copied_parameters,
1301
+ "skipped_tensors": len(skipped),
1302
+ "skipped_examples": skipped[:10],
1303
+ }
1304
+
1305
+
1306
+ def main():
1307
+ args = parse_args()
1308
+ config = Config()
1309
+ if args.data_file is not None:
1310
+ config.data_file = args.data_file
1311
+ training_files = [config.data_file] + list(args.extra_data_file or [])
1312
+ tokenizer_variant = detect_tokenizer_variant_from_files(training_files, args.tokenizer, args.vocab_file)
1313
+ if args.save_dir is not None:
1314
+ config.save_dir = args.save_dir
1315
+ elif tokenizer_variant == "char":
1316
+ config.save_dir = "./checkpoints_char"
1317
+ if args.epochs is not None:
1318
+ config.num_epochs = args.epochs
1319
+ if args.batch_size is not None:
1320
+ config.batch_size = args.batch_size
1321
+ if args.learning_rate is not None:
1322
+ config.learning_rate = args.learning_rate
1323
+ if args.warmup_steps is not None:
1324
+ config.warmup_steps = args.warmup_steps
1325
+ if args.train_split is not None:
1326
+ config.train_split = args.train_split
1327
+ if args.num_workers is not None:
1328
+ config.num_workers = args.num_workers
1329
+ if args.max_seq_length is not None:
1330
+ config.max_seq_length = args.max_seq_length
1331
+ elif tokenizer_variant == "char":
1332
+ config.max_seq_length = max(config.max_seq_length, 128)
1333
+ if args.hidden_size is not None:
1334
+ config.hidden_size = args.hidden_size
1335
+ if args.num_hidden_layers is not None:
1336
+ config.num_hidden_layers = args.num_hidden_layers
1337
+ if args.num_attention_heads is not None:
1338
+ config.num_attention_heads = args.num_attention_heads
1339
+ if args.intermediate_size is not None:
1340
+ config.intermediate_size = args.intermediate_size
1341
+ if config.hidden_size % config.num_attention_heads != 0:
1342
+ raise ValueError(
1343
+ f"hidden_size ({config.hidden_size}) must be divisible by "
1344
+ f"num_attention_heads ({config.num_attention_heads})."
1345
+ )
1346
+ config.max_position_embeddings = max(config.max_position_embeddings, config.max_seq_length)
1347
+
1348
+ random.seed(args.seed)
1349
+ np.random.seed(args.seed)
1350
+ torch.manual_seed(args.seed)
1351
+
1352
+ print("Loading dataset...")
1353
+ load_started_at = time.perf_counter()
1354
+ augmentation_metadata = {
1355
+ "partial_requested": 0,
1356
+ "partial_written": 0,
1357
+ "permutation_requested": 0,
1358
+ "permutation_written": 0,
1359
+ "special_requested": 0,
1360
+ "special_written": 0,
1361
+ "max_chars": args.augment_max_chars,
1362
+ }
1363
+ encoded_cache_manifest = None
1364
+ if args.encoded_cache_dir:
1365
+ if args.extra_data_file:
1366
+ raise ValueError("--encoded-cache-dir cannot be combined with --extra-data-file.")
1367
+ if args.limit_samples is not None:
1368
+ raise ValueError("--encoded-cache-dir cannot be combined with --limit-samples.")
1369
+ if args.rebuild_vocab:
1370
+ raise ValueError("--encoded-cache-dir requires an existing vocab; do not pass --rebuild-vocab.")
1371
+ if args.augment_partial_samples or args.augment_permutation_samples or args.augment_special_samples:
1372
+ raise ValueError("--encoded-cache-dir cannot be combined with training-time augmentation.")
1373
+ if args.apply_label_repairs:
1374
+ raise ValueError("--encoded-cache-dir expects labels already repaired; do not pass --apply-label-repairs.")
1375
+ encoded_cache_manifest = load_encoded_cache_manifest(args.encoded_cache_dir)
1376
+ eval_data = load_encoded_cache_eval_data(args.encoded_cache_dir, encoded_cache_manifest)
1377
+ train_data: List[Dict] = []
1378
+ all_data: List[Dict] = []
1379
+ data_sources = [
1380
+ {
1381
+ "role": "encoded_cache",
1382
+ "path": args.encoded_cache_dir,
1383
+ "samples": int(encoded_cache_manifest.get("source_rows", 0)),
1384
+ "repeat": 1,
1385
+ "effective_samples": int(encoded_cache_manifest.get("source_rows", 0)),
1386
+ }
1387
+ ]
1388
+ else:
1389
+ all_data, data_sources = load_training_sources(
1390
+ primary_data_file=config.data_file,
1391
+ extra_data_files=list(args.extra_data_file or []),
1392
+ extra_repeat=args.extra_data_repeat,
1393
+ limit=args.limit_samples,
1394
+ )
1395
+ if args.augment_partial_samples or args.augment_permutation_samples or args.augment_special_samples:
1396
+ if tokenizer_variant != "char":
1397
+ raise ValueError("Training-time BIO span augmentation currently requires --tokenizer char.")
1398
+ all_data, augmentation_metadata = augment_training_data(
1399
+ data=all_data,
1400
+ partial_count=args.augment_partial_samples,
1401
+ permutation_count=args.augment_permutation_samples,
1402
+ special_count=args.augment_special_samples,
1403
+ max_chars=args.augment_max_chars,
1404
+ seed=args.seed + 1009,
1405
+ )
1406
+ load_finished_at = time.perf_counter()
1407
+ if args.encoded_cache_dir:
1408
+ if not eval_data:
1409
+ raise ValueError("Encoded cache eval_records.jsonl is empty.")
1410
+ validate_dataset_tokenizer_metadata(eval_data, tokenizer_variant)
1411
+ else:
1412
+ if len(all_data) < 2:
1413
+ raise ValueError("Need at least two samples so train/eval split is non-empty.")
1414
+ if not args.no_shuffle:
1415
+ random.shuffle(all_data)
1416
+ validate_dataset_tokenizer_metadata(all_data, tokenizer_variant)
1417
+
1418
+ # Load tokenizer
1419
+ print("Loading tokenizer...")
1420
+ vocab_path = resolve_vocab_path(config.data_file, tokenizer_variant, args.vocab_file)
1421
+ tokenizer = create_tokenizer(tokenizer_variant)
1422
+ if args.rebuild_vocab or not os.path.isfile(vocab_path):
1423
+ max_vocab_size = args.max_vocab_size if args.max_vocab_size is not None else config.vocab_size
1424
+ print(f" Building {tokenizer_variant} vocab: {vocab_path} (max_size={max_vocab_size})")
1425
+ build_vocab_from_data(all_data, tokenizer, vocab_path, max_size=max_vocab_size)
1426
+ tokenizer = create_tokenizer(tokenizer_variant, vocab_file=vocab_path)
1427
+ print(f" Variant: {tokenizer_variant}")
1428
+ print(f" Vocab size: {tokenizer.vocab_size}")
1429
+ print(f" Max sequence length: {config.max_seq_length}")
1430
+ if torch.cuda.is_available() and not args.cpu:
1431
+ print(f" CUDA device: {torch.cuda.get_device_name(0)}")
1432
+
1433
+ # Update config with actual vocab size
1434
+ config.vocab_size = tokenizer.vocab_size
1435
+
1436
+ # Create model
1437
+ requested_model_head = None if args.model_head == "auto" else args.model_head
1438
+ if args.init_model_dir:
1439
+ print(f"Loading model for fine-tuning: {args.init_model_dir}")
1440
+ model = load_model(args.init_model_dir, model_head=requested_model_head)
1441
+ selected_model_head = requested_model_head or str(getattr(model.config, "model_head", "linear"))
1442
+ init_tokenizer = load_tokenizer(args.init_model_dir, tokenizer_variant)
1443
+ init_vocab = init_tokenizer.get_vocab()
1444
+ embedding_size = model.get_input_embeddings().weight.shape[0]
1445
+ if len(init_vocab) != embedding_size:
1446
+ print(
1447
+ " WARNING: init checkpoint tokenizer vocab length does not match model embedding size "
1448
+ f"({len(init_vocab):,} vs {embedding_size:,}). Prefer a self-consistent checkpoint."
1449
+ )
1450
+ init_variant = getattr(init_tokenizer, "tokenizer_variant", None)
1451
+ if init_variant != tokenizer_variant:
1452
+ print(f" WARNING: tokenizer variant changes during fine-tune: {init_variant} -> {tokenizer_variant}")
1453
+ print(" Token embeddings will be remapped by token string; unmatched tokens are newly initialized.")
1454
+ if model.config.vocab_size != config.vocab_size or init_vocab != tokenizer.get_vocab():
1455
+ copied = remap_token_embeddings(
1456
+ model=model,
1457
+ old_vocab=init_vocab,
1458
+ new_vocab=tokenizer.get_vocab(),
1459
+ pad_token_id=tokenizer.pad_token_id,
1460
+ )
1461
+ print(
1462
+ f" Remapped token embeddings: copied {copied:,}/{config.vocab_size:,} "
1463
+ f"tokens from init checkpoint"
1464
+ )
1465
+ migration = migrate_token_classifier_labels(model, config.label2id, config.id2label)
1466
+ if migration.get("changed"):
1467
+ print(
1468
+ " Migrated token classifier labels: "
1469
+ f"{migration.get('source_labels')} -> {migration.get('target_labels')} "
1470
+ f"(copied {migration.get('copied')} rows)"
1471
+ )
1472
+ model.config.num_labels = config.num_labels
1473
+ model.config.id2label = config.id2label
1474
+ model.config.label2id = config.label2id
1475
+ model.config.label_schema_version = config.label_schema_version
1476
+ if not architecture_matches_config(model, config):
1477
+ print(
1478
+ " Rebuilding model for architecture overrides: "
1479
+ f"layers={config.num_hidden_layers}, heads={config.num_attention_heads}, "
1480
+ f"hidden={config.hidden_size}, intermediate={config.intermediate_size}"
1481
+ )
1482
+ model, architecture_copy = rebuild_model_with_architecture_overrides(
1483
+ source_model=model,
1484
+ config=config,
1485
+ model_head=selected_model_head,
1486
+ )
1487
+ print(
1488
+ " Copied compatible tensors into override architecture: "
1489
+ f"{architecture_copy['copied_tensors']} tensors, "
1490
+ f"{architecture_copy['copied_parameters']:,} params; "
1491
+ f"skipped {architecture_copy['skipped_tensors']} tensors"
1492
+ )
1493
+ if architecture_copy["skipped_examples"]:
1494
+ print(f" Skipped tensor examples: {architecture_copy['skipped_examples']}")
1495
+ else:
1496
+ print("Creating model...")
1497
+ selected_model_head = "linear" if args.model_head == "auto" else args.model_head
1498
+ model = create_model(config, model_head=selected_model_head)
1499
+ if args.train_crf_only:
1500
+ if not hasattr(model, "crf"):
1501
+ raise ValueError("--train-crf-only requires the CRF model head.")
1502
+ for parameter in model.bert.parameters():
1503
+ parameter.requires_grad = False
1504
+ for parameter in model.classifier.parameters():
1505
+ parameter.requires_grad = False
1506
+ print(" CRF warmup: encoder and classifier frozen; training transitions only.")
1507
+ save_model_head_config(model, selected_model_head)
1508
+ print(f" Model head: {selected_model_head}")
1509
+ total_params = print_model_summary(model)
1510
+
1511
+ if total_params >= 5_000_000:
1512
+ print("WARNING: Model exceeds the historical 5M target; continuing because vocab size is configurable.")
1513
+
1514
+ use_cpu = args.cpu or not torch.cuda.is_available()
1515
+ if not args.encoded_cache_dir:
1516
+ split_idx = int(len(all_data) * config.train_split)
1517
+ split_idx = max(1, min(len(all_data) - 1, split_idx))
1518
+ train_data = all_data[:split_idx]
1519
+ eval_data = all_data[split_idx:]
1520
+
1521
+ encode_started_at = time.perf_counter()
1522
+ if args.encoded_cache_dir:
1523
+ assert encoded_cache_manifest is not None
1524
+ train_cache_dir = encoded_cache_split_dir(args.encoded_cache_dir, encoded_cache_manifest, "train")
1525
+ eval_cache_dir = encoded_cache_split_dir(args.encoded_cache_dir, encoded_cache_manifest, "eval")
1526
+ train_dataset = ShardedEncodedDataset(train_cache_dir)
1527
+ eval_dataset = ShardedEncodedDataset(eval_cache_dir)
1528
+ for split_name, dataset in (("train", train_dataset), ("eval", eval_dataset)):
1529
+ if dataset.max_length != config.max_seq_length:
1530
+ raise ValueError(
1531
+ f"Encoded cache {split_name} max_length {dataset.max_length} does not match "
1532
+ f"configured max_seq_length {config.max_seq_length}"
1533
+ )
1534
+ if len(eval_dataset) != len(eval_data):
1535
+ raise ValueError(
1536
+ f"Encoded cache eval rows ({len(eval_dataset)}) do not match eval_records.jsonl "
1537
+ f"({len(eval_data)}). Regenerate the cache."
1538
+ )
1539
+ dataset_mode = "encoded-cache-sharded"
1540
+ if not args.keep_raw_dataset:
1541
+ all_data = []
1542
+ train_data = []
1543
+ gc.collect()
1544
+ elif args.virtual_dataset_dir:
1545
+ virtual_dataset = ShardedEncodedDataset(args.virtual_dataset_dir)
1546
+ if virtual_dataset.max_length != config.max_seq_length:
1547
+ raise ValueError(
1548
+ f"Virtual dataset max_length {virtual_dataset.max_length} does not match "
1549
+ f"configured max_seq_length {config.max_seq_length}"
1550
+ )
1551
+ train_dataset = virtual_dataset
1552
+ eval_dataset = EncodedAnimeDataset(
1553
+ data=eval_data,
1554
+ tokenizer=tokenizer,
1555
+ label2id=config.label2id,
1556
+ max_length=config.max_seq_length,
1557
+ device=torch.device("cpu"),
1558
+ apply_label_repairs=args.apply_label_repairs,
1559
+ )
1560
+ dataset_mode = "virtual-sharded"
1561
+ if not args.keep_raw_dataset:
1562
+ train_data = []
1563
+ all_data = []
1564
+ gc.collect()
1565
+ elif args.lazy_dataset:
1566
+ train_dataset = AnimeItemsDataset(
1567
+ data=train_data,
1568
+ tokenizer=tokenizer,
1569
+ label2id=config.label2id,
1570
+ max_length=config.max_seq_length,
1571
+ apply_label_repairs=args.apply_label_repairs,
1572
+ )
1573
+ eval_dataset = AnimeItemsDataset(
1574
+ data=eval_data,
1575
+ tokenizer=tokenizer,
1576
+ label2id=config.label2id,
1577
+ max_length=config.max_seq_length,
1578
+ apply_label_repairs=args.apply_label_repairs,
1579
+ )
1580
+ dataset_mode = "lazy"
1581
+ else:
1582
+ encoded_device = torch.device(args.encoded_dataset_device)
1583
+ if encoded_device.type == "cuda" and use_cpu:
1584
+ raise ValueError("--encoded-dataset-device cuda cannot be used with CPU training.")
1585
+ if encoded_device.type == "cuda" and config.num_workers > 0:
1586
+ raise ValueError("--encoded-dataset-device cuda requires --num-workers 0 to avoid worker duplication.")
1587
+ train_dataset = EncodedAnimeDataset(
1588
+ data=train_data,
1589
+ tokenizer=tokenizer,
1590
+ label2id=config.label2id,
1591
+ max_length=config.max_seq_length,
1592
+ device=encoded_device,
1593
+ apply_label_repairs=args.apply_label_repairs,
1594
+ )
1595
+ eval_dataset = EncodedAnimeDataset(
1596
+ data=eval_data,
1597
+ tokenizer=tokenizer,
1598
+ label2id=config.label2id,
1599
+ max_length=config.max_seq_length,
1600
+ device=encoded_device,
1601
+ apply_label_repairs=args.apply_label_repairs,
1602
+ )
1603
+ dataset_mode = "encoded"
1604
+ if not args.keep_raw_dataset:
1605
+ train_data = []
1606
+ all_data = []
1607
+ gc.collect()
1608
+ encode_finished_at = time.perf_counter()
1609
+
1610
+ print(f" Train samples: {len(train_dataset)}")
1611
+ print(f" Eval samples: {len(eval_dataset)}")
1612
+ print(f" Dataset mode: {dataset_mode}")
1613
+ print(f" Load time: {load_finished_at - load_started_at:.2f}s")
1614
+ print(f" Encode time: {encode_finished_at - encode_started_at:.2f}s")
1615
+
1616
+ use_bf16 = bool(args.bf16 and not use_cpu)
1617
+ use_fp16 = bool((not use_cpu) and not use_bf16 and not args.no_mixed_precision)
1618
+ if use_cpu and args.no_mixed_precision:
1619
+ use_fp16 = False
1620
+ if torch.cuda.is_available() and not use_cpu and args.tf32:
1621
+ torch.backends.cuda.matmul.allow_tf32 = True
1622
+ torch.backends.cudnn.allow_tf32 = True
1623
+ print(f" Device: {'CPU' if use_cpu else 'CUDA'}")
1624
+ if not use_cpu:
1625
+ print(f" Mixed precision: {'bf16' if use_bf16 else ('fp16' if use_fp16 else 'disabled')}")
1626
+ print(f" TF32: {'enabled' if args.tf32 else 'disabled'}")
1627
+ eval_save_strategy = "no" if args.no_periodic_eval else ("steps" if args.checkpoint_steps else "epoch")
1628
+ save_strategy = "steps" if args.checkpoint_steps else "epoch"
1629
+
1630
+ dataloader_prefetch_factor = args.prefetch_factor
1631
+ if dataloader_prefetch_factor is None:
1632
+ dataloader_prefetch_factor = 4 if config.num_workers > 0 else None
1633
+ persistent_workers = bool(args.persistent_workers and config.num_workers > 0)
1634
+ dataloader_pin_memory = bool((not use_cpu) and not (not args.lazy_dataset and args.encoded_dataset_device == "cuda"))
1635
+ if args.lazy_dataset and config.num_workers == 0:
1636
+ print(" WARNING: lazy dataset mode is slower with zero workers; consider --num-workers 4+.")
1637
+
1638
+ # Training arguments
1639
+ training_args = TrainingArguments(
1640
+ output_dir=config.save_dir,
1641
+ num_train_epochs=config.num_epochs,
1642
+ max_steps=args.max_steps,
1643
+ per_device_train_batch_size=config.batch_size,
1644
+ per_device_eval_batch_size=config.batch_size,
1645
+ eval_strategy=eval_save_strategy,
1646
+ save_strategy=save_strategy,
1647
+ eval_steps=args.checkpoint_steps if eval_save_strategy == "steps" else None,
1648
+ save_steps=args.checkpoint_steps,
1649
+ logging_steps=config.log_interval,
1650
+ learning_rate=config.learning_rate,
1651
+ weight_decay=config.weight_decay,
1652
+ warmup_steps=config.warmup_steps,
1653
+ gradient_accumulation_steps=args.gradient_accumulation_steps,
1654
+ use_cpu=use_cpu,
1655
+ report_to=["tensorboard"] if args.tensorboard else "none",
1656
+ save_total_limit=args.save_total_limit,
1657
+ load_best_model_at_end=not args.no_periodic_eval,
1658
+ metric_for_best_model="f1",
1659
+ greater_is_better=True,
1660
+ dataloader_num_workers=config.num_workers,
1661
+ dataloader_pin_memory=dataloader_pin_memory,
1662
+ dataloader_prefetch_factor=dataloader_prefetch_factor,
1663
+ dataloader_persistent_workers=persistent_workers,
1664
+ fp16=use_fp16,
1665
+ bf16=use_bf16,
1666
+ tf32=args.tf32 and not use_cpu,
1667
+ torch_compile=bool(args.torch_compile and not use_cpu),
1668
+ auto_find_batch_size=bool(args.auto_find_batch_size and not use_cpu),
1669
+ include_num_input_tokens_seen=True,
1670
+ )
1671
+
1672
+ # Data collator
1673
+ data_collator = FastTokenClassificationCollator()
1674
+
1675
+ # Trainer
1676
+ perf_callback = TrainingPerfCallback(
1677
+ batch_size=config.batch_size,
1678
+ sequence_length=config.max_seq_length,
1679
+ log_steps=args.perf_log_steps,
1680
+ sample_interval=args.perf_sample_interval,
1681
+ )
1682
+ trainer_cls = RDropTrainer if args.rdrop_alpha > 0 else OrderedTrainer
1683
+ trainer_kwargs = {}
1684
+ if args.rdrop_alpha > 0:
1685
+ trainer_kwargs["rdrop_alpha"] = args.rdrop_alpha
1686
+ trainer = trainer_cls(
1687
+ model=model,
1688
+ args=training_args,
1689
+ train_dataset=train_dataset,
1690
+ eval_dataset=eval_dataset,
1691
+ data_collator=data_collator,
1692
+ compute_metrics=compute_metrics,
1693
+ callbacks=[perf_callback],
1694
+ **trainer_kwargs,
1695
+ )
1696
+
1697
+ # Train
1698
+ print("Starting training...")
1699
+ resume_from_checkpoint = args.resume_from_checkpoint
1700
+ if resume_from_checkpoint == "auto":
1701
+ resume_from_checkpoint = latest_checkpoint(config.save_dir)
1702
+ if resume_from_checkpoint:
1703
+ print(f"Resuming from latest checkpoint: {resume_from_checkpoint}")
1704
+ else:
1705
+ print("No checkpoint found; starting a fresh training run.")
1706
+ trainer.train(resume_from_checkpoint=resume_from_checkpoint)
1707
+
1708
+ # Set proper label mappings in model config before saving
1709
+ model.config.id2label = config.id2label
1710
+ model.config.label2id = config.label2id
1711
+ model.config.label_schema_version = config.label_schema_version
1712
+ model.config.tokenizer_variant = tokenizer_variant
1713
+ model.config.max_seq_length = config.max_seq_length
1714
+ save_model_head_config(model, selected_model_head)
1715
+
1716
+ # Save final model
1717
+ final_save_path = os.path.join(config.save_dir, "final")
1718
+ trainer.save_model(final_save_path)
1719
+ tokenizer.save_pretrained(final_save_path)
1720
+ metadata = {
1721
+ "experiment_name": args.experiment_name,
1722
+ "data_file": config.data_file,
1723
+ "data_sources": data_sources,
1724
+ "augmentation": augmentation_metadata,
1725
+ "dataset_mode": dataset_mode,
1726
+ "encoded_cache_dir": args.encoded_cache_dir,
1727
+ "virtual_dataset_dir": args.virtual_dataset_dir,
1728
+ "apply_label_repairs": args.apply_label_repairs,
1729
+ "keep_raw_dataset": args.keep_raw_dataset,
1730
+ "tokenizer_variant": tokenizer_variant,
1731
+ "model_head": selected_model_head,
1732
+ "train_crf_only": args.train_crf_only,
1733
+ "rdrop_alpha": args.rdrop_alpha,
1734
+ "vocab_file": vocab_path,
1735
+ "vocab_size": tokenizer.vocab_size,
1736
+ "max_seq_length": config.max_seq_length,
1737
+ "hidden_size": config.hidden_size,
1738
+ "num_hidden_layers": config.num_hidden_layers,
1739
+ "num_attention_heads": config.num_attention_heads,
1740
+ "intermediate_size": config.intermediate_size,
1741
+ "train_samples": len(train_dataset),
1742
+ "eval_samples": len(eval_dataset),
1743
+ "load_seconds": load_finished_at - load_started_at,
1744
+ "encode_seconds": encode_finished_at - encode_started_at,
1745
+ "epochs": config.num_epochs,
1746
+ "max_steps": args.max_steps,
1747
+ "batch_size": config.batch_size,
1748
+ "learning_rate": config.learning_rate,
1749
+ "warmup_steps": config.warmup_steps,
1750
+ "seed": args.seed,
1751
+ "device": "cpu" if use_cpu else "cuda",
1752
+ "fp16": use_fp16,
1753
+ "gradient_accumulation_steps": training_args.gradient_accumulation_steps,
1754
+ "dataloader_num_workers": config.num_workers,
1755
+ "dataloader_prefetch_factor": dataloader_prefetch_factor,
1756
+ "dataloader_persistent_workers": persistent_workers,
1757
+ "dataloader_pin_memory": dataloader_pin_memory,
1758
+ "encoded_dataset_device": args.encoded_dataset_device if not args.lazy_dataset else None,
1759
+ "mixed_precision": "bf16" if use_bf16 else ("fp16" if use_fp16 else "none"),
1760
+ "tf32": bool(args.tf32 and not use_cpu),
1761
+ "torch_compile": bool(args.torch_compile and not use_cpu),
1762
+ "auto_find_batch_size": bool(args.auto_find_batch_size and not use_cpu),
1763
+ "perf_log_steps": args.perf_log_steps,
1764
+ "perf_sample_interval": args.perf_sample_interval,
1765
+ "periodic_eval": not args.no_periodic_eval,
1766
+ }
1767
+ with open(os.path.join(final_save_path, "run_metadata.json"), "w", encoding="utf-8") as f:
1768
+ json.dump(metadata, f, ensure_ascii=False, indent=2)
1769
+ print(f"Model saved to: {final_save_path}")
1770
+ with open(os.path.join(final_save_path, "perf_metrics.json"), "w", encoding="utf-8") as f:
1771
+ json.dump(perf_callback.summary(), f, ensure_ascii=False, indent=2)
1772
+ train_runtime = None
1773
+ if trainer.state.log_history:
1774
+ for entry in reversed(trainer.state.log_history):
1775
+ if "train_runtime" in entry:
1776
+ train_runtime = entry["train_runtime"]
1777
+ break
1778
+ if train_runtime is not None:
1779
+ print(f" Train runtime: {train_runtime:.2f}s")
1780
+ print(f" Total wall time (load+encode+train): {(load_finished_at - load_started_at) + (encode_finished_at - encode_started_at) + train_runtime:.2f}s")
1781
+
1782
+ # Final evaluation
1783
+ print("\nFinal evaluation:")
1784
+ eval_results = trainer.evaluate()
1785
+ for key, value in eval_results.items():
1786
+ print(f" {key}: {value:.4f}")
1787
+ with open(os.path.join(final_save_path, "trainer_eval_metrics.json"), "w", encoding="utf-8") as f:
1788
+ json.dump({key: float(value) for key, value in eval_results.items()}, f, ensure_ascii=False, indent=2)
1789
+
1790
+ if args.parse_eval_limit != 0:
1791
+ parse_limit = args.parse_eval_limit if args.parse_eval_limit and args.parse_eval_limit > 0 else None
1792
+ parse_metrics = parse_exact_metrics_all_modes(
1793
+ eval_data,
1794
+ trainer.model,
1795
+ tokenizer,
1796
+ config.id2label,
1797
+ config.max_seq_length,
1798
+ parse_limit,
1799
+ )
1800
+ with open(os.path.join(final_save_path, "parse_eval_metrics.json"), "w", encoding="utf-8") as f:
1801
+ json.dump(parse_metrics, f, ensure_ascii=False, indent=2)
1802
+ print("\nParse exact-match evaluation:")
1803
+ for mode_name, mode_metrics in parse_metrics["modes"].items():
1804
+ print(
1805
+ f" {mode_name}: {mode_metrics['full_match_correct']}/"
1806
+ f"{mode_metrics['full_match_total']} ({mode_metrics['full_match_accuracy']:.4f})"
1807
+ )
1808
+
1809
+ if not args.no_case_eval:
1810
+ if args.case_eval_file and os.path.isfile(args.case_eval_file):
1811
+ from tools.evaluate_parser_cases import evaluate_case_modes
1812
+
1813
+ case_metrics = evaluate_case_modes(
1814
+ model_dir=final_save_path,
1815
+ case_file=args.case_eval_file,
1816
+ tokenizer_variant=tokenizer_variant,
1817
+ max_length=config.max_seq_length,
1818
+ )
1819
+ case_output = args.case_eval_output or os.path.join(final_save_path, "case_metrics.json")
1820
+ os.makedirs(os.path.dirname(case_output) or ".", exist_ok=True)
1821
+ with open(case_output, "w", encoding="utf-8") as f:
1822
+ json.dump(case_metrics, f, ensure_ascii=False, indent=2)
1823
+ print("\nFixed case regression evaluation:")
1824
+ for mode_name, mode_metrics in case_metrics["modes"].items():
1825
+ print(
1826
+ f" {mode_name}: {mode_metrics['full_correct']}/"
1827
+ f"{mode_metrics['case_count']} ({mode_metrics['full_accuracy']:.4f})"
1828
+ )
1829
+ primary = case_metrics["modes"][case_metrics["primary_metric"]]
1830
+ if primary["failures"]:
1831
+ print(f" primary failures: {len(primary['failures'])} (see {case_output})")
1832
+ elif args.case_eval_file:
1833
+ print(f"\nSkipping fixed case regression evaluation; file not found: {args.case_eval_file}")
1834
+
1835
+
1836
+ if __name__ == "__main__":
1837
+ main()
1838
+
snapshots/anifilebert-dapt512-long/anifilebert/virtual_dataset.py ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Pre-encoded sharded datasets generated by the Rust virtual dataset tool."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import bisect
6
+ import json
7
+ from pathlib import Path
8
+ from typing import Dict, List, Optional
9
+
10
+ import numpy as np
11
+ import torch
12
+ from torch.utils.data import Dataset
13
+
14
+
15
+ class ShardedEncodedDataset(Dataset):
16
+ """Map-style dataset backed by pre-encoded `.npy` shards.
17
+
18
+ The Rust generator writes compact uint16/int16/u8 arrays. This class loads
19
+ one shard at a time and relies on sequential sampling over pre-shuffled
20
+ shards, so Python does no tokenization or BIO permutation during training.
21
+ """
22
+
23
+ preserve_order = True
24
+
25
+ def __init__(self, dataset_dir: str | Path, manifest_name: str = "manifest.json"):
26
+ self.dataset_dir = Path(dataset_dir)
27
+ self.manifest_path = self.dataset_dir / manifest_name
28
+ self.manifest = json.loads(self.manifest_path.read_text(encoding="utf-8"))
29
+ if self.manifest.get("format") != "anifilebert.virtual_dataset.shards.v1":
30
+ raise ValueError(f"Unsupported virtual dataset manifest: {self.manifest_path}")
31
+
32
+ self.max_length = int(self.manifest["max_length"])
33
+ self.shards: List[Dict] = list(self.manifest.get("shards") or [])
34
+ if not self.shards:
35
+ raise ValueError(f"Virtual dataset has no shards: {self.manifest_path}")
36
+
37
+ self._starts: List[int] = []
38
+ total = 0
39
+ for shard in self.shards:
40
+ self._starts.append(total)
41
+ total += int(shard["rows"])
42
+ self.total_rows = total
43
+
44
+ declared_total = int(self.manifest.get("total_rows", total))
45
+ if declared_total != total:
46
+ raise ValueError(
47
+ f"Virtual dataset row count mismatch: manifest total_rows={declared_total}, "
48
+ f"shard rows={total}"
49
+ )
50
+
51
+ self._cache_index: Optional[int] = None
52
+ self._cache: Optional[Dict[str, np.ndarray]] = None
53
+
54
+ def __len__(self) -> int:
55
+ return self.total_rows
56
+
57
+ def __getitem__(self, idx: int) -> Dict[str, torch.Tensor]:
58
+ if idx < 0:
59
+ idx += self.total_rows
60
+ if idx < 0 or idx >= self.total_rows:
61
+ raise IndexError(idx)
62
+
63
+ shard_idx = bisect.bisect_right(self._starts, idx) - 1
64
+ shard_start = self._starts[shard_idx]
65
+ row_idx = idx - shard_start
66
+ cache = self._load_shard(shard_idx)
67
+ return {
68
+ "input_ids": torch.from_numpy(cache["input_ids"][row_idx]),
69
+ "attention_mask": torch.from_numpy(cache["attention_mask"][row_idx]),
70
+ "labels": torch.from_numpy(cache["labels"][row_idx]),
71
+ }
72
+
73
+ def _load_shard(self, shard_idx: int) -> Dict[str, np.ndarray]:
74
+ if self._cache_index == shard_idx and self._cache is not None:
75
+ return self._cache
76
+
77
+ shard = self.shards[shard_idx]
78
+ cache = {
79
+ "input_ids": np.load(self.dataset_dir / shard["input_ids"], allow_pickle=False),
80
+ "attention_mask": np.load(self.dataset_dir / shard["attention_mask"], allow_pickle=False),
81
+ "labels": np.load(self.dataset_dir / shard["labels"], allow_pickle=False),
82
+ }
83
+ expected_shape = (int(shard["rows"]), self.max_length)
84
+ for key, array in cache.items():
85
+ if array.shape != expected_shape:
86
+ raise ValueError(
87
+ f"Shard {shard_idx} {key} has shape {array.shape}, expected {expected_shape}"
88
+ )
89
+ self._cache_index = shard_idx
90
+ self._cache = cache
91
+ return cache
92
+
93
+
94
+ class DatasetRangeView(Dataset):
95
+ """A contiguous range view over another dataset."""
96
+
97
+ preserve_order = True
98
+
99
+ def __init__(self, dataset: Dataset, start: int, end: int):
100
+ if start < 0 or end < start or end > len(dataset):
101
+ raise ValueError(f"Invalid dataset range [{start}, {end}) for length {len(dataset)}")
102
+ self.dataset = dataset
103
+ self.start = start
104
+ self.end = end
105
+
106
+ def __len__(self) -> int:
107
+ return self.end - self.start
108
+
109
+ def __getitem__(self, idx: int):
110
+ if idx < 0:
111
+ idx += len(self)
112
+ if idx < 0 or idx >= len(self):
113
+ raise IndexError(idx)
114
+ return self.dataset[self.start + idx]
snapshots/anifilebert-dapt512-long/config.json ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_cross_attention": false,
3
+ "architectures": [
4
+ "BertForTokenClassification"
5
+ ],
6
+ "attention_probs_dropout_prob": 0.1,
7
+ "bos_token_id": null,
8
+ "classifier_dropout": null,
9
+ "dapt": {
10
+ "source": "/content/anifilebert-dapt256",
11
+ "corpus_sha256": "19603c2c6e9474c33e2374692a3d0f411ea88fc37811b2cbfdc8d0520809406c",
12
+ "epochs": 40,
13
+ "positions": 256,
14
+ "init": "random"
15
+ },
16
+ "dtype": "float32",
17
+ "eos_token_id": null,
18
+ "hidden_act": "gelu",
19
+ "hidden_dropout_prob": 0.1,
20
+ "hidden_size": 512,
21
+ "id2label": {
22
+ "0": "O",
23
+ "1": "B-TITLE_CHS",
24
+ "2": "I-TITLE_CHS",
25
+ "3": "B-TITLE_CHT",
26
+ "4": "I-TITLE_CHT",
27
+ "5": "B-TITLE_JPN",
28
+ "6": "I-TITLE_JPN",
29
+ "7": "B-TITLE_LATIN",
30
+ "8": "I-TITLE_LATIN",
31
+ "9": "B-TITLE_MIXED",
32
+ "10": "I-TITLE_MIXED",
33
+ "11": "B-PATH_TITLE_CHS",
34
+ "12": "I-PATH_TITLE_CHS",
35
+ "13": "B-PATH_TITLE_CHT",
36
+ "14": "I-PATH_TITLE_CHT",
37
+ "15": "B-PATH_TITLE_JPN",
38
+ "16": "I-PATH_TITLE_JPN",
39
+ "17": "B-PATH_TITLE_LATIN",
40
+ "18": "I-PATH_TITLE_LATIN",
41
+ "19": "B-PATH_TITLE_MIXED",
42
+ "20": "I-PATH_TITLE_MIXED",
43
+ "21": "B-PATH_SEASON",
44
+ "22": "I-PATH_SEASON",
45
+ "23": "B-SEASON",
46
+ "24": "I-SEASON",
47
+ "25": "B-EPISODE",
48
+ "26": "I-EPISODE",
49
+ "27": "B-SPECIAL",
50
+ "28": "I-SPECIAL",
51
+ "29": "B-GROUP",
52
+ "30": "I-GROUP",
53
+ "31": "B-RESOLUTION",
54
+ "32": "I-RESOLUTION",
55
+ "33": "B-SOURCE",
56
+ "34": "I-SOURCE",
57
+ "35": "B-TAG",
58
+ "36": "I-TAG"
59
+ },
60
+ "initializer_range": 0.02,
61
+ "intermediate_size": 2048,
62
+ "is_decoder": false,
63
+ "label2id": {
64
+ "B-EPISODE": 25,
65
+ "B-GROUP": 29,
66
+ "B-PATH_SEASON": 21,
67
+ "B-PATH_TITLE_CHS": 11,
68
+ "B-PATH_TITLE_CHT": 13,
69
+ "B-PATH_TITLE_JPN": 15,
70
+ "B-PATH_TITLE_LATIN": 17,
71
+ "B-PATH_TITLE_MIXED": 19,
72
+ "B-RESOLUTION": 31,
73
+ "B-SEASON": 23,
74
+ "B-SOURCE": 33,
75
+ "B-SPECIAL": 27,
76
+ "B-TAG": 35,
77
+ "B-TITLE_CHS": 1,
78
+ "B-TITLE_CHT": 3,
79
+ "B-TITLE_JPN": 5,
80
+ "B-TITLE_LATIN": 7,
81
+ "B-TITLE_MIXED": 9,
82
+ "I-EPISODE": 26,
83
+ "I-GROUP": 30,
84
+ "I-PATH_SEASON": 22,
85
+ "I-PATH_TITLE_CHS": 12,
86
+ "I-PATH_TITLE_CHT": 14,
87
+ "I-PATH_TITLE_JPN": 16,
88
+ "I-PATH_TITLE_LATIN": 18,
89
+ "I-PATH_TITLE_MIXED": 20,
90
+ "I-RESOLUTION": 32,
91
+ "I-SEASON": 24,
92
+ "I-SOURCE": 34,
93
+ "I-SPECIAL": 28,
94
+ "I-TAG": 36,
95
+ "I-TITLE_CHS": 2,
96
+ "I-TITLE_CHT": 4,
97
+ "I-TITLE_JPN": 6,
98
+ "I-TITLE_LATIN": 8,
99
+ "I-TITLE_MIXED": 10,
100
+ "O": 0
101
+ },
102
+ "label_schema_version": 2,
103
+ "layer_norm_eps": 1e-12,
104
+ "max_position_embeddings": 256,
105
+ "max_seq_length": 256,
106
+ "model_head": "linear",
107
+ "model_type": "bert",
108
+ "num_attention_heads": 8,
109
+ "num_hidden_layers": 8,
110
+ "pad_token_id": 0,
111
+ "tie_word_embeddings": true,
112
+ "tokenizer_variant": "char",
113
+ "transformers_version": "5.16.1",
114
+ "type_vocab_size": 2,
115
+ "use_cache": false,
116
+ "vocab_size": 6199
117
+ }
snapshots/anifilebert-dapt512-long/dapt.json ADDED
@@ -0,0 +1,324 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "snapshot_in": "/content/anifilebert-dapt256",
3
+ "snapshot_in_hashes": {
4
+ "config.json": "e98b7fd61b147293fa29fa5be0c5cc3e7a9ecc94ee71fefd55c74145be9cb3aa",
5
+ "model.safetensors": "16a691527a483b4a9581aa75b08aa21415c77fc1654230b1738659349908a3db"
6
+ },
7
+ "architecture": {
8
+ "hidden": 512,
9
+ "intermediate": 2048,
10
+ "layers": 8,
11
+ "heads": 8,
12
+ "init": "random (no weight transfer; tiled init falsified earlier at 10-12%)"
13
+ },
14
+ "positions": 256,
15
+ "epochs": 40,
16
+ "batch": 128,
17
+ "lr": 0.0003,
18
+ "warmup": 0.05,
19
+ "mask_rate": 0.2,
20
+ "span_p": 0.3,
21
+ "max_span": 5,
22
+ "seed": 1,
23
+ "holdout_share": 0.01,
24
+ "holdout_rows": 1638,
25
+ "train_rows": 162253,
26
+ "corpus_sha256": "19603c2c6e9474c33e2374692a3d0f411ea88fc37811b2cbfdc8d0520809406c",
27
+ "corpus": {
28
+ "read": 205241,
29
+ "dropped_eval_query": 1907,
30
+ "dropped_ia_artifact": 37367,
31
+ "dropped_over_limit": 5,
32
+ "dropped_duplicate": 2071,
33
+ "dropped_empty": 0,
34
+ "per_source": {
35
+ "data/tier2/srrdb-v1.jsonl": 65208,
36
+ "data/tier2/archive-v1.jsonl": 23338,
37
+ "data/tier2/nyaa-v1.jsonl": 20940,
38
+ "data/tier2/sukebei-v1.jsonl": 51492,
39
+ "data/dmhy-unlabeled.jsonl": 2913,
40
+ "data/label-v2/fresh-real-holdout.jsonl": 0
41
+ },
42
+ "kept": 163891
43
+ },
44
+ "excluded_sets": [
45
+ "data/label-v2/fresh-204-gold.jsonl",
46
+ "data/label-v2/fresh-204.jsonl",
47
+ "data/fresh.jsonl",
48
+ "data/fresh2.jsonl",
49
+ "data/challenge.jsonl",
50
+ "data/public-guessit.jsonl",
51
+ "data/public-guessit-dev.jsonl",
52
+ "data/public-guessit-holdout.jsonl",
53
+ "data/public-guessit-holdout-part2.jsonl",
54
+ "data/label-v2/dev-review-500.jsonl",
55
+ "data/real-dev-v1/queries.jsonl",
56
+ "data/real-final-v1/queries.jsonl",
57
+ "data/claim-v1/candidates-v1.jsonl",
58
+ "data/claim-v1/candidates-draft-1.jsonl"
59
+ ],
60
+ "device": "cuda",
61
+ "gpu": "Tesla T4",
62
+ "versions": {
63
+ "torch": "2.11.0+cu128",
64
+ "transformers": "5.16.1"
65
+ },
66
+ "python": "3.13.15",
67
+ "steps": 50720,
68
+ "parameters_bert": 28526592,
69
+ "objective": "character-span MLM, 80/10/10, [MASK] extra row sliced off",
70
+ "amp": "fp16 autocast + GradScaler",
71
+ "history": [
72
+ {
73
+ "epoch": 0,
74
+ "holdout_mlm_loss": 8.736900679270427
75
+ },
76
+ {
77
+ "epoch": 1,
78
+ "train_mlm_loss": 4.375227061731958,
79
+ "holdout_mlm_loss": 3.082608746754828,
80
+ "elapsed_s": 473.22246381100007
81
+ },
82
+ {
83
+ "epoch": 2,
84
+ "train_mlm_loss": 2.921732526472314,
85
+ "holdout_mlm_loss": 2.3707259732961794,
86
+ "elapsed_s": 965.171059061
87
+ },
88
+ {
89
+ "epoch": 3,
90
+ "train_mlm_loss": 2.310178040141939,
91
+ "holdout_mlm_loss": 1.9282451339130369,
92
+ "elapsed_s": 1461.560635293
93
+ },
94
+ {
95
+ "epoch": 4,
96
+ "train_mlm_loss": 2.009391780531369,
97
+ "holdout_mlm_loss": 1.7396270345598372,
98
+ "elapsed_s": 1983.4991681769998
99
+ },
100
+ {
101
+ "epoch": 5,
102
+ "train_mlm_loss": 1.8412692695386026,
103
+ "holdout_mlm_loss": 1.6269481165695958,
104
+ "elapsed_s": 2502.328366302
105
+ },
106
+ {
107
+ "epoch": 6,
108
+ "train_mlm_loss": 1.7270084329019961,
109
+ "holdout_mlm_loss": 1.5293834144450085,
110
+ "elapsed_s": 3023.782586561
111
+ },
112
+ {
113
+ "epoch": 7,
114
+ "train_mlm_loss": 1.646504476807471,
115
+ "holdout_mlm_loss": 1.4373808990762915,
116
+ "elapsed_s": 3537.305681859
117
+ },
118
+ {
119
+ "epoch": 8,
120
+ "train_mlm_loss": 1.574756050335496,
121
+ "holdout_mlm_loss": 1.401929478790819,
122
+ "elapsed_s": 4057.726921014
123
+ },
124
+ {
125
+ "epoch": 9,
126
+ "train_mlm_loss": 1.5194406214196599,
127
+ "holdout_mlm_loss": 1.328548753494906,
128
+ "elapsed_s": 4579.3266502510005
129
+ },
130
+ {
131
+ "epoch": 10,
132
+ "train_mlm_loss": 1.4719956642257679,
133
+ "holdout_mlm_loss": 1.2935118025723173,
134
+ "elapsed_s": 5092.0404690880005
135
+ },
136
+ {
137
+ "epoch": 11,
138
+ "train_mlm_loss": 1.426325940277298,
139
+ "holdout_mlm_loss": 1.2353786466893069,
140
+ "elapsed_s": 5610.439997930001
141
+ },
142
+ {
143
+ "epoch": 12,
144
+ "train_mlm_loss": 1.3938762441230497,
145
+ "holdout_mlm_loss": 1.195163792495283,
146
+ "elapsed_s": 6126.902060184
147
+ },
148
+ {
149
+ "epoch": 13,
150
+ "train_mlm_loss": 1.3602659516154028,
151
+ "holdout_mlm_loss": 1.1963921446291002,
152
+ "elapsed_s": 6643.345326788
153
+ },
154
+ {
155
+ "epoch": 14,
156
+ "train_mlm_loss": 1.3310112461964791,
157
+ "holdout_mlm_loss": 1.1719167419391319,
158
+ "elapsed_s": 7158.663597382
159
+ },
160
+ {
161
+ "epoch": 15,
162
+ "train_mlm_loss": 1.3018222616203952,
163
+ "holdout_mlm_loss": 1.1406991097353352,
164
+ "elapsed_s": 7674.778165433
165
+ },
166
+ {
167
+ "epoch": 16,
168
+ "train_mlm_loss": 1.2804211497024782,
169
+ "holdout_mlm_loss": 1.1341703165380448,
170
+ "elapsed_s": 8191.362704859001
171
+ },
172
+ {
173
+ "epoch": 17,
174
+ "train_mlm_loss": 1.2533993123551648,
175
+ "holdout_mlm_loss": 1.0945481520208327,
176
+ "elapsed_s": 8710.747675615
177
+ },
178
+ {
179
+ "epoch": 18,
180
+ "train_mlm_loss": 1.2323334291812373,
181
+ "holdout_mlm_loss": 1.038608076350059,
182
+ "elapsed_s": 9241.942765345
183
+ },
184
+ {
185
+ "epoch": 19,
186
+ "train_mlm_loss": 1.2135629186682897,
187
+ "holdout_mlm_loss": 1.0817996912051977,
188
+ "elapsed_s": 9768.857448345001
189
+ },
190
+ {
191
+ "epoch": 20,
192
+ "train_mlm_loss": 1.1976666132264333,
193
+ "holdout_mlm_loss": 1.026019362100734,
194
+ "elapsed_s": 10301.676275611
195
+ },
196
+ {
197
+ "epoch": 21,
198
+ "train_mlm_loss": 1.1742801736299924,
199
+ "holdout_mlm_loss": 1.036750700323487,
200
+ "elapsed_s": 10833.644632479001
201
+ },
202
+ {
203
+ "epoch": 22,
204
+ "train_mlm_loss": 1.157978573714145,
205
+ "holdout_mlm_loss": 1.022209767153981,
206
+ "elapsed_s": 11365.032796672
207
+ },
208
+ {
209
+ "epoch": 23,
210
+ "train_mlm_loss": 1.1439975256141428,
211
+ "holdout_mlm_loss": 0.9994724594764347,
212
+ "elapsed_s": 11901.12091463
213
+ },
214
+ {
215
+ "epoch": 24,
216
+ "train_mlm_loss": 1.1271965087212223,
217
+ "holdout_mlm_loss": 0.9778515305234978,
218
+ "elapsed_s": 12434.125638841
219
+ },
220
+ {
221
+ "epoch": 25,
222
+ "train_mlm_loss": 1.1131970593323843,
223
+ "holdout_mlm_loss": 0.9848204346415498,
224
+ "elapsed_s": 12962.98398002
225
+ },
226
+ {
227
+ "epoch": 26,
228
+ "train_mlm_loss": 1.101351912277354,
229
+ "holdout_mlm_loss": 0.9536828525565998,
230
+ "elapsed_s": 13497.383910074
231
+ },
232
+ {
233
+ "epoch": 27,
234
+ "train_mlm_loss": 1.0843816055954443,
235
+ "holdout_mlm_loss": 0.9409382480619691,
236
+ "elapsed_s": 14031.078410321
237
+ },
238
+ {
239
+ "epoch": 28,
240
+ "train_mlm_loss": 1.0690194438872653,
241
+ "holdout_mlm_loss": 0.9394280088997875,
242
+ "elapsed_s": 14565.136020853
243
+ },
244
+ {
245
+ "epoch": 29,
246
+ "train_mlm_loss": 1.057727008963985,
247
+ "holdout_mlm_loss": 0.9545883247511924,
248
+ "elapsed_s": 15098.791554832
249
+ },
250
+ {
251
+ "epoch": 30,
252
+ "train_mlm_loss": 1.0468679916125367,
253
+ "holdout_mlm_loss": 0.8919381346898856,
254
+ "elapsed_s": 15628.84965083
255
+ },
256
+ {
257
+ "epoch": 31,
258
+ "train_mlm_loss": 1.0329651913432292,
259
+ "holdout_mlm_loss": 0.8894025552320837,
260
+ "elapsed_s": 16156.606742554
261
+ },
262
+ {
263
+ "epoch": 32,
264
+ "train_mlm_loss": 1.023009018379055,
265
+ "holdout_mlm_loss": 0.8942983575401185,
266
+ "elapsed_s": 16689.836699018
267
+ },
268
+ {
269
+ "epoch": 33,
270
+ "train_mlm_loss": 1.0094722742067903,
271
+ "holdout_mlm_loss": 0.9136225821200499,
272
+ "elapsed_s": 17226.209608491998
273
+ },
274
+ {
275
+ "epoch": 34,
276
+ "train_mlm_loss": 1.002932391332151,
277
+ "holdout_mlm_loss": 0.8861584491096973,
278
+ "elapsed_s": 17763.845154249
279
+ },
280
+ {
281
+ "epoch": 35,
282
+ "train_mlm_loss": 0.9899584314424533,
283
+ "holdout_mlm_loss": 0.8871160014580225,
284
+ "elapsed_s": 18294.783446789
285
+ },
286
+ {
287
+ "epoch": 36,
288
+ "train_mlm_loss": 0.9856679144811931,
289
+ "holdout_mlm_loss": 0.8825822870897437,
290
+ "elapsed_s": 18826.522195192
291
+ },
292
+ {
293
+ "epoch": 37,
294
+ "train_mlm_loss": 0.9752545805195528,
295
+ "holdout_mlm_loss": 0.8969957123114312,
296
+ "elapsed_s": 19356.763768114
297
+ },
298
+ {
299
+ "epoch": 38,
300
+ "train_mlm_loss": 0.967770243621775,
301
+ "holdout_mlm_loss": 0.8895354318563871,
302
+ "elapsed_s": 19890.734426236
303
+ },
304
+ {
305
+ "epoch": 39,
306
+ "train_mlm_loss": 0.9623078745716378,
307
+ "holdout_mlm_loss": 0.8633429595431722,
308
+ "elapsed_s": 20425.087323116
309
+ },
310
+ {
311
+ "epoch": 40,
312
+ "train_mlm_loss": 0.9588589362729611,
313
+ "holdout_mlm_loss": 0.8765054039867294,
314
+ "elapsed_s": 20956.778915133
315
+ }
316
+ ],
317
+ "export": {
318
+ "max_position_embeddings": 256,
319
+ "vocab_size": 6199,
320
+ "roundtrip_max_abs_diff": 0.0,
321
+ "model_sha256": "509125db5cc4bee9f3949b44e1c17f86b89406c8efee6a7376c39de8b3db7a0d",
322
+ "parameters_encoder": 28526080
323
+ }
324
+ }
snapshots/anifilebert-dapt512-long/label_schema.json ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 2,
3
+ "labels": [
4
+ "O",
5
+ "B-TITLE_CHS",
6
+ "I-TITLE_CHS",
7
+ "B-TITLE_CHT",
8
+ "I-TITLE_CHT",
9
+ "B-TITLE_JPN",
10
+ "I-TITLE_JPN",
11
+ "B-TITLE_LATIN",
12
+ "I-TITLE_LATIN",
13
+ "B-TITLE_MIXED",
14
+ "I-TITLE_MIXED",
15
+ "B-PATH_TITLE_CHS",
16
+ "I-PATH_TITLE_CHS",
17
+ "B-PATH_TITLE_CHT",
18
+ "I-PATH_TITLE_CHT",
19
+ "B-PATH_TITLE_JPN",
20
+ "I-PATH_TITLE_JPN",
21
+ "B-PATH_TITLE_LATIN",
22
+ "I-PATH_TITLE_LATIN",
23
+ "B-PATH_TITLE_MIXED",
24
+ "I-PATH_TITLE_MIXED",
25
+ "B-PATH_SEASON",
26
+ "I-PATH_SEASON",
27
+ "B-SEASON",
28
+ "I-SEASON",
29
+ "B-EPISODE",
30
+ "I-EPISODE",
31
+ "B-SPECIAL",
32
+ "I-SPECIAL",
33
+ "B-GROUP",
34
+ "I-GROUP",
35
+ "B-RESOLUTION",
36
+ "I-RESOLUTION",
37
+ "B-SOURCE",
38
+ "I-SOURCE",
39
+ "B-TAG",
40
+ "I-TAG"
41
+ ],
42
+ "title_entities": [
43
+ "TITLE_CHS",
44
+ "TITLE_CHT",
45
+ "TITLE_JPN",
46
+ "TITLE_LATIN",
47
+ "TITLE_MIXED",
48
+ "PATH_TITLE_CHS",
49
+ "PATH_TITLE_CHT",
50
+ "PATH_TITLE_JPN",
51
+ "PATH_TITLE_LATIN",
52
+ "PATH_TITLE_MIXED"
53
+ ],
54
+ "file_title_entities": [
55
+ "TITLE_CHS",
56
+ "TITLE_CHT",
57
+ "TITLE_JPN",
58
+ "TITLE_LATIN",
59
+ "TITLE_MIXED"
60
+ ],
61
+ "path_title_entities": [
62
+ "PATH_TITLE_CHS",
63
+ "PATH_TITLE_CHT",
64
+ "PATH_TITLE_JPN",
65
+ "PATH_TITLE_LATIN",
66
+ "PATH_TITLE_MIXED"
67
+ ],
68
+ "title_priority": [
69
+ "CHS",
70
+ "CHT",
71
+ "JPN",
72
+ "MIXED",
73
+ "LATIN"
74
+ ],
75
+ "notes": {
76
+ "PATH_SEASON": "Season value extracted from a directory/path segment. File-level SEASON wins when both are present.",
77
+ "TAG": "Non-key side tags such as 国漫, 日漫, 剧场版, Gekijouban, Movie, TV, and years.",
78
+ "TITLE_LATIN": "Latin-script titles, including English aliases and romaji."
79
+ }
80
+ }
snapshots/anifilebert-dapt512-long/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:509125db5cc4bee9f3949b44e1c17f86b89406c8efee6a7376c39de8b3db7a0d
3
+ size 114195812
snapshots/anifilebert-dapt512-long/pyproject.toml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [project]
2
+ name = "anifilebert"
3
+ version = "0.1.0"
4
+ description = "Tiny BERT token-classification model and tooling for parsing anime release filenames."
5
+ readme = "README.md"
6
+ requires-python = ">=3.11"
7
+ license = { text = "Apache-2.0" }
8
+ dependencies = [
9
+ "accelerate==1.13.0",
10
+ "datasets==4.8.5",
11
+ "numpy==2.4.5",
12
+ "onnx==1.21.0",
13
+ "onnxruntime==1.26.0",
14
+ "onnxscript==0.7.0",
15
+ "seqeval==1.2.2",
16
+ "tensorboard>=2.14.0",
17
+ "torch==2.13.0.dev20260601+cu132",
18
+ "transformers==5.8.1",
19
+ ]
20
+
21
+ [project.urls]
22
+ Repository = "https://huggingface.co/ModerRAS/AniFileBERT"
23
+
24
+ [tool.uv]
25
+ package = false
26
+ environments = ["sys_platform == 'win32'"]
27
+
28
+ [tool.uv.sources]
29
+ torch = [
30
+ { index = "pytorch-cu132-nightly", marker = "platform_system == 'Windows'" },
31
+ ]
32
+
33
+ [[tool.uv.index]]
34
+ name = "pytorch-cu132-nightly"
35
+ url = "https://download.pytorch.org/whl/nightly/cu132"
36
+ explicit = true
snapshots/anifilebert-dapt512-long/requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ --extra-index-url https://download.pytorch.org/whl/cu126
2
+
3
+ accelerate==1.13.0
4
+ datasets==4.8.5
5
+ numpy==2.4.5
6
+ onnx==1.21.0
7
+ onnxruntime==1.26.0
8
+ onnxscript==0.7.0
9
+ seqeval==1.2.2
10
+ tensorboard>=2.14.0
11
+ torch==2.12.0+cu126
12
+ transformers==5.8.1
snapshots/anifilebert-dapt512-long/tokenizer_config.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "[PAD]",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "[UNK]",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "[CLS]",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "[SEP]",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ }
35
+ },
36
+ "backend": "custom",
37
+ "cls_token": "[CLS]",
38
+ "model_max_length": 1000000000000000019884624838656,
39
+ "pad_token": "[PAD]",
40
+ "sep_token": "[SEP]",
41
+ "tokenizer_class": "CharAnimeTokenizer",
42
+ "tokenizer_variant": "char",
43
+ "unk_token": "[UNK]"
44
+ }
snapshots/anifilebert-dapt512-long/vocab.char.json ADDED
@@ -0,0 +1,6201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "[PAD]": 0,
3
+ "[UNK]": 1,
4
+ "[CLS]": 2,
5
+ "[SEP]": 3,
6
+ " ": 4,
7
+ "[": 5,
8
+ "]": 6,
9
+ "0": 7,
10
+ "a": 8,
11
+ "i": 9,
12
+ "o": 10,
13
+ "1": 11,
14
+ "e": 12,
15
+ "2": 13,
16
+ "A": 14,
17
+ "C": 15,
18
+ "n": 16,
19
+ "u": 17,
20
+ "s": 18,
21
+ "D": 19,
22
+ "t": 20,
23
+ "-": 21,
24
+ "B": 22,
25
+ "S": 23,
26
+ "r": 24,
27
+ "8": 25,
28
+ "P": 26,
29
+ "p": 27,
30
+ "4": 28,
31
+ "H": 29,
32
+ "V": 30,
33
+ "R": 31,
34
+ "k": 32,
35
+ "x": 33,
36
+ "_": 34,
37
+ "h": 35,
38
+ "E": 36,
39
+ "6": 37,
40
+ "M": 38,
41
+ "l": 39,
42
+ "m": 40,
43
+ "7": 41,
44
+ "F": 42,
45
+ "b": 43,
46
+ "G": 44,
47
+ "T": 45,
48
+ "L": 46,
49
+ "c": 47,
50
+ "5": 48,
51
+ "w": 49,
52
+ ".": 50,
53
+ "9": 51,
54
+ "I": 52,
55
+ "d": 53,
56
+ "N": 54,
57
+ "3": 55,
58
+ "(": 56,
59
+ "K": 57,
60
+ ")": 58,
61
+ "g": 59,
62
+ "y": 60,
63
+ "O": 61,
64
+ "W": 62,
65
+ "Y": 63,
66
+ "U": 64,
67
+ "z": 65,
68
+ "X": 66,
69
+ "J": 67,
70
+ "&": 68,
71
+ "!": 69,
72
+ "v": 70,
73
+ "f": 71,
74
+ "j": 72,
75
+ "第": 73,
76
+ "【": 74,
77
+ "】": 75,
78
+ "話": 76,
79
+ "Z": 77,
80
+ "の": 78,
81
+ "ー": 79,
82
+ "ン": 80,
83
+ "「": 81,
84
+ "」": 82,
85
+ "ア": 83,
86
+ ",": 84,
87
+ "幕": 85,
88
+ "字": 86,
89
+ "ル": 87,
90
+ "的": 88,
91
+ "イ": 89,
92
+ "ス": 90,
93
+ "!": 91,
94
+ "组": 92,
95
+ "ニ": 93,
96
+ "メ": 94,
97
+ "ラ": 95,
98
+ "Q": 96,
99
+ "女": 97,
100
+ "ト": 98,
101
+ "季": 99,
102
+ "い": 100,
103
+ "魔": 101,
104
+ "'": 102,
105
+ "リ": 103,
106
+ "之": 104,
107
+ "漫": 105,
108
+ "ド": 106,
109
+ "国": 107,
110
+ "ク": 108,
111
+ "ッ": 109,
112
+ "少": 110,
113
+ "日": 111,
114
+ "王": 112,
115
+ "神": 113,
116
+ "な": 114,
117
+ "ん": 115,
118
+ "人": 116,
119
+ "る": 117,
120
+ "小": 118,
121
+ "ジ": 119,
122
+ "レ": 120,
123
+ "タ": 121,
124
+ "と": 122,
125
+ "新": 123,
126
+ "た": 124,
127
+ "天": 125,
128
+ "简": 126,
129
+ "体": 127,
130
+ "・": 128,
131
+ "×": 129,
132
+ "大": 130,
133
+ "~": 131,
134
+ "话": 132,
135
+ "者": 133,
136
+ "は": 134,
137
+ "マ": 135,
138
+ "カ": 136,
139
+ "か": 137,
140
+ "光": 138,
141
+ "+": 139,
142
+ "世": 140,
143
+ ":": 141,
144
+ "ら": 142,
145
+ "集": 143,
146
+ "界": 144,
147
+ "ロ": 145,
148
+ "し": 146,
149
+ "版": 147,
150
+ "美": 148,
151
+ "キ": 149,
152
+ "语": 150,
153
+ "漏": 151,
154
+ "ズ": 152,
155
+ "勺": 153,
156
+ "子": 154,
157
+ "シ": 155,
158
+ "テ": 156,
159
+ "士": 157,
160
+ "デ": 158,
161
+ "り": 159,
162
+ "オ": 160,
163
+ "双": 161,
164
+ "生": 162,
165
+ "が": 163,
166
+ "&": 164,
167
+ "れ": 165,
168
+ "コ": 166,
169
+ "ガ": 167,
170
+ "ィ": 168,
171
+ "二": 169,
172
+ "特": 170,
173
+ "星": 171,
174
+ "ャ": 172,
175
+ "ち": 173,
176
+ "プ": 174,
177
+ "に": 175,
178
+ "像": 176,
179
+ "法": 177,
180
+ "戦": 178,
181
+ "中": 179,
182
+ "一": 180,
183
+ "て": 181,
184
+ "ま": 182,
185
+ "/": 183,
186
+ "グ": 184,
187
+ "ブ": 185,
188
+ "#": 186,
189
+ "フ": 187,
190
+ "ュ": 188,
191
+ "☆": 189,
192
+ "モ": 190,
193
+ "っ": 191,
194
+ "作": 192,
195
+ "梦": 193,
196
+ "バ": 194,
197
+ "く": 195,
198
+ "さ": 196,
199
+ "ム": 197,
200
+ ";": 198,
201
+ "海": 199,
202
+ "う": 200,
203
+ "ダ": 201,
204
+ "~": 202,
205
+ "域": 203,
206
+ "チ": 204,
207
+ "空": 205,
208
+ "お": 206,
209
+ "ナ": 207,
210
+ "エ": 208,
211
+ "篇": 209,
212
+ "典": 210,
213
+ "q": 211,
214
+ "映": 212,
215
+ "我": 213,
216
+ "·": 214,
217
+ "物": 215,
218
+ "こ": 216,
219
+ "(": 217,
220
+ "龙": 218,
221
+ "異": 219,
222
+ "繁": 220,
223
+ "?": 221,
224
+ "猪": 222,
225
+ "三": 223,
226
+ "番": 224,
227
+ "夜": 225,
228
+ ")": 226,
229
+ "伝": 227,
230
+ "月": 228,
231
+ "超": 229,
232
+ "も": 230,
233
+ "組": 231,
234
+ "动": 232,
235
+ "年": 233,
236
+ "ノ": 234,
237
+ "を": 235,
238
+ "き": 236,
239
+ "@": 237,
240
+ "名": 238,
241
+ "影": 239,
242
+ "家": 240,
243
+ "高": 241,
244
+ "使": 242,
245
+ "あ": 243,
246
+ "不": 244,
247
+ "パ": 245,
248
+ "制": 246,
249
+ "で": 247,
250
+ "ョ": 248,
251
+ "斗": 249,
252
+ "ツ": 250,
253
+ "す": 251,
254
+ "学": 252,
255
+ "み": 253,
256
+ "ウ": 254,
257
+ "怪": 255,
258
+ "地": 256,
259
+ "死": 257,
260
+ "告": 258,
261
+ "忍": 259,
262
+ "ミ": 260,
263
+ "探": 261,
264
+ "ハ": 262,
265
+ "ボ": 263,
266
+ "南": 264,
267
+ "战": 265,
268
+ "火": 266,
269
+ "セ": 267,
270
+ "だ": 268,
271
+ "主": 269,
272
+ "え": 270,
273
+ "花": 271,
274
+ "よ": 272,
275
+ "ゴ": 273,
276
+ "异": 274,
277
+ "Ⅱ": 275,
278
+ "笔": 276,
279
+ "予": 277,
280
+ "サ": 278,
281
+ "上": 279,
282
+ "ゃ": 280,
283
+ "英": 281,
284
+ "啦": 282,
285
+ "柯": 283,
286
+ "蜡": 284,
287
+ "侦": 285,
288
+ "活": 286,
289
+ "語": 287,
290
+ "、": 288,
291
+ "雄": 289,
292
+ "珠": 290,
293
+ "事": 291,
294
+ "仙": 292,
295
+ "體": 293,
296
+ "哆": 294,
297
+ "万": 295,
298
+ "蓝": 296,
299
+ "め": 297,
300
+ "色": 298,
301
+ "つ": 299,
302
+ "想": 300,
303
+ "宝": 301,
304
+ "け": 302,
305
+ "与": 303,
306
+ "説": 304,
307
+ "場": 305,
308
+ "勇": 306,
309
+ "回": 307,
310
+ "犬": 308,
311
+ "本": 309,
312
+ "重": 310,
313
+ "妖": 311,
314
+ "最": 312,
315
+ "太": 313,
316
+ "偶": 314,
317
+ "ァ": 315,
318
+ "心": 316,
319
+ "宇": 317,
320
+ "传": 318,
321
+ "宙": 319,
322
+ "ヤ": 320,
323
+ "贼": 321,
324
+ "明": 322,
325
+ "ビ": 323,
326
+ "編": 324,
327
+ "四": 325,
328
+ "出": 326,
329
+ "ベ": 327,
330
+ "完": 328,
331
+ "ふ": 329,
332
+ "云": 330,
333
+ "ェ": 331,
334
+ "遊": 332,
335
+ "师": 333,
336
+ "来": 334,
337
+ "ゲ": 335,
338
+ "恋": 336,
339
+ "ヴ": 337,
340
+ "「": 338,
341
+ "ソ": 339,
342
+ "」": 340,
343
+ "道": 341,
344
+ "锛": 342,
345
+ "金": 343,
346
+ "そ": 344,
347
+ "ネ": 345,
348
+ "灵": 346,
349
+ "是": 347,
350
+ "わ": 348,
351
+ "风": 349,
352
+ "科": 350,
353
+ "行": 351,
354
+ "精": 352,
355
+ "機": 353,
356
+ "冒": 354,
357
+ "八": 355,
358
+ "成": 356,
359
+ "���": 357,
360
+ "ワ": 358,
361
+ "動": 359,
362
+ "白": 360,
363
+ "叉": 361,
364
+ "百": 362,
365
+ "限": 363,
366
+ "树": 364,
367
+ "会": 365,
368
+ "鬼": 366,
369
+ "记": 367,
370
+ "舞": 368,
371
+ "ザ": 369,
372
+ "樱": 370,
373
+ "黑": 371,
374
+ "ケ": 372,
375
+ "奇": 373,
376
+ "劇": 374,
377
+ "外": 375,
378
+ "ど": 376,
379
+ "愛": 377,
380
+ "目": 378,
381
+ "青": 379,
382
+ "じ": 380,
383
+ "次": 381,
384
+ "清": 382,
385
+ "时": 383,
386
+ "無": 384,
387
+ "期": 385,
388
+ "下": 386,
389
+ "夏": 387,
390
+ "了": 388,
391
+ "球": 389,
392
+ "ひ": 390,
393
+ "記": 391,
394
+ "校": 392,
395
+ "兽": 393,
396
+ "场": 394,
397
+ "妹": 395,
398
+ "ゼ": 396,
399
+ "城": 397,
400
+ "公": 398,
401
+ "彼": 399,
402
+ "ギ": 400,
403
+ "兄": 401,
404
+ "羊": 402,
405
+ "河": 403,
406
+ "ば": 404,
407
+ "冷": 405,
408
+ "手": 406,
409
+ "晨": 407,
410
+ "曦": 408,
411
+ "ろ": 409,
412
+ "爆": 410,
413
+ "男": 411,
414
+ "郎": 412,
415
+ ",": 413,
416
+ "隊": 414,
417
+ "教": 415,
418
+ "剧": 416,
419
+ "雪": 417,
420
+ "有": 418,
421
+ "游": 419,
422
+ "力": 420,
423
+ "前": 421,
424
+ "師": 422,
425
+ "Ⅲ": 423,
426
+ "へ": 424,
427
+ "面": 425,
428
+ "食": 426,
429
+ "狂": 427,
430
+ "。": 428,
431
+ "始": 429,
432
+ "せ": 430,
433
+ "狼": 431,
434
+ "可": 432,
435
+ "全": 433,
436
+ "都": 434,
437
+ "件": 435,
438
+ "族": 436,
439
+ "破": 437,
440
+ "武": 438,
441
+ "末": 439,
442
+ "补": 440,
443
+ "や": 441,
444
+ "在": 442,
445
+ "银": 443,
446
+ "决": 444,
447
+ "銀": 445,
448
+ "无": 446,
449
+ "ぎ": 447,
450
+ "京": 448,
451
+ "未": 449,
452
+ "ペ": 450,
453
+ "戰": 451,
454
+ "強": 452,
455
+ "園": 453,
456
+ "音": 454,
457
+ "和": 455,
458
+ "招": 456,
459
+ "卡": 457,
460
+ "妙": 458,
461
+ "文": 459,
462
+ "騎": 460,
463
+ "台": 461,
464
+ "猫": 462,
465
+ "丸": 463,
466
+ "七": 464,
467
+ "歌": 465,
468
+ "旅": 466,
469
+ "娘": 467,
470
+ "闘": 468,
471
+ "能": 469,
472
+ "弟": 470,
473
+ "★": 471,
474
+ "山": 472,
475
+ "黒": 473,
476
+ "ピ": 474,
477
+ "君": 475,
478
+ "爱": 476,
479
+ "章": 477,
480
+ "風": 478,
481
+ "戏": 479,
482
+ "斯": 480,
483
+ "血": 481,
484
+ "春": 482,
485
+ "銉": 483,
486
+ "部": 484,
487
+ "院": 485,
488
+ "學": 486,
489
+ "聖": 487,
490
+ "ょ": 488,
491
+ "五": 489,
492
+ "机": 490,
493
+ "真": 491,
494
+ "流": 492,
495
+ "改": 493,
496
+ "術": 494,
497
+ "巴": 495,
498
+ "乱": 496,
499
+ "東": 497,
500
+ "募": 498,
501
+ "険": 499,
502
+ "決": 500,
503
+ "画": 501,
504
+ "幻": 502,
505
+ "命": 503,
506
+ "拳": 504,
507
+ "救": 505,
508
+ "代": 506,
509
+ "間": 507,
510
+ "戯": 508,
511
+ "野": 509,
512
+ "自": 510,
513
+ "先": 511,
514
+ "石": 512,
515
+ "翻": 513,
516
+ "巻": 514,
517
+ "十": 515,
518
+ "迷": 516,
519
+ "路": 517,
520
+ "艦": 518,
521
+ "圣": 519,
522
+ "後": 520,
523
+ "剑": 521,
524
+ "市": 522,
525
+ "译": 523,
526
+ "紀": 524,
527
+ "纪": 525,
528
+ "暗": 526,
529
+ "北": 527,
530
+ "常": 528,
531
+ "時": 529,
532
+ "尾": 530,
533
+ "ご": 531,
534
+ "為": 532,
535
+ "ポ": 533,
536
+ "拉": 534,
537
+ "穹": 535,
538
+ "榫": 536,
539
+ "走": 537,
540
+ "踪": 538,
541
+ "ぶ": 539,
542
+ "千": 540,
543
+ "喜": 541,
544
+ "甜": 542,
545
+ "苍": 543,
546
+ "园": 544,
547
+ "所": 545,
548
+ "½": 546,
549
+ "安": 547,
550
+ "港": 548,
551
+ "撃": 549,
552
+ "电": 550,
553
+ "俺": 551,
554
+ "夢": 552,
555
+ "僅": 553,
556
+ "澳": 554,
557
+ "修": 555,
558
+ "矢": 556,
559
+ "室": 557,
560
+ "書": 558,
561
+ "赤": 559,
562
+ "區": 560,
563
+ "欑": 561,
564
+ "险": 562,
565
+ "合": 563,
566
+ "方": 564,
567
+ "様": 565,
568
+ "六": 566,
569
+ "变": 567,
570
+ "ォ": 568,
571
+ "灰": 569,
572
+ "姐": 570,
573
+ "里": 571,
574
+ "彔": 572,
575
+ "與": 573,
576
+ "ヒ": 574,
577
+ "鉄": 575,
578
+ "ゆ": 576,
579
+ "び": 577,
580
+ "実": 578,
581
+ "…": 579,
582
+ "殺": 580,
583
+ "逆": 581,
584
+ "ぐ": 582,
585
+ "元": 583,
586
+ "等": 584,
587
+ "秘": 585,
588
+ "内": 586,
589
+ "終": 587,
590
+ "嵌": 588,
591
+ "転": 589,
592
+ "到": 590,
593
+ "田": 591,
594
+ "姫": 592,
595
+ "僕": 593,
596
+ "雨": 594,
597
+ "孩": 595,
598
+ "草": 596,
599
+ "ず": 597,
600
+ "同": 598,
601
+ "再": 599,
602
+ "码": 600,
603
+ "開": 601,
604
+ "禁": 602,
605
+ "`": 603,
606
+ "原": 604,
607
+ "旋": 605,
608
+ "好": 606,
609
+ "脳": 607,
610
+ "涔": 608,
611
+ "水": 609,
612
+ "巨": 610,
613
+ "堕": 611,
614
+ "笑": 612,
615
+ "思": 613,
616
+ "独": 614,
617
+ "录": 615,
618
+ "配": 616,
619
+ "社": 617,
620
+ "灏": 618,
621
+ "情": 619,
622
+ "桃": 620,
623
+ "骑": 621,
624
+ "贝": 622,
625
+ "老": 623,
626
+ "櫻": 624,
627
+ "知": 625,
628
+ "言": 626,
629
+ "被": 627,
630
+ "身": 628,
631
+ "图": 629,
632
+ "挂": 630,
633
+ "杀": 631,
634
+ "軍": 632,
635
+ "約": 633,
636
+ "炎": 634,
637
+ "牙": 635,
638
+ "理": 636,
639
+ "ホ": 637,
640
+ "閾": 638,
641
+ "龍": 639,
642
+ "獣": 640,
643
+ "眼": 641,
644
+ "見": 642,
645
+ "Ⅰ": 643,
646
+ "む": 644,
647
+ "放": 645,
648
+ "派": 646,
649
+ "瓊": 647,
650
+ "ユ": 648,
651
+ "数": 649,
652
+ "戟": 650,
653
+ "后": 651,
654
+ "曲": 652,
655
+ "変": 653,
656
+ "器": 654,
657
+ "ヘ": 655,
658
+ "境": 656,
659
+ "鋼": 657,
660
+ "魂": 658,
661
+ "剣": 659,
662
+ "形": 660,
663
+ "街": 661,
664
+ "進": 662,
665
+ "恶": 663,
666
+ "落": 664,
667
+ "史": 665,
668
+ "咪": 666,
669
+ "相": 667,
670
+ "意": 668,
671
+ "平": 669,
672
+ "就": 670,
673
+ "克": 671,
674
+ "用": 672,
675
+ "博": 673,
676
+ "攻": 674,
677
+ "飛": 675,
678
+ "発": 676,
679
+ "貓": 677,
680
+ "玩": 678,
681
+ "比": 679,
682
+ "刀": 680,
683
+ "結": 681,
684
+ "要": 682,
685
+ "入": 683,
686
+ "车": 684,
687
+ "虫": 685,
688
+ "化": 686,
689
+ "九": 687,
690
+ "甲": 688,
691
+ "推": 689,
692
+ "育": 690,
693
+ "密": 691,
694
+ "马": 692,
695
+ "悪": 693,
696
+ "头": 694,
697
+ "電": 695,
698
+ "墓": 696,
699
+ "印": 697,
700
+ "ぬ": 698,
701
+ "Ⅴ": 699,
702
+ "红": 700,
703
+ "島": 701,
704
+ "你": 702,
705
+ "義": 703,
706
+ "ぼ": 704,
707
+ "轉": 705,
708
+ "ね": 706,
709
+ "罗": 707,
710
+ "装": 708,
711
+ "邦": 709,
712
+ "戲": 710,
713
+ "吧": 711,
714
+ "竜": 712,
715
+ "莺": 713,
716
+ "対": 714,
717
+ "長": 715,
718
+ "永": 716,
719
+ "疾": 717,
720
+ "べ": 718,
721
+ "劣": 719,
722
+ "悟": 720,
723
+ " ": 721,
724
+ "消": 722,
725
+ "ヨ": 723,
726
+ "通": 724,
727
+ "雷": 725,
728
+ "曹": 726,
729
+ "勝": 727,
730
+ "乌": 728,
731
+ "击": 729,
732
+ "果": 730,
733
+ "{": 731,
734
+ "線": 732,
735
+ "防": 733,
736
+ "德": 734,
737
+ "}": 735,
738
+ "ぞ": 736,
739
+ "哥": 737,
740
+ "长": 738,
741
+ "刃": 739,
742
+ "泣": 740,
743
+ "盗": 741,
744
+ "惑": 742,
745
+ "蹈": 743,
746
+ "冴": 744,
747
+ "気": 745,
748
+ "國": 746,
749
+ "斬": 747,
750
+ "门": 748,
751
+ "福": 749,
752
+ "絶": 750,
753
+ "爸": 751,
754
+ "げ": 752,
755
+ "假": 753,
756
+ "婚": 754,
757
+ "獄": 755,
758
+ "叶": 756,
759
+ "嫁": 757,
760
+ "萌": 758,
761
+ "宠": 759,
762
+ "线": 760,
763
+ "座": 761,
764
+ "飞": 762,
765
+ "江": 763,
766
+ "奴": 764,
767
+ "格": 765,
768
+ "戀": 766,
769
+ "尊": 767,
770
+ "味": 768,
771
+ "鲁": 769,
772
+ "失": 770,
773
+ "童": 771,
774
+ "当": 772,
775
+ "正": 773,
776
+ "今": 774,
777
+ "이": 775,
778
+ "声": 776,
779
+ "暴": 777,
780
+ "恐": 778,
781
+ "利": 779,
782
+ "号": 780,
783
+ "讨": 781,
784
+ "堂": 782,
785
+ "누": 783,
786
+ "야": 784,
787
+ "黄": 785,
788
+ "輪": 786,
789
+ "戝": 787,
790
+ "转": 788,
791
+ "宣": 789,
792
+ "律": 790,
793
+ "进": 791,
794
+ "彩": 792,
795
+ "盟": 793,
796
+ "激": 794,
797
+ "塔": 795,
798
+ "工": 796,
799
+ "间": 797,
800
+ "分": 798,
801
+ "古": 799,
802
+ "森": 800,
803
+ "汉": 801,
804
+ "宮": 802,
805
+ "守": 803,
806
+ "铁": 804,
807
+ "奈": 805,
808
+ "職": 806,
809
+ "’": 807,
810
+ "庭": 808,
811
+ "去": 809,
812
+ "切": 810,
813
+ "嬬": 811,
814
+ "Ⅳ": 812,
815
+ "幽": 813,
816
+ "陽": 814,
817
+ "猎": 815,
818
+ "敵": 816,
819
+ "危": 817,
820
+ "绵": 818,
821
+ "幸": 819,
822
+ "厌": 820,
823
+ "宗": 821,
824
+ ";": 822,
825
+ "儿": 823,
826
+ "初": 824,
827
+ "角": 825,
828
+ "罪": 826,
829
+ "念": 827,
830
+ "噬": 828,
831
+ "帝": 829,
832
+ "♭": 830,
833
+ "深": 831,
834
+ "反": 832,
835
+ "登": 833,
836
+ "快": 834,
837
+ "木": 835,
838
+ "望": 836,
839
+ "♪": 837,
840
+ "网": 838,
841
+ "鎴": 839,
842
+ "弱": 840,
843
+ "对": 841,
844
+ "庚": 842,
845
+ "看": 843,
846
+ "为": 844,
847
+ "波": 845,
848
+ "私": 846,
849
+ "极": 847,
850
+ "仮": 848,
851
+ "林": 849,
852
+ "屋": 850,
853
+ "別": 851,
854
+ "向": 852,
855
+ "ほ": 853,
856
+ "亚": 854,
857
+ "警": 855,
858
+ "兵": 856,
859
+ "母": 857,
860
+ "终": 858,
861
+ "信": 859,
862
+ "个": 860,
863
+ "極": 861,
864
+ "圈": 862,
865
+ "助": 863,
866
+ "干": 864,
867
+ "牌": 865,
868
+ "藏": 866,
869
+ "甘": 867,
870
+ "伊": 868,
871
+ "鬥": 869,
872
+ "ゾ": 870,
873
+ "徒": 871,
874
+ "√": 872,
875
+ "契": 873,
876
+ "湖": 874,
877
+ "运": 875,
878
+ "虎": 876,
879
+ ":": 877,
880
+ "送": 878,
881
+ "滅": 879,
882
+ "定": 880,
883
+ "跳": 881,
884
+ "狐": 882,
885
+ "遠": 883,
886
+ "交": 884,
887
+ "浪": 885,
888
+ "西": 886,
889
+ "羽": 887,
890
+ "翼": 888,
891
+ "丈": 889,
892
+ "涓": 890,
893
+ "《": 891,
894
+ "》": 892,
895
+ "傳": 893,
896
+ "咯": 894,
897
+ "馬": 895,
898
+ "運": 896,
899
+ "ざ": 897,
900
+ "达": 898,
901
+ "村": 899,
902
+ "说": 900,
903
+ "略": 901,
904
+ "孫": 902,
905
+ "莉": 903,
906
+ "姬": 904,
907
+ "加": 905,
908
+ "〜": 906,
909
+ "铛": 907,
910
+ "録": 908,
911
+ "劍": 909,
912
+ "烈": 910,
913
+ "紅": 911,
914
+ "视": 912,
915
+ "钉": 913,
916
+ "姆": 914,
917
+ "起": 915,
918
+ "邪": 916,
919
+ "皿": 917,
920
+ "至": 918,
921
+ "香": 919,
922
+ "争": 920,
923
+ "達": 921,
924
+ "娜": 922,
925
+ "队": 923,
926
+ "结": 924,
927
+ "銈": 925,
928
+ "殑": 926,
929
+ "追": 927,
930
+ "衛": 928,
931
+ "造": 929,
932
+ "來": 930,
933
+ "簿": 931,
934
+ "带": 932,
935
+ "立": 933,
936
+ "毛": 934,
937
+ "打": 935,
938
+ "岛": 936,
939
+ "解": 937,
940
+ "开": 938,
941
+ "突": 939,
942
+ "妮": 940,
943
+ "洛": 941,
944
+ "诸": 942,
945
+ "餐": 943,
946
+ "화": 944,
947
+ "联": 945,
948
+ "管": 946,
949
+ "闇": 947,
950
+ "点": 948,
951
+ "降": 949,
952
+ "業": 950,
953
+ "列": 951,
954
+ "那": 952,
955
+ "呼": 953,
956
+ "響": 954,
957
+ "復": 955,
958
+ "侠": 956,
959
+ "才": 957,
960
+ "棒": 958,
961
+ "片": 959,
962
+ "琪": 960,
963
+ "奥": 961,
964
+ "ぷ": 962,
965
+ "技": 963,
966
+ "『": 964,
967
+ "』": 965,
968
+ "弾": 966,
969
+ "术": 967,
970
+ "怖": 968,
971
+ "蒼": 969,
972
+ "鸣": 970,
973
+ "種": 971,
974
+ "寒": 972,
975
+ "鐨": 973,
976
+ "感": 974,
977
+ "熊": 975,
978
+ "荒": 976,
979
+ "ぁ": 977,
980
+ "사": 978,
981
+ "亜": 979,
982
+ "布": 980,
983
+ "尸": 981,
984
+ "脑": 982,
985
+ "內": 983,
986
+ "燃": 984,
987
+ "喰": 985,
988
+ "赛": 986,
989
+ "存": 987,
990
+ "祖": 988,
991
+ "摇": 989,
992
+ "见": 990,
993
+ "病": 991,
994
+ "酒": 992,
995
+ "凡": 993,
996
+ "挑": 994,
997
+ "虹": 995,
998
+ "競": 996,
999
+ "东": 997,
1000
+ "葉": 998,
1001
+ "阿": 999,
1002
+ "粤": 1000,
1003
+ "巫": 1001,
1004
+ "豪": 1002,
1005
+ "孤": 1003,
1006
+ "陰": 1004,
1007
+ "陣": 1005,
1008
+ "惡": 1006,
1009
+ "乐": 1007,
1010
+ "尼": 1008,
1011
+ "咲": 1009,
1012
+ "ぱ": 1010,
1013
+ "系": 1011,
1014
+ "谜": 1012,
1015
+ "譚": 1013,
1016
+ "襲": 1014,
1017
+ "靈": 1015,
1018
+ "别": 1016,
1019
+ "伍": 1017,
1020
+ "良": 1018,
1021
+ "歡": 1019,
1022
+ "取": 1020,
1023
+ "級": 1021,
1024
+ "悲": 1022,
1025
+ "妻": 1023,
1026
+ "袭": 1024,
1027
+ "帰": 1025,
1028
+ "亡": 1026,
1029
+ "药": 1027,
1030
+ "會": 1028,
1031
+ "熱": 1029,
1032
+ "藍": 1030,
1033
+ "賊": 1031,
1034
+ "客": 1032,
1035
+ "秦": 1033,
1036
+ "将": 1034,
1037
+ "謎": 1035,
1038
+ "車": 1036,
1039
+ "多": 1037,
1040
+ "求": 1038,
1041
+ "抱": 1039,
1042
+ "纯": 1040,
1043
+ "然": 1041,
1044
+ "吞": 1042,
1045
+ "瓒": 1043,
1046
+ "锚": 1044,
1047
+ "何": 1045,
1048
+ "断": 1046,
1049
+ "束": 1047,
1050
+ "鍥": 1048,
1051
+ ".": 1049,
1052
+ "骨": 1050,
1053
+ "祭": 1051,
1054
+ "非": 1052,
1055
+ "鏃": 1053,
1056
+ "发": 1054,
1057
+ "鳥": 1055,
1058
+ "享": 1056,
1059
+ "鍏": 1057,
1060
+ "寄": 1058,
1061
+ "Δ": 1059,
1062
+ "聲": 1060,
1063
+ "近": 1061,
1064
+ "秋": 1062,
1065
+ "民": 1063,
1066
+ "川": 1064,
1067
+ "们": 1065,
1068
+ "銇": 1066,
1069
+ "度": 1067,
1070
+ "露": 1068,
1071
+ "雲": 1069,
1072
+ "驱": 1070,
1073
+ "复": 1071,
1074
+ "绝": 1072,
1075
+ "歁": 1073,
1076
+ "犲": 1074,
1077
+ "书": 1075,
1078
+ "素": 1076,
1079
+ "幼": 1077,
1080
+ "御": 1078,
1081
+ "职": 1079,
1082
+ "租": 1080,
1083
+ "得": 1081,
1084
+ "指": 1082,
1085
+ "鍒": 1083,
1086
+ "宅": 1084,
1087
+ "欢": 1085,
1088
+ "꞉": 1086,
1089
+ "休": 1087,
1090
+ "希": 1088,
1091
+ "底": 1089,
1092
+ "宿": 1090,
1093
+ "噹": 1091,
1094
+ "Ψ": 1092,
1095
+ "-": 1093,
1096
+ "宫": 1094,
1097
+ "現": 1095,
1098
+ "竹": 1096,
1099
+ "拥": 1097,
1100
+ "召": 1098,
1101
+ "弐": 1099,
1102
+ "醒": 1100,
1103
+ "選": 1101,
1104
+ "霸": 1102,
1105
+ "封": 1103,
1106
+ "辰": 1104,
1107
+ "侵": 1105,
1108
+ "政": 1106,
1109
+ "借": 1107,
1110
+ "ぃ": 1108,
1111
+ "輝": 1109,
1112
+ "倒": 1110,
1113
+ "楽": 1111,
1114
+ "吉": 1112,
1115
+ "ゥ": 1113,
1116
+ "兗": 1114,
1117
+ "尚": 1115,
1118
+ "偵": 1116,
1119
+ "也": 1117,
1120
+ "把": 1118,
1121
+ "磁": 1119,
1122
+ "叮": 1120,
1123
+ "透": 1121,
1124
+ "險": 1122,
1125
+ "從": 1123,
1126
+ "問": 1124,
1127
+ "止": 1125,
1128
+ "启": 1126,
1129
+ "治": 1127,
1130
+ "如": 1128,
1131
+ "ぽ": 1129,
1132
+ "榄": 1130,
1133
+ "晚": 1131,
1134
+ "샤": 1132,
1135
+ "级": 1133,
1136
+ "搞": 1134,
1137
+ "庡": 1135,
1138
+ "强": 1136,
1139
+ "啊": 1137,
1140
+ "共": 1138,
1141
+ "铆": 1139,
1142
+ "°": 1140,
1143
+ "肉": 1141,
1144
+ "卒": 1142,
1145
+ "艺": 1143,
1146
+ "医": 1144,
1147
+ "玉": 1145,
1148
+ "首": 1146,
1149
+ "奏": 1147,
1150
+ "―": 1148,
1151
+ "頭": 1149,
1152
+ "性": 1150,
1153
+ "過": 1151,
1154
+ "冰": 1152,
1155
+ "捕": 1153,
1156
+ "銃": 1154,
1157
+ "優": 1155,
1158
+ "尔": 1156,
1159
+ "灼": 1157,
1160
+ "館": 1158,
1161
+ "ゅ": 1159,
1162
+ "霊": 1160,
1163
+ "◆": 1161,
1164
+ "蛋": 1162,
1165
+ "羅": 1163,
1166
+ "员": 1164,
1167
+ "半": 1165,
1168
+ "鹰": 1166,
1169
+ "萨": 1167,
1170
+ "監": 1168,
1171
+ "卫": 1169,
1172
+ "什": 1170,
1173
+ "é": 1171,
1174
+ "演": 1172,
1175
+ "負": 1173,
1176
+ "秒": 1174,
1177
+ "銆": 1175,
1178
+ "关": 1176,
1179
+ "轮": 1177,
1180
+ "班": 1178,
1181
+ "導": 1179,
1182
+ "船": 1180,
1183
+ "吹": 1181,
1184
+ "牧": 1182,
1185
+ "退": 1183,
1186
+ "领": 1184,
1187
+ "這": 1185,
1188
+ "涙": 1186,
1189
+ "络": 1187,
1190
+ "店": 1188,
1191
+ "玗": 1189,
1192
+ "嵃": 1190,
1193
+ "魯": 1191,
1194
+ "ヌ": 1192,
1195
+ "跡": 1193,
1196
+ "兂": 1194,
1197
+ "现": 1195,
1198
+ "篮": 1196,
1199
+ "橘": 1197,
1200
+ "荘": 1198,
1201
+ "丹": 1199,
1202
+ "門": 1200,
1203
+ "遮": 1201,
1204
+ "莲": 1202,
1205
+ "吸": 1203,
1206
+ "某": 1204,
1207
+ "朋": 1205,
1208
+ "夫": 1206,
1209
+ "志": 1207,
1210
+ "皇": 1208,
1211
+ "临": 1209,
1212
+ "直": 1210,
1213
+ "製": 1211,
1214
+ "砂": 1212,
1215
+ "塾": 1213,
1216
+ "冠": 1214,
1217
+ "鲸": 1215,
1218
+ "铺": 1216,
1219
+ "迎": 1217,
1220
+ "々": 1218,
1221
+ "过": 1219,
1222
+ "夈": 1220,
1223
+ "觉": 1221,
1224
+ "願": 1222,
1225
+ "們": 1223,
1226
+ "除": 1224,
1227
+ "镜": 1225,
1228
+ "恒": 1226,
1229
+ "嘘": 1227,
1230
+ "說": 1228,
1231
+ "式": 1229,
1232
+ "歩": 1230,
1233
+ "粉": 1231,
1234
+ "叔": 1232,
1235
+ "衣": 1233,
1236
+ "総": 1234,
1237
+ "唱": 1235,
1238
+ "錄": 1236,
1239
+ "酱": 1237,
1240
+ "待": 1238,
1241
+ "哦": 1239,
1242
+ "晴": 1240,
1243
+ "+": 1241,
1244
+ "父": 1242,
1245
+ "阳": 1243,
1246
+ "服": 1244,
1247
+ "呪": 1245,
1248
+ "而": 1246,
1249
+ "鏄": 1247,
1250
+ "華": 1248,
1251
+ "2": 1249,
1252
+ "刻": 1250,
1253
+ "瀹": 1251,
1254
+ "實": 1252,
1255
+ "于": 1253,
1256
+ "帳": 1254,
1257
+ "以": 1255,
1258
+ "压": 1256,
1259
+ "壊": 1257,
1260
+ "紒": 1258,
1261
+ "架": 1259,
1262
+ "勫": 1260,
1263
+ "唤": 1261,
1264
+ "孔": 1262,
1265
+ "任": 1263,
1266
+ "档": 1264,
1267
+ "若": 1265,
1268
+ "妈": 1266,
1269
+ "閃": 1267,
1270
+ "充": 1268,
1271
+ "历": 1269,
1272
+ "怒": 1270,
1273
+ "儵": 1271,
1274
+ "席": 1272,
1275
+ "員": 1273,
1276
+ "獸": 1274,
1277
+ "憶": 1275,
1278
+ "蘭": 1276,
1279
+ "气": 1277,
1280
+ "號": 1278,
1281
+ "枪": 1279,
1282
+ "町": 1280,
1283
+ "談": 1281,
1284
+ "短": 1282,
1285
+ "乙": 1283,
1286
+ "埋": 1284,
1287
+ "泉": 1285,
1288
+ "樺": 1286,
1289
+ "诛": 1287,
1290
+ "足": 1288,
1291
+ "△": 1289,
1292
+ "故": 1290,
1293
+ "莱": 1291,
1294
+ "辉": 1292,
1295
+ "支": 1293,
1296
+ "零": 1294,
1297
+ "芙": 1295,
1298
+ "執": 1296,
1299
+ "役": 1297,
1300
+ "曼": 1298,
1301
+ "笛": 1299,
1302
+ "逃": 1300,
1303
+ "題": 1301,
1304
+ "替": 1302,
1305
+ "庫": 1303,
1306
+ "淬": 1304,
1307
+ "伴": 1305,
1308
+ "彈": 1306,
1309
+ "收": 1307,
1310
+ "葬": 1308,
1311
+ "只": 1309,
1312
+ "溿": 1310,
1313
+ "敌": 1311,
1314
+ "米": 1312,
1315
+ "速": 1313,
1316
+ "喚": 1314,
1317
+ "對": 1315,
1318
+ "帐": 1316,
1319
+ "舟": 1317,
1320
+ "砕": 1318,
1321
+ "鐵": 1319,
1322
+ "观": 1320,
1323
+ "鏈": 1321,
1324
+ "灯": 1322,
1325
+ "巧": 1323,
1326
+ "祝": 1324,
1327
+ "盾": 1325,
1328
+ "缁": 1326,
1329
+ "団": 1327,
1330
+ "確": 1328,
1331
+ "袨": 1329,
1332
+ "關": 1330,
1333
+ "越": 1331,
1334
+ "嵐": 1332,
1335
+ "企": 1333,
1336
+ "叫": 1334,
1337
+ "样": 1335,
1338
+ "浣": 1336,
1339
+ "织": 1337,
1340
+ "型": 1338,
1341
+ "漂": 1339,
1342
+ "違": 1340,
1343
+ "魚": 1341,
1344
+ "镇": 1342,
1345
+ "認": 1343,
1346
+ "幹": 1344,
1347
+ "錬": 1345,
1348
+ "品": 1346,
1349
+ "覚": 1347,
1350
+ "普": 1348,
1351
+ "鍩": 1349,
1352
+ "戠": 1350,
1353
+ "托": 1351,
1354
+ "议": 1352,
1355
+ "兔": 1353,
1356
+ "講": 1354,
1357
+ "局": 1355,
1358
+ "變": 1356,
1359
+ "她": 1357,
1360
+ "���": 1358,
1361
+ "個": 1359,
1362
+ "朵": 1360,
1363
+ "因": 1361,
1364
+ "腹": 1362,
1365
+ "點": 1363,
1366
+ "由": 1364,
1367
+ "崎": 1365,
1368
+ "咼": 1366,
1369
+ "曳": 1367,
1370
+ "胞": 1368,
1371
+ "満": 1369,
1372
+ "戒": 1370,
1373
+ "拿": 1371,
1374
+ "糕": 1372,
1375
+ "湯": 1373,
1376
+ "桜": 1374,
1377
+ "缘": 1375,
1378
+ "鱼": 1376,
1379
+ "於": 1377,
1380
+ "司": 1378,
1381
+ "智": 1379,
1382
+ "忌": 1380,
1383
+ "很": 1381,
1384
+ "究": 1382,
1385
+ "刚": 1383,
1386
+ "誕": 1384,
1387
+ "寺": 1385,
1388
+ "嬪": 1386,
1389
+ "著": 1387,
1390
+ "釣": 1388,
1391
+ "瀛": 1389,
1392
+ "虚": 1390,
1393
+ "殻": 1391,
1394
+ "蓮": 1392,
1395
+ "乾": 1393,
1396
+ "佸": 1394,
1397
+ "態": 1395,
1398
+ "灌": 1396,
1399
+ "脿": 1397,
1400
+ "靠": 1398,
1401
+ "樂": 1399,
1402
+ "总": 1400,
1403
+ "绻": 1401,
1404
+ "仇": 1402,
1405
+ "胜": 1403,
1406
+ "謀": 1404,
1407
+ "濂": 1405,
1408
+ "混": 1406,
1409
+ "寻": 1407,
1410
+ "純": 1408,
1411
+ "哈": 1409,
1412
+ "仲": 1410,
1413
+ "厜": 1411,
1414
+ "蟲": 1412,
1415
+ "照": 1413,
1416
+ "着": 1414,
1417
+ "营": 1415,
1418
+ "樹": 1416,
1419
+ "忆": 1417,
1420
+ "験": 1418,
1421
+ "远": 1419,
1422
+ "么": 1420,
1423
+ "誰": 1421,
1424
+ "貴": 1422,
1425
+ "細": 1423,
1426
+ "傷": 1424,
1427
+ "裏": 1425,
1428
+ "懂": 1426,
1429
+ "持": 1427,
1430
+ "盖": 1428,
1431
+ "ぇ": 1429,
1432
+ "詩": 1430,
1433
+ "伪": 1431,
1434
+ "杯": 1432,
1435
+ "氷": 1433,
1436
+ "澶": 1434,
1437
+ "歅": 1435,
1438
+ "1": 1436,
1439
+ "兰": 1437,
1440
+ "娌": 1438,
1441
+ "参": 1439,
1442
+ "鐛": 1440,
1443
+ "髪": 1441,
1444
+ "续": 1442,
1445
+ "晶": 1443,
1446
+ "炼": 1444,
1447
+ "熸": 1445,
1448
+ "弹": 1446,
1449
+ "油": 1447,
1450
+ "絆": 1448,
1451
+ "報": 1449,
1452
+ "义": 1450,
1453
+ "槦": 1451,
1454
+ "秀": 1452,
1455
+ "连": 1453,
1456
+ "帖": 1454,
1457
+ "灭": 1455,
1458
+ "螺": 1456,
1459
+ "频": 1457,
1460
+ "奶": 1458,
1461
+ "问": 1459,
1462
+ "排": 1460,
1463
+ "源": 1461,
1464
+ "鐗": 1462,
1465
+ "响": 1463,
1466
+ "試": 1464,
1467
+ "眠": 1465,
1468
+ "谍": 1466,
1469
+ "瑰": 1467,
1470
+ "創": 1468,
1471
+ "丽": 1469,
1472
+ "刺": 1470,
1473
+ "廻": 1471,
1474
+ "處": 1472,
1475
+ "节": 1473,
1476
+ "基": 1474,
1477
+ "呬": 1475,
1478
+ "瓟": 1476,
1479
+ "皮": 1477,
1480
+ "昭": 1478,
1481
+ "禄": 1479,
1482
+ "急": 1480,
1483
+ "鳴": 1481,
1484
+ "团": 1482,
1485
+ "两": 1483,
1486
+ "其": 1484,
1487
+ "”": 1485,
1488
+ "騒": 1486,
1489
+ "蝉": 1487,
1490
+ "暁": 1488,
1491
+ "雫": 1489,
1492
+ "杰": 1490,
1493
+ "馆": 1491,
1494
+ "朝": 1492,
1495
+ "销": 1493,
1496
+ "则": 1494,
1497
+ "察": 1495,
1498
+ "づ": 1496,
1499
+ "飯": 1497,
1500
+ "還": 1498,
1501
+ "ㄦ": 1499,
1502
+ "口": 1500,
1503
+ "从": 1501,
1504
+ "鏡": 1502,
1505
+ "%": 1503,
1506
+ "哄": 1504,
1507
+ "浦": 1505,
1508
+ "珍": 1506,
1509
+ "緋": 1507,
1510
+ "喵": 1508,
1511
+ "做": 1509,
1512
+ "忘": 1510,
1513
+ "约": 1511,
1514
+ "散": 1512,
1515
+ "瞳": 1513,
1516
+ "单": 1514,
1517
+ "索": 1515,
1518
+ "保": 1516,
1519
+ "谎": 1517,
1520
+ "佐": 1518,
1521
+ "雀": 1519,
1522
+ "饭": 1520,
1523
+ "撞": 1521,
1524
+ "偽": 1522,
1525
+ "坤": 1523,
1526
+ "返": 1524,
1527
+ "歋": 1525,
1528
+ "威": 1526,
1529
+ "亞": 1527,
1530
+ "椋": 1528,
1531
+ "傛": 1529,
1532
+ "征": 1530,
1533
+ "屍": 1531,
1534
+ "必": 1532,
1535
+ "值": 1533,
1536
+ "息": 1534,
1537
+ "承": 1535,
1538
+ "脱": 1536,
1539
+ "猿": 1537,
1540
+ "纳": 1538,
1541
+ "冥": 1539,
1542
+ "刑": 1540,
1543
+ "令": 1541,
1544
+ "忔": 1542,
1545
+ "搜": 1543,
1546
+ "浜": 1544,
1547
+ "晫": 1545,
1548
+ "芥": 1546,
1549
+ "尽": 1547,
1550
+ "表": 1548,
1551
+ "潔": 1549,
1552
+ "哠": 1550,
1553
+ "逮": 1551,
1554
+ "x": 1552,
1555
+ "兒": 1553,
1556
+ "松": 1554,
1557
+ "稿": 1555,
1558
+ "嬫": 1556,
1559
+ "沙": 1557,
1560
+ "獨": 1558,
1561
+ "鏉": 1559,
1562
+ "奪": 1560,
1563
+ "寮": 1561,
1564
+ "楀": 1562,
1565
+ "富": 1563,
1566
+ "炮": 1564,
1567
+ "序": 1565,
1568
+ "官": 1566,
1569
+ "麻": 1567,
1570
+ "苦": 1568,
1571
+ "根": 1569,
1572
+ "離": 1570,
1573
+ "狩": 1571,
1574
+ "群": 1572,
1575
+ "犯": 1573,
1576
+ "給": 1574,
1577
+ "ぜ": 1575,
1578
+ "诞": 1576,
1579
+ "у": 1577,
1580
+ "诲": 1578,
1581
+ "堟": 1579,
1582
+ "Ω": 1580,
1583
+ "玄": 1581,
1584
+ "菜": 1582,
1585
+ "闻": 1583,
1586
+ "计": 1584,
1587
+ "絵": 1585,
1588
+ "坂": 1586,
1589
+ "他": 1587,
1590
+ "残": 1588,
1591
+ "房": 1589,
1592
+ "卧": 1590,
1593
+ "应": 1591,
1594
+ "図": 1592,
1595
+ "量": 1593,
1596
+ "塞": 1594,
1597
+ "创": 1595,
1598
+ "柟": 1596,
1599
+ "悠": 1597,
1600
+ "齡": 1598,
1601
+ "涢": 1599,
1602
+ "鑰": 1600,
1603
+ "欏": 1601,
1604
+ "焰": 1602,
1605
+ "谭": 1603,
1606
+ "鯨": 1604,
1607
+ "姊": 1605,
1608
+ "爾": 1606,
1609
+ "煩": 1607,
1610
+ "鐑": 1608,
1611
+ "欧": 1609,
1612
+ "盜": 1610,
1613
+ "糖": 1611,
1614
+ "咒": 1612,
1615
+ "紙": 1613,
1616
+ "綔": 1614,
1617
+ "祵": 1615,
1618
+ "當": 1616,
1619
+ "敗": 1617,
1620
+ "◎": 1618,
1621
+ "鐜": 1619,
1622
+ "❤": 1620,
1623
+ "樿": 1621,
1624
+ "侀": 1622,
1625
+ "烦": 1623,
1626
+ "“": 1624,
1627
+ "井": 1625,
1628
+ "罠": 1626,
1629
+ "狱": 1627,
1630
+ "率": 1628,
1631
+ "鸟": 1629,
1632
+ "燈": 1630,
1633
+ "吗": 1631,
1634
+ "轨": 1632,
1635
+ "洞": 1633,
1636
+ "炽": 1634,
1637
+ "琴": 1635,
1638
+ "徹": 1636,
1639
+ "親": 1637,
1640
+ "冲": 1638,
1641
+ "蜂": 1639,
1642
+ "华": 1640,
1643
+ "擊": 1641,
1644
+ "胎": 1642,
1645
+ "疑": 1643,
1646
+ "编": 1644,
1647
+ "麼": 1645,
1648
+ "注": 1646,
1649
+ "顔": 1647,
1650
+ "魁": 1648,
1651
+ "绘": 1649,
1652
+ "忙": 1650,
1653
+ "邂": 1651,
1654
+ "逅": 1652,
1655
+ "闖": 1653,
1656
+ "种": 1654,
1657
+ "策": 1655,
1658
+ "谷": 1656,
1659
+ "課": 1657,
1660
+ "迴": 1658,
1661
+ "剁": 1659,
1662
+ "热": 1660,
1663
+ "藤": 1661,
1664
+ "划": 1662,
1665
+ "屁": 1663,
1666
+ "厅": 1664,
1667
+ "斿": 1665,
1668
+ "閲": 1666,
1669
+ "欲": 1667,
1670
+ "昏": 1668,
1671
+ "護": 1669,
1672
+ "獵": 1670,
1673
+ "懐": 1671,
1674
+ "類": 1672,
1675
+ "將": 1673,
1676
+ "熺": 1674,
1677
+ "骞": 1675,
1678
+ "兘": 1676,
1679
+ "住": 1677,
1680
+ "闪": 1678,
1681
+ "誘": 1679,
1682
+ "鬱": 1680,
1683
+ "裂": 1681,
1684
+ "受": 1682,
1685
+ "槑": 1683,
1686
+ "乃": 1684,
1687
+ "ヲ": 1685,
1688
+ "颂": 1686,
1689
+ "吃": 1687,
1690
+ "酷": 1688,
1691
+ "练": 1689,
1692
+ "考": 1690,
1693
+ "橋": 1691,
1694
+ "唯": 1692,
1695
+ "坛": 1693,
1696
+ "計": 1694,
1697
+ "A": 1695,
1698
+ "壞": 1696,
1699
+ "천": 1697,
1700
+ "소": 1698,
1701
+ "○": 1699,
1702
+ "占": 1700,
1703
+ "让": 1701,
1704
+ "料": 1702,
1705
+ "沧": 1703,
1706
+ "接": 1704,
1707
+ "蜜": 1705,
1708
+ "丁": 1706,
1709
+ "猛": 1707,
1710
+ "库": 1708,
1711
+ "俏": 1709,
1712
+ "蛛": 1710,
1713
+ "咏": 1711,
1714
+ "狙": 1712,
1715
+ "諜": 1713,
1716
+ "鏅": 1714,
1717
+ "凪": 1715,
1718
+ "业": 1716,
1719
+ "難": 1717,
1720
+ "檬": 1718,
1721
+ "毒": 1719,
1722
+ "听": 1720,
1723
+ "逐": 1721,
1724
+ "聞": 1722,
1725
+ "璃": 1723,
1726
+ "鐢": 1724,
1727
+ "・": 1725,
1728
+ "ñ": 1726,
1729
+ "洣": 1727,
1730
+ "丮": 1728,
1731
+ "麗": 1729,
1732
+ "惧": 1730,
1733
+ "贵": 1731,
1734
+ "植": 1732,
1735
+ "蜘": 1733,
1736
+ "昆": 1734,
1737
+ "<": 1735,
1738
+ ">": 1736,
1739
+ "続": 1737,
1740
+ "帽": 1738,
1741
+ "旀": 1739,
1742
+ "硶": 1740,
1743
+ "辛": 1741,
1744
+ "曟": 1742,
1745
+ "拾": 1743,
1746
+ "녀": 1744,
1747
+ "티": 1745,
1748
+ "依": 1746,
1749
+ "伐": 1747,
1750
+ "找": 1748,
1751
+ "營": 1749,
1752
+ "肌": 1750,
1753
+ "売": 1751,
1754
+ "歍": 1752,
1755
+ "甦": 1753,
1756
+ "네": 1754,
1757
+ "雙": 1755,
1758
+ "議": 1756,
1759
+ "题": 1757,
1760
+ "氣": 1758,
1761
+ "楂": 1759,
1762
+ "候": 1760,
1763
+ "摩": 1761,
1764
+ "領": 1762,
1765
+ "萊": 1763,
1766
+ "♡": 1764,
1767
+ "宰": 1765,
1768
+ "鐩": 1766,
1769
+ "杞": 1767,
1770
+ "勾": 1768,
1771
+ "婆": 1769,
1772
+ "Ⅵ": 1770,
1773
+ "憂": 1771,
1774
+ "负": 1772,
1775
+ "站": 1773,
1776
+ "姩": 1774,
1777
+ "揪": 1775,
1778
+ "洋": 1776,
1779
+ "景": 1777,
1780
+ "浠": 1778,
1781
+ "温": 1779,
1782
+ "蟹": 1780,
1783
+ "連": 1781,
1784
+ "庄": 1782,
1785
+ "廊": 1783,
1786
+ "欳": 1784,
1787
+ "夋": 1785,
1788
+ "滄": 1786,
1789
+ "頌": 1787,
1790
+ "偢": 1788,
1791
+ "獻": 1789,
1792
+ "愿": 1790,
1793
+ "殿": 1791,
1794
+ "土": 1792,
1795
+ "振": 1793,
1796
+ "迫": 1794,
1797
+ "渊": 1795,
1798
+ "箱": 1796,
1799
+ "似": 1797,
1800
+ "烧": 1798,
1801
+ "搖": 1799,
1802
+ "—": 1800,
1803
+ "护": 1801,
1804
+ "楄": 1802,
1805
+ "賭": 1803,
1806
+ "駆": 1804,
1807
+ "横": 1805,
1808
+ "茅": 1806,
1809
+ "算": 1807,
1810
+ "夕": 1808,
1811
+ "袣": 1809,
1812
+ "擅": 1810,
1813
+ "佺": 1811,
1814
+ "迹": 1812,
1815
+ "泽": 1813,
1816
+ "練": 1814,
1817
+ "遇": 1815,
1818
+ "够": 1816,
1819
+ "鋒": 1817,
1820
+ "賽": 1818,
1821
+ "状": 1819,
1822
+ "観": 1820,
1823
+ "彻": 1821,
1824
+ "團": 1822,
1825
+ "殊": 1823,
1826
+ "梅": 1824,
1827
+ "卜": 1825,
1828
+ "扮": 1826,
1829
+ "瀵": 1827,
1830
+ "绁": 1828,
1831
+ "豚": 1829,
1832
+ "鷹": 1830,
1833
+ "柠": 1831,
1834
+ "寿": 1832,
1835
+ "匠": 1833,
1836
+ "芽": 1834,
1837
+ "則": 1835,
1838
+ "関": 1836,
1839
+ "ต": 1837,
1840
+ "น": 1838,
1841
+ "ท": 1839,
1842
+ "่": 1840,
1843
+ "弄": 1841,
1844
+ "滿": 1842,
1845
+ "往": 1843,
1846
+ "拓": 1844,
1847
+ "訓": 1845,
1848
+ "锋": 1846,
1849
+ "赫": 1847,
1850
+ "慬": 1848,
1851
+ "陸": 1849,
1852
+ "氏": 1850,
1853
+ "อ": 1851,
1854
+ "ี": 1852,
1855
+ "畫": 1853,
1856
+ "壁": 1854,
1857
+ "涼": 1855,
1858
+ "臨": 1856,
1859
+ "仕": 1857,
1860
+ "栫": 1858,
1861
+ "亲": 1859,
1862
+ "囧": 1860,
1863
+ "预": 1861,
1864
+ "惨": 1862,
1865
+ "轴": 1863,
1866
+ "冬": 1864,
1867
+ "歲": 1865,
1868
+ "刊": 1866,
1869
+ "鍔": 1867,
1870
+ "鎮": 1868,
1871
+ "娴": 1869,
1872
+ "粍": 1870,
1873
+ "久": 1871,
1874
+ "步": 1872,
1875
+ "訪": 1873,
1876
+ "赝": 1874,
1877
+ "翔": 1875,
1878
+ "汽": 1876,
1879
+ "鼠": 1877,
1880
+ "¡": 1878,
1881
+ "錯": 1879,
1882
+ "岁": 1880,
1883
+ "誤": 1881,
1884
+ "驯": 1882,
1885
+ "恰": 1883,
1886
+ "栈": 1884,
1887
+ "兼": 1885,
1888
+ "沈": 1886,
1889
+ "仁": 1887,
1890
+ "满": 1888,
1891
+ "鬪": 1889,
1892
+ "黃": 1890,
1893
+ "提": 1891,
1894
+ "射": 1892,
1895
+ "紵": 1893,
1896
+ "驅": 1894,
1897
+ "懈": 1895,
1898
+ "崩": 1896,
1899
+ "拍": 1897,
1900
+ "具": 1898,
1901
+ "協": 1899,
1902
+ "┍": 1900,
1903
+ "掉": 1901,
1904
+ "瞬": 1902,
1905
+ "阴": 1903,
1906
+ "鍙": 1904,
1907
+ "右": 1905,
1908
+ "焔": 1906,
1909
+ "怣": 1907,
1910
+ "泳": 1908,
1911
+ "標": 1909,
1912
+ "棩": 1910,
1913
+ "换": 1911,
1914
+ "筋": 1912,
1915
+ "蕾": 1913,
1916
+ "嫌": 1914,
1917
+ "礼": 1915,
1918
+ "誓": 1916,
1919
+ "习": 1917,
1920
+ "党": 1918,
1921
+ "胖": 1919,
1922
+ "佹": 1920,
1923
+ "遭": 1921,
1924
+ "杜": 1922,
1925
+ "縛": 1923,
1926
+ "罐": 1924,
1927
+ "伏": 1925,
1928
+ "灄": 1926,
1929
+ "儚": 1927,
1930
+ "渚": 1928,
1931
+ "〈": 1929,
1932
+ "〉": 1930,
1933
+ "狗": 1931,
1934
+ "袠": 1932,
1935
+ "養": 1933,
1936
+ "鐧": 1934,
1937
+ "裡": 1935,
1938
+ "辨": 1936,
1939
+ "示": 1937,
1940
+ "案": 1938,
1941
+ "嫳": 1939,
1942
+ "居": 1940,
1943
+ "包": 1941,
1944
+ "逢": 1942,
1945
+ "滚": 1943,
1946
+ "哀": 1944,
1947
+ "糊": 1945,
1948
+ "更": 1946,
1949
+ "璐": 1947,
1950
+ "鐖": 1948,
1951
+ "低": 1949,
1952
+ "戮": 1950,
1953
+ "補": 1951,
1954
+ "铃": 1952,
1955
+ "択": 1953,
1956
+ "煌": 1954,
1957
+ "廢": 1955,
1958
+ "坏": 1956,
1959
+ "弦": 1957,
1960
+ "骸": 1958,
1961
+ "瓙": 1959,
1962
+ "輩": 1960,
1963
+ "标": 1961,
1964
+ "圆": 1962,
1965
+ "珊": 1963,
1966
+ "瑚": 1964,
1967
+ "讐": 1965,
1968
+ "虛": 1966,
1969
+ "绯": 1967,
1970
+ "屈": 1968,
1971
+ "曜": 1969,
1972
+ "军": 1970,
1973
+ "跨": 1971,
1974
+ "板": 1972,
1975
+ "肩": 1973,
1976
+ "聽": 1974,
1977
+ "陷": 1975,
1978
+ "6": 1976,
1979
+ "闷": 1977,
1980
+ "ぺ": 1978,
1981
+ "菓": 1979,
1982
+ "伤": 1980,
1983
+ "供": 1981,
1984
+ "稲": 1982,
1985
+ "搭": 1983,
1986
+ "庢": 1984,
1987
+ "姉": 1985,
1988
+ "跑": 1986,
1989
+ "増": 1987,
1990
+ "伃": 1988,
1991
+ "亂": 1989,
1992
+ "慘": 1990,
1993
+ "但": 1991,
1994
+ "爷": 1992,
1995
+ "續": 1993,
1996
+ "耳": 1994,
1997
+ "钻": 1995,
1998
+ "鎧": 1996,
1999
+ "条": 1997,
2000
+ "伒": 1998,
2001
+ "億": 1999,
2002
+ "铠": 2000,
2003
+ "周": 2001,
2004
+ "给": 2002,
2005
+ "械": 2003,
2006
+ "选": 2004,
2007
+ "弁": 2005,
2008
+ "倉": 2006,
2009
+ "詠": 2007,
2010
+ "´": 2008,
2011
+ "愮": 2009,
2012
+ "瓶": 2010,
2013
+ "雅": 2011,
2014
+ "單": 2012,
2015
+ "袋": 2013,
2016
+ "勯": 2014,
2017
+ "鍐": 2015,
2018
+ "珨": 2016,
2019
+ "瓦": 2017,
2020
+ "眾": 2018,
2021
+ "發": 2019,
2022
+ "舰": 2020,
2023
+ "养": 2021,
2024
+ "各": 2022,
2025
+ "塵": 2023,
2026
+ "壽": 2024,
2027
+ "袪": 2025,
2028
+ "檔": 2026,
2029
+ "╃": 2027,
2030
+ "諾": 2028,
2031
+ "鍓": 2029,
2032
+ "鍖": 2030,
2033
+ "惊": 2031,
2034
+ "苏": 2032,
2035
+ "尖": 2033,
2036
+ "边": 2034,
2037
+ "遺": 2035,
2038
+ "戸": 2036,
2039
+ "广": 2037,
2040
+ "吻": 2038,
2041
+ "桔": 2039,
2042
+ "梗": 2040,
2043
+ "5": 2041,
2044
+ "垷": 2042,
2045
+ "麒": 2043,
2046
+ "麟": 2044,
2047
+ "陀": 2045,
2048
+ "習": 2046,
2049
+ "写": 2047,
2050
+ "討": 2048,
2051
+ "碧": 2049,
2052
+ "勬": 2050,
2053
+ "榛": 2051,
2054
+ "姑": 2052,
2055
+ "娅": 2053,
2056
+ "僧": 2054,
2057
+ "哇": 2055,
2058
+ "踏": 2056,
2059
+ "旦": 2057,
2060
+ "儶": 2058,
2061
+ "哲": 2059,
2062
+ "⁉": 2060,
2063
+ "袦": 2061,
2064
+ "播": 2062,
2065
+ "易": 2063,
2066
+ "抄": 2064,
2067
+ "升": 2065,
2068
+ "節": 2066,
2069
+ "伙": 2067,
2070
+ "勪": 2068,
2071
+ "ó": 2069,
2072
+ "勮": 2070,
2073
+ "傜": 2071,
2074
+ "辣": 2072,
2075
+ "搬": 2073,
2076
+ "継": 2074,
2077
+ "准": 2075,
2078
+ "円": 2076,
2079
+ "证": 2077,
2080
+ "嬢": 2078,
2081
+ "腐": 2079,
2082
+ "付": 2080,
2083
+ "薇": 2081,
2084
+ "眷": 2082,
2085
+ "畜": 2083,
2086
+ "爵": 2084,
2087
+ "便": 2085,
2088
+ "庨": 2086,
2089
+ "鍦": 2087,
2090
+ "梾": 2088,
2091
+ "脚": 2089,
2092
+ "途": 2090,
2093
+ "驰": 2091,
2094
+ "黎": 2092,
2095
+ "迪": 2093,
2096
+ "革": 2094,
2097
+ "慎": 2095,
2098
+ "染": 2096,
2099
+ "頃": 2097,
2100
+ "鹅": 2098,
2101
+ "賢": 2099,
2102
+ "插": 2100,
2103
+ "早": 2101,
2104
+ "鎭": 2102,
2105
+ "冨": 2103,
2106
+ "闆": 2104,
2107
+ "尋": 2105,
2108
+ "鵑": 2106,
2109
+ "箷": 2107,
2110
+ "控": 2108,
2111
+ "蛇": 2109,
2112
+ "吾": 2110,
2113
+ "溅": 2111,
2114
+ "没": 2112,
2115
+ "呆": 2113,
2116
+ "吀": 2114,
2117
+ "引": 2115,
2118
+ "厨": 2116,
2119
+ "傑": 2117,
2120
+ "豆": 2118,
2121
+ "ö": 2119,
2122
+ "锦": 2120,
2123
+ "袧": 2121,
2124
+ "又": 2122,
2125
+ "统": 2123,
2126
+ "紶": 2124,
2127
+ "嬩": 2125,
2128
+ "嶈": 2126,
2129
+ "展": 2127,
2130
+ "屬": 2128,
2131
+ "否": 2129,
2132
+ "烏": 2130,
2133
+ "♯": 2131,
2134
+ "и": 2132,
2135
+ "左": 2133,
2136
+ "鈥": 2134,
2137
+ "鎷": 2135,
2138
+ "敓": 2136,
2139
+ "藥": 2137,
2140
+ "┖": 2138,
2141
+ "姣": 2139,
2142
+ "拔": 2140,
2143
+ "娃": 2141,
2144
+ "般": 2142,
2145
+ "遗": 2143,
2146
+ "婕": 2144,
2147
+ "預": 2145,
2148
+ "折": 2146,
2149
+ "概": 2147,
2150
+ "差": 2148,
2151
+ "怕": 2149,
2152
+ "谁": 2150,
2153
+ "模": 2151,
2154
+ "蝶": 2152,
2155
+ "溫": 2153,
2156
+ "害": 2154,
2157
+ "椼": 2155,
2158
+ "夺": 2156,
2159
+ "潜": 2157,
2160
+ "蔵": 2158,
2161
+ "泡": 2159,
2162
+ "→": 2160,
2163
+ "|": 2161,
2164
+ "凍": 2162,
2165
+ "의": 2163,
2166
+ "覇": 2164,
2167
+ "涚": 2165,
2168
+ "难": 2166,
2169
+ "兆": 2167,
2170
+ "位": 2168,
2171
+ "頂": 2169,
2172
+ "陆": 2170,
2173
+ "雾": 2171,
2174
+ "肝": 2172,
2175
+ "抜": 2173,
2176
+ "辽": 2174,
2177
+ "ぴ": 2175,
2178
+ "岩": 2176,
2179
+ "紗": 2177,
2180
+ "墍": 2178,
2181
+ "珂": 2179,
2182
+ "湅": 2180,
2183
+ "獲": 2181,
2184
+ "樣": 2182,
2185
+ "乎": 2183,
2186
+ "鑸": 2184,
2187
+ "绑": 2185,
2188
+ "离": 2186,
2189
+ "悆": 2187,
2190
+ "呮": 2188,
2191
+ "悎": 2189,
2192
+ "诗": 2190,
2193
+ "疯": 2191,
2194
+ "摵": 2192,
2195
+ "祫": 2193,
2196
+ "緊": 2194,
2197
+ "際": 2195,
2198
+ " ": 2196,
2199
+ "耀": 2197,
2200
+ "澜": 2198,
2201
+ "溯": 2199,
2202
+ "視": 2200,
2203
+ "衍": 2201,
2204
+ "炶": 2202,
2205
+ "†": 2203,
2206
+ "岚": 2204,
2207
+ "鍋": 2205,
2208
+ "沢": 2206,
2209
+ "钱": 2207,
2210
+ "柉": 2208,
2211
+ "犻": 2209,
2212
+ "邁": 2210,
2213
+ "凶": 2211,
2214
+ "滑": 2212,
2215
+ "斩": 2213,
2216
+ "投": 2214,
2217
+ "=": 2215,
2218
+ "堀": 2216,
2219
+ "畅": 2217,
2220
+ "ヱ": 2218,
2221
+ "勉": 2219,
2222
+ "呴": 2220,
2223
+ "係": 2221,
2224
+ "纱": 2222,
2225
+ "咖": 2223,
2226
+ "障": 2224,
2227
+ "腿": 2225,
2228
+ "勭": 2226,
2229
+ "摸": 2227,
2230
+ "沉": 2228,
2231
+ "癒": 2229,
2232
+ "糞": 2230,
2233
+ "緣": 2231,
2234
+ "缇": 2232,
2235
+ "網": 2233,
2236
+ "务": 2234,
2237
+ "谈": 2235,
2238
+ "择": 2236,
2239
+ "弓": 2237,
2240
+ "绲": 2238,
2241
+ "札": 2239,
2242
+ "唄": 2240,
2243
+ "赐": 2241,
2244
+ "欴": 2242,
2245
+ "堬": 2243,
2246
+ "7": 2244,
2247
+ "Ζ": 2245,
2248
+ "鄰": 2246,
2249
+ "瑗": 2247,
2250
+ "椿": 2248,
2251
+ "鍘": 2249,
2252
+ "織": 2250,
2253
+ "默": 2251,
2254
+ "寶": 2252,
2255
+ "隨": 2253,
2256
+ "撿": 2254,
2257
+ "查": 2255,
2258
+ "试": 2256,
2259
+ "症": 2257,
2260
+ "归": 2258,
2261
+ "处": 2259,
2262
+ "哉": 2260,
2263
+ "収": 2261,
2264
+ "衝": 2262,
2265
+ "辈": 2263,
2266
+ "納": 2264,
2267
+ "背": 2265,
2268
+ "簮": 2266,
2269
+ "隠": 2267,
2270
+ "偣": 2268,
2271
+ "衰": 2269,
2272
+ "容": 2270,
2273
+ "端": 2271,
2274
+ "微": 2272,
2275
+ "枫": 2273,
2276
+ "悼": 2274,
2277
+ "仔": 2275,
2278
+ "╁": 2276,
2279
+ "呭": 2277,
2280
+ "昂": 2278,
2281
+ "胆": 2279,
2282
+ "旧": 2280,
2283
+ "忧": 2281,
2284
+ "研": 2282,
2285
+ "霧": 2283,
2286
+ "讲": 2284,
2287
+ "牛": 2285,
2288
+ "核": 2286,
2289
+ "μ": 2287,
2290
+ "茶": 2288,
2291
+ "乗": 2289,
2292
+ "*": 2290,
2293
+ "嶅": 2291,
2294
+ "丝": 2292,
2295
+ "捉": 2293,
2296
+ "棺": 2294,
2297
+ "穿": 2295,
2298
+ "丘": 2296,
2299
+ "毁": 2297,
2300
+ "宴": 2298,
2301
+ "奖": 2299,
2302
+ "整": 2300,
2303
+ "艇": 2301,
2304
+ "叛": 2302,
2305
+ "準": 2303,
2306
+ "窟": 2304,
2307
+ "段": 2305,
2308
+ "艾": 2306,
2309
+ "弥": 2307,
2310
+ "厄": 2308,
2311
+ "絕": 2309,
2312
+ "槸": 2310,
2313
+ "沒": 2311,
2314
+ "隱": 2312,
2315
+ "夥": 2313,
2316
+ "扭": 2314,
2317
+ "紫": 2315,
2318
+ "雏": 2316,
2319
+ "静": 2317,
2320
+ "痛": 2318,
2321
+ "晖": 2319,
2322
+ "軌": 2320,
2323
+ "符": 2321,
2324
+ "黙": 2322,
2325
+ "震": 2323,
2326
+ "拟": 2324,
2327
+ "⁄": 2325,
2328
+ "鑽": 2326,
2329
+ "囬": 2327,
2330
+ "凰": 2328,
2331
+ "淵": 2329,
2332
+ "侊": 2330,
2333
+ "奔": 2331,
2334
+ "捏": 2332,
2335
+ "佬": 2333,
2336
+ "报": 2334,
2337
+ "介": 2335,
2338
+ "呂": 2336,
2339
+ "祈": 2337,
2340
+ "敾": 2338,
2341
+ "袖": 2339,
2342
+ "塚": 2340,
2343
+ "败": 2341,
2344
+ "伽": 2342,
2345
+ "悬": 2343,
2346
+ "潰": 2344,
2347
+ "午": 2345,
2348
+ "嗎": 2346,
2349
+ "摆": 2347,
2350
+ "濡": 2348,
2351
+ "烤": 2349,
2352
+ "玛": 2350,
2353
+ "泊": 2351,
2354
+ "適": 2352,
2355
+ "爺": 2353,
2356
+ "适": 2354,
2357
+ "掌": 2355,
2358
+ "毎": 2356,
2359
+ "缩": 2357,
2360
+ "災": 2358,
2361
+ "с": 2359,
2362
+ "钢": 2360,
2363
+ "扎": 2361,
2364
+ "朱": 2362,
2365
+ "検": 2363,
2366
+ "蒂": 2364,
2367
+ "区": 2365,
2368
+ "潮": 2366,
2369
+ "伓": 2367,
2370
+ "壒": 2368,
2371
+ "斾": 2369,
2372
+ "健": 2370,
2373
+ "笺": 2371,
2374
+ "–": 2372,
2375
+ "蘇": 2373,
2376
+ "还": 2374,
2377
+ "鐙": 2375,
2378
+ "挨": 2376,
2379
+ "碍": 2377,
2380
+ "鍝": 2378,
2381
+ "舵": 2379,
2382
+ "︽": 2380,
2383
+ "瓢": 2381,
2384
+ "哃": 2382,
2385
+ "隶": 2383,
2386
+ "癖": 2384,
2387
+ "庶": 2385,
2388
+ "緒": 2386,
2389
+ "郷": 2387,
2390
+ "憑": 2388,
2391
+ "憧": 2389,
2392
+ "經": 2390,
2393
+ "峰": 2391,
2394
+ "撲": 2392,
2395
+ "鍊": 2393,
2396
+ "抗": 2394,
2397
+ "航": 2395,
2398
+ "媽": 2396,
2399
+ "嘆": 2397,
2400
+ "凯": 2398,
2401
+ "②": 2399,
2402
+ "构": 2400,
2403
+ "焼": 2401,
2404
+ "挙": 2402,
2405
+ "栖": 2403,
2406
+ "煶": 2404,
2407
+ "參": 2405,
2408
+ "届": 2406,
2409
+ "功": 2407,
2410
+ "興": 2408,
2411
+ "調": 2409,
2412
+ "培": 2410,
2413
+ "盡": 2411,
2414
+ "鹿": 2412,
2415
+ "悩": 2413,
2416
+ "翠": 2414,
2417
+ "裁": 2415,
2418
+ "辞": 2416,
2419
+ "卷": 2417,
2420
+ "犵": 2418,
2421
+ "鞠": 2419,
2422
+ "仆": 2420,
2423
+ "櫧": 2421,
2424
+ "애": 2422,
2425
+ "니": 2423,
2426
+ "제": 2424,
2427
+ "閒": 2425,
2428
+ "農": 2426,
2429
+ "渣": 2427,
2430
+ "戶": 2428,
2431
+ "統": 2429,
2432
+ "炲": 2430,
2433
+ "艂": 2431,
2434
+ "鍗": 2432,
2435
+ "‧": 2433,
2436
+ "浴": 2434,
2437
+ "泥": 2435,
2438
+ "绔": 2436,
2439
+ "飘": 2437,
2440
+ "绶": 2438,
2441
+ "聚": 2439,
2442
+ "实": 2440,
2443
+ "程": 2441,
2444
+ "庵": 2442,
2445
+ "張": 2443,
2446
+ "熟": 2444,
2447
+ "魅": 2445,
2448
+ "忛": 2446,
2449
+ "曠": 2447,
2450
+ "骄": 2448,
2451
+ "^": 2449,
2452
+ "槌": 2450,
2453
+ "祦": 2451,
2454
+ "‼": 2452,
2455
+ "坑": 2453,
2456
+ "宽": 2454,
2457
+ "笁": 2455,
2458
+ "厭": 2456,
2459
+ "怎": 2457,
2460
+ "設": 2458,
2461
+ "稻": 2459,
2462
+ "贸": 2460,
2463
+ "擁": 2461,
2464
+ "鎺": 2462,
2465
+ "貳": 2463,
2466
+ "屻": 2464,
2467
+ "邊": 2465,
2468
+ "粵": 2466,
2469
+ "況": 2467,
2470
+ "淋": 2468,
2471
+ "钟": 2469,
2472
+ "涂": 2470,
2473
+ "鸦": 2471,
2474
+ "驚": 2472,
2475
+ "豹": 2473,
2476
+ "#": 2474,
2477
+ "蟬": 2475,
2478
+ "燂": 2476,
2479
+ "偗": 2477,
2480
+ "嶃": 2478,
2481
+ "塑": 2479,
2482
+ "偦": 2480,
2483
+ "偝": 2481,
2484
+ "崱": 2482,
2485
+ "池": 2483,
2486
+ "勒": 2484,
2487
+ "©": 2485,
2488
+ "僚": 2486,
2489
+ "卞": 2487,
2490
+ "赖": 2488,
2491
+ "扉": 2489,
2492
+ "傲": 2490,
2493
+ "您": 2491,
2494
+ "煤": 2492,
2495
+ "及": 2493,
2496
+ "涗": 2494,
2497
+ "堝": 2495,
2498
+ "愁": 2496,
2499
+ "豬": 2497,
2500
+ "覺": 2498,
2501
+ "療": 2499,
2502
+ "憎": 2500,
2503
+ "鑑": 2501,
2504
+ "骚": 2502,
2505
+ "象": 2503,
2506
+ "楝": 2504,
2507
+ "卓": 2505,
2508
+ "擬": 2506,
2509
+ "睡": 2507,
2510
+ "蹲": 2508,
2511
+ "糟": 2509,
2512
+ "贰": 2510,
2513
+ "阔": 2511,
2514
+ "卖": 2512,
2515
+ "3": 2513,
2516
+ "贈": 2514,
2517
+ "戻": 2515,
2518
+ "飼": 2516,
2519
+ "駄": 2517,
2520
+ "畳": 2518,
2521
+ "脙": 2519,
2522
+ "类": 2520,
2523
+ "數": 2521,
2524
+ "即": 2522,
2525
+ "势": 2523,
2526
+ "濆": 2524,
2527
+ "枕": 2525,
2528
+ "滾": 2526,
2529
+ "凤": 2527,
2530
+ "纸": 2528,
2531
+ "阱": 2529,
2532
+ "须": 2530,
2533
+ "浮": 2531,
2534
+ "授": 2532,
2535
+ "侣": 2533,
2536
+ "请": 2534,
2537
+ "歄": 2535,
2538
+ "堢": 2536,
2539
+ "笉": 2537,
2540
+ "祓": 2538,
2541
+ "籠": 2539,
2542
+ "遙": 2540,
2543
+ "鸠": 2541,
2544
+ "楱": 2542,
2545
+ "壬": 2543,
2546
+ "隸": 2544,
2547
+ "恩": 2545,
2548
+ "哪": 2546,
2549
+ "亮": 2547,
2550
+ "霉": 2548,
2551
+ "畤": 2549,
2552
+ "爛": 2550,
2553
+ "葱": 2551,
2554
+ "诱": 2552,
2555
+ "懒": 2553,
2556
+ "讀": 2554,
2557
+ "脅": 2555,
2558
+ "V": 2556,
2559
+ "庞": 2557,
2560
+ "效": 2558,
2561
+ "鍕": 2559,
2562
+ "经": 2560,
2563
+ "留": 2561,
2564
+ "鐚": 2562,
2565
+ "隷": 2563,
2566
+ "坊": 2564,
2567
+ "芯": 2565,
2568
+ "蒐": 2566,
2569
+ "委": 2567,
2570
+ "어": 2568,
2571
+ "碎": 2569,
2572
+ "驗": 2570,
2573
+ "姏": 2571,
2574
+ "犳": 2572,
2575
+ "帇": 2573,
2576
+ "鍚": 2574,
2577
+ "噸": 2575,
2578
+ "娲": 2576,
2579
+ "嬮": 2577,
2580
+ "岄": 2578,
2581
+ "称": 2579,
2582
+ "捡": 2580,
2583
+ "Ⅶ": 2581,
2584
+ "嶇": 2582,
2585
+ "困": 2583,
2586
+ "鴨": 2584,
2587
+ "课": 2585,
2588
+ "窝": 2586,
2589
+ "陵": 2587,
2590
+ "玲": 2588,
2591
+ "操": 2589,
2592
+ "茜": 2590,
2593
+ "捨": 2591,
2594
+ "慢": 2592,
2595
+ "缚": 2593,
2596
+ "催": 2594,
2597
+ "歐": 2595,
2598
+ "栄": 2596,
2599
+ "套": 2597,
2600
+ "猩": 2598,
2601
+ "歳": 2599,
2602
+ "鍵": 2600,
2603
+ "砲": 2601,
2604
+ "己": 2602,
2605
+ "偤": 2603,
2606
+ "兴": 2604,
2607
+ "湘": 2605,
2608
+ "致": 2606,
2609
+ "╀": 2607,
2610
+ "í": 2608,
2611
+ "囪": 2609,
2612
+ "廣": 2610,
2613
+ "俄": 2611,
2614
+ "属": 2612,
2615
+ "莫": 2613,
2616
+ "笘": 2614,
2617
+ "验": 2615,
2618
+ "論": 2616,
2619
+ "譯": 2617,
2620
+ "愚": 2618,
2621
+ "郁": 2619,
2622
+ "炸": 2620,
2623
+ "商": 2621,
2624
+ "啲": 2622,
2625
+ "總": 2623,
2626
+ "瓧": 2624,
2627
+ "備": 2625,
2628
+ "贴": 2626,
2629
+ "磩": 2627,
2630
+ "笼": 2628,
2631
+ "袙": 2629,
2632
+ "ū": 2630,
2633
+ "楠": 2631,
2634
+ "柴": 2632,
2635
+ "崇": 2633,
2636
+ "些": 2634,
2637
+ "漠": 2635,
2638
+ "置": 2636,
2639
+ "骇": 2637,
2640
+ "簹": 2638,
2641
+ "冪": 2639,
2642
+ "‐": 2640,
2643
+ "傘": 2641,
2644
+ "跟": 2642,
2645
+ "偷": 2643,
2646
+ "诺": 2644,
2647
+ "曾": 2645,
2648
+ "楼": 2646,
2649
+ "碰": 2647,
2650
+ "洗": 2648,
2651
+ "户": 2649,
2652
+ "钘": 2650,
2653
+ "込": 2651,
2654
+ "顶": 2652,
2655
+ "楔": 2653,
2656
+ "融": 2654,
2657
+ "値": 2655,
2658
+ "殖": 2656,
2659
+ "憩": 2657,
2660
+ "е": 2658,
2661
+ "µ": 2659,
2662
+ "繪": 2660,
2663
+ "″": 2661,
2664
+ "判": 2662,
2665
+ "薔": 2663,
2666
+ "琉": 2664,
2667
+ "ㄧ": 2665,
2668
+ "杩": 2666,
2669
+ "闈": 2667,
2670
+ "刔": 2668,
2671
+ "距": 2669,
2672
+ "貝": 2670,
2673
+ "盃": 2671,
2674
+ "触": 2672,
2675
+ "玻": 2673,
2676
+ "孙": 2674,
2677
+ "柑": 2675,
2678
+ "煮": 2676,
2679
+ "薩": 2677,
2680
+ "殭": 2678,
2681
+ "捜": 2679,
2682
+ "瀞": 2680,
2683
+ "减": 2681,
2684
+ "鈽": 2682,
2685
+ "•": 2683,
2686
+ "桑": 2684,
2687
+ "穴": 2685,
2688
+ " ": 2686,
2689
+ "飙": 2687,
2690
+ "泪": 2688,
2691
+ "柔": 2689,
2692
+ "á": 2690,
2693
+ "隐": 2691,
2694
+ "$": 2692,
2695
+ "虽": 2693,
2696
+ "停": 2694,
2697
+ "麥": 2695,
2698
+ "测": 2696,
2699
+ "沌": 2697,
2700
+ "淘": 2698,
2701
+ "匙": 2699,
2702
+ "盛": 2700,
2703
+ "掛": 2701,
2704
+ "褰": 2702,
2705
+ "妄": 2703,
2706
+ "檚": 2704,
2707
+ "词": 2705,
2708
+ "菲": 2706,
2709
+ "咆": 2707,
2710
+ "伎": 2708,
2711
+ "尻": 2709,
2712
+ "喧": 2710,
2713
+ "剃": 2711,
2714
+ "夛": 2712,
2715
+ "囩": 2713,
2716
+ "劫": 2714,
2717
+ "児": 2715,
2718
+ "␣": 2716,
2719
+ "均": 2717,
2720
+ "?": 2718,
2721
+ "啡": 2719,
2722
+ "隻": 2720,
2723
+ "편": 2721,
2724
+ "拷": 2722,
2725
+ "妳": 2723,
2726
+ "昼": 2724,
2727
+ "绿": 2725,
2728
+ "链": 2726,
2729
+ "湼": 2727,
2730
+ "¿": 2728,
2731
+ "谱": 2729,
2732
+ "忓": 2730,
2733
+ "屼": 2731,
2734
+ "嚜": 2732,
2735
+ "暒": 2733,
2736
+ "瑪": 2734,
2737
+ "偆": 2735,
2738
+ "裤": 2736,
2739
+ "鹤": 2737,
2740
+ "蜻": 2738,
2741
+ "鸡": 2739,
2742
+ "附": 2740,
2743
+ "肢": 2741,
2744
+ "琥": 2742,
2745
+ "珀": 2743,
2746
+ "烙": 2744,
2747
+ "婦": 2745,
2748
+ "继": 2746,
2749
+ "卵": 2747,
2750
+ "薄": 2748,
2751
+ "几": 2749,
2752
+ "繰": 2750,
2753
+ "扑": 2751,
2754
+ "尤": 2752,
2755
+ "履": 2753,
2756
+ "한": 2754,
2757
+ "완": 2755,
2758
+ "逛": 2756,
2759
+ "慄": 2757,
2760
+ "胸": 2758,
2761
+ "穗": 2759,
2762
+ "环": 2760,
2763
+ "姝": 2761,
2764
+ "寰": 2762,
2765
+ "庣": 2763,
2766
+ "绱": 2764,
2767
+ "莎": 2765,
2768
+ "训": 2766,
2769
+ "州": 2767,
2770
+ "诡": 2768,
2771
+ "瀬": 2769,
2772
+ "洸": 2770,
2773
+ "哮": 2771,
2774
+ "讚": 2772,
2775
+ "紞": 2773,
2776
+ "К": 2774,
2777
+ "敱": 2775,
2778
+ "丶": 2776,
2779
+ "惠": 2777,
2780
+ "賀": 2778,
2781
+ "綺": 2779,
2782
+ "剋": 2780,
2783
+ "溺": 2781,
2784
+ "兩": 2782,
2785
+ "側": 2783,
2786
+ "鎵": 2784,
2787
+ "伯": 2785,
2788
+ "读": 2786,
2789
+ "姜": 2787,
2790
+ "导": 2788,
2791
+ "斁": 2789,
2792
+ "羞": 2790,
2793
+ "倛": 2791,
2794
+ "務": 2792,
2795
+ "蕉": 2793,
2796
+ "专": 2794,
2797
+ "缥": 2795,
2798
+ "缈": 2796,
2799
+ "随": 2797,
2800
+ "献": 2798,
2801
+ "蠅": 2799,
2802
+ "茸": 2800,
2803
+ "処": 2801,
2804
+ "囚": 2802,
2805
+ "椂": 2803,
2806
+ "逼": 2804,
2807
+ "縁": 2805,
2808
+ "拐": 2806,
2809
+ "歂": 2807,
2810
+ "漆": 2808,
2811
+ "幡": 2809,
2812
+ "桌": 2810,
2813
+ "曇": 2811,
2814
+ "須": 2812,
2815
+ "証": 2813,
2816
+ "谨": 2814,
2817
+ "仓": 2815,
2818
+ "ヂ": 2816,
2819
+ "р": 2817,
2820
+ "я": 2818,
2821
+ "з": 2819,
2822
+ "奉": 2820,
2823
+ "더": 2821,
2824
+ "결": 2822,
2825
+ "援": 2823,
2826
+ "弒": 2824,
2827
+ "奧": 2825,
2828
+ "努": 2826,
2829
+ "椴": 2827,
2830
+ "傚": 2828,
2831
+ "捣": 2829,
2832
+ "裝": 2830,
2833
+ "绮": 2831,
2834
+ "綻": 2832,
2835
+ "彷": 2833,
2836
+ "蛉": 2834,
2837
+ "尘": 2835,
2838
+ "壮": 2836,
2839
+ "旗": 2837,
2840
+ "質": 2838,
2841
+ "査": 2839,
2842
+ "萬": 2840,
2843
+ "铏": 2841,
2844
+ "鉱": 2842,
2845
+ "①": 2843,
2846
+ "鈴": 2844,
2847
+ "妇": 2845,
2848
+ "喂": 2846,
2849
+ "葵": 2847,
2850
+ "魍": 2848,
2851
+ "鷲": 2849,
2852
+ "津": 2850,
2853
+ "ㆍ": 2851,
2854
+ "ä": 2852,
2855
+ "聆": 2853,
2856
+ "隔": 2854,
2857
+ "국": 2855,
2858
+ "빙": 2856,
2859
+ "扯": 2857,
2860
+ "娣": 2858,
2861
+ "歷": 2859,
2862
+ "踊": 2860,
2863
+ "產": 2861,
2864
+ "锯": 2862,
2865
+ "À": 2863,
2866
+ "託": 2864,
2867
+ "績": 2865,
2868
+ "康": 2866,
2869
+ "鍣": 2867,
2870
+ "噗": 2868,
2871
+ "撒": 2869,
2872
+ "嗜": 2870,
2873
+ "齊": 2871,
2874
+ "避": 2872,
2875
+ "娿": 2873,
2876
+ "聯": 2874,
2877
+ "喊": 2875,
2878
+ "答": 2876,
2879
+ "此": 2877,
2880
+ "却": 2878,
2881
+ "溂": 2879,
2882
+ "垁": 2880,
2883
+ "轻": 2881,
2884
+ "麵": 2882,
2885
+ "饶": 2883,
2886
+ "喪": 2884,
2887
+ "仏": 2885,
2888
+ "汚": 2886,
2889
+ "蜥": 2887,
2890
+ "蜴": 2888,
2891
+ "棰": 2889,
2892
+ "ㄩ": 2890,
2893
+ "移": 2891,
2894
+ "懶": 2892,
2895
+ "廏": 2893,
2896
+ "許": 2894,
2897
+ "磪": 2895,
2898
+ "蛮": 2896,
2899
+ "婢": 2897,
2900
+ "湌": 2898,
2901
+ "矒": 2899,
2902
+ "檪": 2900,
2903
+ "隇": 2901,
2904
+ "塈": 2902,
2905
+ "遣": 2903,
2906
+ "D": 2904,
2907
+ "T": 2905,
2908
+ "、": 2906,
2909
+ "洁": 2907,
2910
+ "碼": 2908,
2911
+ "识": 2909,
2912
+ "♥": 2910,
2913
+ "澄": 2911,
2914
+ "涅": 2912,
2915
+ "颜": 2913,
2916
+ "旂": 2914,
2917
+ "簨": 2915,
2918
+ "拜": 2916,
2919
+ "簡": 2917,
2920
+ "懡": 2918,
2921
+ "檺": 2919,
2922
+ "寸": 2920,
2923
+ "绌": 2921,
2924
+ "屽": 2922,
2925
+ "粖": 2923,
2926
+ "栦": 2924,
2927
+ "該": 2925,
2928
+ "換": 2926,
2929
+ "膽": 2927,
2930
+ "黨": 2928,
2931
+ "舊": 2929,
2932
+ "卻": 2930,
2933
+ "妃": 2931,
2934
+ "懸": 2932,
2935
+ "識": 2933,
2936
+ "谋": 2934,
2937
+ "柳": 2935,
2938
+ "按": 2936,
2939
+ "挿": 2937,
2940
+ "躍": 2938,
2941
+ "拯": 2939,
2942
+ "鋸": 2940,
2943
+ "删": 2941,
2944
+ "欼": 2942,
2945
+ "菊": 2943,
2946
+ "魎": 2944,
2947
+ "鎖": 2945,
2948
+ "澗": 2946,
2949
+ "杖": 2947,
2950
+ "閮": 2948,
2951
+ "鳳": 2949,
2952
+ "顧": 2950,
2953
+ "樻": 2951,
2954
+ "猴": 2952,
2955
+ "濠": 2953,
2956
+ "阻": 2954,
2957
+ "輔": 2955,
2958
+ "憜": 2956,
2959
+ "兓": 2957,
2960
+ "戈": 2958,
2961
+ "雖": 2959,
2962
+ "��": 2960,
2963
+ "优": 2961,
2964
+ "墝": 2962,
2965
+ "丟": 2963,
2966
+ "抽": 2964,
2967
+ "尟": 2965,
2968
+ "緑": 2966,
2969
+ "镖": 2967,
2970
+ "桂": 2968,
2971
+ "堛": 2969,
2972
+ "墜": 2970,
2973
+ "訣": 2971,
2974
+ "辑": 2972,
2975
+ "讓": 2973,
2976
+ "腕": 2974,
2977
+ "拖": 2975,
2978
+ "偊": 2976,
2979
+ "湥": 2977,
2980
+ "ⅵ": 2978,
2981
+ "峂": 2979,
2982
+ "胄": 2980,
2983
+ "哛": 2981,
2984
+ "俗": 2982,
2985
+ "亭": 2983,
2986
+ "婭": 2984,
2987
+ "壱": 2985,
2988
+ "膏": 2986,
2989
+ "å": 2987,
2990
+ "曙": 2988,
2991
+ "巌": 2989,
2992
+ "姿": 2990,
2993
+ "雛": 2991,
2994
+ "凛": 2992,
2995
+ "ō": 2993,
2996
+ "遲": 2994,
2997
+ "渡": 2995,
2998
+ "鍑": 2996,
2999
+ "忥": 2997,
3000
+ "鏂": 2998,
3001
+ "橀": 2999,
3002
+ "㈠": 3000,
3003
+ "′": 3001,
3004
+ "或": 3002,
3005
+ "媇": 3003,
3006
+ "央": 3004,
3007
+ "鞋": 3005,
3008
+ "●": 3006,
3009
+ "拶": 3007,
3010
+ "憬": 3008,
3011
+ "访": 3009,
3012
+ "辭": 3010,
3013
+ "氱": 3011,
3014
+ "賞": 3012,
3015
+ "鏽": 3013,
3016
+ "償": 3014,
3017
+ "贾": 3015,
3018
+ "埍": 3016,
3019
+ "棬": 3017,
3020
+ "毚": 3018,
3021
+ "掑": 3019,
3022
+ "悕": 3020,
3023
+ "誇": 3021,
3024
+ "敷": 3022,
3025
+ "熾": 3023,
3026
+ "暖": 3024,
3027
+ "楓": 3025,
3028
+ "環": 3026,
3029
+ "憾": 3027,
3030
+ "买": 3028,
3031
+ "论": 3029,
3032
+ "闂": 3030,
3033
+ "腑": 3031,
3034
+ "灞": 3032,
3035
+ "墨": 3033,
3036
+ "暑": 3034,
3037
+ "诅": 3035,
3038
+ "鐪": 3036,
3039
+ "儔": 3037,
3040
+ "堡": 3038,
3041
+ "鐒": 3039,
3042
+ "繚": 3040,
3043
+ "棋": 3041,
3044
+ "眈": 3042,
3045
+ "柱": 3043,
3046
+ "鎲": 3044,
3047
+ "ф": 3045,
3048
+ "買": 3046,
3049
+ "悔": 3047,
3050
+ "哭": 3048,
3051
+ "帕": 3049,
3052
+ "乘": 3050,
3053
+ "蓋": 3051,
3054
+ "胶": 3052,
3055
+ "週": 3053,
3056
+ "貼": 3054,
3057
+ "牲": 3055,
3058
+ "阪": 3056,
3059
+ "净": 3057,
3060
+ "纷": 3058,
3061
+ "贤": 3059,
3062
+ "熼": 3060,
3063
+ "宸": 3061,
3064
+ "藉": 3062,
3065
+ "鏁": 3063,
3066
+ "句": 3064,
3067
+ "醜": 3065,
3068
+ "逝": 3066,
3069
+ "众": 3067,
3070
+ "絲": 3068,
3071
+ "调": 3069,
3072
+ "咕": 3070,
3073
+ "维": 3071,
3074
+ "訊": 3072,
3075
+ "质": 3073,
3076
+ "戴": 3074,
3077
+ "闯": 3075,
3078
+ "馁": 3076,
3079
+ "产": 3077,
3080
+ "滈": 3078,
3081
+ "祽": 3079,
3082
+ "咺": 3080,
3083
+ "紳": 3081,
3084
+ "册": 3082,
3085
+ "虐": 3083,
3086
+ "廳": 3084,
3087
+ "呢": 3085,
3088
+ "兇": 3086,
3089
+ "舌": 3087,
3090
+ "吠": 3088,
3091
+ "à": 3089,
3092
+ "垂": 3090,
3093
+ "鐣": 3091,
3094
+ "垬": 3092,
3095
+ "湪": 3093,
3096
+ "ぉ": 3094,
3097
+ "蹇": 3095,
3098
+ "請": 3096,
3099
+ "材": 3097,
3100
+ "帮": 3098,
3101
+ "建": 3099,
3102
+ "層": 3100,
3103
+ "唇": 3101,
3104
+ "矇": 3102,
3105
+ "仺": 3103,
3106
+ "汗": 3104,
3107
+ "互": 3105,
3108
+ "靦": 3106,
3109
+ "腆": 3107,
3110
+ "凱": 3108,
3111
+ "頼": 3109,
3112
+ "炭": 3110,
3113
+ "誠": 3111,
3114
+ "竞": 3112,
3115
+ "窮": 3113,
3116
+ "灉": 3114,
3117
+ "匹": 3115,
3118
+ "O": 3116,
3119
+ "蛙": 3117,
3120
+ "欒": 3118,
3121
+ "糸": 3119,
3122
+ "恵": 3120,
3123
+ "傻": 3121,
3124
+ "岐": 3122,
3125
+ "痕": 3123,
3126
+ "崛": 3124,
3127
+ "蟻": 3125,
3128
+ "絢": 3126,
3129
+ "∀": 3127,
3130
+ "囝": 3128,
3131
+ "暮": 3129,
3132
+ "夊": 3130,
3133
+ "梯": 3131,
3134
+ "è": 3132,
3135
+ "皵": 3133,
3136
+ "﹀": 3134,
3137
+ "浗": 3135,
3138
+ "绡": 3136,
3139
+ "誼": 3137,
3140
+ "栗": 3138,
3141
+ "张": 3139,
3142
+ "囊": 3140,
3143
+ "固": 3141,
3144
+ "寂": 3142,
3145
+ "邻": 3143,
3146
+ "诀": 3144,
3147
+ "块": 3145,
3148
+ "嗚": 3146,
3149
+ "揺": 3147,
3150
+ "綾": 3148,
3151
+ "脸": 3149,
3152
+ "盒": 3150,
3153
+ "掘": 3151,
3154
+ "洓": 3152,
3155
+ "箣": 3153,
3156
+ "迈": 3154,
3157
+ "栧": 3155,
3158
+ "僵": 3156,
3159
+ "③": 3157,
3160
+ "蝎": 3158,
3161
+ "4": 3159,
3162
+ "澧": 3160,
3163
+ "Ⅹ": 3161,
3164
+ "嘩": 3162,
3165
+ "蒲": 3163,
3166
+ "昔": 3164,
3167
+ "F": 3165,
3168
+ "副": 3166,
3169
+ "错": 3167,
3170
+ "胁": 3168,
3171
+ "备": 3169,
3172
+ "雑": 3170,
3173
+ "誉": 3171,
3174
+ "昴": 3172,
3175
+ "芝": 3173,
3176
+ "圖": 3174,
3177
+ "擾": 3175,
3178
+ "도": 3176,
3179
+ "撮": 3177,
3180
+ "寝": 3178,
3181
+ "脫": 3179,
3182
+ "畬": 3180,
3183
+ "祕": 3181,
3184
+ "丑": 3182,
3185
+ "﹁": 3183,
3186
+ "摑": 3184,
3187
+ "佷": 3185,
3188
+ "嘴": 3186,
3189
+ "嗶": 3187,
3190
+ "踢": 3188,
3191
+ "蠢": 3189,
3192
+ "恼": 3190,
3193
+ "℃": 3191,
3194
+ "尯": 3192,
3195
+ "瑟": 3193,
3196
+ "峡": 3194,
3197
+ "剪": 3195,
3198
+ "娇": 3196,
3199
+ "股": 3197,
3200
+ "薫": 3198,
3201
+ "咰": 3199,
3202
+ "赏": 3200,
3203
+ "侍": 3201,
3204
+ "冈": 3202,
3205
+ "嚫": 3203,
3206
+ "贩": 3204,
3207
+ "剛": 3205,
3208
+ "蕩": 3206,
3209
+ "巡": 3207,
3210
+ "昌": 3208,
3211
+ "嬌": 3209,
3212
+ "瘽": 3210,
3213
+ "墿": 3211,
3214
+ "儖": 3212,
3215
+ "掓": 3213,
3216
+ "槬": 3214,
3217
+ "忠": 3215,
3218
+ "欠": 3216,
3219
+ "暇": 3217,
3220
+ "産": 3218,
3221
+ "鮮": 3219,
3222
+ "覆": 3220,
3223
+ "寲": 3221,
3224
+ "診": 3222,
3225
+ "鐘": 3223,
3226
+ "愤": 3224,
3227
+ "惰": 3225,
3228
+ "亀": 3226,
3229
+ "刘": 3227,
3230
+ "0": 3228,
3231
+ "铳": 3229,
3232
+ "邸": 3230,
3233
+ "犧": 3231,
3234
+ "湴": 3232,
3235
+ "赌": 3233,
3236
+ "沖": 3234,
3237
+ "両": 3235,
3238
+ "愉": 3236,
3239
+ "※": 3237,
3240
+ "惱": 3238,
3241
+ "滴": 3239,
3242
+ "呯": 3240,
3243
+ "楦": 3241,
3244
+ "鸿": 3242,
3245
+ "垫": 3243,
3246
+ "渤": 3244,
3247
+ "貫": 3245,
3248
+ "俱": 3246,
3249
+ "薰": 3247,
3250
+ "毀": 3248,
3251
+ "笂": 3249,
3252
+ "仯": 3250,
3253
+ "岸": 3251,
3254
+ "寵": 3252,
3255
+ "涘": 3253,
3256
+ "嗐": 3254,
3257
+ "鈾": 3255,
3258
+ "猐": 3256,
3259
+ "楃": 3257,
3260
+ "紧": 3258,
3261
+ "瓜": 3259,
3262
+ "羡": 3260,
3263
+ "紹": 3261,
3264
+ "娉": 3262,
3265
+ "拂": 3263,
3266
+ "佛": 3264,
3267
+ "液": 3265,
3268
+ "頑": 3266,
3269
+ "稀": 3267,
3270
+ "晓": 3268,
3271
+ "濞": 3269,
3272
+ "濊": 3270,
3273
+ "钃": 3271,
3274
+ "f": 3272,
3275
+ "淽": 3273,
3276
+ "â": 3274,
3277
+ "挖": 3275,
3278
+ "欺": 3276,
3279
+ "帶": 3277,
3280
+ "禦": 3278,
3281
+ "睛": 3279,
3282
+ "掕": 3280,
3283
+ "氭": 3281,
3284
+ "濅": 3282,
3285
+ "挡": 3283,
3286
+ "淇": 3284,
3287
+ "斻": 3285,
3288
+ "昇": 3286,
3289
+ "润": 3287,
3290
+ "仰": 3288,
3291
+ "閉": 3289,
3292
+ "煙": 3290,
3293
+ "蒸": 3291,
3294
+ "囨": 3292,
3295
+ "洲": 3293,
3296
+ "頓": 3294,
3297
+ "窓": 3295,
3298
+ "怠": 3296,
3299
+ "祥": 3297,
3300
+ "荻": 3298,
3301
+ "坪": 3299,
3302
+ "痴": 3300,
3303
+ "擇": 3301,
3304
+ "장": 3302,
3305
+ "판": 3303,
3306
+ "绽": 3304,
3307
+ "皆": 3305,
3308
+ "掟": 3306,
3309
+ "恨": 3307,
3310
+ "壇": 3308,
3311
+ "硬": 3309,
3312
+ "递": 3310,
3313
+ "ú": 3311,
3314
+ "颁": 3312,
3315
+ "綋": 3313,
3316
+ "ч": 3314,
3317
+ "庝": 3315,
3318
+ "箟": 3316,
3319
+ "璇": 3317,
3320
+ "嬭": 3318,
3321
+ "伸": 3319,
3322
+ "駅": 3320,
3323
+ "炴": 3321,
3324
+ "佳": 3322,
3325
+ "陛": 3323,
3326
+ "彲": 3324,
3327
+ "読": 3325,
3328
+ "综": 3326,
3329
+ "幇": 3327,
3330
+ "帥": 3328,
3331
+ "堤": 3329,
3332
+ "斷": 3330,
3333
+ "柚": 3331,
3334
+ "割": 3332,
3335
+ "绂": 3333,
3336
+ "戍": 3334,
3337
+ "燎": 3335,
3338
+ "構": 3336,
3339
+ "慧": 3337,
3340
+ "愬": 3338,
3341
+ "倍": 3339,
3342
+ "扇": 3340,
3343
+ "骷": 3341,
3344
+ "g": 3342,
3345
+ "崉": 3343,
3346
+ "槍": 3344,
3347
+ "芸": 3345,
3348
+ "蒙": 3346,
3349
+ "鑱": 3347,
3350
+ "余": 3348,
3351
+ "嚎": 3349,
3352
+ "綍": 3350,
3353
+ "靴": 3351,
3354
+ "滆": 3352,
3355
+ "潐": 3353,
3356
+ "螃": 3354,
3357
+ "咃": 3355,
3358
+ "窻": 3356,
3359
+ "鍨": 3357,
3360
+ "溇": 3358,
3361
+ "檽": 3359,
3362
+ "爪": 3360,
3363
+ "细": 3361,
3364
+ "吐": 3362,
3365
+ "W": 3363,
3366
+ "Ⅷ": 3364,
3367
+ "督": 3365,
3368
+ "糫": 3366,
3369
+ "迦": 3367,
3370
+ "ē": 3368,
3371
+ "绅": 3369,
3372
+ "轟": 3370,
3373
+ "姮": 3371,
3374
+ "醉": 3372,
3375
+ "偅": 3373,
3376
+ "顾": 3374,
3377
+ "澤": 3375,
3378
+ "応": 3376,
3379
+ "髮": 3377,
3380
+ "逸": 3378,
3381
+ "欽": 3379,
3382
+ "蘑": 3380,
3383
+ "啪": 3381,
3384
+ "夌": 3382,
3385
+ "臋": 3383,
3386
+ "缺": 3384,
3387
+ "荤": 3385,
3388
+ "粠": 3386,
3389
+ "洿": 3387,
3390
+ "嶄": 3388,
3391
+ "掔": 3389,
3392
+ "瑕": 3390,
3393
+ "鏋": 3391,
3394
+ "纏": 3392,
3395
+ "毫": 3393,
3396
+ "姳": 3394,
3397
+ "淑": 3395,
3398
+ "遥": 3396,
3399
+ "煎": 3397,
3400
+ "匣": 3398,
3401
+ "紡": 3399,
3402
+ "废": 3400,
3403
+ "蹄": 3401,
3404
+ "垃": 3402,
3405
+ "圾": 3403,
3406
+ "閿": 3404,
3407
+ "湡": 3405,
3408
+ "愪": 3406,
3409
+ "刹": 3407,
3410
+ "應": 3408,
3411
+ "鬧": 3409,
3412
+ "謊": 3410,
3413
+ "慶": 3411,
3414
+ "漢": 3412,
3415
+ "焉": 3413,
3416
+ "钓": 3414,
3417
+ "悗": 3415,
3418
+ "髅": 3416,
3419
+ "龟": 3417,
3420
+ "伀": 3418,
3421
+ "従": 3419,
3422
+ "泰": 3420,
3423
+ "岡": 3421,
3424
+ "暂": 3422,
3425
+ "李": 3423,
3426
+ "斧": 3424,
3427
+ "盷": 3425,
3428
+ "皯": 3426,
3429
+ "贡": 3427,
3430
+ "鎿": 3428,
3431
+ "簜": 3429,
3432
+ "Ⅺ": 3430,
3433
+ "滝": 3431,
3434
+ "鯉": 3432,
3435
+ "狸": 3433,
3436
+ "噢": 3434,
3437
+ "澡": 3435,
3438
+ "弗": 3436,
3439
+ "疆": 3437,
3440
+ "岳": 3438,
3441
+ "轩": 3439,
3442
+ "아": 3440,
3443
+ "堅": 3441,
3444
+ "宏": 3442,
3445
+ "綘": 3443,
3446
+ "椤": 3444,
3447
+ "娑": 3445,
3448
+ "谩": 3446,
3449
+ "檻": 3447,
3450
+ "缤": 3448,
3451
+ "鐞": 3449,
3452
+ "埌": 3450,
3453
+ "垮": 3451,
3454
+ "潃": 3452,
3455
+ "弻": 3453,
3456
+ "鎸": 3454,
3457
+ "洖": 3455,
3458
+ "娆": 3456,
3459
+ "姘": 3457,
3460
+ "票": 3458,
3461
+ "倞": 3459,
3462
+ "忎": 3460,
3463
+ "枃": 3461,
3464
+ "氦": 3462,
3465
+ "嬰": 3463,
3466
+ "抢": 3464,
3467
+ "綠": 3465,
3468
+ "縫": 3466,
3469
+ "仱": 3467,
3470
+ "戙": 3468,
3471
+ "臂": 3469,
3472
+ "悶": 3470,
3473
+ "瑛": 3471,
3474
+ "赘": 3472,
3475
+ "婿": 3473,
3476
+ "輕": 3474,
3477
+ "抚": 3475,
3478
+ "渴": 3476,
3479
+ "娶": 3477,
3480
+ "瑾": 3478,
3481
+ "樋": 3479,
3482
+ "晩": 3480,
3483
+ "簯": 3481,
3484
+ "戜": 3482,
3485
+ "徨": 3483,
3486
+ "贺": 3484,
3487
+ "G": 3485,
3488
+ "階": 3486,
3489
+ "凸": 3487,
3490
+ "廟": 3488,
3491
+ "暉": 3489,
3492
+ "傭": 3490,
3493
+ "爭": 3491,
3494
+ "稚": 3492,
3495
+ "沼": 3493,
3496
+ "鄉": 3494,
3497
+ "翰": 3495,
3498
+ "善": 3496,
3499
+ "夠": 3497,
3500
+ "泧": 3498,
3501
+ "瓨": 3499,
3502
+ "循": 3500,
3503
+ "歴": 3501,
3504
+ "瑞": 3502,
3505
+ "郊": 3503,
3506
+ "采": 3504,
3507
+ "紐": 3505,
3508
+ "権": 3506,
3509
+ "罚": 3507,
3510
+ "麦": 3508,
3511
+ "貨": 3509,
3512
+ "狭": 3510,
3513
+ "晃": 3511,
3514
+ "墅": 3512,
3515
+ "袥": 3513,
3516
+ "Φ": 3514,
3517
+ "裙": 3515,
3518
+ "鑷": 3516,
3519
+ "矛": 3517,
3520
+ "菇": 3518,
3521
+ "顿": 3519,
3522
+ "喷": 3520,
3523
+ "緱": 3521,
3524
+ "涎": 3522,
3525
+ "闹": 3523,
3526
+ "趣": 3524,
3527
+ "э": 3525,
3528
+ "鐤": 3526,
3529
+ "绾": 3527,
3530
+ "篯": 3528,
3531
+ "掍": 3529,
3532
+ "╂": 3530,
3533
+ "濮": 3531,
3534
+ "採": 3532,
3535
+ "儀": 3533,
3536
+ "廷": 3534,
3537
+ "伄": 3535,
3538
+ "畾": 3536,
3539
+ "費": 3537,
3540
+ "繋": 3538,
3541
+ "ㄣ": 3539,
3542
+ "賣": 3540,
3543
+ "暟": 3541,
3544
+ "剎": 3542,
3545
+ "檸": 3543,
3546
+ "繩": 3544,
3547
+ "嫄": 3545,
3548
+ "鈬": 3546,
3549
+ "憡": 3547,
3550
+ "瘦": 3548,
3551
+ "烟": 3549,
3552
+ "沐": 3550,
3553
+ "乡": 3551,
3554
+ "狀": 3552,
3555
+ "蹂": 3553,
3556
+ "悓": 3554,
3557
+ "诉": 3555,
3558
+ "府": 3556,
3559
+ "碗": 3557,
3560
+ "檼": 3558,
3561
+ "荣": 3559,
3562
+ "啟": 3560,
3563
+ "觸": 3561,
3564
+ "娓": 3562,
3565
+ "侯": 3563,
3566
+ "评": 3564,
3567
+ "譜": 3565,
3568
+ "♀": 3566,
3569
+ "歀": 3567,
3570
+ "堥": 3568,
3571
+ "鑹": 3569,
3572
+ "ω": 3570,
3573
+ "馭": 3571,
3574
+ "駕": 3572,
3575
+ "傅": 3573,
3576
+ "繘": 3574,
3577
+ "掋": 3575,
3578
+ "偓": 3576,
3579
+ "谣": 3577,
3580
+ "翁": 3578,
3581
+ "摊": 3579,
3582
+ "獅": 3580,
3583
+ "埂": 3581,
3584
+ "惢": 3582,
3585
+ "鑾": 3583,
3586
+ "楹": 3584,
3587
+ "繼": 3585,
3588
+ "廚": 3586,
3589
+ "伞": 3587,
3590
+ "亰": 3588,
3591
+ "侶": 3589,
3592
+ "锈": 3590,
3593
+ "劧": 3591,
3594
+ "禍": 3592,
3595
+ "¢": 3593,
3596
+ "弸": 3594,
3597
+ "苺": 3595,
3598
+ "畢": 3596,
3599
+ "鐓": 3597,
3600
+ "岭": 3598,
3601
+ "嫾": 3599,
3602
+ "喔": 3600,
3603
+ "S": 3601,
3604
+ "゛": 3602,
3605
+ "描": 3603,
3606
+ "歯": 3604,
3607
+ "偍": 3605,
3608
+ "偨": 3606,
3609
+ "Ⅸ": 3607,
3610
+ "奮": 3608,
3611
+ "遂": 3609,
3612
+ "*": 3610,
3613
+ "帅": 3611,
3614
+ "‥": 3612,
3615
+ "嗛": 3613,
3616
+ "肆": 3614,
3617
+ "谕": 3615,
3618
+ "袛": 3616,
3619
+ "袗": 3617,
3620
+ "n": 3618,
3621
+ "懺": 3619,
3622
+ "溜": 3620,
3623
+ "複": 3621,
3624
+ "극": 3622,
3625
+ "대": 3623,
3626
+ "芹": 3624,
3627
+ "傾": 3625,
3628
+ "泛": 3626,
3629
+ "态": 3627,
3630
+ "呀": 3628,
3631
+ "顯": 3629,
3632
+ "岀": 3630,
3633
+ "鑻": 3631,
3634
+ "璧": 3632,
3635
+ "賜": 3633,
3636
+ "尗": 3634,
3637
+ "箙": 3635,
3638
+ "榉": 3636,
3639
+ "帹": 3637,
3640
+ "嗙": 3638,
3641
+ "〃": 3639,
3642
+ "柜": 3640,
3643
+ "鼴": 3641,
3644
+ "栥": 3642,
3645
+ "禪": 3643,
3646
+ "雜": 3644,
3647
+ "櫃": 3645,
3648
+ "檯": 3646,
3649
+ "蹺": 3647,
3650
+ "桿": 3648,
3651
+ "倠": 3649,
3652
+ "姓": 3650,
3653
+ "吵": 3651,
3654
+ "慕": 3652,
3655
+ "箭": 3653,
3656
+ "抓": 3654,
3657
+ "吶": 3655,
3658
+ "霜": 3656,
3659
+ "滩": 3657,
3660
+ "酬": 3658,
3661
+ "躪": 3659,
3662
+ "舔": 3660,
3663
+ "棉": 3661,
3664
+ "閰": 3662,
3665
+ "蔚": 3663,
3666
+ "脡": 3664,
3667
+ "珮": 3665,
3668
+ "呐": 3666,
3669
+ "傢": 3667,
3670
+ "资": 3668,
3671
+ "墠": 3669,
3672
+ "穆": 3670,
3673
+ "凹": 3671,
3674
+ "姗": 3672,
3675
+ "儹": 3673,
3676
+ "徘": 3674,
3677
+ "徊": 3675,
3678
+ "懷": 3676,
3679
+ "另": 3677,
3680
+ "弃": 3678,
3681
+ "欰": 3679,
3682
+ "崈": 3680,
3683
+ "僱": 3681,
3684
+ "押": 3682,
3685
+ "枊": 3683,
3686
+ "牸": 3684,
3687
+ "搐": 3685,
3688
+ "碨": 3686,
3689
+ "竺": 3687,
3690
+ "罰": 3688,
3691
+ "勢": 3689,
3692
+ "粌": 3690,
3693
+ "剦": 3691,
3694
+ "籟": 3692,
3695
+ "睙": 3693,
3696
+ "浂": 3694,
3697
+ "彙": 3695,
3698
+ "愈": 3696,
3699
+ "證": 3697,
3700
+ "θ": 3698,
3701
+ "堣": 3699,
3702
+ "敳": 3700,
3703
+ "窔": 3701,
3704
+ "垉": 3702,
3705
+ "囷": 3703,
3706
+ "厤": 3704,
3707
+ "媛": 3705,
3708
+ "牠": 3706,
3709
+ "揚": 3707,
3710
+ "汁": 3708,
3711
+ "閸": 3709,
3712
+ "瓑": 3710,
3713
+ "皽": 3711,
3714
+ "剚": 3712,
3715
+ "搧": 3713,
3716
+ "憺": 3714,
3717
+ "墽": 3715,
3718
+ "闁": 3716,
3719
+ "枓": 3717,
3720
+ "簩": 3718,
3721
+ "嵉": 3719,
3722
+ "悐": 3720,
3723
+ "嗕": 3721,
3724
+ "鐭": 3722,
3725
+ "氨": 3723,
3726
+ "e": 3724,
3727
+ "櫠": 3725,
3728
+ "圧": 3726,
3729
+ "斎": 3727,
3730
+ "噴": 3728,
3731
+ "巣": 3729,
3732
+ "甸": 3730,
3733
+ "绎": 3731,
3734
+ "窗": 3732,
3735
+ "隣": 3733,
3736
+ "囃": 3734,
3737
+ "蛾": 3735,
3738
+ "凄": 3736,
3739
+ "握": 3737,
3740
+ "Θ": 3738,
3741
+ "谐": 3739,
3742
+ "鈼": 3740,
3743
+ "嬧": 3741,
3744
+ "棆": 3742,
3745
+ "稷": 3743,
3746
+ "鹏": 3744,
3747
+ "哗": 3745,
3748
+ "〇": 3746,
3749
+ "淨": 3747,
3750
+ "捐": 3748,
3751
+ "齑": 3749,
3752
+ "堧": 3750,
3753
+ "嫟": 3751,
3754
+ "毵": 3752,
3755
+ "敼": 3753,
3756
+ "棟": 3754,
3757
+ "佩": 3755,
3758
+ "倫": 3756,
3759
+ "하": 3757,
3760
+ "마": 3758,
3761
+ "리": 3759,
3762
+ "라": 3760,
3763
+ "綱": 3761,
3764
+ "枚": 3762,
3765
+ "讯": 3763,
3766
+ "鑺": 3764,
3767
+ "ª": 3765,
3768
+ "効": 3766,
3769
+ "廃": 3767,
3770
+ "巾": 3768,
3771
+ "芒": 3769,
3772
+ "滨": 3770,
3773
+ "焦": 3771,
3774
+ "橙": 3772,
3775
+ "啸": 3773,
3776
+ "蜀": 3774,
3777
+ "矜": 3775,
3778
+ "阵": 3776,
3779
+ "哎": 3777,
3780
+ "莊": 3778,
3781
+ "输": 3779,
3782
+ "欿": 3780,
3783
+ "訶": 3781,
3784
+ "歖": 3782,
3785
+ "欣": 3783,
3786
+ "针": 3784,
3787
+ "帯": 3785,
3788
+ "歸": 3786,
3789
+ "竭": 3787,
3790
+ "顕": 3788,
3791
+ "规": 3789,
3792
+ "伦": 3790,
3793
+ "嘗": 3791,
3794
+ "榮": 3792,
3795
+ "渋": 3793,
3796
+ "鴉": 3794,
3797
+ "臺": 3795,
3798
+ "湳": 3796,
3799
+ "搁": 3797,
3800
+ "涌": 3798,
3801
+ "硝": 3799,
3802
+ "8": 3800,
3803
+ "9": 3801,
3804
+ "贄": 3802,
3805
+ "彦": 3803,
3806
+ "偛": 3804,
3807
+ "搷": 3805,
3808
+ "ヶ": 3806,
3809
+ "洪": 3807,
3810
+ "妯": 3808,
3811
+ "洟": 3809,
3812
+ "坐": 3810,
3813
+ "抹": 3811,
3814
+ "浅": 3812,
3815
+ "显": 3813,
3816
+ "狮": 3814,
3817
+ "肥": 3815,
3818
+ "擦": 3816,
3819
+ "歪": 3817,
3820
+ "铸": 3818,
3821
+ "α": 3819,
3822
+ "执": 3820,
3823
+ "棲": 3821,
3824
+ "責": 3822,
3825
+ "B": 3823,
3826
+ "摤": 3824,
3827
+ "彛": 3825,
3828
+ "咬": 3826,
3829
+ "祟": 3827,
3830
+ "壹": 3828,
3831
+ "惩": 3829,
3832
+ "[": 3830,
3833
+ "]": 3831,
3834
+ "維": 3832,
3835
+ "鎗": 3833,
3836
+ "炬": 3834,
3837
+ "跃": 3835,
3838
+ "広": 3836,
3839
+ "甯": 3837,
3840
+ "隆": 3838,
3841
+ "怨": 3839,
3842
+ "╄": 3840,
3843
+ "х": 3841,
3844
+ "d": 3842,
3845
+ "嗗": 3843,
3846
+ "朗": 3844,
3847
+ "瓪": 3845,
3848
+ "酥": 3846,
3849
+ "璜": 3847,
3850
+ "积": 3848,
3851
+ "仿": 3849,
3852
+ "庛": 3850,
3853
+ "翅": 3851,
3854
+ "漁": 3852,
3855
+ "坠": 3853,
3856
+ "阁": 3854,
3857
+ "芳": 3855,
3858
+ "浄": 3856,
3859
+ "湿": 3857,
3860
+ "爽": 3858,
3861
+ "価": 3859,
3862
+ "俑": 3860,
3863
+ "殜": 3861,
3864
+ "涛": 3862,
3865
+ "劲": 3863,
3866
+ "际": 3864,
3867
+ "渦": 3865,
3868
+ "測": 3866,
3869
+ "免": 3867,
3870
+ "裕": 3868,
3871
+ "舎": 3869,
3872
+ "峕": 3870,
3873
+ "審": 3871,
3874
+ "臣": 3872,
3875
+ "摄": 3873,
3876
+ "盘": 3874,
3877
+ "湾": 3875,
3878
+ "$": 3876,
3879
+ "崖": 3877,
3880
+ "偡": 3878,
3881
+ "诚": 3879,
3882
+ "薪": 3880,
3883
+ "枯": 3881,
3884
+ "赴": 3882,
3885
+ "亿": 3883,
3886
+ "肖": 3884,
3887
+ "㊙": 3885,
3888
+ "峠": 3886,
3889
+ "獮": 3887,
3890
+ "기": 3888,
3891
+ "나": 3889,
3892
+ "비": 3890,
3893
+ "庆": 3891,
3894
+ "閫": 3892,
3895
+ "ǎ": 3893,
3896
+ "宂": 3894,
3897
+ "鹃": 3895,
3898
+ "鎼": 3896,
3899
+ "欐": 3897,
3900
+ "婄": 3898,
3901
+ "釜": 3899,
3902
+ "熷": 3900,
3903
+ "﹂": 3901,
3904
+ "担": 3902,
3905
+ "笀": 3903,
3906
+ "绊": 3904,
3907
+ "耐": 3905,
3908
+ "扫": 3906,
3909
+ "锅": 3907,
3910
+ "锁": 3908,
3911
+ "驾": 3909,
3912
+ "斋": 3910,
3913
+ "盤": 3911,
3914
+ "媺": 3912,
3915
+ "鑼": 3913,
3916
+ "柊": 3914,
3917
+ "憐": 3915,
3918
+ "杏": 3916,
3919
+ "县": 3917,
3920
+ "葡": 3918,
3921
+ "鼓": 3919,
3922
+ "颠": 3920,
3923
+ "規": 3921,
3924
+ "ヅ": 3922,
3925
+ "慌": 3923,
3926
+ "鳩": 3924,
3927
+ "怜": 3925,
3928
+ "臓": 3926,
3929
+ "猟": 3927,
3930
+ "財": 3928,
3931
+ "드": 3929,
3932
+ "黖": 3930,
3933
+ "瑭": 3931,
3934
+ "珷": 3932,
3935
+ "婊": 3933,
3936
+ "啺": 3934,
3937
+ "辱": 3935,
3938
+ "购": 3936,
3939
+ "增": 3937,
3940
+ "铜": 3938,
3941
+ "徽": 3939,
3942
+ "严": 3940,
3943
+ "E": 3941,
3944
+ "衆": 3942,
3945
+ "哟": 3943,
3946
+ "污": 3944,
3947
+ "N": 3945,
3948
+ "ぅ": 3946,
3949
+ "蜃": 3947,
3950
+ "勿": 3948,
3951
+ "謝": 3949,
3952
+ "㈡": 3950,
3953
+ "匪": 3951,
3954
+ "磯": 3952,
3955
+ "Á": 3953,
3956
+ "É": 3954,
3957
+ "遍": 3955,
3958
+ "시": 3956,
3959
+ "는": 3957,
3960
+ "음": 3958,
3961
+ "카": 3959,
3962
+ "인": 3960,
3963
+ "詞": 3961,
3964
+ "货": 3962,
3965
+ "饰": 3963,
3966
+ "膰": 3964,
3967
+ "膮": 3965,
3968
+ "嶆": 3966,
3969
+ "烘": 3967,
3970
+ "戞": 3968,
3971
+ "偀": 3969,
3972
+ "婂": 3970,
3973
+ "譲": 3971,
3974
+ "畝": 3972,
3975
+ "嚐": 3973,
3976
+ "酸": 3974,
3977
+ "榻": 3975,
3978
+ "躲": 3976,
3979
+ "汇": 3977,
3980
+ "亸": 3978,
3981
+ "层": 3979,
3982
+ "冦": 3980,
3983
+ "纹": 3981,
3984
+ "矝": 3982,
3985
+ "撼": 3983,
3986
+ "埃": 3984,
3987
+ "胡": 3985,
3988
+ "烬": 3986,
3989
+ "鞎": 3987,
3990
+ "勲": 3988,
3991
+ "薯": 3989,
3992
+ "締": 3990,
3993
+ "絮": 3991,
3994
+ "灾": 3992,
3995
+ "噩": 3993,
3996
+ "吊": 3994,
3997
+ "彗": 3995,
3998
+ "慟": 3996,
3999
+ "睇": 3997,
4000
+ "认": 3998,
4001
+ "吓": 3999,
4002
+ "祷": 4000,
4003
+ "怀": 4001,
4004
+ "鴿": 4002,
4005
+ "‖": 4003,
4006
+ "鵺": 4004,
4007
+ "裸": 4005,
4008
+ "損": 4006,
4009
+ "潚": 4007,
4010
+ "牢": 4008,
4011
+ "慈": 4009,
4012
+ "漬": 4010,
4013
+ "丼": 4011,
4014
+ "坦": 4012,
4015
+ "恥": 4013,
4016
+ "累": 4014,
4017
+ "皬": 4015,
4018
+ "绳": 4016,
4019
+ "駒": 4017,
4020
+ "燒": 4018,
4021
+ "拌": 4019,
4022
+ "蛹": 4020,
4023
+ "噂": 4021,
4024
+ "栨": 4022,
4025
+ "痪": 4023,
4026
+ "∬": 4024,
4027
+ "寓": 4025,
4028
+ "锣": 4026,
4029
+ "舒": 4027,
4030
+ "检": 4028,
4031
+ "碑": 4029,
4032
+ "苹": 4030,
4033
+ "榎": 4031,
4034
+ "蛍": 4032,
4035
+ "荷": 4033,
4036
+ "贖": 4034,
4037
+ "惹": 4035,
4038
+ "脈": 4036,
4039
+ "砦": 4037,
4040
+ "薬": 4038,
4041
+ "乳": 4039,
4042
+ "飾": 4040,
4043
+ "軽": 4041,
4044
+ "遅": 4042,
4045
+ "卑": 4043,
4046
+ "疲": 4044,
4047
+ "鶴": 4045,
4048
+ "辺": 4046,
4049
+ "叢": 4047,
4050
+ "财": 4048,
4051
+ "豊": 4049,
4052
+ "叹": 4050,
4053
+ "署": 4051,
4054
+ "袞": 4052,
4055
+ "R": 4053,
4056
+ "ã": 4054,
4057
+ "毬": 4055,
4058
+ "​": 4056,
4059
+ "淫": 4057,
4060
+ "貪": 4058,
4061
+ "牡": 4059,
4062
+ "隼": 4060,
4063
+ "陶": 4061,
4064
+ "舍": 4062,
4065
+ "审": 4063,
4066
+ "绪": 4064,
4067
+ "丢": 4065,
4068
+ "椒": 4066,
4069
+ "钂": 4067,
4070
+ "劳": 4068,
4071
+ "霞": 4069,
4072
+ "鈪": 4070,
4073
+ "仪": 4071,
4074
+ "勩": 4072,
4075
+ "涩": 4073,
4076
+ "牵": 4074,
4077
+ "汪": 4075,
4078
+ "杉": 4076,
4079
+ "蓓": 4077,
4080
+ "扣": 4078,
4081
+ "含": 4079,
4082
+ "燕": 4080,
4083
+ "楚": 4081,
4084
+ "歓": 4082,
4085
+ "办": 4083,
4086
+ "嘛": 4084,
4087
+ "钧": 4085,
4088
+ "鸽": 4086,
4089
+ "蚁": 4087,
4090
+ "減": 4088,
4091
+ "壳": 4089,
4092
+ "偿": 4090,
4093
+ "惜": 4091,
4094
+ "稼": 4092,
4095
+ "詰": 4093,
4096
+ "④": 4094,
4097
+ "圿": 4095,
4098
+ "畑": 4096,
4099
+ "並": 4097,
4100
+ "券": 4098,
4101
+ "惚": 4099,
4102
+ "窯": 4100,
4103
+ "盯": 4101,
4104
+ "泲": 4102,
4105
+ "省": 4103,
4106
+ "墙": 4104,
4107
+ "坚": 4105,
4108
+ "骰": 4106,
4109
+ "秤": 4107,
4110
+ "紋": 4108,
4111
+ "綿": 4109,
4112
+ "虜": 4110,
4113
+ "迅": 4111,
4114
+ "奋": 4112,
4115
+ "纽": 4113,
4116
+ "敢": 4114,
4117
+ "揭": 4115,
4118
+ "菌": 4116,
4119
+ "囲": 4117,
4120
+ "鳞": 4118,
4121
+ "齐": 4119,
4122
+ "墟": 4120,
4123
+ "酋": 4121,
4124
+ "价": 4122,
4125
+ "掃": 4123,
4126
+ "袡": 4124,
4127
+ "槽": 4125,
4128
+ "茉": 4126,
4129
+ "賴": 4127,
4130
+ "瓣": 4128,
4131
+ "를": 4129,
4132
+ "성": 4130,
4133
+ "락": 4131,
4134
+ "루": 4132,
4135
+ "구": 4133,
4136
+ "모": 4134,
4137
+ "정": 4135,
4138
+ "지": 4136,
4139
+ "鎽": 4137,
4140
+ "淚": 4138,
4141
+ "縄": 4139,
4142
+ "拼": 4140,
4143
+ "囦": 4141,
4144
+ "粦": 4142,
4145
+ "ü": 4143,
4146
+ "緳": 4144,
4147
+ "鎶": 4145,
4148
+ "尝": 4146,
4149
+ "绉": 4147,
4150
+ "暱": 4148,
4151
+ "婁": 4149,
4152
+ "秺": 4150,
4153
+ "㈣": 4151,
4154
+ "璀": 4152,
4155
+ "皝": 4153,
4156
+ "嘳": 4154,
4157
+ "搶": 4155,
4158
+ "鍛": 4156,
4159
+ "婃": 4157,
4160
+ "竊": 4158,
4161
+ "萤": 4159,
4162
+ "份": 4160,
4163
+ "兜": 4161,
4164
+ "亱": 4162,
4165
+ "仒": 4163,
4166
+ "仾": 4164,
4167
+ "瑠": 4165,
4168
+ "煄": 4166,
4169
+ "挥": 4167,
4170
+ "庙": 4168,
4171
+ "欻": 4169,
4172
+ "穂": 4170,
4173
+ "熻": 4171,
4174
+ "猍": 4172,
4175
+ "矿": 4173,
4176
+ "軸": 4174,
4177
+ "每": 4175,
4178
+ "陪": 4176,
4179
+ "邀": 4177,
4180
+ "葛": 4178,
4181
+ "蹟": 4179,
4182
+ "猜": 4180,
4183
+ "資": 4181,
4184
+ "縮": 4182,
4185
+ "桐": 4183,
4186
+ "鸭": 4184,
4187
+ "盔": 4185,
4188
+ "涯": 4186,
4189
+ "苗": 4187,
4190
+ "谢": 4188,
4191
+ "邮": 4189,
4192
+ "畔": 4190,
4193
+ "穢": 4191,
4194
+ "潫": 4192,
4195
+ "粘": 4193,
4196
+ "鐔": 4194,
4197
+ "唺": 4195,
4198
+ "棷": 4196,
4199
+ "钥": 4197,
4200
+ "床": 4198,
4201
+ "酔": 4199,
4202
+ "詛": 4200,
4203
+ "髭": 4201,
4204
+ "搏": 4202,
4205
+ "仗": 4203,
4206
+ "耍": 4204,
4207
+ "伢": 4205,
4208
+ "厕": 4206,
4209
+ "貘": 4207,
4210
+ "凌": 4208,
4211
+ "贯": 4209,
4212
+ "梁": 4210,
4213
+ "銅": 4211,
4214
+ "賛": 4212,
4215
+ "权": 4213,
4216
+ "餃": 4214,
4217
+ "挟": 4215,
4218
+ "围": 4216,
4219
+ "柿": 4217,
4220
+ "疗": 4218,
4221
+ "忋": 4219,
4222
+ "炪": 4220,
4223
+ "儕": 4221,
4224
+ "据": 4222,
4225
+ "俠": 4223,
4226
+ "茧": 4224,
4227
+ "穷": 4225,
4228
+ "貞": 4226,
4229
+ "ç": 4227,
4230
+ "鮒": 4228,
4231
+ "喱": 4229,
4232
+ "둑": 4230,
4233
+ "─": 4231,
4234
+ "繫": 4232,
4235
+ "疊": 4233,
4236
+ "肋": 4234,
4237
+ "姻": 4235,
4238
+ "거": 4236,
4239
+ "속": 4237,
4240
+ "련": 4238,
4241
+ "래": 4239,
4242
+ "에": 4240,
4243
+ "바": 4241,
4244
+ "반": 4242,
4245
+ "부": 4243,
4246
+ "鎯": 4244,
4247
+ "恭": 4245,
4248
+ "赢": 4246,
4249
+ "驴": 4247,
4250
+ "鼹": 4248,
4251
+ "币": 4249,
4252
+ "撳": 4250,
4253
+ "閬": 4251,
4254
+ "辩": 4252,
4255
+ "闃": 4253,
4256
+ "檃": 4254,
4257
+ "艣": 4255,
4258
+ "轰": 4256,
4259
+ "蔷": 4257,
4260
+ "敬": 4258,
4261
+ "韩": 4259,
4262
+ "ㄥ": 4260,
4263
+ "旇": 4261,
4264
+ "鐮": 4262,
4265
+ "喅": 4263,
4266
+ "呰": 4264,
4267
+ "乚": 4265,
4268
+ "熶": 4266,
4269
+ "梋": 4267,
4270
+ "嗭": 4268,
4271
+ "紓": 4269,
4272
+ "鑲": 4270,
4273
+ "埗": 4271,
4274
+ "垢": 4272,
4275
+ "软": 4273,
4276
+ "泦": 4274,
4277
+ "误": 4275,
4278
+ "厔": 4276,
4279
+ "鍟": 4277,
4280
+ "丧": 4278,
4281
+ "鎰": 4279,
4282
+ "婅": 4280,
4283
+ "举": 4281,
4284
+ "堆": 4282,
4285
+ "暥": 4283,
4286
+ "臆": 4284,
4287
+ "剥": 4285,
4288
+ "仸": 4286,
4289
+ "伅": 4287,
4290
+ "芬": 4288,
4291
+ "柏": 4289,
4292
+ "乔": 4290,
4293
+ "鼻": 4291,
4294
+ "厉": 4292,
4295
+ "禮": 4293,
4296
+ "捧": 4294,
4297
+ "弩": 4295,
4298
+ "措": 4296,
4299
+ "宁": 4297,
4300
+ "悄": 4298,
4301
+ "梨": 4299,
4302
+ "肚": 4300,
4303
+ "戽": 4301,
4304
+ "浆": 4302,
4305
+ "讃": 4303,
4306
+ "溢": 4304,
4307
+ "夸": 4305,
4308
+ "潛": 4306,
4309
+ "針": 4307,
4310
+ "芭": 4308,
4311
+ "键": 4309,
4312
+ "函": 4310,
4313
+ "粗": 4311,
4314
+ "欶": 4312,
4315
+ "添": 4313,
4316
+ "愨": 4314,
4317
+ "槄": 4315,
4318
+ "暙": 4316,
4319
+ "咚": 4317,
4320
+ "霍": 4318,
4321
+ "飲": 4319,
4322
+ "倶": 4320,
4323
+ "饼": 4321,
4324
+ "膀": 4322,
4325
+ "蹦": 4323,
4326
+ "患": 4324,
4327
+ "殘": 4325,
4328
+ "搲": 4326,
4329
+ "孝": 4327,
4330
+ "勤": 4328,
4331
+ "聴": 4329,
4332
+ "挽": 4330,
4333
+ "疫": 4331,
4334
+ "耶": 4332,
4335
+ "孵": 4333,
4336
+ "殉": 4334,
4337
+ "⁈": 4335,
4338
+ "绀": 4336,
4339
+ "騙": 4337,
4340
+ "払": 4338,
4341
+ "項": 4339,
4342
+ "레": 4340,
4343
+ "동": 4341,
4344
+ "噜": 4342,
4345
+ "紺": 4343,
4346
+ "粴": 4344,
4347
+ "醋": 4345,
4348
+ "绕": 4346,
4349
+ "窥": 4347,
4350
+ "填": 4348,
4351
+ "责": 4349,
4352
+ "橱": 4350,
4353
+ "甩": 4351,
4354
+ "售": 4352,
4355
+ "缝": 4353,
4356
+ "溶": 4354,
4357
+ "揮": 4355,
4358
+ "臭": 4356,
4359
+ "设": 4357,
4360
+ "获": 4358,
4361
+ "玷": 4359,
4362
+ "幫": 4360,
4363
+ "C": 4361,
4364
+ "徳": 4362,
4365
+ "圏": 4363,
4366
+ "諦": 4364,
4367
+ "晦": 4365,
4368
+ "倾": 4366,
4369
+ "竟": 4367,
4370
+ "熬": 4368,
4371
+ "拒": 4369,
4372
+ "単": 4370,
4373
+ "鏖": 4371,
4374
+ "顏": 4372,
4375
+ "蔽": 4373,
4376
+ "綐": 4374,
4377
+ "儍": 4375,
4378
+ "瀑": 4376,
4379
+ "吼": 4377,
4380
+ "毗": 4378,
4381
+ "掳": 4379,
4382
+ "农": 4380,
4383
+ "氧": 4381,
4384
+ "鉴": 4382,
4385
+ "汐": 4383,
4386
+ "捷": 4384,
4387
+ "蟠": 4385,
4388
+ "确": 4386,
4389
+ "监": 4387,
4390
+ "褋": 4388,
4391
+ "褌": 4389,
4392
+ "驟": 4390,
4393
+ "茹": 4391,
4394
+ "ø": 4392,
4395
+ "밀": 4393,
4396
+ "窃": 4394,
4397
+ "桥": 4395,
4398
+ "奕": 4396,
4399
+ "淡": 4397,
4400
+ "蠻": 4398,
4401
+ "撇": 4399,
4402
+ "초": 4400,
4403
+ "월": 4401,
4404
+ "울": 4402,
4405
+ "홍": 4403,
4406
+ "봉": 4404,
4407
+ "계": 4405,
4408
+ "고": 4406,
4409
+ "함": 4407,
4410
+ "운": 4408,
4411
+ "을": 4409,
4412
+ "竴": 4410,
4413
+ "瑜": 4411,
4414
+ "蓬": 4412,
4415
+ "嘎": 4413,
4416
+ "屾": 4414,
4417
+ "垜": 4415,
4418
+ "讳": 4416,
4419
+ "绫": 4417,
4420
+ "翱": 4418,
4421
+ "眉": 4419,
4422
+ "慨": 4420,
4423
+ "枟": 4421,
4424
+ "竷": 4422,
4425
+ "悏": 4423,
4426
+ "濉": 4424,
4427
+ "欎": 4425,
4428
+ "瘑": 4426,
4429
+ "櫓": 4427,
4430
+ "寫": 4428,
4431
+ "ㄤ": 4429,
4432
+ "欓": 4430,
4433
+ "潤": 4431,
4434
+ "绛": 4432,
4435
+ "秴": 4433,
4436
+ "慮": 4434,
4437
+ "佽": 4435,
4438
+ "闄": 4436,
4439
+ "櫖": 4437,
4440
+ "仌": 4438,
4441
+ "撱": 4439,
4442
+ "詮": 4440,
4443
+ "渐": 4441,
4444
+ "疼": 4442,
4445
+ "仛": 4443,
4446
+ "慰": 4444,
4447
+ "厂": 4445,
4448
+ "倗": 4446,
4449
+ "獳": 4447,
4450
+ "籌": 4448,
4451
+ "籏": 4449,
4452
+ "籄": 4450,
4453
+ "籘": 4451,
4454
+ "籗": 4452,
4455
+ "籙": 4453,
4456
+ "偒": 4454,
4457
+ "寤": 4455,
4458
+ "伨": 4456,
4459
+ "綸": 4457,
4460
+ "仐": 4458,
4461
+ "劒": 4459,
4462
+ "牬": 4460,
4463
+ "┕": 4461,
4464
+ "暘": 4462,
4465
+ "忐": 4463,
4466
+ "忑": 4464,
4467
+ "兹": 4465,
4468
+ "靜": 4466,
4469
+ "痉": 4467,
4470
+ "浼": 4468,
4471
+ "挎": 4469,
4472
+ "愭": 4470,
4473
+ "萧": 4471,
4474
+ "凭": 4472,
4475
+ "赞": 4473,
4476
+ "旃": 4474,
4477
+ "敂": 4475,
4478
+ "勶": 4476,
4479
+ "巋": 4477,
4480
+ "怯": 4478,
4481
+ "鑳": 4479,
4482
+ "谊": 4480,
4483
+ "郵": 4481,
4484
+ "签": 4482,
4485
+ "虾": 4483,
4486
+ "P": 4484,
4487
+ "瞄": 4485,
4488
+ "膳": 4486,
4489
+ "輸": 4487,
4490
+ "棄": 4488,
4491
+ "馳": 4489,
4492
+ "绍": 4490,
4493
+ "犀": 4491,
4494
+ "愕": 4492,
4495
+ "妬": 4493,
4496
+ "赶": 4494,
4497
+ "萝": 4495,
4498
+ "鎌": 4496,
4499
+ "厛": 4497,
4500
+ "娈": 4498,
4501
+ "埜": 4499,
4502
+ "硸": 4500,
4503
+ "爞": 4501,
4504
+ "摜": 4502,
4505
+ "@": 4503,
4506
+ "敤": 4504,
4507
+ "厳": 4505,
4508
+ "蛤": 4506,
4509
+ "亴": 4507,
4510
+ "≒": 4508,
4511
+ "筝": 4509,
4512
+ "綜": 4510,
4513
+ "歊": 4511,
4514
+ "羁": 4512,
4515
+ "飢": 4513,
4516
+ "壺": 4514,
4517
+ "缶": 4515,
4518
+ "析": 4516,
4519
+ "乏": 4517,
4520
+ "餅": 4518,
4521
+ "昧": 4519,
4522
+ "繭": 4520,
4523
+ "経": 4521,
4524
+ "刈": 4522,
4525
+ "崚": 4523,
4526
+ "粯": 4524,
4527
+ "埆": 4525,
4528
+ "垰": 4526,
4529
+ "築": 4527,
4530
+ "摘": 4528,
4531
+ "ò": 4529,
4532
+ "揃": 4530,
4533
+ "坡": 4531,
4534
+ "腦": 4532,
4535
+ "藩": 4533,
4536
+ "錢": 4534,
4537
+ "蟇": 4535,
4538
+ "艶": 4536,
4539
+ "薙": 4537,
4540
+ "毘": 4538,
4541
+ "頬": 4539,
4542
+ "萄": 4540,
4543
+ "塗": 4541,
4544
+ "燦": 4542,
4545
+ "笨": 4543,
4546
+ "巅": 4544,
4547
+ "氛": 4545,
4548
+ "扰": 4546,
4549
+ "斥": 4547,
4550
+ "嚏": 4548,
4551
+ "项": 4549,
4552
+ "黏": 4550,
4553
+ "许": 4551,
4554
+ "袱": 4552,
4555
+ "炖": 4553,
4556
+ "锃": 4554,
4557
+ "壶": 4555,
4558
+ "桶": 4556,
4559
+ "椅": 4557,
4560
+ "艰": 4558,
4561
+ "荞": 4559,
4562
+ "汰": 4560,
4563
+ "淳": 4561,
4564
+ "粒": 4562,
4565
+ "瑙": 4563,
4566
+ "鹵": 4564,
4567
+ "拭": 4565,
4568
+ "饗": 4566,
4569
+ "汝": 4567,
4570
+ "壷": 4568,
4571
+ "狛": 4569,
4572
+ "施": 4570,
4573
+ "゜": 4571,
4574
+ "偉": 4572,
4575
+ "塘": 4573,
4576
+ "渉": 4574,
4577
+ "勧": 4575,
4578
+ "∞": 4576,
4579
+ "髄": 4577,
4580
+ "抉": 4578,
4581
+ "秩": 4579,
4582
+ "順": 4580,
4583
+ "皑": 4581,
4584
+ "焚": 4582,
4585
+ "纵": 4583,
4586
+ "祸": 4584,
4587
+ "嬉": 4585,
4588
+ "哩": 4586,
4589
+ "弑": 4587,
4590
+ "丛": 4588,
4591
+ "柩": 4589,
4592
+ "脉": 4590,
4593
+ "卿": 4591,
4594
+ "⅙": 4592,
4595
+ "拙": 4593,
4596
+ "β": 4594,
4597
+ "鼬": 4595,
4598
+ "狠": 4596,
4599
+ "炉": 4597,
4600
+ "Д": 4598,
4601
+ "А": 4599,
4602
+ "н": 4600,
4603
+ "圭": 4601,
4604
+ "歉": 4602,
4605
+ "汤": 4603,
4606
+ "矶": 4604,
4607
+ "顺": 4605,
4608
+ "筆": 4606,
4609
+ "霹": 4607,
4610
+ "撕": 4608,
4611
+ "竪": 4609,
4612
+ "樽": 4610,
4613
+ "纭": 4611,
4614
+ "矮": 4612,
4615
+ "鄙": 4613,
4616
+ "钴": 4614,
4617
+ "夹": 4615,
4618
+ "毕": 4616,
4619
+ "蜗": 4617,
4620
+ "烹": 4618,
4621
+ "饪": 4619,
4622
+ "董": 4620,
4623
+ "绷": 4621,
4624
+ "膜": 4622,
4625
+ "르": 4623,
4626
+ "디": 4624,
4627
+ "厘": 4625,
4628
+ "♂": 4626,
4629
+ "蝕": 4627,
4630
+ "崭": 4628,
4631
+ "貌": 4629,
4632
+ "帆": 4630,
4633
+ "涟": 4631,
4634
+ "漪": 4632,
4635
+ "鷺": 4633,
4636
+ "ß": 4634,
4637
+ "逊": 4635,
4638
+ "揍": 4636,
4639
+ "玫": 4637,
4640
+ "斑": 4638,
4641
+ "다": 4639,
4642
+ "H": 4640,
4643
+ "Y": 4641,
4644
+ "竿": 4642,
4645
+ "涉": 4643,
4646
+ "茄": 4644,
4647
+ "筹": 4645,
4648
+ "辆": 4646,
4649
+ "睽": 4647,
4650
+ "Ø": 4648,
4651
+ "嗒": 4649,
4652
+ "龄": 4650,
4653
+ "스": 4651,
4654
+ "보": 4652,
4655
+ "魑": 4653,
4656
+ "喝": 4654,
4657
+ "槙": 4655,
4658
+ "叙": 4656,
4659
+ "옥": 4657,
4660
+ "외": 4658,
4661
+ "剤": 4659,
4662
+ "钀": 4660,
4663
+ "臉": 4661,
4664
+ "몽": 4662,
4665
+ "환": 4663,
4666
+ "패": 4664,
4667
+ "검": 4665,
4668
+ "전": 4666,
4669
+ "히": 4667,
4670
+ "추": 4668,
4671
+ "격": 4669,
4672
+ "명": 4670,
4673
+ "슬": 4671,
4674
+ "자": 4672,
4675
+ "산": 4673,
4676
+ "로": 4674,
4677
+ "가": 4675,
4678
+ "崙": 4676,
4679
+ "闲": 4677,
4680
+ "阶": 4678,
4681
+ "披": 4679,
4682
+ "鍜": 4680,
4683
+ "綖": 4681,
4684
+ "冩": 4682,
4685
+ "棌": 4683,
4686
+ "т": 4684,
4687
+ "ê": 4685,
4688
+ "袝": 4686,
4689
+ "彶": 4687,
4690
+ "艳": 4688,
4691
+ "颈": 4689,
4692
+ "紬": 4690,
4693
+ "惃": 4691,
4694
+ "紑": 4692,
4695
+ "冭": 4693,
4696
+ "緹": 4694,
4697
+ "埄": 4695,
4698
+ "繎": 4696,
4699
+ "簳": 4697,
4700
+ "瞾": 4698,
4701
+ "禲": 4699,
4702
+ "惂": 4700,
4703
+ "鎬": 4701,
4704
+ "禌": 4702,
4705
+ "厠": 4703,
4706
+ "炵": 4704,
4707
+ "璢": 4705,
4708
+ "湀": 4706,
4709
+ "囯": 4707,
4710
+ "浉": 4708,
4711
+ "唴": 4709,
4712
+ "盆": 4710,
4713
+ "儑": 4711,
4714
+ "楅": 4712,
4715
+ "饱": 4713,
4716
+ "袂": 4714,
4717
+ "扶": 4715,
4718
+ "炒": 4716,
4719
+ "亼": 4717,
4720
+ "猼": 4718,
4721
+ "它": 4719,
4722
+ "鸥": 4720,
4723
+ "滃": 4721,
4724
+ "陈": 4722,
4725
+ "棘": 4723,
4726
+ "榜": 4724,
4727
+ "烛": 4725,
4728
+ "荡": 4726,
4729
+ "凉": 4727,
4730
+ "梵": 4728,
4731
+ "禅": 4729,
4732
+ "廡": 4730,
4733
+ "脆": 4731,
4734
+ "鳄": 4732,
4735
+ "箹": 4733,
4736
+ "胃": 4734,
4737
+ "虑": 4735,
4738
+ "嗣": 4736,
4739
+ "幌": 4737,
4740
+ "粰": 4738,
4741
+ "悧": 4739,
4742
+ "缂": 4740,
4743
+ "﹩": 4741,
4744
+ "脏": 4742,
4745
+ "罩": 4743,
4746
+ "篝": 4744,
4747
+ "評": 4745,
4748
+ "醫": 4746,
4749
+ "携": 4747,
4750
+ "氫": 4748,
4751
+ "饲": 4749,
4752
+ "鹦": 4750,
4753
+ "鹉": 4751,
4754
+ "∽": 4752,
4755
+ "婴": 4753,
4756
+ "惉": 4754,
4757
+ "湢": 4755,
4758
+ "褐": 4756,
4759
+ "锵": 4757,
4760
+ "洩": 4758,
4761
+ "嘉": 4759,
4762
+ "餌": 4760,
4763
+ "咎": 4761,
4764
+ "滸": 4762,
4765
+ "浒": 4763,
4766
+ "乀": 4764,
4767
+ "顽": 4765,
4768
+ "蚊": 4766,
4769
+ "桧": 4767,
4770
+ "喇": 4768,
4771
+ "叭": 4769,
4772
+ "併": 4770,
4773
+ "┿": 4771,
4774
+ "筏": 4772,
4775
+ "咦": 4773,
4776
+ "渭": 4774,
4777
+ "餓": 4775,
4778
+ "擂": 4776,
4779
+ "梢": 4777,
4780
+ "枝": 4778,
4781
+ "貸": 4779,
4782
+ "鮫": 4780,
4783
+ "傀": 4781,
4784
+ "儡": 4782,
4785
+ "覧": 4783,
4786
+ "労": 4784,
4787
+ "哨": 4785,
4788
+ "翳": 4786,
4789
+ "劉": 4787,
4790
+ "詑": 4788,
4791
+ "貧": 4789,
4792
+ "聡": 4790,
4793
+ "%": 4791,
4794
+ "藪": 4792,
4795
+ "仄": 4793,
4796
+ "冊": 4794,
4797
+ "垣": 4795,
4798
+ "謹": 4796,
4799
+ "莓": 4797,
4800
+ "妨": 4798,
4801
+ "啾": 4799,
4802
+ "X": 4800,
4803
+ "硫": 4801,
4804
+ "鈔": 4802,
4805
+ "塊": 4803,
4806
+ "斜": 4804,
4807
+ "蝴": 4805,
4808
+ "飄": 4806,
4809
+ "眞": 4807,
4810
+ "湗": 4808,
4811
+ "倓": 4809,
4812
+ "鏇": 4810,
4813
+ "埐": 4811,
4814
+ "錆": 4812,
4815
+ "磔": 4813,
4816
+ "贷": 4814,
4817
+ "款": 4815,
4818
+ "悦": 4816,
4819
+ "烫": 4817,
4820
+ "笋": 4818,
4821
+ "齿": 4819,
4822
+ "痒": 4820,
4823
+ "帘": 4821,
4824
+ "蜓": 4822,
4825
+ "銭": 4823,
4826
+ "絡": 4824,
4827
+ "謃": 4825,
4828
+ "梓": 4826,
4829
+ "沫": 4827,
4830
+ "祀": 4828,
4831
+ "滋": 4829,
4832
+ "褒": 4830,
4833
+ "腸": 4831,
4834
+ "囁": 4832,
4835
+ "戬": 4833,
4836
+ "殇": 4834,
4837
+ "剩": 4835,
4838
+ "谅": 4836,
4839
+ "狡": 4837,
4840
+ "猾": 4838,
4841
+ "并": 4839,
4842
+ "延": 4840,
4843
+ "諸": 4841,
4844
+ "茱": 4842,
4845
+ "®": 4843,
4846
+ "烂": 4844,
4847
+ "誌": 4845,
4848
+ "凝": 4846,
4849
+ "拝": 4847,
4850
+ "隅": 4848,
4851
+ "嶐": 4849,
4852
+ "袴": 4850,
4853
+ "粋": 4851,
4854
+ "犠": 4852,
4855
+ "幾": 4853,
4856
+ "隙": 4854,
4857
+ "饮": 4855,
4858
+ "朔": 4856,
4859
+ "枢": 4857,
4860
+ "亦": 4858,
4861
+ "魄": 4859,
4862
+ "挫": 4860,
4863
+ "抵": 4861,
4864
+ "卟": 4862,
4865
+ "琳": 4863,
4866
+ "费": 4864,
4867
+ "殲": 4865,
4868
+ "閻": 4866,
4869
+ "斉": 4867,
4870
+ "乖": 4868,
4871
+ "埼": 4869,
4872
+ "尿": 4870,
4873
+ "膵": 4871,
4874
+ "営": 4872,
4875
+ "筒": 4873,
4876
+ "唸": 4874,
4877
+ "犹": 4875,
4878
+ "遷": 4876,
4879
+ "忽": 4877,
4880
+ "煉": 4878,
4881
+ "壍": 4879,
4882
+ "赎": 4880,
4883
+ "褪": 4881,
4884
+ "偔": 4882,
4885
+ "儜": 4883,
4886
+ "儊": 4884,
4887
+ "赚": 4885,
4888
+ "框": 4886,
4889
+ "炁": 4887,
4890
+ "勃": 4888,
4891
+ "鳗": 4889,
4892
+ "孽": 4890,
4893
+ "雳": 4891,
4894
+ "螢": 4892,
4895
+ "霄": 4893,
4896
+ "蠱": 4894,
4897
+ "攪": 4895,
4898
+ "漩": 4896,
4899
+ "涡": 4897,
4900
+ "刨": 4898,
4901
+ "攀": 4899,
4902
+ "腋": 4900,
4903
+ "伟": 4901,
4904
+ "熔": 4902,
4905
+ "痣": 4903,
4906
+ "需": 4904,
4907
+ "剂": 4905,
4908
+ "錠": 4906,
4909
+ "铤": 4907,
4910
+ "益": 4908,
4911
+ "柄": 4909,
4912
+ "脩": 4910,
4913
+ "恢": 4911,
4914
+ "茫": 4912,
4915
+ "漸": 4913,
4916
+ "트": 4914,
4917
+ "丨": 4915,
4918
+ "謁": 4916,
4919
+ "鮎": 4917,
4920
+ "凧": 4918,
4921
+ "眸": 4919,
4922
+ "堇": 4920,
4923
+ "赁": 4921,
4924
+ "哔": 4922,
4925
+ "석": 4923,
4926
+ "푸": 4924,
4927
+ "潘": 4925,
4928
+ "蝋": 4926,
4929
+ "騨": 4927,
4930
+ "撫": 4928,
4931
+ "礫": 4929,
4932
+ "顎": 4930,
4933
+ "憤": 4931,
4934
+ "Е": 4932,
4935
+ "ぢ": 4933,
4936
+ "珱": 4934,
4937
+ "筷": 4935,
4938
+ "Ö": 4936,
4939
+ "亨": 4937,
4940
+ "菈": 4938,
4941
+ "郎": 4939,
4942
+ "褲": 4940,
4943
+ "상": 4941,
4944
+ "미": 4942,
4945
+ "코": 4943,
4946
+ "령": 4944,
4947
+ "혼": 4945,
4948
+ "묘": 4946,
4949
+ "들": 4947,
4950
+ "즈": 4948,
4951
+ "각": 4949,
4952
+ "데": 4950,
4953
+ "향": 4951,
4954
+ "해": 4952,
4955
+ "嚭": 4953,
4956
+ "蛀": 4954,
4957
+ "鈹": 4955,
4958
+ "溌": 4956,
4959
+ "瑅": 4957,
4960
+ "脠": 4958,
4961
+ "²": 4959,
4962
+ "崑": 4960,
4963
+ "晱": 4961,
4964
+ "姞": 4962,
4965
+ "铇": 4963,
4966
+ "戣": 4964,
4967
+ "弴": 4965,
4968
+ "垚": 4966,
4969
+ "鐐": 4967,
4970
+ "渶": 4968,
4971
+ "橝": 4969,
4972
+ "艅": 4970,
4973
+ "º": 4971,
4974
+ "亾": 4972,
4975
+ "粓": 4973,
4976
+ "癸": 4974,
4977
+ "楋": 4975,
4978
+ "彂": 4976,
4979
+ "噺": 4977,
4980
+ "劚": 4978,
4981
+ "彉": 4979,
4982
+ "韬": 4980,
4983
+ "櫒": 4981,
4984
+ "湁": 4982,
4985
+ "寘": 4983,
4986
+ "堜": 4984,
4987
+ "簬": 4985,
4988
+ "繕": 4986,
4989
+ "憳": 4987,
4990
+ "墦": 4988,
4991
+ "笌": 4989,
4992
+ "矙": 4990,
4993
+ "廬": 4991,
4994
+ "愯": 4992,
4995
+ "啗": 4993,
4996
+ "嚮": 4994,
4997
+ "︼": 4995,
4998
+ "繃": 4996,
4999
+ "氳": 4997,
5000
+ "挋": 4998,
5001
+ "櫥": 4999,
5002
+ "忕": 5000,
5003
+ "鏆": 5001,
5004
+ "楗": 5002,
5005
+ "璁": 5003,
5006
+ "┒": 5004,
5007
+ "莽": 5005,
5008
+ "頁": 5006,
5009
+ "吟": 5007,
5010
+ "袍": 5008,
5011
+ "糠": 5009,
5012
+ "茂": 5010,
5013
+ "拘": 5011,
5014
+ "疏": 5012,
5015
+ "笹": 5013,
5016
+ "蝗": 5014,
5017
+ "ц": 5015,
5018
+ "閴": 5016,
5019
+ "牨": 5017,
5020
+ "冮": 5018,
5021
+ "苞": 5019,
5022
+ "槒": 5020,
5023
+ "簵": 5021,
5024
+ "揣": 5022,
5025
+ "焆": 5023,
5026
+ "玖": 5024,
5027
+ "鲨": 5025,
5028
+ "唐": 5026,
5029
+ "闀": 5027,
5030
+ "叧": 5028,
5031
+ "晣": 5029,
5032
+ "鐡": 5030,
5033
+ "硅": 5031,
5034
+ "缃": 5032,
5035
+ "氶": 5033,
5036
+ "楸": 5034,
5037
+ "杂": 5035,
5038
+ "盐": 5036,
5039
+ "夷": 5037,
5040
+ "烽": 5038,
5041
+ "琼": 5039,
5042
+ "浩": 5040,
5043
+ "阗": 5041,
5044
+ "钮": 5042,
5045
+ "驶": 5043,
5046
+ "ʼ": 5044,
5047
+ "拡": 5045,
5048
+ "颯": 5046,
5049
+ "墰": 5047,
5050
+ "儏": 5048,
5051
+ "紮": 5049,
5052
+ "搱": 5050,
5053
+ "钑": 5051,
5054
+ "╅": 5052,
5055
+ "妫": 5053,
5056
+ "粨": 5054,
5057
+ "暀": 5055,
5058
+ "I": 5056,
5059
+ "誂": 5057,
5060
+ "馒": 5058,
5061
+ "嘻": 5059,
5062
+ "茬": 5060,
5063
+ "敇": 5061,
5064
+ "摝": 5062,
5065
+ "櫘": 5063,
5066
+ "刷": 5064,
5067
+ "饿": 5065,
5068
+ "铚": 5066,
5069
+ "狅": 5067,
5070
+ "遁": 5068,
5071
+ "梟": 5069,
5072
+ "帷": 5070,
5073
+ "嫉": 5071,
5074
+ "琦": 5072,
5075
+ "孴": 5073,
5076
+ "峀": 5074,
5077
+ "蝌": 5075,
5078
+ "蚪": 5076,
5079
+ "庐": 5077,
5080
+ "荧": 5078,
5081
+ "励": 5079,
5082
+ "懲": 5080,
5083
+ "泟": 5081,
5084
+ "帿": 5082,
5085
+ "侽": 5083,
5086
+ "苑": 5084,
5087
+ "鈞": 5085,
5088
+ "闭": 5086,
5089
+ "肱": 5087,
5090
+ "垾": 5088,
5091
+ "喬": 5089,
5092
+ "钦": 5090,
5093
+ "躯": 5091,
5094
+ "枷": 5092,
5095
+ "胧": 5093,
5096
+ "沃": 5094,
5097
+ "糧": 5095,
5098
+ "浸": 5096,
5099
+ "笐": 5097,
5100
+ "孲": 5098,
5101
+ "宭": 5099,
5102
+ "孏": 5100,
5103
+ "麺": 5101,
5104
+ "鶏": 5102,
5105
+ "棚": 5103,
5106
+ "菖": 5104,
5107
+ "鯛": 5105,
5108
+ "⑤": 5106,
5109
+ "⑥": 5107,
5110
+ "炊": 5108,
5111
+ "株": 5109,
5112
+ "^": 5110,
5113
+ "兎": 5111,
5114
+ "萩": 5112,
5115
+ "抅": 5113,
5116
+ "仑": 5114,
5117
+ "盲": 5115,
5118
+ "哖": 5116,
5119
+ "蛟": 5117,
5120
+ "鸵": 5118,
5121
+ "盼": 5119,
5122
+ "袜": 5120,
5123
+ "例": 5121,
5124
+ "U": 5122,
5125
+ "岬": 5123,
5126
+ "稱": 5124,
5127
+ "梭": 5125,
5128
+ "盧": 5126,
5129
+ "蹤": 5127,
5130
+ "價": 5128,
5131
+ "瘋": 5129,
5132
+ "蝦": 5130,
5133
+ "鈷": 5131,
5134
+ "铅": 5132,
5135
+ "태": 5133,
5136
+ "투": 5134,
5137
+ "藝": 5135,
5138
+ "鈍": 5136,
5139
+ "牱": 5137,
5140
+ "耻": 5138,
5141
+ "夙": 5139,
5142
+ "肴": 5140,
5143
+ "啥": 5141,
5144
+ "犰": 5142,
5145
+ "狳": 5143,
5146
+ "锤": 5144,
5147
+ "飕": 5145,
5148
+ "碌": 5146,
5149
+ "浓": 5147,
5150
+ "嗡": 5148,
5151
+ "订": 5149,
5152
+ "橄": 5150,
5153
+ "楞": 5151,
5154
+ "荏": 5152,
5155
+ "辿": 5153,
5156
+ "祠": 5154,
5157
+ "擲": 5155,
5158
+ "済": 5156,
5159
+ "喫": 5157,
5160
+ "箏": 5158,
5161
+ "峙": 5159,
5162
+ "渓": 5160,
5163
+ "翌": 5161,
5164
+ "籈": 5162,
5165
+ "閣": 5163,
5166
+ "絃": 5164,
5167
+ "蒔": 5165,
5168
+ "蝠": 5166,
5169
+ "锏": 5167,
5170
+ "拢": 5168,
5171
+ "瞎": 5169,
5172
+ "筵": 5170,
5173
+ "肯": 5171,
5174
+ "囉": 5172,
5175
+ "叩": 5173,
5176
+ "串": 5174,
5177
+ "陳": 5175,
5178
+ "攫": 5176,
5179
+ "啓": 5177,
5180
+ "肺": 5178,
5181
+ "腺": 5179,
5182
+ "坝": 5180,
5183
+ "M": 5181,
5184
+ "磷": 5182,
5185
+ "鼎": 5183,
5186
+ "蛊": 5184,
5187
+ "珑": 5185,
5188
+ "籁": 5186,
5189
+ "瞰": 5187,
5190
+ "較": 5188,
5191
+ "棿": 5189,
5192
+ "蹴": 5190,
5193
+ "県": 5191,
5194
+ "磐": 5192,
5195
+ "濃": 5193,
5196
+ "睦": 5194,
5197
+ "殴": 5195,
5198
+ "螂": 5196,
5199
+ "陨": 5197,
5200
+ "螫": 5198,
5201
+ "偪": 5199,
5202
+ "眺": 5200,
5203
+ "呑": 5201,
5204
+ "渾": 5202,
5205
+ "閑": 5203,
5206
+ "磨": 5204,
5207
+ "捲": 5205,
5208
+ "爐": 5206,
5209
+ "憲": 5207,
5210
+ "暦": 5208,
5211
+ "冢": 5209,
5212
+ "醍": 5210,
5213
+ "醐": 5211,
5214
+ "镰": 5212,
5215
+ "勅": 5213,
5216
+ "颱": 5214,
5217
+ "妆": 5215,
5218
+ "乒": 5216,
5219
+ "乓": 5217,
5220
+ "吕": 5218,
5221
+ "綴": 5219,
5222
+ "载": 5220,
5223
+ "а": 5221,
5224
+ "л": 5222,
5225
+ "о": 5223,
5226
+ "№": 5224,
5227
+ "跺": 5225,
5228
+ "煡": 5226,
5229
+ "壗": 5227,
5230
+ "昨": 5228,
5231
+ "鲛": 5229,
5232
+ "蛰": 5230,
5233
+ "膠": 5231,
5234
+ "歇": 5232,
5235
+ "働": 5233,
5236
+ "叡": 5234,
5237
+ "鉂": 5235,
5238
+ "巳": 5236,
5239
+ "杨": 5237,
5240
+ "蠍": 5238,
5241
+ "裔": 5239,
5242
+ "挺": 5240,
5243
+ "籃": 5241,
5244
+ "積": 5242,
5245
+ "缰": 5243,
5246
+ "跌": 5244,
5247
+ "熏": 5245,
5248
+ "吒": 5246,
5249
+ "粮": 5247,
5250
+ "伺": 5248,
5251
+ "该": 5249,
5252
+ "氓": 5250,
5253
+ "琅": 5251,
5254
+ "狄": 5252,
5255
+ "蟆": 5253,
5256
+ "曰": 5254,
5257
+ "霆": 5255,
5258
+ "倔": 5256,
5259
+ "苛": 5257,
5260
+ "鳶": 5258,
5261
+ "喽": 5259,
5262
+ "既": 5260,
5263
+ "氤": 5261,
5264
+ "氲": 5262,
5265
+ "丰": 5263,
5266
+ "虞": 5264,
5267
+ "ゝ": 5265,
5268
+ "訳": 5266,
5269
+ "且": 5267,
5270
+ "魉": 5268,
5271
+ "堪": 5269,
5272
+ "濫": 5270,
5273
+ "瀕": 5271,
5274
+ "哬": 5272,
5275
+ "泄": 5273,
5276
+ "岗": 5274,
5277
+ "獏": 5275,
5278
+ "攒": 5276,
5279
+ "婶": 5277,
5280
+ "톤": 5278,
5281
+ "嘭": 5279,
5282
+ "◉": 5280,
5283
+ "谴": 5281,
5284
+ "袟": 5282,
5285
+ "袩": 5283,
5286
+ "侑": 5284,
5287
+ "宍": 5285,
5288
+ "飓": 5286,
5289
+ "尉": 5287,
5290
+ "掠": 5288,
5291
+ "簗": 5289,
5292
+ "瘟": 5290,
5293
+ "L": 5291,
5294
+ "弯": 5292,
5295
+ "膛": 5293,
5296
+ "悍": 5294,
5297
+ "咸": 5295,
5298
+ "寧": 5296,
5299
+ "萎": 5297,
5300
+ "缪": 5298,
5301
+ "蚂": 5299,
5302
+ "Ú": 5300,
5303
+ "矩": 5301,
5304
+ "页": 5302,
5305
+ "额": 5303,
5306
+ "搅": 5304,
5307
+ "损": 5305,
5308
+ "瞭": 5306,
5309
+ "谲": 5307,
5310
+ "绸": 5308,
5311
+ "饺": 5309,
5312
+ "濯": 5310,
5313
+ "ส": 5311,
5314
+ "้": 5312,
5315
+ "โ": 5313,
5316
+ "õ": 5314,
5317
+ "여": 5315,
5318
+ "형": 5316,
5319
+ "유": 5317,
5320
+ "와": 5318,
5321
+ "랑": 5319,
5322
+ "타": 5320,
5323
+ "억": 5321,
5324
+ "경": 5322,
5325
+ "약": 5323,
5326
+ "연": 5324,
5327
+ "ì": 5325,
5328
+ "碟": 5326,
5329
+ "惯": 5327,
5330
+ "悖": 5328,
5331
+ "慷": 5329,
5332
+ "斐": 5330,
5333
+ "藻": 5331,
5334
+ "嘟": 5332,
5335
+ "铀": 5333,
5336
+ "穩": 5334,
5337
+ "趟": 5335,
5338
+ "В": 5336,
5339
+ "Ц": 5337,
5340
+ "毯": 5338,
5341
+ "貯": 5339,
5342
+ "冻": 5340,
5343
+ "穫": 5341,
5344
+ "−": 5342,
5345
+ "雇": 5343,
5346
+ "=": 5344,
5347
+ "敦": 5345,
5348
+ "Ä": 5346,
5349
+ "违": 5347,
5350
+ "暫": 5348,
5351
+ "傍": 5349,
5352
+ "屑": 5350,
5353
+ "乢": 5351,
5354
+ "燭": 5352,
5355
+ "谚": 5353,
5356
+ "嫩": 5354,
5357
+ "穏": 5355,
5358
+ "饅": 5356,
5359
+ "嶋": 5357,
5360
+ "刎": 5358,
5361
+ "煬": 5359,
5362
+ "况": 5360,
5363
+ "溪": 5361,
5364
+ "谛": 5362,
5365
+ "鹳": 5363,
5366
+ "厢": 5364,
5367
+ "爬": 5365,
5368
+ "幅": 5366,
5369
+ "특": 5367,
5370
+ "영": 5368,
5371
+ "토": 5369,
5372
+ "곡": 5370,
5373
+ "념": 5371,
5374
+ "셋": 5372,
5375
+ "쇼": 5373,
5376
+ "되": 5374,
5377
+ "순": 5375,
5378
+ "간": 5376,
5379
+ "최": 5377,
5380
+ "후": 5378,
5381
+ "통": 5379,
5382
+ "승": 5380,
5383
+ "픔": 5381,
5384
+ "흔": 5382,
5385
+ "꽃": 5383,
5386
+ "심": 5384,
5387
+ "요": 5385,
5388
+ "당": 5386,
5389
+ "람": 5387,
5390
+ "륵": 5388,
5391
+ "오": 5389,
5392
+ "용": 5390,
5393
+ "린": 5391,
5394
+ "철": 5392,
5395
+ "쇄": 5393,
5396
+ "잔": 5394,
5397
+ "파": 5395,
5398
+ "몸": 5396,
5399
+ "으": 5397,
5400
+ "빛": 5398,
5401
+ "별": 5399,
5402
+ "짝": 5400,
5403
+ "생": 5401,
5404
+ "중": 5402,
5405
+ "칸": 5403,
5406
+ "질": 5404,
5407
+ "없": 5405,
5408
+ "망": 5406,
5409
+ "둠": 5407,
5410
+ "내": 5408,
5411
+ "일": 5409,
5412
+ "쿠": 5410,
5413
+ "조": 5411,
5414
+ "않": 5412,
5415
+ "誅": 5413,
5416
+ "櫙": 5414,
5417
+ "珜": 5415,
5418
+ "窉": 5416,
5419
+ "儷": 5417,
5420
+ "♫": 5418,
5421
+ "彡": 5419,
5422
+ "糬": 5420,
5423
+ "咋": 5421,
5424
+ "橲": 5422,
5425
+ "弽": 5423,
5426
+ "櫉": 5424,
5427
+ "╋": 5425,
5428
+ "棭": 5426,
5429
+ "璨": 5427,
5430
+ "锝": 5428,
5431
+ "湻": 5429,
5432
+ "嵅": 5430,
5433
+ "楁": 5431,
5434
+ "埦": 5432,
5435
+ "ù": 5433,
5436
+ "橭": 5434,
5437
+ "檋": 5435,
5438
+ "櫭": 5436,
5439
+ "ヽ": 5437,
5440
+ "檌": 5438,
5441
+ "艢": 5439,
5442
+ "潞": 5440,
5443
+ "瞧": 5441,
5444
+ "愰": 5442,
5445
+ "橈": 5443,
5446
+ "壈": 5444,
5447
+ "︿": 5445,
5448
+ "琛": 5446,
5449
+ "铔": 5447,
5450
+ "幓": 5448,
5451
+ "綇": 5449,
5452
+ "曞": 5450,
5453
+ "瓩": 5451,
5454
+ "垏": 5452,
5455
+ "揩": 5453,
5456
+ "壘": 5454,
5457
+ "僝": 5455,
5458
+ "笣": 5456,
5459
+ "杈": 5457,
5460
+ "摱": 5458,
5461
+ "噧": 5459,
5462
+ "ㄨ": 5460,
5463
+ "毊": 5461,
5464
+ "槱": 5462,
5465
+ "崥": 5463,
5466
+ "埇": 5464,
5467
+ "熀": 5465,
5468
+ "惤": 5466,
5469
+ "噷": 5467,
5470
+ "獊": 5468,
5471
+ "綉": 5469,
5472
+ "帴": 5470,
5473
+ "紝": 5471,
5474
+ "叏": 5472,
5475
+ "鍎": 5473,
5476
+ "啀": 5474,
5477
+ "皢": 5475,
5478
+ "籡": 5476,
5479
+ "啋": 5477,
5480
+ "闅": 5478,
5481
+ "嬶": 5479,
5482
+ "拻": 5480,
5483
+ "儨": 5481,
5484
+ "宕": 5482,
5485
+ "簝": 5483,
5486
+ "樇": 5484,
5487
+ "濇": 5485,
5488
+ "湜": 5486,
5489
+ "亹": 5487,
5490
+ "朷": 5488,
5491
+ "磋": 5489,
5492
+ "獌": 5490,
5493
+ "姱": 5491,
5494
+ "婏": 5492,
5495
+ "垎": 5493,
5496
+ "乑": 5494,
5497
+ "痌": 5495,
5498
+ "竾": 5496,
5499
+ "枩": 5497,
5500
+ "儴": 5498,
5501
+ "劋": 5499,
5502
+ "湶": 5500,
5503
+ "垐": 5501,
5504
+ "冿": 5502,
5505
+ "敹": 5503,
5506
+ "厓": 5504,
5507
+ "筣": 5505,
5508
+ "埛": 5506,
5509
+ "仩": 5507,
5510
+ "卯": 5508,
5511
+ "湰": 5509,
5512
+ "逗": 5510,
5513
+ "耗": 5511,
5514
+ "辫": 5512,
5515
+ "盂": 5513,
5516
+ "忚": 5514,
5517
+ "澘": 5515,
5518
+ "纰": 5516,
5519
+ "棈": 5517,
5520
+ "憠": 5518,
5521
+ "櫚": 5519,
5522
+ "潏": 5520,
5523
+ "輾": 5521,
5524
+ "載": 5522,
5525
+ "跤": 5523,
5526
+ "囡": 5524,
5527
+ "恁": 5525,
5528
+ "暝": 5526,
5529
+ "佇": 5527,
5530
+ "欱": 5528,
5531
+ "嚒": 5529,
5532
+ "彮": 5530,
5533
+ "遐": 5531,
5534
+ "疙": 5532,
5535
+ "瘩": 5533,
5536
+ "♨": 5534,
5537
+ "皫": 5535,
5538
+ "嫏": 5536,
5539
+ "惕": 5537,
5540
+ "擒": 5538,
5541
+ "腾": 5539,
5542
+ "崽": 5540,
5543
+ "旷": 5541,
5544
+ "账": 5542,
5545
+ "粪": 5543,
5546
+ "礁": 5544,
5547
+ "猬": 5545,
5548
+ "荆": 5546,
5549
+ "羔": 5547,
5550
+ "秉": 5548,
5551
+ "衫": 5549,
5552
+ "骁": 5550,
5553
+ "豁": 5551,
5554
+ "涧": 5552,
5555
+ "渝": 5553,
5556
+ "砸": 5554,
5557
+ "奬": 5555,
5558
+ "肠": 5556,
5559
+ "凑": 5557,
5560
+ "晒": 5558,
5561
+ "绰": 5559,
5562
+ "埴": 5560,
5563
+ "濁": 5561,
5564
+ "癩": 5562,
5565
+ "掗": 5563,
5566
+ "碷": 5564,
5567
+ "甫": 5565,
5568
+ "槺": 5566,
5569
+ "畧": 5567,
5570
+ "潗": 5568,
5571
+ "奭": 5569,
5572
+ "漖": 5570,
5573
+ "晥": 5571,
5574
+ "崪": 5572,
5575
+ "禫": 5573,
5576
+ "櫤": 5574,
5577
+ "吔": 5575,
5578
+ "紦": 5576,
5579
+ "拰": 5577,
5580
+ "煭": 5578,
5581
+ "绗": 5579,
5582
+ "剰": 5580,
5583
+ "炰": 5581,
5584
+ "胯": 5582,
5585
+ "嗘": 5583,
5586
+ "煟": 5584,
5587
+ "胰": 5585,
5588
+ "œ": 5586,
5589
+ "購": 5587,
5590
+ "ー": 5588,
5591
+ "熴": 5589,
5592
+ "协": 5590,
5593
+ "阅": 5591,
5594
+ "酌": 5592,
5595
+ "榇": 5593,
5596
+ "箖": 5594,
5597
+ "嬨": 5595,
5598
+ "柇": 5596,
5599
+ "悊": 5597,
5600
+ "抬": 5598,
5601
+ "晰": 5599,
5602
+ "穬": 5600,
5603
+ "畽": 5601,
5604
+ "⚔": 5602,
5605
+ "️": 5603,
5606
+ "爍": 5604,
5607
+ "弊": 5605,
5608
+ "髏": 5606,
5609
+ "炫": 5607,
5610
+ "佑": 5608,
5611
+ "鲜": 5609,
5612
+ "壓": 5610,
5613
+ "烁": 5611,
5614
+ "坍": 5612,
5615
+ "锥": 5613,
5616
+ "轭": 5614,
5617
+ "禽": 5615,
5618
+ "鎾": 5616,
5619
+ "岃": 5617,
5620
+ "垍": 5618,
5621
+ "匽": 5619,
5622
+ "慉": 5620,
5623
+ "屉": 5621,
5624
+ "儺": 5622,
5625
+ "⓪": 5623,
5626
+ "陋": 5624,
5627
+ "脇": 5625,
5628
+ "倝": 5626,
5629
+ "嘷": 5627,
5630
+ "榊": 5628,
5631
+ "骏": 5629,
5632
+ "鲤": 5630,
5633
+ "毽": 5631,
5634
+ "咩": 5632,
5635
+ "舖": 5633,
5636
+ "掴": 5634,
5637
+ "儯": 5635,
5638
+ "璙": 5636,
5639
+ "倱": 5637,
5640
+ "韭": 5638,
5641
+ "诶": 5639,
5642
+ "廉": 5640,
5643
+ "轍": 5641,
5644
+ "筈": 5642,
5645
+ "櫌": 5643,
5646
+ "洘": 5644,
5647
+ "丗": 5645,
5648
+ "湧": 5646,
5649
+ "倪": 5647,
5650
+ "權": 5648,
5651
+ "宜": 5649,
5652
+ "麾": 5650,
5653
+ "耕": 5651,
5654
+ "剔": 5652,
5655
+ "胚": 5653,
5656
+ "澹": 5654,
5657
+ "倰": 5655,
5658
+ "亪": 5656,
5659
+ "媉": 5657,
5660
+ "懼": 5658,
5661
+ "棍": 5659,
5662
+ "倢": 5660,
5663
+ "砞": 5661,
5664
+ "绐": 5662,
5665
+ "儐": 5663,
5666
+ "涖": 5664,
5667
+ "儛": 5665,
5668
+ "礭": 5666,
5669
+ "韻": 5667,
5670
+ "鞜": 5668,
5671
+ "宻": 5669,
5672
+ "宺": 5670,
5673
+ "孍": 5671,
5674
+ "㈱": 5672,
5675
+ "澪": 5673,
5676
+ "\": 5674,
5677
+ "◇": 5675,
5678
+ "篭": 5676,
5679
+ "È": 5677,
5680
+ "饜": 5678,
5681
+ "绒": 5679,
5682
+ "剗": 5680,
5683
+ "扱": 5681,
5684
+ "撤": 5682,
5685
+ "磺": 5683,
5686
+ "哼": 5684,
5687
+ "矗": 5685,
5688
+ "骼": 5686,
5689
+ "攝": 5687,
5690
+ "敲": 5688,
5691
+ "侖": 5689,
5692
+ "龐": 5690,
5693
+ "掩": 5691,
5694
+ "賈": 5692,
5695
+ "蘋": 5693,
5696
+ "雞": 5694,
5697
+ "獎": 5695,
5698
+ "嚴": 5696,
5699
+ "幣": 5697,
5700
+ "缄": 5698,
5701
+ "溃": 5699,
5702
+ "炙": 5700,
5703
+ "唠": 5701,
5704
+ "叨": 5702,
5705
+ "犸": 5703,
5706
+ "皂": 5704,
5707
+ "秸": 5705,
5708
+ "扬": 5706,
5709
+ "蓑": 5707,
5710
+ "锻": 5708,
5711
+ "獭": 5709,
5712
+ "杆": 5710,
5713
+ "鲭": 5711,
5714
+ "吖": 5712,
5715
+ "瞒": 5713,
5716
+ "滓": 5714,
5717
+ "鱗": 5715,
5718
+ "燔": 5716,
5719
+ "逡": 5717,
5720
+ "椰": 5718,
5721
+ "弘": 5719,
5722
+ "夾": 5720,
5723
+ "丞": 5721,
5724
+ "螞": 5722,
5725
+ "匡": 5723,
5726
+ "諏": 5724,
5727
+ "駿": 5725,
5728
+ "萍": 5726,
5729
+ "释": 5727,
5730
+ "屏": 5728,
5731
+ "刽": 5729,
5732
+ "述": 5730,
5733
+ "掷": 5731,
5734
+ "蘊": 5732,
5735
+ "匿": 5733,
5736
+ "颤": 5734,
5737
+ "枭": 5735,
5738
+ "霁": 5736,
5739
+ "饒": 5737,
5740
+ "恕": 5738,
5741
+ "溝": 5739,
5742
+ "礙": 5740,
5743
+ "掀": 5741,
5744
+ "囮": 5742,
5745
+ "漱": 5743,
5746
+ "椎": 5744,
5747
+ "稍": 5745,
5748
+ "楊": 5746,
5749
+ "潼": 5747,
5750
+ "殷": 5748,
5751
+ "妲": 5749,
5752
+ "槐": 5750,
5753
+ "赂": 5751,
5754
+ "蚕": 5752,
5755
+ "v": 5753,
5756
+ "s": 5754,
5757
+ "挤": 5755,
5758
+ "弈": 5756,
5759
+ "纤": 5757,
5760
+ "脂": 5758,
5761
+ "荑": 5759,
5762
+ "饕": 5760,
5763
+ "餮": 5761,
5764
+ "阙": 5762,
5765
+ "毅": 5763,
5766
+ "税": 5764,
5767
+ "醇": 5765,
5768
+ "㈢": 5766,
5769
+ "犱": 5767,
5770
+ "栽": 5768,
5771
+ "寡": 5769,
5772
+ "蟑": 5770,
5773
+ "踩": 5771,
5774
+ "跷": 5772,
5775
+ "桀": 5773,
5776
+ "骜": 5774,
5777
+ "鞘": 5775,
5778
+ "槃": 5776,
5779
+ "饥": 5777,
5780
+ "熙": 5778,
5781
+ "较": 5779,
5782
+ "︺": 5780,
5783
+ "曘": 5781,
5784
+ "偂": 5782,
5785
+ "骤": 5783,
5786
+ "阋": 5784,
5787
+ "鸳": 5785,
5788
+ "鸯": 5786,
5789
+ "掻": 5787,
5790
+ "噛": 5788,
5791
+ "笠": 5789,
5792
+ "諧": 5790,
5793
+ "謔": 5791,
5794
+ "瀨": 5792,
5795
+ "聳": 5793,
5796
+ "窺": 5794,
5797
+ "窩": 5795,
5798
+ "勘": 5796,
5799
+ "摂": 5797,
5800
+ "芦": 5798,
5801
+ "鋭": 5799,
5802
+ "絹": 5800,
5803
+ "弔": 5801,
5804
+ "鍬": 5802,
5805
+ "刪": 5803,
5806
+ "燉": 5804,
5807
+ "嘣": 5805,
5808
+ "爲": 5806,
5809
+ "拨": 5807,
5810
+ "遼": 5808,
5811
+ "斃": 5809,
5812
+ "晝": 5810,
5813
+ "顛": 5811,
5814
+ "擴": 5812,
5815
+ "渗": 5813,
5816
+ "嵬": 5814,
5817
+ "挵": 5815,
5818
+ "嵒": 5816,
5819
+ "粸": 5817,
5820
+ "幆": 5818,
5821
+ "姭": 5819,
5822
+ "綊": 5820,
5823
+ "嵈": 5821,
5824
+ "О": 5822,
5825
+ "爹": 5823,
5826
+ "魇": 5824,
5827
+ "娼": 5825,
5828
+ "叆": 5826,
5829
+ "宀": 5827,
5830
+ "殣": 5828,
5831
+ "≈": 5829,
5832
+ "扩": 5830,
5833
+ "諍": 5831,
5834
+ "昡": 5832,
5835
+ "尹": 5833,
5836
+ "辅": 5834,
5837
+ "巷": 5835,
5838
+ "喋": 5836,
5839
+ "滲": 5837,
5840
+ "鬆": 5838,
5841
+ "碁": 5839,
5842
+ "篱": 5840,
5843
+ "禹": 5841,
5844
+ "軒": 5842,
5845
+ "轅": 5843,
5846
+ "懵": 5844,
5847
+ "棠": 5845,
5848
+ "儣": 5846,
5849
+ "糾": 5847,
5850
+ "紛": 5848,
5851
+ "蚀": 5849,
5852
+ "亘": 5850,
5853
+ "腊": 5851,
5854
+ "锡": 5852,
5855
+ "橡": 5853,
5856
+ "韁": 5854,
5857
+ "穣": 5855,
5858
+ "蔬": 5856,
5859
+ "驭": 5857,
5860
+ "哑": 5858,
5861
+ "览": 5859,
5862
+ "瞑": 5860,
5863
+ "雕": 5861,
5864
+ "聊": 5862,
5865
+ "藕": 5863,
5866
+ "嗯": 5864,
5867
+ "赠": 5865,
5868
+ "朦": 5866,
5869
+ "醮": 5867,
5870
+ "饵": 5868,
5871
+ "莹": 5869,
5872
+ "敛": 5870,
5873
+ "隕": 5871,
5874
+ "凋": 5872,
5875
+ "屠": 5873,
5876
+ "衷": 5874,
5877
+ "亏": 5875,
5878
+ "嫣": 5876,
5879
+ "衅": 5877,
5880
+ "扁": 5878,
5881
+ "鹊": 5879,
5882
+ "辗": 5880,
5883
+ "迟": 5881,
5884
+ "墩": 5882,
5885
+ "兮": 5883,
5886
+ "螳": 5884,
5887
+ "俯": 5885,
5888
+ "譽": 5886,
5889
+ "敘": 5887,
5890
+ "驕": 5888,
5891
+ "厚": 5889,
5892
+ "遞": 5890,
5893
+ "朽": 5891,
5894
+ "彫": 5892,
5895
+ "苒": 5893,
5896
+ "尴": 5894,
5897
+ "尬": 5895,
5898
+ "陌": 5896,
5899
+ "讶": 5897,
5900
+ "彀": 5898,
5901
+ "氾": 5899,
5902
+ "徴": 5900,
5903
+ "洄": 5901,
5904
+ "驹": 5902,
5905
+ "荊": 5903,
5906
+ "赋": 5904,
5907
+ "羚": 5905,
5908
+ "宪": 5906,
5909
+ "敕": 5907,
5910
+ "楕": 5908,
5911
+ "濱": 5909,
5912
+ "遜": 5910,
5913
+ "侧": 5911,
5914
+ "餘": 5912,
5915
+ "盪": 5913,
5916
+ "漾": 5914,
5917
+ "絽": 5915,
5918
+ "曉": 5916,
5919
+ "寢": 5917,
5920
+ "诊": 5918,
5921
+ "汹": 5919,
5922
+ "详": 5920,
5923
+ "估": 5921,
5924
+ "诹": 5922,
5925
+ "隧": 5923,
5926
+ "缓": 5924,
5927
+ "铐": 5925,
5928
+ "劾": 5926,
5929
+ "諱": 5927,
5930
+ "堺": 5928,
5931
+ "舗": 5929,
5932
+ "́": 5930,
5933
+ "◞": 5931,
5934
+ "౪": 5932,
5935
+ "◟": 5933,
5936
+ "‵": 5934,
5937
+ "挣": 5935,
5938
+ "锌": 5936,
5939
+ "褘": 5937,
5940
+ "衼": 5938,
5941
+ "i": 5939,
5942
+ "販": 5940,
5943
+ "促": 5941,
5944
+ "÷": 5942,
5945
+ "箋": 5943,
5946
+ "聪": 5944,
5947
+ "鍍": 5945,
5948
+ "姥": 5946,
5949
+ "蕪": 5947,
5950
+ "尺": 5948,
5951
+ "牺": 5949,
5952
+ "圃": 5950,
5953
+ "咧": 5951,
5954
+ "仅": 5952,
5955
+ "涤": 5953,
5956
+ "嘲": 5954,
5957
+ "獠": 5955,
5958
+ "旺": 5956,
5959
+ "縦": 5957,
5960
+ "蕭": 5958,
5961
+ "據": 5959,
5962
+ "薛": 5960,
5963
+ "辜": 5961,
5964
+ "债": 5962,
5965
+ "慑": 5963,
5966
+ "拦": 5964,
5967
+ "谬": 5965,
5968
+ "氢": 5966,
5969
+ "₂": 5967,
5970
+ "疤": 5968,
5971
+ "彰": 5969,
5972
+ "酎": 5970,
5973
+ "粧": 5971,
5974
+ "瀾": 5972,
5975
+ "縊": 5973,
5976
+ "゚": 5974,
5977
+ "蚤": 5975,
5978
+ "荐": 5976,
5979
+ "蹭": 5977,
5980
+ "芋": 5978,
5981
+ "扔": 5979,
5982
+ "腌": 5980,
5983
+ "拆": 5981,
5984
+ "เ": 5982,
5985
+ "า": 5983,
5986
+ "ง": 5984,
5987
+ "ู": 5985,
5988
+ "ถ": 5986,
5989
+ "ว": 5987,
5990
+ "ย": 5988,
5991
+ "ฮ": 5989,
5992
+ "ค": 5990,
5993
+ "ุ": 5991,
5994
+ "ะ": 5992,
5995
+ "귀": 5993,
5996
+ "탑": 5994,
5997
+ "습": 5995,
5998
+ "치": 5996,
5999
+ "크": 5997,
6000
+ "새": 5998,
6001
+ "벌": 5999,
6002
+ "위": 6000,
6003
+ "글": 6001,
6004
+ "러": 6002,
6005
+ "브": 6003,
6006
+ "백": 6004,
6007
+ "축": 6005,
6008
+ "신": 6006,
6009
+ "옛": 6007,
6010
+ "발": 6008,
6011
+ "렌": 6009,
6012
+ "강": 6010,
6013
+ "력": 6011,
6014
+ "혜": 6012,
6015
+ "알": 6013,
6016
+ "수": 6014,
6017
+ "찰": 6015,
6018
+ "샐": 6016,
6019
+ "잡": 6017,
6020
+ "샴": 6018,
6021
+ "델": 6019,
6022
+ "회": 6020,
6023
+ "찾": 6021,
6024
+ "뷰": 6022,
6025
+ "행": 6023,
6026
+ "복": 6024,
6027
+ "무": 6025,
6028
+ "호": 6026,
6029
+ "합": 6027,
6030
+ "날": 6028,
6031
+ "개": 6029,
6032
+ "탐": 6030,
6033
+ "단": 6031,
6034
+ "돌": 6032,
6035
+ "엄": 6033,
6036
+ "셜": 6034,
6037
+ "록": 6035,
6038
+ "은": 6036,
6039
+ "표": 6037,
6040
+ "菩": 6038,
6041
+ "酢": 6039,
6042
+ "醬": 6040,
6043
+ "顆": 6041,
6044
+ "颶": 6042,
6045
+ "胤": 6043,
6046
+ "焗": 6044,
6047
+ "鉛": 6045,
6048
+ "嶽": 6046,
6049
+ "咽": 6047,
6050
+ "篠": 6048,
6051
+ "躙": 6049,
6052
+ "腭": 6050,
6053
+ "筥": 6051,
6054
+ "啤": 6052,
6055
+ "堵": 6053,
6056
+ "←": 6054,
6057
+ "鵜": 6055,
6058
+ "茨": 6056,
6059
+ "硯": 6057,
6060
+ "眇": 6058,
6061
+ "瞼": 6059,
6062
+ "茵": 6060,
6063
+ "囀": 6061,
6064
+ "嘯": 6062,
6065
+ "曝": 6063,
6066
+ "洼": 6064,
6067
+ "俐": 6065,
6068
+ "條": 6066,
6069
+ "嚙": 6067,
6070
+ "逻": 6068,
6071
+ "霾": 6069,
6072
+ "仍": 6070,
6073
+ "鞄": 6071,
6074
+ "∴": 6072,
6075
+ "瞌": 6073,
6076
+ "Н": 6074,
6077
+ "Т": 6075,
6078
+ "Ь": 6076,
6079
+ "М": 6077,
6080
+ "С": 6078,
6081
+ "Я": 6079,
6082
+ "錶": 6080,
6083
+ "腳": 6081,
6084
+ "觀": 6082,
6085
+ "攬": 6083,
6086
+ "搗": 6084,
6087
+ "鵝": 6085,
6088
+ "遨": 6086,
6089
+ "黍": 6087,
6090
+ "滞": 6088,
6091
+ "涕": 6089,
6092
+ "紘": 6090,
6093
+ "锭": 6091,
6094
+ "秧": 6092,
6095
+ "匂": 6093,
6096
+ "蔓": 6094,
6097
+ "缠": 6095,
6098
+ "嗝": 6096,
6099
+ "挪": 6097,
6100
+ "噶": 6098,
6101
+ "闵": 6099,
6102
+ "檎": 6100,
6103
+ "櫛": 6101,
6104
+ "Å": 6102,
6105
+ "忒": 6103,
6106
+ "朹": 6104,
6107
+ "飽": 6105,
6108
+ "騷": 6106,
6109
+ "闊": 6107,
6110
+ "囂": 6108,
6111
+ "覿": 6109,
6112
+ "輿": 6110,
6113
+ "鉥": 6111,
6114
+ "粹": 6112,
6115
+ "觐": 6113,
6116
+ "渔": 6114,
6117
+ "濑": 6115,
6118
+ "彝": 6116,
6119
+ "屿": 6117,
6120
+ "骋": 6118,
6121
+ "汀": 6119,
6122
+ "哺": 6120,
6123
+ "駈": 6121,
6124
+ "樅": 6122,
6125
+ "麓": 6123,
6126
+ "鉇": 6124,
6127
+ "諠": 6125,
6128
+ "嶺": 6126,
6129
+ "雉": 6127,
6130
+ "宵": 6128,
6131
+ "截": 6129,
6132
+ "簷": 6130,
6133
+ "廁": 6131,
6134
+ "嚇": 6132,
6135
+ "膚": 6133,
6136
+ "撓": 6134,
6137
+ "俵": 6135,
6138
+ "賄": 6136,
6139
+ "賂": 6137,
6140
+ "珈": 6138,
6141
+ "琲": 6139,
6142
+ "‘": 6140,
6143
+ "骗": 6141,
6144
+ "逞": 6142,
6145
+ "漲": 6143,
6146
+ "媚": 6144,
6147
+ "ホ": 6145,
6148
+ "゚": 6146,
6149
+ "酉": 6147,
6150
+ "槿": 6148,
6151
+ "馴": 6149,
6152
+ "遡": 6150,
6153
+ "鬨": 6151,
6154
+ "拮": 6152,
6155
+ "慣": 6153,
6156
+ "榦": 6154,
6157
+ "詄": 6155,
6158
+ "躁": 6156,
6159
+ "飈": 6157,
6160
+ "阬": 6158,
6161
+ "泀": 6159,
6162
+ "踖": 6160,
6163
+ "吝": 6161,
6164
+ "靂": 6162,
6165
+ "簾": 6163,
6166
+ "贫": 6164,
6167
+ "毙": 6165,
6168
+ "頚": 6166,
6169
+ "箪": 6167,
6170
+ "忤": 6168,
6171
+ "驷": 6169,
6172
+ "庸": 6170,
6173
+ "缭": 6171,
6174
+ "彌": 6172,
6175
+ "樓": 6173,
6176
+ "扼": 6174,
6177
+ "鉢": 6175,
6178
+ "漣": 6176,
6179
+ "濤": 6177,
6180
+ "⑨": 6178,
6181
+ "⑧": 6179,
6182
+ "呉": 6180,
6183
+ "⑩": 6181,
6184
+ "⑦": 6182,
6185
+ "飴": 6183,
6186
+ "└": 6184,
6187
+ "»": 6185,
6188
+ "▒": 6186,
6189
+ "╩": 6187,
6190
+ "╨": 6188,
6191
+ "╔": 6189,
6192
+ "篷": 6190,
6193
+ "嘿": 6191,
6194
+ "唷": 6192,
6195
+ "圓": 6193,
6196
+ "痩": 6194,
6197
+ "嗤": 6195,
6198
+ "裹": 6196,
6199
+ "徙": 6197,
6200
+ "窖": 6198
6201
+ }
snapshots/anifilebert-dapt512-long/vocab.json ADDED
@@ -0,0 +1,6201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "[PAD]": 0,
3
+ "[UNK]": 1,
4
+ "[CLS]": 2,
5
+ "[SEP]": 3,
6
+ " ": 4,
7
+ "[": 5,
8
+ "]": 6,
9
+ "0": 7,
10
+ "a": 8,
11
+ "i": 9,
12
+ "o": 10,
13
+ "1": 11,
14
+ "e": 12,
15
+ "2": 13,
16
+ "A": 14,
17
+ "C": 15,
18
+ "n": 16,
19
+ "u": 17,
20
+ "s": 18,
21
+ "D": 19,
22
+ "t": 20,
23
+ "-": 21,
24
+ "B": 22,
25
+ "S": 23,
26
+ "r": 24,
27
+ "8": 25,
28
+ "P": 26,
29
+ "p": 27,
30
+ "4": 28,
31
+ "H": 29,
32
+ "V": 30,
33
+ "R": 31,
34
+ "k": 32,
35
+ "x": 33,
36
+ "_": 34,
37
+ "h": 35,
38
+ "E": 36,
39
+ "6": 37,
40
+ "M": 38,
41
+ "l": 39,
42
+ "m": 40,
43
+ "7": 41,
44
+ "F": 42,
45
+ "b": 43,
46
+ "G": 44,
47
+ "T": 45,
48
+ "L": 46,
49
+ "c": 47,
50
+ "5": 48,
51
+ "w": 49,
52
+ ".": 50,
53
+ "9": 51,
54
+ "I": 52,
55
+ "d": 53,
56
+ "N": 54,
57
+ "3": 55,
58
+ "(": 56,
59
+ "K": 57,
60
+ ")": 58,
61
+ "g": 59,
62
+ "y": 60,
63
+ "O": 61,
64
+ "W": 62,
65
+ "Y": 63,
66
+ "U": 64,
67
+ "z": 65,
68
+ "X": 66,
69
+ "J": 67,
70
+ "&": 68,
71
+ "!": 69,
72
+ "v": 70,
73
+ "f": 71,
74
+ "j": 72,
75
+ "第": 73,
76
+ "【": 74,
77
+ "】": 75,
78
+ "話": 76,
79
+ "Z": 77,
80
+ "の": 78,
81
+ "ー": 79,
82
+ "ン": 80,
83
+ "「": 81,
84
+ "」": 82,
85
+ "ア": 83,
86
+ ",": 84,
87
+ "幕": 85,
88
+ "字": 86,
89
+ "ル": 87,
90
+ "的": 88,
91
+ "イ": 89,
92
+ "ス": 90,
93
+ "!": 91,
94
+ "组": 92,
95
+ "ニ": 93,
96
+ "メ": 94,
97
+ "ラ": 95,
98
+ "Q": 96,
99
+ "女": 97,
100
+ "ト": 98,
101
+ "季": 99,
102
+ "い": 100,
103
+ "魔": 101,
104
+ "'": 102,
105
+ "リ": 103,
106
+ "之": 104,
107
+ "漫": 105,
108
+ "ド": 106,
109
+ "国": 107,
110
+ "ク": 108,
111
+ "ッ": 109,
112
+ "少": 110,
113
+ "日": 111,
114
+ "王": 112,
115
+ "神": 113,
116
+ "な": 114,
117
+ "ん": 115,
118
+ "人": 116,
119
+ "る": 117,
120
+ "小": 118,
121
+ "ジ": 119,
122
+ "レ": 120,
123
+ "タ": 121,
124
+ "と": 122,
125
+ "新": 123,
126
+ "た": 124,
127
+ "天": 125,
128
+ "简": 126,
129
+ "体": 127,
130
+ "・": 128,
131
+ "×": 129,
132
+ "大": 130,
133
+ "~": 131,
134
+ "话": 132,
135
+ "者": 133,
136
+ "は": 134,
137
+ "マ": 135,
138
+ "カ": 136,
139
+ "か": 137,
140
+ "光": 138,
141
+ "+": 139,
142
+ "世": 140,
143
+ ":": 141,
144
+ "ら": 142,
145
+ "集": 143,
146
+ "界": 144,
147
+ "ロ": 145,
148
+ "し": 146,
149
+ "版": 147,
150
+ "美": 148,
151
+ "キ": 149,
152
+ "语": 150,
153
+ "漏": 151,
154
+ "ズ": 152,
155
+ "勺": 153,
156
+ "子": 154,
157
+ "シ": 155,
158
+ "テ": 156,
159
+ "士": 157,
160
+ "デ": 158,
161
+ "り": 159,
162
+ "オ": 160,
163
+ "双": 161,
164
+ "生": 162,
165
+ "が": 163,
166
+ "&": 164,
167
+ "れ": 165,
168
+ "コ": 166,
169
+ "ガ": 167,
170
+ "ィ": 168,
171
+ "二": 169,
172
+ "特": 170,
173
+ "星": 171,
174
+ "ャ": 172,
175
+ "ち": 173,
176
+ "プ": 174,
177
+ "に": 175,
178
+ "像": 176,
179
+ "法": 177,
180
+ "戦": 178,
181
+ "中": 179,
182
+ "一": 180,
183
+ "て": 181,
184
+ "ま": 182,
185
+ "/": 183,
186
+ "グ": 184,
187
+ "ブ": 185,
188
+ "#": 186,
189
+ "フ": 187,
190
+ "ュ": 188,
191
+ "☆": 189,
192
+ "モ": 190,
193
+ "っ": 191,
194
+ "作": 192,
195
+ "梦": 193,
196
+ "バ": 194,
197
+ "く": 195,
198
+ "さ": 196,
199
+ "ム": 197,
200
+ ";": 198,
201
+ "海": 199,
202
+ "う": 200,
203
+ "ダ": 201,
204
+ "~": 202,
205
+ "域": 203,
206
+ "チ": 204,
207
+ "空": 205,
208
+ "お": 206,
209
+ "ナ": 207,
210
+ "エ": 208,
211
+ "篇": 209,
212
+ "典": 210,
213
+ "q": 211,
214
+ "映": 212,
215
+ "我": 213,
216
+ "·": 214,
217
+ "物": 215,
218
+ "こ": 216,
219
+ "(": 217,
220
+ "龙": 218,
221
+ "異": 219,
222
+ "繁": 220,
223
+ "?": 221,
224
+ "猪": 222,
225
+ "三": 223,
226
+ "番": 224,
227
+ "夜": 225,
228
+ ")": 226,
229
+ "伝": 227,
230
+ "月": 228,
231
+ "超": 229,
232
+ "も": 230,
233
+ "組": 231,
234
+ "动": 232,
235
+ "年": 233,
236
+ "ノ": 234,
237
+ "を": 235,
238
+ "き": 236,
239
+ "@": 237,
240
+ "名": 238,
241
+ "影": 239,
242
+ "家": 240,
243
+ "高": 241,
244
+ "使": 242,
245
+ "あ": 243,
246
+ "不": 244,
247
+ "パ": 245,
248
+ "制": 246,
249
+ "で": 247,
250
+ "ョ": 248,
251
+ "斗": 249,
252
+ "ツ": 250,
253
+ "す": 251,
254
+ "学": 252,
255
+ "み": 253,
256
+ "ウ": 254,
257
+ "怪": 255,
258
+ "地": 256,
259
+ "死": 257,
260
+ "告": 258,
261
+ "忍": 259,
262
+ "ミ": 260,
263
+ "探": 261,
264
+ "ハ": 262,
265
+ "ボ": 263,
266
+ "南": 264,
267
+ "战": 265,
268
+ "火": 266,
269
+ "セ": 267,
270
+ "だ": 268,
271
+ "主": 269,
272
+ "え": 270,
273
+ "花": 271,
274
+ "よ": 272,
275
+ "ゴ": 273,
276
+ "异": 274,
277
+ "Ⅱ": 275,
278
+ "笔": 276,
279
+ "予": 277,
280
+ "サ": 278,
281
+ "上": 279,
282
+ "ゃ": 280,
283
+ "英": 281,
284
+ "啦": 282,
285
+ "柯": 283,
286
+ "蜡": 284,
287
+ "侦": 285,
288
+ "活": 286,
289
+ "語": 287,
290
+ "、": 288,
291
+ "雄": 289,
292
+ "珠": 290,
293
+ "事": 291,
294
+ "仙": 292,
295
+ "體": 293,
296
+ "哆": 294,
297
+ "万": 295,
298
+ "蓝": 296,
299
+ "め": 297,
300
+ "色": 298,
301
+ "つ": 299,
302
+ "想": 300,
303
+ "宝": 301,
304
+ "け": 302,
305
+ "与": 303,
306
+ "説": 304,
307
+ "場": 305,
308
+ "勇": 306,
309
+ "回": 307,
310
+ "犬": 308,
311
+ "本": 309,
312
+ "重": 310,
313
+ "妖": 311,
314
+ "最": 312,
315
+ "太": 313,
316
+ "偶": 314,
317
+ "ァ": 315,
318
+ "心": 316,
319
+ "宇": 317,
320
+ "传": 318,
321
+ "宙": 319,
322
+ "ヤ": 320,
323
+ "贼": 321,
324
+ "明": 322,
325
+ "ビ": 323,
326
+ "編": 324,
327
+ "四": 325,
328
+ "出": 326,
329
+ "ベ": 327,
330
+ "完": 328,
331
+ "ふ": 329,
332
+ "云": 330,
333
+ "ェ": 331,
334
+ "遊": 332,
335
+ "师": 333,
336
+ "来": 334,
337
+ "ゲ": 335,
338
+ "恋": 336,
339
+ "ヴ": 337,
340
+ "「": 338,
341
+ "ソ": 339,
342
+ "」": 340,
343
+ "道": 341,
344
+ "锛": 342,
345
+ "金": 343,
346
+ "そ": 344,
347
+ "ネ": 345,
348
+ "灵": 346,
349
+ "是": 347,
350
+ "わ": 348,
351
+ "风": 349,
352
+ "科": 350,
353
+ "行": 351,
354
+ "精": 352,
355
+ "機": 353,
356
+ "冒": 354,
357
+ "八": 355,
358
+ "成": 356,
359
+ "���": 357,
360
+ "ワ": 358,
361
+ "動": 359,
362
+ "白": 360,
363
+ "叉": 361,
364
+ "百": 362,
365
+ "限": 363,
366
+ "树": 364,
367
+ "会": 365,
368
+ "鬼": 366,
369
+ "记": 367,
370
+ "舞": 368,
371
+ "ザ": 369,
372
+ "樱": 370,
373
+ "黑": 371,
374
+ "ケ": 372,
375
+ "奇": 373,
376
+ "劇": 374,
377
+ "外": 375,
378
+ "ど": 376,
379
+ "愛": 377,
380
+ "目": 378,
381
+ "青": 379,
382
+ "じ": 380,
383
+ "次": 381,
384
+ "清": 382,
385
+ "时": 383,
386
+ "無": 384,
387
+ "期": 385,
388
+ "下": 386,
389
+ "夏": 387,
390
+ "了": 388,
391
+ "球": 389,
392
+ "ひ": 390,
393
+ "記": 391,
394
+ "校": 392,
395
+ "兽": 393,
396
+ "场": 394,
397
+ "妹": 395,
398
+ "ゼ": 396,
399
+ "城": 397,
400
+ "公": 398,
401
+ "彼": 399,
402
+ "ギ": 400,
403
+ "兄": 401,
404
+ "羊": 402,
405
+ "河": 403,
406
+ "ば": 404,
407
+ "冷": 405,
408
+ "手": 406,
409
+ "晨": 407,
410
+ "曦": 408,
411
+ "ろ": 409,
412
+ "爆": 410,
413
+ "男": 411,
414
+ "郎": 412,
415
+ ",": 413,
416
+ "隊": 414,
417
+ "教": 415,
418
+ "剧": 416,
419
+ "雪": 417,
420
+ "有": 418,
421
+ "游": 419,
422
+ "力": 420,
423
+ "前": 421,
424
+ "師": 422,
425
+ "Ⅲ": 423,
426
+ "へ": 424,
427
+ "面": 425,
428
+ "食": 426,
429
+ "狂": 427,
430
+ "。": 428,
431
+ "始": 429,
432
+ "せ": 430,
433
+ "狼": 431,
434
+ "可": 432,
435
+ "全": 433,
436
+ "都": 434,
437
+ "件": 435,
438
+ "族": 436,
439
+ "破": 437,
440
+ "武": 438,
441
+ "末": 439,
442
+ "补": 440,
443
+ "や": 441,
444
+ "在": 442,
445
+ "银": 443,
446
+ "决": 444,
447
+ "銀": 445,
448
+ "无": 446,
449
+ "ぎ": 447,
450
+ "京": 448,
451
+ "未": 449,
452
+ "ペ": 450,
453
+ "戰": 451,
454
+ "強": 452,
455
+ "園": 453,
456
+ "音": 454,
457
+ "和": 455,
458
+ "招": 456,
459
+ "卡": 457,
460
+ "妙": 458,
461
+ "文": 459,
462
+ "騎": 460,
463
+ "台": 461,
464
+ "猫": 462,
465
+ "丸": 463,
466
+ "七": 464,
467
+ "歌": 465,
468
+ "旅": 466,
469
+ "娘": 467,
470
+ "闘": 468,
471
+ "能": 469,
472
+ "弟": 470,
473
+ "★": 471,
474
+ "山": 472,
475
+ "黒": 473,
476
+ "ピ": 474,
477
+ "君": 475,
478
+ "爱": 476,
479
+ "章": 477,
480
+ "風": 478,
481
+ "戏": 479,
482
+ "斯": 480,
483
+ "血": 481,
484
+ "春": 482,
485
+ "銉": 483,
486
+ "部": 484,
487
+ "院": 485,
488
+ "學": 486,
489
+ "聖": 487,
490
+ "ょ": 488,
491
+ "五": 489,
492
+ "机": 490,
493
+ "真": 491,
494
+ "流": 492,
495
+ "改": 493,
496
+ "術": 494,
497
+ "巴": 495,
498
+ "乱": 496,
499
+ "東": 497,
500
+ "募": 498,
501
+ "険": 499,
502
+ "決": 500,
503
+ "画": 501,
504
+ "幻": 502,
505
+ "命": 503,
506
+ "拳": 504,
507
+ "救": 505,
508
+ "代": 506,
509
+ "間": 507,
510
+ "戯": 508,
511
+ "野": 509,
512
+ "自": 510,
513
+ "先": 511,
514
+ "石": 512,
515
+ "翻": 513,
516
+ "巻": 514,
517
+ "十": 515,
518
+ "迷": 516,
519
+ "路": 517,
520
+ "艦": 518,
521
+ "圣": 519,
522
+ "後": 520,
523
+ "剑": 521,
524
+ "市": 522,
525
+ "译": 523,
526
+ "紀": 524,
527
+ "纪": 525,
528
+ "暗": 526,
529
+ "北": 527,
530
+ "常": 528,
531
+ "時": 529,
532
+ "尾": 530,
533
+ "ご": 531,
534
+ "為": 532,
535
+ "ポ": 533,
536
+ "拉": 534,
537
+ "穹": 535,
538
+ "榫": 536,
539
+ "走": 537,
540
+ "踪": 538,
541
+ "ぶ": 539,
542
+ "千": 540,
543
+ "喜": 541,
544
+ "甜": 542,
545
+ "苍": 543,
546
+ "园": 544,
547
+ "所": 545,
548
+ "½": 546,
549
+ "安": 547,
550
+ "港": 548,
551
+ "撃": 549,
552
+ "电": 550,
553
+ "俺": 551,
554
+ "夢": 552,
555
+ "僅": 553,
556
+ "澳": 554,
557
+ "修": 555,
558
+ "矢": 556,
559
+ "室": 557,
560
+ "書": 558,
561
+ "赤": 559,
562
+ "區": 560,
563
+ "欑": 561,
564
+ "险": 562,
565
+ "合": 563,
566
+ "方": 564,
567
+ "様": 565,
568
+ "六": 566,
569
+ "变": 567,
570
+ "ォ": 568,
571
+ "灰": 569,
572
+ "姐": 570,
573
+ "里": 571,
574
+ "彔": 572,
575
+ "與": 573,
576
+ "ヒ": 574,
577
+ "鉄": 575,
578
+ "ゆ": 576,
579
+ "び": 577,
580
+ "実": 578,
581
+ "…": 579,
582
+ "殺": 580,
583
+ "逆": 581,
584
+ "ぐ": 582,
585
+ "元": 583,
586
+ "等": 584,
587
+ "秘": 585,
588
+ "内": 586,
589
+ "終": 587,
590
+ "嵌": 588,
591
+ "転": 589,
592
+ "到": 590,
593
+ "田": 591,
594
+ "姫": 592,
595
+ "僕": 593,
596
+ "雨": 594,
597
+ "孩": 595,
598
+ "草": 596,
599
+ "ず": 597,
600
+ "同": 598,
601
+ "再": 599,
602
+ "码": 600,
603
+ "開": 601,
604
+ "禁": 602,
605
+ "`": 603,
606
+ "原": 604,
607
+ "旋": 605,
608
+ "好": 606,
609
+ "脳": 607,
610
+ "涔": 608,
611
+ "水": 609,
612
+ "巨": 610,
613
+ "堕": 611,
614
+ "笑": 612,
615
+ "思": 613,
616
+ "独": 614,
617
+ "录": 615,
618
+ "配": 616,
619
+ "社": 617,
620
+ "灏": 618,
621
+ "情": 619,
622
+ "桃": 620,
623
+ "骑": 621,
624
+ "贝": 622,
625
+ "老": 623,
626
+ "櫻": 624,
627
+ "知": 625,
628
+ "言": 626,
629
+ "被": 627,
630
+ "身": 628,
631
+ "图": 629,
632
+ "挂": 630,
633
+ "杀": 631,
634
+ "軍": 632,
635
+ "約": 633,
636
+ "炎": 634,
637
+ "牙": 635,
638
+ "理": 636,
639
+ "ホ": 637,
640
+ "閾": 638,
641
+ "龍": 639,
642
+ "獣": 640,
643
+ "眼": 641,
644
+ "見": 642,
645
+ "Ⅰ": 643,
646
+ "む": 644,
647
+ "放": 645,
648
+ "派": 646,
649
+ "瓊": 647,
650
+ "ユ": 648,
651
+ "数": 649,
652
+ "戟": 650,
653
+ "后": 651,
654
+ "曲": 652,
655
+ "変": 653,
656
+ "器": 654,
657
+ "ヘ": 655,
658
+ "境": 656,
659
+ "鋼": 657,
660
+ "魂": 658,
661
+ "剣": 659,
662
+ "形": 660,
663
+ "街": 661,
664
+ "進": 662,
665
+ "恶": 663,
666
+ "落": 664,
667
+ "史": 665,
668
+ "咪": 666,
669
+ "相": 667,
670
+ "意": 668,
671
+ "平": 669,
672
+ "就": 670,
673
+ "克": 671,
674
+ "用": 672,
675
+ "博": 673,
676
+ "攻": 674,
677
+ "飛": 675,
678
+ "発": 676,
679
+ "貓": 677,
680
+ "玩": 678,
681
+ "比": 679,
682
+ "刀": 680,
683
+ "結": 681,
684
+ "要": 682,
685
+ "入": 683,
686
+ "车": 684,
687
+ "虫": 685,
688
+ "化": 686,
689
+ "九": 687,
690
+ "甲": 688,
691
+ "推": 689,
692
+ "育": 690,
693
+ "密": 691,
694
+ "马": 692,
695
+ "悪": 693,
696
+ "头": 694,
697
+ "電": 695,
698
+ "墓": 696,
699
+ "印": 697,
700
+ "ぬ": 698,
701
+ "Ⅴ": 699,
702
+ "红": 700,
703
+ "島": 701,
704
+ "你": 702,
705
+ "義": 703,
706
+ "ぼ": 704,
707
+ "轉": 705,
708
+ "ね": 706,
709
+ "罗": 707,
710
+ "装": 708,
711
+ "邦": 709,
712
+ "戲": 710,
713
+ "吧": 711,
714
+ "竜": 712,
715
+ "莺": 713,
716
+ "対": 714,
717
+ "長": 715,
718
+ "永": 716,
719
+ "疾": 717,
720
+ "べ": 718,
721
+ "劣": 719,
722
+ "悟": 720,
723
+ " ": 721,
724
+ "消": 722,
725
+ "ヨ": 723,
726
+ "通": 724,
727
+ "雷": 725,
728
+ "曹": 726,
729
+ "勝": 727,
730
+ "乌": 728,
731
+ "击": 729,
732
+ "果": 730,
733
+ "{": 731,
734
+ "線": 732,
735
+ "防": 733,
736
+ "德": 734,
737
+ "}": 735,
738
+ "ぞ": 736,
739
+ "哥": 737,
740
+ "长": 738,
741
+ "刃": 739,
742
+ "泣": 740,
743
+ "盗": 741,
744
+ "惑": 742,
745
+ "蹈": 743,
746
+ "冴": 744,
747
+ "気": 745,
748
+ "國": 746,
749
+ "斬": 747,
750
+ "门": 748,
751
+ "福": 749,
752
+ "絶": 750,
753
+ "爸": 751,
754
+ "げ": 752,
755
+ "假": 753,
756
+ "婚": 754,
757
+ "獄": 755,
758
+ "叶": 756,
759
+ "嫁": 757,
760
+ "萌": 758,
761
+ "宠": 759,
762
+ "线": 760,
763
+ "座": 761,
764
+ "飞": 762,
765
+ "江": 763,
766
+ "奴": 764,
767
+ "格": 765,
768
+ "戀": 766,
769
+ "尊": 767,
770
+ "味": 768,
771
+ "鲁": 769,
772
+ "失": 770,
773
+ "童": 771,
774
+ "当": 772,
775
+ "正": 773,
776
+ "今": 774,
777
+ "이": 775,
778
+ "声": 776,
779
+ "暴": 777,
780
+ "恐": 778,
781
+ "利": 779,
782
+ "号": 780,
783
+ "讨": 781,
784
+ "堂": 782,
785
+ "누": 783,
786
+ "야": 784,
787
+ "黄": 785,
788
+ "輪": 786,
789
+ "戝": 787,
790
+ "转": 788,
791
+ "宣": 789,
792
+ "律": 790,
793
+ "进": 791,
794
+ "彩": 792,
795
+ "盟": 793,
796
+ "激": 794,
797
+ "塔": 795,
798
+ "工": 796,
799
+ "间": 797,
800
+ "分": 798,
801
+ "古": 799,
802
+ "森": 800,
803
+ "汉": 801,
804
+ "宮": 802,
805
+ "守": 803,
806
+ "铁": 804,
807
+ "奈": 805,
808
+ "職": 806,
809
+ "’": 807,
810
+ "庭": 808,
811
+ "去": 809,
812
+ "切": 810,
813
+ "嬬": 811,
814
+ "Ⅳ": 812,
815
+ "幽": 813,
816
+ "陽": 814,
817
+ "猎": 815,
818
+ "敵": 816,
819
+ "危": 817,
820
+ "绵": 818,
821
+ "幸": 819,
822
+ "厌": 820,
823
+ "宗": 821,
824
+ ";": 822,
825
+ "儿": 823,
826
+ "初": 824,
827
+ "角": 825,
828
+ "罪": 826,
829
+ "念": 827,
830
+ "噬": 828,
831
+ "帝": 829,
832
+ "♭": 830,
833
+ "深": 831,
834
+ "反": 832,
835
+ "登": 833,
836
+ "快": 834,
837
+ "木": 835,
838
+ "望": 836,
839
+ "♪": 837,
840
+ "网": 838,
841
+ "鎴": 839,
842
+ "弱": 840,
843
+ "对": 841,
844
+ "庚": 842,
845
+ "看": 843,
846
+ "为": 844,
847
+ "波": 845,
848
+ "私": 846,
849
+ "极": 847,
850
+ "仮": 848,
851
+ "林": 849,
852
+ "屋": 850,
853
+ "別": 851,
854
+ "向": 852,
855
+ "ほ": 853,
856
+ "亚": 854,
857
+ "警": 855,
858
+ "兵": 856,
859
+ "母": 857,
860
+ "终": 858,
861
+ "信": 859,
862
+ "个": 860,
863
+ "極": 861,
864
+ "圈": 862,
865
+ "助": 863,
866
+ "干": 864,
867
+ "牌": 865,
868
+ "藏": 866,
869
+ "甘": 867,
870
+ "伊": 868,
871
+ "鬥": 869,
872
+ "ゾ": 870,
873
+ "徒": 871,
874
+ "√": 872,
875
+ "契": 873,
876
+ "湖": 874,
877
+ "运": 875,
878
+ "虎": 876,
879
+ ":": 877,
880
+ "送": 878,
881
+ "滅": 879,
882
+ "定": 880,
883
+ "跳": 881,
884
+ "狐": 882,
885
+ "遠": 883,
886
+ "交": 884,
887
+ "浪": 885,
888
+ "西": 886,
889
+ "羽": 887,
890
+ "翼": 888,
891
+ "丈": 889,
892
+ "涓": 890,
893
+ "《": 891,
894
+ "》": 892,
895
+ "傳": 893,
896
+ "咯": 894,
897
+ "馬": 895,
898
+ "運": 896,
899
+ "ざ": 897,
900
+ "达": 898,
901
+ "村": 899,
902
+ "说": 900,
903
+ "略": 901,
904
+ "孫": 902,
905
+ "莉": 903,
906
+ "姬": 904,
907
+ "加": 905,
908
+ "〜": 906,
909
+ "铛": 907,
910
+ "録": 908,
911
+ "劍": 909,
912
+ "烈": 910,
913
+ "紅": 911,
914
+ "视": 912,
915
+ "钉": 913,
916
+ "姆": 914,
917
+ "起": 915,
918
+ "邪": 916,
919
+ "皿": 917,
920
+ "至": 918,
921
+ "香": 919,
922
+ "争": 920,
923
+ "達": 921,
924
+ "娜": 922,
925
+ "队": 923,
926
+ "结": 924,
927
+ "銈": 925,
928
+ "殑": 926,
929
+ "追": 927,
930
+ "衛": 928,
931
+ "造": 929,
932
+ "來": 930,
933
+ "簿": 931,
934
+ "带": 932,
935
+ "立": 933,
936
+ "毛": 934,
937
+ "打": 935,
938
+ "岛": 936,
939
+ "解": 937,
940
+ "开": 938,
941
+ "突": 939,
942
+ "妮": 940,
943
+ "洛": 941,
944
+ "诸": 942,
945
+ "餐": 943,
946
+ "화": 944,
947
+ "联": 945,
948
+ "管": 946,
949
+ "闇": 947,
950
+ "点": 948,
951
+ "降": 949,
952
+ "業": 950,
953
+ "列": 951,
954
+ "那": 952,
955
+ "呼": 953,
956
+ "響": 954,
957
+ "復": 955,
958
+ "侠": 956,
959
+ "才": 957,
960
+ "棒": 958,
961
+ "片": 959,
962
+ "琪": 960,
963
+ "奥": 961,
964
+ "ぷ": 962,
965
+ "技": 963,
966
+ "『": 964,
967
+ "』": 965,
968
+ "弾": 966,
969
+ "术": 967,
970
+ "怖": 968,
971
+ "蒼": 969,
972
+ "鸣": 970,
973
+ "種": 971,
974
+ "寒": 972,
975
+ "鐨": 973,
976
+ "感": 974,
977
+ "熊": 975,
978
+ "荒": 976,
979
+ "ぁ": 977,
980
+ "사": 978,
981
+ "亜": 979,
982
+ "布": 980,
983
+ "尸": 981,
984
+ "脑": 982,
985
+ "內": 983,
986
+ "燃": 984,
987
+ "喰": 985,
988
+ "赛": 986,
989
+ "存": 987,
990
+ "祖": 988,
991
+ "摇": 989,
992
+ "见": 990,
993
+ "病": 991,
994
+ "酒": 992,
995
+ "凡": 993,
996
+ "挑": 994,
997
+ "虹": 995,
998
+ "競": 996,
999
+ "东": 997,
1000
+ "葉": 998,
1001
+ "阿": 999,
1002
+ "粤": 1000,
1003
+ "巫": 1001,
1004
+ "豪": 1002,
1005
+ "孤": 1003,
1006
+ "陰": 1004,
1007
+ "陣": 1005,
1008
+ "惡": 1006,
1009
+ "乐": 1007,
1010
+ "尼": 1008,
1011
+ "咲": 1009,
1012
+ "ぱ": 1010,
1013
+ "系": 1011,
1014
+ "谜": 1012,
1015
+ "譚": 1013,
1016
+ "襲": 1014,
1017
+ "靈": 1015,
1018
+ "别": 1016,
1019
+ "伍": 1017,
1020
+ "良": 1018,
1021
+ "歡": 1019,
1022
+ "取": 1020,
1023
+ "級": 1021,
1024
+ "悲": 1022,
1025
+ "妻": 1023,
1026
+ "袭": 1024,
1027
+ "帰": 1025,
1028
+ "亡": 1026,
1029
+ "药": 1027,
1030
+ "會": 1028,
1031
+ "熱": 1029,
1032
+ "藍": 1030,
1033
+ "賊": 1031,
1034
+ "客": 1032,
1035
+ "秦": 1033,
1036
+ "将": 1034,
1037
+ "謎": 1035,
1038
+ "車": 1036,
1039
+ "多": 1037,
1040
+ "求": 1038,
1041
+ "抱": 1039,
1042
+ "纯": 1040,
1043
+ "然": 1041,
1044
+ "吞": 1042,
1045
+ "瓒": 1043,
1046
+ "锚": 1044,
1047
+ "何": 1045,
1048
+ "断": 1046,
1049
+ "束": 1047,
1050
+ "鍥": 1048,
1051
+ ".": 1049,
1052
+ "骨": 1050,
1053
+ "祭": 1051,
1054
+ "非": 1052,
1055
+ "鏃": 1053,
1056
+ "发": 1054,
1057
+ "鳥": 1055,
1058
+ "享": 1056,
1059
+ "鍏": 1057,
1060
+ "寄": 1058,
1061
+ "Δ": 1059,
1062
+ "聲": 1060,
1063
+ "近": 1061,
1064
+ "秋": 1062,
1065
+ "民": 1063,
1066
+ "川": 1064,
1067
+ "们": 1065,
1068
+ "銇": 1066,
1069
+ "度": 1067,
1070
+ "露": 1068,
1071
+ "雲": 1069,
1072
+ "驱": 1070,
1073
+ "复": 1071,
1074
+ "绝": 1072,
1075
+ "歁": 1073,
1076
+ "犲": 1074,
1077
+ "书": 1075,
1078
+ "素": 1076,
1079
+ "幼": 1077,
1080
+ "御": 1078,
1081
+ "职": 1079,
1082
+ "租": 1080,
1083
+ "得": 1081,
1084
+ "指": 1082,
1085
+ "鍒": 1083,
1086
+ "宅": 1084,
1087
+ "欢": 1085,
1088
+ "꞉": 1086,
1089
+ "休": 1087,
1090
+ "希": 1088,
1091
+ "底": 1089,
1092
+ "宿": 1090,
1093
+ "噹": 1091,
1094
+ "Ψ": 1092,
1095
+ "-": 1093,
1096
+ "宫": 1094,
1097
+ "現": 1095,
1098
+ "竹": 1096,
1099
+ "拥": 1097,
1100
+ "召": 1098,
1101
+ "弐": 1099,
1102
+ "醒": 1100,
1103
+ "選": 1101,
1104
+ "霸": 1102,
1105
+ "封": 1103,
1106
+ "辰": 1104,
1107
+ "侵": 1105,
1108
+ "政": 1106,
1109
+ "借": 1107,
1110
+ "ぃ": 1108,
1111
+ "輝": 1109,
1112
+ "倒": 1110,
1113
+ "楽": 1111,
1114
+ "吉": 1112,
1115
+ "ゥ": 1113,
1116
+ "兗": 1114,
1117
+ "尚": 1115,
1118
+ "偵": 1116,
1119
+ "也": 1117,
1120
+ "把": 1118,
1121
+ "磁": 1119,
1122
+ "叮": 1120,
1123
+ "透": 1121,
1124
+ "險": 1122,
1125
+ "從": 1123,
1126
+ "問": 1124,
1127
+ "止": 1125,
1128
+ "启": 1126,
1129
+ "治": 1127,
1130
+ "如": 1128,
1131
+ "ぽ": 1129,
1132
+ "榄": 1130,
1133
+ "晚": 1131,
1134
+ "샤": 1132,
1135
+ "级": 1133,
1136
+ "搞": 1134,
1137
+ "庡": 1135,
1138
+ "强": 1136,
1139
+ "啊": 1137,
1140
+ "共": 1138,
1141
+ "铆": 1139,
1142
+ "°": 1140,
1143
+ "肉": 1141,
1144
+ "卒": 1142,
1145
+ "艺": 1143,
1146
+ "医": 1144,
1147
+ "玉": 1145,
1148
+ "首": 1146,
1149
+ "奏": 1147,
1150
+ "―": 1148,
1151
+ "頭": 1149,
1152
+ "性": 1150,
1153
+ "過": 1151,
1154
+ "冰": 1152,
1155
+ "捕": 1153,
1156
+ "銃": 1154,
1157
+ "優": 1155,
1158
+ "尔": 1156,
1159
+ "灼": 1157,
1160
+ "館": 1158,
1161
+ "ゅ": 1159,
1162
+ "霊": 1160,
1163
+ "◆": 1161,
1164
+ "蛋": 1162,
1165
+ "羅": 1163,
1166
+ "员": 1164,
1167
+ "半": 1165,
1168
+ "鹰": 1166,
1169
+ "萨": 1167,
1170
+ "監": 1168,
1171
+ "卫": 1169,
1172
+ "什": 1170,
1173
+ "é": 1171,
1174
+ "演": 1172,
1175
+ "負": 1173,
1176
+ "秒": 1174,
1177
+ "銆": 1175,
1178
+ "关": 1176,
1179
+ "轮": 1177,
1180
+ "班": 1178,
1181
+ "導": 1179,
1182
+ "船": 1180,
1183
+ "吹": 1181,
1184
+ "牧": 1182,
1185
+ "退": 1183,
1186
+ "领": 1184,
1187
+ "這": 1185,
1188
+ "涙": 1186,
1189
+ "络": 1187,
1190
+ "店": 1188,
1191
+ "玗": 1189,
1192
+ "嵃": 1190,
1193
+ "魯": 1191,
1194
+ "ヌ": 1192,
1195
+ "跡": 1193,
1196
+ "兂": 1194,
1197
+ "现": 1195,
1198
+ "篮": 1196,
1199
+ "橘": 1197,
1200
+ "荘": 1198,
1201
+ "丹": 1199,
1202
+ "門": 1200,
1203
+ "遮": 1201,
1204
+ "莲": 1202,
1205
+ "吸": 1203,
1206
+ "某": 1204,
1207
+ "朋": 1205,
1208
+ "夫": 1206,
1209
+ "志": 1207,
1210
+ "皇": 1208,
1211
+ "临": 1209,
1212
+ "直": 1210,
1213
+ "製": 1211,
1214
+ "砂": 1212,
1215
+ "塾": 1213,
1216
+ "冠": 1214,
1217
+ "鲸": 1215,
1218
+ "铺": 1216,
1219
+ "迎": 1217,
1220
+ "々": 1218,
1221
+ "过": 1219,
1222
+ "夈": 1220,
1223
+ "觉": 1221,
1224
+ "願": 1222,
1225
+ "們": 1223,
1226
+ "除": 1224,
1227
+ "镜": 1225,
1228
+ "恒": 1226,
1229
+ "嘘": 1227,
1230
+ "說": 1228,
1231
+ "式": 1229,
1232
+ "歩": 1230,
1233
+ "粉": 1231,
1234
+ "叔": 1232,
1235
+ "衣": 1233,
1236
+ "総": 1234,
1237
+ "唱": 1235,
1238
+ "錄": 1236,
1239
+ "酱": 1237,
1240
+ "待": 1238,
1241
+ "哦": 1239,
1242
+ "晴": 1240,
1243
+ "+": 1241,
1244
+ "父": 1242,
1245
+ "阳": 1243,
1246
+ "服": 1244,
1247
+ "呪": 1245,
1248
+ "而": 1246,
1249
+ "鏄": 1247,
1250
+ "華": 1248,
1251
+ "2": 1249,
1252
+ "刻": 1250,
1253
+ "瀹": 1251,
1254
+ "實": 1252,
1255
+ "于": 1253,
1256
+ "帳": 1254,
1257
+ "以": 1255,
1258
+ "压": 1256,
1259
+ "壊": 1257,
1260
+ "紒": 1258,
1261
+ "架": 1259,
1262
+ "勫": 1260,
1263
+ "唤": 1261,
1264
+ "孔": 1262,
1265
+ "任": 1263,
1266
+ "档": 1264,
1267
+ "若": 1265,
1268
+ "妈": 1266,
1269
+ "閃": 1267,
1270
+ "充": 1268,
1271
+ "历": 1269,
1272
+ "怒": 1270,
1273
+ "儵": 1271,
1274
+ "席": 1272,
1275
+ "員": 1273,
1276
+ "獸": 1274,
1277
+ "憶": 1275,
1278
+ "蘭": 1276,
1279
+ "气": 1277,
1280
+ "號": 1278,
1281
+ "枪": 1279,
1282
+ "町": 1280,
1283
+ "談": 1281,
1284
+ "短": 1282,
1285
+ "乙": 1283,
1286
+ "埋": 1284,
1287
+ "泉": 1285,
1288
+ "樺": 1286,
1289
+ "诛": 1287,
1290
+ "足": 1288,
1291
+ "△": 1289,
1292
+ "故": 1290,
1293
+ "莱": 1291,
1294
+ "辉": 1292,
1295
+ "支": 1293,
1296
+ "零": 1294,
1297
+ "芙": 1295,
1298
+ "執": 1296,
1299
+ "役": 1297,
1300
+ "曼": 1298,
1301
+ "笛": 1299,
1302
+ "逃": 1300,
1303
+ "題": 1301,
1304
+ "替": 1302,
1305
+ "庫": 1303,
1306
+ "淬": 1304,
1307
+ "伴": 1305,
1308
+ "彈": 1306,
1309
+ "收": 1307,
1310
+ "葬": 1308,
1311
+ "只": 1309,
1312
+ "溿": 1310,
1313
+ "敌": 1311,
1314
+ "米": 1312,
1315
+ "速": 1313,
1316
+ "喚": 1314,
1317
+ "對": 1315,
1318
+ "帐": 1316,
1319
+ "舟": 1317,
1320
+ "砕": 1318,
1321
+ "鐵": 1319,
1322
+ "观": 1320,
1323
+ "鏈": 1321,
1324
+ "灯": 1322,
1325
+ "巧": 1323,
1326
+ "祝": 1324,
1327
+ "盾": 1325,
1328
+ "缁": 1326,
1329
+ "団": 1327,
1330
+ "確": 1328,
1331
+ "袨": 1329,
1332
+ "關": 1330,
1333
+ "越": 1331,
1334
+ "嵐": 1332,
1335
+ "企": 1333,
1336
+ "叫": 1334,
1337
+ "样": 1335,
1338
+ "浣": 1336,
1339
+ "织": 1337,
1340
+ "型": 1338,
1341
+ "漂": 1339,
1342
+ "違": 1340,
1343
+ "魚": 1341,
1344
+ "镇": 1342,
1345
+ "認": 1343,
1346
+ "幹": 1344,
1347
+ "錬": 1345,
1348
+ "品": 1346,
1349
+ "覚": 1347,
1350
+ "普": 1348,
1351
+ "鍩": 1349,
1352
+ "戠": 1350,
1353
+ "托": 1351,
1354
+ "议": 1352,
1355
+ "兔": 1353,
1356
+ "講": 1354,
1357
+ "局": 1355,
1358
+ "變": 1356,
1359
+ "她": 1357,
1360
+ "���": 1358,
1361
+ "個": 1359,
1362
+ "朵": 1360,
1363
+ "因": 1361,
1364
+ "腹": 1362,
1365
+ "點": 1363,
1366
+ "由": 1364,
1367
+ "崎": 1365,
1368
+ "咼": 1366,
1369
+ "曳": 1367,
1370
+ "胞": 1368,
1371
+ "満": 1369,
1372
+ "戒": 1370,
1373
+ "拿": 1371,
1374
+ "糕": 1372,
1375
+ "湯": 1373,
1376
+ "桜": 1374,
1377
+ "缘": 1375,
1378
+ "鱼": 1376,
1379
+ "於": 1377,
1380
+ "司": 1378,
1381
+ "智": 1379,
1382
+ "忌": 1380,
1383
+ "很": 1381,
1384
+ "究": 1382,
1385
+ "刚": 1383,
1386
+ "誕": 1384,
1387
+ "寺": 1385,
1388
+ "嬪": 1386,
1389
+ "著": 1387,
1390
+ "釣": 1388,
1391
+ "瀛": 1389,
1392
+ "虚": 1390,
1393
+ "殻": 1391,
1394
+ "蓮": 1392,
1395
+ "乾": 1393,
1396
+ "佸": 1394,
1397
+ "態": 1395,
1398
+ "灌": 1396,
1399
+ "脿": 1397,
1400
+ "靠": 1398,
1401
+ "樂": 1399,
1402
+ "总": 1400,
1403
+ "绻": 1401,
1404
+ "仇": 1402,
1405
+ "胜": 1403,
1406
+ "謀": 1404,
1407
+ "濂": 1405,
1408
+ "混": 1406,
1409
+ "寻": 1407,
1410
+ "純": 1408,
1411
+ "哈": 1409,
1412
+ "仲": 1410,
1413
+ "厜": 1411,
1414
+ "蟲": 1412,
1415
+ "照": 1413,
1416
+ "着": 1414,
1417
+ "营": 1415,
1418
+ "樹": 1416,
1419
+ "忆": 1417,
1420
+ "験": 1418,
1421
+ "远": 1419,
1422
+ "么": 1420,
1423
+ "誰": 1421,
1424
+ "貴": 1422,
1425
+ "細": 1423,
1426
+ "傷": 1424,
1427
+ "裏": 1425,
1428
+ "懂": 1426,
1429
+ "持": 1427,
1430
+ "盖": 1428,
1431
+ "ぇ": 1429,
1432
+ "詩": 1430,
1433
+ "伪": 1431,
1434
+ "杯": 1432,
1435
+ "氷": 1433,
1436
+ "澶": 1434,
1437
+ "歅": 1435,
1438
+ "1": 1436,
1439
+ "兰": 1437,
1440
+ "娌": 1438,
1441
+ "参": 1439,
1442
+ "鐛": 1440,
1443
+ "髪": 1441,
1444
+ "续": 1442,
1445
+ "晶": 1443,
1446
+ "炼": 1444,
1447
+ "熸": 1445,
1448
+ "弹": 1446,
1449
+ "油": 1447,
1450
+ "絆": 1448,
1451
+ "報": 1449,
1452
+ "义": 1450,
1453
+ "槦": 1451,
1454
+ "秀": 1452,
1455
+ "连": 1453,
1456
+ "帖": 1454,
1457
+ "灭": 1455,
1458
+ "螺": 1456,
1459
+ "频": 1457,
1460
+ "奶": 1458,
1461
+ "问": 1459,
1462
+ "排": 1460,
1463
+ "源": 1461,
1464
+ "鐗": 1462,
1465
+ "响": 1463,
1466
+ "試": 1464,
1467
+ "眠": 1465,
1468
+ "谍": 1466,
1469
+ "瑰": 1467,
1470
+ "創": 1468,
1471
+ "丽": 1469,
1472
+ "刺": 1470,
1473
+ "廻": 1471,
1474
+ "處": 1472,
1475
+ "节": 1473,
1476
+ "基": 1474,
1477
+ "呬": 1475,
1478
+ "瓟": 1476,
1479
+ "皮": 1477,
1480
+ "昭": 1478,
1481
+ "禄": 1479,
1482
+ "急": 1480,
1483
+ "鳴": 1481,
1484
+ "团": 1482,
1485
+ "两": 1483,
1486
+ "其": 1484,
1487
+ "”": 1485,
1488
+ "騒": 1486,
1489
+ "蝉": 1487,
1490
+ "暁": 1488,
1491
+ "雫": 1489,
1492
+ "杰": 1490,
1493
+ "馆": 1491,
1494
+ "朝": 1492,
1495
+ "销": 1493,
1496
+ "则": 1494,
1497
+ "察": 1495,
1498
+ "づ": 1496,
1499
+ "飯": 1497,
1500
+ "還": 1498,
1501
+ "ㄦ": 1499,
1502
+ "口": 1500,
1503
+ "从": 1501,
1504
+ "鏡": 1502,
1505
+ "%": 1503,
1506
+ "哄": 1504,
1507
+ "浦": 1505,
1508
+ "珍": 1506,
1509
+ "緋": 1507,
1510
+ "喵": 1508,
1511
+ "做": 1509,
1512
+ "忘": 1510,
1513
+ "约": 1511,
1514
+ "散": 1512,
1515
+ "瞳": 1513,
1516
+ "单": 1514,
1517
+ "索": 1515,
1518
+ "保": 1516,
1519
+ "谎": 1517,
1520
+ "佐": 1518,
1521
+ "雀": 1519,
1522
+ "饭": 1520,
1523
+ "撞": 1521,
1524
+ "偽": 1522,
1525
+ "坤": 1523,
1526
+ "返": 1524,
1527
+ "歋": 1525,
1528
+ "威": 1526,
1529
+ "亞": 1527,
1530
+ "椋": 1528,
1531
+ "傛": 1529,
1532
+ "征": 1530,
1533
+ "屍": 1531,
1534
+ "必": 1532,
1535
+ "值": 1533,
1536
+ "息": 1534,
1537
+ "承": 1535,
1538
+ "脱": 1536,
1539
+ "猿": 1537,
1540
+ "纳": 1538,
1541
+ "冥": 1539,
1542
+ "刑": 1540,
1543
+ "令": 1541,
1544
+ "忔": 1542,
1545
+ "搜": 1543,
1546
+ "浜": 1544,
1547
+ "晫": 1545,
1548
+ "芥": 1546,
1549
+ "尽": 1547,
1550
+ "表": 1548,
1551
+ "潔": 1549,
1552
+ "哠": 1550,
1553
+ "逮": 1551,
1554
+ "x": 1552,
1555
+ "兒": 1553,
1556
+ "松": 1554,
1557
+ "稿": 1555,
1558
+ "嬫": 1556,
1559
+ "沙": 1557,
1560
+ "獨": 1558,
1561
+ "鏉": 1559,
1562
+ "奪": 1560,
1563
+ "寮": 1561,
1564
+ "楀": 1562,
1565
+ "富": 1563,
1566
+ "炮": 1564,
1567
+ "序": 1565,
1568
+ "官": 1566,
1569
+ "麻": 1567,
1570
+ "苦": 1568,
1571
+ "根": 1569,
1572
+ "離": 1570,
1573
+ "狩": 1571,
1574
+ "群": 1572,
1575
+ "犯": 1573,
1576
+ "給": 1574,
1577
+ "ぜ": 1575,
1578
+ "诞": 1576,
1579
+ "у": 1577,
1580
+ "诲": 1578,
1581
+ "堟": 1579,
1582
+ "Ω": 1580,
1583
+ "玄": 1581,
1584
+ "菜": 1582,
1585
+ "闻": 1583,
1586
+ "计": 1584,
1587
+ "絵": 1585,
1588
+ "坂": 1586,
1589
+ "他": 1587,
1590
+ "残": 1588,
1591
+ "房": 1589,
1592
+ "卧": 1590,
1593
+ "应": 1591,
1594
+ "図": 1592,
1595
+ "量": 1593,
1596
+ "塞": 1594,
1597
+ "创": 1595,
1598
+ "柟": 1596,
1599
+ "悠": 1597,
1600
+ "齡": 1598,
1601
+ "涢": 1599,
1602
+ "鑰": 1600,
1603
+ "欏": 1601,
1604
+ "焰": 1602,
1605
+ "谭": 1603,
1606
+ "鯨": 1604,
1607
+ "姊": 1605,
1608
+ "爾": 1606,
1609
+ "煩": 1607,
1610
+ "鐑": 1608,
1611
+ "欧": 1609,
1612
+ "盜": 1610,
1613
+ "糖": 1611,
1614
+ "咒": 1612,
1615
+ "紙": 1613,
1616
+ "綔": 1614,
1617
+ "祵": 1615,
1618
+ "當": 1616,
1619
+ "敗": 1617,
1620
+ "◎": 1618,
1621
+ "鐜": 1619,
1622
+ "❤": 1620,
1623
+ "樿": 1621,
1624
+ "侀": 1622,
1625
+ "烦": 1623,
1626
+ "“": 1624,
1627
+ "井": 1625,
1628
+ "罠": 1626,
1629
+ "狱": 1627,
1630
+ "率": 1628,
1631
+ "鸟": 1629,
1632
+ "燈": 1630,
1633
+ "吗": 1631,
1634
+ "轨": 1632,
1635
+ "洞": 1633,
1636
+ "炽": 1634,
1637
+ "琴": 1635,
1638
+ "徹": 1636,
1639
+ "親": 1637,
1640
+ "冲": 1638,
1641
+ "蜂": 1639,
1642
+ "华": 1640,
1643
+ "擊": 1641,
1644
+ "胎": 1642,
1645
+ "疑": 1643,
1646
+ "编": 1644,
1647
+ "麼": 1645,
1648
+ "注": 1646,
1649
+ "顔": 1647,
1650
+ "魁": 1648,
1651
+ "绘": 1649,
1652
+ "忙": 1650,
1653
+ "邂": 1651,
1654
+ "逅": 1652,
1655
+ "闖": 1653,
1656
+ "种": 1654,
1657
+ "策": 1655,
1658
+ "谷": 1656,
1659
+ "課": 1657,
1660
+ "迴": 1658,
1661
+ "剁": 1659,
1662
+ "热": 1660,
1663
+ "藤": 1661,
1664
+ "划": 1662,
1665
+ "屁": 1663,
1666
+ "厅": 1664,
1667
+ "斿": 1665,
1668
+ "閲": 1666,
1669
+ "欲": 1667,
1670
+ "昏": 1668,
1671
+ "護": 1669,
1672
+ "獵": 1670,
1673
+ "懐": 1671,
1674
+ "類": 1672,
1675
+ "將": 1673,
1676
+ "熺": 1674,
1677
+ "骞": 1675,
1678
+ "兘": 1676,
1679
+ "住": 1677,
1680
+ "闪": 1678,
1681
+ "誘": 1679,
1682
+ "鬱": 1680,
1683
+ "裂": 1681,
1684
+ "受": 1682,
1685
+ "槑": 1683,
1686
+ "乃": 1684,
1687
+ "ヲ": 1685,
1688
+ "颂": 1686,
1689
+ "吃": 1687,
1690
+ "酷": 1688,
1691
+ "练": 1689,
1692
+ "考": 1690,
1693
+ "橋": 1691,
1694
+ "唯": 1692,
1695
+ "坛": 1693,
1696
+ "計": 1694,
1697
+ "A": 1695,
1698
+ "壞": 1696,
1699
+ "천": 1697,
1700
+ "소": 1698,
1701
+ "○": 1699,
1702
+ "占": 1700,
1703
+ "让": 1701,
1704
+ "料": 1702,
1705
+ "沧": 1703,
1706
+ "接": 1704,
1707
+ "蜜": 1705,
1708
+ "丁": 1706,
1709
+ "猛": 1707,
1710
+ "库": 1708,
1711
+ "俏": 1709,
1712
+ "蛛": 1710,
1713
+ "咏": 1711,
1714
+ "狙": 1712,
1715
+ "諜": 1713,
1716
+ "鏅": 1714,
1717
+ "凪": 1715,
1718
+ "业": 1716,
1719
+ "難": 1717,
1720
+ "檬": 1718,
1721
+ "毒": 1719,
1722
+ "听": 1720,
1723
+ "逐": 1721,
1724
+ "聞": 1722,
1725
+ "璃": 1723,
1726
+ "鐢": 1724,
1727
+ "・": 1725,
1728
+ "ñ": 1726,
1729
+ "洣": 1727,
1730
+ "丮": 1728,
1731
+ "麗": 1729,
1732
+ "惧": 1730,
1733
+ "贵": 1731,
1734
+ "植": 1732,
1735
+ "蜘": 1733,
1736
+ "昆": 1734,
1737
+ "<": 1735,
1738
+ ">": 1736,
1739
+ "続": 1737,
1740
+ "帽": 1738,
1741
+ "旀": 1739,
1742
+ "硶": 1740,
1743
+ "辛": 1741,
1744
+ "曟": 1742,
1745
+ "拾": 1743,
1746
+ "녀": 1744,
1747
+ "티": 1745,
1748
+ "依": 1746,
1749
+ "伐": 1747,
1750
+ "找": 1748,
1751
+ "營": 1749,
1752
+ "肌": 1750,
1753
+ "売": 1751,
1754
+ "歍": 1752,
1755
+ "甦": 1753,
1756
+ "네": 1754,
1757
+ "雙": 1755,
1758
+ "議": 1756,
1759
+ "题": 1757,
1760
+ "氣": 1758,
1761
+ "楂": 1759,
1762
+ "候": 1760,
1763
+ "摩": 1761,
1764
+ "領": 1762,
1765
+ "萊": 1763,
1766
+ "♡": 1764,
1767
+ "宰": 1765,
1768
+ "鐩": 1766,
1769
+ "杞": 1767,
1770
+ "勾": 1768,
1771
+ "婆": 1769,
1772
+ "Ⅵ": 1770,
1773
+ "憂": 1771,
1774
+ "负": 1772,
1775
+ "站": 1773,
1776
+ "姩": 1774,
1777
+ "揪": 1775,
1778
+ "洋": 1776,
1779
+ "景": 1777,
1780
+ "浠": 1778,
1781
+ "温": 1779,
1782
+ "蟹": 1780,
1783
+ "連": 1781,
1784
+ "庄": 1782,
1785
+ "廊": 1783,
1786
+ "欳": 1784,
1787
+ "夋": 1785,
1788
+ "滄": 1786,
1789
+ "頌": 1787,
1790
+ "偢": 1788,
1791
+ "獻": 1789,
1792
+ "愿": 1790,
1793
+ "殿": 1791,
1794
+ "土": 1792,
1795
+ "振": 1793,
1796
+ "迫": 1794,
1797
+ "渊": 1795,
1798
+ "箱": 1796,
1799
+ "似": 1797,
1800
+ "烧": 1798,
1801
+ "搖": 1799,
1802
+ "—": 1800,
1803
+ "护": 1801,
1804
+ "楄": 1802,
1805
+ "賭": 1803,
1806
+ "駆": 1804,
1807
+ "横": 1805,
1808
+ "茅": 1806,
1809
+ "算": 1807,
1810
+ "夕": 1808,
1811
+ "袣": 1809,
1812
+ "擅": 1810,
1813
+ "佺": 1811,
1814
+ "迹": 1812,
1815
+ "泽": 1813,
1816
+ "練": 1814,
1817
+ "遇": 1815,
1818
+ "够": 1816,
1819
+ "鋒": 1817,
1820
+ "賽": 1818,
1821
+ "状": 1819,
1822
+ "観": 1820,
1823
+ "彻": 1821,
1824
+ "團": 1822,
1825
+ "殊": 1823,
1826
+ "梅": 1824,
1827
+ "卜": 1825,
1828
+ "扮": 1826,
1829
+ "瀵": 1827,
1830
+ "绁": 1828,
1831
+ "豚": 1829,
1832
+ "鷹": 1830,
1833
+ "柠": 1831,
1834
+ "寿": 1832,
1835
+ "匠": 1833,
1836
+ "芽": 1834,
1837
+ "則": 1835,
1838
+ "関": 1836,
1839
+ "ต": 1837,
1840
+ "น": 1838,
1841
+ "ท": 1839,
1842
+ "่": 1840,
1843
+ "弄": 1841,
1844
+ "滿": 1842,
1845
+ "往": 1843,
1846
+ "拓": 1844,
1847
+ "訓": 1845,
1848
+ "锋": 1846,
1849
+ "赫": 1847,
1850
+ "慬": 1848,
1851
+ "陸": 1849,
1852
+ "氏": 1850,
1853
+ "อ": 1851,
1854
+ "ี": 1852,
1855
+ "畫": 1853,
1856
+ "壁": 1854,
1857
+ "涼": 1855,
1858
+ "臨": 1856,
1859
+ "仕": 1857,
1860
+ "栫": 1858,
1861
+ "亲": 1859,
1862
+ "囧": 1860,
1863
+ "预": 1861,
1864
+ "惨": 1862,
1865
+ "轴": 1863,
1866
+ "冬": 1864,
1867
+ "歲": 1865,
1868
+ "刊": 1866,
1869
+ "鍔": 1867,
1870
+ "鎮": 1868,
1871
+ "娴": 1869,
1872
+ "粍": 1870,
1873
+ "久": 1871,
1874
+ "步": 1872,
1875
+ "訪": 1873,
1876
+ "赝": 1874,
1877
+ "翔": 1875,
1878
+ "汽": 1876,
1879
+ "鼠": 1877,
1880
+ "¡": 1878,
1881
+ "錯": 1879,
1882
+ "岁": 1880,
1883
+ "誤": 1881,
1884
+ "驯": 1882,
1885
+ "恰": 1883,
1886
+ "栈": 1884,
1887
+ "兼": 1885,
1888
+ "沈": 1886,
1889
+ "仁": 1887,
1890
+ "满": 1888,
1891
+ "鬪": 1889,
1892
+ "黃": 1890,
1893
+ "提": 1891,
1894
+ "射": 1892,
1895
+ "紵": 1893,
1896
+ "驅": 1894,
1897
+ "懈": 1895,
1898
+ "崩": 1896,
1899
+ "拍": 1897,
1900
+ "具": 1898,
1901
+ "協": 1899,
1902
+ "┍": 1900,
1903
+ "掉": 1901,
1904
+ "瞬": 1902,
1905
+ "阴": 1903,
1906
+ "鍙": 1904,
1907
+ "右": 1905,
1908
+ "焔": 1906,
1909
+ "怣": 1907,
1910
+ "泳": 1908,
1911
+ "標": 1909,
1912
+ "棩": 1910,
1913
+ "换": 1911,
1914
+ "筋": 1912,
1915
+ "蕾": 1913,
1916
+ "嫌": 1914,
1917
+ "礼": 1915,
1918
+ "誓": 1916,
1919
+ "习": 1917,
1920
+ "党": 1918,
1921
+ "胖": 1919,
1922
+ "佹": 1920,
1923
+ "遭": 1921,
1924
+ "杜": 1922,
1925
+ "縛": 1923,
1926
+ "罐": 1924,
1927
+ "伏": 1925,
1928
+ "灄": 1926,
1929
+ "儚": 1927,
1930
+ "渚": 1928,
1931
+ "〈": 1929,
1932
+ "〉": 1930,
1933
+ "狗": 1931,
1934
+ "袠": 1932,
1935
+ "養": 1933,
1936
+ "鐧": 1934,
1937
+ "裡": 1935,
1938
+ "辨": 1936,
1939
+ "示": 1937,
1940
+ "案": 1938,
1941
+ "嫳": 1939,
1942
+ "居": 1940,
1943
+ "包": 1941,
1944
+ "逢": 1942,
1945
+ "滚": 1943,
1946
+ "哀": 1944,
1947
+ "糊": 1945,
1948
+ "更": 1946,
1949
+ "璐": 1947,
1950
+ "鐖": 1948,
1951
+ "低": 1949,
1952
+ "戮": 1950,
1953
+ "補": 1951,
1954
+ "铃": 1952,
1955
+ "択": 1953,
1956
+ "煌": 1954,
1957
+ "廢": 1955,
1958
+ "坏": 1956,
1959
+ "弦": 1957,
1960
+ "骸": 1958,
1961
+ "瓙": 1959,
1962
+ "輩": 1960,
1963
+ "标": 1961,
1964
+ "圆": 1962,
1965
+ "珊": 1963,
1966
+ "瑚": 1964,
1967
+ "讐": 1965,
1968
+ "虛": 1966,
1969
+ "绯": 1967,
1970
+ "屈": 1968,
1971
+ "曜": 1969,
1972
+ "军": 1970,
1973
+ "跨": 1971,
1974
+ "板": 1972,
1975
+ "肩": 1973,
1976
+ "聽": 1974,
1977
+ "陷": 1975,
1978
+ "6": 1976,
1979
+ "闷": 1977,
1980
+ "ぺ": 1978,
1981
+ "菓": 1979,
1982
+ "伤": 1980,
1983
+ "供": 1981,
1984
+ "稲": 1982,
1985
+ "搭": 1983,
1986
+ "庢": 1984,
1987
+ "姉": 1985,
1988
+ "跑": 1986,
1989
+ "増": 1987,
1990
+ "伃": 1988,
1991
+ "亂": 1989,
1992
+ "慘": 1990,
1993
+ "但": 1991,
1994
+ "爷": 1992,
1995
+ "續": 1993,
1996
+ "耳": 1994,
1997
+ "钻": 1995,
1998
+ "鎧": 1996,
1999
+ "条": 1997,
2000
+ "伒": 1998,
2001
+ "億": 1999,
2002
+ "铠": 2000,
2003
+ "周": 2001,
2004
+ "给": 2002,
2005
+ "械": 2003,
2006
+ "选": 2004,
2007
+ "弁": 2005,
2008
+ "倉": 2006,
2009
+ "詠": 2007,
2010
+ "´": 2008,
2011
+ "愮": 2009,
2012
+ "瓶": 2010,
2013
+ "雅": 2011,
2014
+ "單": 2012,
2015
+ "袋": 2013,
2016
+ "勯": 2014,
2017
+ "鍐": 2015,
2018
+ "珨": 2016,
2019
+ "瓦": 2017,
2020
+ "眾": 2018,
2021
+ "發": 2019,
2022
+ "舰": 2020,
2023
+ "养": 2021,
2024
+ "各": 2022,
2025
+ "塵": 2023,
2026
+ "壽": 2024,
2027
+ "袪": 2025,
2028
+ "檔": 2026,
2029
+ "╃": 2027,
2030
+ "諾": 2028,
2031
+ "鍓": 2029,
2032
+ "鍖": 2030,
2033
+ "惊": 2031,
2034
+ "苏": 2032,
2035
+ "尖": 2033,
2036
+ "边": 2034,
2037
+ "遺": 2035,
2038
+ "戸": 2036,
2039
+ "广": 2037,
2040
+ "吻": 2038,
2041
+ "桔": 2039,
2042
+ "梗": 2040,
2043
+ "5": 2041,
2044
+ "垷": 2042,
2045
+ "麒": 2043,
2046
+ "麟": 2044,
2047
+ "陀": 2045,
2048
+ "習": 2046,
2049
+ "写": 2047,
2050
+ "討": 2048,
2051
+ "碧": 2049,
2052
+ "勬": 2050,
2053
+ "榛": 2051,
2054
+ "姑": 2052,
2055
+ "娅": 2053,
2056
+ "僧": 2054,
2057
+ "哇": 2055,
2058
+ "踏": 2056,
2059
+ "旦": 2057,
2060
+ "儶": 2058,
2061
+ "哲": 2059,
2062
+ "⁉": 2060,
2063
+ "袦": 2061,
2064
+ "播": 2062,
2065
+ "易": 2063,
2066
+ "抄": 2064,
2067
+ "升": 2065,
2068
+ "節": 2066,
2069
+ "伙": 2067,
2070
+ "勪": 2068,
2071
+ "ó": 2069,
2072
+ "勮": 2070,
2073
+ "傜": 2071,
2074
+ "辣": 2072,
2075
+ "搬": 2073,
2076
+ "継": 2074,
2077
+ "准": 2075,
2078
+ "円": 2076,
2079
+ "证": 2077,
2080
+ "嬢": 2078,
2081
+ "腐": 2079,
2082
+ "付": 2080,
2083
+ "薇": 2081,
2084
+ "眷": 2082,
2085
+ "畜": 2083,
2086
+ "爵": 2084,
2087
+ "便": 2085,
2088
+ "庨": 2086,
2089
+ "鍦": 2087,
2090
+ "梾": 2088,
2091
+ "脚": 2089,
2092
+ "途": 2090,
2093
+ "驰": 2091,
2094
+ "黎": 2092,
2095
+ "迪": 2093,
2096
+ "革": 2094,
2097
+ "慎": 2095,
2098
+ "染": 2096,
2099
+ "頃": 2097,
2100
+ "鹅": 2098,
2101
+ "賢": 2099,
2102
+ "插": 2100,
2103
+ "早": 2101,
2104
+ "鎭": 2102,
2105
+ "冨": 2103,
2106
+ "闆": 2104,
2107
+ "尋": 2105,
2108
+ "鵑": 2106,
2109
+ "箷": 2107,
2110
+ "控": 2108,
2111
+ "蛇": 2109,
2112
+ "吾": 2110,
2113
+ "溅": 2111,
2114
+ "没": 2112,
2115
+ "呆": 2113,
2116
+ "吀": 2114,
2117
+ "引": 2115,
2118
+ "厨": 2116,
2119
+ "傑": 2117,
2120
+ "豆": 2118,
2121
+ "ö": 2119,
2122
+ "锦": 2120,
2123
+ "袧": 2121,
2124
+ "又": 2122,
2125
+ "统": 2123,
2126
+ "紶": 2124,
2127
+ "嬩": 2125,
2128
+ "嶈": 2126,
2129
+ "展": 2127,
2130
+ "屬": 2128,
2131
+ "否": 2129,
2132
+ "烏": 2130,
2133
+ "♯": 2131,
2134
+ "и": 2132,
2135
+ "左": 2133,
2136
+ "鈥": 2134,
2137
+ "鎷": 2135,
2138
+ "敓": 2136,
2139
+ "藥": 2137,
2140
+ "┖": 2138,
2141
+ "姣": 2139,
2142
+ "拔": 2140,
2143
+ "娃": 2141,
2144
+ "般": 2142,
2145
+ "遗": 2143,
2146
+ "婕": 2144,
2147
+ "預": 2145,
2148
+ "折": 2146,
2149
+ "概": 2147,
2150
+ "差": 2148,
2151
+ "怕": 2149,
2152
+ "谁": 2150,
2153
+ "模": 2151,
2154
+ "蝶": 2152,
2155
+ "溫": 2153,
2156
+ "害": 2154,
2157
+ "椼": 2155,
2158
+ "夺": 2156,
2159
+ "潜": 2157,
2160
+ "蔵": 2158,
2161
+ "泡": 2159,
2162
+ "→": 2160,
2163
+ "|": 2161,
2164
+ "凍": 2162,
2165
+ "의": 2163,
2166
+ "覇": 2164,
2167
+ "涚": 2165,
2168
+ "难": 2166,
2169
+ "兆": 2167,
2170
+ "位": 2168,
2171
+ "頂": 2169,
2172
+ "陆": 2170,
2173
+ "雾": 2171,
2174
+ "肝": 2172,
2175
+ "抜": 2173,
2176
+ "辽": 2174,
2177
+ "ぴ": 2175,
2178
+ "岩": 2176,
2179
+ "紗": 2177,
2180
+ "墍": 2178,
2181
+ "珂": 2179,
2182
+ "湅": 2180,
2183
+ "獲": 2181,
2184
+ "樣": 2182,
2185
+ "乎": 2183,
2186
+ "鑸": 2184,
2187
+ "绑": 2185,
2188
+ "离": 2186,
2189
+ "悆": 2187,
2190
+ "呮": 2188,
2191
+ "悎": 2189,
2192
+ "诗": 2190,
2193
+ "疯": 2191,
2194
+ "摵": 2192,
2195
+ "祫": 2193,
2196
+ "緊": 2194,
2197
+ "際": 2195,
2198
+ " ": 2196,
2199
+ "耀": 2197,
2200
+ "澜": 2198,
2201
+ "溯": 2199,
2202
+ "視": 2200,
2203
+ "衍": 2201,
2204
+ "炶": 2202,
2205
+ "†": 2203,
2206
+ "岚": 2204,
2207
+ "鍋": 2205,
2208
+ "沢": 2206,
2209
+ "钱": 2207,
2210
+ "柉": 2208,
2211
+ "犻": 2209,
2212
+ "邁": 2210,
2213
+ "凶": 2211,
2214
+ "滑": 2212,
2215
+ "斩": 2213,
2216
+ "投": 2214,
2217
+ "=": 2215,
2218
+ "堀": 2216,
2219
+ "畅": 2217,
2220
+ "ヱ": 2218,
2221
+ "勉": 2219,
2222
+ "呴": 2220,
2223
+ "係": 2221,
2224
+ "纱": 2222,
2225
+ "咖": 2223,
2226
+ "障": 2224,
2227
+ "腿": 2225,
2228
+ "勭": 2226,
2229
+ "摸": 2227,
2230
+ "沉": 2228,
2231
+ "癒": 2229,
2232
+ "糞": 2230,
2233
+ "緣": 2231,
2234
+ "缇": 2232,
2235
+ "網": 2233,
2236
+ "务": 2234,
2237
+ "谈": 2235,
2238
+ "择": 2236,
2239
+ "弓": 2237,
2240
+ "绲": 2238,
2241
+ "札": 2239,
2242
+ "唄": 2240,
2243
+ "赐": 2241,
2244
+ "欴": 2242,
2245
+ "堬": 2243,
2246
+ "7": 2244,
2247
+ "Ζ": 2245,
2248
+ "鄰": 2246,
2249
+ "瑗": 2247,
2250
+ "椿": 2248,
2251
+ "鍘": 2249,
2252
+ "織": 2250,
2253
+ "默": 2251,
2254
+ "寶": 2252,
2255
+ "隨": 2253,
2256
+ "撿": 2254,
2257
+ "查": 2255,
2258
+ "试": 2256,
2259
+ "症": 2257,
2260
+ "归": 2258,
2261
+ "处": 2259,
2262
+ "哉": 2260,
2263
+ "収": 2261,
2264
+ "衝": 2262,
2265
+ "辈": 2263,
2266
+ "納": 2264,
2267
+ "背": 2265,
2268
+ "簮": 2266,
2269
+ "隠": 2267,
2270
+ "偣": 2268,
2271
+ "衰": 2269,
2272
+ "容": 2270,
2273
+ "端": 2271,
2274
+ "微": 2272,
2275
+ "枫": 2273,
2276
+ "悼": 2274,
2277
+ "仔": 2275,
2278
+ "╁": 2276,
2279
+ "呭": 2277,
2280
+ "昂": 2278,
2281
+ "胆": 2279,
2282
+ "旧": 2280,
2283
+ "忧": 2281,
2284
+ "研": 2282,
2285
+ "霧": 2283,
2286
+ "讲": 2284,
2287
+ "牛": 2285,
2288
+ "核": 2286,
2289
+ "μ": 2287,
2290
+ "茶": 2288,
2291
+ "乗": 2289,
2292
+ "*": 2290,
2293
+ "嶅": 2291,
2294
+ "丝": 2292,
2295
+ "捉": 2293,
2296
+ "棺": 2294,
2297
+ "穿": 2295,
2298
+ "丘": 2296,
2299
+ "毁": 2297,
2300
+ "宴": 2298,
2301
+ "奖": 2299,
2302
+ "整": 2300,
2303
+ "艇": 2301,
2304
+ "叛": 2302,
2305
+ "準": 2303,
2306
+ "窟": 2304,
2307
+ "段": 2305,
2308
+ "艾": 2306,
2309
+ "弥": 2307,
2310
+ "厄": 2308,
2311
+ "絕": 2309,
2312
+ "槸": 2310,
2313
+ "沒": 2311,
2314
+ "隱": 2312,
2315
+ "夥": 2313,
2316
+ "扭": 2314,
2317
+ "紫": 2315,
2318
+ "雏": 2316,
2319
+ "静": 2317,
2320
+ "痛": 2318,
2321
+ "晖": 2319,
2322
+ "軌": 2320,
2323
+ "符": 2321,
2324
+ "黙": 2322,
2325
+ "震": 2323,
2326
+ "拟": 2324,
2327
+ "⁄": 2325,
2328
+ "鑽": 2326,
2329
+ "囬": 2327,
2330
+ "凰": 2328,
2331
+ "淵": 2329,
2332
+ "侊": 2330,
2333
+ "奔": 2331,
2334
+ "捏": 2332,
2335
+ "佬": 2333,
2336
+ "报": 2334,
2337
+ "介": 2335,
2338
+ "呂": 2336,
2339
+ "祈": 2337,
2340
+ "敾": 2338,
2341
+ "袖": 2339,
2342
+ "塚": 2340,
2343
+ "败": 2341,
2344
+ "伽": 2342,
2345
+ "悬": 2343,
2346
+ "潰": 2344,
2347
+ "午": 2345,
2348
+ "嗎": 2346,
2349
+ "摆": 2347,
2350
+ "濡": 2348,
2351
+ "烤": 2349,
2352
+ "玛": 2350,
2353
+ "泊": 2351,
2354
+ "適": 2352,
2355
+ "爺": 2353,
2356
+ "适": 2354,
2357
+ "掌": 2355,
2358
+ "毎": 2356,
2359
+ "缩": 2357,
2360
+ "災": 2358,
2361
+ "с": 2359,
2362
+ "钢": 2360,
2363
+ "扎": 2361,
2364
+ "朱": 2362,
2365
+ "検": 2363,
2366
+ "蒂": 2364,
2367
+ "区": 2365,
2368
+ "潮": 2366,
2369
+ "伓": 2367,
2370
+ "壒": 2368,
2371
+ "斾": 2369,
2372
+ "健": 2370,
2373
+ "笺": 2371,
2374
+ "–": 2372,
2375
+ "蘇": 2373,
2376
+ "还": 2374,
2377
+ "鐙": 2375,
2378
+ "挨": 2376,
2379
+ "碍": 2377,
2380
+ "鍝": 2378,
2381
+ "舵": 2379,
2382
+ "︽": 2380,
2383
+ "瓢": 2381,
2384
+ "哃": 2382,
2385
+ "隶": 2383,
2386
+ "癖": 2384,
2387
+ "庶": 2385,
2388
+ "緒": 2386,
2389
+ "郷": 2387,
2390
+ "憑": 2388,
2391
+ "憧": 2389,
2392
+ "經": 2390,
2393
+ "峰": 2391,
2394
+ "撲": 2392,
2395
+ "鍊": 2393,
2396
+ "抗": 2394,
2397
+ "航": 2395,
2398
+ "媽": 2396,
2399
+ "嘆": 2397,
2400
+ "凯": 2398,
2401
+ "②": 2399,
2402
+ "构": 2400,
2403
+ "焼": 2401,
2404
+ "挙": 2402,
2405
+ "栖": 2403,
2406
+ "煶": 2404,
2407
+ "參": 2405,
2408
+ "届": 2406,
2409
+ "功": 2407,
2410
+ "興": 2408,
2411
+ "調": 2409,
2412
+ "培": 2410,
2413
+ "盡": 2411,
2414
+ "鹿": 2412,
2415
+ "悩": 2413,
2416
+ "翠": 2414,
2417
+ "裁": 2415,
2418
+ "辞": 2416,
2419
+ "卷": 2417,
2420
+ "犵": 2418,
2421
+ "鞠": 2419,
2422
+ "仆": 2420,
2423
+ "櫧": 2421,
2424
+ "애": 2422,
2425
+ "니": 2423,
2426
+ "제": 2424,
2427
+ "閒": 2425,
2428
+ "農": 2426,
2429
+ "渣": 2427,
2430
+ "戶": 2428,
2431
+ "統": 2429,
2432
+ "炲": 2430,
2433
+ "艂": 2431,
2434
+ "鍗": 2432,
2435
+ "‧": 2433,
2436
+ "浴": 2434,
2437
+ "泥": 2435,
2438
+ "绔": 2436,
2439
+ "飘": 2437,
2440
+ "绶": 2438,
2441
+ "聚": 2439,
2442
+ "实": 2440,
2443
+ "程": 2441,
2444
+ "庵": 2442,
2445
+ "張": 2443,
2446
+ "熟": 2444,
2447
+ "魅": 2445,
2448
+ "忛": 2446,
2449
+ "曠": 2447,
2450
+ "骄": 2448,
2451
+ "^": 2449,
2452
+ "槌": 2450,
2453
+ "祦": 2451,
2454
+ "‼": 2452,
2455
+ "坑": 2453,
2456
+ "宽": 2454,
2457
+ "笁": 2455,
2458
+ "厭": 2456,
2459
+ "怎": 2457,
2460
+ "設": 2458,
2461
+ "稻": 2459,
2462
+ "贸": 2460,
2463
+ "擁": 2461,
2464
+ "鎺": 2462,
2465
+ "貳": 2463,
2466
+ "屻": 2464,
2467
+ "邊": 2465,
2468
+ "粵": 2466,
2469
+ "況": 2467,
2470
+ "淋": 2468,
2471
+ "钟": 2469,
2472
+ "涂": 2470,
2473
+ "鸦": 2471,
2474
+ "驚": 2472,
2475
+ "豹": 2473,
2476
+ "#": 2474,
2477
+ "蟬": 2475,
2478
+ "燂": 2476,
2479
+ "偗": 2477,
2480
+ "嶃": 2478,
2481
+ "塑": 2479,
2482
+ "偦": 2480,
2483
+ "偝": 2481,
2484
+ "崱": 2482,
2485
+ "池": 2483,
2486
+ "勒": 2484,
2487
+ "©": 2485,
2488
+ "僚": 2486,
2489
+ "卞": 2487,
2490
+ "赖": 2488,
2491
+ "扉": 2489,
2492
+ "傲": 2490,
2493
+ "您": 2491,
2494
+ "煤": 2492,
2495
+ "及": 2493,
2496
+ "涗": 2494,
2497
+ "堝": 2495,
2498
+ "愁": 2496,
2499
+ "豬": 2497,
2500
+ "覺": 2498,
2501
+ "療": 2499,
2502
+ "憎": 2500,
2503
+ "鑑": 2501,
2504
+ "骚": 2502,
2505
+ "象": 2503,
2506
+ "楝": 2504,
2507
+ "卓": 2505,
2508
+ "擬": 2506,
2509
+ "睡": 2507,
2510
+ "蹲": 2508,
2511
+ "糟": 2509,
2512
+ "贰": 2510,
2513
+ "阔": 2511,
2514
+ "卖": 2512,
2515
+ "3": 2513,
2516
+ "贈": 2514,
2517
+ "戻": 2515,
2518
+ "飼": 2516,
2519
+ "駄": 2517,
2520
+ "畳": 2518,
2521
+ "脙": 2519,
2522
+ "类": 2520,
2523
+ "數": 2521,
2524
+ "即": 2522,
2525
+ "势": 2523,
2526
+ "濆": 2524,
2527
+ "枕": 2525,
2528
+ "滾": 2526,
2529
+ "凤": 2527,
2530
+ "纸": 2528,
2531
+ "阱": 2529,
2532
+ "须": 2530,
2533
+ "浮": 2531,
2534
+ "授": 2532,
2535
+ "侣": 2533,
2536
+ "请": 2534,
2537
+ "歄": 2535,
2538
+ "堢": 2536,
2539
+ "笉": 2537,
2540
+ "祓": 2538,
2541
+ "籠": 2539,
2542
+ "遙": 2540,
2543
+ "鸠": 2541,
2544
+ "楱": 2542,
2545
+ "壬": 2543,
2546
+ "隸": 2544,
2547
+ "恩": 2545,
2548
+ "哪": 2546,
2549
+ "亮": 2547,
2550
+ "霉": 2548,
2551
+ "畤": 2549,
2552
+ "爛": 2550,
2553
+ "葱": 2551,
2554
+ "诱": 2552,
2555
+ "懒": 2553,
2556
+ "讀": 2554,
2557
+ "脅": 2555,
2558
+ "V": 2556,
2559
+ "庞": 2557,
2560
+ "效": 2558,
2561
+ "鍕": 2559,
2562
+ "经": 2560,
2563
+ "留": 2561,
2564
+ "鐚": 2562,
2565
+ "隷": 2563,
2566
+ "坊": 2564,
2567
+ "芯": 2565,
2568
+ "蒐": 2566,
2569
+ "委": 2567,
2570
+ "어": 2568,
2571
+ "碎": 2569,
2572
+ "驗": 2570,
2573
+ "姏": 2571,
2574
+ "犳": 2572,
2575
+ "帇": 2573,
2576
+ "鍚": 2574,
2577
+ "噸": 2575,
2578
+ "娲": 2576,
2579
+ "嬮": 2577,
2580
+ "岄": 2578,
2581
+ "称": 2579,
2582
+ "捡": 2580,
2583
+ "Ⅶ": 2581,
2584
+ "嶇": 2582,
2585
+ "困": 2583,
2586
+ "鴨": 2584,
2587
+ "课": 2585,
2588
+ "窝": 2586,
2589
+ "陵": 2587,
2590
+ "玲": 2588,
2591
+ "操": 2589,
2592
+ "茜": 2590,
2593
+ "捨": 2591,
2594
+ "慢": 2592,
2595
+ "缚": 2593,
2596
+ "催": 2594,
2597
+ "歐": 2595,
2598
+ "栄": 2596,
2599
+ "套": 2597,
2600
+ "猩": 2598,
2601
+ "歳": 2599,
2602
+ "鍵": 2600,
2603
+ "砲": 2601,
2604
+ "己": 2602,
2605
+ "偤": 2603,
2606
+ "兴": 2604,
2607
+ "湘": 2605,
2608
+ "致": 2606,
2609
+ "╀": 2607,
2610
+ "í": 2608,
2611
+ "囪": 2609,
2612
+ "廣": 2610,
2613
+ "俄": 2611,
2614
+ "属": 2612,
2615
+ "莫": 2613,
2616
+ "笘": 2614,
2617
+ "验": 2615,
2618
+ "論": 2616,
2619
+ "譯": 2617,
2620
+ "愚": 2618,
2621
+ "郁": 2619,
2622
+ "炸": 2620,
2623
+ "商": 2621,
2624
+ "啲": 2622,
2625
+ "總": 2623,
2626
+ "瓧": 2624,
2627
+ "備": 2625,
2628
+ "贴": 2626,
2629
+ "磩": 2627,
2630
+ "笼": 2628,
2631
+ "袙": 2629,
2632
+ "ū": 2630,
2633
+ "楠": 2631,
2634
+ "柴": 2632,
2635
+ "崇": 2633,
2636
+ "些": 2634,
2637
+ "漠": 2635,
2638
+ "置": 2636,
2639
+ "骇": 2637,
2640
+ "簹": 2638,
2641
+ "冪": 2639,
2642
+ "‐": 2640,
2643
+ "傘": 2641,
2644
+ "跟": 2642,
2645
+ "偷": 2643,
2646
+ "诺": 2644,
2647
+ "曾": 2645,
2648
+ "楼": 2646,
2649
+ "碰": 2647,
2650
+ "洗": 2648,
2651
+ "户": 2649,
2652
+ "钘": 2650,
2653
+ "込": 2651,
2654
+ "顶": 2652,
2655
+ "楔": 2653,
2656
+ "融": 2654,
2657
+ "値": 2655,
2658
+ "殖": 2656,
2659
+ "憩": 2657,
2660
+ "е": 2658,
2661
+ "µ": 2659,
2662
+ "繪": 2660,
2663
+ "″": 2661,
2664
+ "判": 2662,
2665
+ "薔": 2663,
2666
+ "琉": 2664,
2667
+ "ㄧ": 2665,
2668
+ "杩": 2666,
2669
+ "闈": 2667,
2670
+ "刔": 2668,
2671
+ "距": 2669,
2672
+ "貝": 2670,
2673
+ "盃": 2671,
2674
+ "触": 2672,
2675
+ "玻": 2673,
2676
+ "孙": 2674,
2677
+ "柑": 2675,
2678
+ "煮": 2676,
2679
+ "薩": 2677,
2680
+ "殭": 2678,
2681
+ "捜": 2679,
2682
+ "瀞": 2680,
2683
+ "减": 2681,
2684
+ "鈽": 2682,
2685
+ "•": 2683,
2686
+ "桑": 2684,
2687
+ "穴": 2685,
2688
+ " ": 2686,
2689
+ "飙": 2687,
2690
+ "泪": 2688,
2691
+ "柔": 2689,
2692
+ "á": 2690,
2693
+ "隐": 2691,
2694
+ "$": 2692,
2695
+ "虽": 2693,
2696
+ "停": 2694,
2697
+ "麥": 2695,
2698
+ "测": 2696,
2699
+ "沌": 2697,
2700
+ "淘": 2698,
2701
+ "匙": 2699,
2702
+ "盛": 2700,
2703
+ "掛": 2701,
2704
+ "褰": 2702,
2705
+ "妄": 2703,
2706
+ "檚": 2704,
2707
+ "词": 2705,
2708
+ "菲": 2706,
2709
+ "咆": 2707,
2710
+ "伎": 2708,
2711
+ "尻": 2709,
2712
+ "喧": 2710,
2713
+ "剃": 2711,
2714
+ "夛": 2712,
2715
+ "囩": 2713,
2716
+ "劫": 2714,
2717
+ "児": 2715,
2718
+ "␣": 2716,
2719
+ "均": 2717,
2720
+ "?": 2718,
2721
+ "啡": 2719,
2722
+ "隻": 2720,
2723
+ "편": 2721,
2724
+ "拷": 2722,
2725
+ "妳": 2723,
2726
+ "昼": 2724,
2727
+ "绿": 2725,
2728
+ "链": 2726,
2729
+ "湼": 2727,
2730
+ "¿": 2728,
2731
+ "谱": 2729,
2732
+ "忓": 2730,
2733
+ "屼": 2731,
2734
+ "嚜": 2732,
2735
+ "暒": 2733,
2736
+ "瑪": 2734,
2737
+ "偆": 2735,
2738
+ "裤": 2736,
2739
+ "鹤": 2737,
2740
+ "蜻": 2738,
2741
+ "鸡": 2739,
2742
+ "附": 2740,
2743
+ "肢": 2741,
2744
+ "琥": 2742,
2745
+ "珀": 2743,
2746
+ "烙": 2744,
2747
+ "婦": 2745,
2748
+ "继": 2746,
2749
+ "卵": 2747,
2750
+ "薄": 2748,
2751
+ "几": 2749,
2752
+ "繰": 2750,
2753
+ "扑": 2751,
2754
+ "尤": 2752,
2755
+ "履": 2753,
2756
+ "한": 2754,
2757
+ "완": 2755,
2758
+ "逛": 2756,
2759
+ "慄": 2757,
2760
+ "胸": 2758,
2761
+ "穗": 2759,
2762
+ "环": 2760,
2763
+ "姝": 2761,
2764
+ "寰": 2762,
2765
+ "庣": 2763,
2766
+ "绱": 2764,
2767
+ "莎": 2765,
2768
+ "训": 2766,
2769
+ "州": 2767,
2770
+ "诡": 2768,
2771
+ "瀬": 2769,
2772
+ "洸": 2770,
2773
+ "哮": 2771,
2774
+ "讚": 2772,
2775
+ "紞": 2773,
2776
+ "К": 2774,
2777
+ "敱": 2775,
2778
+ "丶": 2776,
2779
+ "惠": 2777,
2780
+ "賀": 2778,
2781
+ "綺": 2779,
2782
+ "剋": 2780,
2783
+ "溺": 2781,
2784
+ "兩": 2782,
2785
+ "側": 2783,
2786
+ "鎵": 2784,
2787
+ "伯": 2785,
2788
+ "读": 2786,
2789
+ "姜": 2787,
2790
+ "导": 2788,
2791
+ "斁": 2789,
2792
+ "羞": 2790,
2793
+ "倛": 2791,
2794
+ "務": 2792,
2795
+ "蕉": 2793,
2796
+ "专": 2794,
2797
+ "缥": 2795,
2798
+ "缈": 2796,
2799
+ "随": 2797,
2800
+ "献": 2798,
2801
+ "蠅": 2799,
2802
+ "茸": 2800,
2803
+ "処": 2801,
2804
+ "囚": 2802,
2805
+ "椂": 2803,
2806
+ "逼": 2804,
2807
+ "縁": 2805,
2808
+ "拐": 2806,
2809
+ "歂": 2807,
2810
+ "漆": 2808,
2811
+ "幡": 2809,
2812
+ "桌": 2810,
2813
+ "曇": 2811,
2814
+ "須": 2812,
2815
+ "証": 2813,
2816
+ "谨": 2814,
2817
+ "仓": 2815,
2818
+ "ヂ": 2816,
2819
+ "р": 2817,
2820
+ "я": 2818,
2821
+ "з": 2819,
2822
+ "奉": 2820,
2823
+ "더": 2821,
2824
+ "결": 2822,
2825
+ "援": 2823,
2826
+ "弒": 2824,
2827
+ "奧": 2825,
2828
+ "努": 2826,
2829
+ "椴": 2827,
2830
+ "傚": 2828,
2831
+ "捣": 2829,
2832
+ "裝": 2830,
2833
+ "绮": 2831,
2834
+ "綻": 2832,
2835
+ "彷": 2833,
2836
+ "蛉": 2834,
2837
+ "尘": 2835,
2838
+ "壮": 2836,
2839
+ "旗": 2837,
2840
+ "質": 2838,
2841
+ "査": 2839,
2842
+ "萬": 2840,
2843
+ "铏": 2841,
2844
+ "鉱": 2842,
2845
+ "①": 2843,
2846
+ "鈴": 2844,
2847
+ "妇": 2845,
2848
+ "喂": 2846,
2849
+ "葵": 2847,
2850
+ "魍": 2848,
2851
+ "鷲": 2849,
2852
+ "津": 2850,
2853
+ "ㆍ": 2851,
2854
+ "ä": 2852,
2855
+ "聆": 2853,
2856
+ "隔": 2854,
2857
+ "국": 2855,
2858
+ "빙": 2856,
2859
+ "扯": 2857,
2860
+ "娣": 2858,
2861
+ "歷": 2859,
2862
+ "踊": 2860,
2863
+ "產": 2861,
2864
+ "锯": 2862,
2865
+ "À": 2863,
2866
+ "託": 2864,
2867
+ "績": 2865,
2868
+ "康": 2866,
2869
+ "鍣": 2867,
2870
+ "噗": 2868,
2871
+ "撒": 2869,
2872
+ "嗜": 2870,
2873
+ "齊": 2871,
2874
+ "避": 2872,
2875
+ "娿": 2873,
2876
+ "聯": 2874,
2877
+ "喊": 2875,
2878
+ "答": 2876,
2879
+ "此": 2877,
2880
+ "却": 2878,
2881
+ "溂": 2879,
2882
+ "垁": 2880,
2883
+ "轻": 2881,
2884
+ "麵": 2882,
2885
+ "饶": 2883,
2886
+ "喪": 2884,
2887
+ "仏": 2885,
2888
+ "汚": 2886,
2889
+ "蜥": 2887,
2890
+ "蜴": 2888,
2891
+ "棰": 2889,
2892
+ "ㄩ": 2890,
2893
+ "移": 2891,
2894
+ "懶": 2892,
2895
+ "廏": 2893,
2896
+ "許": 2894,
2897
+ "磪": 2895,
2898
+ "蛮": 2896,
2899
+ "婢": 2897,
2900
+ "湌": 2898,
2901
+ "矒": 2899,
2902
+ "檪": 2900,
2903
+ "隇": 2901,
2904
+ "塈": 2902,
2905
+ "遣": 2903,
2906
+ "D": 2904,
2907
+ "T": 2905,
2908
+ "、": 2906,
2909
+ "洁": 2907,
2910
+ "碼": 2908,
2911
+ "识": 2909,
2912
+ "♥": 2910,
2913
+ "澄": 2911,
2914
+ "涅": 2912,
2915
+ "颜": 2913,
2916
+ "旂": 2914,
2917
+ "簨": 2915,
2918
+ "拜": 2916,
2919
+ "簡": 2917,
2920
+ "懡": 2918,
2921
+ "檺": 2919,
2922
+ "寸": 2920,
2923
+ "绌": 2921,
2924
+ "屽": 2922,
2925
+ "粖": 2923,
2926
+ "栦": 2924,
2927
+ "該": 2925,
2928
+ "換": 2926,
2929
+ "膽": 2927,
2930
+ "黨": 2928,
2931
+ "舊": 2929,
2932
+ "卻": 2930,
2933
+ "妃": 2931,
2934
+ "懸": 2932,
2935
+ "識": 2933,
2936
+ "谋": 2934,
2937
+ "柳": 2935,
2938
+ "按": 2936,
2939
+ "挿": 2937,
2940
+ "躍": 2938,
2941
+ "拯": 2939,
2942
+ "鋸": 2940,
2943
+ "删": 2941,
2944
+ "欼": 2942,
2945
+ "菊": 2943,
2946
+ "魎": 2944,
2947
+ "鎖": 2945,
2948
+ "澗": 2946,
2949
+ "杖": 2947,
2950
+ "閮": 2948,
2951
+ "鳳": 2949,
2952
+ "顧": 2950,
2953
+ "樻": 2951,
2954
+ "猴": 2952,
2955
+ "濠": 2953,
2956
+ "阻": 2954,
2957
+ "輔": 2955,
2958
+ "憜": 2956,
2959
+ "兓": 2957,
2960
+ "戈": 2958,
2961
+ "雖": 2959,
2962
+ "��": 2960,
2963
+ "优": 2961,
2964
+ "墝": 2962,
2965
+ "丟": 2963,
2966
+ "抽": 2964,
2967
+ "尟": 2965,
2968
+ "緑": 2966,
2969
+ "镖": 2967,
2970
+ "桂": 2968,
2971
+ "堛": 2969,
2972
+ "墜": 2970,
2973
+ "訣": 2971,
2974
+ "辑": 2972,
2975
+ "讓": 2973,
2976
+ "腕": 2974,
2977
+ "拖": 2975,
2978
+ "偊": 2976,
2979
+ "湥": 2977,
2980
+ "ⅵ": 2978,
2981
+ "峂": 2979,
2982
+ "胄": 2980,
2983
+ "哛": 2981,
2984
+ "俗": 2982,
2985
+ "亭": 2983,
2986
+ "婭": 2984,
2987
+ "壱": 2985,
2988
+ "膏": 2986,
2989
+ "å": 2987,
2990
+ "曙": 2988,
2991
+ "巌": 2989,
2992
+ "姿": 2990,
2993
+ "雛": 2991,
2994
+ "凛": 2992,
2995
+ "ō": 2993,
2996
+ "遲": 2994,
2997
+ "渡": 2995,
2998
+ "鍑": 2996,
2999
+ "忥": 2997,
3000
+ "鏂": 2998,
3001
+ "橀": 2999,
3002
+ "㈠": 3000,
3003
+ "′": 3001,
3004
+ "或": 3002,
3005
+ "媇": 3003,
3006
+ "央": 3004,
3007
+ "鞋": 3005,
3008
+ "●": 3006,
3009
+ "拶": 3007,
3010
+ "憬": 3008,
3011
+ "访": 3009,
3012
+ "辭": 3010,
3013
+ "氱": 3011,
3014
+ "賞": 3012,
3015
+ "鏽": 3013,
3016
+ "償": 3014,
3017
+ "贾": 3015,
3018
+ "埍": 3016,
3019
+ "棬": 3017,
3020
+ "毚": 3018,
3021
+ "掑": 3019,
3022
+ "悕": 3020,
3023
+ "誇": 3021,
3024
+ "敷": 3022,
3025
+ "熾": 3023,
3026
+ "暖": 3024,
3027
+ "楓": 3025,
3028
+ "環": 3026,
3029
+ "憾": 3027,
3030
+ "买": 3028,
3031
+ "论": 3029,
3032
+ "闂": 3030,
3033
+ "腑": 3031,
3034
+ "灞": 3032,
3035
+ "墨": 3033,
3036
+ "暑": 3034,
3037
+ "诅": 3035,
3038
+ "鐪": 3036,
3039
+ "儔": 3037,
3040
+ "堡": 3038,
3041
+ "鐒": 3039,
3042
+ "繚": 3040,
3043
+ "棋": 3041,
3044
+ "眈": 3042,
3045
+ "柱": 3043,
3046
+ "鎲": 3044,
3047
+ "ф": 3045,
3048
+ "買": 3046,
3049
+ "悔": 3047,
3050
+ "哭": 3048,
3051
+ "帕": 3049,
3052
+ "乘": 3050,
3053
+ "蓋": 3051,
3054
+ "胶": 3052,
3055
+ "週": 3053,
3056
+ "貼": 3054,
3057
+ "牲": 3055,
3058
+ "阪": 3056,
3059
+ "净": 3057,
3060
+ "纷": 3058,
3061
+ "贤": 3059,
3062
+ "熼": 3060,
3063
+ "宸": 3061,
3064
+ "藉": 3062,
3065
+ "鏁": 3063,
3066
+ "句": 3064,
3067
+ "醜": 3065,
3068
+ "逝": 3066,
3069
+ "众": 3067,
3070
+ "絲": 3068,
3071
+ "调": 3069,
3072
+ "咕": 3070,
3073
+ "维": 3071,
3074
+ "訊": 3072,
3075
+ "质": 3073,
3076
+ "戴": 3074,
3077
+ "闯": 3075,
3078
+ "馁": 3076,
3079
+ "产": 3077,
3080
+ "滈": 3078,
3081
+ "祽": 3079,
3082
+ "咺": 3080,
3083
+ "紳": 3081,
3084
+ "册": 3082,
3085
+ "虐": 3083,
3086
+ "廳": 3084,
3087
+ "呢": 3085,
3088
+ "兇": 3086,
3089
+ "舌": 3087,
3090
+ "吠": 3088,
3091
+ "à": 3089,
3092
+ "垂": 3090,
3093
+ "鐣": 3091,
3094
+ "垬": 3092,
3095
+ "湪": 3093,
3096
+ "ぉ": 3094,
3097
+ "蹇": 3095,
3098
+ "請": 3096,
3099
+ "材": 3097,
3100
+ "帮": 3098,
3101
+ "建": 3099,
3102
+ "層": 3100,
3103
+ "唇": 3101,
3104
+ "矇": 3102,
3105
+ "仺": 3103,
3106
+ "汗": 3104,
3107
+ "互": 3105,
3108
+ "靦": 3106,
3109
+ "腆": 3107,
3110
+ "凱": 3108,
3111
+ "頼": 3109,
3112
+ "炭": 3110,
3113
+ "誠": 3111,
3114
+ "竞": 3112,
3115
+ "窮": 3113,
3116
+ "灉": 3114,
3117
+ "匹": 3115,
3118
+ "O": 3116,
3119
+ "蛙": 3117,
3120
+ "欒": 3118,
3121
+ "糸": 3119,
3122
+ "恵": 3120,
3123
+ "傻": 3121,
3124
+ "岐": 3122,
3125
+ "痕": 3123,
3126
+ "崛": 3124,
3127
+ "蟻": 3125,
3128
+ "絢": 3126,
3129
+ "∀": 3127,
3130
+ "囝": 3128,
3131
+ "暮": 3129,
3132
+ "夊": 3130,
3133
+ "梯": 3131,
3134
+ "è": 3132,
3135
+ "皵": 3133,
3136
+ "﹀": 3134,
3137
+ "浗": 3135,
3138
+ "绡": 3136,
3139
+ "誼": 3137,
3140
+ "栗": 3138,
3141
+ "张": 3139,
3142
+ "囊": 3140,
3143
+ "固": 3141,
3144
+ "寂": 3142,
3145
+ "邻": 3143,
3146
+ "诀": 3144,
3147
+ "块": 3145,
3148
+ "嗚": 3146,
3149
+ "揺": 3147,
3150
+ "綾": 3148,
3151
+ "脸": 3149,
3152
+ "盒": 3150,
3153
+ "掘": 3151,
3154
+ "洓": 3152,
3155
+ "箣": 3153,
3156
+ "迈": 3154,
3157
+ "栧": 3155,
3158
+ "僵": 3156,
3159
+ "③": 3157,
3160
+ "蝎": 3158,
3161
+ "4": 3159,
3162
+ "澧": 3160,
3163
+ "Ⅹ": 3161,
3164
+ "嘩": 3162,
3165
+ "蒲": 3163,
3166
+ "昔": 3164,
3167
+ "F": 3165,
3168
+ "副": 3166,
3169
+ "错": 3167,
3170
+ "胁": 3168,
3171
+ "备": 3169,
3172
+ "雑": 3170,
3173
+ "誉": 3171,
3174
+ "昴": 3172,
3175
+ "芝": 3173,
3176
+ "圖": 3174,
3177
+ "擾": 3175,
3178
+ "도": 3176,
3179
+ "撮": 3177,
3180
+ "寝": 3178,
3181
+ "脫": 3179,
3182
+ "畬": 3180,
3183
+ "祕": 3181,
3184
+ "丑": 3182,
3185
+ "﹁": 3183,
3186
+ "摑": 3184,
3187
+ "佷": 3185,
3188
+ "嘴": 3186,
3189
+ "嗶": 3187,
3190
+ "踢": 3188,
3191
+ "蠢": 3189,
3192
+ "恼": 3190,
3193
+ "℃": 3191,
3194
+ "尯": 3192,
3195
+ "瑟": 3193,
3196
+ "峡": 3194,
3197
+ "剪": 3195,
3198
+ "娇": 3196,
3199
+ "股": 3197,
3200
+ "薫": 3198,
3201
+ "咰": 3199,
3202
+ "赏": 3200,
3203
+ "侍": 3201,
3204
+ "冈": 3202,
3205
+ "嚫": 3203,
3206
+ "贩": 3204,
3207
+ "剛": 3205,
3208
+ "蕩": 3206,
3209
+ "巡": 3207,
3210
+ "昌": 3208,
3211
+ "嬌": 3209,
3212
+ "瘽": 3210,
3213
+ "墿": 3211,
3214
+ "儖": 3212,
3215
+ "掓": 3213,
3216
+ "槬": 3214,
3217
+ "忠": 3215,
3218
+ "欠": 3216,
3219
+ "暇": 3217,
3220
+ "産": 3218,
3221
+ "鮮": 3219,
3222
+ "覆": 3220,
3223
+ "寲": 3221,
3224
+ "診": 3222,
3225
+ "鐘": 3223,
3226
+ "愤": 3224,
3227
+ "惰": 3225,
3228
+ "亀": 3226,
3229
+ "刘": 3227,
3230
+ "0": 3228,
3231
+ "铳": 3229,
3232
+ "邸": 3230,
3233
+ "犧": 3231,
3234
+ "湴": 3232,
3235
+ "赌": 3233,
3236
+ "沖": 3234,
3237
+ "両": 3235,
3238
+ "愉": 3236,
3239
+ "※": 3237,
3240
+ "惱": 3238,
3241
+ "滴": 3239,
3242
+ "呯": 3240,
3243
+ "楦": 3241,
3244
+ "鸿": 3242,
3245
+ "垫": 3243,
3246
+ "渤": 3244,
3247
+ "貫": 3245,
3248
+ "俱": 3246,
3249
+ "薰": 3247,
3250
+ "毀": 3248,
3251
+ "笂": 3249,
3252
+ "仯": 3250,
3253
+ "岸": 3251,
3254
+ "寵": 3252,
3255
+ "涘": 3253,
3256
+ "嗐": 3254,
3257
+ "鈾": 3255,
3258
+ "猐": 3256,
3259
+ "楃": 3257,
3260
+ "紧": 3258,
3261
+ "瓜": 3259,
3262
+ "羡": 3260,
3263
+ "紹": 3261,
3264
+ "娉": 3262,
3265
+ "拂": 3263,
3266
+ "佛": 3264,
3267
+ "液": 3265,
3268
+ "頑": 3266,
3269
+ "稀": 3267,
3270
+ "晓": 3268,
3271
+ "濞": 3269,
3272
+ "濊": 3270,
3273
+ "钃": 3271,
3274
+ "f": 3272,
3275
+ "淽": 3273,
3276
+ "â": 3274,
3277
+ "挖": 3275,
3278
+ "欺": 3276,
3279
+ "帶": 3277,
3280
+ "禦": 3278,
3281
+ "睛": 3279,
3282
+ "掕": 3280,
3283
+ "氭": 3281,
3284
+ "濅": 3282,
3285
+ "挡": 3283,
3286
+ "淇": 3284,
3287
+ "斻": 3285,
3288
+ "昇": 3286,
3289
+ "润": 3287,
3290
+ "仰": 3288,
3291
+ "閉": 3289,
3292
+ "煙": 3290,
3293
+ "蒸": 3291,
3294
+ "囨": 3292,
3295
+ "洲": 3293,
3296
+ "頓": 3294,
3297
+ "窓": 3295,
3298
+ "怠": 3296,
3299
+ "祥": 3297,
3300
+ "荻": 3298,
3301
+ "坪": 3299,
3302
+ "痴": 3300,
3303
+ "擇": 3301,
3304
+ "장": 3302,
3305
+ "판": 3303,
3306
+ "绽": 3304,
3307
+ "皆": 3305,
3308
+ "掟": 3306,
3309
+ "恨": 3307,
3310
+ "壇": 3308,
3311
+ "硬": 3309,
3312
+ "递": 3310,
3313
+ "ú": 3311,
3314
+ "颁": 3312,
3315
+ "綋": 3313,
3316
+ "ч": 3314,
3317
+ "庝": 3315,
3318
+ "箟": 3316,
3319
+ "璇": 3317,
3320
+ "嬭": 3318,
3321
+ "伸": 3319,
3322
+ "駅": 3320,
3323
+ "炴": 3321,
3324
+ "佳": 3322,
3325
+ "陛": 3323,
3326
+ "彲": 3324,
3327
+ "読": 3325,
3328
+ "综": 3326,
3329
+ "幇": 3327,
3330
+ "帥": 3328,
3331
+ "堤": 3329,
3332
+ "斷": 3330,
3333
+ "柚": 3331,
3334
+ "割": 3332,
3335
+ "绂": 3333,
3336
+ "戍": 3334,
3337
+ "燎": 3335,
3338
+ "構": 3336,
3339
+ "慧": 3337,
3340
+ "愬": 3338,
3341
+ "倍": 3339,
3342
+ "扇": 3340,
3343
+ "骷": 3341,
3344
+ "g": 3342,
3345
+ "崉": 3343,
3346
+ "槍": 3344,
3347
+ "芸": 3345,
3348
+ "蒙": 3346,
3349
+ "鑱": 3347,
3350
+ "余": 3348,
3351
+ "嚎": 3349,
3352
+ "綍": 3350,
3353
+ "靴": 3351,
3354
+ "滆": 3352,
3355
+ "潐": 3353,
3356
+ "螃": 3354,
3357
+ "咃": 3355,
3358
+ "窻": 3356,
3359
+ "鍨": 3357,
3360
+ "溇": 3358,
3361
+ "檽": 3359,
3362
+ "爪": 3360,
3363
+ "细": 3361,
3364
+ "吐": 3362,
3365
+ "W": 3363,
3366
+ "Ⅷ": 3364,
3367
+ "督": 3365,
3368
+ "糫": 3366,
3369
+ "迦": 3367,
3370
+ "ē": 3368,
3371
+ "绅": 3369,
3372
+ "轟": 3370,
3373
+ "姮": 3371,
3374
+ "醉": 3372,
3375
+ "偅": 3373,
3376
+ "顾": 3374,
3377
+ "澤": 3375,
3378
+ "応": 3376,
3379
+ "髮": 3377,
3380
+ "逸": 3378,
3381
+ "欽": 3379,
3382
+ "蘑": 3380,
3383
+ "啪": 3381,
3384
+ "夌": 3382,
3385
+ "臋": 3383,
3386
+ "缺": 3384,
3387
+ "荤": 3385,
3388
+ "粠": 3386,
3389
+ "洿": 3387,
3390
+ "嶄": 3388,
3391
+ "掔": 3389,
3392
+ "瑕": 3390,
3393
+ "鏋": 3391,
3394
+ "纏": 3392,
3395
+ "毫": 3393,
3396
+ "姳": 3394,
3397
+ "淑": 3395,
3398
+ "遥": 3396,
3399
+ "煎": 3397,
3400
+ "匣": 3398,
3401
+ "紡": 3399,
3402
+ "废": 3400,
3403
+ "蹄": 3401,
3404
+ "垃": 3402,
3405
+ "圾": 3403,
3406
+ "閿": 3404,
3407
+ "湡": 3405,
3408
+ "愪": 3406,
3409
+ "刹": 3407,
3410
+ "應": 3408,
3411
+ "鬧": 3409,
3412
+ "謊": 3410,
3413
+ "慶": 3411,
3414
+ "漢": 3412,
3415
+ "焉": 3413,
3416
+ "钓": 3414,
3417
+ "悗": 3415,
3418
+ "髅": 3416,
3419
+ "龟": 3417,
3420
+ "伀": 3418,
3421
+ "従": 3419,
3422
+ "泰": 3420,
3423
+ "岡": 3421,
3424
+ "暂": 3422,
3425
+ "李": 3423,
3426
+ "斧": 3424,
3427
+ "盷": 3425,
3428
+ "皯": 3426,
3429
+ "贡": 3427,
3430
+ "鎿": 3428,
3431
+ "簜": 3429,
3432
+ "Ⅺ": 3430,
3433
+ "滝": 3431,
3434
+ "鯉": 3432,
3435
+ "狸": 3433,
3436
+ "噢": 3434,
3437
+ "澡": 3435,
3438
+ "弗": 3436,
3439
+ "疆": 3437,
3440
+ "岳": 3438,
3441
+ "轩": 3439,
3442
+ "아": 3440,
3443
+ "堅": 3441,
3444
+ "宏": 3442,
3445
+ "綘": 3443,
3446
+ "椤": 3444,
3447
+ "娑": 3445,
3448
+ "谩": 3446,
3449
+ "檻": 3447,
3450
+ "缤": 3448,
3451
+ "鐞": 3449,
3452
+ "埌": 3450,
3453
+ "垮": 3451,
3454
+ "潃": 3452,
3455
+ "弻": 3453,
3456
+ "鎸": 3454,
3457
+ "洖": 3455,
3458
+ "娆": 3456,
3459
+ "姘": 3457,
3460
+ "票": 3458,
3461
+ "倞": 3459,
3462
+ "忎": 3460,
3463
+ "枃": 3461,
3464
+ "氦": 3462,
3465
+ "嬰": 3463,
3466
+ "抢": 3464,
3467
+ "綠": 3465,
3468
+ "縫": 3466,
3469
+ "仱": 3467,
3470
+ "戙": 3468,
3471
+ "臂": 3469,
3472
+ "悶": 3470,
3473
+ "瑛": 3471,
3474
+ "赘": 3472,
3475
+ "婿": 3473,
3476
+ "輕": 3474,
3477
+ "抚": 3475,
3478
+ "渴": 3476,
3479
+ "娶": 3477,
3480
+ "瑾": 3478,
3481
+ "樋": 3479,
3482
+ "晩": 3480,
3483
+ "簯": 3481,
3484
+ "戜": 3482,
3485
+ "徨": 3483,
3486
+ "贺": 3484,
3487
+ "G": 3485,
3488
+ "階": 3486,
3489
+ "凸": 3487,
3490
+ "廟": 3488,
3491
+ "暉": 3489,
3492
+ "傭": 3490,
3493
+ "爭": 3491,
3494
+ "稚": 3492,
3495
+ "沼": 3493,
3496
+ "鄉": 3494,
3497
+ "翰": 3495,
3498
+ "善": 3496,
3499
+ "夠": 3497,
3500
+ "泧": 3498,
3501
+ "瓨": 3499,
3502
+ "循": 3500,
3503
+ "歴": 3501,
3504
+ "瑞": 3502,
3505
+ "郊": 3503,
3506
+ "采": 3504,
3507
+ "紐": 3505,
3508
+ "権": 3506,
3509
+ "罚": 3507,
3510
+ "麦": 3508,
3511
+ "貨": 3509,
3512
+ "狭": 3510,
3513
+ "晃": 3511,
3514
+ "墅": 3512,
3515
+ "袥": 3513,
3516
+ "Φ": 3514,
3517
+ "裙": 3515,
3518
+ "鑷": 3516,
3519
+ "矛": 3517,
3520
+ "菇": 3518,
3521
+ "顿": 3519,
3522
+ "喷": 3520,
3523
+ "緱": 3521,
3524
+ "涎": 3522,
3525
+ "闹": 3523,
3526
+ "趣": 3524,
3527
+ "э": 3525,
3528
+ "鐤": 3526,
3529
+ "绾": 3527,
3530
+ "篯": 3528,
3531
+ "掍": 3529,
3532
+ "╂": 3530,
3533
+ "濮": 3531,
3534
+ "採": 3532,
3535
+ "儀": 3533,
3536
+ "廷": 3534,
3537
+ "伄": 3535,
3538
+ "畾": 3536,
3539
+ "費": 3537,
3540
+ "繋": 3538,
3541
+ "ㄣ": 3539,
3542
+ "賣": 3540,
3543
+ "暟": 3541,
3544
+ "剎": 3542,
3545
+ "檸": 3543,
3546
+ "繩": 3544,
3547
+ "嫄": 3545,
3548
+ "鈬": 3546,
3549
+ "憡": 3547,
3550
+ "瘦": 3548,
3551
+ "烟": 3549,
3552
+ "沐": 3550,
3553
+ "乡": 3551,
3554
+ "狀": 3552,
3555
+ "蹂": 3553,
3556
+ "悓": 3554,
3557
+ "诉": 3555,
3558
+ "府": 3556,
3559
+ "碗": 3557,
3560
+ "檼": 3558,
3561
+ "荣": 3559,
3562
+ "啟": 3560,
3563
+ "觸": 3561,
3564
+ "娓": 3562,
3565
+ "侯": 3563,
3566
+ "评": 3564,
3567
+ "譜": 3565,
3568
+ "♀": 3566,
3569
+ "歀": 3567,
3570
+ "堥": 3568,
3571
+ "鑹": 3569,
3572
+ "ω": 3570,
3573
+ "馭": 3571,
3574
+ "駕": 3572,
3575
+ "傅": 3573,
3576
+ "繘": 3574,
3577
+ "掋": 3575,
3578
+ "偓": 3576,
3579
+ "谣": 3577,
3580
+ "翁": 3578,
3581
+ "摊": 3579,
3582
+ "獅": 3580,
3583
+ "埂": 3581,
3584
+ "惢": 3582,
3585
+ "鑾": 3583,
3586
+ "楹": 3584,
3587
+ "繼": 3585,
3588
+ "廚": 3586,
3589
+ "伞": 3587,
3590
+ "亰": 3588,
3591
+ "侶": 3589,
3592
+ "锈": 3590,
3593
+ "劧": 3591,
3594
+ "禍": 3592,
3595
+ "¢": 3593,
3596
+ "弸": 3594,
3597
+ "苺": 3595,
3598
+ "畢": 3596,
3599
+ "鐓": 3597,
3600
+ "岭": 3598,
3601
+ "嫾": 3599,
3602
+ "喔": 3600,
3603
+ "S": 3601,
3604
+ "゛": 3602,
3605
+ "描": 3603,
3606
+ "歯": 3604,
3607
+ "偍": 3605,
3608
+ "偨": 3606,
3609
+ "Ⅸ": 3607,
3610
+ "奮": 3608,
3611
+ "遂": 3609,
3612
+ "*": 3610,
3613
+ "帅": 3611,
3614
+ "‥": 3612,
3615
+ "嗛": 3613,
3616
+ "肆": 3614,
3617
+ "谕": 3615,
3618
+ "袛": 3616,
3619
+ "袗": 3617,
3620
+ "n": 3618,
3621
+ "懺": 3619,
3622
+ "溜": 3620,
3623
+ "複": 3621,
3624
+ "극": 3622,
3625
+ "대": 3623,
3626
+ "芹": 3624,
3627
+ "傾": 3625,
3628
+ "泛": 3626,
3629
+ "态": 3627,
3630
+ "呀": 3628,
3631
+ "顯": 3629,
3632
+ "岀": 3630,
3633
+ "鑻": 3631,
3634
+ "璧": 3632,
3635
+ "賜": 3633,
3636
+ "尗": 3634,
3637
+ "箙": 3635,
3638
+ "榉": 3636,
3639
+ "帹": 3637,
3640
+ "嗙": 3638,
3641
+ "〃": 3639,
3642
+ "柜": 3640,
3643
+ "鼴": 3641,
3644
+ "栥": 3642,
3645
+ "禪": 3643,
3646
+ "雜": 3644,
3647
+ "櫃": 3645,
3648
+ "檯": 3646,
3649
+ "蹺": 3647,
3650
+ "桿": 3648,
3651
+ "倠": 3649,
3652
+ "姓": 3650,
3653
+ "吵": 3651,
3654
+ "慕": 3652,
3655
+ "箭": 3653,
3656
+ "抓": 3654,
3657
+ "吶": 3655,
3658
+ "霜": 3656,
3659
+ "滩": 3657,
3660
+ "酬": 3658,
3661
+ "躪": 3659,
3662
+ "舔": 3660,
3663
+ "棉": 3661,
3664
+ "閰": 3662,
3665
+ "蔚": 3663,
3666
+ "脡": 3664,
3667
+ "珮": 3665,
3668
+ "呐": 3666,
3669
+ "傢": 3667,
3670
+ "资": 3668,
3671
+ "墠": 3669,
3672
+ "穆": 3670,
3673
+ "凹": 3671,
3674
+ "姗": 3672,
3675
+ "儹": 3673,
3676
+ "徘": 3674,
3677
+ "徊": 3675,
3678
+ "懷": 3676,
3679
+ "另": 3677,
3680
+ "弃": 3678,
3681
+ "欰": 3679,
3682
+ "崈": 3680,
3683
+ "僱": 3681,
3684
+ "押": 3682,
3685
+ "枊": 3683,
3686
+ "牸": 3684,
3687
+ "搐": 3685,
3688
+ "碨": 3686,
3689
+ "竺": 3687,
3690
+ "罰": 3688,
3691
+ "勢": 3689,
3692
+ "粌": 3690,
3693
+ "剦": 3691,
3694
+ "籟": 3692,
3695
+ "睙": 3693,
3696
+ "浂": 3694,
3697
+ "彙": 3695,
3698
+ "愈": 3696,
3699
+ "證": 3697,
3700
+ "θ": 3698,
3701
+ "堣": 3699,
3702
+ "敳": 3700,
3703
+ "窔": 3701,
3704
+ "垉": 3702,
3705
+ "囷": 3703,
3706
+ "厤": 3704,
3707
+ "媛": 3705,
3708
+ "牠": 3706,
3709
+ "揚": 3707,
3710
+ "汁": 3708,
3711
+ "閸": 3709,
3712
+ "瓑": 3710,
3713
+ "皽": 3711,
3714
+ "剚": 3712,
3715
+ "搧": 3713,
3716
+ "憺": 3714,
3717
+ "墽": 3715,
3718
+ "闁": 3716,
3719
+ "枓": 3717,
3720
+ "簩": 3718,
3721
+ "嵉": 3719,
3722
+ "悐": 3720,
3723
+ "嗕": 3721,
3724
+ "鐭": 3722,
3725
+ "氨": 3723,
3726
+ "e": 3724,
3727
+ "櫠": 3725,
3728
+ "圧": 3726,
3729
+ "斎": 3727,
3730
+ "噴": 3728,
3731
+ "巣": 3729,
3732
+ "甸": 3730,
3733
+ "绎": 3731,
3734
+ "窗": 3732,
3735
+ "隣": 3733,
3736
+ "囃": 3734,
3737
+ "蛾": 3735,
3738
+ "凄": 3736,
3739
+ "握": 3737,
3740
+ "Θ": 3738,
3741
+ "谐": 3739,
3742
+ "鈼": 3740,
3743
+ "嬧": 3741,
3744
+ "棆": 3742,
3745
+ "稷": 3743,
3746
+ "鹏": 3744,
3747
+ "哗": 3745,
3748
+ "〇": 3746,
3749
+ "淨": 3747,
3750
+ "捐": 3748,
3751
+ "齑": 3749,
3752
+ "堧": 3750,
3753
+ "嫟": 3751,
3754
+ "毵": 3752,
3755
+ "敼": 3753,
3756
+ "棟": 3754,
3757
+ "佩": 3755,
3758
+ "倫": 3756,
3759
+ "하": 3757,
3760
+ "마": 3758,
3761
+ "리": 3759,
3762
+ "라": 3760,
3763
+ "綱": 3761,
3764
+ "枚": 3762,
3765
+ "讯": 3763,
3766
+ "鑺": 3764,
3767
+ "ª": 3765,
3768
+ "効": 3766,
3769
+ "廃": 3767,
3770
+ "巾": 3768,
3771
+ "芒": 3769,
3772
+ "滨": 3770,
3773
+ "焦": 3771,
3774
+ "橙": 3772,
3775
+ "啸": 3773,
3776
+ "蜀": 3774,
3777
+ "矜": 3775,
3778
+ "阵": 3776,
3779
+ "哎": 3777,
3780
+ "莊": 3778,
3781
+ "输": 3779,
3782
+ "欿": 3780,
3783
+ "訶": 3781,
3784
+ "歖": 3782,
3785
+ "欣": 3783,
3786
+ "针": 3784,
3787
+ "帯": 3785,
3788
+ "歸": 3786,
3789
+ "竭": 3787,
3790
+ "顕": 3788,
3791
+ "规": 3789,
3792
+ "伦": 3790,
3793
+ "嘗": 3791,
3794
+ "榮": 3792,
3795
+ "渋": 3793,
3796
+ "鴉": 3794,
3797
+ "臺": 3795,
3798
+ "湳": 3796,
3799
+ "搁": 3797,
3800
+ "涌": 3798,
3801
+ "硝": 3799,
3802
+ "8": 3800,
3803
+ "9": 3801,
3804
+ "贄": 3802,
3805
+ "彦": 3803,
3806
+ "偛": 3804,
3807
+ "搷": 3805,
3808
+ "ヶ": 3806,
3809
+ "洪": 3807,
3810
+ "妯": 3808,
3811
+ "洟": 3809,
3812
+ "坐": 3810,
3813
+ "抹": 3811,
3814
+ "浅": 3812,
3815
+ "显": 3813,
3816
+ "狮": 3814,
3817
+ "肥": 3815,
3818
+ "擦": 3816,
3819
+ "歪": 3817,
3820
+ "铸": 3818,
3821
+ "α": 3819,
3822
+ "执": 3820,
3823
+ "棲": 3821,
3824
+ "責": 3822,
3825
+ "B": 3823,
3826
+ "摤": 3824,
3827
+ "彛": 3825,
3828
+ "咬": 3826,
3829
+ "祟": 3827,
3830
+ "壹": 3828,
3831
+ "惩": 3829,
3832
+ "[": 3830,
3833
+ "]": 3831,
3834
+ "維": 3832,
3835
+ "鎗": 3833,
3836
+ "炬": 3834,
3837
+ "跃": 3835,
3838
+ "広": 3836,
3839
+ "甯": 3837,
3840
+ "隆": 3838,
3841
+ "怨": 3839,
3842
+ "╄": 3840,
3843
+ "х": 3841,
3844
+ "d": 3842,
3845
+ "嗗": 3843,
3846
+ "朗": 3844,
3847
+ "瓪": 3845,
3848
+ "酥": 3846,
3849
+ "璜": 3847,
3850
+ "积": 3848,
3851
+ "仿": 3849,
3852
+ "庛": 3850,
3853
+ "翅": 3851,
3854
+ "漁": 3852,
3855
+ "坠": 3853,
3856
+ "阁": 3854,
3857
+ "芳": 3855,
3858
+ "浄": 3856,
3859
+ "湿": 3857,
3860
+ "爽": 3858,
3861
+ "価": 3859,
3862
+ "俑": 3860,
3863
+ "殜": 3861,
3864
+ "涛": 3862,
3865
+ "劲": 3863,
3866
+ "际": 3864,
3867
+ "渦": 3865,
3868
+ "測": 3866,
3869
+ "免": 3867,
3870
+ "裕": 3868,
3871
+ "舎": 3869,
3872
+ "峕": 3870,
3873
+ "審": 3871,
3874
+ "臣": 3872,
3875
+ "摄": 3873,
3876
+ "盘": 3874,
3877
+ "湾": 3875,
3878
+ "$": 3876,
3879
+ "崖": 3877,
3880
+ "偡": 3878,
3881
+ "诚": 3879,
3882
+ "薪": 3880,
3883
+ "枯": 3881,
3884
+ "赴": 3882,
3885
+ "亿": 3883,
3886
+ "肖": 3884,
3887
+ "㊙": 3885,
3888
+ "峠": 3886,
3889
+ "獮": 3887,
3890
+ "기": 3888,
3891
+ "나": 3889,
3892
+ "비": 3890,
3893
+ "庆": 3891,
3894
+ "閫": 3892,
3895
+ "ǎ": 3893,
3896
+ "宂": 3894,
3897
+ "鹃": 3895,
3898
+ "鎼": 3896,
3899
+ "欐": 3897,
3900
+ "婄": 3898,
3901
+ "釜": 3899,
3902
+ "熷": 3900,
3903
+ "﹂": 3901,
3904
+ "担": 3902,
3905
+ "笀": 3903,
3906
+ "绊": 3904,
3907
+ "耐": 3905,
3908
+ "扫": 3906,
3909
+ "锅": 3907,
3910
+ "锁": 3908,
3911
+ "驾": 3909,
3912
+ "斋": 3910,
3913
+ "盤": 3911,
3914
+ "媺": 3912,
3915
+ "鑼": 3913,
3916
+ "柊": 3914,
3917
+ "憐": 3915,
3918
+ "杏": 3916,
3919
+ "县": 3917,
3920
+ "葡": 3918,
3921
+ "鼓": 3919,
3922
+ "颠": 3920,
3923
+ "規": 3921,
3924
+ "ヅ": 3922,
3925
+ "慌": 3923,
3926
+ "鳩": 3924,
3927
+ "怜": 3925,
3928
+ "臓": 3926,
3929
+ "猟": 3927,
3930
+ "財": 3928,
3931
+ "드": 3929,
3932
+ "黖": 3930,
3933
+ "瑭": 3931,
3934
+ "珷": 3932,
3935
+ "婊": 3933,
3936
+ "啺": 3934,
3937
+ "辱": 3935,
3938
+ "购": 3936,
3939
+ "增": 3937,
3940
+ "铜": 3938,
3941
+ "徽": 3939,
3942
+ "严": 3940,
3943
+ "E": 3941,
3944
+ "衆": 3942,
3945
+ "哟": 3943,
3946
+ "污": 3944,
3947
+ "N": 3945,
3948
+ "ぅ": 3946,
3949
+ "蜃": 3947,
3950
+ "勿": 3948,
3951
+ "謝": 3949,
3952
+ "㈡": 3950,
3953
+ "匪": 3951,
3954
+ "磯": 3952,
3955
+ "Á": 3953,
3956
+ "É": 3954,
3957
+ "遍": 3955,
3958
+ "시": 3956,
3959
+ "는": 3957,
3960
+ "음": 3958,
3961
+ "카": 3959,
3962
+ "인": 3960,
3963
+ "詞": 3961,
3964
+ "货": 3962,
3965
+ "饰": 3963,
3966
+ "膰": 3964,
3967
+ "膮": 3965,
3968
+ "嶆": 3966,
3969
+ "烘": 3967,
3970
+ "戞": 3968,
3971
+ "偀": 3969,
3972
+ "婂": 3970,
3973
+ "譲": 3971,
3974
+ "畝": 3972,
3975
+ "嚐": 3973,
3976
+ "酸": 3974,
3977
+ "榻": 3975,
3978
+ "躲": 3976,
3979
+ "汇": 3977,
3980
+ "亸": 3978,
3981
+ "层": 3979,
3982
+ "冦": 3980,
3983
+ "纹": 3981,
3984
+ "矝": 3982,
3985
+ "撼": 3983,
3986
+ "埃": 3984,
3987
+ "胡": 3985,
3988
+ "烬": 3986,
3989
+ "鞎": 3987,
3990
+ "勲": 3988,
3991
+ "薯": 3989,
3992
+ "締": 3990,
3993
+ "絮": 3991,
3994
+ "灾": 3992,
3995
+ "噩": 3993,
3996
+ "吊": 3994,
3997
+ "彗": 3995,
3998
+ "慟": 3996,
3999
+ "睇": 3997,
4000
+ "认": 3998,
4001
+ "吓": 3999,
4002
+ "祷": 4000,
4003
+ "怀": 4001,
4004
+ "鴿": 4002,
4005
+ "‖": 4003,
4006
+ "鵺": 4004,
4007
+ "裸": 4005,
4008
+ "損": 4006,
4009
+ "潚": 4007,
4010
+ "牢": 4008,
4011
+ "慈": 4009,
4012
+ "漬": 4010,
4013
+ "丼": 4011,
4014
+ "坦": 4012,
4015
+ "恥": 4013,
4016
+ "累": 4014,
4017
+ "皬": 4015,
4018
+ "绳": 4016,
4019
+ "駒": 4017,
4020
+ "燒": 4018,
4021
+ "拌": 4019,
4022
+ "蛹": 4020,
4023
+ "噂": 4021,
4024
+ "栨": 4022,
4025
+ "痪": 4023,
4026
+ "∬": 4024,
4027
+ "寓": 4025,
4028
+ "锣": 4026,
4029
+ "舒": 4027,
4030
+ "检": 4028,
4031
+ "碑": 4029,
4032
+ "苹": 4030,
4033
+ "榎": 4031,
4034
+ "蛍": 4032,
4035
+ "荷": 4033,
4036
+ "贖": 4034,
4037
+ "惹": 4035,
4038
+ "脈": 4036,
4039
+ "砦": 4037,
4040
+ "薬": 4038,
4041
+ "乳": 4039,
4042
+ "飾": 4040,
4043
+ "軽": 4041,
4044
+ "遅": 4042,
4045
+ "卑": 4043,
4046
+ "疲": 4044,
4047
+ "鶴": 4045,
4048
+ "辺": 4046,
4049
+ "叢": 4047,
4050
+ "财": 4048,
4051
+ "豊": 4049,
4052
+ "叹": 4050,
4053
+ "署": 4051,
4054
+ "袞": 4052,
4055
+ "R": 4053,
4056
+ "ã": 4054,
4057
+ "毬": 4055,
4058
+ "​": 4056,
4059
+ "淫": 4057,
4060
+ "貪": 4058,
4061
+ "牡": 4059,
4062
+ "隼": 4060,
4063
+ "陶": 4061,
4064
+ "舍": 4062,
4065
+ "审": 4063,
4066
+ "绪": 4064,
4067
+ "丢": 4065,
4068
+ "椒": 4066,
4069
+ "钂": 4067,
4070
+ "劳": 4068,
4071
+ "霞": 4069,
4072
+ "鈪": 4070,
4073
+ "仪": 4071,
4074
+ "勩": 4072,
4075
+ "涩": 4073,
4076
+ "牵": 4074,
4077
+ "汪": 4075,
4078
+ "杉": 4076,
4079
+ "蓓": 4077,
4080
+ "扣": 4078,
4081
+ "含": 4079,
4082
+ "燕": 4080,
4083
+ "楚": 4081,
4084
+ "歓": 4082,
4085
+ "办": 4083,
4086
+ "嘛": 4084,
4087
+ "钧": 4085,
4088
+ "鸽": 4086,
4089
+ "蚁": 4087,
4090
+ "減": 4088,
4091
+ "壳": 4089,
4092
+ "偿": 4090,
4093
+ "惜": 4091,
4094
+ "稼": 4092,
4095
+ "詰": 4093,
4096
+ "④": 4094,
4097
+ "圿": 4095,
4098
+ "畑": 4096,
4099
+ "並": 4097,
4100
+ "券": 4098,
4101
+ "惚": 4099,
4102
+ "窯": 4100,
4103
+ "盯": 4101,
4104
+ "泲": 4102,
4105
+ "省": 4103,
4106
+ "墙": 4104,
4107
+ "坚": 4105,
4108
+ "骰": 4106,
4109
+ "秤": 4107,
4110
+ "紋": 4108,
4111
+ "綿": 4109,
4112
+ "虜": 4110,
4113
+ "迅": 4111,
4114
+ "奋": 4112,
4115
+ "纽": 4113,
4116
+ "敢": 4114,
4117
+ "揭": 4115,
4118
+ "菌": 4116,
4119
+ "囲": 4117,
4120
+ "鳞": 4118,
4121
+ "齐": 4119,
4122
+ "墟": 4120,
4123
+ "酋": 4121,
4124
+ "价": 4122,
4125
+ "掃": 4123,
4126
+ "袡": 4124,
4127
+ "槽": 4125,
4128
+ "茉": 4126,
4129
+ "賴": 4127,
4130
+ "瓣": 4128,
4131
+ "를": 4129,
4132
+ "성": 4130,
4133
+ "락": 4131,
4134
+ "루": 4132,
4135
+ "구": 4133,
4136
+ "모": 4134,
4137
+ "정": 4135,
4138
+ "지": 4136,
4139
+ "鎽": 4137,
4140
+ "淚": 4138,
4141
+ "縄": 4139,
4142
+ "拼": 4140,
4143
+ "囦": 4141,
4144
+ "粦": 4142,
4145
+ "ü": 4143,
4146
+ "緳": 4144,
4147
+ "鎶": 4145,
4148
+ "尝": 4146,
4149
+ "绉": 4147,
4150
+ "暱": 4148,
4151
+ "婁": 4149,
4152
+ "秺": 4150,
4153
+ "㈣": 4151,
4154
+ "璀": 4152,
4155
+ "皝": 4153,
4156
+ "嘳": 4154,
4157
+ "搶": 4155,
4158
+ "鍛": 4156,
4159
+ "婃": 4157,
4160
+ "竊": 4158,
4161
+ "萤": 4159,
4162
+ "份": 4160,
4163
+ "兜": 4161,
4164
+ "亱": 4162,
4165
+ "仒": 4163,
4166
+ "仾": 4164,
4167
+ "瑠": 4165,
4168
+ "煄": 4166,
4169
+ "挥": 4167,
4170
+ "庙": 4168,
4171
+ "欻": 4169,
4172
+ "穂": 4170,
4173
+ "熻": 4171,
4174
+ "猍": 4172,
4175
+ "矿": 4173,
4176
+ "軸": 4174,
4177
+ "每": 4175,
4178
+ "陪": 4176,
4179
+ "邀": 4177,
4180
+ "葛": 4178,
4181
+ "蹟": 4179,
4182
+ "猜": 4180,
4183
+ "資": 4181,
4184
+ "縮": 4182,
4185
+ "桐": 4183,
4186
+ "鸭": 4184,
4187
+ "盔": 4185,
4188
+ "涯": 4186,
4189
+ "苗": 4187,
4190
+ "谢": 4188,
4191
+ "邮": 4189,
4192
+ "畔": 4190,
4193
+ "穢": 4191,
4194
+ "潫": 4192,
4195
+ "粘": 4193,
4196
+ "鐔": 4194,
4197
+ "唺": 4195,
4198
+ "棷": 4196,
4199
+ "钥": 4197,
4200
+ "床": 4198,
4201
+ "酔": 4199,
4202
+ "詛": 4200,
4203
+ "髭": 4201,
4204
+ "搏": 4202,
4205
+ "仗": 4203,
4206
+ "耍": 4204,
4207
+ "伢": 4205,
4208
+ "厕": 4206,
4209
+ "貘": 4207,
4210
+ "凌": 4208,
4211
+ "贯": 4209,
4212
+ "梁": 4210,
4213
+ "銅": 4211,
4214
+ "賛": 4212,
4215
+ "权": 4213,
4216
+ "餃": 4214,
4217
+ "挟": 4215,
4218
+ "围": 4216,
4219
+ "柿": 4217,
4220
+ "疗": 4218,
4221
+ "忋": 4219,
4222
+ "炪": 4220,
4223
+ "儕": 4221,
4224
+ "据": 4222,
4225
+ "俠": 4223,
4226
+ "茧": 4224,
4227
+ "穷": 4225,
4228
+ "貞": 4226,
4229
+ "ç": 4227,
4230
+ "鮒": 4228,
4231
+ "喱": 4229,
4232
+ "둑": 4230,
4233
+ "─": 4231,
4234
+ "繫": 4232,
4235
+ "疊": 4233,
4236
+ "肋": 4234,
4237
+ "姻": 4235,
4238
+ "거": 4236,
4239
+ "속": 4237,
4240
+ "련": 4238,
4241
+ "래": 4239,
4242
+ "에": 4240,
4243
+ "바": 4241,
4244
+ "반": 4242,
4245
+ "부": 4243,
4246
+ "鎯": 4244,
4247
+ "恭": 4245,
4248
+ "赢": 4246,
4249
+ "驴": 4247,
4250
+ "鼹": 4248,
4251
+ "币": 4249,
4252
+ "撳": 4250,
4253
+ "閬": 4251,
4254
+ "辩": 4252,
4255
+ "闃": 4253,
4256
+ "檃": 4254,
4257
+ "艣": 4255,
4258
+ "轰": 4256,
4259
+ "蔷": 4257,
4260
+ "敬": 4258,
4261
+ "韩": 4259,
4262
+ "ㄥ": 4260,
4263
+ "旇": 4261,
4264
+ "鐮": 4262,
4265
+ "喅": 4263,
4266
+ "呰": 4264,
4267
+ "乚": 4265,
4268
+ "熶": 4266,
4269
+ "梋": 4267,
4270
+ "嗭": 4268,
4271
+ "紓": 4269,
4272
+ "鑲": 4270,
4273
+ "埗": 4271,
4274
+ "垢": 4272,
4275
+ "软": 4273,
4276
+ "泦": 4274,
4277
+ "误": 4275,
4278
+ "厔": 4276,
4279
+ "鍟": 4277,
4280
+ "丧": 4278,
4281
+ "鎰": 4279,
4282
+ "婅": 4280,
4283
+ "举": 4281,
4284
+ "堆": 4282,
4285
+ "暥": 4283,
4286
+ "臆": 4284,
4287
+ "剥": 4285,
4288
+ "仸": 4286,
4289
+ "伅": 4287,
4290
+ "芬": 4288,
4291
+ "柏": 4289,
4292
+ "乔": 4290,
4293
+ "鼻": 4291,
4294
+ "厉": 4292,
4295
+ "禮": 4293,
4296
+ "捧": 4294,
4297
+ "弩": 4295,
4298
+ "措": 4296,
4299
+ "宁": 4297,
4300
+ "悄": 4298,
4301
+ "梨": 4299,
4302
+ "肚": 4300,
4303
+ "戽": 4301,
4304
+ "浆": 4302,
4305
+ "讃": 4303,
4306
+ "溢": 4304,
4307
+ "夸": 4305,
4308
+ "潛": 4306,
4309
+ "針": 4307,
4310
+ "芭": 4308,
4311
+ "键": 4309,
4312
+ "函": 4310,
4313
+ "粗": 4311,
4314
+ "欶": 4312,
4315
+ "添": 4313,
4316
+ "愨": 4314,
4317
+ "槄": 4315,
4318
+ "暙": 4316,
4319
+ "咚": 4317,
4320
+ "霍": 4318,
4321
+ "飲": 4319,
4322
+ "倶": 4320,
4323
+ "饼": 4321,
4324
+ "膀": 4322,
4325
+ "蹦": 4323,
4326
+ "患": 4324,
4327
+ "殘": 4325,
4328
+ "搲": 4326,
4329
+ "孝": 4327,
4330
+ "勤": 4328,
4331
+ "聴": 4329,
4332
+ "挽": 4330,
4333
+ "疫": 4331,
4334
+ "耶": 4332,
4335
+ "孵": 4333,
4336
+ "殉": 4334,
4337
+ "⁈": 4335,
4338
+ "绀": 4336,
4339
+ "騙": 4337,
4340
+ "払": 4338,
4341
+ "項": 4339,
4342
+ "레": 4340,
4343
+ "동": 4341,
4344
+ "噜": 4342,
4345
+ "紺": 4343,
4346
+ "粴": 4344,
4347
+ "醋": 4345,
4348
+ "绕": 4346,
4349
+ "窥": 4347,
4350
+ "填": 4348,
4351
+ "责": 4349,
4352
+ "橱": 4350,
4353
+ "甩": 4351,
4354
+ "售": 4352,
4355
+ "缝": 4353,
4356
+ "溶": 4354,
4357
+ "揮": 4355,
4358
+ "臭": 4356,
4359
+ "设": 4357,
4360
+ "获": 4358,
4361
+ "玷": 4359,
4362
+ "幫": 4360,
4363
+ "C": 4361,
4364
+ "徳": 4362,
4365
+ "圏": 4363,
4366
+ "諦": 4364,
4367
+ "晦": 4365,
4368
+ "倾": 4366,
4369
+ "竟": 4367,
4370
+ "熬": 4368,
4371
+ "拒": 4369,
4372
+ "単": 4370,
4373
+ "鏖": 4371,
4374
+ "顏": 4372,
4375
+ "蔽": 4373,
4376
+ "綐": 4374,
4377
+ "儍": 4375,
4378
+ "瀑": 4376,
4379
+ "吼": 4377,
4380
+ "毗": 4378,
4381
+ "掳": 4379,
4382
+ "农": 4380,
4383
+ "氧": 4381,
4384
+ "鉴": 4382,
4385
+ "汐": 4383,
4386
+ "捷": 4384,
4387
+ "蟠": 4385,
4388
+ "确": 4386,
4389
+ "监": 4387,
4390
+ "褋": 4388,
4391
+ "褌": 4389,
4392
+ "驟": 4390,
4393
+ "茹": 4391,
4394
+ "ø": 4392,
4395
+ "밀": 4393,
4396
+ "窃": 4394,
4397
+ "桥": 4395,
4398
+ "奕": 4396,
4399
+ "淡": 4397,
4400
+ "蠻": 4398,
4401
+ "撇": 4399,
4402
+ "초": 4400,
4403
+ "월": 4401,
4404
+ "울": 4402,
4405
+ "홍": 4403,
4406
+ "봉": 4404,
4407
+ "계": 4405,
4408
+ "고": 4406,
4409
+ "함": 4407,
4410
+ "운": 4408,
4411
+ "을": 4409,
4412
+ "竴": 4410,
4413
+ "瑜": 4411,
4414
+ "蓬": 4412,
4415
+ "嘎": 4413,
4416
+ "屾": 4414,
4417
+ "垜": 4415,
4418
+ "讳": 4416,
4419
+ "绫": 4417,
4420
+ "翱": 4418,
4421
+ "眉": 4419,
4422
+ "慨": 4420,
4423
+ "枟": 4421,
4424
+ "竷": 4422,
4425
+ "悏": 4423,
4426
+ "濉": 4424,
4427
+ "欎": 4425,
4428
+ "瘑": 4426,
4429
+ "櫓": 4427,
4430
+ "寫": 4428,
4431
+ "ㄤ": 4429,
4432
+ "欓": 4430,
4433
+ "潤": 4431,
4434
+ "绛": 4432,
4435
+ "秴": 4433,
4436
+ "慮": 4434,
4437
+ "佽": 4435,
4438
+ "闄": 4436,
4439
+ "櫖": 4437,
4440
+ "仌": 4438,
4441
+ "撱": 4439,
4442
+ "詮": 4440,
4443
+ "渐": 4441,
4444
+ "疼": 4442,
4445
+ "仛": 4443,
4446
+ "慰": 4444,
4447
+ "厂": 4445,
4448
+ "倗": 4446,
4449
+ "獳": 4447,
4450
+ "籌": 4448,
4451
+ "籏": 4449,
4452
+ "籄": 4450,
4453
+ "籘": 4451,
4454
+ "籗": 4452,
4455
+ "籙": 4453,
4456
+ "偒": 4454,
4457
+ "寤": 4455,
4458
+ "伨": 4456,
4459
+ "綸": 4457,
4460
+ "仐": 4458,
4461
+ "劒": 4459,
4462
+ "牬": 4460,
4463
+ "┕": 4461,
4464
+ "暘": 4462,
4465
+ "忐": 4463,
4466
+ "忑": 4464,
4467
+ "兹": 4465,
4468
+ "靜": 4466,
4469
+ "痉": 4467,
4470
+ "浼": 4468,
4471
+ "挎": 4469,
4472
+ "愭": 4470,
4473
+ "萧": 4471,
4474
+ "凭": 4472,
4475
+ "赞": 4473,
4476
+ "旃": 4474,
4477
+ "敂": 4475,
4478
+ "勶": 4476,
4479
+ "巋": 4477,
4480
+ "怯": 4478,
4481
+ "鑳": 4479,
4482
+ "谊": 4480,
4483
+ "郵": 4481,
4484
+ "签": 4482,
4485
+ "虾": 4483,
4486
+ "P": 4484,
4487
+ "瞄": 4485,
4488
+ "膳": 4486,
4489
+ "輸": 4487,
4490
+ "棄": 4488,
4491
+ "馳": 4489,
4492
+ "绍": 4490,
4493
+ "犀": 4491,
4494
+ "愕": 4492,
4495
+ "妬": 4493,
4496
+ "赶": 4494,
4497
+ "萝": 4495,
4498
+ "鎌": 4496,
4499
+ "厛": 4497,
4500
+ "娈": 4498,
4501
+ "埜": 4499,
4502
+ "硸": 4500,
4503
+ "爞": 4501,
4504
+ "摜": 4502,
4505
+ "@": 4503,
4506
+ "敤": 4504,
4507
+ "厳": 4505,
4508
+ "蛤": 4506,
4509
+ "亴": 4507,
4510
+ "≒": 4508,
4511
+ "筝": 4509,
4512
+ "綜": 4510,
4513
+ "歊": 4511,
4514
+ "羁": 4512,
4515
+ "飢": 4513,
4516
+ "壺": 4514,
4517
+ "缶": 4515,
4518
+ "析": 4516,
4519
+ "乏": 4517,
4520
+ "餅": 4518,
4521
+ "昧": 4519,
4522
+ "繭": 4520,
4523
+ "経": 4521,
4524
+ "刈": 4522,
4525
+ "崚": 4523,
4526
+ "粯": 4524,
4527
+ "埆": 4525,
4528
+ "垰": 4526,
4529
+ "築": 4527,
4530
+ "摘": 4528,
4531
+ "ò": 4529,
4532
+ "揃": 4530,
4533
+ "坡": 4531,
4534
+ "腦": 4532,
4535
+ "藩": 4533,
4536
+ "錢": 4534,
4537
+ "蟇": 4535,
4538
+ "艶": 4536,
4539
+ "薙": 4537,
4540
+ "毘": 4538,
4541
+ "頬": 4539,
4542
+ "萄": 4540,
4543
+ "塗": 4541,
4544
+ "燦": 4542,
4545
+ "笨": 4543,
4546
+ "巅": 4544,
4547
+ "氛": 4545,
4548
+ "扰": 4546,
4549
+ "斥": 4547,
4550
+ "嚏": 4548,
4551
+ "项": 4549,
4552
+ "黏": 4550,
4553
+ "许": 4551,
4554
+ "袱": 4552,
4555
+ "炖": 4553,
4556
+ "锃": 4554,
4557
+ "壶": 4555,
4558
+ "桶": 4556,
4559
+ "椅": 4557,
4560
+ "艰": 4558,
4561
+ "荞": 4559,
4562
+ "汰": 4560,
4563
+ "淳": 4561,
4564
+ "粒": 4562,
4565
+ "瑙": 4563,
4566
+ "鹵": 4564,
4567
+ "拭": 4565,
4568
+ "饗": 4566,
4569
+ "汝": 4567,
4570
+ "壷": 4568,
4571
+ "狛": 4569,
4572
+ "施": 4570,
4573
+ "゜": 4571,
4574
+ "偉": 4572,
4575
+ "塘": 4573,
4576
+ "渉": 4574,
4577
+ "勧": 4575,
4578
+ "∞": 4576,
4579
+ "髄": 4577,
4580
+ "抉": 4578,
4581
+ "秩": 4579,
4582
+ "順": 4580,
4583
+ "皑": 4581,
4584
+ "焚": 4582,
4585
+ "纵": 4583,
4586
+ "祸": 4584,
4587
+ "嬉": 4585,
4588
+ "哩": 4586,
4589
+ "弑": 4587,
4590
+ "丛": 4588,
4591
+ "柩": 4589,
4592
+ "脉": 4590,
4593
+ "卿": 4591,
4594
+ "⅙": 4592,
4595
+ "拙": 4593,
4596
+ "β": 4594,
4597
+ "鼬": 4595,
4598
+ "狠": 4596,
4599
+ "炉": 4597,
4600
+ "Д": 4598,
4601
+ "А": 4599,
4602
+ "н": 4600,
4603
+ "圭": 4601,
4604
+ "歉": 4602,
4605
+ "汤": 4603,
4606
+ "矶": 4604,
4607
+ "顺": 4605,
4608
+ "筆": 4606,
4609
+ "霹": 4607,
4610
+ "撕": 4608,
4611
+ "竪": 4609,
4612
+ "樽": 4610,
4613
+ "纭": 4611,
4614
+ "矮": 4612,
4615
+ "鄙": 4613,
4616
+ "钴": 4614,
4617
+ "夹": 4615,
4618
+ "毕": 4616,
4619
+ "蜗": 4617,
4620
+ "烹": 4618,
4621
+ "饪": 4619,
4622
+ "董": 4620,
4623
+ "绷": 4621,
4624
+ "膜": 4622,
4625
+ "르": 4623,
4626
+ "디": 4624,
4627
+ "厘": 4625,
4628
+ "♂": 4626,
4629
+ "蝕": 4627,
4630
+ "崭": 4628,
4631
+ "貌": 4629,
4632
+ "帆": 4630,
4633
+ "涟": 4631,
4634
+ "漪": 4632,
4635
+ "鷺": 4633,
4636
+ "ß": 4634,
4637
+ "逊": 4635,
4638
+ "揍": 4636,
4639
+ "玫": 4637,
4640
+ "斑": 4638,
4641
+ "다": 4639,
4642
+ "H": 4640,
4643
+ "Y": 4641,
4644
+ "竿": 4642,
4645
+ "涉": 4643,
4646
+ "茄": 4644,
4647
+ "筹": 4645,
4648
+ "辆": 4646,
4649
+ "睽": 4647,
4650
+ "Ø": 4648,
4651
+ "嗒": 4649,
4652
+ "龄": 4650,
4653
+ "스": 4651,
4654
+ "보": 4652,
4655
+ "魑": 4653,
4656
+ "喝": 4654,
4657
+ "槙": 4655,
4658
+ "叙": 4656,
4659
+ "옥": 4657,
4660
+ "외": 4658,
4661
+ "剤": 4659,
4662
+ "钀": 4660,
4663
+ "臉": 4661,
4664
+ "몽": 4662,
4665
+ "환": 4663,
4666
+ "패": 4664,
4667
+ "검": 4665,
4668
+ "전": 4666,
4669
+ "히": 4667,
4670
+ "추": 4668,
4671
+ "격": 4669,
4672
+ "명": 4670,
4673
+ "슬": 4671,
4674
+ "자": 4672,
4675
+ "산": 4673,
4676
+ "로": 4674,
4677
+ "가": 4675,
4678
+ "崙": 4676,
4679
+ "闲": 4677,
4680
+ "阶": 4678,
4681
+ "披": 4679,
4682
+ "鍜": 4680,
4683
+ "綖": 4681,
4684
+ "冩": 4682,
4685
+ "棌": 4683,
4686
+ "т": 4684,
4687
+ "ê": 4685,
4688
+ "袝": 4686,
4689
+ "彶": 4687,
4690
+ "艳": 4688,
4691
+ "颈": 4689,
4692
+ "紬": 4690,
4693
+ "惃": 4691,
4694
+ "紑": 4692,
4695
+ "冭": 4693,
4696
+ "緹": 4694,
4697
+ "埄": 4695,
4698
+ "繎": 4696,
4699
+ "簳": 4697,
4700
+ "瞾": 4698,
4701
+ "禲": 4699,
4702
+ "惂": 4700,
4703
+ "鎬": 4701,
4704
+ "禌": 4702,
4705
+ "厠": 4703,
4706
+ "炵": 4704,
4707
+ "璢": 4705,
4708
+ "湀": 4706,
4709
+ "囯": 4707,
4710
+ "浉": 4708,
4711
+ "唴": 4709,
4712
+ "盆": 4710,
4713
+ "儑": 4711,
4714
+ "楅": 4712,
4715
+ "饱": 4713,
4716
+ "袂": 4714,
4717
+ "扶": 4715,
4718
+ "炒": 4716,
4719
+ "亼": 4717,
4720
+ "猼": 4718,
4721
+ "它": 4719,
4722
+ "鸥": 4720,
4723
+ "滃": 4721,
4724
+ "陈": 4722,
4725
+ "棘": 4723,
4726
+ "榜": 4724,
4727
+ "烛": 4725,
4728
+ "荡": 4726,
4729
+ "凉": 4727,
4730
+ "梵": 4728,
4731
+ "禅": 4729,
4732
+ "廡": 4730,
4733
+ "脆": 4731,
4734
+ "鳄": 4732,
4735
+ "箹": 4733,
4736
+ "胃": 4734,
4737
+ "虑": 4735,
4738
+ "嗣": 4736,
4739
+ "幌": 4737,
4740
+ "粰": 4738,
4741
+ "悧": 4739,
4742
+ "缂": 4740,
4743
+ "﹩": 4741,
4744
+ "脏": 4742,
4745
+ "罩": 4743,
4746
+ "篝": 4744,
4747
+ "評": 4745,
4748
+ "醫": 4746,
4749
+ "携": 4747,
4750
+ "氫": 4748,
4751
+ "饲": 4749,
4752
+ "鹦": 4750,
4753
+ "鹉": 4751,
4754
+ "∽": 4752,
4755
+ "婴": 4753,
4756
+ "惉": 4754,
4757
+ "湢": 4755,
4758
+ "褐": 4756,
4759
+ "锵": 4757,
4760
+ "洩": 4758,
4761
+ "嘉": 4759,
4762
+ "餌": 4760,
4763
+ "咎": 4761,
4764
+ "滸": 4762,
4765
+ "浒": 4763,
4766
+ "乀": 4764,
4767
+ "顽": 4765,
4768
+ "蚊": 4766,
4769
+ "桧": 4767,
4770
+ "喇": 4768,
4771
+ "叭": 4769,
4772
+ "併": 4770,
4773
+ "┿": 4771,
4774
+ "筏": 4772,
4775
+ "咦": 4773,
4776
+ "渭": 4774,
4777
+ "餓": 4775,
4778
+ "擂": 4776,
4779
+ "梢": 4777,
4780
+ "枝": 4778,
4781
+ "貸": 4779,
4782
+ "鮫": 4780,
4783
+ "傀": 4781,
4784
+ "儡": 4782,
4785
+ "覧": 4783,
4786
+ "労": 4784,
4787
+ "哨": 4785,
4788
+ "翳": 4786,
4789
+ "劉": 4787,
4790
+ "詑": 4788,
4791
+ "貧": 4789,
4792
+ "聡": 4790,
4793
+ "%": 4791,
4794
+ "藪": 4792,
4795
+ "仄": 4793,
4796
+ "冊": 4794,
4797
+ "垣": 4795,
4798
+ "謹": 4796,
4799
+ "莓": 4797,
4800
+ "妨": 4798,
4801
+ "啾": 4799,
4802
+ "X": 4800,
4803
+ "硫": 4801,
4804
+ "鈔": 4802,
4805
+ "塊": 4803,
4806
+ "斜": 4804,
4807
+ "蝴": 4805,
4808
+ "飄": 4806,
4809
+ "眞": 4807,
4810
+ "湗": 4808,
4811
+ "倓": 4809,
4812
+ "鏇": 4810,
4813
+ "埐": 4811,
4814
+ "錆": 4812,
4815
+ "磔": 4813,
4816
+ "贷": 4814,
4817
+ "款": 4815,
4818
+ "悦": 4816,
4819
+ "烫": 4817,
4820
+ "笋": 4818,
4821
+ "齿": 4819,
4822
+ "痒": 4820,
4823
+ "帘": 4821,
4824
+ "蜓": 4822,
4825
+ "銭": 4823,
4826
+ "絡": 4824,
4827
+ "謃": 4825,
4828
+ "梓": 4826,
4829
+ "沫": 4827,
4830
+ "祀": 4828,
4831
+ "滋": 4829,
4832
+ "褒": 4830,
4833
+ "腸": 4831,
4834
+ "囁": 4832,
4835
+ "戬": 4833,
4836
+ "殇": 4834,
4837
+ "剩": 4835,
4838
+ "谅": 4836,
4839
+ "狡": 4837,
4840
+ "猾": 4838,
4841
+ "并": 4839,
4842
+ "延": 4840,
4843
+ "諸": 4841,
4844
+ "茱": 4842,
4845
+ "®": 4843,
4846
+ "烂": 4844,
4847
+ "誌": 4845,
4848
+ "凝": 4846,
4849
+ "拝": 4847,
4850
+ "隅": 4848,
4851
+ "嶐": 4849,
4852
+ "袴": 4850,
4853
+ "粋": 4851,
4854
+ "犠": 4852,
4855
+ "幾": 4853,
4856
+ "隙": 4854,
4857
+ "饮": 4855,
4858
+ "朔": 4856,
4859
+ "枢": 4857,
4860
+ "亦": 4858,
4861
+ "魄": 4859,
4862
+ "挫": 4860,
4863
+ "抵": 4861,
4864
+ "卟": 4862,
4865
+ "琳": 4863,
4866
+ "费": 4864,
4867
+ "殲": 4865,
4868
+ "閻": 4866,
4869
+ "斉": 4867,
4870
+ "乖": 4868,
4871
+ "埼": 4869,
4872
+ "尿": 4870,
4873
+ "膵": 4871,
4874
+ "営": 4872,
4875
+ "筒": 4873,
4876
+ "唸": 4874,
4877
+ "犹": 4875,
4878
+ "遷": 4876,
4879
+ "忽": 4877,
4880
+ "煉": 4878,
4881
+ "壍": 4879,
4882
+ "赎": 4880,
4883
+ "褪": 4881,
4884
+ "偔": 4882,
4885
+ "儜": 4883,
4886
+ "儊": 4884,
4887
+ "赚": 4885,
4888
+ "框": 4886,
4889
+ "炁": 4887,
4890
+ "勃": 4888,
4891
+ "鳗": 4889,
4892
+ "孽": 4890,
4893
+ "雳": 4891,
4894
+ "螢": 4892,
4895
+ "霄": 4893,
4896
+ "蠱": 4894,
4897
+ "攪": 4895,
4898
+ "漩": 4896,
4899
+ "涡": 4897,
4900
+ "刨": 4898,
4901
+ "攀": 4899,
4902
+ "腋": 4900,
4903
+ "伟": 4901,
4904
+ "熔": 4902,
4905
+ "痣": 4903,
4906
+ "需": 4904,
4907
+ "剂": 4905,
4908
+ "錠": 4906,
4909
+ "铤": 4907,
4910
+ "益": 4908,
4911
+ "柄": 4909,
4912
+ "脩": 4910,
4913
+ "恢": 4911,
4914
+ "茫": 4912,
4915
+ "漸": 4913,
4916
+ "트": 4914,
4917
+ "丨": 4915,
4918
+ "謁": 4916,
4919
+ "鮎": 4917,
4920
+ "凧": 4918,
4921
+ "眸": 4919,
4922
+ "堇": 4920,
4923
+ "赁": 4921,
4924
+ "哔": 4922,
4925
+ "석": 4923,
4926
+ "푸": 4924,
4927
+ "潘": 4925,
4928
+ "蝋": 4926,
4929
+ "騨": 4927,
4930
+ "撫": 4928,
4931
+ "礫": 4929,
4932
+ "顎": 4930,
4933
+ "憤": 4931,
4934
+ "Е": 4932,
4935
+ "ぢ": 4933,
4936
+ "珱": 4934,
4937
+ "筷": 4935,
4938
+ "Ö": 4936,
4939
+ "亨": 4937,
4940
+ "菈": 4938,
4941
+ "郎": 4939,
4942
+ "褲": 4940,
4943
+ "상": 4941,
4944
+ "미": 4942,
4945
+ "코": 4943,
4946
+ "령": 4944,
4947
+ "혼": 4945,
4948
+ "묘": 4946,
4949
+ "들": 4947,
4950
+ "즈": 4948,
4951
+ "각": 4949,
4952
+ "데": 4950,
4953
+ "향": 4951,
4954
+ "해": 4952,
4955
+ "嚭": 4953,
4956
+ "蛀": 4954,
4957
+ "鈹": 4955,
4958
+ "溌": 4956,
4959
+ "瑅": 4957,
4960
+ "脠": 4958,
4961
+ "²": 4959,
4962
+ "崑": 4960,
4963
+ "晱": 4961,
4964
+ "姞": 4962,
4965
+ "铇": 4963,
4966
+ "戣": 4964,
4967
+ "弴": 4965,
4968
+ "垚": 4966,
4969
+ "鐐": 4967,
4970
+ "渶": 4968,
4971
+ "橝": 4969,
4972
+ "艅": 4970,
4973
+ "º": 4971,
4974
+ "亾": 4972,
4975
+ "粓": 4973,
4976
+ "癸": 4974,
4977
+ "楋": 4975,
4978
+ "彂": 4976,
4979
+ "噺": 4977,
4980
+ "劚": 4978,
4981
+ "彉": 4979,
4982
+ "韬": 4980,
4983
+ "櫒": 4981,
4984
+ "湁": 4982,
4985
+ "寘": 4983,
4986
+ "堜": 4984,
4987
+ "簬": 4985,
4988
+ "繕": 4986,
4989
+ "憳": 4987,
4990
+ "墦": 4988,
4991
+ "笌": 4989,
4992
+ "矙": 4990,
4993
+ "廬": 4991,
4994
+ "愯": 4992,
4995
+ "啗": 4993,
4996
+ "嚮": 4994,
4997
+ "︼": 4995,
4998
+ "繃": 4996,
4999
+ "氳": 4997,
5000
+ "挋": 4998,
5001
+ "櫥": 4999,
5002
+ "忕": 5000,
5003
+ "鏆": 5001,
5004
+ "楗": 5002,
5005
+ "璁": 5003,
5006
+ "┒": 5004,
5007
+ "莽": 5005,
5008
+ "頁": 5006,
5009
+ "吟": 5007,
5010
+ "袍": 5008,
5011
+ "糠": 5009,
5012
+ "茂": 5010,
5013
+ "拘": 5011,
5014
+ "疏": 5012,
5015
+ "笹": 5013,
5016
+ "蝗": 5014,
5017
+ "ц": 5015,
5018
+ "閴": 5016,
5019
+ "牨": 5017,
5020
+ "冮": 5018,
5021
+ "苞": 5019,
5022
+ "槒": 5020,
5023
+ "簵": 5021,
5024
+ "揣": 5022,
5025
+ "焆": 5023,
5026
+ "玖": 5024,
5027
+ "鲨": 5025,
5028
+ "唐": 5026,
5029
+ "闀": 5027,
5030
+ "叧": 5028,
5031
+ "晣": 5029,
5032
+ "鐡": 5030,
5033
+ "硅": 5031,
5034
+ "缃": 5032,
5035
+ "氶": 5033,
5036
+ "楸": 5034,
5037
+ "杂": 5035,
5038
+ "盐": 5036,
5039
+ "夷": 5037,
5040
+ "烽": 5038,
5041
+ "琼": 5039,
5042
+ "浩": 5040,
5043
+ "阗": 5041,
5044
+ "钮": 5042,
5045
+ "驶": 5043,
5046
+ "ʼ": 5044,
5047
+ "拡": 5045,
5048
+ "颯": 5046,
5049
+ "墰": 5047,
5050
+ "儏": 5048,
5051
+ "紮": 5049,
5052
+ "搱": 5050,
5053
+ "钑": 5051,
5054
+ "╅": 5052,
5055
+ "妫": 5053,
5056
+ "粨": 5054,
5057
+ "暀": 5055,
5058
+ "I": 5056,
5059
+ "誂": 5057,
5060
+ "馒": 5058,
5061
+ "嘻": 5059,
5062
+ "茬": 5060,
5063
+ "敇": 5061,
5064
+ "摝": 5062,
5065
+ "櫘": 5063,
5066
+ "刷": 5064,
5067
+ "饿": 5065,
5068
+ "铚": 5066,
5069
+ "狅": 5067,
5070
+ "遁": 5068,
5071
+ "梟": 5069,
5072
+ "帷": 5070,
5073
+ "嫉": 5071,
5074
+ "琦": 5072,
5075
+ "孴": 5073,
5076
+ "峀": 5074,
5077
+ "蝌": 5075,
5078
+ "蚪": 5076,
5079
+ "庐": 5077,
5080
+ "荧": 5078,
5081
+ "励": 5079,
5082
+ "懲": 5080,
5083
+ "泟": 5081,
5084
+ "帿": 5082,
5085
+ "侽": 5083,
5086
+ "苑": 5084,
5087
+ "鈞": 5085,
5088
+ "闭": 5086,
5089
+ "肱": 5087,
5090
+ "垾": 5088,
5091
+ "喬": 5089,
5092
+ "钦": 5090,
5093
+ "躯": 5091,
5094
+ "枷": 5092,
5095
+ "胧": 5093,
5096
+ "沃": 5094,
5097
+ "糧": 5095,
5098
+ "浸": 5096,
5099
+ "笐": 5097,
5100
+ "孲": 5098,
5101
+ "宭": 5099,
5102
+ "孏": 5100,
5103
+ "麺": 5101,
5104
+ "鶏": 5102,
5105
+ "棚": 5103,
5106
+ "菖": 5104,
5107
+ "鯛": 5105,
5108
+ "⑤": 5106,
5109
+ "⑥": 5107,
5110
+ "炊": 5108,
5111
+ "株": 5109,
5112
+ "^": 5110,
5113
+ "兎": 5111,
5114
+ "萩": 5112,
5115
+ "抅": 5113,
5116
+ "仑": 5114,
5117
+ "盲": 5115,
5118
+ "哖": 5116,
5119
+ "蛟": 5117,
5120
+ "鸵": 5118,
5121
+ "盼": 5119,
5122
+ "袜": 5120,
5123
+ "例": 5121,
5124
+ "U": 5122,
5125
+ "岬": 5123,
5126
+ "稱": 5124,
5127
+ "梭": 5125,
5128
+ "盧": 5126,
5129
+ "蹤": 5127,
5130
+ "價": 5128,
5131
+ "瘋": 5129,
5132
+ "蝦": 5130,
5133
+ "鈷": 5131,
5134
+ "铅": 5132,
5135
+ "태": 5133,
5136
+ "투": 5134,
5137
+ "藝": 5135,
5138
+ "鈍": 5136,
5139
+ "牱": 5137,
5140
+ "耻": 5138,
5141
+ "夙": 5139,
5142
+ "肴": 5140,
5143
+ "啥": 5141,
5144
+ "犰": 5142,
5145
+ "狳": 5143,
5146
+ "锤": 5144,
5147
+ "飕": 5145,
5148
+ "碌": 5146,
5149
+ "浓": 5147,
5150
+ "嗡": 5148,
5151
+ "订": 5149,
5152
+ "橄": 5150,
5153
+ "楞": 5151,
5154
+ "荏": 5152,
5155
+ "辿": 5153,
5156
+ "祠": 5154,
5157
+ "擲": 5155,
5158
+ "済": 5156,
5159
+ "喫": 5157,
5160
+ "箏": 5158,
5161
+ "峙": 5159,
5162
+ "渓": 5160,
5163
+ "翌": 5161,
5164
+ "籈": 5162,
5165
+ "閣": 5163,
5166
+ "絃": 5164,
5167
+ "蒔": 5165,
5168
+ "蝠": 5166,
5169
+ "锏": 5167,
5170
+ "拢": 5168,
5171
+ "瞎": 5169,
5172
+ "筵": 5170,
5173
+ "肯": 5171,
5174
+ "囉": 5172,
5175
+ "叩": 5173,
5176
+ "串": 5174,
5177
+ "陳": 5175,
5178
+ "攫": 5176,
5179
+ "啓": 5177,
5180
+ "肺": 5178,
5181
+ "腺": 5179,
5182
+ "坝": 5180,
5183
+ "M": 5181,
5184
+ "磷": 5182,
5185
+ "鼎": 5183,
5186
+ "蛊": 5184,
5187
+ "珑": 5185,
5188
+ "籁": 5186,
5189
+ "瞰": 5187,
5190
+ "較": 5188,
5191
+ "棿": 5189,
5192
+ "蹴": 5190,
5193
+ "県": 5191,
5194
+ "磐": 5192,
5195
+ "濃": 5193,
5196
+ "睦": 5194,
5197
+ "殴": 5195,
5198
+ "螂": 5196,
5199
+ "陨": 5197,
5200
+ "螫": 5198,
5201
+ "偪": 5199,
5202
+ "眺": 5200,
5203
+ "呑": 5201,
5204
+ "渾": 5202,
5205
+ "閑": 5203,
5206
+ "磨": 5204,
5207
+ "捲": 5205,
5208
+ "爐": 5206,
5209
+ "憲": 5207,
5210
+ "暦": 5208,
5211
+ "冢": 5209,
5212
+ "醍": 5210,
5213
+ "醐": 5211,
5214
+ "镰": 5212,
5215
+ "勅": 5213,
5216
+ "颱": 5214,
5217
+ "妆": 5215,
5218
+ "乒": 5216,
5219
+ "乓": 5217,
5220
+ "吕": 5218,
5221
+ "綴": 5219,
5222
+ "载": 5220,
5223
+ "а": 5221,
5224
+ "л": 5222,
5225
+ "о": 5223,
5226
+ "№": 5224,
5227
+ "跺": 5225,
5228
+ "煡": 5226,
5229
+ "壗": 5227,
5230
+ "昨": 5228,
5231
+ "鲛": 5229,
5232
+ "蛰": 5230,
5233
+ "膠": 5231,
5234
+ "歇": 5232,
5235
+ "働": 5233,
5236
+ "叡": 5234,
5237
+ "鉂": 5235,
5238
+ "巳": 5236,
5239
+ "杨": 5237,
5240
+ "蠍": 5238,
5241
+ "裔": 5239,
5242
+ "挺": 5240,
5243
+ "籃": 5241,
5244
+ "積": 5242,
5245
+ "缰": 5243,
5246
+ "跌": 5244,
5247
+ "熏": 5245,
5248
+ "吒": 5246,
5249
+ "粮": 5247,
5250
+ "伺": 5248,
5251
+ "该": 5249,
5252
+ "氓": 5250,
5253
+ "琅": 5251,
5254
+ "狄": 5252,
5255
+ "蟆": 5253,
5256
+ "曰": 5254,
5257
+ "霆": 5255,
5258
+ "倔": 5256,
5259
+ "苛": 5257,
5260
+ "鳶": 5258,
5261
+ "喽": 5259,
5262
+ "既": 5260,
5263
+ "氤": 5261,
5264
+ "氲": 5262,
5265
+ "丰": 5263,
5266
+ "虞": 5264,
5267
+ "ゝ": 5265,
5268
+ "訳": 5266,
5269
+ "且": 5267,
5270
+ "魉": 5268,
5271
+ "堪": 5269,
5272
+ "濫": 5270,
5273
+ "瀕": 5271,
5274
+ "哬": 5272,
5275
+ "泄": 5273,
5276
+ "岗": 5274,
5277
+ "獏": 5275,
5278
+ "攒": 5276,
5279
+ "婶": 5277,
5280
+ "톤": 5278,
5281
+ "嘭": 5279,
5282
+ "◉": 5280,
5283
+ "谴": 5281,
5284
+ "袟": 5282,
5285
+ "袩": 5283,
5286
+ "侑": 5284,
5287
+ "宍": 5285,
5288
+ "飓": 5286,
5289
+ "尉": 5287,
5290
+ "掠": 5288,
5291
+ "簗": 5289,
5292
+ "瘟": 5290,
5293
+ "L": 5291,
5294
+ "弯": 5292,
5295
+ "膛": 5293,
5296
+ "悍": 5294,
5297
+ "咸": 5295,
5298
+ "寧": 5296,
5299
+ "萎": 5297,
5300
+ "缪": 5298,
5301
+ "蚂": 5299,
5302
+ "Ú": 5300,
5303
+ "矩": 5301,
5304
+ "页": 5302,
5305
+ "额": 5303,
5306
+ "搅": 5304,
5307
+ "损": 5305,
5308
+ "瞭": 5306,
5309
+ "谲": 5307,
5310
+ "绸": 5308,
5311
+ "饺": 5309,
5312
+ "濯": 5310,
5313
+ "ส": 5311,
5314
+ "้": 5312,
5315
+ "โ": 5313,
5316
+ "õ": 5314,
5317
+ "여": 5315,
5318
+ "형": 5316,
5319
+ "유": 5317,
5320
+ "와": 5318,
5321
+ "랑": 5319,
5322
+ "타": 5320,
5323
+ "억": 5321,
5324
+ "경": 5322,
5325
+ "약": 5323,
5326
+ "연": 5324,
5327
+ "ì": 5325,
5328
+ "碟": 5326,
5329
+ "惯": 5327,
5330
+ "悖": 5328,
5331
+ "慷": 5329,
5332
+ "斐": 5330,
5333
+ "藻": 5331,
5334
+ "嘟": 5332,
5335
+ "铀": 5333,
5336
+ "穩": 5334,
5337
+ "趟": 5335,
5338
+ "В": 5336,
5339
+ "Ц": 5337,
5340
+ "毯": 5338,
5341
+ "貯": 5339,
5342
+ "冻": 5340,
5343
+ "穫": 5341,
5344
+ "−": 5342,
5345
+ "雇": 5343,
5346
+ "=": 5344,
5347
+ "敦": 5345,
5348
+ "Ä": 5346,
5349
+ "违": 5347,
5350
+ "暫": 5348,
5351
+ "傍": 5349,
5352
+ "屑": 5350,
5353
+ "乢": 5351,
5354
+ "燭": 5352,
5355
+ "谚": 5353,
5356
+ "嫩": 5354,
5357
+ "穏": 5355,
5358
+ "饅": 5356,
5359
+ "嶋": 5357,
5360
+ "刎": 5358,
5361
+ "煬": 5359,
5362
+ "况": 5360,
5363
+ "溪": 5361,
5364
+ "谛": 5362,
5365
+ "鹳": 5363,
5366
+ "厢": 5364,
5367
+ "爬": 5365,
5368
+ "幅": 5366,
5369
+ "특": 5367,
5370
+ "영": 5368,
5371
+ "토": 5369,
5372
+ "곡": 5370,
5373
+ "념": 5371,
5374
+ "셋": 5372,
5375
+ "쇼": 5373,
5376
+ "되": 5374,
5377
+ "순": 5375,
5378
+ "간": 5376,
5379
+ "최": 5377,
5380
+ "후": 5378,
5381
+ "통": 5379,
5382
+ "승": 5380,
5383
+ "픔": 5381,
5384
+ "흔": 5382,
5385
+ "꽃": 5383,
5386
+ "심": 5384,
5387
+ "요": 5385,
5388
+ "당": 5386,
5389
+ "람": 5387,
5390
+ "륵": 5388,
5391
+ "오": 5389,
5392
+ "용": 5390,
5393
+ "린": 5391,
5394
+ "철": 5392,
5395
+ "쇄": 5393,
5396
+ "잔": 5394,
5397
+ "파": 5395,
5398
+ "몸": 5396,
5399
+ "으": 5397,
5400
+ "빛": 5398,
5401
+ "별": 5399,
5402
+ "짝": 5400,
5403
+ "생": 5401,
5404
+ "중": 5402,
5405
+ "칸": 5403,
5406
+ "질": 5404,
5407
+ "없": 5405,
5408
+ "망": 5406,
5409
+ "둠": 5407,
5410
+ "내": 5408,
5411
+ "일": 5409,
5412
+ "쿠": 5410,
5413
+ "조": 5411,
5414
+ "않": 5412,
5415
+ "誅": 5413,
5416
+ "櫙": 5414,
5417
+ "珜": 5415,
5418
+ "窉": 5416,
5419
+ "儷": 5417,
5420
+ "♫": 5418,
5421
+ "彡": 5419,
5422
+ "糬": 5420,
5423
+ "咋": 5421,
5424
+ "橲": 5422,
5425
+ "弽": 5423,
5426
+ "櫉": 5424,
5427
+ "╋": 5425,
5428
+ "棭": 5426,
5429
+ "璨": 5427,
5430
+ "锝": 5428,
5431
+ "湻": 5429,
5432
+ "嵅": 5430,
5433
+ "楁": 5431,
5434
+ "埦": 5432,
5435
+ "ù": 5433,
5436
+ "橭": 5434,
5437
+ "檋": 5435,
5438
+ "櫭": 5436,
5439
+ "ヽ": 5437,
5440
+ "檌": 5438,
5441
+ "艢": 5439,
5442
+ "潞": 5440,
5443
+ "瞧": 5441,
5444
+ "愰": 5442,
5445
+ "橈": 5443,
5446
+ "壈": 5444,
5447
+ "︿": 5445,
5448
+ "琛": 5446,
5449
+ "铔": 5447,
5450
+ "幓": 5448,
5451
+ "綇": 5449,
5452
+ "曞": 5450,
5453
+ "瓩": 5451,
5454
+ "垏": 5452,
5455
+ "揩": 5453,
5456
+ "壘": 5454,
5457
+ "僝": 5455,
5458
+ "笣": 5456,
5459
+ "杈": 5457,
5460
+ "摱": 5458,
5461
+ "噧": 5459,
5462
+ "ㄨ": 5460,
5463
+ "毊": 5461,
5464
+ "槱": 5462,
5465
+ "崥": 5463,
5466
+ "埇": 5464,
5467
+ "熀": 5465,
5468
+ "惤": 5466,
5469
+ "噷": 5467,
5470
+ "獊": 5468,
5471
+ "綉": 5469,
5472
+ "帴": 5470,
5473
+ "紝": 5471,
5474
+ "叏": 5472,
5475
+ "鍎": 5473,
5476
+ "啀": 5474,
5477
+ "皢": 5475,
5478
+ "籡": 5476,
5479
+ "啋": 5477,
5480
+ "闅": 5478,
5481
+ "嬶": 5479,
5482
+ "拻": 5480,
5483
+ "儨": 5481,
5484
+ "宕": 5482,
5485
+ "簝": 5483,
5486
+ "樇": 5484,
5487
+ "濇": 5485,
5488
+ "湜": 5486,
5489
+ "亹": 5487,
5490
+ "朷": 5488,
5491
+ "磋": 5489,
5492
+ "獌": 5490,
5493
+ "姱": 5491,
5494
+ "婏": 5492,
5495
+ "垎": 5493,
5496
+ "乑": 5494,
5497
+ "痌": 5495,
5498
+ "竾": 5496,
5499
+ "枩": 5497,
5500
+ "儴": 5498,
5501
+ "劋": 5499,
5502
+ "湶": 5500,
5503
+ "垐": 5501,
5504
+ "冿": 5502,
5505
+ "敹": 5503,
5506
+ "厓": 5504,
5507
+ "筣": 5505,
5508
+ "埛": 5506,
5509
+ "仩": 5507,
5510
+ "卯": 5508,
5511
+ "湰": 5509,
5512
+ "逗": 5510,
5513
+ "耗": 5511,
5514
+ "辫": 5512,
5515
+ "盂": 5513,
5516
+ "忚": 5514,
5517
+ "澘": 5515,
5518
+ "纰": 5516,
5519
+ "棈": 5517,
5520
+ "憠": 5518,
5521
+ "櫚": 5519,
5522
+ "潏": 5520,
5523
+ "輾": 5521,
5524
+ "載": 5522,
5525
+ "跤": 5523,
5526
+ "囡": 5524,
5527
+ "恁": 5525,
5528
+ "暝": 5526,
5529
+ "佇": 5527,
5530
+ "欱": 5528,
5531
+ "嚒": 5529,
5532
+ "彮": 5530,
5533
+ "遐": 5531,
5534
+ "疙": 5532,
5535
+ "瘩": 5533,
5536
+ "♨": 5534,
5537
+ "皫": 5535,
5538
+ "嫏": 5536,
5539
+ "惕": 5537,
5540
+ "擒": 5538,
5541
+ "腾": 5539,
5542
+ "崽": 5540,
5543
+ "旷": 5541,
5544
+ "账": 5542,
5545
+ "粪": 5543,
5546
+ "礁": 5544,
5547
+ "猬": 5545,
5548
+ "荆": 5546,
5549
+ "羔": 5547,
5550
+ "秉": 5548,
5551
+ "衫": 5549,
5552
+ "骁": 5550,
5553
+ "豁": 5551,
5554
+ "涧": 5552,
5555
+ "渝": 5553,
5556
+ "砸": 5554,
5557
+ "奬": 5555,
5558
+ "肠": 5556,
5559
+ "凑": 5557,
5560
+ "晒": 5558,
5561
+ "绰": 5559,
5562
+ "埴": 5560,
5563
+ "濁": 5561,
5564
+ "癩": 5562,
5565
+ "掗": 5563,
5566
+ "碷": 5564,
5567
+ "甫": 5565,
5568
+ "槺": 5566,
5569
+ "畧": 5567,
5570
+ "潗": 5568,
5571
+ "奭": 5569,
5572
+ "漖": 5570,
5573
+ "晥": 5571,
5574
+ "崪": 5572,
5575
+ "禫": 5573,
5576
+ "櫤": 5574,
5577
+ "吔": 5575,
5578
+ "紦": 5576,
5579
+ "拰": 5577,
5580
+ "煭": 5578,
5581
+ "绗": 5579,
5582
+ "剰": 5580,
5583
+ "炰": 5581,
5584
+ "胯": 5582,
5585
+ "嗘": 5583,
5586
+ "煟": 5584,
5587
+ "胰": 5585,
5588
+ "œ": 5586,
5589
+ "購": 5587,
5590
+ "ー": 5588,
5591
+ "熴": 5589,
5592
+ "协": 5590,
5593
+ "阅": 5591,
5594
+ "酌": 5592,
5595
+ "榇": 5593,
5596
+ "箖": 5594,
5597
+ "嬨": 5595,
5598
+ "柇": 5596,
5599
+ "悊": 5597,
5600
+ "抬": 5598,
5601
+ "晰": 5599,
5602
+ "穬": 5600,
5603
+ "畽": 5601,
5604
+ "⚔": 5602,
5605
+ "️": 5603,
5606
+ "爍": 5604,
5607
+ "弊": 5605,
5608
+ "髏": 5606,
5609
+ "炫": 5607,
5610
+ "佑": 5608,
5611
+ "鲜": 5609,
5612
+ "壓": 5610,
5613
+ "烁": 5611,
5614
+ "坍": 5612,
5615
+ "锥": 5613,
5616
+ "轭": 5614,
5617
+ "禽": 5615,
5618
+ "鎾": 5616,
5619
+ "岃": 5617,
5620
+ "垍": 5618,
5621
+ "匽": 5619,
5622
+ "慉": 5620,
5623
+ "屉": 5621,
5624
+ "儺": 5622,
5625
+ "⓪": 5623,
5626
+ "陋": 5624,
5627
+ "脇": 5625,
5628
+ "倝": 5626,
5629
+ "嘷": 5627,
5630
+ "榊": 5628,
5631
+ "骏": 5629,
5632
+ "鲤": 5630,
5633
+ "毽": 5631,
5634
+ "咩": 5632,
5635
+ "舖": 5633,
5636
+ "掴": 5634,
5637
+ "儯": 5635,
5638
+ "璙": 5636,
5639
+ "倱": 5637,
5640
+ "韭": 5638,
5641
+ "诶": 5639,
5642
+ "廉": 5640,
5643
+ "轍": 5641,
5644
+ "筈": 5642,
5645
+ "櫌": 5643,
5646
+ "洘": 5644,
5647
+ "丗": 5645,
5648
+ "湧": 5646,
5649
+ "倪": 5647,
5650
+ "權": 5648,
5651
+ "宜": 5649,
5652
+ "麾": 5650,
5653
+ "耕": 5651,
5654
+ "剔": 5652,
5655
+ "胚": 5653,
5656
+ "澹": 5654,
5657
+ "倰": 5655,
5658
+ "亪": 5656,
5659
+ "媉": 5657,
5660
+ "懼": 5658,
5661
+ "棍": 5659,
5662
+ "倢": 5660,
5663
+ "砞": 5661,
5664
+ "绐": 5662,
5665
+ "儐": 5663,
5666
+ "涖": 5664,
5667
+ "儛": 5665,
5668
+ "礭": 5666,
5669
+ "韻": 5667,
5670
+ "鞜": 5668,
5671
+ "宻": 5669,
5672
+ "宺": 5670,
5673
+ "孍": 5671,
5674
+ "㈱": 5672,
5675
+ "澪": 5673,
5676
+ "\": 5674,
5677
+ "◇": 5675,
5678
+ "篭": 5676,
5679
+ "È": 5677,
5680
+ "饜": 5678,
5681
+ "绒": 5679,
5682
+ "剗": 5680,
5683
+ "扱": 5681,
5684
+ "撤": 5682,
5685
+ "磺": 5683,
5686
+ "哼": 5684,
5687
+ "矗": 5685,
5688
+ "骼": 5686,
5689
+ "攝": 5687,
5690
+ "敲": 5688,
5691
+ "侖": 5689,
5692
+ "龐": 5690,
5693
+ "掩": 5691,
5694
+ "賈": 5692,
5695
+ "蘋": 5693,
5696
+ "雞": 5694,
5697
+ "獎": 5695,
5698
+ "嚴": 5696,
5699
+ "幣": 5697,
5700
+ "缄": 5698,
5701
+ "溃": 5699,
5702
+ "炙": 5700,
5703
+ "唠": 5701,
5704
+ "叨": 5702,
5705
+ "犸": 5703,
5706
+ "皂": 5704,
5707
+ "秸": 5705,
5708
+ "扬": 5706,
5709
+ "蓑": 5707,
5710
+ "锻": 5708,
5711
+ "獭": 5709,
5712
+ "杆": 5710,
5713
+ "鲭": 5711,
5714
+ "吖": 5712,
5715
+ "瞒": 5713,
5716
+ "滓": 5714,
5717
+ "鱗": 5715,
5718
+ "燔": 5716,
5719
+ "逡": 5717,
5720
+ "椰": 5718,
5721
+ "弘": 5719,
5722
+ "夾": 5720,
5723
+ "丞": 5721,
5724
+ "螞": 5722,
5725
+ "匡": 5723,
5726
+ "諏": 5724,
5727
+ "駿": 5725,
5728
+ "萍": 5726,
5729
+ "释": 5727,
5730
+ "屏": 5728,
5731
+ "刽": 5729,
5732
+ "述": 5730,
5733
+ "掷": 5731,
5734
+ "蘊": 5732,
5735
+ "匿": 5733,
5736
+ "颤": 5734,
5737
+ "枭": 5735,
5738
+ "霁": 5736,
5739
+ "饒": 5737,
5740
+ "恕": 5738,
5741
+ "溝": 5739,
5742
+ "礙": 5740,
5743
+ "掀": 5741,
5744
+ "囮": 5742,
5745
+ "漱": 5743,
5746
+ "椎": 5744,
5747
+ "稍": 5745,
5748
+ "楊": 5746,
5749
+ "潼": 5747,
5750
+ "殷": 5748,
5751
+ "妲": 5749,
5752
+ "槐": 5750,
5753
+ "赂": 5751,
5754
+ "蚕": 5752,
5755
+ "v": 5753,
5756
+ "s": 5754,
5757
+ "挤": 5755,
5758
+ "弈": 5756,
5759
+ "纤": 5757,
5760
+ "脂": 5758,
5761
+ "荑": 5759,
5762
+ "饕": 5760,
5763
+ "餮": 5761,
5764
+ "阙": 5762,
5765
+ "毅": 5763,
5766
+ "税": 5764,
5767
+ "醇": 5765,
5768
+ "㈢": 5766,
5769
+ "犱": 5767,
5770
+ "栽": 5768,
5771
+ "寡": 5769,
5772
+ "蟑": 5770,
5773
+ "踩": 5771,
5774
+ "跷": 5772,
5775
+ "桀": 5773,
5776
+ "骜": 5774,
5777
+ "鞘": 5775,
5778
+ "槃": 5776,
5779
+ "饥": 5777,
5780
+ "熙": 5778,
5781
+ "较": 5779,
5782
+ "︺": 5780,
5783
+ "曘": 5781,
5784
+ "偂": 5782,
5785
+ "骤": 5783,
5786
+ "阋": 5784,
5787
+ "鸳": 5785,
5788
+ "鸯": 5786,
5789
+ "掻": 5787,
5790
+ "噛": 5788,
5791
+ "笠": 5789,
5792
+ "諧": 5790,
5793
+ "謔": 5791,
5794
+ "瀨": 5792,
5795
+ "聳": 5793,
5796
+ "窺": 5794,
5797
+ "窩": 5795,
5798
+ "勘": 5796,
5799
+ "摂": 5797,
5800
+ "芦": 5798,
5801
+ "鋭": 5799,
5802
+ "絹": 5800,
5803
+ "弔": 5801,
5804
+ "鍬": 5802,
5805
+ "刪": 5803,
5806
+ "燉": 5804,
5807
+ "嘣": 5805,
5808
+ "爲": 5806,
5809
+ "拨": 5807,
5810
+ "遼": 5808,
5811
+ "斃": 5809,
5812
+ "晝": 5810,
5813
+ "顛": 5811,
5814
+ "擴": 5812,
5815
+ "渗": 5813,
5816
+ "嵬": 5814,
5817
+ "挵": 5815,
5818
+ "嵒": 5816,
5819
+ "粸": 5817,
5820
+ "幆": 5818,
5821
+ "姭": 5819,
5822
+ "綊": 5820,
5823
+ "嵈": 5821,
5824
+ "О": 5822,
5825
+ "爹": 5823,
5826
+ "魇": 5824,
5827
+ "娼": 5825,
5828
+ "叆": 5826,
5829
+ "宀": 5827,
5830
+ "殣": 5828,
5831
+ "≈": 5829,
5832
+ "扩": 5830,
5833
+ "諍": 5831,
5834
+ "昡": 5832,
5835
+ "尹": 5833,
5836
+ "辅": 5834,
5837
+ "巷": 5835,
5838
+ "喋": 5836,
5839
+ "滲": 5837,
5840
+ "鬆": 5838,
5841
+ "碁": 5839,
5842
+ "篱": 5840,
5843
+ "禹": 5841,
5844
+ "軒": 5842,
5845
+ "轅": 5843,
5846
+ "懵": 5844,
5847
+ "棠": 5845,
5848
+ "儣": 5846,
5849
+ "糾": 5847,
5850
+ "紛": 5848,
5851
+ "蚀": 5849,
5852
+ "亘": 5850,
5853
+ "腊": 5851,
5854
+ "锡": 5852,
5855
+ "橡": 5853,
5856
+ "韁": 5854,
5857
+ "穣": 5855,
5858
+ "蔬": 5856,
5859
+ "驭": 5857,
5860
+ "哑": 5858,
5861
+ "览": 5859,
5862
+ "瞑": 5860,
5863
+ "雕": 5861,
5864
+ "聊": 5862,
5865
+ "藕": 5863,
5866
+ "嗯": 5864,
5867
+ "赠": 5865,
5868
+ "朦": 5866,
5869
+ "醮": 5867,
5870
+ "饵": 5868,
5871
+ "莹": 5869,
5872
+ "敛": 5870,
5873
+ "隕": 5871,
5874
+ "凋": 5872,
5875
+ "屠": 5873,
5876
+ "衷": 5874,
5877
+ "亏": 5875,
5878
+ "嫣": 5876,
5879
+ "衅": 5877,
5880
+ "扁": 5878,
5881
+ "鹊": 5879,
5882
+ "辗": 5880,
5883
+ "迟": 5881,
5884
+ "墩": 5882,
5885
+ "兮": 5883,
5886
+ "螳": 5884,
5887
+ "俯": 5885,
5888
+ "譽": 5886,
5889
+ "敘": 5887,
5890
+ "驕": 5888,
5891
+ "厚": 5889,
5892
+ "遞": 5890,
5893
+ "朽": 5891,
5894
+ "彫": 5892,
5895
+ "苒": 5893,
5896
+ "尴": 5894,
5897
+ "尬": 5895,
5898
+ "陌": 5896,
5899
+ "讶": 5897,
5900
+ "彀": 5898,
5901
+ "氾": 5899,
5902
+ "徴": 5900,
5903
+ "洄": 5901,
5904
+ "驹": 5902,
5905
+ "荊": 5903,
5906
+ "赋": 5904,
5907
+ "羚": 5905,
5908
+ "宪": 5906,
5909
+ "敕": 5907,
5910
+ "楕": 5908,
5911
+ "濱": 5909,
5912
+ "遜": 5910,
5913
+ "侧": 5911,
5914
+ "餘": 5912,
5915
+ "盪": 5913,
5916
+ "漾": 5914,
5917
+ "絽": 5915,
5918
+ "曉": 5916,
5919
+ "寢": 5917,
5920
+ "诊": 5918,
5921
+ "汹": 5919,
5922
+ "详": 5920,
5923
+ "估": 5921,
5924
+ "诹": 5922,
5925
+ "隧": 5923,
5926
+ "缓": 5924,
5927
+ "铐": 5925,
5928
+ "劾": 5926,
5929
+ "諱": 5927,
5930
+ "堺": 5928,
5931
+ "舗": 5929,
5932
+ "́": 5930,
5933
+ "◞": 5931,
5934
+ "౪": 5932,
5935
+ "◟": 5933,
5936
+ "‵": 5934,
5937
+ "挣": 5935,
5938
+ "锌": 5936,
5939
+ "褘": 5937,
5940
+ "衼": 5938,
5941
+ "i": 5939,
5942
+ "販": 5940,
5943
+ "促": 5941,
5944
+ "÷": 5942,
5945
+ "箋": 5943,
5946
+ "聪": 5944,
5947
+ "鍍": 5945,
5948
+ "姥": 5946,
5949
+ "蕪": 5947,
5950
+ "尺": 5948,
5951
+ "牺": 5949,
5952
+ "圃": 5950,
5953
+ "咧": 5951,
5954
+ "仅": 5952,
5955
+ "涤": 5953,
5956
+ "嘲": 5954,
5957
+ "獠": 5955,
5958
+ "旺": 5956,
5959
+ "縦": 5957,
5960
+ "蕭": 5958,
5961
+ "據": 5959,
5962
+ "薛": 5960,
5963
+ "辜": 5961,
5964
+ "债": 5962,
5965
+ "慑": 5963,
5966
+ "拦": 5964,
5967
+ "谬": 5965,
5968
+ "氢": 5966,
5969
+ "₂": 5967,
5970
+ "疤": 5968,
5971
+ "彰": 5969,
5972
+ "酎": 5970,
5973
+ "粧": 5971,
5974
+ "瀾": 5972,
5975
+ "縊": 5973,
5976
+ "゚": 5974,
5977
+ "蚤": 5975,
5978
+ "荐": 5976,
5979
+ "蹭": 5977,
5980
+ "芋": 5978,
5981
+ "扔": 5979,
5982
+ "腌": 5980,
5983
+ "拆": 5981,
5984
+ "เ": 5982,
5985
+ "า": 5983,
5986
+ "ง": 5984,
5987
+ "ู": 5985,
5988
+ "ถ": 5986,
5989
+ "ว": 5987,
5990
+ "ย": 5988,
5991
+ "ฮ": 5989,
5992
+ "ค": 5990,
5993
+ "ุ": 5991,
5994
+ "ะ": 5992,
5995
+ "귀": 5993,
5996
+ "탑": 5994,
5997
+ "습": 5995,
5998
+ "치": 5996,
5999
+ "크": 5997,
6000
+ "새": 5998,
6001
+ "벌": 5999,
6002
+ "위": 6000,
6003
+ "글": 6001,
6004
+ "러": 6002,
6005
+ "브": 6003,
6006
+ "백": 6004,
6007
+ "축": 6005,
6008
+ "신": 6006,
6009
+ "옛": 6007,
6010
+ "발": 6008,
6011
+ "렌": 6009,
6012
+ "강": 6010,
6013
+ "력": 6011,
6014
+ "혜": 6012,
6015
+ "알": 6013,
6016
+ "수": 6014,
6017
+ "찰": 6015,
6018
+ "샐": 6016,
6019
+ "잡": 6017,
6020
+ "샴": 6018,
6021
+ "델": 6019,
6022
+ "회": 6020,
6023
+ "찾": 6021,
6024
+ "뷰": 6022,
6025
+ "행": 6023,
6026
+ "복": 6024,
6027
+ "무": 6025,
6028
+ "호": 6026,
6029
+ "합": 6027,
6030
+ "날": 6028,
6031
+ "개": 6029,
6032
+ "탐": 6030,
6033
+ "단": 6031,
6034
+ "돌": 6032,
6035
+ "엄": 6033,
6036
+ "셜": 6034,
6037
+ "록": 6035,
6038
+ "은": 6036,
6039
+ "표": 6037,
6040
+ "菩": 6038,
6041
+ "酢": 6039,
6042
+ "醬": 6040,
6043
+ "顆": 6041,
6044
+ "颶": 6042,
6045
+ "胤": 6043,
6046
+ "焗": 6044,
6047
+ "鉛": 6045,
6048
+ "嶽": 6046,
6049
+ "咽": 6047,
6050
+ "篠": 6048,
6051
+ "躙": 6049,
6052
+ "腭": 6050,
6053
+ "筥": 6051,
6054
+ "啤": 6052,
6055
+ "堵": 6053,
6056
+ "←": 6054,
6057
+ "鵜": 6055,
6058
+ "茨": 6056,
6059
+ "硯": 6057,
6060
+ "眇": 6058,
6061
+ "瞼": 6059,
6062
+ "茵": 6060,
6063
+ "囀": 6061,
6064
+ "嘯": 6062,
6065
+ "曝": 6063,
6066
+ "洼": 6064,
6067
+ "俐": 6065,
6068
+ "條": 6066,
6069
+ "嚙": 6067,
6070
+ "逻": 6068,
6071
+ "霾": 6069,
6072
+ "仍": 6070,
6073
+ "鞄": 6071,
6074
+ "∴": 6072,
6075
+ "瞌": 6073,
6076
+ "Н": 6074,
6077
+ "Т": 6075,
6078
+ "Ь": 6076,
6079
+ "М": 6077,
6080
+ "С": 6078,
6081
+ "Я": 6079,
6082
+ "錶": 6080,
6083
+ "腳": 6081,
6084
+ "觀": 6082,
6085
+ "攬": 6083,
6086
+ "搗": 6084,
6087
+ "鵝": 6085,
6088
+ "遨": 6086,
6089
+ "黍": 6087,
6090
+ "滞": 6088,
6091
+ "涕": 6089,
6092
+ "紘": 6090,
6093
+ "锭": 6091,
6094
+ "秧": 6092,
6095
+ "匂": 6093,
6096
+ "蔓": 6094,
6097
+ "缠": 6095,
6098
+ "嗝": 6096,
6099
+ "挪": 6097,
6100
+ "噶": 6098,
6101
+ "闵": 6099,
6102
+ "檎": 6100,
6103
+ "櫛": 6101,
6104
+ "Å": 6102,
6105
+ "忒": 6103,
6106
+ "朹": 6104,
6107
+ "飽": 6105,
6108
+ "騷": 6106,
6109
+ "闊": 6107,
6110
+ "囂": 6108,
6111
+ "覿": 6109,
6112
+ "輿": 6110,
6113
+ "鉥": 6111,
6114
+ "粹": 6112,
6115
+ "觐": 6113,
6116
+ "渔": 6114,
6117
+ "濑": 6115,
6118
+ "彝": 6116,
6119
+ "屿": 6117,
6120
+ "骋": 6118,
6121
+ "汀": 6119,
6122
+ "哺": 6120,
6123
+ "駈": 6121,
6124
+ "樅": 6122,
6125
+ "麓": 6123,
6126
+ "鉇": 6124,
6127
+ "諠": 6125,
6128
+ "嶺": 6126,
6129
+ "雉": 6127,
6130
+ "宵": 6128,
6131
+ "截": 6129,
6132
+ "簷": 6130,
6133
+ "廁": 6131,
6134
+ "嚇": 6132,
6135
+ "膚": 6133,
6136
+ "撓": 6134,
6137
+ "俵": 6135,
6138
+ "賄": 6136,
6139
+ "賂": 6137,
6140
+ "珈": 6138,
6141
+ "琲": 6139,
6142
+ "‘": 6140,
6143
+ "骗": 6141,
6144
+ "逞": 6142,
6145
+ "漲": 6143,
6146
+ "媚": 6144,
6147
+ "ホ": 6145,
6148
+ "゚": 6146,
6149
+ "酉": 6147,
6150
+ "槿": 6148,
6151
+ "馴": 6149,
6152
+ "遡": 6150,
6153
+ "鬨": 6151,
6154
+ "拮": 6152,
6155
+ "慣": 6153,
6156
+ "榦": 6154,
6157
+ "詄": 6155,
6158
+ "躁": 6156,
6159
+ "飈": 6157,
6160
+ "阬": 6158,
6161
+ "泀": 6159,
6162
+ "踖": 6160,
6163
+ "吝": 6161,
6164
+ "靂": 6162,
6165
+ "簾": 6163,
6166
+ "贫": 6164,
6167
+ "毙": 6165,
6168
+ "頚": 6166,
6169
+ "箪": 6167,
6170
+ "忤": 6168,
6171
+ "驷": 6169,
6172
+ "庸": 6170,
6173
+ "缭": 6171,
6174
+ "彌": 6172,
6175
+ "樓": 6173,
6176
+ "扼": 6174,
6177
+ "鉢": 6175,
6178
+ "漣": 6176,
6179
+ "濤": 6177,
6180
+ "⑨": 6178,
6181
+ "⑧": 6179,
6182
+ "呉": 6180,
6183
+ "⑩": 6181,
6184
+ "⑦": 6182,
6185
+ "飴": 6183,
6186
+ "└": 6184,
6187
+ "»": 6185,
6188
+ "▒": 6186,
6189
+ "╩": 6187,
6190
+ "╨": 6188,
6191
+ "╔": 6189,
6192
+ "篷": 6190,
6193
+ "嘿": 6191,
6194
+ "唷": 6192,
6195
+ "圓": 6193,
6196
+ "痩": 6194,
6197
+ "嗤": 6195,
6198
+ "裹": 6196,
6199
+ "徙": 6197,
6200
+ "窖": 6198
6201
+ }