--- /dev/null
+---
+# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
+Language: Cpp
+# BasedOnStyle: LLVM
+# 访问说明符(public、private等)的偏移
+AccessModifierOffset: -4
+# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
+AlignAfterOpenBracket: Align
+# 连续赋值时,对齐所有等号
+AlignConsecutiveAssignments: None
+# 连续声明时,对齐所有声明的变量名
+AlignConsecutiveDeclarations: None
+
+AlignEscapedNewlines: Right
+
+# 左对齐逃脱换行(使用反斜杠换行)的反斜杠
+#AlignEscapedNewlinesLeft: true
+# 水平对齐二元和三元表达式的操作数
+AlignOperands: true
+# 对齐连续的尾随的注释
+AlignTrailingComments: true
+
+# 允许函数声明的所有参数在放在下一行
+AllowAllParametersOfDeclarationOnNextLine: true
+# 允许短的块放在同一行
+AllowShortBlocksOnASingleLine: Empty
+# 允许短的case标签放在同一行
+AllowShortCaseLabelsOnASingleLine: false
+# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
+AllowShortFunctionsOnASingleLine: Inline
+# 允许短的if语句保持在同一行
+AllowShortIfStatementsOnASingleLine: false
+# 允许短的循环保持在同一行
+AllowShortLoopsOnASingleLine: false
+
+# 总是在定义返回类型后换行(deprecated)
+AlwaysBreakAfterDefinitionReturnType: None
+# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数),
+# AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
+AlwaysBreakAfterReturnType: None
+# 总是在多行string字面量前换行
+AlwaysBreakBeforeMultilineStrings: false
+# 总是在template声明后换行
+AlwaysBreakTemplateDeclarations: Yes
+# false表示函数实参要么都在同一行,要么都各自一行
+BinPackArguments: false
+# false表示所有形参要么都在同一行,要么都各自一行
+BinPackParameters: false
+# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
+BraceWrapping:
+ # class定义后面
+ AfterClass: true
+ # 控制语句后面
+ AfterControlStatement: Never
+ # enum定义后面
+ AfterEnum: false
+ # 函数定义后面
+ AfterFunction: true
+ # 命名空间定义后面
+ AfterNamespace: false
+ # ObjC定义后面
+ AfterObjCDeclaration: false
+ # struct定义后面
+ AfterStruct: true
+ # union定义后面
+ AfterUnion: true
+
+ AfterExternBlock: false
+ # catch之前
+ BeforeCatch: false
+ # else之前
+ BeforeElse: false
+ # 缩进大括号
+ IndentBraces: false
+ SplitEmptyFunction: true
+ SplitEmptyRecord: true
+ SplitEmptyNamespace: true
+
+# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
+BreakBeforeBinaryOperators: None
+# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似),
+# Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似),
+# Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom
+# 注:这里认为语句块也属于函数
+BreakBeforeBraces: Custom
+# 在三元运算符前换行
+BreakBeforeTernaryOperators: false
+
+# 在构造函数的初始化列表的逗号前换行
+BreakConstructorInitializersBeforeComma: true
+BreakConstructorInitializers: BeforeColon
+# 每行字符的限制,0表示没有限制
+ColumnLimit: 130
+# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
+CommentPragmas: '^ IWYU pragma:'
+CompactNamespaces: false
+# 构造函数的初始化列表要么都在同一行,要么都各自一行
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+# 构造函数的初始化列表的缩进宽度
+ConstructorInitializerIndentWidth: 4
+# 延续的行的缩进宽度
+ContinuationIndentWidth: 4
+# 去除C++11的列表初始化的大括号{后和}前的空格
+Cpp11BracedListStyle: true
+# 继承最常用的指针和引用的对齐方式
+DerivePointerAlignment: false
+# 关闭格式化
+DisableFormat: false
+# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
+ExperimentalAutoDetectBinPacking: false
+# 需要被解读为foreach循环而不是函数调用的宏
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+# 对#include进行排序,匹配了某正则表达式的#include拥有对应的优先级,匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前),
+# 可以定义负数优先级从而保证某些#include永远在最前面
+IncludeCategories:
+ - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
+ Priority: 2
+ - Regex: '^(<|"(gtest|isl|json)/)'
+ Priority: 3
+ - Regex: '.*'
+ Priority: 1
+# 缩进case标签
+IndentCaseLabels: true
+
+#IndentPPDirectives: AfterHash
+# 缩进宽度
+IndentWidth: 4
+# 函数返回类型换行时,缩进函数声明或函数定义的函数名
+IndentWrappedFunctionNames: false
+# 保留在块开始处的空行
+KeepEmptyLinesAtTheStartOfBlocks: false
+# 开始一个块的宏的正则表达式
+MacroBlockBegin: ''
+# 结束一个块的宏的正则表达式
+MacroBlockEnd: ''
+# 连续空行的最大数量
+MaxEmptyLinesToKeep: 1
+# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All
+NamespaceIndentation: Inner
+# 使用ObjC块时缩进宽度
+ObjCBlockIndentWidth: 4
+# 在ObjC的@property后添加一个空格
+ObjCSpaceAfterProperty: false
+# 在ObjC的protocol列表前添加一个空格
+ObjCSpaceBeforeProtocolList: true
+
+
+# 在call(后对函数调用换行的penalty
+PenaltyBreakBeforeFirstCallParameter: 19
+# 在一个注释中引入换行的penalty
+PenaltyBreakComment: 300
+# 第一次在<<前换行的penalty
+PenaltyBreakFirstLessLess: 120
+# 在一个字符串字面量中引入换行的penalty
+PenaltyBreakString: 1000
+# 对于每个在行字符数限制之外的字符的penalty
+PenaltyExcessCharacter: 1000000
+# 将函数的返回类型放到它自己的行的penalty
+PenaltyReturnTypeOnItsOwnLine: 60
+
+# 指针和引用的对齐: Left, Right, Middle
+PointerAlignment: Right
+# 允许重新排版注释
+ReflowComments: true
+# 允许排序#include
+SortIncludes: Never
+
+# 在C风格类型转换后添加空格
+SpaceAfterCStyleCast: false
+
+SpaceAfterTemplateKeyword: true
+
+# 在赋值运算符之前添加空格
+SpaceBeforeAssignmentOperators: true
+# 开圆括号之前添加一个空格: Never, ControlStatements, Always
+SpaceBeforeParens: ControlStatements
+# 在空的圆括号中添加空格
+SpaceInEmptyParentheses: false
+# 在尾随的评论前添加的空格数(只适用于//)
+SpacesBeforeTrailingComments: 2
+# 在尖括号的<后和>前添加空格
+SpacesInAngles: false
+# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
+SpacesInContainerLiterals: false
+# 在C风格类型转换的括号中添加空格
+SpacesInCStyleCastParentheses: false
+# 在圆括号的(后和)前添加空格
+SpacesInParentheses: false
+# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响
+SpacesInSquareBrackets: false
+# 标准: Cpp03, Cpp11, Auto
+Standard: Auto
+# tab宽度
+TabWidth: 4
+# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
+UseTab: Never
-blank_issues_enabled: true
+blank_issues_enabled: false
+contact_links:
+ - name: BUG Report | 缺陷报告
+ url: https://github.com/linuxdeepin/dtk/issues/new?assignees=&labels=&template=bug-report.yml
+ about: Please create bug reports to the issue board in our dtk repo.
+
+ - name: docs-update | 文档补充
+ url: https://github.com/linuxdeepin/dtk/issues/new?assignees=&labels=&template=docs-update.yml
+ about: Please create docs-update to the issue board in our dtk repo.
+
+ - name: unit-test-report | 单元测试报告
+ url: https://github.com/linuxdeepin/dtk/issues/new?assignees=&labels=&template=unit-test-report.yml
+ about: Please create unit-test-report to the issue board in our dtk repo.
+
+ - name: Feature Request | 特性请求
+ url: https://github.com/linuxdeepin/developer-center/discussions/new?category=features-request-ideas-%E7%89%B9%E6%80%A7%E8%AF%B7%E6%B1%82-%E5%A4%B4%E8%84%91%E9%A3%8E%E6%9A%B4
+ about: Please create feature requests to the discussion board in our developer-center repo.
+ - name: General Discussion & Questions | 常规讨论与问答
+ url: https://github.com/linuxdeepin/developer-center/discussions/categories/q-a-%E9%97%AE%E7%AD%94%E6%9D%BF%E5%9D%97
+ about: Please use the discussion board in our developer-center repo.
--- /dev/null
+---
+name: Docs update
+about: Document Normalization
+title: 'Doc: [Document Type][file name]'
+labels: 'Doc'
+assignees: ''
+---
+## Target files (目标文件)
+
+## Planned completion time (计划完成时间)
+
+## Document Type (文档类型)
+
+[] New documents
+[] Standardized documents
+[] Internationalization of documents
+[] Example documents
+++ /dev/null
----
-name: Empty issue
-about: File a Empty issue
-title: ''
-labels: ''
-assignees: ''
-
----
+++ /dev/null
----
-name: Unit test report
-about: File a unit test report.
-title: 'Test: [class name]'
-labels: ''
-assignees: ''
-
----
-
-Path: [class file path]
-Interface: [class interface name]
-
jobs:
backup-to-gitlabwh:
uses: linuxdeepin/.github/.github/workflows/backup-to-gitlabwh.yml@master
- secrets:
- BRIDGETOKEN: ${{ secrets.BRIDGETOKEN }}
+ secrets: inherit
backup-to-gitee:
uses: linuxdeepin/.github/.github/workflows/backup-to-gitee.yml@master
- secrets:
- GITEE_SYNC_TOKEN: ${{ secrets.GITEE_SYNC_TOKEN }}
+ secrets: inherit
+++ /dev/null
-name: Call build-deb
-on:
- pull_request_target:
- paths-ignore:
- - ".github/workflows/**"
- types: [ opened, closed, synchronize ]
-
-concurrency:
- group: ${{ github.workflow }}-pull/${{ github.event.number }}
- cancel-in-progress: true
-
-jobs:
- check_job:
- if: github.event.action != 'closed' || github.event.pull_request.merged
- uses: linuxdeepin/.github/.github/workflows/build-deb.yml@master
- secrets:
- BridgeToken: ${{ secrets.BridgeToken }}
jobs:
check_job:
uses: linuxdeepin/.github/.github/workflows/build-distribution.yml@master
- secrets:
- BUILD_GPG_PRIVATE_KEY: ${{ secrets.BUILD_GPG_PRIVATE_KEY }}
- BUILD_SSH_PRIVATE_KEY: ${{ secrets.BUILD_SSH_PRIVATE_KEY }}
- WEBDAV_PASSWD: ${{ secrets.WEBDAV_PASSWD }}
- WEBDAV_USER: ${{ secrets.WEBDAV_USER }}
+ secrets: inherit
jobs:
chatopt:
uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master
- secrets:
- APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
+ secrets: inherit
jobs:
clacheck:
uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master
- secrets:
- APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
+ secrets: inherit
--- /dev/null
+name: deploy docs\r
+on:\r
+ push:\r
+ branches: ["master"]\r
+ workflow_dispatch:\r
+ inputs:\r
+ tag:\r
+ required: true\r
+ type: string\r
+\r
+permissions:\r
+ contents: read\r
+ pages: write\r
+ id-token: write\r
+\r
+# Allow one concurrent deployment\r
+concurrency:\r
+ group: "pages"\r
+ cancel-in-progress: true\r
+\r
+jobs:\r
+ deploydocs:\r
+ uses: linuxdeepin/.github/.github/workflows/deploy-dev-doc.yml@master\r
+ with:\r
+ ref: ${{ inputs.tag }}\r
+ secrets: inherit\r
jobs:
check_job:
uses: linuxdeepin/.github/.github/workflows/doc-check.yml@master
- secrets:
- APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
+ secrets: inherit
--- /dev/null
+name: Call synchronize to dtk6
+on:
+ pull_request_target:
+ paths-ignore:
+ - "debian/**"
+ - "archlinux/**"
+ - "rpm/**"
+ - ".obs/**"
+ - ".github/**"
+
+jobs:
+ call-synchronize:
+ uses: linuxdeepin/dtk/.github/workflows/synchronize-to-dtk6.yml@master
+ secrets: inherit
+ with:
+ dest_repo: linuxdeepin/dtk6core
+ source_repo: ${{ github.event.pull_request.head.repo.full_name }}
+ source_ref: ${{ github.event.pull_request.head.ref }}
+ pull_number: ${{ github.event.pull_request.number }}
+++ /dev/null
-name: tag build
-on:
- push:
- tags: "*"
-
-concurrency:
- group: ${{ github.workflow }}
- cancel-in-progress: true
-
-jobs:
- build:
- uses: linuxdeepin/.github/.github/workflows/build-tag.yml@master
- secrets: inherit
runs-on: ubuntu-latest
steps:
- run: export
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false
*.qm
src/DtkCores
-src/dtkcore_config.h
-cmake/DtkCore/DtkCoreConfig.cmake
-src/qt_lib_d*.pri
bin/
.qmake*
cmake/DtkCore*
.cache
-DtkCoreConfig.cmake
-dtkcore.pc
-qt_lib_dtkcore.pri
+*.pc
+*.pri
dtkcore_config.h
-CMakeLists.txt.user
+*.user
+
+#tools
+.vscode
+.idea
+
+# Ignore Doxygen theme files
+docs/doxygen-theme/
--- /dev/null
+test_build:
+ steps:
+ - link_package:
+ source_project: deepin:Develop:dde
+ source_package: %{SCM_REPOSITORY_NAME}
+ target_project: deepin:CI
+
+ - configure_repositories:
+ project: deepin:CI
+ repositories:
+ - name: deepin_develop
+ paths:
+ - target_project: deepin:CI
+ target_repository: deepin_develop
+ architectures:
+ - x86_64
+ - aarch64
+
+ - name: debian
+ paths:
+ - target_project: deepin:CI
+ target_repository: debian_sid
+ architectures:
+ - x86_64
+
+ - name: archlinux
+ paths:
+ - target_project: deepin:CI
+ target_repository: archlinux
+ architectures:
+ - x86_64
+
+ filters:
+ event: pull_request
+
+tag_build:
+ steps:
+ - branch_package:
+ source_project: deepin:Develop:dde
+ source_package: %{SCM_REPOSITORY_NAME}
+ target_project: deepin:Unstable:dde
+ filters:
+ event: tag_push
+
+commit_build:
+ steps:
+ - trigger_services:
+ project: deepin:Develop:dde
+ package: %{SCM_REPOSITORY_NAME}
+ filters:
+ event: push
# License: ...
# ci
-Files: .github/* *.yml *.yaml
+Files: .github/* *.yml *.yaml .obs/* .syncexclude
Copyright: None
License: CC0-1.0
License: CC0-1.0
# config
-Files: *.toml *.conf *.json
+Files: *.toml *.conf *.json .clang-format
Copyright: None
License: CC0-1.0
# qt
-Files: *.pro *.pri *.qrc
+Files: *.pro *.pri *.qrc *.prf
Copyright: None
License: CC0-1.0
Copyright: UnionTech Software Technology Co., Ltd.
License: CC-BY-4.0
+# doxygen src
+Files: docs/src/*
+Copyright: None
+License: CC0-1.0
+
# interface
Files: include/DtkCore/D*
Copyright: None
License: CC0-1.0
# others
-Files: src/util/resources/dpinyin.dict
+Files: src/util/resources/dpinyin.dict tests/data/LGPLv3.txt
Copyright: None
License: CC0-1.0
#doxygentheme
Files: docs/doxygentheme/*
Copyright: Copyright (c) 2021 - 2022 jothepro
-License: MIT
\ No newline at end of file
+License: MIT
+
+#reference
+Files: docs/references/*
+Copyright: UnionTech Software Technology Co., Ltd.
+License: CC-BY-4.0
--- /dev/null
+# Paths that will be exclude from synchronize workflow
+# Please use relative path which use project directory as root
+# Notice that
+# * .git
+# * debian
+# * archlinux
+# * .obs
+# * .github
+# are always ignored
+linglong.yaml
+conanfile.py
-cmake_minimum_required (VERSION 3.10)
-
-set (DVERSION "5.6.2" CACHE STRING "define project version")
+cmake_minimum_required (VERSION 3.13)
+set (DTK_VERSION "5.6.12" CACHE STRING "define project version")
project (DtkCore
- VERSION ${DVERSION}
+ VERSION ${DTK_VERSION}
DESCRIPTION "DTK Core module"
HOMEPAGE_URL "https://github.com/linuxdeepin/dtkcore"
LANGUAGES CXX C
)
-message(STATUS ${PROJECT_VERSION})
-
-include(GNUInstallDirs)
-include(CMakePackageConfigHelpers)
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX /usr)
endif ()
-set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}/libdtk-${CMAKE_PROJECT_VERSION}/DCore")
-set (TOOL_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/libdtk-${PROJECT_VERSION}/DCore/bin")
-set (LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}")
-set (MKSPECS_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/qt5/mkspecs/modules" CACHE STRING "INSTALL DIR FOR qt pri files")
-
-set (BUILD_EXAMPLES ON CACHE BOOL "Build examples")
-option(BUILD_VERSION "buildversion" "0")
-if(NOT BUILD_VERSION)
- set(BUILD_VERSION "0")
-endif()
-if(UNIX AND NOT APPLE)
- set(LINUX TRUE)
-endif()
-set (BUILD_DOCS ON CACHE BOOL "Generate doxygen-based documentation")
-
-# CXX FILAGS
-set(CMAKE_CXX_STANDARD 11)
-if (NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE Release)
-endif()
-
-if(NOT MSVC)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra")
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
- if (CMAKE_BUILD_TYPE STREQUAL "Debug")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
- set(BUILD_TESTING ON)
- endif ()
- string(REPLACE "-O3" "-Ofast" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
-endif()
-
-if (BUILD_DOCS)
- add_subdirectory(docs)
-endif ()
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
-add_subdirectory(src)
-if(BUILD_TESTING)
- message("==================================")
- message(" Now Testing is enabled ")
- message("==================================")
- enable_testing()
- add_subdirectory(tests)
-endif()
-if(BUILD_EXAMPLES)
- message("===================================")
- message("You can build and run examples now ")
- message("===================================")
- add_subdirectory(examples)
+if("${PROJECT_VERSION_MAJOR}" STREQUAL "5")
+ set(QT_VERSION_MAJOR "5")
+elseif("${PROJECT_VERSION_MAJOR}" STREQUAL "6")
+ set(QT_VERSION_MAJOR "6")
+ set(DTK_VERSION_MAJOR "6")
+else()
+ message(SEND_ERROR "not support Prject Version ${PROJECT_VERSION}.")
endif()
-add_subdirectory(tools)
-install(FILES cmake/DtkCMake/DtkCMakeConfig.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/DtkCMake/")
-install(FILES cmake/DtkTools/DtkToolsConfig.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/DtkTools")
-install(FILES cmake/DtkTools/DtkSettingsToolsMacros.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/DtkTools")
-
-configure_package_config_file(misc/DtkConfig.cmake.in
- ${CMAKE_CURRENT_BINARY_DIR}/DtkCoreConfig.cmake
- INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/DtkCore"
- PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_DIR TOOL_INSTALL_DIR)
-write_basic_package_version_file(
- "${CMAKE_CURRENT_BINARY_DIR}/DtkCoreConfigVersion.cmake"
- VERSION ${DVERSION}
- COMPATIBILITY SameMajorVersion
-)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/DtkCoreConfig.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/DtkCore")
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/DtkCoreConfigVersion.cmake DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/DtkCore")
-
-configure_file(misc/dtkcore.pc.in dtkcore.pc @ONLY)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dtkcore.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
-
-configure_file(misc/qt_lib_dtkcore.pri.in qt_lib_dtkcore.pri @ONLY)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qt_lib_dtkcore.pri DESTINATION "${MKSPECS_INSTALL_DIR}")
-set(CONFIGNAME include/global/dtkcore_config.h)
-file(WRITE ${CONFIGNAME}
- "// it is auto make config\n"
- "#define DTK_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}\n"
- "#define DTK_VERSION_MINOR ${PROJECT_VERSION_MINOR}\n"
- "#define DTK_VERSION_PATCH ${PROJECT_VERSION_PATCH}\n"
- "#define DTK_VERSION_BUILD ${BUILD_VERSION}\n"
- "#define DTK_VERSION_STR \"${PROJECT_VERSION}\"\n"
- "\n"
-)
-file(GLOB CONFIGSOURCE include/DtkCore/*)
-foreach(FILENAME ${CONFIGSOURCE})
- get_filename_component(thefile ${FILENAME} NAME)
- file(APPEND ${CONFIGNAME} "#define DTKCORE_CLASS_${thefile}\n")
-endforeach()
+include(dtkcore.cmake)
--- /dev/null
+Copyright (c) <year> <owner>.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+++ /dev/null
-MIT License
-
-Copyright (c) <year> <copyright holders>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
You should read the <a href=docs/Specification.md>Deepin Application Specification</a> firstly.
+中文说明:[README.zh_CN.md](./README.zh_CN.md)
+
+## Document
+
+中文文档:[dtkcore文档](https://linuxdeepin.github.io/dtkcore/index.html)
+
## Dependencies
### Build dependencies
* Qt >= 5.10
+## Compile option
+
+| **Compile option** | **meaning** | **Default state** |
+|--------------------|-------------|---------------|
+| BUILD_DOCS | Compile document | ON |
+| BUILD_TESTING | Compile test | Default is ON in debug mode |
+| BUILD_EXAMPLES | Compile example | ON |
+| BUILD_WITH_SYSTEMD | Support Systemd function | OFF |
+| BUILD_THEME | Add themes to the document | OFF |
## Installation
### Build from source code
您应该首先阅读 <a href=docs/Specification.md>Deepin应用程序规范</a>.
+## 文档
+
+中文文档:[dtkcore文档](https://linuxdeepin.github.io/dtkcore/index.html)
+
## 依赖
### 编译依赖
* Qt >= 5.10
+## 编译选项
+
+| **编译选项** | **含义** | **默认状态** |
+|--------------------|-------------|---------------|
+| BUILD_DOCS | 编译文档 | ON |
+| BUILD_TESTING | 编译测试 | Debug模式下默认为ON |
+| BUILD_EXAMPLES | 编译示例 | ON |
+| BUILD_WITH_SYSTEMD | 支持Systmed功能 | OFF |
+| BUILD_THEME | 为文档添加主题 | OFF |
+
## 安装
### 从源代码构建
# Maintainer: justforlxz <justforlxz@gmail.com>
pkgname=dtkcore-git
-pkgver=5.5.23.r5.g74f86b0
+pkgver=5.6.16
pkgrel=1
+sourcename=dtkcore
+sourcetars=("$sourcename"_"$pkgver".tar.xz)
+sourcedir="$sourcename"
pkgdesc='DTK core modules'
arch=('x86_64' 'aarch64')
url="https://github.com/linuxdeepin/dtkcore"
license=('LGPL3')
-depends=('dconf' 'deepin-desktop-base-git' 'python' 'gsettings-qt' 'lshw')
-makedepends=('git' 'qt5-tools' 'dtkcommon-git' 'ninja' 'cmake' 'doxygen')
+depends=('deepin-desktop-base-git' 'gsettings-qt' 'dtkcommon-git' 'lshw' 'uchardet' 'icu' 'libsystemd' 'spdlog')
+makedepends=('git' 'qt5-tools' 'ninja' 'cmake' 'doxygen')
conflicts=('dtkcore')
provides=('dtkcore')
groups=('deepin-git')
-source=('source.tar.gz')
+source=("${sourcetars[@]}")
sha512sums=('SKIP')
build() {
- cd $deepin_source_name
- cmake -GNinja \
- -DMKSPECS_INSTALL_DIR=/usr/lib/qt/mkspecs/modules/\
- -DBUILD_DOCS=ON \
- -DBUILD_EXAMPLES=OFF \
- -DQCH_INSTALL_DESTINATION=/usr/share/doc/qt \
- -DCMAKE_INSTALL_LIBDIR=/usr/lib \
- -DCMAKE_INSTALL_PREFIX=/usr \
- -DCMAKE_BUILD_TYPE=Release
+ cd $sourcedir
+ version=$(echo $pkgver | awk -F'[+_~-]' '{print $1}')
+ cmake \
+ -GNinja \
+ -DMKSPECS_INSTALL_DIR=lib/qt/mkspecs/modules \
+ -DBUILD_DOCS=ON \
+ -DBUILD_WITH_SYSTEMD=ON \
+ -DBUILD_EXAMPLES=OFF \
+ -DQCH_INSTALL_DESTINATION=share/doc/qt \
+ -DCMAKE_INSTALL_LIBDIR=lib \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DD_DSG_APP_DATA_FALLBACK=/var/dsg/appdata \
+ -DBUILD_WITH_SYSTEMD=ON \
+ -DDTK_VERSION=$version
ninja
}
package() {
- cd $deepin_source_name
+ cd $sourcedir
DESTDIR="$pkgdir" ninja install
}
--- /dev/null
+function(addDefinitions macro)
+ string(TOUPPER ${macro} macro)
+ add_definitions(-D${macro})
+endfunction()
+
+add_definitions(-DQ_HOST_NAME=\"${CMAKE_HOST_SYSTEM_PROCESSOR}\")
+addDefinitions(Q_HOST_${CMAKE_HOST_SYSTEM_PROCESSOR})
+
+find_package(Dtk@DTK_VERSION_MAJOR@Core REQUIRED)
+
+set(DEEPIN_OS_RELEASE_TOOL_PATH ${DtkCore_TOOL_DIRS})
+set(DEEPIN_OS_RELEASE_TOOL ${DEEPIN_OS_RELEASE_TOOL_PATH}/deepin-os-release)
+
+if(NOT EXISTS "${DEEPIN_OS_RELEASE_TOOL}")
+ message(FATAL_ERROR "\"${DEEPIN_OS_RELEASE_TOOL}\" is not exists. Install \"dtkcore-bin\" first")
+endif()
+
+function(formatString string)
+ string(REGEX REPLACE "\\s+" "_" string ${string})
+endfunction()
+
+macro(execDeepinOsRelease args output)
+ exec_program(${DEEPIN_OS_RELEASE_TOOL} ARGS ${args} OUTPUT_VARIABLE ${output} RETURN_VALUE exitCode)
+
+ if(NOT ${exitCode} EQUAL 0)
+ message(FATAL_ERROR "exec deepin-os-release failed, with args: ${args}, error message: ${output}")
+ endif()
+endmacro()
+
+execDeepinOsRelease(--deepin-type DEEPIN_OS_TYPE)
+execDeepinOsRelease(--deepin-version DEEPIN_OS_VERSION)
+execDeepinOsRelease(--product-type CMAKE_PLATFORM_ID)
+execDeepinOsRelease(--product-version CMAKE_PLATFORM_VERSION)
+
+if("${CMAKE_PLATFORM_ID}" STREQUAL "")
+ message(WARNING "No value of the \"--product-type\" in the process \"${DEEPIN_OS_RELEASE_TOOL}\"")
+else()
+ formatString(CMAKE_PLATFORM_ID)
+
+ message("OS: ${CMAKE_PLATFORM_ID}, Version: ${CMAKE_PLATFORM_VERSION}")
+
+ if(NOT "${CMAKE_PLATFORM_ID}" STREQUAL "")
+ addDefinitions(Q_OS_${CMAKE_PLATFORM_ID})
+ string(TOUPPER ${CMAKE_PLATFORM_ID} CMAKE_PLATFORM_ID)
+ set(OS_${CMAKE_PLATFORM_ID} TRUE)
+ endif()
+
+ formatString(CMAKE_PLATFORM_VERSION)
+ add_definitions(-DQ_OS_VERSION=\"${CMAKE_PLATFORM_VERSION}\")
+
+ #uos base with deepin
+ if("${CMAKE_PLATFORM_ID}" STREQUAL "UOS")
+ addDefinitions(Q_OS_DEEPIN)
+ set(OS_DEEPIN TRUE)
+ endif()
+endif()
+
+if("${DEEPIN_OS_TYPE}" STREQUAL "")
+ message(WARNING "No value of the \"--deepin-type\" in the process \"${DEEPIN_OS_RELEASE_TOOL}\"")
+else()
+ formatString(DEEPIN_OS_TYPE)
+
+ message("Deepin OS Type: ${DEEPIN_OS_TYPE}")
+ message("Deepin OS Version: ${DEEPIN_OS_VERSION}")
+
+ if(NOT "${DEEPIN_OS_TYPE}" STREQUAL "")
+ addDefinitions(Q_OS_DEEPIN_${DEEPIN_OS_TYPE})
+ addDefinitions(DEEPIN_DDE)
+ string(TOUPPER ${DEEPIN_OS_TYPE} DEEPIN_OS_TYPE)
+ set(OS_DEEPIN_${DEEPIN_OS_TYPE} TRUE)
+ set(DEEPIN_DDE TRUE)
+ endif()
+
+ formatString(DEEPIN_OS_VERSION)
+ add_definitions(-DQ_OS_DEEPIN_VERSION=\"${DEEPIN_OS_VERSION}\")
+endif()
--- /dev/null
+# SPDX-FileCopyrightText: 2022 - 2023 Uniontech Software Technology Co.,Ltd.
+#
+# SPDX-License-Identifier: LGPL-3.0-or-later
+
+# This cmake file is used to deploy files that dconfig's meta and override configure.
+
+include(CMakeParseArguments)
+
+# get subpath according `FILE` and `BASE`.
+# e.g: FILE = /a/b/c/d/foo.json, BASE = /a/b, then return SUBPATH = /c/d/
+function(get_subpath FILE BASE SUBPATH)
+ get_filename_component(BASE_FILE_PATH ${BASE} REALPATH)
+ get_filename_component(FILE_PATH ${FILE} REALPATH)
+ string(REPLACE ${BASE_FILE_PATH} "" SUBPATH_FILE_NAME ${FILE_PATH})
+ get_filename_component(SUBPATH_PATH ${SUBPATH_FILE_NAME} DIRECTORY)
+
+ set(${SUBPATH} ${SUBPATH_PATH} PARENT_SCOPE)
+endfunction()
+
+if(NOT DEFINED DSG_DATA_DIR)
+ set(DSG_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/dsg)
+endif()
+
+add_definitions(-DDSG_DATA_DIR=\"${DSG_DATA_DIR}\")
+# deploy some `meta` 's configure.
+#
+# FILES - deployed files.
+# BASE - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
+# APPID - working for the app.
+# COMMONID - working for common.
+#
+# e.g:
+# dtk_add_config_meta_files(APPID dconfigexample BASE ./configs FILES ./configs/example.json ./configs/a/example.json)
+#
+function(dtk_add_config_meta_files)
+ set(oneValueArgs BASE APPID COMMONID)
+ set(multiValueArgs FILES)
+
+ cmake_parse_arguments(METAITEM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ foreach(_current_FILE ${METAITEM_FILES})
+ set(SUBPATH "")
+ if (DEFINED METAITEM_BASE)
+ GET_SUBPATH(${_current_FILE} ${METAITEM_BASE} SUBPATH)
+ endif()
+
+ if (DEFINED METAITEM_APPID)
+ install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/${METAITEM_APPID}/${SUBPATH})
+ elseif (DEFINED METAITEM_COMMONID)
+ install(FILES ${_current_FILE} DESTINATION ${DSG_DATA_DIR}/configs/${SUBPATH})
+ else()
+ message(FATAL_ERROR "Please set APPID or COMMONID for the meta item." ${_current_FILE})
+ endif()
+ endforeach()
+endfunction()
+
+
+# deploy some `meta` 's override configure.
+#
+# configuration for the `meta_name` 's override configure.
+#
+# FILES - deployed files.
+# BASE - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
+# APPID - working for the app, if it's empty, working for all app.
+# META_NAME - override for the meta configure.
+#
+# e.g :
+#dtk_add_config_override_files(APPID dconfigexample BASE ./configs META_NAME example FILES ./configs/dconf-example.override.json ./configs/a/dconf-example.override.a.json)
+#
+function(dtk_add_config_override_files)
+ set(options)
+ set(oneValueArgs BASE APPID META_NAME)
+ set(multiValueArgs FILES)
+
+ cmake_parse_arguments(OVERRIDEITEM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if (NOT DEFINED OVERRIDEITEM_META_NAME)
+ message(FATAL_ERROR "Please set meta_name for the override configuration." ${FILES})
+ endif()
+
+ foreach(_current_FILE ${OVERRIDEITEM_FILES})
+ set(SUBPATH "")
+ if (DEFINED OVERRIDEITEM_BASE)
+ GET_SUBPATH(${_current_FILE} ${OVERRIDEITEM_BASE} SUBPATH)
+ endif()
+
+ if (DEFINED OVERRIDEITEM_APPID)
+ install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/overrides/${OVERRIDEITEM_APPID}/${OVERRIDEITEM_META_NAME}/${SUBPATH})
+ else()
+ install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/overrides/${OVERRIDEITEM_META_NAME}/${SUBPATH})
+ endif()
+ endforeach()
+endfunction()
+
+# deprecated since dtk6
+function(dconfig_meta_files)
+ dtk_add_config_meta_files(${ARGV})
+endfunction()
+function(dconfig_override_files)
+ dtk_add_config_override_files(${ARGV})
+endfunction()
--- /dev/null
+# SPDX-FileCopyrightText: 2022 - 2023 Uniontech Software Technology Co.,Ltd.
+#
+# SPDX-License-Identifier: LGPL-3.0-or-later
+
+# This cmake file is used to deploy files that dconfig's meta and override configure.
+
+include(CMakeParseArguments)
+
+# get subpath according `FILE` and `BASE`.
+# e.g: FILE = /a/b/c/d/foo.json, BASE = /a/b, then return SUBPATH = /c/d/
+function(get_subpath FILE BASE SUBPATH)
+ get_filename_component(BASE_FILE_PATH ${BASE} REALPATH)
+ get_filename_component(FILE_PATH ${FILE} REALPATH)
+ string(REPLACE ${BASE_FILE_PATH} "" SUBPATH_FILE_NAME ${FILE_PATH})
+ get_filename_component(SUBPATH_PATH ${SUBPATH_FILE_NAME} DIRECTORY)
+
+ set(${SUBPATH} ${SUBPATH_PATH} PARENT_SCOPE)
+endfunction()
+
+if(NOT DEFINED DSG_DATA_DIR)
+ set(DSG_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/dsg)
+endif()
+
+add_definitions(-DDSG_DATA_DIR=\"${DSG_DATA_DIR}\")
+# deploy some `meta` 's configure.
+#
+# FILES - deployed files.
+# BASE - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
+# APPID - working for the app.
+# COMMONID - working for common.
+#
+# e.g:
+# dtk_add_config_meta_files(APPID dconfigexample BASE ./configs FILES ./configs/example.json ./configs/a/example.json)
+#
+function(dtk_add_config_meta_files)
+ set(oneValueArgs BASE APPID COMMONID)
+ set(multiValueArgs FILES)
+
+ cmake_parse_arguments(METAITEM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ foreach(_current_FILE ${METAITEM_FILES})
+ set(SUBPATH "")
+ if (DEFINED METAITEM_BASE)
+ GET_SUBPATH(${_current_FILE} ${METAITEM_BASE} SUBPATH)
+ endif()
+
+ if (DEFINED METAITEM_APPID)
+ install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/${METAITEM_APPID}/${SUBPATH})
+ elseif (DEFINED METAITEM_COMMONID)
+ install(FILES ${_current_FILE} DESTINATION ${DSG_DATA_DIR}/configs/${SUBPATH})
+ else()
+ message(FATAL_ERROR "Please set APPID or COMMONID for the meta item." ${_current_FILE})
+ endif()
+ endforeach()
+endfunction()
+
+
+# deploy some `meta` 's override configure.
+#
+# configuration for the `meta_name` 's override configure.
+#
+# FILES - deployed files.
+# BASE - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
+# APPID - working for the app, if it's empty, working for all app.
+# META_NAME - override for the meta configure.
+#
+# e.g :
+#dtk_add_config_override_files(APPID dconfigexample BASE ./configs META_NAME example FILES ./configs/dconf-example.override.json ./configs/a/dconf-example.override.a.json)
+#
+function(dtk_add_config_override_files)
+ set(options)
+ set(oneValueArgs BASE APPID META_NAME)
+ set(multiValueArgs FILES)
+
+ cmake_parse_arguments(OVERRIDEITEM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if (NOT DEFINED OVERRIDEITEM_META_NAME)
+ message(FATAL_ERROR "Please set meta_name for the override configuration." ${FILES})
+ endif()
+
+ foreach(_current_FILE ${OVERRIDEITEM_FILES})
+ set(SUBPATH "")
+ if (DEFINED OVERRIDEITEM_BASE)
+ GET_SUBPATH(${_current_FILE} ${OVERRIDEITEM_BASE} SUBPATH)
+ endif()
+
+ if (DEFINED OVERRIDEITEM_APPID)
+ install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/overrides/${OVERRIDEITEM_APPID}/${OVERRIDEITEM_META_NAME}/${SUBPATH})
+ else()
+ install(FILES "${_current_FILE}" DESTINATION ${DSG_DATA_DIR}/configs/overrides/${OVERRIDEITEM_META_NAME}/${SUBPATH})
+ endif()
+ endforeach()
+endfunction()
+
+@DCONFIG_DEPRECATED_FUNCS@
--- /dev/null
+# Copyright 2005-2011 Kitware, Inc.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+include(MacroAddFileDependencies)
+include(CMakeParseArguments)
+
+function(dtk_add_dbus_interface _sources _interface _relativename)
+ get_filename_component(_infile ${_interface} ABSOLUTE)
+ get_filename_component(_basepath ${_relativename} DIRECTORY)
+ get_filename_component(_basename ${_relativename} NAME)
+ set(_header "${CMAKE_CURRENT_BINARY_DIR}/${_relativename}.h")
+ set(_impl "${CMAKE_CURRENT_BINARY_DIR}/${_relativename}.cpp")
+
+ if(${QT_VERSION_MAJOR} EQUAL "5")
+ if(_basepath)
+ set(_moc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/${_basename}.moc")
+ else()
+ set(_moc "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc")
+ endif()
+ else()
+ if(_basepath)
+ set(_moc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/moc_${_basename}.cpp")
+ else()
+ set(_moc "${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp")
+ endif()
+ endif()
+
+ get_source_file_property(_nonamespace ${_interface} NO_NAMESPACE)
+ if(_nonamespace)
+ set(_params -N -m)
+ else()
+ set(_params -m)
+ endif()
+
+ get_source_file_property(_skipincludeannotations ${_interface} SKIP_INCLUDE_ANNOTATIONS)
+ if(_skipincludeannotations)
+ set(_params ${_params} -S)
+ endif()
+
+ get_source_file_property(_classname ${_interface} CLASSNAME)
+ if(_classname)
+ set(_params ${_params} -c ${_classname})
+ endif()
+
+ get_source_file_property(_include ${_interface} INCLUDE)
+ if(_include)
+ set(_params ${_params} -i ${_include})
+ endif()
+
+ add_custom_command(OUTPUT "${_impl}" "${_header}"
+ COMMAND ${DTK_XML2CPP} ${_params} -p ${_relativename} ${_infile}
+ DEPENDS ${_infile} ${DTK_XML2CPP}
+ VERBATIM
+ )
+
+ set_source_files_properties("${_impl}" "${_header}" PROPERTIES
+ SKIP_AUTOMOC TRUE
+ SKIP_AUTOUIC TRUE
+ )
+
+ qt_generate_moc("${_header}" "${_moc}")
+
+ list(APPEND ${_sources} "${_impl}" "${_header}")
+ set_property(SOURCE "${_impl}" APPEND PROPERTY OBJECT_DEPENDS "${_moc}")
+ set(${_sources} ${${_sources}} PARENT_SCOPE)
+endfunction()
+
+function(dtk_add_dbus_interfaces _sources)
+ foreach(_current_FILE ${ARGN})
+ get_filename_component(_infile ${_current_FILE} ABSOLUTE)
+ get_filename_component(_basename ${_current_FILE} NAME)
+ # get the part before the ".xml" suffix
+ string(TOLOWER ${_basename} _basename)
+ string(REGEX REPLACE "(.*\\.)?([^\\.]+)\\.xml" "\\2" _basename ${_basename})
+ dtk_add_dbus_interface(${_sources} ${_infile} ${_basename}interface)
+ endforeach()
+ set(${_sources} ${${_sources}} PARENT_SCOPE)
+endfunction()
#=============================================================================
function(DTK_CREATE_I18N_FROM_JSON _generated_file_list _input_json_file _output_cpp_file_name)
- set (generated_file_list) # 0(failed) or 1(successed) files in the list.
+ set (generated_file_list) # 0(failed) or 1(succeeded) files in the list.
get_filename_component(_input_json_abs_path ${_input_json_file} ABSOLUTE)
get_filename_component(_input_json_abs_dir ${_input_json_abs_path} DIRECTORY)
set (_output_cpp_abs_path ${_input_json_abs_dir}/${_output_cpp_file_name})
-
+
if (DTK_SETTINGS_TOOLS_FOUND)
add_custom_command(OUTPUT ${_output_cpp_abs_path}
COMMAND ${DTK_SETTINGS_TOOLS_EXECUTABLE}
list(APPEND generated_file_list ${_output_cpp_abs_path})
else ()
message (WARNING "The dtk-settings tools could not be found at ${DTK_SETTINGS_TOOLS_EXECUTABLE}")
- message (WARNING "Package distributor may create a seprated package for tools like `libdtkcore-bin`.")
+ message (WARNING "Package distributor may create a separated package for tools like `libdtkcore-bin`.")
endif ()
set(${_generated_file_list} ${generated_file_list} PARENT_SCOPE)
+++ /dev/null
-find_package(DtkCore REQUIRED)
-
-set (DTK_SETTINGS_TOOLS_EXECUTABLE ${DtkCore_TOOL_DIRS}/dtk-settings)
-
-if (EXISTS ${DTK_SETTINGS_TOOLS_EXECUTABLE})
- set(DTK_SETTINGS_TOOLS_FOUND TRUE)
-endif ()
-
-include("${CMAKE_CURRENT_LIST_DIR}/DtkSettingsToolsMacros.cmake")
\ No newline at end of file
--- /dev/null
+include(CMakeFindDependencyMacro)
+find_dependency(Dtk@DTK_VERSION_MAJOR@Core REQUIRED)
+
+set (DTK_SETTINGS_TOOLS_EXECUTABLE ${DtkCore_TOOL_DIRS}/dtk-settings)
+
+if (EXISTS ${DTK_SETTINGS_TOOLS_EXECUTABLE})
+ set(DTK_SETTINGS_TOOLS_FOUND TRUE)
+endif ()
+
+include("${CMAKE_CURRENT_LIST_DIR}/Dtk@DTK_VERSION_MAJOR@SettingsToolsMacros.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/Dtk@DTK_VERSION_MAJOR@ToolsTargets.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/DtkDBusMacros.cmake")
+
+get_target_property(DTK_XML2CPP Dtk@DTK_VERSION_MAJOR@::Xml2Cpp LOCATION)
+dtkcore (5.7.4) unstable; urgency=medium
+
+ * fix: hasVtable is incorrect when destructing
+
+ -- Deepin Packages Builder <packages@deepin.org> Tue, 03 Dec 2024 02:00:45 +0000
+
+dtkcore (5.7.3) unstable; urgency=medium
+
+ [ root ]
+ * UNRELEASED
+
+ -- Deepin Packages Builder <packages@deepin.org> Wed, 20 Nov 2024 02:19:06 +0000
+
+dtkcore (5.7.2) unstable; urgency=medium
+
+ [ root ]
+ * UNRELEASED
+
+ -- Deepin Packages Builder <packages@deepin.org> Wed, 13 Nov 2024 01:53:26 +0000
+
+dtkcore (5.7.1) unstable; urgency=medium
+
+ * feat: 增加智能终端设备类型 (#434)
+ Thanks to Whale107
+ * fix: remove unnecessary link libraries
+ * fix: DDBusInterface signal loss
+ * fix(util): error appid from `getAppIdFromAbsolutePath`
+
+ -- Deepin Packages Builder <packages@deepin.org> Wed, 16 Oct 2024 03:30:45 +0000
+
+dtkcore (5.6.34) unstable; urgency=medium
+
+ [ root ]
+ * UNRELEASED
+
+ -- Deepin Packages Builder <packages@deepin.org> Tue, 20 Aug 2024 05:03:51 +0000
+
+dtkcore (5.6.32) unstable; urgency=medium
+
+ * refactor: log files move to dtklog(Issue: #182)
+
+ -- Deepin Packages Builder <packages@deepin.org> Mon, 08 Jul 2024 02:29:21 +0000
+
+dtkcore (5.6.31) unstable; urgency=medium
+
+ * chore: use '&&' and '||' instead of 'and' and 'or'
+
+ -- Deepin Packages Builder <packages@deepin.org> Thu, 27 Jun 2024 09:11:34 +0000
+
+dtkcore (5.6.30) unstable; urgency=medium
+
+ * feat: 允许基于dtk开发的应用动态控制其日志输出等级(Task: 307567)(Influence: 允许基于dtk开发的应用动态控制其日志输出等级)
+ * fix: lshw查询内存大小时返回多元素数组,修正解析过程(Bug: 228681)(Influence: DSysInfo::memoryInstalledSize解析过程)
+ * fix: 从文件中读取deepinType和productType值时因为权限问题会失败(Influence: 正常显示版本和说明)
+ * feat: 增加registerLoggingRulesWatcher接口(Task: 303379)
+ * fix: 修复计算 build 版本号错误的问题(Influence: 构建版本号(BUILD_VERSION ))
+ * feat: DeepinType类型增加军用版(Task: 316703)(Influence: DeepinType类型)
+ * fix: 修复日志格式时间戳显示异常问题(Bug: 236239)(Influence: 使用DLogManager的应用日志输出格式)
+ * chore: loggingrules config move to preference
+ * refactor: remove LoggingRules interface
+ * fix: crashed when access DSGApplication::id early
+ * chore: fallback to dsgconfig value
+ * fix(build): build faild on Qt 6.7.1
+
+ -- Deepin Packages Builder <packages@deepin.org> Thu, 30 May 2024 02:46:32 +0000
+
+dtkcore (5.6.29) unstable; urgency=medium
+
+ * chore: remove warning for dbusxml2cpp in qt6
+
+ -- Deepin Packages Builder <packages@deepin.org> Mon, 13 May 2024 03:02:53 +0000
+
+dtkcore (5.6.28) unstable; urgency=medium
+
+ * fix: fix undefined reference errors on spdlog 1.14.0
+ Thanks to hillwoodroc
+
+ -- Deepin Packages Builder <packages@deepin.org> Mon, 29 Apr 2024 08:23:39 +0000
+
+dtkcore (5.6.27) unstable; urgency=medium
+
+ * fix: lossing value when save DConfig
+ * fix(qdbusxml2cpp): support qt 6.7
+
+ -- Deepin Packages Builder <packages@deepin.org> Fri, 19 Apr 2024 08:55:35 +0000
+
+dtkcore (5.6.26) unstable; urgency=medium
+
+ [ root ]
+ * UNRELEASED
+
+ -- Deepin Packages Builder <packages@deepin.org> Tue, 26 Mar 2024 05:47:35 +0000
+
+dtkcore (5.6.25) unstable; urgency=medium
+
+ * chore: fix docs typo
+ * feat: support to set appId for DConfig
+ * fix: DConfig add check for name(Issue: #1211374)
+
+ -- Deepin Packages Builder <packages@deepin.org> Mon, 11 Mar 2024 01:16:26 +0000
+
+dtkcore (5.6.22) unstable; urgency=medium
+
+ * Release 5.6.22
+
+ -- Deepin Packages Builder <packages@deepin.org> Wed, 10 Jan 2024 02:30:59 +0000
+
+dtkcore (5.6.21) unstable; urgency=medium
+
+ * fix: app blocked when AM is unavailable
+ * chore: remove decltype(auto) for dutil
+ * chore: fix relative path invalid link
+ * feat: allow skip including headers of annotations(Issue: #147)
+
+ -- Deepin Packages Builder <packages@deepin.org> Tue, 09 Jan 2024 01:45:43 +0000
+
+dtkcore (5.6.20) unstable; urgency=medium
+
+ * feat: add utils function
+ * chore: Implement DSGApplication::getId
+ * feat(dstandardpaths): add XDG_STATE_HOME
+ * chore: keep order when deduplication
+ * fix: log files limit not work
+ * chore: add dtk dbus generate function
+
+ -- Deepin Packages Builder <packages@deepin.org> Tue, 28 Nov 2023 05:40:53 +0000
+
+dtkcore (5.6.19) unstable; urgency=medium
+
+ * fix: Type error for qdbusxml2cpp
+ * fix: correct Dtk6SettingsToolsMacros.cmake path
+ * chore: add flag UserPublic(Issue: https://github.com/linuxdeepin/developer-center/issues/5928)
+
+ -- Deepin Packages Builder <packages@deepin.org> Mon, 23 Oct 2023 07:33:19 +0000
+
+dtkcore (5.6.18) unstable; urgency=medium
+
+ * fix: Can't clear cache when reset for DConfig in FileBackend
+ * feat: Add isDefaultValue for DConfig(Issue: #3)
+ * fix: Compiling failed in lower libspdlog-dev
+ * fix: missing parameter passing for synchronization
+ * fix(build): skip failed unit test
+ * chore(tools): show help if argc < 2
+ * fix: Compiling failed in libspdlog-dev before 1.4.0
+ Thanks to Shiroko
+ * fix: cmake failure when env is null
+ * chore: correct typos in DtkSettingsToolsMacros.cmake
+ Thanks to Felix Yan
+ * chore: dpinyin tweak(Issue: #109)
+
+ -- Deepin Packages Builder <packages@deepin.org> Wed, 18 Oct 2023 06:01:45 +0000
+
+dtkcore (5.6.17) unstable; urgency=medium
+
+ * Release 5.6.17
+
+ -- Deepin Packages Builder <packages@deepin.org> Fri, 08 Sep 2023 15:12:36 +0800
+
+dtkcore (5.6.16) unstable; urgency=medium
+
+ * fix: FileAppender log level not set
+ * chore: ut linked dtkcore instead of source code
+ * chore: tweak CMakeLists
+ * chore: support Qt 6.4 build
+ * chore: qch docs tweak
+ * chore: add DtkBuildHelper depends
+ * chore: console with color at tty
+ * fix: missing dependency qttools5-dev
+ * feat: add synchronization workflow
+
+ -- Deepin Packages Builder <packages@deepin.org> Tue, 22 Aug 2023 06:13:45 +0000
+
+dtkcore (5.6.15) unstable; urgency=medium
+
+ * chore: dlog example tweak
+
+ -- Yixue Wang <wangyixue@deepin.org> Fri, 11 Aug 2023 13:42:20 +0800
+
+dtkcore (5.6.14) unstable; urgency=medium
+
+ * chore: function need to be marked as override
+ * chore: ignore doxygen-theme folder
+ Thanks to Skye-rs
+ * chore: change OUTPUT_DIR variable in cmake
+ * chore: remove unused pro files
+ * refactor!: deprecate some interfaces in dtk6
+ * fix: updateProp cannot convert to property type
+ * fix: typo in xdg
+ * chore: reduce compilation warnings
+ Thanks to SPUER(Issue: #96)
+ * chore(dcapmanager): RuntimeTime -> RuntimeDir
+ * chore: Sync by https://github.com/linuxdeepin/.github/commit/559e91167d4919644f37bbcf123eb0651c1528ea(Influence: none)
+ * chore: make test-recoverage.sh runable again
+ * chore: add ut for DDbusSender
+ * feat: add systembus send support
+ * fix: internalPropSet nerver emit propertyChanged
+ * chore: should include QVector headers
+ * chore: dsysinfo tweak
+ * chore: add some unit test
+
+ -- Deepin Packages Builder <packages@deepin.org> Thu, 27 Jul 2023 06:56:33 +0000
+
+dtkcore (5.6.13) unstable; urgency=medium
+
+ * feat: DConfig add check for no existed item when override
+ * fix(cmake): wrong use of option and wrong macro
+ * fix: calling delay in DDBusSender(Issue: https://github.com/linuxdeepin/developer-center/issues/4415)
+ * feat: DConfig add check for subpath(Issue: #54)
+ * feat: DConfig exports metadir's implementation(Issue: #10)
+ * fix(dccinterface): fix cannot get the right type
+ * fix: DConfig's `subpathIsValid` produces error
+ * fix(ut): failed ut
+ * fix(build): build faild on Qt6
+ * fix: fix build failed due to gcc compiler bug
+ * fix: ut_dfilewater failed on Qt6
+ * fix: DTextEncoding ut failed in Qt6.
+ * fix: fix DTextEncoding warnings.
+ * feat: support dtk6core build
+ * feat: add DThreadUtils class
+ * fix: move Qt CorePrivate to target private link
+ * fix: qdbusxml2cpp-fix not in path
+ * chore: remove ddbusinterface property cache
+ * chore: remove libdtkcommon depends
+
+ -- Deepin Packages Builder <packages@deepin.org> Sun, 25 Jun 2023 14:40:49 +0800
+
+dtkcore (5.6.12) unstable; urgency=medium
+
+ * Release 5.6.12
+ * add DLicenseInfo
+ * cached memoryInstalledSize
+ * FIX developer-center#4348
+
+ -- Deepin Packages Builder <packages@deepin.com> Mon, 15 May 2023 11:18:15 +0800
+
+dtkcore (5.6.11) unstable; urgency=medium
+
+ * Release 5.6.11
+ * add color to ConsoleAppender
+ * remove build warning
+
+ -- Deepin Packages Builder <packages@deepin.com> Mon, 08 May 2023 11:48:45 +0800
+
+dtkcore (5.6.10) unstable; urgency=medium
+
+ * Release 5.6.10
+ * support XDG_SESSION_DESKTOP set to DDE
+
+ -- Deepin Packages Builder <packages@deepin.com> Mon, 17 Apr 2023 17:08:28 +0800
+
+dtkcore (5.6.9) unstable; urgency=medium
+
+ * Release 5.6.9
+
+ -- Deepin Packages Builder <packages@deepin.com> Mon, 03 Apr 2023 09:48:07 +0800
+
+dtkcore (5.6.8) unstable; urgency=medium
+
+ * Release 5.6.8
+
+ -- Deepin Packages Builder <packages@deepin.com> Wed, 22 Feb 2023 14:09:56 +0800
+
+dtkcore (5.6.6) unstable; urgency=medium
+
+ * Release 5.6.6
+
+ -- Deepin Packages Builder <packages@deepin.com> Tue, 21 Feb 2023 12:25:24 +0800
+
+dtkcore (5.6.5) unstable; urgency=medium
+
+ * Release 5.6.5
+
+ -- Deepin Packages Builder <packages@deepin.com> Thu, 02 Feb 2023 14:25:36 +0800
+
+dtkcore (5.6.4) unstable; urgency=medium
+
+ * Release 5.6.4
+
+ -- Deepin Packages Builder <packages@deepin.com> Fri, 06 Jan 2023 16:30:40 +0800
+
+dtkcore (5.6.3) unstable; urgency=medium
+
+ * Release 5.6.3
+
+ -- Deepin Packages Builder <packages@deepin.com> Mon, 12 Dec 2022 14:40:31 +0800
+
dtkcore (5.6.2.2) unstable; urgency=medium
* release 5.6.2.2
dtkcore (0.3.3-1) unstable; urgency=medium
- * Initial release
+ * Initial release
-- Deepin Packages Builder <packages@deepin.com> Mon, 10 Oct 2016 16:58:07 +0800
Section: libdevel
Priority: optional
Maintainer: Deepin Packages Builder <packages@deepin.com>
-Build-Depends: debhelper (>= 9), pkg-config,
- qttools5-dev-tools, qtbase5-private-dev, doxygen,
- libgsettings-qt-dev, libgtest-dev, libdtkcommon-dev, cmake
+Build-Depends: debhelper-compat ( =12), pkg-config,
+ qttools5-dev-tools, qttools5-dev, qtbase5-private-dev, doxygen,
+ libgsettings-qt-dev, libgtest-dev, libdtkcommon-dev, cmake,
+ libuchardet-dev, libicu-dev, libdtklog-dev
Standards-Version: 3.9.8
Package: libdtkcore5
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, lshw, libdtkcommon
+Depends: ${shlibs:Depends}, ${misc:Depends}, lshw
Multi-Arch: same
Description: Deepin Tool Kit Core library
DtkCore is base library of Deepin Qt/C++ applications.
Package: libdtkcore-dev
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, libdtkcore5( =${binary:Version}), libdtkcommon-dev
+Depends: ${shlibs:Depends}, ${misc:Depends}, libdtkcore5( =${binary:Version}),
+ libdtkcommon-dev(>=5.6.16), libdtklog-dev
Description: Deepin Tool Kit Core Devel library
DtkCore is base devel library of Deepin Qt/C++ applications.
.
DtkCore is base devel library of Deepin Qt/C++ applications.
.
This package contains the doc files of DtkCore
-
-usr/lib/*/*/DCore/bin/*
-usr/bin/*
\ No newline at end of file
+usr/*/*/DCore/bin/*
\ No newline at end of file
+++ /dev/null
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2021 - 2022 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-class DoxygenAwesomeDarkModeToggle extends HTMLElement {
- // SVG icons from https://fonts.google.com/icons
- // Licensed under the Apache 2.0 license:
- // https://www.apache.org/licenses/LICENSE-2.0.html
- static lightModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FCBF00"><rect fill="none" height="24" width="24"/><circle cx="12" cy="12" opacity=".3" r="3"/><path d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg>`
- static darkModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FE9700"><rect fill="none" height="24" width="24"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27 C17.45,17.19,14.93,19,12,19c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z" opacity=".3"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg>`
- static title = "Toggle Light/Dark Mode"
-
- static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode"
- static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode"
-
- static _staticConstructor = function () {
- DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference)
- // Update the color scheme when the browsers preference changes
- // without user interaction on the website.
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
- DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
- })
- // Update the color scheme when the tab is made visible again.
- // It is possible that the appearance was changed in another tab
- // while this tab was in the background.
- document.addEventListener("visibilitychange", visibilityState => {
- if (document.visibilityState === 'visible') {
- DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
- }
- });
- }()
-
- static init() {
- $(function () {
- $(document).ready(function () {
- const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle')
- toggleButton.title = DoxygenAwesomeDarkModeToggle.title
- toggleButton.updateIcon()
-
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
- toggleButton.updateIcon()
- })
- document.addEventListener("visibilitychange", visibilityState => {
- if (document.visibilityState === 'visible') {
- toggleButton.updateIcon()
- }
- });
-
- $(document).ready(function () {
- document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
- })
- $(window).resize(function () {
- document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
- })
- })
- })
- }
-
- constructor() {
- super();
- this.onclick = this.toggleDarkMode
- }
-
- /**
- * @returns `true` for dark-mode, `false` for light-mode system preference
- */
- static get systemPreference() {
- return window.matchMedia('(prefers-color-scheme: dark)').matches
- }
-
- /**
- * @returns `true` for dark-mode, `false` for light-mode user preference
- */
- static get userPreference() {
- return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) ||
- (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey))
- }
-
- static set userPreference(userPreference) {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference
- if (!userPreference) {
- if (DoxygenAwesomeDarkModeToggle.systemPreference) {
- localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true)
- } else {
- localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)
- }
- } else {
- if (!DoxygenAwesomeDarkModeToggle.systemPreference) {
- localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true)
- } else {
- localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)
- }
- }
- DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged()
- }
-
- static enableDarkMode(enable) {
- if (enable) {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = true
- document.documentElement.classList.add("dark-mode")
- document.documentElement.classList.remove("light-mode")
- } else {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = false
- document.documentElement.classList.remove("dark-mode")
- document.documentElement.classList.add("light-mode")
- }
- }
-
- static onSystemPreferenceChanged() {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference
- DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
- }
-
- static onUserPreferenceChanged() {
- DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
- }
-
- toggleDarkMode() {
- DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference
- this.updateIcon()
- }
-
- updateIcon() {
- if (DoxygenAwesomeDarkModeToggle.darkModeEnabled) {
- this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon
- } else {
- this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon
- }
- }
-}
-
-customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle);
VERSION = $(DEB_VERSION_UPSTREAM)
PACK_VER = $(shell echo $(VERSION) | awk -F'[+_~-]' '{print $$1}')
-# Fix: invalid digit "8" in octal constant. e.g. u008 ==> 008 ==> 8
-BUILD_VER = $(shell echo $(VERSION) | awk -F'[+_~-]' '{print $$2}' | sed 's/[^0-9]//g' | awk '{print int($$1)}')
+# Calculate build version:
+# 5.6.8 -> 0; 5.6.8.7 -> 7; 5.6.8+u001 -> 1; 5.6.8.7+u001 -> 7; 5.6.8.0+u001 -> 0
+BUILD_VER = $(shell echo $(VERSION) | awk -F'[+_~-]' '{print $$1}' | awk -F'.' '{print $$4}' | sed 's/[^0-9]//g' | awk '{print int($$1)}')
+ifeq ($(BUILD_VER), 0)
+ifeq ($(shell expr $(shell echo "$(VERSION)" | awk -F. '{print NF-1}') '<' 3), 1)
+ BUILD_VER=$(shell echo $(VERSION) | awk -F'[+_~-]' '{print $$2}' | sed 's/[^0-9]//g' | awk '{print int($$1)}')
+endif
+endif
%:
- dh $@ --parallel
+ dh $@
override_dh_auto_configure:
- dh_auto_configure -- -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=ON -DBUILD_VERSION=$(BUILD_VER) -DDVERSION=$(PACK_VER)
+ dh_auto_configure -- -DBUILD_WITH_SYSTEMD=ON -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=ON -DBUILD_VERSION=$(BUILD_VER) -DDTK_VERSION=$(PACK_VER) -DD_DSG_APP_DATA_FALLBACK=/var/dsg/appdata
#override_dh_auto_test:
# echo "skip auto test"
+++ /dev/null
-libdtkcore.so.5 libdtkcore5 #MINVER#
- _Z19qInitResources_utilv@Base 5.0.3
- _Z22qCleanupResources_utilv@Base 5.0.3
- _ZGVZN3Dtk4Core11DLogManager8instanceEvE8instance@Base 5.0.3
- _ZN10QByteArrayD1Ev@Base 5.0.3
- _ZN10QByteArrayD2Ev@Base 5.0.3
- _ZN11DDBusCaller3argI7QStringEES_RKT_@Base 5.0.3
- _ZN11DDBusCaller4callEv@Base 5.0.3
- _ZN11DDBusCallerC1ERK7QStringSt10shared_ptrI9DDBusDataE@Base 5.0.3
- _ZN11DDBusCallerC2ERK7QStringSt10shared_ptrI9DDBusDataE@Base 5.0.3
- _ZN11DDBusCallerD1Ev@Base 5.0.3
- _ZN11DDBusCallerD2Ev@Base 5.0.3
- _ZN11DDBusSender4pathERK7QString@Base 5.0.3
- _ZN11DDBusSender4typeEN15QDBusConnection7BusTypeE@Base 5.0.3
- _ZN11DDBusSender6methodERK7QString@Base 5.0.3
- _ZN11DDBusSender7serviceERK7QString@Base 5.0.3
- _ZN11DDBusSender8propertyERK7QString@Base 5.0.3
- _ZN11DDBusSender9interfaceERK7QString@Base 5.0.3
- _ZN11DDBusSenderC1Ev@Base 5.0.3
- _ZN11DDBusSenderC2Ev@Base 5.0.3
- _ZN12QWeakPointerI7QObjectED1Ev@Base 5.0.3
- _ZN12QWeakPointerI7QObjectED2Ev@Base 5.0.3
- _ZN13DDBusProperty3getEv@Base 5.0.3
- _ZN13DDBusPropertyC1ERK7QStringSt10shared_ptrI9DDBusDataE@Base 5.0.3
- _ZN13DDBusPropertyC2ERK7QStringSt10shared_ptrI9DDBusDataE@Base 5.0.3
- _ZN14QScopedPointerIN3Dtk4Core23GSettingsBackendPrivateE21QScopedPointerDeleterIS2_EED1Ev@Base 5.0.3
- _ZN14QScopedPointerIN3Dtk4Core23GSettingsBackendPrivateE21QScopedPointerDeleterIS2_EED2Ev@Base 5.0.3
- _ZN15QVarLengthArrayIcLi4096EEC1Ei@Base 5.0.3
- _ZN15QVarLengthArrayIcLi4096EEC2Ei@Base 5.0.3
- _ZN3Dtk4Core10doUnescapeER7QStringRK5QHashI5QCharS4_E@Base 5.0.3
- _ZN3Dtk4Core11DLogManager12setLogFormatERK7QString@Base 5.0.3
- _ZN3Dtk4Core11DLogManager14getlogFilePathEv@Base 5.0.3
- _ZN3Dtk4Core11DLogManager14setlogFilePathERK7QString@Base 5.0.3
- _ZN3Dtk4Core11DLogManager19initConsoleAppenderEv@Base 5.0.3
- _ZN3Dtk4Core11DLogManager20registerFileAppenderEv@Base 5.0.3
- _ZN3Dtk4Core11DLogManager23initRollingFileAppenderEv@Base 5.0.3
- _ZN3Dtk4Core11DLogManager23registerConsoleAppenderEv@Base 5.0.3
- _ZN3Dtk4Core11DLogManager8joinPathERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core11DLogManagerC1Ev@Base 5.0.3
- _ZN3Dtk4Core11DLogManagerC2Ev@Base 5.0.3
- _ZN3Dtk4Core11DLogManagerD1Ev@Base 5.0.3
- _ZN3Dtk4Core11DLogManagerD2Ev@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook10copyVtableEPPy@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook11originalFunEPKvy@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook11resetVtableEPKv@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook12ensureVtableEPKvSt8functionIFvvEE@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook13resetVfptrFunEPKvy@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook14objDestructFunE@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook15autoCleanVtableEPKv@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook15objToGhostVfptrE@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook16clearGhostVtableEPKv@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook16forceWriteMemoryEPvPKvm@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook18objToOriginalVfptrE@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook19getDestructFunIndexEPPySt8functionIFvvEE@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook7resolveEPKc@Base 5.0.3
- _ZN3Dtk4Core11DVtableHook9hasVtableEPKv@Base 5.0.3
- _ZN3Dtk4Core11unqtifyNameERK7QString@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher11onFileMovedERK7QStringS4_S4_S4_@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher12onFileClosedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher13onFileCreatedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher13onFileDeletedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher14onFileModifiedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcher22onFileAttributeChangedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcherC1ERK7QStringP7QObject@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcherC2ERK7QStringP7QObject@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcherD0Ev@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcherD1Ev@Base 5.0.3
- _ZN3Dtk4Core12DFileWatcherD2Ev@Base 5.0.3
- _ZN3Dtk4Core12FileAppender11setFileNameERK7QString@Base 5.0.3
- _ZN3Dtk4Core12FileAppender6appendERK9QDateTimeNS0_6Logger8LogLevelEPKciS8_RK7QStringSB_@Base 5.0.3
- _ZN3Dtk4Core12FileAppender8openFileEv@Base 5.0.3
- _ZN3Dtk4Core12FileAppender9closeFileEv@Base 5.0.3
- _ZN3Dtk4Core12FileAppenderC1ERK7QString@Base 5.0.3
- _ZN3Dtk4Core12FileAppenderC2ERK7QString@Base 5.0.3
- _ZN3Dtk4Core12FileAppenderD0Ev@Base 5.0.3
- _ZN3Dtk4Core12FileAppenderD1Ev@Base 5.0.3
- _ZN3Dtk4Core12FileAppenderD2Ev@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry10escapeExecER7QString@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry11removeEntryERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry11setRawValueERK7QStringS4_S4_@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry12unescapeExecER7QString@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry14setStringValueERK7QStringS4_S4_@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry17setLocalizedValueERK7QStringS4_S4_S4_@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry6escapeER7QString@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry8unescapeER7QStringb@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntry9setStatusERKNS1_6StatusE@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntryC1ERK7QString@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntryC2ERK7QString@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntryD1Ev@Base 5.0.3
- _ZN3Dtk4Core13DDesktopEntryD2Ev@Base 5.0.3
- _ZN3Dtk4Core13DFileServices10showFolderE4QUrlRK7QString@Base 5.0.3
- _ZN3Dtk4Core13DFileServices10showFolderE7QStringRKS2_@Base 5.0.3
- _ZN3Dtk4Core13DFileServices11showFoldersE5QListI4QUrlERK7QString@Base 5.0.3
- _ZN3Dtk4Core13DFileServices11showFoldersE5QListI7QStringERKS3_@Base 5.0.3
- _ZN3Dtk4Core13DFileServices12errorMessageEv@Base 5.0.3
- _ZN3Dtk4Core13DFileServices12showFileItemE4QUrlRK7QString@Base 5.0.3
- _ZN3Dtk4Core13DFileServices12showFileItemE7QStringRKS2_@Base 5.0.3
- _ZN3Dtk4Core13DFileServices13showFileItemsE5QListI4QUrlERK7QString@Base 5.0.3
- _ZN3Dtk4Core13DFileServices13showFileItemsE5QListI7QStringERKS3_@Base 5.0.3
- _ZN3Dtk4Core13DFileServices21showFileItemPropertieE4QUrlRK7QString@Base 5.0.3
- _ZN3Dtk4Core13DFileServices21showFileItemPropertieE7QStringRKS2_@Base 5.0.3
- _ZN3Dtk4Core13DFileServices22showFileItemPropertiesE5QListI4QUrlERK7QString@Base 5.0.3
- _ZN3Dtk4Core13DFileServices22showFileItemPropertiesE5QListI7QStringERKS3_@Base 5.0.3
- _ZN3Dtk4Core13DFileServices5trashE4QUrl@Base 5.0.3
- _ZN3Dtk4Core13DFileServices5trashE5QListI4QUrlE@Base 5.0.3
- _ZN3Dtk4Core13DFileServices5trashE5QListI7QStringE@Base 5.0.3
- _ZN3Dtk4Core13DFileServices5trashE7QString@Base 5.0.3
- _ZN3Dtk4Core13DSecureStringC1ERK7QString@Base 5.0.3
- _ZN3Dtk4Core13DSecureStringC2ERK7QString@Base 5.0.3
- _ZN3Dtk4Core13DSecureStringD1Ev@Base 5.0.3
- _ZN3Dtk4Core13DSecureStringD2Ev@Base 5.0.3
- _ZN3Dtk4Core13DTrashManager10cleanTrashEv@Base 5.0.3
- _ZN3Dtk4Core13DTrashManager11moveToTrashERK7QStringb@Base 5.0.3
- _ZN3Dtk4Core13DTrashManager8instanceEv@Base 5.0.3
- _ZN3Dtk4Core13DTrashManagerC1Ev@Base 5.0.3
- _ZN3Dtk4Core13DTrashManagerC2Ev@Base 5.0.3
- _ZN3Dtk4Core13DTrashManagerD0Ev@Base 5.0.3
- _ZN3Dtk4Core13DTrashManagerD1Ev@Base 5.0.3
- _ZN3Dtk4Core13DTrashManagerD2Ev@Base 5.0.3
- _ZN3Dtk4Core13LoggerPrivate14globalInstanceE@Base 5.0.3
- _ZN3Dtk4Core13LoggerPrivate18globalInstanceLockE@Base 5.0.3
- _ZN3Dtk4Core14Chinese2PinyinERK7QString@Base 5.0.3
- _ZN3Dtk4Core14DObjectPrivateC1EPNS0_7DObjectE@Base 5.0.3
- _ZN3Dtk4Core14DObjectPrivateC2EPNS0_7DObjectE@Base 5.0.3
- _ZN3Dtk4Core14DObjectPrivateD0Ev@Base 5.0.3
- _ZN3Dtk4Core14DObjectPrivateD1Ev@Base 5.0.3
- _ZN3Dtk4Core14DObjectPrivateD2Ev@Base 5.0.3
- _ZN3Dtk4Core14DRecentManager10removeItemERK7QString@Base 5.0.3
- _ZN3Dtk4Core14DRecentManager11removeItemsERK11QStringList@Base 5.0.3
- _ZN3Dtk4Core14DRecentManager7addItemERK7QStringRNS0_11DRecentDataE@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroup11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroup11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroup14setParentGroupE8QPointerIS1_E@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroup16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroup8fromJsonERK7QStringRK11QJsonObject@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroup9parseJsonERK7QStringRK11QJsonObject@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroupC1EP7QObject@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroupC2EP7QObject@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroupD0Ev@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroupD1Ev@Base 5.0.3
- _ZN3Dtk4Core14DSettingsGroupD2Ev@Base 5.0.3
- _ZN3Dtk4Core14DStandardPaths14findExecutableERK7QStringRK11QStringList@Base 5.0.3
- _ZN3Dtk4Core14DStandardPaths16writableLocationEN14QStandardPaths16StandardLocationE@Base 5.0.3
- _ZN3Dtk4Core14DStandardPaths17standardLocationsEN14QStandardPaths16StandardLocationE@Base 5.0.3
- _ZN3Dtk4Core14DStandardPaths6locateEN14QStandardPaths16StandardLocationERK7QString6QFlagsINS2_12LocateOptionEE@Base 5.0.3
- _ZN3Dtk4Core14DStandardPaths7setModeENS1_4ModeE@Base 5.0.3
- _ZN3Dtk4Core14DStandardPaths9locateAllEN14QStandardPaths16StandardLocationERK7QString6QFlagsINS2_12LocateOptionEE@Base 5.0.3
- _ZN3Dtk4Core14DTrashManager_D0Ev@Base 5.0.3
- _ZN3Dtk4Core14DTrashManager_D1Ev@Base 5.0.3
- _ZN3Dtk4Core14DTrashManager_D2Ev@Base 5.0.3
- _ZN3Dtk4Core14loggerInstanceEv@Base 5.0.3
- _ZN3Dtk4Core14parentPathListERK7QString@Base 5.0.3
- _ZN3Dtk4Core15ConsoleAppender24ignoreEnvironmentPatternEb@Base 5.0.3
- _ZN3Dtk4Core15ConsoleAppender6appendERK9QDateTimeNS0_6Logger8LogLevelEPKciS8_RK7QStringSB_@Base 5.0.3
- _ZN3Dtk4Core15ConsoleAppenderC1Ev@Base 5.0.3
- _ZN3Dtk4Core15ConsoleAppenderC2Ev@Base 5.0.3
- _ZN3Dtk4Core15ConsoleAppenderD0Ev@Base 5.0.3
- _ZN3Dtk4Core15ConsoleAppenderD1Ev@Base 5.0.3
- _ZN3Dtk4Core15ConsoleAppenderD2Ev@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption11dataChangedERK7QString8QVariant@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption12valueChangedE8QVariant@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption14setParentGroupE8QPointerINS0_14DSettingsGroupEE@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption7setDataERK7QString8QVariant@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption8fromJsonERK7QStringRK11QJsonObject@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption8setValueE8QVariant@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOption9parseJsonERK7QStringRK11QJsonObject@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOptionC1EP7QObject@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOptionC2EP7QObject@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOptionD0Ev@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOptionD1Ev@Base 5.0.3
- _ZN3Dtk4Core15DSettingsOptionD2Ev@Base 5.0.3
- _ZN3Dtk4Core15DSysInfoPrivate13parseInfoFileER5QFile@Base 5.0.3
- _ZN3Dtk4Core15DSysInfoPrivate16ensureDeepinInfoEv@Base 5.0.3
- _ZN3Dtk4Core15DSysInfoPrivate17ensureReleaseInfoEv@Base 5.0.3
- _ZN3Dtk4Core15DSysInfoPrivate18ensureComputerInfoEv@Base 5.0.3
- _ZN3Dtk4Core15DSysInfoPrivateC1Ev@Base 5.0.3
- _ZN3Dtk4Core15DSysInfoPrivateC2Ev@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackend11doSetOptionERK7QStringRK8QVariant@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackend11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackend11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackend16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackend6doSyncEv@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackendC1ERK7QStringP7QObject@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackendC2ERK7QStringP7QObject@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackendD0Ev@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackendD1Ev@Base 5.0.3
- _ZN3Dtk4Core15QSettingBackendD2Ev@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppender15setDetailsLevelENS0_6Logger8LogLevelE@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppender15setDetailsLevelERK7QString@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppender5writeERK9QDateTimeNS0_6Logger8LogLevelEPKciS8_RK7QStringSB_@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppenderC1Ev@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppenderC2Ev@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppenderD0Ev@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppenderD1Ev@Base 5.0.3
- _ZN3Dtk4Core16AbstractAppenderD2Ev@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher10fileClosedERK4QUrl@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher11fileDeletedERK4QUrl@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher11ghostSignalERK4QUrlMS1_FvS4_ES4_@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher11ghostSignalERK4QUrlMS1_FvS4_S4_ES4_S4_@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher11stopWatcherEv@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher12fileModifiedERK4QUrl@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher12startWatcherEv@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher14restartWatcherEv@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher14subfileCreatedERK4QUrl@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher20fileAttributeChangedERK4QUrl@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher24setEnabledSubfileWatcherERK4QUrlb@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcher9fileMovedERK4QUrlS4_@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcherC1ERNS0_23DBaseFileWatcherPrivateERK4QUrlP7QObject@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcherC2ERNS0_23DBaseFileWatcherPrivateERK4QUrlP7QObject@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcherD0Ev@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcherD1Ev@Base 5.0.3
- _ZN3Dtk4Core16DBaseFileWatcherD2Ev@Base 5.0.3
- _ZN3Dtk4Core16DSettingsBackend11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core16DSettingsBackend11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core16DSettingsBackend13optionChangedERK7QStringRK8QVariant@Base 5.0.3
- _ZN3Dtk4Core16DSettingsBackend16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core16DSettingsBackend4syncEv@Base 5.0.3
- _ZN3Dtk4Core16DSettingsBackend9setOptionERK7QStringRK8QVariant@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackend11doSetOptionERK7QStringRK8QVariant@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackend11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackend11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackend16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackend6doSyncEv@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackendC1EPNS0_9DSettingsEP7QObject@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackendC2EPNS0_9DSettingsEP7QObject@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackendD0Ev@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackendD1Ev@Base 5.0.3
- _ZN3Dtk4Core16GSettingsBackendD2Ev@Base 5.0.3
- _ZN3Dtk4Core16readLineFromDataERK10QByteArrayRiS4_S4_S4_@Base 5.0.3
- _ZN3Dtk4Core18DDiskSizeFormatter4rateEi@Base 5.0.3
- _ZN3Dtk4Core18DDiskSizeFormatterC1Ev@Base 5.0.3
- _ZN3Dtk4Core18DDiskSizeFormatterC2Ev@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher10fileClosedERK7QStringS4_NS1_14QPrivateSignalE@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher10removePathERK7QString@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher11fileCreatedERK7QStringS4_NS1_14QPrivateSignalE@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher11fileDeletedERK7QStringS4_NS1_14QPrivateSignalE@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher11removePathsERK11QStringList@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher12fileModifiedERK7QStringS4_NS1_14QPrivateSignalE@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher20fileAttributeChangedERK7QStringS4_NS1_14QPrivateSignalE@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher7addPathERK7QString@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher8addPathsERK11QStringList@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcher9fileMovedERK7QStringS4_S4_S4_NS1_14QPrivateSignalE@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcherC1EP7QObject@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcherC1ERK11QStringListP7QObject@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcherC2EP7QObject@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcherC2ERK11QStringListP7QObject@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcherD0Ev@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcherD1Ev@Base 5.0.3
- _ZN3Dtk4Core18DFileSystemWatcherD2Ev@Base 5.0.3
- _ZN3Dtk4Core18DTimeUnitFormatterC1Ev@Base 5.0.3
- _ZN3Dtk4Core18DTimeUnitFormatterC2Ev@Base 5.0.3
- _ZN3Dtk4Core18LoggerTimingHelper5startEPKcz@Base 5.0.3
- _ZN3Dtk4Core18LoggerTimingHelper5startERK7QString@Base 5.0.3
- _ZN3Dtk4Core18LoggerTimingHelperD1Ev@Base 5.0.3
- _ZN3Dtk4Core18LoggerTimingHelperD2Ev@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager10fileClosedERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager11fileDeletedERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager12fileModifiedERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager14subfileCreatedERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager20fileAttributeChangedERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager3addERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager6removeERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManager9fileMovedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManagerC1EP7QObject@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManagerC2EP7QObject@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManagerD0Ev@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManagerD1Ev@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherManagerD2Ev@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate10formatPathERK7QString@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate18_q_handleFileCloseERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate18_q_handleFileMovedERK7QStringS4_S4_S4_@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate20_q_handleFileCreatedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate20_q_handleFileDeletedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate21_q_handleFileModifiedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate22filePathToWatcherCountE@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate29_q_handleFileAttributeChangedERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate4stopEv@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivate5startEv@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivateD0Ev@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivateD1Ev@Base 5.0.3
- _ZN3Dtk4Core19DFileWatcherPrivateD2Ev@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender14removeOldFilesEv@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender14setDatePatternENS1_11DatePatternE@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender14setDatePatternERK7QString@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender16computeFrequencyEv@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender16setLogFilesLimitEi@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender19computeRollOverTimeEv@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender20setDatePatternStringERK7QString@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender6appendERK9QDateTimeNS0_6Logger8LogLevelEPKciS8_RK7QStringSB_@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppender8rollOverEv@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppenderC1ERK7QString@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppenderC2ERK7QString@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppenderD0Ev@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppenderD1Ev@Base 5.0.3
- _ZN3Dtk4Core19RollingFileAppenderD2Ev@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivate20initSectionsFromDataERK10QByteArray@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivate3getERK7QStringS4_PS2_@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivate3setERK7QStringS4_S4_@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivate6removeERK7QStringS4_@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivate9fuzzyLoadEv@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivateC1ERK7QStringPNS0_13DDesktopEntryE@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivateC2ERK7QStringPNS0_13DDesktopEntryE@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivateD1Ev@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntryPrivateD2Ev@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntrySection23ensureSectionDataParsedEv@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntrySectionD1Ev@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntrySectionD2Ev@Base 5.0.3
- _ZN3Dtk4Core20DDesktopEntrySectionaSERKS1_@Base 5.0.3
- _ZN3Dtk4Core20DTrashManagerPrivate15removeFileOrDirERK7QString@Base 5.0.3
- _ZN3Dtk4Core20DTrashManagerPrivate18removeFromIteratorER12QDirIterator@Base 5.0.3
- _ZN3Dtk4Core20DTrashManagerPrivateD0Ev@Base 5.0.3
- _ZN3Dtk4Core20DTrashManagerPrivateD1Ev@Base 5.0.3
- _ZN3Dtk4Core20DTrashManagerPrivateD2Ev@Base 5.0.3
- _ZN3Dtk4Core21DSettingsGroupPrivate9parseJsonERK7QStringRK11QJsonObject@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppender16qCleanupFuncinfoEPKc@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppender17stripFunctionNameEPKc@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppender9setFormatERK7QString@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppenderC1Ev@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppenderC2Ev@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppenderD0Ev@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppenderD1Ev@Base 5.0.3
- _ZN3Dtk4Core22AbstractStringAppenderD2Ev@Base 5.0.3
- _ZN3Dtk4Core22DAbstractUnitFormatterC1Ev@Base 5.0.3
- _ZN3Dtk4Core22DAbstractUnitFormatterC2Ev@Base 5.0.3
- _ZN3Dtk4Core22DAbstractUnitFormatterD1Ev@Base 5.0.3
- _ZN3Dtk4Core22DAbstractUnitFormatterD2Ev@Base 5.0.3
- _ZN3Dtk4Core22DSettingsOptionPrivate9parseJsonERK7QStringRK11QJsonObject@Base 5.0.3
- _ZN3Dtk4Core23DBaseFileWatcherPrivate11watcherListE@Base 5.0.3
- _ZN3Dtk4Core23DBaseFileWatcherPrivateC1EPNS0_16DBaseFileWatcherE@Base 5.0.3
- _ZN3Dtk4Core23DBaseFileWatcherPrivateC2EPNS0_16DBaseFileWatcherE@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivate11removePathsERK11QStringListPS2_S5_@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivate13onFileChangedERK7QStringb@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivate18_q_readFromInotifyEv@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivate18onDirectoryChangedERK7QStringb@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivate8addPathsERK11QStringListPS2_S5_@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivateC1EiPNS0_18DFileSystemWatcherE@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivateC2EiPNS0_18DFileSystemWatcherE@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivateD0Ev@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivateD1Ev@Base 5.0.3
- _ZN3Dtk4Core25DFileSystemWatcherPrivateD2Ev@Base 5.0.3
- _ZN3Dtk4Core26DFileWatcherManagerPrivateC1EPNS0_19DFileWatcherManagerE@Base 5.0.3
- _ZN3Dtk4Core26DFileWatcherManagerPrivateC2EPNS0_19DFileWatcherManagerE@Base 5.0.3
- _ZN3Dtk4Core26DFileWatcherManagerPrivateD0Ev@Base 5.0.3
- _ZN3Dtk4Core26DFileWatcherManagerPrivateD1Ev@Base 5.0.3
- _ZN3Dtk4Core26DFileWatcherManagerPrivateD2Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender4callEv@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender5hintsERK4QMapI7QString8QVariantE@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender7actionsERK11QStringList@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender7appBodyERK7QString@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender7appIconERK7QString@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender7appNameERK7QString@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender7timeOutEi@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySender9replaceIdEj@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySenderC1ERK7QString@Base 5.0.3
- _ZN3Dtk4Core5DUtil13DNotifySenderC2ERK7QString@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterface11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterface14registerActionERK7QStringS5_St8functionIF8QVariantS3_EE@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterface16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterfaceC1EP7QObject@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterfaceC2EP7QObject@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterfaceD0Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterfaceD1Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil18DExportedInterfaceD2Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil25DExportedInterfacePrivate10actionHelpE7QStringi@Base 5.0.3
- _ZN3Dtk4Core5DUtil25DExportedInterfacePrivateC1EPNS1_18DExportedInterfaceE@Base 5.0.3
- _ZN3Dtk4Core5DUtil25DExportedInterfacePrivateC2EPNS1_18DExportedInterfaceE@Base 5.0.3
- _ZN3Dtk4Core5DUtil25DExportedInterfacePrivateD0Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil25DExportedInterfacePrivateD1Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil25DExportedInterfacePrivateD2Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterface11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterface16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterface4helpERK7QString@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterface4listEv@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterface6invokeE7QStringS3_@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceC1EPNS1_25DExportedInterfacePrivateE@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceC2EPNS1_25DExportedInterfacePrivateE@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceD0Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceD1Ev@Base 5.0.3
- _ZN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceD2Ev@Base 5.0.3
- _ZN3Dtk4Core6Logger11writeAssertEPKciS3_S3_@Base 5.0.3
- _ZN3Dtk4Core6Logger13levelToStringENS1_8LogLevelE@Base 5.0.3
- _ZN3Dtk4Core6Logger14globalInstanceEv@Base 5.0.3
- _ZN3Dtk4Core6Logger15levelFromStringERK7QString@Base 5.0.3
- _ZN3Dtk4Core6Logger16registerAppenderEPNS0_16AbstractAppenderE@Base 5.0.3
- _ZN3Dtk4Core6Logger18setDefaultCategoryERK7QString@Base 5.0.3
- _ZN3Dtk4Core6Logger19logToGlobalInstanceERK7QStringb@Base 5.0.3
- _ZN3Dtk4Core6Logger24registerCategoryAppenderERK7QStringPNS0_16AbstractAppenderE@Base 5.0.3
- _ZN3Dtk4Core6Logger5writeENS1_8LogLevelEPKciS4_S4_@Base 5.0.3
- _ZN3Dtk4Core6Logger5writeENS1_8LogLevelEPKciS4_S4_RK7QString@Base 5.0.3
- _ZN3Dtk4Core6Logger5writeERK9QDateTimeNS1_8LogLevelEPKciS7_S7_RK7QString@Base 5.0.3
- _ZN3Dtk4Core6Logger5writeERK9QDateTimeNS1_8LogLevelEPKciS7_S7_RK7QStringb@Base 5.0.3
- _ZN3Dtk4Core6LoggerC1ERK7QString@Base 5.0.3
- _ZN3Dtk4Core6LoggerC1Ev@Base 5.0.3
- _ZN3Dtk4Core6LoggerC2ERK7QString@Base 5.0.3
- _ZN3Dtk4Core6LoggerC2Ev@Base 5.0.3
- _ZN3Dtk4Core6LoggerD1Ev@Base 5.0.3
- _ZN3Dtk4Core6LoggerD2Ev@Base 5.0.3
- _ZN3Dtk4Core7DObjectC1EPS1_@Base 5.0.3
- _ZN3Dtk4Core7DObjectC1ERNS0_14DObjectPrivateEPS1_@Base 5.0.3
- _ZN3Dtk4Core7DObjectC2EPS1_@Base 5.0.3
- _ZN3Dtk4Core7DObjectC2ERNS0_14DObjectPrivateEPS1_@Base 5.0.3
- _ZN3Dtk4Core7DObjectD0Ev@Base 5.0.3
- _ZN3Dtk4Core7DObjectD1Ev@Base 5.0.3
- _ZN3Dtk4Core7DObjectD2Ev@Base 5.0.3
- _ZN3Dtk4Core8DPathBufC1ERK7QString@Base 5.0.3
- _ZN3Dtk4Core8DPathBufC1Ev@Base 5.0.3
- _ZN3Dtk4Core8DPathBufC2ERK7QString@Base 5.0.3
- _ZN3Dtk4Core8DPathBufC2Ev@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo10deepinTypeEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo11productTypeEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo12computerNameEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo12cpuModelNameEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo13deepinEditionEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo13deepinVersionEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo14productVersionEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo14systemDiskSizeEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo15deepinCopyrightEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo15memoryTotalSizeEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo17productTypeStringEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo18isCommunityEditionEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo19distributionOrgLogoENS1_7OrgTypeENS1_8LogoTypeERK7QString@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo19distributionOrgNameENS1_7OrgTypeERK7QLocale@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo19memoryInstalledSizeEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo19operatingSystemNameEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo20distributionInfoPathEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo21deepinDistributorLogoENS1_8LogoTypeERK7QString@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo21deepinDistributorNameEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo21deepinTypeDisplayNameERK7QLocale@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo22distributionOrgWebsiteENS1_7OrgTypeE@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo24deepinDistributorWebsiteEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo26deepinDistributionInfoPathEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo27distributionInfoSectionNameENS1_7OrgTypeE@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo5isDDEEv@Base 5.0.3
- _ZN3Dtk4Core8DSysInfo8isDeepinEv@Base 5.0.3
- _ZN3Dtk4Core8doEscapeER7QStringRK5QHashI5QCharS4_E@Base 5.0.3
- _ZN3Dtk4Core9DSettings10setBackendEPNS0_16DSettingsBackendE@Base 5.0.3
- _ZN3Dtk4Core9DSettings11qt_metacallEN11QMetaObject4CallEiPPv@Base 5.0.3
- _ZN3Dtk4Core9DSettings11qt_metacastEPKc@Base 5.0.3
- _ZN3Dtk4Core9DSettings12fromJsonFileERK7QString@Base 5.0.3
- _ZN3Dtk4Core9DSettings12valueChangedERK7QStringRK8QVariant@Base 5.0.3
- _ZN3Dtk4Core9DSettings16staticMetaObjectE@Base 5.0.3
- _ZN3Dtk4Core9DSettings4syncEv@Base 5.0.3
- _ZN3Dtk4Core9DSettings5resetEv@Base 5.0.3
- _ZN3Dtk4Core9DSettings8fromJsonERK10QByteArray@Base 5.0.3
- _ZN3Dtk4Core9DSettings9loadValueEv@Base 5.0.3
- _ZN3Dtk4Core9DSettings9parseJsonERK10QByteArray@Base 5.0.3
- _ZN3Dtk4Core9DSettings9setOptionERK7QStringRK8QVariant@Base 5.0.3
- _ZN3Dtk4Core9DSettingsC1EP7QObject@Base 5.0.3
- _ZN3Dtk4Core9DSettingsC2EP7QObject@Base 5.0.3
- _ZN3Dtk4Core9DSettingsD0Ev@Base 5.0.3
- _ZN3Dtk4Core9DSettingsD1Ev@Base 5.0.3
- _ZN3Dtk4Core9DSettingsD2Ev@Base 5.0.3
- _ZN3Dtk4Core9LogDevice8readDataEPcx@Base 5.0.3
- _ZN3Dtk4Core9LogDevice9writeDataEPKcx@Base 5.0.3
- _ZN3Dtk4Core9LogDeviceD0Ev@Base 5.0.3
- _ZN3Dtk4Core9LogDeviceD1Ev@Base 5.0.3
- _ZN3Dtk4Core9LogDeviceD2Ev@Base 5.0.3
- _ZN3Dtk4Core9qtifyNameERK7QString@Base 5.0.3
- _ZN4QMapI7QString5QPairIS0_yEE13detach_helperEv@Base 5.0.3
- _ZN4QMapI7QString5QPairIS0_yEED1Ev@Base 5.0.3
- _ZN4QMapI7QString5QPairIS0_yEED2Ev@Base 5.0.3
- _ZN4QMapI7QString5QPairIS0_yEEixERKS0_@Base 5.0.3
- _ZN4QMapI7QString8QPointerIN3Dtk4Core15DSettingsOptionEEE13detach_helperEv@Base 5.0.3
- _ZN4QMapI7QString8QVariantE6insertERKS0_RKS1_@Base 5.0.3
- _ZN4QMapI7QString8QVariantEC1ERKS2_@Base 5.0.3
- _ZN4QMapI7QString8QVariantEC2ERKS2_@Base 5.0.3
- _ZN4QMapI7QStringN3Dtk4Core20DDesktopEntrySectionEE13detach_helperEv@Base 5.0.3
- _ZN4QMapI7QStringN3Dtk4Core20DDesktopEntrySectionEED1Ev@Base 5.0.3
- _ZN4QMapI7QStringN3Dtk4Core20DDesktopEntrySectionEED2Ev@Base 5.0.3
- _ZN4QMapI7QStringN3Dtk4Core20DDesktopEntrySectionEEixERKS0_@Base 5.0.3
- _ZN4QMapI7QStringPN3Dtk4Core12DFileWatcherEE13detach_helperEv@Base 5.0.3
- _ZN4QMapI7QStringS0_E13detach_helperEv@Base 5.0.3
- _ZN4QMapI7QStringS0_E6removeERKS0_@Base 5.0.3
- _ZN4QMapI7QStringS0_EC1ERKS1_@Base 5.0.3
- _ZN4QMapI7QStringS0_EC2ERKS1_@Base 5.0.3
- _ZN4QMapI7QStringS0_ED1Ev@Base 5.0.3
- _ZN4QMapI7QStringS0_ED2Ev@Base 5.0.3
- _ZN4QMapI7QStringS0_EixERKS0_@Base 5.0.3
- _ZN4QMapI7QStringiE13detach_helperEv@Base 5.0.3
- _ZN4QMapI7QStringiED1Ev@Base 5.0.3
- _ZN4QMapI7QStringiED2Ev@Base 5.0.3
- _ZN4QMapI9QDateTime7QStringED1Ev@Base 5.0.3
- _ZN4QMapI9QDateTime7QStringED2Ev@Base 5.0.3
- _ZN4QMapIPKvPyE13detach_helperEv@Base 5.0.3
- _ZN4QMapIPKvPyED1Ev@Base 5.0.3
- _ZN4QMapIPKvPyED2Ev@Base 5.0.3
- _ZN4QMapIPKvyE13detach_helperEv@Base 5.0.3
- _ZN4QMapIPKvyED1Ev@Base 5.0.3
- _ZN4QMapIPKvyED2Ev@Base 5.0.3
- _ZN4QMapIPPyS0_E13detach_helperEv@Base 5.0.3
- _ZN4QMapIPPyS0_ED1Ev@Base 5.0.3
- _ZN4QMapIPPyS0_ED2Ev@Base 5.0.3
- _ZN4QMapIi7QStringED1Ev@Base 5.0.3
- _ZN4QMapIi7QStringED2Ev@Base 5.0.3
- _ZN5QHashI5QCharS0_E11deleteNode2EPN9QHashData4NodeE@Base 5.0.3
- _ZN5QHashI5QCharS0_E13duplicateNodeEPN9QHashData4NodeEPv@Base 5.0.3
- _ZN5QHashI5QCharS0_E6insertERKS0_S3_@Base 5.0.3
- _ZN5QHashI5QCharS0_ED1Ev@Base 5.0.3
- _ZN5QHashI5QCharS0_ED2Ev@Base 5.0.3
- _ZN5QHashI7QString5QPairISt8functionIF8QVariantS0_EES0_EE11deleteNode2EPN9QHashData4NodeE@Base 5.0.3
- _ZN5QHashI7QString5QPairISt8functionIF8QVariantS0_EES0_EE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.0.3
- _ZN5QHashI7QStringiE11deleteNode2EPN9QHashData4NodeE@Base 5.0.3
- _ZN5QHashI7QStringiE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.0.3
- _ZN5QHashIPN3Dtk4Core16AbstractAppenderE15QHashDummyValueE11deleteNode2EPN9QHashData4NodeE@Base 5.0.3
- _ZN5QHashIPN3Dtk4Core16AbstractAppenderE15QHashDummyValueE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.0.3
- _ZN5QHashIPN3Dtk4Core16AbstractAppenderE15QHashDummyValueED1Ev@Base 5.0.3
- _ZN5QHashIPN3Dtk4Core16AbstractAppenderE15QHashDummyValueED2Ev@Base 5.0.3
- _ZN5QHashIi15QHashDummyValueE11deleteNode2EPN9QHashData4NodeE@Base 5.0.3
- _ZN5QHashIi15QHashDummyValueE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.0.3
- _ZN5QHashIi7QStringE11deleteNode2EPN9QHashData4NodeE@Base 5.0.3
- _ZN5QHashIi7QStringE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.0.3
- _ZN5QHashIi7QStringE5eraseENS1_14const_iteratorE@Base 5.0.3
- _ZN5QHashIi7QStringED1Ev@Base 5.0.3
- _ZN5QHashIi7QStringED2Ev@Base 5.0.3
- _ZN5QHashIj7QStringE11deleteNode2EPN9QHashData4NodeE@Base 5.0.3
- _ZN5QHashIj7QStringE13duplicateNodeEPN9QHashData4NodeEPv@Base 5.0.3
- _ZN5QHashIj7QStringED1Ev@Base 5.0.3
- _ZN5QHashIj7QStringED2Ev@Base 5.0.3
- _ZN5QListI10QByteArrayED1Ev@Base 5.0.3
- _ZN5QListI10QByteArrayED2Ev@Base 5.0.3
- _ZN5QListI4QUrlE13detach_helperEi@Base 5.0.3
- _ZN5QListI4QUrlE18detach_helper_growEii@Base 5.0.3
- _ZN5QListI4QUrlE6appendERKS0_@Base 5.0.3
- _ZN5QListI4QUrlEC1ERKS1_@Base 5.0.3
- _ZN5QListI4QUrlEC2ERKS1_@Base 5.0.3
- _ZN5QListI4QUrlED1Ev@Base 5.0.3
- _ZN5QListI4QUrlED2Ev@Base 5.0.3
- _ZN5QListI5QPairI7QStringiEE13detach_helperEi@Base 5.0.3
- _ZN5QListI5QPairI7QStringiEE18detach_helper_growEii@Base 5.0.3
- _ZN5QListI5QPairI7QStringiEE6appendERKS2_@Base 5.0.3
- _ZN5QListI5QPairI7QStringiEED1Ev@Base 5.0.3
- _ZN5QListI5QPairI7QStringiEED2Ev@Base 5.0.3
- _ZN5QListI5QPairIdiEE18detach_helper_growEii@Base 5.0.3
- _ZN5QListI5QPairIdiEE6appendERKS1_@Base 5.0.3
- _ZN5QListI5QPairIdiEED1Ev@Base 5.0.3
- _ZN5QListI5QPairIdiEED2Ev@Base 5.0.3
- _ZN5QListI7QStringE13detach_helperEi@Base 5.0.3
- _ZN5QListI7QStringE18detach_helper_growEii@Base 5.0.3
- _ZN5QListI7QStringE6appendERKS0_@Base 5.0.3
- _ZN5QListI7QStringE7reserveEi@Base 5.0.3
- _ZN5QListI7QStringE9removeAllERKS0_@Base 5.0.3
- _ZN5QListI7QStringEC1ERKS1_@Base 5.0.3
- _ZN5QListI7QStringEC2ERKS1_@Base 5.0.3
- _ZN5QListI7QStringED1Ev@Base 5.0.3
- _ZN5QListI7QStringED2Ev@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core14DSettingsGroupEEE13detach_helperEi@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core14DSettingsGroupEEE18detach_helper_growEii@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core14DSettingsGroupEEE6appendERKS4_@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEE13detach_helperEi@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEE18detach_helper_growEii@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEE6appendERKS4_@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEED1Ev@Base 5.0.3
- _ZN5QListI8QPointerIN3Dtk4Core15DSettingsOptionEEED2Ev@Base 5.0.3
- _ZN5QListI8QVariantE13detach_helperEi@Base 5.0.3
- _ZN5QListI8QVariantE18detach_helper_growEii@Base 5.0.3
- _ZN5QListI8QVariantE6appendERKS0_@Base 5.0.3
- _ZN5QListI8QVariantEC1ERKS1_@Base 5.0.3
- _ZN5QListI8QVariantEC2ERKS1_@Base 5.0.3
- _ZN5QListI8QVariantED1Ev@Base 5.0.3
- _ZN5QListI8QVariantED2Ev@Base 5.0.3
- _ZN5QListI9QFileInfoE13detach_helperEi@Base 5.0.3
- _ZN5QListI9QFileInfoED1Ev@Base 5.0.3
- _ZN5QListI9QFileInfoED2Ev@Base 5.0.3
- _ZN5QListIN3Dtk4Core8DSysInfo10DeepinTypeEE13detach_helperEi@Base 5.0.3
- _ZN5QListIN3Dtk4Core8DSysInfo10DeepinTypeEE18detach_helper_growEii@Base 5.0.3
- _ZN5QListIN3Dtk4Core8DSysInfo10DeepinTypeEE6appendERKS3_@Base 5.0.3
- _ZN5QListIN3Dtk4Core8DSysInfo10DeepinTypeEED1Ev@Base 5.0.3
- _ZN5QListIN3Dtk4Core8DSysInfo10DeepinTypeEED2Ev@Base 5.0.3
- _ZN5QListIP13inotify_eventE13detach_helperEi@Base 5.0.3
- _ZN5QListIP13inotify_eventE18detach_helper_growEii@Base 5.0.3
- _ZN5QListIP13inotify_eventE6appendERKS1_@Base 5.0.3
- _ZN5QListIP13inotify_eventED1Ev@Base 5.0.3
- _ZN5QListIP13inotify_eventED2Ev@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16AbstractAppenderEE18detach_helper_growEii@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16AbstractAppenderEE6appendERKS3_@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16AbstractAppenderEEC1ERKS4_@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16AbstractAppenderEEC2ERKS4_@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16AbstractAppenderEED1Ev@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16AbstractAppenderEED2Ev@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16DBaseFileWatcherEE13detach_helperEi@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16DBaseFileWatcherEE18detach_helper_growEii@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16DBaseFileWatcherEE6appendERKS3_@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16DBaseFileWatcherEE9removeOneERKS3_@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16DBaseFileWatcherEED1Ev@Base 5.0.3
- _ZN5QListIPN3Dtk4Core16DBaseFileWatcherEED2Ev@Base 5.0.3
- _ZN5QPairISt8functionIF8QVariant7QStringEES2_ED1Ev@Base 5.0.3
- _ZN5QPairISt8functionIF8QVariant7QStringEES2_ED2Ev@Base 5.0.3
- _ZN7QStringC1EPKc@Base 5.0.3
- _ZN7QStringC2EPKc@Base 5.0.3
- _ZN7QStringD1Ev@Base 5.0.3
- _ZN7QStringD2Ev@Base 5.0.3
- _ZN8QMapDataI7QStringN3Dtk4Core20DDesktopEntrySectionEE10createNodeERKS0_RKS3_P8QMapNodeIS0_S3_Eb@Base 5.0.3
- _ZN8QMapDataI7QStringPN3Dtk4Core12DFileWatcherEE7destroyEv@Base 5.0.3
- _ZN8QMapDataI7QStringPN3Dtk4Core16AbstractAppenderEE7destroyEv@Base 5.0.3
- _ZN8QMapDataI7QStringbE7destroyEv@Base 5.0.3
- _ZN8QMapDataI7QStringiE7destroyEv@Base 5.0.3
- _ZN8QMapDataI9QDateTime7QStringE7destroyEv@Base 5.0.3
- _ZN8QMapDataIi7QStringE7destroyEv@Base 5.0.3
- _ZN8QMapNodeI7QString5QPairIS0_yEE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QString8QPointerIN3Dtk4Core14DSettingsGroupEEE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QString8QPointerIN3Dtk4Core15DSettingsOptionEEE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QString8QVariantE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QStringN3Dtk4Core20DDesktopEntrySectionEE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QStringPN3Dtk4Core12DFileWatcherEE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QStringPN3Dtk4Core16AbstractAppenderEE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QStringS0_E14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QStringbE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI7QStringiE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeI9QDateTime7QStringE14destroySubTreeEv@Base 5.0.3
- _ZN8QMapNodeIi7QStringE14destroySubTreeEv@Base 5.0.3
- _ZN9DDBusDataC1Ev@Base 5.0.3
- _ZN9DDBusDataC2Ev@Base 5.0.3
- _ZN9QtPrivate11QSlotObjectIMN3Dtk4Core12DFileWatcherEFvRK7QStringS6_ENS_4ListIJS6_S6_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.0.3
- _ZN9QtPrivate11QSlotObjectIMN3Dtk4Core12DFileWatcherEFvRK7QStringS6_S6_S6_ENS_4ListIJS6_S6_S6_S6_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.0.3
- _ZN9QtPrivate11QSlotObjectIMN3Dtk4Core16DSettingsBackendEFvRK7QStringRK8QVariantENS_4ListIJS6_S9_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.0.3
- _ZN9QtPrivate11QSlotObjectIMN3Dtk4Core16DSettingsBackendEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 5.0.3
- _ZN9QtPrivate8RefCount3refEv@Base 5.0.3
- _ZNK3Dtk4Core12DFileWatcher10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core12FileAppender4sizeEv@Base 5.0.3
- _ZNK3Dtk4Core12FileAppender8fileNameEv@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry11genericNameEv@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry11stringValueERK7QStringS4_S4_@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry14ddeDisplayNameEv@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry14localizedValueERK7QStringRK7QLocaleS4_S4_@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry14localizedValueERK7QStringS4_S4_S4_@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry15stringListValueERK7QStringS4_@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry4keysERK7QString@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry4nameEv@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry4saveEv@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry6statusEv@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry7commentEv@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry8containsERK7QStringS4_@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry8rawValueERK7QStringS4_S4_@Base 5.0.3
- _ZNK3Dtk4Core13DDesktopEntry9allGroupsEb@Base 5.0.3
- _ZNK3Dtk4Core13DTrashManager12trashIsEmptyEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup10childGroupERK7QString@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup11childGroupsEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup11parentGroupEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup12childOptionsEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup3keyEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup4nameEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup6optionERK7QString@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup7optionsEv@Base 5.0.3
- _ZNK3Dtk4Core14DSettingsGroup8isHiddenEv@Base 5.0.3
- _ZNK3Dtk4Core15ConsoleAppender6formatEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption11parentGroupEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption12defaultValueEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption3keyEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption4dataERK7QString@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption4nameEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption5valueEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption8canResetEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption8isHiddenEv@Base 5.0.3
- _ZNK3Dtk4Core15DSettingsOption8viewTypeEv@Base 5.0.3
- _ZNK3Dtk4Core15QSettingBackend10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core15QSettingBackend4keysEv@Base 5.0.3
- _ZNK3Dtk4Core15QSettingBackend9getOptionERK7QString@Base 5.0.3
- _ZNK3Dtk4Core16AbstractAppender12detailsLevelEv@Base 5.0.3
- _ZNK3Dtk4Core16DBaseFileWatcher10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core16DBaseFileWatcher7fileUrlEv@Base 5.0.3
- _ZNK3Dtk4Core16DSettingsBackend10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core16GSettingsBackend10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core16GSettingsBackend4keysEv@Base 5.0.3
- _ZNK3Dtk4Core16GSettingsBackend9getOptionERK7QString@Base 5.0.3
- _ZNK3Dtk4Core17CuteMessageLogger5writeEPKcz@Base 5.0.3
- _ZNK3Dtk4Core17CuteMessageLogger5writeERK7QString@Base 5.0.3
- _ZNK3Dtk4Core17CuteMessageLogger5writeEv@Base 5.0.3
- _ZNK3Dtk4Core18DDiskSizeFormatter15unitConvertRateEi@Base 5.0.3
- _ZNK3Dtk4Core18DDiskSizeFormatter7unitMaxEv@Base 5.0.3
- _ZNK3Dtk4Core18DDiskSizeFormatter7unitMinEv@Base 5.0.3
- _ZNK3Dtk4Core18DDiskSizeFormatter7unitStrEi@Base 5.0.3
- _ZNK3Dtk4Core18DFileSystemWatcher10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core18DFileSystemWatcher11directoriesEv@Base 5.0.3
- _ZNK3Dtk4Core18DFileSystemWatcher5filesEv@Base 5.0.3
- _ZNK3Dtk4Core18DTimeUnitFormatter15unitConvertRateEi@Base 5.0.3
- _ZNK3Dtk4Core18DTimeUnitFormatter7unitMaxEv@Base 5.0.3
- _ZNK3Dtk4Core18DTimeUnitFormatter7unitMinEv@Base 5.0.3
- _ZNK3Dtk4Core18DTimeUnitFormatter7unitStrEi@Base 5.0.3
- _ZNK3Dtk4Core19DFileWatcherManager10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core19RollingFileAppender11datePatternEv@Base 5.0.3
- _ZNK3Dtk4Core19RollingFileAppender13logFilesLimitEv@Base 5.0.3
- _ZNK3Dtk4Core19RollingFileAppender17datePatternStringEv@Base 5.0.3
- _ZNK3Dtk4Core20DDesktopEntryPrivate10isWritableEv@Base 5.0.3
- _ZNK3Dtk4Core20DDesktopEntryPrivate10sectionPosERK7QString@Base 5.0.3
- _ZNK3Dtk4Core20DDesktopEntryPrivate4keysERK7QString@Base 5.0.3
- _ZNK3Dtk4Core20DDesktopEntryPrivate5writeER9QIODevice@Base 5.0.3
- _ZNK3Dtk4Core20DDesktopEntryPrivate8containsERK7QStringS4_@Base 5.0.3
- _ZNK3Dtk4Core20DDesktopEntryPrivate9setStatusERKNS0_13DDesktopEntry6StatusE@Base 5.0.3
- _ZNK3Dtk4Core22AbstractStringAppender15formattedStringERK9QDateTimeNS0_6Logger8LogLevelEPKciS8_RK7QStringSB_@Base 5.0.3
- _ZNK3Dtk4Core22AbstractStringAppender6formatEv@Base 5.0.3
- _ZNK3Dtk4Core22DAbstractUnitFormatter12unitValueMaxEi@Base 5.0.3
- _ZNK3Dtk4Core22DAbstractUnitFormatter12unitValueMinEi@Base 5.0.3
- _ZNK3Dtk4Core22DAbstractUnitFormatter16formatAsUnitListEdi@Base 5.0.3
- _ZNK3Dtk4Core22DAbstractUnitFormatter6formatEdi@Base 5.0.3
- _ZNK3Dtk4Core22DAbstractUnitFormatter8formatAsEdii@Base 5.0.3
- _ZNK3Dtk4Core5DUtil18DExportedInterface10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core5DUtil18DExportedInterface6invokeERK7QStringS5_@Base 5.0.3
- _ZNK3Dtk4Core5DUtil31DExportedInterfaceDBusInterface10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core6Logger15defaultCategoryEv@Base 5.0.3
- _ZNK3Dtk4Core9DSettings10metaObjectEv@Base 5.0.3
- _ZNK3Dtk4Core9DSettings4keysEv@Base 5.0.3
- _ZNK3Dtk4Core9DSettings4metaEv@Base 5.0.3
- _ZNK3Dtk4Core9DSettings5groupERK7QString@Base 5.0.3
- _ZNK3Dtk4Core9DSettings5valueERK7QString@Base 5.0.3
- _ZNK3Dtk4Core9DSettings6groupsEv@Base 5.0.3
- _ZNK3Dtk4Core9DSettings6optionERK7QString@Base 5.0.3
- _ZNK3Dtk4Core9DSettings7optionsEv@Base 5.0.3
- _ZNK3Dtk4Core9DSettings9getOptionERK7QString@Base 5.0.3
- _ZNK3Dtk4Core9DSettings9groupKeysEv@Base 5.0.3
- _ZNK4QMapI7QString8QPointerIN3Dtk4Core15DSettingsOptionEEE6valuesEv@Base 5.0.3
- _ZNK4QMapI7QStringN3Dtk4Core20DDesktopEntrySectionEE4keysEv@Base 5.0.3
- _ZNK4QMapIi7QStringE6valuesERKi@Base 5.0.3
- _ZNK5QHashI5QCharS0_E8findNodeERKS0_Pj@Base 5.0.3
- _ZNK5QHashI7QString5QPairISt8functionIF8QVariantS0_EES0_EE4keysEv@Base 5.0.3
- _ZNK5QHashI7QString5QPairISt8functionIF8QVariantS0_EES0_EE8findNodeERKS0_Pj@Base 5.0.3
- _ZNK5QHashI7QString5QPairISt8functionIF8QVariantS0_EES0_EE8findNodeERKS0_j@Base 5.0.3
- _ZNK5QHashI7QStringiE8findNodeERKS0_Pj@Base 5.0.3
- _ZNK5QHashI7QStringiE8findNodeERKS0_j@Base 5.0.3
- _ZNK5QHashIPN3Dtk4Core16AbstractAppenderE15QHashDummyValueE8findNodeERKS3_Pj@Base 5.0.3
- _ZNK5QHashIi15QHashDummyValueE8findNodeERKiPj@Base 5.0.3
- _ZNK5QHashIi7QStringE6valuesERKi@Base 5.0.3
- _ZNK5QHashIi7QStringE8findNodeERKiPj@Base 5.0.3
- _ZNK5QHashIj7QStringE8findNodeERKjPj@Base 5.0.3
- _ZNK5QListIPN3Dtk4Core16AbstractAppenderEE5toSetEv@Base 5.0.3
- _ZNK8QMapDataI7QString8QPointerIN3Dtk4Core14DSettingsGroupEEE8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataI7QString8QPointerIN3Dtk4Core15DSettingsOptionEEE8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataI7QString8QVariantE8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataI7QStringN3Dtk4Core20DDesktopEntrySectionEE8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataI7QStringPN3Dtk4Core12DFileWatcherEE8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataI7QStringPN3Dtk4Core16AbstractAppenderEE8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataI7QStringS0_E8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataI7QStringiE8findNodeERKS0_@Base 5.0.3
- _ZNK8QMapDataIPKvPyE8findNodeERKS1_@Base 5.0.3
- _ZNK8QMapDataIPKvyE8findNodeERKS1_@Base 5.0.3
- _ZNK8QMapNodeI7QString5QPairIS0_yEE4copyEP8QMapDataIS0_S2_E@Base 5.0.3
- _ZNK8QMapNodeI7QString8QPointerIN3Dtk4Core14DSettingsGroupEEE4copyEP8QMapDataIS0_S5_E@Base 5.0.3
- _ZNK8QMapNodeI7QString8QPointerIN3Dtk4Core15DSettingsOptionEEE4copyEP8QMapDataIS0_S5_E@Base 5.0.3
- _ZNK8QMapNodeI7QString8QVariantE4copyEP8QMapDataIS0_S1_E@Base 5.0.3
- _ZNK8QMapNodeI7QStringN3Dtk4Core20DDesktopEntrySectionEE4copyEP8QMapDataIS0_S3_E@Base 5.0.3
- _ZNK8QMapNodeI7QStringPN3Dtk4Core12DFileWatcherEE4copyEP8QMapDataIS0_S4_E@Base 5.0.3
- _ZNK8QMapNodeI7QStringPN3Dtk4Core16AbstractAppenderEE4copyEP8QMapDataIS0_S4_E@Base 5.0.3
- _ZNK8QMapNodeI7QStringS0_E4copyEP8QMapDataIS0_S0_E@Base 5.0.3
- _ZNK8QMapNodeI7QStringbE4copyEP8QMapDataIS0_bE@Base 5.0.3
- _ZNK8QMapNodeI7QStringiE4copyEP8QMapDataIS0_iE@Base 5.0.3
- _ZNK8QMapNodeI9QDateTime7QStringE4copyEP8QMapDataIS0_S1_E@Base 5.0.3
- _ZNK8QMapNodeIPKvPyE4copyEP8QMapDataIS1_S2_E@Base 5.0.3
- _ZNK8QMapNodeIPKvyE4copyEP8QMapDataIS1_yE@Base 5.0.3
- _ZNK8QMapNodeIPPyS0_E4copyEP8QMapDataIS1_S0_E@Base 5.0.3
- _ZNK8QMapNodeIi7QStringE4copyEP8QMapDataIiS0_E@Base 5.0.3
- _ZNKSt5ctypeIcE8do_widenEc@Base 5.0.3
- _ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE10_M_releaseEv@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EED0Ev@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EED1Ev@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EED2Ev@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EE10_M_destroyEv@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EE14_M_get_deleterERKSt9type_info@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EED0Ev@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EED1Ev@Base 5.0.3
- _ZNSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EED2Ev@Base 5.0.3
- _ZNSt8functionIF8QVariant7QStringEEC1ERKS3_@Base 5.0.3
- _ZNSt8functionIF8QVariant7QStringEEC2ERKS3_@Base 5.0.3
- _ZSt9__find_ifIPK7QStringN9__gnu_cxx5__ops16_Iter_equals_valIS1_EEET_S7_S7_T0_St26random_access_iterator_tag@Base 5.0.3
- _ZTI12QDBusContext@Base 5.0.3
- _ZTIN3Dtk4Core12DFileWatcherE@Base 5.0.3
- _ZTIN3Dtk4Core12FileAppenderE@Base 5.0.3
- _ZTIN3Dtk4Core13DTrashManagerE@Base 5.0.3
- _ZTIN3Dtk4Core14DObjectPrivateE@Base 5.0.3
- _ZTIN3Dtk4Core14DSettingsGroupE@Base 5.0.3
- _ZTIN3Dtk4Core14DTrashManager_E@Base 5.0.3
- _ZTIN3Dtk4Core15ConsoleAppenderE@Base 5.0.3
- _ZTIN3Dtk4Core15DSettingsOptionE@Base 5.0.3
- _ZTIN3Dtk4Core15QSettingBackendE@Base 5.0.3
- _ZTIN3Dtk4Core16AbstractAppenderE@Base 5.0.3
- _ZTIN3Dtk4Core16DBaseFileWatcherE@Base 5.0.3
- _ZTIN3Dtk4Core16DSettingsBackendE@Base 5.0.3
- _ZTIN3Dtk4Core16GSettingsBackendE@Base 5.0.3
- _ZTIN3Dtk4Core18DDiskSizeFormatterE@Base 5.0.3
- _ZTIN3Dtk4Core18DFileSystemWatcherE@Base 5.0.3
- _ZTIN3Dtk4Core18DTimeUnitFormatterE@Base 5.0.3
- _ZTIN3Dtk4Core19DFileWatcherManagerE@Base 5.0.3
- _ZTIN3Dtk4Core19DFileWatcherPrivateE@Base 5.0.3
- _ZTIN3Dtk4Core19RollingFileAppenderE@Base 5.0.3
- _ZTIN3Dtk4Core20DTrashManagerPrivateE@Base 5.0.3
- _ZTIN3Dtk4Core22AbstractStringAppenderE@Base 5.0.3
- _ZTIN3Dtk4Core22DAbstractUnitFormatterE@Base 5.0.3
- _ZTIN3Dtk4Core23DBaseFileWatcherPrivateE@Base 5.0.3
- _ZTIN3Dtk4Core25DFileSystemWatcherPrivateE@Base 5.0.3
- _ZTIN3Dtk4Core26DFileWatcherManagerPrivateE@Base 5.0.3
- _ZTIN3Dtk4Core5DUtil18DExportedInterfaceE@Base 5.0.3
- _ZTIN3Dtk4Core5DUtil25DExportedInterfacePrivateE@Base 5.0.3
- _ZTIN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceE@Base 5.0.3
- _ZTIN3Dtk4Core7DObjectE@Base 5.0.3
- _ZTIN3Dtk4Core9DSettingsE@Base 5.0.3
- _ZTIN3Dtk4Core9LogDeviceE@Base 5.0.3
- _ZTISt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTISt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTISt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTS12QDBusContext@Base 5.0.3
- _ZTSN3Dtk4Core12DFileWatcherE@Base 5.0.3
- _ZTSN3Dtk4Core12FileAppenderE@Base 5.0.3
- _ZTSN3Dtk4Core13DTrashManagerE@Base 5.0.3
- _ZTSN3Dtk4Core14DObjectPrivateE@Base 5.0.3
- _ZTSN3Dtk4Core14DSettingsGroupE@Base 5.0.3
- _ZTSN3Dtk4Core14DTrashManager_E@Base 5.0.3
- _ZTSN3Dtk4Core15ConsoleAppenderE@Base 5.0.3
- _ZTSN3Dtk4Core15DSettingsOptionE@Base 5.0.3
- _ZTSN3Dtk4Core15QSettingBackendE@Base 5.0.3
- _ZTSN3Dtk4Core16AbstractAppenderE@Base 5.0.3
- _ZTSN3Dtk4Core16DBaseFileWatcherE@Base 5.0.3
- _ZTSN3Dtk4Core16DSettingsBackendE@Base 5.0.3
- _ZTSN3Dtk4Core16GSettingsBackendE@Base 5.0.3
- _ZTSN3Dtk4Core18DDiskSizeFormatterE@Base 5.0.3
- _ZTSN3Dtk4Core18DFileSystemWatcherE@Base 5.0.3
- _ZTSN3Dtk4Core18DTimeUnitFormatterE@Base 5.0.3
- _ZTSN3Dtk4Core19DFileWatcherManagerE@Base 5.0.3
- _ZTSN3Dtk4Core19DFileWatcherPrivateE@Base 5.0.3
- _ZTSN3Dtk4Core19RollingFileAppenderE@Base 5.0.3
- _ZTSN3Dtk4Core20DTrashManagerPrivateE@Base 5.0.3
- _ZTSN3Dtk4Core22AbstractStringAppenderE@Base 5.0.3
- _ZTSN3Dtk4Core22DAbstractUnitFormatterE@Base 5.0.3
- _ZTSN3Dtk4Core23DBaseFileWatcherPrivateE@Base 5.0.3
- _ZTSN3Dtk4Core25DFileSystemWatcherPrivateE@Base 5.0.3
- _ZTSN3Dtk4Core26DFileWatcherManagerPrivateE@Base 5.0.3
- _ZTSN3Dtk4Core5DUtil18DExportedInterfaceE@Base 5.0.3
- _ZTSN3Dtk4Core5DUtil25DExportedInterfacePrivateE@Base 5.0.3
- _ZTSN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceE@Base 5.0.3
- _ZTSN3Dtk4Core7DObjectE@Base 5.0.3
- _ZTSN3Dtk4Core9DSettingsE@Base 5.0.3
- _ZTSN3Dtk4Core9LogDeviceE@Base 5.0.3
- _ZTSSt11_Mutex_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTSSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTSSt19_Sp_make_shared_tag@Base 5.0.3
- _ZTSSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTSSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTVN3Dtk4Core12DFileWatcherE@Base 5.0.3
- _ZTVN3Dtk4Core12FileAppenderE@Base 5.0.3
- _ZTVN3Dtk4Core13DTrashManagerE@Base 5.0.3
- _ZTVN3Dtk4Core14DObjectPrivateE@Base 5.0.3
- _ZTVN3Dtk4Core14DSettingsGroupE@Base 5.0.3
- _ZTVN3Dtk4Core14DTrashManager_E@Base 5.0.3
- _ZTVN3Dtk4Core15ConsoleAppenderE@Base 5.0.3
- _ZTVN3Dtk4Core15DSettingsOptionE@Base 5.0.3
- _ZTVN3Dtk4Core15QSettingBackendE@Base 5.0.3
- _ZTVN3Dtk4Core16AbstractAppenderE@Base 5.0.3
- _ZTVN3Dtk4Core16DBaseFileWatcherE@Base 5.0.3
- _ZTVN3Dtk4Core16DSettingsBackendE@Base 5.0.3
- _ZTVN3Dtk4Core16GSettingsBackendE@Base 5.0.3
- _ZTVN3Dtk4Core18DDiskSizeFormatterE@Base 5.0.3
- _ZTVN3Dtk4Core18DFileSystemWatcherE@Base 5.0.3
- _ZTVN3Dtk4Core18DTimeUnitFormatterE@Base 5.0.3
- _ZTVN3Dtk4Core19DFileWatcherManagerE@Base 5.0.3
- _ZTVN3Dtk4Core19DFileWatcherPrivateE@Base 5.0.3
- _ZTVN3Dtk4Core19RollingFileAppenderE@Base 5.0.3
- _ZTVN3Dtk4Core20DTrashManagerPrivateE@Base 5.0.3
- _ZTVN3Dtk4Core22AbstractStringAppenderE@Base 5.0.3
- _ZTVN3Dtk4Core22DAbstractUnitFormatterE@Base 5.0.3
- _ZTVN3Dtk4Core23DBaseFileWatcherPrivateE@Base 5.0.3
- _ZTVN3Dtk4Core25DFileSystemWatcherPrivateE@Base 5.0.3
- _ZTVN3Dtk4Core26DFileWatcherManagerPrivateE@Base 5.0.3
- _ZTVN3Dtk4Core5DUtil18DExportedInterfaceE@Base 5.0.3
- _ZTVN3Dtk4Core5DUtil25DExportedInterfacePrivateE@Base 5.0.3
- _ZTVN3Dtk4Core5DUtil31DExportedInterfaceDBusInterfaceE@Base 5.0.3
- _ZTVN3Dtk4Core7DObjectE@Base 5.0.3
- _ZTVN3Dtk4Core9DSettingsE@Base 5.0.3
- _ZTVN3Dtk4Core9LogDeviceE@Base 5.0.3
- _ZTVSt23_Sp_counted_ptr_inplaceI9DDBusDataSaIS0_ELN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZTVSt23_Sp_counted_ptr_inplaceIN3Dtk4Core5DUtil11DNotifyDataESaIS3_ELN9__gnu_cxx12_Lock_policyE2EE@Base 5.0.3
- _ZThn16_N3Dtk4Core12DFileWatcherD0Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core12DFileWatcherD1Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core13DTrashManagerD0Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core13DTrashManagerD1Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core14DTrashManager_D0Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core14DTrashManager_D1Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core16DBaseFileWatcherD0Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core16DBaseFileWatcherD1Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core18DFileSystemWatcherD0Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core18DFileSystemWatcherD1Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core19DFileWatcherManagerD0Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core19DFileWatcherManagerD1Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core5DUtil18DExportedInterfaceD0Ev@Base 5.0.3
- _ZThn16_N3Dtk4Core5DUtil18DExportedInterfaceD1Ev@Base 5.0.3
- _ZZN3Dtk4Core11DLogManager8instanceEvE8instance@Base 5.0.3
- _ZZN9QtPrivate15ConnectionTypesINS_4ListIJRK7QStringRK8QVariantEEELb1EE5typesEvE1t@Base 5.0.3
- _ZZNSt19_Sp_make_shared_tag5_S_tiEvE5__tag@Base 5.0.3
cmake_minimum_required (VERSION 3.10)
find_package (Doxygen REQUIRED)
-
-set (QCH_INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/qt5/doc CACHE STRING "QCH install location")
+set (QCH_INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/qt${QT_VERSION_MAJOR}/doc CACHE STRING "QCH install location")
set (DOXYGEN_GENERATE_HTML YES CACHE STRING "Doxygen HTML output")
set (DOXYGEN_GENERATE_XML YES CACHE STRING "Doxygen XML output")
set (DOXYGEN_PROJECT_NUMBER ${CMAKE_PROJECT_VERSION} CACHE STRING "") # Should be the same as this project is using.
set (DOXYGEN_EXTRACT_STATIC YES)
set (DOXYGEN_OUTPUT_LANGUAGE "Chinese")
-set (DOXYGEN_QHG_LOCATION "qhelpgenerator")
+
+if("${QT_VERSION_MAJOR}" STREQUAL "5")
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Help)
+else()
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS ToolsTools)
+endif()
+get_target_property(_qhelpgenerator_location Qt${QT_VERSION_MAJOR}::qhelpgenerator IMPORTED_LOCATION)
+
+if("${_qhelpgenerator_location}" STREQUAL "")
+ set(_qhelpgenerator_location "qhelpgenerator")
+endif()
+set (DOXYGEN_QHG_LOCATION ${_qhelpgenerator_location} CACHE STRING "Doxygen QHG path")
+
set (DOXYGEN_QHP_NAMESPACE "org.deepin.dtk.core")
set (DOXYGEN_QCH_FILE "dtkcore.qch")
set (DOXYGEN_QHP_VIRTUAL_FOLDER "dtkcore")
+set (DOXYGEN_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/docs/)
+
set (DOXYGEN_HTML_EXTRA_STYLESHEET "" CACHE STRING "Doxygen custom stylesheet for HTML output")
set (DOXYGEN_TAGFILES "qtcore.tags=qthelp://org.qt-project.qtcore/qtcore/" CACHE STRING "Doxygen tag files")
+set (DOXYGEN_IMAGE_PATH ${PROJECT_SOURCE_DIR}/docs/src)
+set (DOXYGEN_SOURCE_BROWSE "YES")
-set (DOXYGEN_MACRO_EXPANSION "YES")
-set (DOXYGEN_PREDEFINED
- "\"DCORE_BEGIN_NAMESPACE=namespace Dtk { namespace Core {\""
- "\"DCORE_END_NAMESPACE=}}\""
- "\"DCORE_USE_NAMESPACE=using namespace Dtk::Core\;\""
- "Q_OS_LINUX=1"
-)
-set (DOXYGEN_EXPAND_ONLY_PREDEF "YES")
-
+set (BUILD_THEME OFF CACHE BOOL "Build doxgen theme")
if(BUILD_THEME)
-set (DOXYGEN_HTML_EXTRA_STYLESHEET "docs/doxygentheme/doxygen-awesome.css"
- "docs/doxygentheme/doxygen-awesome-sidebar-only.css"
- "docs/doxygentheme/doxygen-awesome-sidebar-only-darkmode-toggle.css"
+if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/doxygen-theme")
+message(STATUS "doxygen-theme exists")
+else()
+execute_process(COMMAND git clone https://github.com/linuxdeepin/doxygen-theme.git --depth=1
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+ TIMEOUT 60
+ )
+execute_process(COMMAND bash themesetting.sh
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/doxygen-theme/
+)
+endif()
+set (DOXYGEN_HTML_EXTRA_STYLESHEET "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome.css"
+ "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-sidebar-only.css"
+ "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css"
)
-set (DOXYGEN_HTML_EXTRA_FILES "docs/doxygentheme/doxygen-awesome-darkmode-toggle.js"
- "docs/doxygentheme/doxygen-awesome-fragment-copy-button.js"
- "docs/doxygentheme/doxygen-awesome-paragraph-link.js"
- "docs/doxygentheme/doxygen-awesome-interactive-toc.js"
+set (DOXYGEN_HTML_EXTRA_FILES "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js"
+ "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js"
+ "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-paragraph-link.js"
+ "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-interactive-toc.js"
)
set (DOXYGEN_GENERATE_TREEVIEW "YES")
set (DOXYGEN_DISABLE_INDEX "NO")
set (DOXYGEN_FULL_SIDEBAR "NO")
-set (DOXYGEN_HTML_HEADER "docs/doxygentheme/header.html")
+set (DOXYGEN_HTML_HEADER "docs/doxygen-theme/doxygen-awesome-css/header.html")
+set (DOXYGEN_HTML_FOOTER "docs/doxygen-theme/doxygen-awesome-css/footer.html")
endif()
+set (DOXYGEN_MACRO_EXPANSION "YES")
+set (DOXYGEN_PREDEFINED
+ "DCORE_BEGIN_NAMESPACE=namespace Dtk { namespace Core {"
+ "DCORE_END_NAMESPACE=}}"
+ "DCORE_USE_NAMESPACE=using namespace Dtk::Core;"
+ "Q_OS_LINUX=1"
+)
+set (DOXYGEN_EXPAND_ONLY_PREDEF "YES")
+
doxygen_add_docs (doxygen
- ${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/docs
ALL
--- /dev/null
+\mainpage dtkcore
+@brief dtk
+
+# dtkcore
+
+## 简介
+
+dtkcore 是一个基于Qt的C++库,它提供了一些常用的工具类,以及一些基础的模块,如日志、插件、网络、线程、数据库、文件、图形、音频、视频、系统信息等
+
+## 使用
+
+现在的dtkcore>=5.6版本使用CMake来管理各个模块,所以使用dtkcore时,需要先安装CMake(CMake>=3.10),然后需要在你的CMake项目中引入dtkcore的CMake模块,如下:
+
+```cmake
+find_package(Dtk6Core REQUIRED)
+
+target_link_libraries(<target>
+ Dtk6::Core
+)
+```
+
+```qmake
+QT += dtkcore
+```
+
+```bash
+pkg-config --cflags --libs dtk6core
+
+# pkgconfig find Dtk6Core in qmake
+# CONFIG += link_pkgconfig
+# PKGCONFIG += dtk6core
+
+# pkgconfig find Dtk6Core in cmake
+# find_package(PkgConfig REQUIRED)
+# pkg_check_modules(Dtk6Core REQUIRED IMPORTED_TARGET dtk6core)
+# target_link_libraries(<target> PkgConfig::Dtk6Core )
+```
+
+以上示例仅为最小示例,并不能单独作为CMake项目使用,需要你自己添加其他的CMake模块,如Qt的CMake模块,以及你自己的CMake模块.
+@note 注意:dtkcore的QMake模块会自动引入Qt5的QMake模块,所以不需要再次引入Qt5的QMake模块,但是在使用CMake的时候必须手动引入Qtcore的CMake模块
+
+## 文档
+
+阅读文档建议从模块页面开始,模块页面提供了dtkcore的各个模块的简介,以及各个模块的使用示例。
+@subpage DLog
+
+dtkcore的文档使用doxygen管理,由deepin_doc_doc_go_sig提供维护支持, 如果你也想加入sig,请访问[deepin_doc_doc_go_sig](https://matrix.to/#/#deepin_doc_doc_go:matrix.org)
+
+## 许可
+
+dtkcore使用LGPLv3许可证,你可在此许可证下自由使用dtkcore <br>
+dtkcore的文档使用[CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/)许可证,你可在此许可证下自由使用dtkcore的文档,但是转发或者引用时必须注明出处。
--- /dev/null
+/*!
+@~chinese
+@file include/dci/ddcifile.h
+@ingroup dci
+
+@class Dtk::Core::DDciFile ddcifile.h
+@brief ddcifile.h 是关于dci文件相关操作的一个类,实现了 DCI 文件的逻辑。其只是对数据的打包
+dci文件的结构路径如下:
+
+
+@enum Dtk::Core::DDciFile::FileType
+@var Dtk::Core::DDciFile::FileType Dtk::Core::DDciFile::UnknowFile
+@brief 未知文件
+@var Dtk::Core::DDciFile::FileType Dtk::Core::DDciFile::File
+@brief 文件
+@var Dtk::Core::DDciFile::FileType Dtk::Core::DDciFile::Directory
+@brief 目录
+@var Dtk::Core::DDciFile::FileType Dtk::Core::DDciFile::Symlink
+@brief 软链接
+
+@fn bool Dtk::Core::DDciFile::isValid()
+@brief 判断读取的dci文件是否有效
+@details 当指定的dci文件未成功加载时,此函数会返回false,一般会出现在文件格式错误(不是一个dci格式的文件),或者是dci文件数据被篡改而无法识别的情况
+@note 本类中所有涉及文件操作的函数均会首先执行此方法,故如无必要,无需手动确保文件是否有效
+
+@fn QString Dtk::Core::DDciFile::lastErrorString()
+@brief 获取上一个报错信息,为人类可读字符串,可以通过此报错信息来获取错误内容,一般情况下是因为文件不存在或者文件名过长(>62个字符)导致。
+
+@fn bool Dtk::Core::DDciFile::writeToFile(const QString &fileName)
+@brief 写入文件,在做完对于dci文件的操作之后调用此接口,为保存的作用
+@param[in] fileName 文件名
+
+@fn bool Dtk::Core::DDciFile::writeToDevice(QIODevice *device)
+@brief 写入到设备,设备指的是qt中的io设备,可以在qt文档中找到相关信息
+@param[in] device IO设备
+@sa [QIODevice](https://doc.qt.io/qt-6/qiodevice.html)
+
+@fn QByteArray Dtk::Core::DDciFile::toData()
+@brief 返回dci文件的原始数据,以QByteArray形式返回
+@retval 如果返回为空字符串则说明读取失败
+@sa DDciFile::writeFile
+
+@fn static constexpr int Dtk::Core::DDciFile::metadataSizeV1()
+@brief MAGIC_SIZE + VERSION_SIZE + FILE_COUNT_SIZE: 4+1+3 = 8
+
+@fn QStringList Dtk::Core::DDciFile::list(const QString &dir, bool onlyFileName = false)
+@brief 列出文件列表
+@param[in] dir 文件夹地址
+@param[in] onlyFileName 是否只显示文件名 默认为false
+
+@fn int Dtk::Core::DDciFile::childrenCount(const QString &dir)
+@brief 子文件计数
+
+@fn bool Dtk::Core::DDciFile::exists(const QString &filePath)
+@brief 判断文件是否存在
+@param[in] filePath DCI图标结构路径
+
+@fn FileType Dtk::Core::DDciFile::type(const QString &filePath)
+@brief 判断文件类型
+@sa DDciFile::FileType
+@param[in] filePath DCI图标结构路径
+
+@fn QByteArray Dtk::Core::DDciFile::dataRef(const QString &filePath)
+@brief 获取dci内部文件的数据,以一种引用(软连接)的方式获取,不会产生数据的的复制
+@param[in] filePath DCI图标结构路径
+@retval 如果返回为空字符串,则说明此文件不存在或者无效
+
+@fn QString Dtk::Core::DDciFile::name(const QString &filePath)
+@brief 获取dci内文件的文件名
+@param[in] filePath DCI图标结构路径
+@retval 如果返回为空字符串,则说明此文件不存在或者无效
+
+@fn QString Dtk::Core::DDciFile::symlinkTarget(const QString &filePath, bool originData = false)
+@brief 获取软链目标
+@param[in] filePath DCI图标结构路径
+@param[in] originData
+@retval 如果返回为空字符串,则说明此文件不存在或者无效
+@note 链接的目标只能是“不存在的路径”、“文件”、“链接”,不可是目录
+
+@fn bool Dtk::Core::DDciFile::mkdir(const QString &filePath)
+@brief 创建目录(注意:此目录指的是在dci文件内部的目录,而不是指的是传统目录)
+@param[in] filePath DCI图标结构路径
+@return 操作是否成功
+
+@fn bool Dtk::Core::DDciFile::writeFile(const QString &filePath, const QByteArray &data, bool override = false)
+@brief 写入文件
+@param[in] filePath DCI图标结构路径
+@param[in] data 数据内容
+@param[in] override 当文件已经存在时,是否覆盖此文件,默认状态下不执行覆盖,会在lasterror中记录"The target file is existed"错误信息。
+如果传入为true,则会执行覆盖操作,** 此操作不可逆 **。
+@return 操作是否成功
+@sa QByteArray DDciFile::toData()
+
+@fn bool Dtk::Core::DDciFile::remove(const QString &filePath)
+@brief 移除文件
+@param[in] filePath DCI图标结构路径
+@return 操作是否成功
+
+@fn bool Dtk::Core::DDciFile::rename(const QString &filePath, const QString &newFilePath, bool override = false)
+@brief 重命名文件
+@param[in] filePath DCI图标结构路径
+@param[in] newFilePath 新文件的路径
+@param[in] override 当文件已经存在时,是否覆盖此文件,默认状态下不执行覆盖,会在lasterror中记录"The target file is existed"错误信息。
+如果传入为true,则会执行覆盖操作,** 此操作不可逆 **。
+@return 操作是否成功
+
+@fn bool Dtk::Core::DDciFile::link(const QString &source, const QString &to)
+@brief 链接文件
+@param[in] source 文件源
+@param[in] to 链接目标
+@return 操作是否成功
+
+*/
--- /dev/null
+@page dci dci--dci图标工具类
+# DTk dci:dci工具类
+
+关于dtkcore提供的dci工具见:[DCI](group__dci.html#files) <br>
+下面内容是关于dci文件的简介,还有一部分使用以及工具将会在以后的文档中提供
+## 关于dci图标简介
+
+
+`DCI` 图标是一种整合性图标格式,应用可以使用该图标完成多种状态的自动变化。例如, `ListView` 控件中高亮的 `Item` 图标自动反白,`Menu` 中图标跟随当前 `Item` 变化等等。
+
+`dtkcore` 中提供了一个 `DDciFile` 的类,实现 `DCI` 文件的逻辑。其只是对数据的打包,不限于图片数据,可以是任何文本和二进制数据。 `dtkcore` 中还提供了用于在文管中解析文件的文件引擎,专门用于通过 `QFile` 和 `QDir` 处理 `dci` 文件。
+
+dtkgui 中提供了一个 `DDciIcon` 类,实现了对 `DCI` 图标的逻辑。区别于 `DDciFile` ,它是 `DDciFile` 的上层封装,即使用 DDciFile 可以将文件进行打包归档的功能,封装了一种图标格式。 `DDciIcon` 中提供的接口,都是针对图标的,并无 `DDciFile` 的数据处理操作,多个 `DDciIcon` 进行数据拷贝和交换时,可以进行数据共享。 `DDciIcon` 可以通过调用 pixmap 函数返回需要显示的图片数据,也可以通过调用 paint 函数直接将内容绘制到目标内部。解析 Dci 图标的过程,这里讲解一下,详细过程可以查看代码理解:
+首先需要创建一个 DDciFile 来解析 (*.dci) 文件,无论是本地文本还是二进制数据,都可以通过 `DDciFile` 来解析内部内容。
+根据 `DDciIcon` 中规定好的路径格式,来解析出图标中拟定的各种信息,一般情况下的 `DDciIcon` 的路径格式是这样的:
+
+
+
+最上层时 `/` 作为根目录( `DCI` 文件都必须使用 `/` 作为根目录)。
+第一层子目录( 16、32、512 )作为图标的大小。一般情况下是图标在 @1(1倍缩放比) 时的大小(在目前的使用设计师使用的 dci 图标插件的)。例如上述图标,传入的大小在 0-16时选择 16,传入大小在 16-32 时选择 32,... 以此类推。
+
+第二层目录( `normal.light` )作为该层图标的状态和主题,其中状态分为 `Normal` , `Disabled` , `Hovered` 和 `Pressed` 四种,主题分为 `light` 和 `dark` 两种。四种状态和两种主题可产生 8 种组合,也就是说,每种大小的图标最多有八种不同状态和主题的子图标进行切换。需要注意的是:状态和主题存在缺省模式: `normal` 和 `light` 。如果传入的状态和主题在所属大小的子图标下未找到,则选择缺省模式的状态和主题。也就是说,当图标的 `Normal` 和 `light` 状态未找到任何图标时,该图标是无效的。一般情况下,如果图标不会在不同状态和主题下发生过大的样式修改,只修改内部颜色填充时,可以不添加特殊状态的图标,通过修改调色版解决。(后面提及)
+
+ 第三层目录(1、2)作为缩放比系数,可以存放多个缩放比系数来适配系统的缩放比。例如上述示例:缩放比系数在1和2之间时,选择 2,大于 2 时,选择 2 ,默认情况下选择 1。目前提供的图标中,为了保证尽量减少图标文件的大小,仅保存缩放比为 3 的文件。在软件层面进行缩放。
+第四层(1.png)描述图标图片文件(图层)所携带的信息。这些信息中,包含:图层优先级、外边框数值、调色板格式、颜色调整数值、图层格式。可以通过下述文件表
+```
+├── 1.7p.3.png.alpha8
+├── 2.3.webp
+└── 3.7p.3_0_0_-10_0_0_0_0.png.alpha8
+ │ │ │ │ │ │ ┕━┳━┙┕━┳━┙
+ │ │ │ │ │ │ rgba format
+ │ │ │ │ │ │
+ │ │ │ │ │ └─ lightness (亮度)
+ │ │ │ │ └─ saturation (饱和度)
+ │ │ │ └─ hue (色调)
+ │ │ └─ palette (高亮色3)
+ │ └─ padding (填充间隔)
+ └─ prior (图层)
+
+<prior>.[padding].<p_h_s_l_r_g_b_a>.<format>
+```
+下面进行一一介绍:
+
+* **图层优先级**(`prior`):优先级代表图层的绘制顺序,从 1-n 进行绘制,最底层的图层会被上层图层覆盖。
+
+* **外边框数值**(`padding`):外边框在有阴影效果的图标中充分利用。 `padding` 代表图层外围不被控件大小覆盖的区域。
+
+ 
+
+ 类似控件的布局方式,这里可以之看 `padding` 部分, `padding` 定义四周所有数据,举个例子,如果子图标的大小是 32 (第一层目录的数值),一倍缩放比下,如果该图层的 `padding` 大小时 5,那么该图层的真实图片大小是:[32 + 5 × 2, 32 + 5 × 2] = [42, 42]。但最终, `padding` 区域的大小并不计算在整个图标大小内(仅针对 QML,dtkwidget 不支持)。为了区别其他数据, `padding` 的数值后面使用 `'p'` 进行结尾。例如上述示例:`'7p'` 。
+
+* **调色板格式** :当存在调色板时,就表示该图标的颜色是通过调色板的颜色进行动态变化的,外部修改调色板颜色后,预览效果会随之发生变化。因此该图标有两种特性:1. 可以转换成 alpha8 格式; 2. 可以不需要其他状态,通过调色板变化即可。当无调色板时,该部分的数值为空。调色板格式分为5种:无效(-1)、前景色(0)、背景色(1)、高亮前景色(2)、高亮色(3)。
+
+* **颜色调整数值** :颜色调整只针对有调色板的图层(调色板格式部分数据不为空)时。一旦存在,必须要将其所有的数据写入,例如上述示例。颜色调整数值使用 '_' 进行分割。
+ 每个部分表示:hu、saturation、lightness、red、green、blue、alpha。
+
+* **图层格式** :图层格式可以使用:"png"、"jpg"、"webp"。如果图层存在调色板格式,就意味着可以优化其大小,转化为 alpha8 格式,使用".alpha8" 作为后缀,进行标识,在软件渲染时进行进行复原。
+
+`DCI` 图标的细节介绍在 应用图标,上面主要介绍 `DCI` 图标的整个结构和在 `QML` 中的使用方式。其主要是设计实现了一种特殊格式的文件(.dci),该种格式通过路径,名称和文件数据,打包到同一个文件内,使不同状态、大小、主题的多个图标图片,整合到同一个文件内,在程序内部自动匹配当前状态,选择合适的图标图片。因此,总的来说, `DCI` 图标是对多个图标图片的打包归档。
+
+本文将介绍 `DCI` 图标在 `dtkwidget` 和 `dtkdeclarative` 中的使用,对于一些 `DCI` 图标相关的高级知识(使用方无需过度关心),如 “DDciIconPalette”、“缩放比的适配”以及“图片的格式”等等。
+
+**请注意:** 当使用 `DciIcon` 时,如果您认为控件在某种状态下需要进行图标变色或更换图标而未出现时,可能是由于**设计提供的图标未指定变色所需要的调色板对象(可以理解为图标出错)** 或 **设计认为该种场景下不需要变色(即固定样式图标)**,请及时与设计沟通。
+
+### 1. 图标状态
+
+大部分控件可以分为 `Normal` 、 `Hovered` 、 `Pressed` 和 `Disabled` 四种状态。这四种状态是每种控件的基础状态。因此将使用这几种状态作为图标的状态分类。
+
+#### 答疑
+
+1. 为什么没有 `Checked` 和 `Inactive` 类似这样的状态?
+
+ `Checked` 状态属于复合状态,并不属于基础状态。 `Checked` 状态下,可以有 `Hovered` 、 `Pressed` 、 `Normal` 等等状态,相同地, `Unchecked` 状态也会存在一样的情况。因此, `Checked` 状态并不适合作为 `DCI` 图标的状态。对于需要时,可通过控件的 `checked` 状态属性,切换下不同的图标即可。
+
+ `Inactive` 状态作为窗口的状态,在 `DTK` 应用都会通过降低透明度的方式实现,而不是作为图标状态。
+
+2. 为什么需要这些状态?
+
+ 存在这些状态的原因是,为了让应用和开发者更加无感知的使用图标,而无需关心不同状态下进行图标切换的操作。方便设计师一次提供多种状态的图标到一个图标文件中,进行压缩整合。防止出现图标资源较多,占用较大系统内存,同时能够帮助设计师在控件的不同状态下,不仅仅只局限于修改图标颜色这一种功能,也可以通过不同的图标代替,更适合多样化的样式设计。
+
+3. 图标不显示可能是什么原因?
+
+ 很可能是 webp 格式的支持问题, 查看一下系统中是否安装 `qt5-image-formats-plugins` ,这个包中有对 webp 格式图片格式的支持。
+
+### 2. 图标大小和缩放比
+
+应用所关心的图标大小是否正常,是否能够适配高缩放比模式等等。 `DCI` 图标中都做到了这些,默认情况下,设计师所提供的图标大小能够满足应用开发的需求,应用只需要主动调用接口指定图标大小即可,例如 `dtkwidget`,中 `DIconButton` 可以使用 `setIconSize` 指定; `QML` 中可以指定 `DciIcon` 控件的 `sourceSize` 或者 `Button` 控件的 `icon.size` 等等。而对于高缩放比的适配, `DTK` 已经全部完成无需应用关心。
+
+
+@defgroup dci
+@brief dtkdci图标工具类, 提供对于dci文件的操作方法
+@details 详细内容可见 [DCI图标简介](md_docs_dci_index_zh_CN.html#autotoc_md0)
+++ /dev/null
-html.alternative {
- /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */
- --primary-color: #AF7FE4;
- --primary-dark-color: #9270E4;
- --primary-light-color: #7aabd6;
- --primary-lighter-color: #cae1f1;
- --primary-lightest-color: #e9f1f8;
-
- /* page base colors */
- --page-background-color: white;
- --page-foreground-color: #2c3e50;
- --page-secondary-foreground-color: #67727e;
-
-
- --border-radius-large: 22px;
- --border-radius-small: 9px;
- --border-radius-medium: 14px;
- --spacing-small: 8px;
- --spacing-medium: 14px;
- --spacing-large: 19px;
-
- --top-height: 125px;
-
- --side-nav-background: #324067;
- --side-nav-foreground: #F1FDFF;
- --header-foreground: var(--side-nav-foreground);
- --searchbar-background: var(--side-nav-foreground);
- --searchbar-border-radius: var(--border-radius-medium);
- --header-background: var(--side-nav-background);
- --header-foreground: var(--side-nav-foreground);
-
- --toc-background: rgb(243, 240, 252);
- --toc-foreground: var(--page-foreground-color);
-}
-
-html.alternative.dark-mode {
- color-scheme: dark;
-
- --primary-color: #AF7FE4;
- --primary-dark-color: #9270E4;
- --primary-light-color: #4779ac;
- --primary-lighter-color: #191e21;
- --primary-lightest-color: #191a1c;
-
- --page-background-color: #1C1D1F;
- --page-foreground-color: #d2dbde;
- --page-secondary-foreground-color: #859399;
- --separator-color: #3a3246;
- --side-nav-background: #171D32;
- --side-nav-foreground: #F1FDFF;
- --toc-background: #20142C;
- --searchbar-background: var(--page-background-color);
-
-}
\ No newline at end of file
+++ /dev/null
-.github-corner svg {
- fill: var(--primary-light-color);
- color: var(--page-background-color);
- width: 72px;
- height: 72px;
-}
-
-@media screen and (max-width: 767px) {
- .github-corner svg {
- width: 50px;
- height: 50px;
- }
- #projectnumber {
- margin-right: 22px;
- }
-}
-
-.alter-theme-button {
- display: inline-block;
- cursor: pointer;
- background: var(--primary-color);
- color: var(--page-background-color) !important;
- border-radius: var(--border-radius-medium);
- padding: var(--spacing-small) var(--spacing-medium);
- text-decoration: none;
-}
-
-.next_section_button {
- display: block;
- padding: var(--spacing-large) 0 var(--spacing-small) 0;
- color: var(--page-background-color);
- user-select: none;
-}
-
-.next_section_button::after {
- /* clearfix */
- content: "";
- clear: both;
- display: table;
-}
-
-.next_section_button a {
- overflow: hidden;
- float: right;
- border: 1px solid var(--separator-color);
- padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large);
- border-radius: var(--border-radius-medium);
- color: var(--page-secondary-foreground-color) !important;
- text-decoration: none;
- background-color: var(--page-background-color);
- transition: color .08s ease-in-out, background-color .1s ease-in-out;
-}
-
-.next_section_button a:hover {
- color: var(--page-foreground-color) !important;
- background-color: var(--odd-color);
-}
-
-.next_section_button a::after {
- content: '〉';
- color: var(--page-secondary-foreground-color) !important;
- padding-left: var(--spacing-large);
- display: inline-block;
- transition: color .08s ease-in-out, transform .09s ease-in-out;
-}
-
-.next_section_button a:hover::after {
- color: var(--page-foreground-color) !important;
- transform: translateX(3px);
-}
-
-.alter-theme-button:hover {
- background: var(--primary-dark-color);
-}
-
-html.dark-mode .darkmode_inverted_image img, /* < doxygen 1.9.3 */
-html.dark-mode .darkmode_inverted_image object[type="image/svg+xml"] /* doxygen 1.9.3 */ {
- filter: brightness(87%) hue-rotate(180deg) invert();
-}
-
-.bordered_image {
- border-radius: var(--border-radius-small);
- border: 1px solid var(--separator-color);
- display: inline-block;
- overflow: hidden;
-}
-
-html.dark-mode .bordered_image img, /* < doxygen 1.9.3 */
-html.dark-mode .bordered_image object[type="image/svg+xml"] /* doxygen 1.9.3 */ {
- border-radius: var(--border-radius-small);
-}
-
-.title_screenshot {
- filter: drop-shadow(0px 3px 10px rgba(0,0,0,0.22));
- max-width: 500px;
- margin: var(--spacing-large) 0;
-}
-
-.title_screenshot .caption {
- display: none;
-}
\ No newline at end of file
+++ /dev/null
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2021 - 2022 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-class DoxygenAwesomeDarkModeToggle extends HTMLElement {
- // SVG icons from https://fonts.google.com/icons
- // Licensed under the Apache 2.0 license:
- // https://www.apache.org/licenses/LICENSE-2.0.html
- static lightModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FCBF00"><rect fill="none" height="24" width="24"/><circle cx="12" cy="12" opacity=".3" r="3"/><path d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg>`
- static darkModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FE9700"><rect fill="none" height="24" width="24"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27 C17.45,17.19,14.93,19,12,19c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z" opacity=".3"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg>`
- static title = "Toggle Light/Dark Mode"
-
- static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode"
- static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode"
-
- static _staticConstructor = function() {
- DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference)
- // Update the color scheme when the browsers preference changes
- // without user interaction on the website.
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
- DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
- })
- // Update the color scheme when the tab is made visible again.
- // It is possible that the appearance was changed in another tab
- // while this tab was in the background.
- document.addEventListener("visibilitychange", visibilityState => {
- if (document.visibilityState === 'visible') {
- DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
- }
- });
- }()
-
- static init() {
- $(function() {
- $(document).ready(function() {
- const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle')
- toggleButton.title = DoxygenAwesomeDarkModeToggle.title
- toggleButton.updateIcon()
-
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
- toggleButton.updateIcon()
- })
- document.addEventListener("visibilitychange", visibilityState => {
- if (document.visibilityState === 'visible') {
- toggleButton.updateIcon()
- }
- });
-
- $(document).ready(function(){
- document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
- })
- $(window).resize(function(){
- document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
- })
- })
- })
- }
-
- constructor() {
- super();
- this.onclick=this.toggleDarkMode
- }
-
- /**
- * @returns `true` for dark-mode, `false` for light-mode system preference
- */
- static get systemPreference() {
- return window.matchMedia('(prefers-color-scheme: dark)').matches
- }
-
- /**
- * @returns `true` for dark-mode, `false` for light-mode user preference
- */
- static get userPreference() {
- return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) ||
- (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey))
- }
-
- static set userPreference(userPreference) {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference
- if(!userPreference) {
- if(DoxygenAwesomeDarkModeToggle.systemPreference) {
- localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true)
- } else {
- localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)
- }
- } else {
- if(!DoxygenAwesomeDarkModeToggle.systemPreference) {
- localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true)
- } else {
- localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)
- }
- }
- DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged()
- }
-
- static enableDarkMode(enable) {
- if(enable) {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = true
- document.documentElement.classList.add("dark-mode")
- document.documentElement.classList.remove("light-mode")
- } else {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = false
- document.documentElement.classList.remove("dark-mode")
- document.documentElement.classList.add("light-mode")
- }
- }
-
- static onSystemPreferenceChanged() {
- DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference
- DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
- }
-
- static onUserPreferenceChanged() {
- DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
- }
-
- toggleDarkMode() {
- DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference
- this.updateIcon()
- }
-
- updateIcon() {
- if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) {
- this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon
- } else {
- this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon
- }
- }
-}
-
-customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle);
+++ /dev/null
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2022 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-class DoxygenAwesomeFragmentCopyButton extends HTMLElement {
- constructor() {
- super();
- this.onclick=this.copyContent
- }
- static title = "Copy to clipboard"
- static copyIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>`
- static successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`
- static successDuration = 980
- static init() {
- $(function() {
- $(document).ready(function() {
- if(navigator.clipboard) {
- const fragments = document.getElementsByClassName("fragment")
- for(const fragment of fragments) {
- const fragmentWrapper = document.createElement("div")
- fragmentWrapper.className = "doxygen-awesome-fragment-wrapper"
- const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button")
- fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon
- fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title
-
- fragment.parentNode.replaceChild(fragmentWrapper, fragment)
- fragmentWrapper.appendChild(fragment)
- fragmentWrapper.appendChild(fragmentCopyButton)
-
- }
- }
- })
- })
- }
-
-
- copyContent() {
- const content = this.previousSibling.cloneNode(true)
- // filter out line number from file listings
- content.querySelectorAll(".lineno, .ttc").forEach((node) => {
- node.remove()
- })
- let textContent = content.textContent
- // remove trailing newlines that appear in file listings
- let numberOfTrailingNewlines = 0
- while(textContent.charAt(textContent.length - (numberOfTrailingNewlines + 1)) == '\n') {
- numberOfTrailingNewlines++;
- }
- textContent = textContent.substring(0, textContent.length - numberOfTrailingNewlines)
- navigator.clipboard.writeText(textContent);
- this.classList.add("success")
- this.innerHTML = DoxygenAwesomeFragmentCopyButton.successIcon
- window.setTimeout(() => {
- this.classList.remove("success")
- this.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon
- }, DoxygenAwesomeFragmentCopyButton.successDuration);
- }
-}
-
-customElements.define("doxygen-awesome-fragment-copy-button", DoxygenAwesomeFragmentCopyButton)
+++ /dev/null
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2022 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-class DoxygenAwesomeInteractiveToc {
- static topOffset = 38
- static hideMobileMenu = true
- static headers = []
-
- static init() {
- window.addEventListener("load", () => {
- let toc = document.querySelector(".contents > .toc")
- if(toc) {
- toc.classList.add("interactive")
- if(!DoxygenAwesomeInteractiveToc.hideMobileMenu) {
- toc.classList.add("open")
- }
- document.querySelector(".contents > .toc > h3")?.addEventListener("click", () => {
- if(toc.classList.contains("open")) {
- toc.classList.remove("open")
- } else {
- toc.classList.add("open")
- }
- })
-
- document.querySelectorAll(".contents > .toc > ul a").forEach((node) => {
- let id = node.getAttribute("href").substring(1)
- DoxygenAwesomeInteractiveToc.headers.push({
- node: node,
- headerNode: document.getElementById(id)
- })
-
- document.getElementById("doc-content")?.addEventListener("scroll", () => {
- DoxygenAwesomeInteractiveToc.update()
- })
- })
- DoxygenAwesomeInteractiveToc.update()
- }
- })
- }
-
- static update() {
- let active = DoxygenAwesomeInteractiveToc.headers[0]?.node
- DoxygenAwesomeInteractiveToc.headers.forEach((header) => {
- let position = header.headerNode.getBoundingClientRect().top
- header.node.classList.remove("active")
- header.node.classList.remove("aboveActive")
- if(position < DoxygenAwesomeInteractiveToc.topOffset) {
- active = header.node
- active?.classList.add("aboveActive")
- }
- })
- active?.classList.add("active")
- active?.classList.remove("aboveActive")
- }
-}
\ No newline at end of file
+++ /dev/null
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2022 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-class DoxygenAwesomeParagraphLink {
- // Icon from https://fonts.google.com/icons
- // Licensed under the Apache 2.0 license:
- // https://www.apache.org/licenses/LICENSE-2.0.html
- static icon = `<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M17 7h-4v2h4c1.65 0 3 1.35 3 3s-1.35 3-3 3h-4v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-6 8H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-2zm-3-4h8v2H8z"/></svg>`
- static title = "Permanent Link"
- static init() {
- $(function() {
- $(document).ready(function() {
- document.querySelectorAll(".contents a.anchor[id], .contents .groupheader > a[id]").forEach((node) => {
- let anchorlink = document.createElement("a")
- anchorlink.setAttribute("href", `#${node.getAttribute("id")}`)
- anchorlink.setAttribute("title", DoxygenAwesomeParagraphLink.title)
- anchorlink.classList.add("anchorlink")
- node.classList.add("anchor")
- anchorlink.innerHTML = DoxygenAwesomeParagraphLink.icon
- node.parentElement.appendChild(anchorlink)
- })
- })
- })
- }
-}
+++ /dev/null
-
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2021 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-@media screen and (min-width: 768px) {
-
- #MSearchBox {
- width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px);
- }
-
- #MSearchField {
- width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height));
- }
-}
+++ /dev/null
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2021 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
- */
-
-html {
- /* side nav width. MUST be = `TREEVIEW_WIDTH`.
- * Make sure it is wide enough to contain the page title (logo + title + version)
- */
- --side-nav-fixed-width: 335px;
- --menu-display: none;
-
- --top-height: 120px;
- --toc-sticky-top: -25px;
- --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px);
-}
-
-#projectname {
- white-space: nowrap;
-}
-
-
-@media screen and (min-width: 768px) {
- html {
- --searchbar-background: var(--page-background-color);
- }
-
- #side-nav {
- min-width: var(--side-nav-fixed-width);
- max-width: var(--side-nav-fixed-width);
- top: var(--top-height);
- overflow: visible;
- }
-
- #nav-tree, #side-nav {
- height: calc(100vh - var(--top-height)) !important;
- }
-
- #nav-tree {
- padding: 0;
- }
-
- #top {
- display: block;
- border-bottom: none;
- height: var(--top-height);
- margin-bottom: calc(0px - var(--top-height));
- max-width: var(--side-nav-fixed-width);
- overflow: hidden;
- background: var(--side-nav-background);
- }
- #main-nav {
- float: left;
- padding-right: 0;
- }
-
- .ui-resizable-handle {
- cursor: default;
- width: 1px !important;
- box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color);
- }
-
- #nav-path {
- position: fixed;
- right: 0;
- left: var(--side-nav-fixed-width);
- bottom: 0;
- width: auto;
- }
-
- #doc-content {
- height: calc(100vh - 31px) !important;
- padding-bottom: calc(3 * var(--spacing-large));
- padding-top: calc(var(--top-height) - 80px);
- box-sizing: border-box;
- margin-left: var(--side-nav-fixed-width) !important;
- }
-
- #MSearchBox {
- width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)));
- }
-
- #MSearchField {
- width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px);
- }
-
- #MSearchResultsWindow {
- left: var(--spacing-medium) !important;
- right: auto;
- }
-}
+++ /dev/null
-/**
-
-Doxygen Awesome
-https://github.com/jothepro/doxygen-awesome-css
-
-MIT License
-
-Copyright (c) 2021 - 2022 jothepro
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-*/
-
-html {
- /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */
- --primary-color: #1779c4;
- --primary-dark-color: #335c80;
- --primary-light-color: #70b1e9;
-
- /* page base colors */
- --page-background-color: #ffffff;
- --page-foreground-color: #2f4153;
- --page-secondary-foreground-color: #6f7e8e;
-
- /* color for all separators on the website: hr, borders, ... */
- --separator-color: #dedede;
-
- /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */
- --border-radius-large: 8px;
- --border-radius-small: 4px;
- --border-radius-medium: 6px;
-
- /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */
- --spacing-small: 5px;
- --spacing-medium: 10px;
- --spacing-large: 16px;
-
- /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */
- --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075);
-
- --odd-color: rgba(0,0,0,.028);
-
- /* font-families. will affect all text on the website
- * font-family: the normal font for text, headlines, menus
- * font-family-monospace: used for preformatted text in memtitle, code, fragments
- */
- --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;
- --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
-
- /* font sizes */
- --page-font-size: 15.6px;
- --navigation-font-size: 14.4px;
- --toc-font-size: 13.4px;
- --code-font-size: 14px; /* affects code, fragment */
- --title-font-size: 22px;
-
- /* content text properties. These only affect the page content, not the navigation or any other ui elements */
- --content-line-height: 27px;
- /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/
- --content-maxwidth: 1050px;
- --table-line-height: 24px;
- --toc-sticky-top: var(--spacing-medium);
- --toc-width: 200px;
- --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px);
-
- /* colors for various content boxes: @warning, @note, @deprecated @bug */
- --warning-color: #f8d1cc;
- --warning-color-dark: #b61825;
- --warning-color-darker: #75070f;
- --note-color: #faf3d8;
- --note-color-dark: #f3a600;
- --note-color-darker: #5f4204;
- --todo-color: #e4f3ff;
- --todo-color-dark: #1879C4;
- --todo-color-darker: #274a5c;
- --deprecated-color: #ecf0f3;
- --deprecated-color-dark: #5b6269;
- --deprecated-color-darker: #43454a;
- --bug-color: #e4dafd;
- --bug-color-dark: #5b2bdd;
- --bug-color-darker: #2a0d72;
- --invariant-color: #d8f1e3;
- --invariant-color-dark: #44b86f;
- --invariant-color-darker: #265532;
-
- /* blockquote colors */
- --blockquote-background: #f8f9fa;
- --blockquote-foreground: #636568;
-
- /* table colors */
- --tablehead-background: #f1f1f1;
- --tablehead-foreground: var(--page-foreground-color);
-
- /* menu-display: block | none
- * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible.
- * `GENERATE_TREEVIEW` MUST be enabled!
- */
- --menu-display: block;
-
- --menu-focus-foreground: var(--page-background-color);
- --menu-focus-background: var(--primary-color);
- --menu-selected-background: rgba(0,0,0,.05);
-
-
- --header-background: var(--page-background-color);
- --header-foreground: var(--page-foreground-color);
-
- /* searchbar colors */
- --searchbar-background: var(--side-nav-background);
- --searchbar-foreground: var(--page-foreground-color);
-
- /* searchbar size
- * (`searchbar-width` is only applied on screens >= 768px.
- * on smaller screens the searchbar will always fill the entire screen width) */
- --searchbar-height: 33px;
- --searchbar-width: 210px;
- --searchbar-border-radius: var(--searchbar-height);
-
- /* code block colors */
- --code-background: #f5f5f5;
- --code-foreground: var(--page-foreground-color);
-
- /* fragment colors */
- --fragment-background: #F8F9FA;
- --fragment-foreground: #37474F;
- --fragment-keyword: #bb6bb2;
- --fragment-keywordtype: #8258b3;
- --fragment-keywordflow: #d67c3b;
- --fragment-token: #438a59;
- --fragment-comment: #969696;
- --fragment-link: #5383d6;
- --fragment-preprocessor: #46aaa5;
- --fragment-linenumber-color: #797979;
- --fragment-linenumber-background: #f4f4f5;
- --fragment-linenumber-border: #e3e5e7;
- --fragment-lineheight: 20px;
-
- /* sidebar navigation (treeview) colors */
- --side-nav-background: #fbfbfb;
- --side-nav-foreground: var(--page-foreground-color);
- --side-nav-arrow-opacity: 0;
- --side-nav-arrow-hover-opacity: 0.9;
-
- --toc-background: var(--side-nav-background);
- --toc-foreground: var(--side-nav-foreground);
-
- /* height of an item in any tree / collapsable table */
- --tree-item-height: 30px;
-
- --memname-font-size: var(--code-font-size);
- --memtitle-font-size: 18px;
-
- --webkit-scrollbar-size: 7px;
- --webkit-scrollbar-padding: 4px;
- --webkit-scrollbar-color: var(--separator-color);
-}
-
-@media screen and (max-width: 767px) {
- html {
- --page-font-size: 16px;
- --navigation-font-size: 16px;
- --toc-font-size: 15px;
- --code-font-size: 15px; /* affects code, fragment */
- --title-font-size: 22px;
- }
-}
-
-@media (prefers-color-scheme: dark) {
- html:not(.light-mode) {
- color-scheme: dark;
-
- --primary-color: #1982d2;
- --primary-dark-color: #86a9c4;
- --primary-light-color: #4779ac;
-
- --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35);
-
- --odd-color: rgba(100,100,100,.06);
-
- --menu-selected-background: rgba(0,0,0,.4);
-
- --page-background-color: #1C1D1F;
- --page-foreground-color: #d2dbde;
- --page-secondary-foreground-color: #859399;
- --separator-color: #38393b;
- --side-nav-background: #252628;
-
- --code-background: #2a2c2f;
-
- --tablehead-background: #2a2c2f;
-
- --blockquote-background: #222325;
- --blockquote-foreground: #7e8c92;
-
- --warning-color: #2e1917;
- --warning-color-dark: #ad2617;
- --warning-color-darker: #f5b1aa;
- --note-color: #3b2e04;
- --note-color-dark: #f1b602;
- --note-color-darker: #ceb670;
- --todo-color: #163750;
- --todo-color-dark: #1982D2;
- --todo-color-darker: #dcf0fa;
- --deprecated-color: #2e323b;
- --deprecated-color-dark: #738396;
- --deprecated-color-darker: #abb0bd;
- --bug-color: #2a2536;
- --bug-color-dark: #7661b3;
- --bug-color-darker: #ae9ed6;
- --invariant-color: #303a35;
- --invariant-color-dark: #76ce96;
- --invariant-color-darker: #cceed5;
-
- --fragment-background: #282c34;
- --fragment-foreground: #dbe4eb;
- --fragment-keyword: #cc99cd;
- --fragment-keywordtype: #ab99cd;
- --fragment-keywordflow: #e08000;
- --fragment-token: #7ec699;
- --fragment-comment: #999999;
- --fragment-link: #98c0e3;
- --fragment-preprocessor: #65cabe;
- --fragment-linenumber-color: #cccccc;
- --fragment-linenumber-background: #35393c;
- --fragment-linenumber-border: #1f1f1f;
- }
-}
-
-/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */
-html.dark-mode {
- color-scheme: dark;
-
- --primary-color: #1982d2;
- --primary-dark-color: #86a9c4;
- --primary-light-color: #4779ac;
-
- --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30);
-
- --odd-color: rgba(100,100,100,.06);
-
- --menu-selected-background: rgba(0,0,0,.4);
-
- --page-background-color: #1C1D1F;
- --page-foreground-color: #d2dbde;
- --page-secondary-foreground-color: #859399;
- --separator-color: #38393b;
- --side-nav-background: #252628;
-
- --code-background: #2a2c2f;
-
- --tablehead-background: #2a2c2f;
-
- --blockquote-background: #222325;
- --blockquote-foreground: #7e8c92;
-
- --warning-color: #2e1917;
- --warning-color-dark: #ad2617;
- --warning-color-darker: #f5b1aa;
- --note-color: #3b2e04;
- --note-color-dark: #f1b602;
- --note-color-darker: #ceb670;
- --todo-color: #163750;
- --todo-color-dark: #1982D2;
- --todo-color-darker: #dcf0fa;
- --deprecated-color: #2e323b;
- --deprecated-color-dark: #738396;
- --deprecated-color-darker: #abb0bd;
- --bug-color: #2a2536;
- --bug-color-dark: #7661b3;
- --bug-color-darker: #ae9ed6;
- --invariant-color: #303a35;
- --invariant-color-dark: #76ce96;
- --invariant-color-darker: #cceed5;
-
- --fragment-background: #282c34;
- --fragment-foreground: #dbe4eb;
- --fragment-keyword: #cc99cd;
- --fragment-keywordtype: #ab99cd;
- --fragment-keywordflow: #e08000;
- --fragment-token: #7ec699;
- --fragment-comment: #999999;
- --fragment-link: #98c0e3;
- --fragment-preprocessor: #65cabe;
- --fragment-linenumber-color: #cccccc;
- --fragment-linenumber-background: #35393c;
- --fragment-linenumber-border: #1f1f1f;
-}
-
-body {
- color: var(--page-foreground-color);
- background-color: var(--page-background-color);
- font-size: var(--page-font-size);
-}
-
-body, table, div, p, dl, #nav-tree .label, .title,
-.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname,
-.SelectItem, #MSearchField, .navpath li.navelem a,
-.navpath li.navelem a:hover, p.reference, p.definition {
- font-family: var(--font-family);
-}
-
-h1, h2, h3, h4, h5 {
- margin-top: .9em;
- font-weight: 600;
- line-height: initial;
-}
-
-p, div, table, dl, p.reference, p.definition {
- font-size: var(--page-font-size);
-}
-
-p.reference, p.definition {
- color: var(--page-secondary-foreground-color);
-}
-
-a:link, a:visited, a:hover, a:focus, a:active {
- color: var(--primary-color) !important;
- font-weight: 500;
-}
-
-a.anchor {
- scroll-margin-top: var(--spacing-large);
- display: block;
-}
-
-/*
- Title and top navigation
- */
-
-#top {
- background: var(--header-background);
- border-bottom: 1px solid var(--separator-color);
-}
-
-@media screen and (min-width: 768px) {
- #top {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- align-items: center;
- }
-}
-
-#main-nav {
- flex-grow: 5;
- padding: var(--spacing-small) var(--spacing-medium);
-}
-
-#titlearea {
- width: auto;
- padding: var(--spacing-medium) var(--spacing-large);
- background: none;
- color: var(--header-foreground);
- border-bottom: none;
-}
-
-@media screen and (max-width: 767px) {
- #titlearea {
- padding-bottom: var(--spacing-small);
- }
-}
-
-#titlearea table tbody tr {
- height: auto !important;
-}
-
-#projectname {
- font-size: var(--title-font-size);
- font-weight: 600;
-}
-
-#projectnumber {
- font-family: inherit;
- font-size: 60%;
-}
-
-#projectbrief {
- font-family: inherit;
- font-size: 80%;
-}
-
-#projectlogo {
- vertical-align: middle;
-}
-
-#projectlogo img {
- max-height: calc(var(--title-font-size) * 2);
- margin-right: var(--spacing-small);
-}
-
-.sm-dox, .tabs, .tabs2, .tabs3 {
- background: none;
- padding: 0;
-}
-
-.tabs, .tabs2, .tabs3 {
- border-bottom: 1px solid var(--separator-color);
- margin-bottom: -1px;
-}
-
-.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after {
- background: var(--page-secondary-foreground-color);
-}
-
-@media screen and (max-width: 767px) {
- .sm-dox a span.sub-arrow {
- background: var(--code-background);
- }
-
- #main-menu a.has-submenu span.sub-arrow {
- color: var(--page-secondary-foreground-color);
- border-radius: var(--border-radius-medium);
- }
-
- #main-menu a.has-submenu:hover span.sub-arrow {
- color: var(--page-foreground-color);
- }
-}
-
-@media screen and (min-width: 768px) {
- .sm-dox li, .tablist li {
- display: var(--menu-display);
- }
-
- .sm-dox a span.sub-arrow {
- border-color: var(--header-foreground) transparent transparent transparent;
- }
-
- .sm-dox a:hover span.sub-arrow {
- border-color: var(--menu-focus-foreground) transparent transparent transparent;
- }
-
- .sm-dox ul a span.sub-arrow {
- border-color: transparent transparent transparent var(--page-foreground-color);
- }
-
- .sm-dox ul a:hover span.sub-arrow {
- border-color: transparent transparent transparent var(--menu-focus-foreground);
- }
-}
-
-.sm-dox ul {
- background: var(--page-background-color);
- box-shadow: var(--box-shadow);
- border: 1px solid var(--separator-color);
- border-radius: var(--border-radius-medium) !important;
- padding: var(--spacing-small);
- animation: ease-out 150ms slideInMenu;
-}
-
-@keyframes slideInMenu {
- from {
- opacity: 0;
- transform: translate(0px, -2px);
- }
-
- to {
- opacity: 1;
- transform: translate(0px, 0px);
- }
-}
-
-.sm-dox ul a {
- color: var(--page-foreground-color) !important;
- background: var(--page-background-color);
- font-size: var(--navigation-font-size);
-}
-
-.sm-dox>li>ul:after {
- border-bottom-color: var(--page-background-color) !important;
-}
-
-.sm-dox>li>ul:before {
- border-bottom-color: var(--separator-color) !important;
-}
-
-.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus {
- font-size: var(--navigation-font-size) !important;
- color: var(--menu-focus-foreground) !important;
- text-shadow: none;
- background-color: var(--menu-focus-background);
- border-radius: var(--border-radius-small) !important;
-}
-
-.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a {
- text-shadow: none;
- background: transparent;
- background-image: none !important;
- color: var(--header-foreground) !important;
- font-weight: normal;
- font-size: var(--navigation-font-size);
- border-radius: var(--border-radius-small) !important;
-}
-
-.sm-dox a:focus {
- outline: auto;
-}
-
-.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover {
- text-shadow: none;
- font-weight: normal;
- background: var(--menu-focus-background);
- color: var(--menu-focus-foreground) !important;
- border-radius: var(--border-radius-small) !important;
- font-size: var(--navigation-font-size);
-}
-
-.tablist li.current {
- border-radius: var(--border-radius-small);
- background: var(--menu-selected-background);
-}
-
-.tablist li {
- margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small);
-}
-
-.tablist a {
- padding: 0 var(--spacing-large);
-}
-
-
-/*
- Search box
- */
-
-#MSearchBox {
- height: var(--searchbar-height);
- background: var(--searchbar-background);
- border-radius: var(--searchbar-border-radius);
- border: 1px solid var(--separator-color);
- overflow: hidden;
- width: var(--searchbar-width);
- position: relative;
- box-shadow: none;
- display: block;
- margin-top: 0;
-}
-
-/* until Doxygen 1.9.4 */
-.left img#MSearchSelect {
- left: 0;
- user-select: none;
- padding-left: 8px;
-}
-
-/* Doxygen 1.9.5 */
-.left span#MSearchSelect {
- left: 0;
- user-select: none;
- margin-left: 8px;
- padding: 0;
-}
-
-.left #MSearchSelect[src$=".png"] {
- padding-left: 0
-}
-
-.SelectionMark {
- user-select: none;
-}
-
-.tabs .left #MSearchSelect {
- padding-left: 0;
-}
-
-.tabs #MSearchBox {
- position: absolute;
- right: var(--spacing-medium);
-}
-
-@media screen and (max-width: 767px) {
- .tabs #MSearchBox {
- position: relative;
- right: 0;
- margin-left: var(--spacing-medium);
- margin-top: 0;
- }
-}
-
-#MSearchSelectWindow, #MSearchResultsWindow {
- z-index: 9999;
-}
-
-#MSearchBox.MSearchBoxActive {
- border-color: var(--primary-color);
- box-shadow: inset 0 0 0 1px var(--primary-color);
-}
-
-#main-menu > li:last-child {
- margin-right: 0;
-}
-
-@media screen and (max-width: 767px) {
- #main-menu > li:last-child {
- height: 50px;
- }
-}
-
-#MSearchField {
- font-size: var(--navigation-font-size);
- height: calc(var(--searchbar-height) - 2px);
- background: transparent;
- width: calc(var(--searchbar-width) - 64px);
-}
-
-.MSearchBoxActive #MSearchField {
- color: var(--searchbar-foreground);
-}
-
-#MSearchSelect {
- top: calc(calc(var(--searchbar-height) / 2) - 11px);
-}
-
-#MSearchBox span.left, #MSearchBox span.right {
- background: none;
- background-image: none;
-}
-
-#MSearchBox span.right {
- padding-top: calc(calc(var(--searchbar-height) / 2) - 12px);
- position: absolute;
- right: var(--spacing-small);
-}
-
-.tabs #MSearchBox span.right {
- top: calc(calc(var(--searchbar-height) / 2) - 12px);
-}
-
-@keyframes slideInSearchResults {
- from {
- opacity: 0;
- transform: translate(0, 15px);
- }
-
- to {
- opacity: 1;
- transform: translate(0, 20px);
- }
-}
-
-#MSearchResultsWindow {
- left: auto !important;
- right: var(--spacing-medium);
- border-radius: var(--border-radius-large);
- border: 1px solid var(--separator-color);
- transform: translate(0, 20px);
- box-shadow: var(--box-shadow);
- animation: ease-out 280ms slideInSearchResults;
- background: var(--page-background-color);
-}
-
-iframe#MSearchResults {
- margin: 4px;
-}
-
-iframe {
- color-scheme: normal;
-}
-
-@media (prefers-color-scheme: dark) {
- html:not(.light-mode) iframe#MSearchResults {
- filter: invert() hue-rotate(180deg);
- }
-}
-
-html.dark-mode iframe#MSearchResults {
- filter: invert() hue-rotate(180deg);
-}
-
-#MSearchResults .SRPage {
- background-color: transparent;
-}
-
-#MSearchResults .SRPage .SREntry {
- font-size: 10pt;
- padding: var(--spacing-small) var(--spacing-medium);
-}
-
-#MSearchSelectWindow {
- border: 1px solid var(--separator-color);
- border-radius: var(--border-radius-medium);
- box-shadow: var(--box-shadow);
- background: var(--page-background-color);
- padding-top: var(--spacing-small);
- padding-bottom: var(--spacing-small);
-}
-
-#MSearchSelectWindow a.SelectItem {
- font-size: var(--navigation-font-size);
- line-height: var(--content-line-height);
- margin: 0 var(--spacing-small);
- border-radius: var(--border-radius-small);
- color: var(--page-foreground-color) !important;
- font-weight: normal;
-}
-
-#MSearchSelectWindow a.SelectItem:hover {
- background: var(--menu-focus-background);
- color: var(--menu-focus-foreground) !important;
-}
-
-@media screen and (max-width: 767px) {
- #MSearchBox {
- margin-top: var(--spacing-medium);
- margin-bottom: var(--spacing-medium);
- width: calc(100vw - 30px);
- }
-
- #main-menu > li:last-child {
- float: none !important;
- }
-
- #MSearchField {
- width: calc(100vw - 110px);
- }
-
- @keyframes slideInSearchResultsMobile {
- from {
- opacity: 0;
- transform: translate(0, 15px);
- }
-
- to {
- opacity: 1;
- transform: translate(0, 20px);
- }
- }
-
- #MSearchResultsWindow {
- left: var(--spacing-medium) !important;
- right: var(--spacing-medium);
- overflow: auto;
- transform: translate(0, 20px);
- animation: ease-out 280ms slideInSearchResultsMobile;
- width: auto !important;
- }
-
- /*
- * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2
- */
- label.main-menu-btn ~ #searchBoxPos1 {
- top: 3px !important;
- right: 6px !important;
- left: 45px;
- display: flex;
- }
-
- label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox {
- margin-top: 0;
- margin-bottom: 0;
- flex-grow: 2;
- float: left;
- }
-}
-
-/*
- Tree view
- */
-
-#side-nav {
- padding: 0 !important;
- background: var(--side-nav-background);
-}
-
-@media screen and (max-width: 767px) {
- #side-nav {
- display: none;
- }
-
- #doc-content {
- margin-left: 0 !important;
- }
-}
-
-#nav-tree {
- background: transparent;
-}
-
-#nav-tree .label {
- font-size: var(--navigation-font-size);
-}
-
-#nav-tree .item {
- height: var(--tree-item-height);
- line-height: var(--tree-item-height);
-}
-
-#nav-sync {
- bottom: 12px;
- right: 12px;
- top: auto !important;
- user-select: none;
-}
-
-#nav-tree .selected {
- text-shadow: none;
- background-image: none;
- background-color: transparent;
- position: relative;
-}
-
-#nav-tree .selected::after {
- content: "";
- position: absolute;
- top: 1px;
- bottom: 1px;
- left: 0;
- width: 4px;
- border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0;
- background: var(--primary-color);
-}
-
-
-#nav-tree a {
- color: var(--side-nav-foreground) !important;
- font-weight: normal;
-}
-
-#nav-tree a:focus {
- outline-style: auto;
-}
-
-#nav-tree .arrow {
- opacity: var(--side-nav-arrow-opacity);
-}
-
-.arrow {
- color: inherit;
- cursor: pointer;
- font-size: 45%;
- vertical-align: middle;
- margin-right: 2px;
- font-family: serif;
- height: auto;
- text-align: right;
-}
-
-#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow {
- opacity: var(--side-nav-arrow-hover-opacity);
-}
-
-#nav-tree .selected a {
- color: var(--primary-color) !important;
- font-weight: bolder;
- font-weight: 600;
-}
-
-.ui-resizable-e {
- background: var(--separator-color);
- width: 1px;
-}
-
-/*
- Contents
- */
-
-div.header {
- border-bottom: 1px solid var(--separator-color);
- background-color: var(--page-background-color);
- background-image: none;
-}
-
-@media screen and (min-width: 1000px) {
- #doc-content > div > div.contents,
- .PageDoc > div.contents {
- display: flex;
- flex-direction: row-reverse;
- flex-wrap: nowrap;
- align-items: flex-start;
- }
-
- div.contents .textblock {
- min-width: 200px;
- flex-grow: 1;
- }
-}
-
-div.contents, div.header .title, div.header .summary {
- max-width: var(--content-maxwidth);
-}
-
-div.contents, div.header .title {
- line-height: initial;
- margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto;
-}
-
-div.header .summary {
- margin: var(--spacing-medium) auto 0 auto;
-}
-
-div.headertitle {
- padding: 0;
-}
-
-div.header .title {
- font-weight: 600;
- font-size: 225%;
- padding: var(--spacing-medium) var(--spacing-large);
- word-break: break-word;
-}
-
-div.header .summary {
- width: auto;
- display: block;
- float: none;
- padding: 0 var(--spacing-large);
-}
-
-td.memSeparator {
- border-color: var(--separator-color);
-}
-
-span.mlabel {
- background: var(--primary-color);
- border: none;
- padding: 4px 9px;
- border-radius: 12px;
- margin-right: var(--spacing-medium);
-}
-
-span.mlabel:last-of-type {
- margin-right: 2px;
-}
-
-div.contents {
- padding: 0 var(--spacing-large);
-}
-
-div.contents p, div.contents li {
- line-height: var(--content-line-height);
-}
-
-div.contents div.dyncontent {
- margin: var(--spacing-medium) 0;
-}
-
-@media (prefers-color-scheme: dark) {
- html:not(.light-mode) div.contents div.dyncontent img,
- html:not(.light-mode) div.contents center img,
- html:not(.light-mode) div.contents > table img,
- html:not(.light-mode) div.contents div.dyncontent iframe,
- html:not(.light-mode) div.contents center iframe,
- html:not(.light-mode) div.contents table iframe {
- filter: hue-rotate(180deg) invert();
- }
-}
-
-html.dark-mode div.contents div.dyncontent img,
-html.dark-mode div.contents center img,
-html.dark-mode div.contents > table img,
-html.dark-mode div.contents div.dyncontent iframe,
-html.dark-mode div.contents center iframe,
-html.dark-mode div.contents table iframe {
- filter: hue-rotate(180deg) invert();
-}
-
-h2.groupheader {
- border-bottom: 0px;
- color: var(--page-foreground-color);
- box-shadow:
- 100px 0 var(--page-background-color),
- -100px 0 var(--page-background-color),
- 100px 0.75px var(--separator-color),
- -100px 0.75px var(--separator-color),
- 500px 0 var(--page-background-color),
- -500px 0 var(--page-background-color),
- 500px 0.75px var(--separator-color),
- -500px 0.75px var(--separator-color),
- 900px 0 var(--page-background-color),
- -900px 0 var(--page-background-color),
- 900px 0.75px var(--separator-color),
- -900px 0.75px var(--separator-color),
- 1400px 0 var(--page-background-color),
- -1400px 0 var(--page-background-color),
- 1400px 0.75px var(--separator-color),
- -1400px 0.75px var(--separator-color),
- 1900px 0 var(--page-background-color),
- -1900px 0 var(--page-background-color),
- 1900px 0.75px var(--separator-color),
- -1900px 0.75px var(--separator-color);
-}
-
-blockquote {
- margin: 0 var(--spacing-medium) 0 var(--spacing-medium);
- padding: var(--spacing-small) var(--spacing-large);
- background: var(--blockquote-background);
- color: var(--blockquote-foreground);
- border-left: 0;
- overflow: visible;
- border-radius: var(--border-radius-medium);
- overflow: visible;
- position: relative;
-}
-
-blockquote::before, blockquote::after {
- font-weight: bold;
- font-family: serif;
- font-size: 360%;
- opacity: .15;
- position: absolute;
-}
-
-blockquote::before {
- content: "“";
- left: -10px;
- top: 4px;
-}
-
-blockquote::after {
- content: "”";
- right: -8px;
- bottom: -25px;
-}
-
-blockquote p {
- margin: var(--spacing-small) 0 var(--spacing-medium) 0;
-}
-.paramname {
- font-weight: 600;
- color: var(--primary-dark-color);
-}
-
-.paramname > code {
- border: 0;
-}
-
-table.params .paramname {
- font-weight: 600;
- font-family: var(--font-family-monospace);
- font-size: var(--code-font-size);
- padding-right: var(--spacing-small);
- line-height: var(--table-line-height);
-}
-
-h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
- text-shadow: 0 0 15px var(--primary-light-color);
-}
-
-.alphachar a {
- color: var(--page-foreground-color);
-}
-
-/*
- Table of Contents
- */
-
-div.contents .toc {
- max-height: var(--toc-max-height);
- min-width: var(--toc-width);
- border: 0;
- border-left: 1px solid var(--separator-color);
- border-radius: 0;
- background-color: transparent;
- box-shadow: none;
- position: sticky;
- top: var(--toc-sticky-top);
- padding: 0 var(--spacing-large);
- margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large);
-}
-
-div.toc h3 {
- color: var(--toc-foreground);
- font-size: var(--navigation-font-size);
- margin: var(--spacing-large) 0 var(--spacing-medium) 0;
-}
-
-div.toc li {
- padding: 0;
- background: none;
- line-height: var(--toc-font-size);
- margin: var(--toc-font-size) 0 0 0;
-}
-
-div.toc li::before {
- display: none;
-}
-
-div.toc ul {
- margin-top: 0
-}
-
-div.toc li a {
- font-size: var(--toc-font-size);
- color: var(--page-foreground-color) !important;
- text-decoration: none;
-}
-
-div.toc li a:hover, div.toc li a.active {
- color: var(--primary-color) !important;
-}
-
-div.toc li a.aboveActive {
- color: var(--page-secondary-foreground-color) !important;
-}
-
-
-@media screen and (max-width: 999px) {
- div.contents .toc {
- max-height: 45vh;
- float: none;
- width: auto;
- margin: 0 0 var(--spacing-medium) 0;
- position: relative;
- top: 0;
- position: relative;
- border: 1px solid var(--separator-color);
- border-radius: var(--border-radius-medium);
- background-color: var(--toc-background);
- box-shadow: var(--box-shadow);
- }
-
- div.contents .toc.interactive {
- max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large));
- overflow: hidden;
- }
-
- div.contents .toc > h3 {
- -webkit-tap-highlight-color: transparent;
- cursor: pointer;
- position: sticky;
- top: 0;
- background-color: var(--toc-background);
- margin: 0;
- padding: var(--spacing-large) 0;
- display: block;
- }
-
- div.contents .toc.interactive > h3::before {
- content: "";
- width: 0;
- height: 0;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 5px solid var(--primary-color);
- display: inline-block;
- margin-right: var(--spacing-small);
- margin-bottom: calc(var(--navigation-font-size) / 4);
- transform: rotate(-90deg);
- transition: transform 0.25s ease-out;
- }
-
- div.contents .toc.interactive.open > h3::before {
- transform: rotate(0deg);
- }
-
- div.contents .toc.interactive.open {
- max-height: 45vh;
- overflow: auto;
- transition: max-height 0.2s ease-in-out;
- }
-
- div.contents .toc a, div.contents .toc a.active {
- color: var(--primary-color) !important;
- }
-
- div.contents .toc a:hover {
- text-decoration: underline;
- }
-}
-
-/*
- Code & Fragments
- */
-
-code, div.fragment, pre.fragment {
- border-radius: var(--border-radius-small);
- border: 1px solid var(--separator-color);
- overflow: hidden;
-}
-
-code {
- display: inline;
- background: var(--code-background);
- color: var(--code-foreground);
- padding: 2px 6px;
-}
-
-div.fragment, pre.fragment {
- margin: var(--spacing-medium) 0;
- padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large);
- background: var(--fragment-background);
- color: var(--fragment-foreground);
- overflow-x: auto;
-}
-
-@media screen and (max-width: 767px) {
- div.fragment, pre.fragment {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-right: 0;
- }
-
- .contents > div.fragment,
- .textblock > div.fragment,
- .textblock > pre.fragment,
- .contents > .doxygen-awesome-fragment-wrapper > div.fragment,
- .textblock > .doxygen-awesome-fragment-wrapper > div.fragment,
- .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment {
- margin: var(--spacing-medium) calc(0px - var(--spacing-large));
- border-radius: 0;
- border-left: 0;
- }
-
- .textblock li > .fragment,
- .textblock li > .doxygen-awesome-fragment-wrapper > .fragment {
- margin: var(--spacing-medium) calc(0px - var(--spacing-large));
- }
-
- .memdoc li > .fragment,
- .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment {
- margin: var(--spacing-medium) calc(0px - var(--spacing-medium));
- }
-
- .textblock ul, .memdoc ul {
- overflow: initial;
- }
-
- .memdoc > div.fragment,
- .memdoc > pre.fragment,
- dl dd > div.fragment,
- dl dd pre.fragment,
- .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment,
- .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment,
- dl dd > .doxygen-awesome-fragment-wrapper > div.fragment,
- dl dd .doxygen-awesome-fragment-wrapper > pre.fragment {
- margin: var(--spacing-medium) calc(0px - var(--spacing-medium));
- border-radius: 0;
- border-left: 0;
- }
-}
-
-code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span {
- font-family: var(--font-family-monospace);
- font-size: var(--code-font-size) !important;
-}
-
-div.line:after {
- margin-right: var(--spacing-medium);
-}
-
-div.fragment .line, pre.fragment {
- white-space: pre;
- word-wrap: initial;
- line-height: var(--fragment-lineheight);
-}
-
-div.fragment span.keyword {
- color: var(--fragment-keyword);
-}
-
-div.fragment span.keywordtype {
- color: var(--fragment-keywordtype);
-}
-
-div.fragment span.keywordflow {
- color: var(--fragment-keywordflow);
-}
-
-div.fragment span.stringliteral {
- color: var(--fragment-token)
-}
-
-div.fragment span.comment {
- color: var(--fragment-comment);
-}
-
-div.fragment a.code {
- color: var(--fragment-link) !important;
-}
-
-div.fragment span.preprocessor {
- color: var(--fragment-preprocessor);
-}
-
-div.fragment span.lineno {
- display: inline-block;
- width: 27px;
- border-right: none;
- background: var(--fragment-linenumber-background);
- color: var(--fragment-linenumber-color);
-}
-
-div.fragment span.lineno a {
- background: none;
- color: var(--fragment-link) !important;
-}
-
-div.fragment .line:first-child .lineno {
- box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border);
-}
-
-div.line {
- border-radius: var(--border-radius-small);
-}
-
-div.line.glow {
- background-color: var(--primary-light-color);
- box-shadow: none;
-}
-
-/*
- dl warning, attention, note, deprecated, bug, ...
- */
-
-dl.bug dt a, dl.deprecated dt a, dl.todo dt a {
- font-weight: bold !important;
-}
-
-dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.todo, dl.remark {
- padding: var(--spacing-medium);
- margin: var(--spacing-medium) 0;
- color: var(--page-background-color);
- overflow: hidden;
- margin-left: 0;
- border-radius: var(--border-radius-small);
-}
-
-dl.section dd {
- margin-bottom: 2px;
-}
-
-dl.warning, dl.attention {
- background: var(--warning-color);
- border-left: 8px solid var(--warning-color-dark);
- color: var(--warning-color-darker);
-}
-
-dl.warning dt, dl.attention dt {
- color: var(--warning-color-dark);
-}
-
-dl.note, dl.remark {
- background: var(--note-color);
- border-left: 8px solid var(--note-color-dark);
- color: var(--note-color-darker);
-}
-
-dl.note dt, dl.remark dt {
- color: var(--note-color-dark);
-}
-
-dl.todo {
- background: var(--todo-color);
- border-left: 8px solid var(--todo-color-dark);
- color: var(--todo-color-darker);
-}
-
-dl.todo dt {
- color: var(--todo-color-dark);
-}
-
-dl.bug dt a {
- color: var(--todo-color-dark) !important;
-}
-
-dl.bug {
- background: var(--bug-color);
- border-left: 8px solid var(--bug-color-dark);
- color: var(--bug-color-darker);
-}
-
-dl.bug dt a {
- color: var(--bug-color-dark) !important;
-}
-
-dl.deprecated {
- background: var(--deprecated-color);
- border-left: 8px solid var(--deprecated-color-dark);
- color: var(--deprecated-color-darker);
-}
-
-dl.deprecated dt a {
- color: var(--deprecated-color-dark) !important;
-}
-
-dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd {
- margin-inline-start: 0px;
-}
-
-dl.invariant, dl.pre {
- background: var(--invariant-color);
- border-left: 8px solid var(--invariant-color-dark);
- color: var(--invariant-color-darker);
-}
-
-dl.invariant dt, dl.pre dt {
- color: var(--invariant-color-dark);
-}
-
-/*
- memitem
- */
-
-div.memdoc, div.memproto, h2.memtitle {
- box-shadow: none;
- background-image: none;
- border: none;
-}
-
-div.memdoc {
- padding: 0 var(--spacing-medium);
- background: var(--page-background-color);
-}
-
-h2.memtitle, div.memitem {
- border: 1px solid var(--separator-color);
- box-shadow: var(--box-shadow);
-}
-
-h2.memtitle {
- box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow);
-}
-
-div.memitem {
- transition: none;
-}
-
-div.memproto, h2.memtitle {
- background: var(--fragment-background);
-}
-
-h2.memtitle {
- font-weight: 500;
- font-size: var(--memtitle-font-size);
- font-family: var(--font-family-monospace);
- border-bottom: none;
- border-top-left-radius: var(--border-radius-medium);
- border-top-right-radius: var(--border-radius-medium);
- word-break: break-all;
- position: relative;
-}
-
-h2.memtitle:after {
- content: "";
- display: block;
- background: var(--fragment-background);
- height: var(--spacing-medium);
- bottom: calc(0px - var(--spacing-medium));
- left: 0;
- right: -14px;
- position: absolute;
- border-top-right-radius: var(--border-radius-medium);
-}
-
-h2.memtitle > span.permalink {
- font-size: inherit;
-}
-
-h2.memtitle > span.permalink > a {
- text-decoration: none;
- padding-left: 3px;
- margin-right: -4px;
- user-select: none;
- display: inline-block;
- margin-top: -6px;
-}
-
-h2.memtitle > span.permalink > a:hover {
- color: var(--primary-dark-color) !important;
-}
-
-a:target + h2.memtitle, a:target + h2.memtitle + div.memitem {
- border-color: var(--primary-light-color);
-}
-
-div.memitem {
- border-top-right-radius: var(--border-radius-medium);
- border-bottom-right-radius: var(--border-radius-medium);
- border-bottom-left-radius: var(--border-radius-medium);
- overflow: hidden;
- display: block !important;
-}
-
-div.memdoc {
- border-radius: 0;
-}
-
-div.memproto {
- border-radius: 0 var(--border-radius-small) 0 0;
- overflow: auto;
- border-bottom: 1px solid var(--separator-color);
- padding: var(--spacing-medium);
- margin-bottom: -1px;
-}
-
-div.memtitle {
- border-top-right-radius: var(--border-radius-medium);
- border-top-left-radius: var(--border-radius-medium);
-}
-
-div.memproto table.memname {
- font-family: var(--font-family-monospace);
- color: var(--page-foreground-color);
- font-size: var(--memname-font-size);
- text-shadow: none;
-}
-
-div.memproto div.memtemplate {
- font-family: var(--font-family-monospace);
- color: var(--primary-dark-color);
- font-size: var(--memname-font-size);
- margin-left: 2px;
- text-shadow: none;
-}
-
-table.mlabels, table.mlabels > tbody {
- display: block;
-}
-
-td.mlabels-left {
- width: auto;
-}
-
-td.mlabels-right {
- margin-top: 3px;
- position: sticky;
- left: 0;
-}
-
-table.mlabels > tbody > tr:first-child {
- display: flex;
- justify-content: space-between;
- flex-wrap: wrap;
-}
-
-.memname, .memitem span.mlabels {
- margin: 0
-}
-
-/*
- reflist
- */
-
-dl.reflist {
- box-shadow: var(--box-shadow);
- border-radius: var(--border-radius-medium);
- border: 1px solid var(--separator-color);
- overflow: hidden;
- padding: 0;
-}
-
-
-dl.reflist dt, dl.reflist dd {
- box-shadow: none;
- text-shadow: none;
- background-image: none;
- border: none;
- padding: 12px;
-}
-
-
-dl.reflist dt {
- font-weight: 500;
- border-radius: 0;
- background: var(--code-background);
- border-bottom: 1px solid var(--separator-color);
- color: var(--page-foreground-color)
-}
-
-
-dl.reflist dd {
- background: none;
-}
-
-/*
- Table
- */
-
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname),
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody {
- display: inline-block;
- max-width: 100%;
-}
-
-.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) {
- margin-left: calc(0px - var(--spacing-large));
- margin-right: calc(0px - var(--spacing-large));
- max-width: calc(100% + 2 * var(--spacing-large));
-}
-
-table.fieldtable,
-table.markdownTable tbody,
-table.doxtable tbody {
- border: none;
- margin: var(--spacing-medium) 0;
- box-shadow: 0 0 0 1px var(--separator-color);
- border-radius: var(--border-radius-small);
-}
-
-table.doxtable caption {
- display: block;
-}
-
-table.fieldtable {
- border-collapse: collapse;
- width: 100%;
-}
-
-th.markdownTableHeadLeft,
-th.markdownTableHeadRight,
-th.markdownTableHeadCenter,
-th.markdownTableHeadNone,
-table.doxtable th {
- background: var(--tablehead-background);
- color: var(--tablehead-foreground);
- font-weight: 600;
- font-size: var(--page-font-size);
-}
-
-th.markdownTableHeadLeft:first-child,
-th.markdownTableHeadRight:first-child,
-th.markdownTableHeadCenter:first-child,
-th.markdownTableHeadNone:first-child,
-table.doxtable tr th:first-child {
- border-top-left-radius: var(--border-radius-small);
-}
-
-th.markdownTableHeadLeft:last-child,
-th.markdownTableHeadRight:last-child,
-th.markdownTableHeadCenter:last-child,
-th.markdownTableHeadNone:last-child,
-table.doxtable tr th:last-child {
- border-top-right-radius: var(--border-radius-small);
-}
-
-table.markdownTable td,
-table.markdownTable th,
-table.fieldtable td,
-table.fieldtable th,
-table.doxtable td,
-table.doxtable th {
- border: 1px solid var(--separator-color);
- padding: var(--spacing-small) var(--spacing-medium);
-}
-
-table.markdownTable td:last-child,
-table.markdownTable th:last-child,
-table.fieldtable td:last-child,
-table.fieldtable th:last-child,
-table.doxtable td:last-child,
-table.doxtable th:last-child {
- border-right: none;
-}
-
-table.markdownTable td:first-child,
-table.markdownTable th:first-child,
-table.fieldtable td:first-child,
-table.fieldtable th:first-child,
-table.doxtable td:first-child,
-table.doxtable th:first-child {
- border-left: none;
-}
-
-table.markdownTable tr:first-child td,
-table.markdownTable tr:first-child th,
-table.fieldtable tr:first-child td,
-table.fieldtable tr:first-child th,
-table.doxtable tr:first-child td,
-table.doxtable tr:first-child th {
- border-top: none;
-}
-
-table.markdownTable tr:last-child td,
-table.markdownTable tr:last-child th,
-table.fieldtable tr:last-child td,
-table.fieldtable tr:last-child th,
-table.doxtable tr:last-child td,
-table.doxtable tr:last-child th {
- border-bottom: none;
-}
-
-table.markdownTable tr, table.doxtable tr {
- border-bottom: 1px solid var(--separator-color);
-}
-
-table.markdownTable tr:last-child, table.doxtable tr:last-child {
- border-bottom: none;
-}
-
-table.fieldtable th {
- font-size: var(--page-font-size);
- font-weight: 600;
- background-image: none;
- background-color: var(--tablehead-background);
- color: var(--tablehead-foreground);
-}
-
-table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th {
- border-bottom: 1px solid var(--separator-color);
- border-right: 1px solid var(--separator-color);
-}
-
-table.fieldtable tr:last-child td:first-child {
- border-bottom-left-radius: var(--border-radius-small);
-}
-
-table.fieldtable tr:last-child td:last-child {
- border-bottom-right-radius: var(--border-radius-small);
-}
-
-.memberdecls td.glow, .fieldtable tr.glow {
- background-color: var(--primary-light-color);
- box-shadow: none;
-}
-
-table.memberdecls {
- display: block;
- -webkit-tap-highlight-color: transparent;
-}
-
-table.memberdecls tr[class^='memitem'] {
- font-family: var(--font-family-monospace);
- font-size: var(--code-font-size);
-}
-
-table.memberdecls tr[class^='memitem'] .memTemplParams {
- font-family: var(--font-family-monospace);
- font-size: var(--code-font-size);
- color: var(--primary-dark-color);
- white-space: normal;
-}
-
-table.memberdecls .memItemLeft,
-table.memberdecls .memItemRight,
-table.memberdecls .memTemplItemLeft,
-table.memberdecls .memTemplItemRight,
-table.memberdecls .memTemplParams {
- transition: none;
- padding-top: var(--spacing-small);
- padding-bottom: var(--spacing-small);
- border-top: 1px solid var(--separator-color);
- border-bottom: 1px solid var(--separator-color);
- background-color: var(--fragment-background);
-}
-
-table.memberdecls .memTemplItemLeft,
-table.memberdecls .memTemplItemRight {
- padding-top: 2px;
-}
-
-table.memberdecls .memTemplParams {
- border-bottom: 0;
- border-left: 1px solid var(--separator-color);
- border-right: 1px solid var(--separator-color);
- border-radius: var(--border-radius-small) var(--border-radius-small) 0 0;
- padding-bottom: var(--spacing-small);
-}
-
-table.memberdecls .memTemplItemLeft {
- border-radius: 0 0 0 var(--border-radius-small);
- border-left: 1px solid var(--separator-color);
- border-top: 0;
-}
-
-table.memberdecls .memTemplItemRight {
- border-radius: 0 0 var(--border-radius-small) 0;
- border-right: 1px solid var(--separator-color);
- padding-left: 0;
- border-top: 0;
-}
-
-table.memberdecls .memItemLeft {
- border-radius: var(--border-radius-small) 0 0 var(--border-radius-small);
- border-left: 1px solid var(--separator-color);
- padding-left: var(--spacing-medium);
- padding-right: 0;
-}
-
-table.memberdecls .memItemRight {
- border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0;
- border-right: 1px solid var(--separator-color);
- padding-right: var(--spacing-medium);
- padding-left: 0;
-
-}
-
-table.memberdecls .mdescLeft, table.memberdecls .mdescRight {
- background: none;
- color: var(--page-foreground-color);
- padding: var(--spacing-small) 0;
-}
-
-table.memberdecls .memItemLeft,
-table.memberdecls .memTemplItemLeft {
- padding-right: var(--spacing-medium);
-}
-
-table.memberdecls .memSeparator {
- background: var(--page-background-color);
- height: var(--spacing-large);
- border: 0;
- transition: none;
-}
-
-table.memberdecls .groupheader {
- margin-bottom: var(--spacing-large);
-}
-
-table.memberdecls .inherit_header td {
- padding: 0 0 var(--spacing-medium) 0;
- text-indent: -12px;
- color: var(--page-secondary-foreground-color);
-}
-
-table.memberdecls img[src="closed.png"],
-table.memberdecls img[src="open.png"],
-div.dynheader img[src="open.png"],
-div.dynheader img[src="closed.png"] {
- width: 0;
- height: 0;
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 5px solid var(--primary-color);
- margin-top: 8px;
- display: block;
- float: left;
- margin-left: -10px;
- transition: transform 0.25s ease-out;
-}
-
-table.memberdecls img {
- margin-right: 10px;
-}
-
-table.memberdecls img[src="closed.png"],
-div.dynheader img[src="closed.png"] {
- transform: rotate(-90deg);
-
-}
-
-.compoundTemplParams {
- font-family: var(--font-family-monospace);
- color: var(--primary-dark-color);
- font-size: var(--code-font-size);
-}
-
-@media screen and (max-width: 767px) {
-
- table.memberdecls .memItemLeft,
- table.memberdecls .memItemRight,
- table.memberdecls .mdescLeft,
- table.memberdecls .mdescRight,
- table.memberdecls .memTemplItemLeft,
- table.memberdecls .memTemplItemRight,
- table.memberdecls .memTemplParams {
- display: block;
- text-align: left;
- padding-left: var(--spacing-large);
- margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large));
- border-right: none;
- border-left: none;
- border-radius: 0;
- white-space: normal;
- }
-
- table.memberdecls .memItemLeft,
- table.memberdecls .mdescLeft,
- table.memberdecls .memTemplItemLeft {
- border-bottom: 0;
- padding-bottom: 0;
- }
-
- table.memberdecls .memTemplItemLeft {
- padding-top: 0;
- }
-
- table.memberdecls .mdescLeft {
- margin-bottom: calc(0px - var(--page-font-size));
- }
-
- table.memberdecls .memItemRight,
- table.memberdecls .mdescRight,
- table.memberdecls .memTemplItemRight {
- border-top: 0;
- padding-top: 0;
- padding-right: var(--spacing-large);
- overflow-x: auto;
- }
-
- table.memberdecls tr[class^='memitem']:not(.inherit) {
- display: block;
- width: calc(100vw - 2 * var(--spacing-large));
- }
-
- table.memberdecls .mdescRight {
- color: var(--page-foreground-color);
- }
-
- table.memberdecls tr.inherit {
- visibility: hidden;
- }
-
- table.memberdecls tr[style="display: table-row;"] {
- display: block !important;
- visibility: visible;
- width: calc(100vw - 2 * var(--spacing-large));
- animation: fade .5s;
- }
-
- @keyframes fade {
- 0% {
- opacity: 0;
- max-height: 0;
- }
-
- 100% {
- opacity: 1;
- max-height: 200px;
- }
- }
-}
-
-
-/*
- Horizontal Rule
- */
-
-hr {
- margin-top: var(--spacing-large);
- margin-bottom: var(--spacing-large);
- height: 1px;
- background-color: var(--separator-color);
- border: 0;
-}
-
-.contents hr {
- box-shadow: 100px 0 0 var(--separator-color),
- -100px 0 0 var(--separator-color),
- 500px 0 0 var(--separator-color),
- -500px 0 0 var(--separator-color),
- 1500px 0 0 var(--separator-color),
- -1500px 0 0 var(--separator-color),
- 2000px 0 0 var(--separator-color),
- -2000px 0 0 var(--separator-color);
-}
-
-.contents img, .contents .center, .contents center, .contents div.image object {
- max-width: 100%;
- overflow: auto;
-}
-
-@media screen and (max-width: 767px) {
- .contents .dyncontent > .center, .contents > center {
- margin-left: calc(0px - var(--spacing-large));
- margin-right: calc(0px - var(--spacing-large));
- max-width: calc(100% + 2 * var(--spacing-large));
- }
-}
-
-/*
- Directories
- */
-div.directory {
- border-top: 1px solid var(--separator-color);
- border-bottom: 1px solid var(--separator-color);
- width: auto;
-}
-
-table.directory {
- font-family: var(--font-family);
- font-size: var(--page-font-size);
- font-weight: normal;
- width: 100%;
-}
-
-table.directory td.entry, table.directory td.desc {
- padding: calc(var(--spacing-small) / 2) var(--spacing-small);
- line-height: var(--table-line-height);
-}
-
-table.directory tr.even td:last-child {
- border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0;
-}
-
-table.directory tr.even td:first-child {
- border-radius: var(--border-radius-small) 0 0 var(--border-radius-small);
-}
-
-table.directory tr.even:last-child td:last-child {
- border-radius: 0 var(--border-radius-small) 0 0;
-}
-
-table.directory tr.even:last-child td:first-child {
- border-radius: var(--border-radius-small) 0 0 0;
-}
-
-table.directory td.desc {
- min-width: 250px;
-}
-
-table.directory tr.even {
- background-color: var(--odd-color);
-}
-
-table.directory tr.odd {
- background-color: transparent;
-}
-
-.icona {
- width: auto;
- height: auto;
- margin: 0 var(--spacing-small);
-}
-
-.icon {
- background: var(--primary-color);
- border-radius: var(--border-radius-small);
- font-size: var(--page-font-size);
- padding: calc(var(--page-font-size) / 5);
- line-height: var(--page-font-size);
- transform: scale(0.8);
- height: auto;
- width: var(--page-font-size);
- user-select: none;
-}
-
-.iconfopen, .icondoc, .iconfclosed {
- background-position: center;
- margin-bottom: 0;
- height: var(--table-line-height);
-}
-
-.icondoc {
- filter: saturate(0.2);
-}
-
-@media screen and (max-width: 767px) {
- div.directory {
- margin-left: calc(0px - var(--spacing-large));
- margin-right: calc(0px - var(--spacing-large));
- }
-}
-
-@media (prefers-color-scheme: dark) {
- html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed {
- filter: hue-rotate(180deg) invert();
- }
-}
-
-html.dark-mode .iconfopen, html.dark-mode .iconfclosed {
- filter: hue-rotate(180deg) invert();
-}
-
-/*
- Class list
- */
-
-.classindex dl.odd {
- background: var(--odd-color);
- border-radius: var(--border-radius-small);
-}
-
-.classindex dl.even {
- background-color: transparent;
-}
-
-/*
- Class Index Doxygen 1.8
-*/
-
-table.classindex {
- margin-left: 0;
- margin-right: 0;
- width: 100%;
-}
-
-table.classindex table div.ah {
- background-image: none;
- background-color: initial;
- border-color: var(--separator-color);
- color: var(--page-foreground-color);
- box-shadow: var(--box-shadow);
- border-radius: var(--border-radius-large);
- padding: var(--spacing-small);
-}
-
-div.qindex {
- background-color: var(--odd-color);
- border-radius: var(--border-radius-small);
- border: 1px solid var(--separator-color);
- padding: var(--spacing-small) 0;
-}
-
-/*
- Footer and nav-path
- */
-
-#nav-path {
- width: 100%;
-}
-
-#nav-path ul {
- background-image: none;
- background: var(--page-background-color);
- border: none;
- border-top: 1px solid var(--separator-color);
- border-bottom: 1px solid var(--separator-color);
- border-bottom: 0;
- box-shadow: 0 0.75px 0 var(--separator-color);
- font-size: var(--navigation-font-size);
-}
-
-img.footer {
- width: 60px;
-}
-
-.navpath li.footer {
- color: var(--page-secondary-foreground-color);
-}
-
-address.footer {
- color: var(--page-secondary-foreground-color);
- margin-bottom: var(--spacing-large);
-}
-
-#nav-path li.navelem {
- background-image: none;
- display: flex;
- align-items: center;
-}
-
-.navpath li.navelem a {
- text-shadow: none;
- display: inline-block;
- color: var(--primary-color) !important;
-}
-
-.navpath li.navelem b {
- color: var(--primary-dark-color);
- font-weight: 500;
-}
-
-li.navelem {
- padding: 0;
- margin-left: -8px;
-}
-
-li.navelem:first-child {
- margin-left: var(--spacing-large);
-}
-
-li.navelem:first-child:before {
- display: none;
-}
-
-#nav-path li.navelem:after {
- content: '';
- border: 5px solid var(--page-background-color);
- border-bottom-color: transparent;
- border-right-color: transparent;
- border-top-color: transparent;
- transform: translateY(-1px) scaleY(4.2);
- z-index: 10;
- margin-left: 6px;
-}
-
-#nav-path li.navelem:before {
- content: '';
- border: 5px solid var(--separator-color);
- border-bottom-color: transparent;
- border-right-color: transparent;
- border-top-color: transparent;
- transform: translateY(-1px) scaleY(3.2);
- margin-right: var(--spacing-small);
-}
-
-.navpath li.navelem a:hover {
- color: var(--primary-color);
-}
-
-/*
- Scrollbars for Webkit
-*/
-
-#nav-tree::-webkit-scrollbar,
-div.fragment::-webkit-scrollbar,
-pre.fragment::-webkit-scrollbar,
-div.memproto::-webkit-scrollbar,
-.contents center::-webkit-scrollbar,
-.contents .center::-webkit-scrollbar,
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar,
-div.contents .toc::-webkit-scrollbar {
- background: transparent;
- width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding));
- height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding));
-}
-
-#nav-tree::-webkit-scrollbar-thumb,
-div.fragment::-webkit-scrollbar-thumb,
-pre.fragment::-webkit-scrollbar-thumb,
-div.memproto::-webkit-scrollbar-thumb,
-.contents center::-webkit-scrollbar-thumb,
-.contents .center::-webkit-scrollbar-thumb,
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb,
-div.contents .toc::-webkit-scrollbar-thumb {
- background-color: transparent;
- border: var(--webkit-scrollbar-padding) solid transparent;
- border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding));
- background-clip: padding-box;
-}
-
-#nav-tree:hover::-webkit-scrollbar-thumb,
-div.fragment:hover::-webkit-scrollbar-thumb,
-pre.fragment:hover::-webkit-scrollbar-thumb,
-div.memproto:hover::-webkit-scrollbar-thumb,
-.contents center:hover::-webkit-scrollbar-thumb,
-.contents .center:hover::-webkit-scrollbar-thumb,
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb,
-div.contents .toc:hover::-webkit-scrollbar-thumb {
- background-color: var(--webkit-scrollbar-color);
-}
-
-#nav-tree::-webkit-scrollbar-track,
-div.fragment::-webkit-scrollbar-track,
-pre.fragment::-webkit-scrollbar-track,
-div.memproto::-webkit-scrollbar-track,
-.contents center::-webkit-scrollbar-track,
-.contents .center::-webkit-scrollbar-track,
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track,
-div.contents .toc::-webkit-scrollbar-track {
- background: transparent;
-}
-
-#nav-tree::-webkit-scrollbar-corner {
- background-color: var(--side-nav-background);
-}
-
-#nav-tree,
-div.fragment,
-pre.fragment,
-div.memproto,
-.contents center,
-.contents .center,
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody,
-div.contents .toc {
- overflow-x: auto;
- overflow-x: overlay;
-}
-
-#nav-tree {
- overflow-x: auto;
- overflow-y: auto;
- overflow-y: overlay;
-}
-
-/*
- Scrollbars for Firefox
-*/
-
-#nav-tree,
-div.fragment,
-pre.fragment,
-div.memproto,
-.contents center,
-.contents .center,
-.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody,
-div.contents .toc {
- scrollbar-width: thin;
-}
-
-/*
- Optional Dark mode toggle button
-*/
-
-doxygen-awesome-dark-mode-toggle {
- display: inline-block;
- margin: 0 0 0 var(--spacing-small);
- padding: 0;
- width: var(--searchbar-height);
- height: var(--searchbar-height);
- background: none;
- border: none;
- border-radius: var(--searchbar-height);
- vertical-align: middle;
- text-align: center;
- line-height: var(--searchbar-height);
- font-size: 22px;
- display: flex;
- align-items: center;
- justify-content: center;
- user-select: none;
- cursor: pointer;
-}
-
-doxygen-awesome-dark-mode-toggle > svg {
- transition: transform .1s ease-in-out;
-}
-
-doxygen-awesome-dark-mode-toggle:active > svg {
- transform: scale(.5);
-}
-
-doxygen-awesome-dark-mode-toggle:hover {
- background-color: rgba(0,0,0,.03);
-}
-
-html.dark-mode doxygen-awesome-dark-mode-toggle:hover {
- background-color: rgba(0,0,0,.18);
-}
-
-/*
- Optional fragment copy button
-*/
-.doxygen-awesome-fragment-wrapper {
- position: relative;
-}
-
-doxygen-awesome-fragment-copy-button {
- opacity: 0;
- background: var(--fragment-background);
- width: 28px;
- height: 28px;
- position: absolute;
- right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5));
- top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5));
- border: 1px solid var(--fragment-foreground);
- cursor: pointer;
- border-radius: var(--border-radius-small);
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success {
- opacity: .28;
-}
-
-doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success {
- opacity: 1 !important;
-}
-
-doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg {
- transform: scale(.91);
-}
-
-doxygen-awesome-fragment-copy-button svg {
- fill: var(--fragment-foreground);
- width: 18px;
- height: 18px;
-}
-
-doxygen-awesome-fragment-copy-button.success svg {
- fill: rgb(14, 168, 14);
-}
-
-doxygen-awesome-fragment-copy-button.success {
- border-color: rgb(14, 168, 14);
-}
-
-@media screen and (max-width: 767px) {
- .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button,
- .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button,
- .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button,
- .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button,
- dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button {
- right: 0;
- }
-}
-
-/*
- Optional paragraph link button
-*/
-
-a.anchorlink {
- font-size: 90%;
- margin-left: var(--spacing-small);
- color: var(--page-foreground-color) !important;
- text-decoration: none;
- opacity: .15;
- display: none;
- transition: opacity .1s ease-in-out, color .1s ease-in-out;
-}
-
-a.anchorlink svg {
- fill: var(--page-foreground-color);
-}
-
-h3 a.anchorlink svg, h4 a.anchorlink svg {
- margin-bottom: -3px;
- margin-top: -4px;
-}
-
-a.anchorlink:hover {
- opacity: .45;
-}
-
-h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink {
- display: inline-block;
-}
+++ /dev/null
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
- <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=9" />
- <meta name="generator" content="Doxygen $doxygenversion" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
-
- <!-- BEGIN opengraph metadata -->
- <meta property="og:title" content="Doxygen Awesome" />
- <meta property="og:image"
- content="https://repository-images.githubusercontent.com/348492097/4f16df80-88fb-11eb-9d31-4015ff22c452" />
- <meta property="og:description"
- content="Custom CSS theme for doxygen html-documentation with lots of customization parameters." />
- <meta property="og:url" content="https://jothepro.github.io/doxygen-awesome-css/" />
- <!-- END opengraph metadata -->
-
- <!-- BEGIN twitter metadata -->
- <meta name="twitter:image:src"
- content="https://repository-images.githubusercontent.com/348492097/4f16df80-88fb-11eb-9d31-4015ff22c452" />
- <meta name="twitter:title" content="Doxygen Awesome" />
- <meta name="twitter:description"
- content="Custom CSS theme for doxygen html-documentation with lots of customization parameters." />
- <!-- END twitter metadata -->
-
- <!--BEGIN PROJECT_NAME-->
- <title>$projectname: $title</title>
- <!--END PROJECT_NAME-->
- <!--BEGIN !PROJECT_NAME-->
- <title>$title</title>
- <!--END !PROJECT_NAME-->
- <link href="./tabs.css" rel="stylesheet" type="text/css" />
- <link rel="icon" type="image/svg+xml" href="./logo.drawio.svg" />
- <script type="text/javascript" src="./jquery.js"></script>
- <script type="text/javascript" src="./dynsections.js"></script>
- <script type="text/javascript" src="./doxygen-awesome-darkmode-toggle.js"></script>
- <script type="text/javascript" src="./doxygen-awesome-fragment-copy-button.js"></script>
- <script type="text/javascript" src="./doxygen-awesome-paragraph-link.js"></script>
- <script type="text/javascript" src="./doxygen-awesome-interactive-toc.js"></script>
- <script type="text/javascript" src="./toggle-alternative-theme.js"></script>
- <script type="text/javascript">
- DoxygenAwesomeFragmentCopyButton.init()
- DoxygenAwesomeDarkModeToggle.init()
- DoxygenAwesomeParagraphLink.init()
- DoxygenAwesomeInteractiveToc.init()
- </script>
- $treeview
- $search
- $mathjax
- <link href="./$stylesheet" rel="stylesheet" type="text/css" />
- $extrastylesheet
-</head>
-
-<body>
-
- <!-- https://tholman.com/github-corners/ -->
- <a href="https://github.com/linuxdeepin/dtkcore" class="github-corner" title="View source on GitHub"
- target="_blank">
- <!--TODO:需要修改此处连接指向项目地址 -->
- <svg viewBox="0 0 250 250" width="40" height="40"
- style="position: absolute; top: 0; border: 0; right: 0; z-index: 99;" aria-hidden="true">
- <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
- <path
- d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
- fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>
- <path
- d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
- fill="currentColor" class="octo-body"></path>
- </svg>
- </a>
- <style>
- .github-corner:hover .octo-arm {
- animation: octocat-wave 560ms ease-in-out
- }
-
- @keyframes octocat-wave {
-
- 0%,
- 100% {
- transform: rotate(0)
- }
-
- 20%,
- 60% {
- transform: rotate(-25deg)
- }
-
- 40%,
- 80% {
- transform: rotate(10deg)
- }
- }
-
- @media (max-width:500px) {
- .github-corner:hover .octo-arm {
- animation: none
- }
-
- .github-corner .octo-arm {
- animation: octocat-wave 560ms ease-in-out
- }
- }
- </style>
-
-
- <div id="top">
- <!-- do not remove this div, it is closed by doxygen! -->
-
- <!--BEGIN TITLEAREA-->
- <div id="titlearea">
- <table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <!--BEGIN PROJECT_LOGO-->
- <td id="projectlogo"><img alt="Logo" src="./$projectlogo" /></td>
- <!--END PROJECT_LOGO-->
- <!--BEGIN PROJECT_NAME-->
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname">$projectname
- <!--BEGIN PROJECT_NUMBER--> <span id="projectnumber">$projectnumber</span>
- <!--END PROJECT_NUMBER-->
- </div>
- <!--BEGIN PROJECT_BRIEF-->
- <div id="projectbrief">$projectbrief</div>
- <!--END PROJECT_BRIEF-->
- </td>
- <!--END PROJECT_NAME-->
- <!--BEGIN !PROJECT_NAME-->
- <!--BEGIN PROJECT_BRIEF-->
- <td style="padding-left: 0.5em;">
- <div id="projectbrief">$projectbrief</div>
- </td>
- <!--END PROJECT_BRIEF-->
- <!--END !PROJECT_NAME-->
- <!--BEGIN DISABLE_INDEX-->
- <!--BEGIN SEARCHENGINE-->
- <td>$searchbox</td>
- <!--END SEARCHENGINE-->
- <!--END DISABLE_INDEX-->
- </tr>
- </tbody>
- </table>
- </div>
- <!--END TITLEAREA-->
- <!-- end header part -->
\ No newline at end of file
+++ /dev/null
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="61px" height="74px" viewBox="-0.5 -0.5 61 74" content="<mxfile host="drawio-plugin" modified="2021-03-16T23:58:23.462Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36" version="13.7.9" etag="JoeaGLJ54FcERO7YrWLQ" type="embed"><diagram id="JMB9aH8b_oZ7EWDuqJgx" name="Page-1">7VdNc5swEP01HDsjkGPDsSVJe+lMZnzoWYENaAwsI8ux6a+vCCtA4KSu62kmSS+M9LT7tB9P0uDxuDx8VaLOv2MKhRew9ODxay8Igigy3xZoCOC8AzIl0w7yB2AtfwKBjNCdTGHrGGrEQsvaBROsKki0gwmlcO+aPWDh7lqLDGbAOhHFHP0hU513aHjFBvwbyCy3O/uMVkphjQnY5iLF/QjiNx6PFaLuRuUhhqKtna1L53f7zGofmIJKn+RAcTyKYkfJUWC6sdlmCnc1mYHScDhWY3Fvzdk8Br/PzCgCsAStGmNCRJy2JDH4pIV8VMG+edS4rCcZcjMDSu+ZVP3fpwpV+rnVh5ndF5hsPP4l16VhvPbN8AErTWI0re7mMRaonpw5Y8tlHBvcsNzKwnpttVDaslZYgcXIhj3NFW56LS1bbrM44l6m4Wq5MLhxzEDfgZKmAKDWtUhklRFNgqVM7LYb0Enu8I9j9dkVC80KtgS6Lb3fGnYVgXSm/1Ez2fFu7oeTYA/CuIUWU1AILR9d/mN9pR3uUJqde7F88leOWhYLl2GLO5UAOY2FP+GxMm3c6CwNlXlKY9oompFZ3Rps59EOkuw8BoH2BTtNs8EfaZbUdYZkXQGuXhDgR9DYRBycXURj00D+UmMT2ktJLnr9B8HG0IzFcPkHYfUe3oPZqfOjMEiDs1+KEw5n9P/+/1f3f/gq1394lt7erqQ+0HVvpsPPRWc+/KHxm18=</diagram></mxfile>"><defs/><g><path d="M 13 57 L 13.01 57.01 L 15.87 50.14 L 18.37 43.14 L 20.91 36.15 L 23.67 29.25 L 26.4 22.33 Q 30 13 33.71 22.28 L 33.55 22.22 L 35.48 26.91 L 37.49 31.64 L 39.48 36.36 L 41.2 40.97 L 43.05 45.63" fill="none" stroke="#010508" stroke-opacity="0.1" stroke-width="6" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 47.51 56.77 L 47.65 56.93 L 45.43 54.91 L 43.41 53.11 L 41.43 51.35 L 39.63 49.8 L 37.48 47.86 L 37.39 47.64 L 39.79 47.17 L 41.9 45.98 L 44.24 45.37 L 46.48 44.52 L 48.62 43.4 L 48.54 43.39 L 48.58 46.09 L 48.04 48.74 L 48.04 51.43 L 47.8 54.1 L 47.51 56.77 Z Z" fill-opacity="0.1" fill="#010508" stroke="#010508" stroke-opacity="0.1" stroke-width="6" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/><path d="M 10 43 L 9.94 42.88 L 12.16 41.98 L 14.31 40.96 L 16.51 40.01 L 18.62 38.89 L 20.88 38.1 Q 30 34 40 34 L 40 33.75 L 42 33.83 L 44 33.8 L 46 33.79 L 48 34.05 L 50 34" fill="none" stroke="#010508" stroke-opacity="0.1" stroke-width="7" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 10 54 L 9.97 53.99 L 12.69 47.07 L 15.43 40.16 L 18.07 33.21 L 20.65 26.24 L 23.4 19.33 Q 27 10 30.71 19.28 L 30.66 19.26 L 32.46 23.91 L 34.55 28.66 L 36.26 33.27 L 38.35 38.03 L 40.05 42.63" fill="none" stroke="#1982d2" stroke-width="6" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 44.51 53.77 L 44.56 53.83 L 42.48 51.97 L 40.5 50.21 L 38.48 48.41 L 36.41 46.56 L 34.48 44.86 L 34.55 45.02 L 36.72 44 L 39 43.24 L 41.21 42.28 L 43.48 41.51 L 45.62 40.4 L 45.78 40.42 L 45.51 43.09 L 45.01 45.74 L 44.87 48.42 L 44.94 51.12 L 44.51 53.77 Z Z" fill="#1982d2" stroke="#1982d2" stroke-width="6" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/><path d="M 7 40 L 7.02 40.05 L 9.28 39.25 L 11.33 38 L 13.48 36.96 L 15.73 36.14 L 17.88 35.1 Q 27 31 37 31 L 37 30.79 L 39 31.11 L 41 30.85 L 43 30.78 L 45 30.89 L 47 31" fill="none" stroke="#1982d2" stroke-width="8" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/></g></svg>
\ No newline at end of file
+++ /dev/null
-
-let original_theme_active = true;
-
-function toggle_alternative_theme() {
- if(original_theme_active) {
- document.documentElement.classList.add("alternative")
- original_theme_active = false;
- } else {
- document.documentElement.classList.remove("alternative")
- original_theme_active = true;
- }
-}
\ No newline at end of file
+++ /dev/null
-/*!
-@~chinese
-@file includes/global/dsysinfo.h
-
-dsysinfo.h是一组用于查询系统信息的静态类
-
-@enum Dtk::Core::DSysInfo::ProductType dsysinfo.h
-@brief 产品信息
-| 值 | 序号 | 含义 |
-|-------------|----|-------|
-| UnknownType | 0 | 未知类型 |
-| deepin | 1 | 深度社区版 |
-| ArchLinux | 2 | |
-| CentOS | 3 | |
-| Debian | 4 | |
-| Fedora | 5 | |
-| LinuxMint | 6 | |
-| Manjaro | 7 | |
-| openSUSE | 8 | |
-| SailfishOS | 9 | |
-| Ubuntu | 10 | |
-| Uos | 11 | |
-| Gentoo | 12 | |
-| NixOS | 13 | |
-
-
-@enum Dtk::Core::DSysInfo::DeepinType dsysinfo.h
-@brief 深度操作系统版本
-| 值 | 序号 | 含义 |
-|--------------------|----|-----------------------|
-| UnknownDeepin | 0 | 未知版本 |
-| DeepinDesktop | 1 | deepin桌面发行版 |
-| DeepinProfessional | 2 | deepin专业版,现为uos专业版 |
-| DeepinServer | 3 | deepin服务器版本,现为uos服务器版 |
-| DeepinPersonal | 4 | deepin个人版,现为uos家庭版 |
-
-@enum Dtk::Core::DSysInfo::LogoType
-@brief 系统的logo类型
-| 值 | 序号 | 含义 |
-|--------------|----|----|
-| Normal | 0 | 正常 |
-| Light | 1 | 亮色 |
-| Symbolic | 2 | 符号 |
-| Transparent | 3 | 水印 |
-
-@enum Dtk::Core::DSysInfo::OrgType
-@brief
-| 值 | 序号 | 含义 |
-|--------------|----|--------------|
-| Distribution | 0 | 当前版本 |
-| Distributor | 1 | 当前发行版 |
-| Manufacturer | 2 | 当前发行版或设备的制造商 |
-
-@enum Dtk::Core::DSysInfo::UosType
-@brief UOS版本类型
-| 值 | 序号 | 含义 |
-|-----------------|----|-------------|
-| UosTypeUnknown | 0 | 未知版本 |
-| UosDesktop | 1 | UOS桌面版 |
-| UosServer | 2 | UOS服务器版 |
-| UosDevice | 3 | UOS设备版 |
-| UosTypeCount | 4 | 记录枚举数量 |
-
-@enum Dtk::Core::DSysInfo::UosEdition
-@brief 详细uos版本
-| 值 | 序号 | 含义 |
-|-------------------|----|---------------------|
-| UosEditionUnknown | 0 | 未知发行版 |
-| UosProfessional | 1 | UOS专业版 |
-| UosHome | 2 | UOS家庭版 |
-| UosCommunity | 3 | 社区版 |
-| UosMilitary | 4 | * |
-| UosEnterprise | 5 | UOS企业版 |
-| UosEnterpriseC | 6 | UOS行业版 |
-| UosEuler | 7 | UOS服务器欧拉版 |
-| UosMilitaryS | 8 | * |
-| UosDeviceEdition | 9 | UOS专用设备版 |
-| UosEducation | 10 | UOS教育版 |
-| UosEditionCount | 11 | 记录枚举数量 |
-
-@enum Dtk::Core::DSysInfo::UosArch
-@brief UOS使用的架构
-| 值 | 序号 | 含义 |
-|----------------|----|--------|
-| UosArchUnknown | 0 | 未知架构 |
-| UosAMD64 | 1 | x86_64 |
-| UosARM64 | 2 | arm64 |
-| UosMIPS64 | 4 | mips64 |
-| UosSW64 | 8 | sw_64 |
-
-
-
-
-@fn static bool Dtk::Core::DSysInfo::isDeepin() //FIXME: 显示错乱 无法修复
-@brief 是否为deepin系统
-@return 0 不是deepin系统
-@return 1 是deepin系统
-
-@fn static bool Dtk::Core::DSysInfo::isDDE()
-@brief 是否使用dde桌面环境
-@note 此方法仅在linux平台下可用
-
-@fn static DeepinType Dtk::Core::DSysInfo::deepinType()
-@brief deepin系统类型
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::deepinTypeDisplayName (const QLocale &locale=QLocale::system())
-@brief 显示的deepin发行版类型名称
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::deepinVersion()
-@brief deepin版本
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::deepinCopyright()
-@brief deepin 开源许可协议
-@note 此方法仅在linux平台下可用
-
-@fn static UosEdition Dtk::Core::DSysInfo::uosEditionType()
-@brief DSysInfo::osEditionType 版本类型 显示版本类型 专业版/个人版/社区版..
-@note 根据 osBuild.B && osBuild.D
-@note 此方法仅在linux平台下可用
-
-@fn static UosArch Dtk::Core::DSysInfo::uosArch()
-@brief DSysInfo::osArch 架构信息(使用一个字节的二进制位,从低位到高位) 【0x8 sw64】【0x4 mips64】【0x2 arm64】【0x1 amd64】
-@note 此处架构是从OsBuild获取的系统版本的Arch信息,并不是指硬件的Arch信息
-@note 此方法仅在linux平台下可用
-
-@fn static QString uosProductTypeName(const QLocale &locale=QLocale::system())
-@brief DSysInfo::osProductTypeName 版本名称 ProductType[xx] 项对应的值, 如果找不到对应语言的默认使用 ProductType的值(Desktop/Server/Device) locale 当前系统语言
-
-@fn static QString Dtk::Core::DSysInfo::uosSystemName(const QLocale &locale=QLocale::system())
-@brief SystemName[xx] 项对应的值, 如果找不到对应语言的默认使用 SystemName 的值 Uniontech OS locale 当前系统语言
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::function uosEditionName(const QLocale &locale=QLocale::system())
-@brief 版本名称 EditionName[xx] 项对应的值, 如果找不到对应语言的默认使用 EditionName 的值(Professional/Home/Community...) locale 当前系统语言
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::spVersion()
-@brief 阶段版本名称 小版本号 A-BC-D 中 BC、 A.B.C 中的 B 返回 SP1-SPxx, 如果正式版返回空 X.Y.Z模式下暂不支持返回此版本号
-@note minVersion.BC == 00 正式版本, minVersion.BC | minVersion.B == 01-99 SP1….SP99
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::udpateVersion()
-@brief 更新版本名称 小版本号 A-BC-D 中 D、A.B.C 模式中的 C 返回 update1… update9, 如果正式版返回空 X.Y.Z模式下暂不支持返回此版本号
-@note minVersion.D == 0;正式版本 minVersion.D | minVersion.C == 1-9;update1… update9,updateA...updateZ
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::majorVersion()
-@brief 主版本号 主版本号 【20】【23】【25】【26】【29】【30】
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::minorVersion()
-@brief 小版本号 【ABCD】 ·[0-9]{4} 【A.B.C】 或者【X.Y.Z】
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::buildVersion()
-@brief 小版本号 系统镜像批次号,按时间顺序(不可回退)从100-999递增
-@note 此方法仅在linux平台下可用
-
-@fn static QString Dtk::Core::DSysInfo::distributionInfoPath ()
-@brie 返回distribution文件地址 一般在`/usr/share/deepin/`目录下
-
-@fn static QString Dtk::Core::DSysInfo::distributionInfoSectionName(OrgType type)
-@brief 返回distribution.info 文件中SectionName字段的值
-
-@fn static Dtk::Core::DSysInfo::distributionOrgName(OrgType type=Distribution, const QLocale &locale=QLocale::system())
-@brief 返回组织名称。使用类型为Distribution来获取当前deepin distribution本身的名称
-
-@fn static QPair<QString,QString>Dtk::Core::DSysInfo::distributionOrgWebsite(OrgType type=Distribution)
-@brief 发行版组织的网站名称和网址。使用 type 作为 Distribution 获取当前 deepin 发行版本身的名称。
-
-@fn static QString Dtk::Core::DSysInfo::distributionOrgLogo(OrgType orgType=Distribution, LogoType type=Normal, const QString &fallback=QString())
-@brief 获得的组织logo路径,如果不存在,则返回给定的其他路径。 使用 type 作为 Distribution 获取当前 deepin 发行版本身的logo。
-
-@fn static QString Dtk::Core::DSysInfo::operatingSystemName()
-@brief 操作系统名
-
-@fn static ProductType Dtk::Core::DSysInfo::productType()
-@brief 产品类型
-
-@fn static QString Dtk::Core::DSysInfo::productVersion()
-@brief 产品版本
-
-@fn static bool Dtk::Core::DSysInfo::isCommunityEdition()
-@brief 检查当前版本是否是社区版 开发者可以使用这种方式来检查我们是否需要启用或禁用社区版或企业版的功能。
-目前的规则:
- 专业版、服务器版、个人版(DeepinType)将被视为企业版。
- Uos(ProductType)将被视为企业版。
-
-@fn static QString Dtk::Core::DSysInfo::computerName()
-@brief 电脑名
-
-@fn static QString Dtk::Core::DSysInfo::cpuModelName()
-@brief cpu模式名
-
-@fn static qint64 Dtk::Core::DSysInfo::memoryInstalledSize()
-@brief 内存安装大小
-
-@fn static qint64 Dtk::Core::DSysInfo::memoryTotalSize()
-@brief 实际内存大小
-
-@fn static qint64 Dtk::Core::DSysInfo::systemDiskSize()
-@brief 系统磁盘大小
-
-@fn static QDateTime Dtk::Core::DSysInfo::bootTime ()
-@brief 系统启动时间点
-
-@fn static QDateTime Dtk::Core::DSysInfo::shutdownTime ()
-@brief 上一次正常关机时间点(重启也会被记录在内)
-
-@fn static qint64 Dtk::Core::DSysInfo::uptime()
-@brief 系统启动到现在时长
-@note 参见`cat /proc/uptime`命令
-
-@fn static Arch Dtk::Core::DSysInfo::arch
-@brief cpu架构信息
-@note 此处架构是从gcc编译器获取的
-
-*/
\ No newline at end of file
--- /dev/null
+/*!
+@~chinese
+@ingroup dfilesystem
+@file include/filesystem/dbasefilewatcher.h
+
+@class Dtk::Core::DBaseFileWatcher
+@brief DBaseFileWatcher 类提供了一系列接口可供监视文件和目录的变动。
+@note 建议使用 DFileWatcher 类,该类是 DBaseFileWatcher 的子类,提供了更多的功能。或者使用DFileWatcherManager类,该类提供了对文件和目录的监视功能。
+@warning 该类是一个虚类,不应该被直接使用,而应该使用 DFileWatcher 类或者 DFileWatcherManager 类。
+
+@fn QUrl Dtk::Core::DBaseFileWatcher::fileUrl()
+@brief 返回文件的统一资源定位符
+@sa [QUrl](https://doc.qt.io/qt-5/qurl.html)
+
+@fn bool Dtk::Core::DBaseFileWatcher::startWatcher()
+@brief 开始监视文件变动
+@return true 成功 false 失败
+@sa DBaseFileWatcher::stopWatcher
+
+@fn bool Dtk::Core::DBaseFileWatcher::stopWatcher()
+@brief 停止监视文件变动
+@return true 成功 false 失败
+@sa DBaseFileWatcher::startWatcher()
+
+@fn bool Dtk::Core::DBaseFileWatcher::restartWatcher()
+@brief 重启监视文件变动
+@return true 成功 false 失败
+@sa DBaseFileWatcher::startWatcher()
+
+@fn virtual void Dtk::Core::DBaseFileWatcher::setEnabledSubfileWatcher(const QUrl &subfileUrl, bool enabled = true)
+@brief 设置是否对`subfileUrl`目录启用文件监视
+@param[in] subfileUrl 设置所针对的 Url
+@param[in] enabled 是否启用文件变动监视
+
+@fn static bool Dtk::Core::DBaseFileWatcher::ghostSignal(const QUrl &targetUrl, SignalType1 signal, const QUrl &arg1)
+@brief 发送一个信号表示目标目录`targetUrl`得到了一个`signal`信号,包含参数`arg1`<br>
+使用方式如下:
+@code
+ DBaseFileWatcher::ghostSignal(QUrl("bookmark:///"), &DBaseFileWatcher::fileDeleted, QUrl("bookmark:///bookmarkFile1"));
+@endcode
+@return 成功发送返回 true,否则返回 false
+
+@fn static bool Dtk::Core::DBaseFileWatcher::ghostSignal(const QUrl &targetUrl, DBaseFileWatcher::SignalType2 signal, const QUrl &arg1, const QUrl &arg2)
+@brief 发送一个信号表示目标目录`targetUrl`得到了一个`signal`信号,包含参数`arg1`和`arg2`<br>
+@details 示例用法:
+@code
+ DBaseFileWatcher::ghostSignal(QUrl("bookmark:///"), &DBaseFileWatcher::fileMoved, QUrl("bookmark:///bookmarkFile1"), QUrl("bookmark:///NewNameFile1"));
+@endcode
+
+@var Dtk::Core::DBaseFileWatcher::fileDeleted(const QUrl &url)
+@brief 文件被删除的信号
+
+@var Dtk::Core::DBaseFileWatcher::fileMoved(const QUrl &fromUrl, const QUrl &toUrl)
+@brief 文件被移动的信号
+
+@var Dtk::Core::DBaseFileWatcher::fileAttributeChanged(const QUrl &url)
+@brief 文件属性被改变的信号
+
+@var Dtk::Core::DBaseFileWatcher::subfileCreated(const QUrl &url)
+@brief 子文件被创建的信号
+
+@var Dtk::Core::DBaseFileWatcher::fileClosed(const QUrl &url)
+@brief 文件被关闭的信号
+
+@var Dtk::Core::DBaseFileWatcher::fileModified(const QUrl &url)
+@brief 文件被修改的信号
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dfilesystem
+@file include/filesystem/dcapfile.h
+
+@class Dtk::Core::DCapFile
+@brief 对于文件操作的安全封装, 提供了带有安全管控的文件读取, 相关漏洞见[CWE_22](https://cwe.mitre.org/data/definitions/22.html)
+
+@fn explicit Dtk::Core::DCapFile(QObject *parent = nullptr)
+@brief 默认构造函数, 创建一个文件默认文件对象
+
+@fn Dtk::Core::DCapFile::DCapFile(const QString &name, QObject *parent)
+@brief 重载的构造函数, 接受传入一个文件名, 并创建一个文件对象
+@note 调用此构造函数相当于调用默认构造函数+`DCapFile::setFileName()`
+
+@fn void Dtk::Core::DCapFile::setFileName(const QString &name)
+@brief 传入需要操作的文件名
+
+@fn bool Dtk::Core::DCapFile::exists() const
+@brief 文件是否存在
+@note 此处的存在指当前由setFileName() 指定的文件或者是在构造时指定的文件是否可读可写
+@note 需要在构造时或者手动指定了文件名才可以使用此函数, 否则请调用其重载的函数
+
+@fn static bool Dtk::Core::DCapFile::exists(const QString &fileName)
+@brief 文件是否存在
+@param[in] fileName 文件名
+@note 此处的存在指的是此函数的传入的文件名指向的文件是否可读可写
+
+@fn QString Dtk::Core::DCapFile::readLink() const
+@brief 读取软连接, 如果软连接指向的文件不允许读写, 则返回空字符串
+@note 此方法在Qt版本>=5.13后**废弃**
+@return 返回软连接指向的文件或者目录的绝对路径
+@note 需要在构造时或者手动指定了文件名才可以使用此函数, 否则请调用其重载的函数
+@sa [readLink](https://doc.qt.io/qt-5/qfile-obsolete.html#readLink-1)
+
+@fn QString Dtk::Core::DCapFile::symLinkTarget() const
+@brief 这是一个重载函数<br>
+ 返回符号链接, 或Windows上的快捷方式指向的文件或目录的绝对路径, 如果该对象不是符号链接, 则返回一个空字符串。
+
+@fn bool Dtk::Core::DCapFile::remove()
+@brief 如果文件存在则删除文件
+@note 此处的存在指当前由setFileName() 指定的文件或者是在构造时指定的文件是否可读可写
+@note 需要在构造时或者手动指定了文件名才可以使用此函数, 否则请调用其重载的函数
+@note 文件需要在删除前被关闭
+
+@fn static bool Dtk::Core::DCapFile::remove(const QString &fileName)
+@brief 如果文件存在则删除文件
+@param[in] fileName 文件名
+@note 此处的存在指的是此函数的传入的文件名指向的文件是否可读可写
+@note 文件需要在删除前被关闭
+@sa DCapFile::remove()
+
+@fn bool Dtk::Core::DCapFile::moveToTrash()
+@brief 如果文件存在则将文件移动至默认回收站(垃圾桶)
+@note 此处的存在指当前由setFileName() 指定的文件或者是在构造时指定的文件是否可读可写
+@note 需要在构造时或者手动指定了文件名才可以使用此函数, 否则请调用其重载的函数
+@note 此方法仅在Qt版本>=5.15.0后可用
+
+@fn bool Dtk::Core::DCapFile::moveToTrash(const QString &fileName, QString *pathInTrash)
+@brief 如果传入文件名对应文件存在则将文件移动至指定回收站(垃圾桶)
+@note 此处的存在指的是此函数的传入的文件名指向的文件是否可读可写
+@note 此方法仅在Qt版本>=5.15.0后可用
+@param[in] fileName 文件名
+@param[in] pathInTrash 回收站路径
+
+@fn bool Dtk::Core::DCapFile::rename(const QString &newName)
+@brief 如果文件名存在则重命名文件
+@param[in] newName 新文件名
+@note 需要在构造时或者手动指定了文件名才可以使用此函数, 否则请调用其重载的函数
+
+@fn static bool Dtk::Core::DCapFile::rename(const QString &oldName, const QString &newName)
+@brief 如果文件名存在则重命名文件
+@param[in] oldName 旧文件名
+@param[in] newName 新文件名
+
+@fn bool Dtk::Core::DCapFile::link(const QString &newName)
+@brief 创建一个名为newName的链接
+@details 该链接指向当前由`setFileName()`指定的文件或者是在构造时指定的文件。链接是什么取决于底层文件系统(无论是Windows上的快捷方式还是Unix上的符号链接)。如果成功, 则返回ture;否则返回false
+@note 如果是windows系统的newName参数必须有`.lnk`合法后缀才可用
+@param[in] newName 新文件名
+
+@fn static bool Dtk::Core::DCapFile::link(const QString &oldname, const QString &newName)
+@brief 该函数是重载`DCapFile::link()`区别是需要手动传入原始文件名
+@sa DCapFile::link(const QString &newName)
+
+@fn bool Dtk::Core::DCapFile::copy(const QString &newName)
+@brief `setFileName()`指定的文件或者是在构造时指定的文件复制一份, 名为newName<br>
+ 如果成功, 则返回ture;否则返回false
+@note 确保文件在复制之前是关闭的
+@note 如果复制的文件是一个符号链接(symlink), 它所指的文件被复制, 而不是链接本身。除了权限
+ 会被复制外, 其他的文件元数据都不会被复制。
+@note 如果一个名称为 newName 的文件已经存在, `copy()`将会返回true但是并不会覆盖它
+
+@fn static bool Dtk::Core::DCapFile::copy(const QString &fileName, const QString &newName)
+@brief 该函数是重载`DCapFile::copy(const QString &newName)`区别是需要手动传入原始文件名
+@sa DCapFile::copy(const QString &newName)
+
+@fn bool Dtk::Core::DCapFile::open(OpenMode flags)
+@brief 使用OpenMode模式打开文件, 如果成功返回true;否则返回false<br>
+@details 模式如下:<br>
+ NotOpen = 0x0000, <br>
+ ReadOnly = 0x0001, <br>
+ WriteOnly = 0x0002, <br>
+ ReadWrite = ReadOnly | WriteOnly, <br>
+ Append = 0x0004, <br>
+ Truncate = 0x0008, <br>
+ Text = 0x0010, <br>
+ Unbuffered = 0x0020, <br>
+ NewOnly = 0x0040, <br>
+ ExistingOnly = 0x0080<br>
+@note 在只写或读写模式下, 如果相关文件不存在, 该函数将在打开文件之前尝试创建一个新文件
+
+@fn bool Dtk::Core::DCapFile::resize(qint64 sz)
+@brief 设置文件大小sz(以字节为单位)。如果调整大小成功, 则返回true;否则为false。如果sz大于当前文件, 则新字节将设置为 0;如果sz较小, 则文件将被简单地截断
+@note 如果文件不存在, 此函数可能会无效
+
+@fn static bool Dtk::Core::DCapFile::resize(const QString &filename, qint64 sz)
+@brief 该函数是重载`DCapFile::resize(qint64 sz)`区别是手动指定文件名
+@sa DCapFile::resize(qint64 sz)
+
+*/
+
+/*!
+@class Dtk::Core::DCapFile
+@brief 对于文件夹操作的封装
+
+@fn Dtk::Core::DCapDir::DCapDir(const DCapDir &)
+@brief 拷贝构造函数 构造一个DCapDir对象, 该对象是目录目录的DCapDir对象的副本
+
+@fn Dtk::Core::DCapDir::DCapDir(const QString &path = QString())
+@brief 构造指向给定目录路径的DCapDir。如果 path 为空, 则使用程序的工作目录`.`
+
+@fn Dtk::Core::DCapDir::DCapDir(const QString &path,
+ const QString &nameFilter, SortFlags sort = SortFlags(Name | IgnoreCase),
+ Filters filter = AllEntries)
+@brief 构造具有路径路径的DCapDir对象
+@details 该 DCapDir 使用nameFilter按名称筛选其条目, 并使用筛选器 按属性筛选其条目。它还使用排序对名称进行排序。<br>
+ 默认名称筛选器是一个空字符串, 它不排除任何内容;默认筛选器是“所有条目”, 这也意味着不排除任何内容。默认排序为“名称|忽略大小写, 即按名称排序, 不区分大小写。
+ 如果path为空字符串, DCapDir 将使用 “.”(当前目录)<br>
+ 如果nameFilter为空字符串, DCapDir 将使用名称筛选器“*”(所有文件)
+@note 路径不需要存在
+
+@fn void Dtk::Core::DCapDir::setPath(const QString &path)
+@brief 将目录的路径设置为path。该路径被清除了多余的"."、"... "和多个分隔符。没有检查这个路径的
+ 目录是否真的存在;<br>
+ 路径可以是绝对路径也可以是相对路径, 绝对路径以目录分隔符"/"开始(在Windows下可以选择在前面加一个驱动器号, 例如: C:\)<br>
+ 相对路径以目录名开始, 并指定一个相对于当前目录的路径。一个绝对路径的例子是字符串"/etc/apt", 一个相对路径例子是 "src/1/"<br>
+
+@fn bool Dtk::Core::DCapDir::cd(const QString &dirName)
+@brief 将DCapDir的目录更改为dirName。
+ 如果新目录存在, 则返回true;否则返回false
+ 请注意, 如果新目录不存在, 则不执行逻辑`cd()`操作
+
+@fn QStringList Dtk::Core::DCapDir::entryList(Filters filters = NoFilter, SortFlags sort = NoSort) const
+@brief 返回目录中所有文件和目录的名称列表
+@details 这些名称根据以前使用`setNameFilters()` 和`setFilter()`
+ 设置的名称和属性筛选器排序, 并根据使用`setSorting() 设置的标志进行排序。<br>
+ 可以使用过滤器和排序参数覆盖属性过滤器和排序规范。
+ 如果目录不可读、不存在或与规范不匹配, 则返回空列表。
+
+@fn QString Dtk::Core::DCapDir::entryList(const QStringList &nameFilters, Filters filters = NoFilter,
+ SortFlags sort = NoSort)
+@brief 重载函数, 返回目录中所有文件和目录的名称列表
+@sa entryList(Filters filters = NoFilter, SortFlags sort = NoSort)
+
+@fn bool Dtk::Core::DCapDir::mkdir(const QString &dirName) const
+@brief 创建文件夹
+
+@fn bool Dtk::Core::DCapDir::rmdir(const QString &dirName) const
+@brief 移除文件夹
+
+@fn bool Dtk::Core::DCapDir::mkpath(const QString &dirPath)
+@brief 创建目录
+
+@fn bool Dtk::Core::DCapDir::rmpath(const QString &dirPath)
+@brief 移除目录
+
+@fn bool Dtk::Core::DCapDir::exists() const
+@brief 文件夹是否存在(如果找到同名文件, 此函数将返回 false)
+
+@fn bool Dtk::Core::DCapDir::exists(const QString &name) const
+@brief 指定文件夹是否存在(如果找到同名文件, 此函数将返回 false)
+
+@fn bool Dtk::Core::DCapDir::remove(const QString &fileName)
+@brief 移除文件夹
+
+@fn bool Dtk::Core::DCapDir::rename(const QString &oldName, const QString &newName)
+@brief 重命名文件夹
+@param[in] oldName 旧文件夹名
+@param[in] newName 新文件夹名
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dfilesystem
+@file include/filesystem/dfilesystemwatcher.h
+
+@class DFileSystemWatcher
+@brief 监听文件系统变化的类
+@details
+ DFileSystemWatcher监视文件系统对文件的更改和目录,通过观察指定的path列表。<br>
+ 调用addPath()来监视特定的文件或目录。多个path可以使用addPaths()函数添加。现有path可以使用removePath()和removePaths()函数删除。<br>
+ DFileSystemWatcher检查添加到其中的每个path。具有以下特性的文件添加到DFileSystemWatcher可以使用函数Files()和使用函数directories()创建的目录。<br>
+ fileChanged()信号在文件被修改时发出,重命名或从磁盘中删除。类似地,directoryChanged()在目录或其内容被修改或移除。<br>
+ 请注意,DFileSystemWatcher只停止监视一次文件,它们被重命名或从磁盘和目录中删除一次,它们已从磁盘中移除。
+@note 在运行不支持inotify的Linux内核的系统上,包含被监视路径的文件系统不能被卸载。<br>
+ 默认情况下,Windows CE不支持目录监控,这取决于安装的文件系统驱动程序。<br>
+ 监视文件和目录的行为修改操作会消耗系统资源。这意味着有一个限制进程可以使用的文件和目录的数量同时监控。
+
+@fn DFileSystemWatcher::DFileSystemWatcher(QObject *parent)
+@brief 构造函数,构造一个新的文件系统监视器对象。
+
+@fn DFileSystemWatcher::DFileSystemWatcher(const QStringList &paths, QObject *parent = Q_NULLPTR)
+@brief 构造函数,构造一个新的文件系统监视器对象,监控指定路径列表。
+@param paths 要监听的路径列表
+
+@fn bool DFileSystemWatcher::addPath(const QString &file)
+@brief 添加要监听的路径
+@details 如果path存在,则将path添加到文件系统监视器。如果path不存在或已经存在,则不添加它由文件系统监视程序监视。<br>
+ 如果path指定了一个目录,则调用directoryChanged()信号将在path被修改或从磁盘中删除时发出。否则,当path被修改、重命名或删除。,就会触发fileChanged()信号<br>
+ 如果监视成功,则返回true。<br>
+ 监视故障的原因通常与系统有关,但是可能包括资源不存在、访问失败或总监视数量限制,如果平台有一个。
+@note 可能有一个系统依赖的数量限制可以同时监控的文件和目录。<br>
+ 如果达到了这个限制,path将不会被监控,返回false。
+@param[in] file 要监听的路径
+@sa DFileSystemWatcher::addPaths()
+@sa DFileSystemWatcher::removePath()
+
+@fn QStringList DFileSystemWatcher::addPaths(const QStringList &files)
+@brief 添加要监听的路径列表
+@details 将path中的每个path添加到文件系统监视程序。path如果不存在,或者已经存在,则不添加由文件系统监视程序监视。<br>
+ 如果path指定了一个目录,则调用directoryChanged()信号将在path被修改或从磁盘中删除时触发。否则,当path被修改、重命名或删除。,就会触发fileChanged()信号<br>
+ 返回值是一个无法被监视的路径列表。<br>
+ 监视故障的原因通常与系统有关,但是可能包括资源不存在、访问失败或总监视数量限制,如果平台有一个。<br>
+@note 可能有一个系统依赖的数量限制可以同时监控的文件和目录。<br>
+ 如果达到了这个限制,多余的path就不会达到,它们将被添加到返回的QStringList中。
+@param[in] files 要监听的路径列表
+@sa DFileSystemWatcher::addPath()
+@sa DFileSystemWatcher::removePaths()
+
+@fn bool DFileSystemWatcher::removePath(const QString &file)
+@brief 移除监听的路径
+@details 从文件系统监视程序中删除指定的path。<br>
+ 如果监视成功删除,则返回true。<br>
+ 监视删除失败的原因通常与系统有关,但可能是因为path已经被删除了。
+@sa DFileSystemWatcher::removePaths()
+@sa DFileSystemWatcher::addPath()
+
+@fn QStringList DFileSystemWatcher::removePaths(const QStringList &files)
+@brief 移除监听的路径列表
+@details 从文件系统监视程序中删除指定的path。<br>
+ 返回值是一个无法被监视的路径列表。<br>
+ 监视删除失败的原因通常与系统有关,但可能是因为path已经被删除了。
+@sa DFileSystemWatcher::removePath()
+@sa DFileSystemWatcher::addPaths()
+
+@fn QStringList DFileSystemWatcher::directories() const
+@brief 获取监听的目录列表
+@sa DFileSystemWatcher::files()
+
+@fn QStringList DFileSystemWatcher::files() const
+@brief 获取监听的文件列表
+@sa DFileSystemWatcher::directories()
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dfilesystem
+@file include/filesystem/dfilewatcher.h
+@class DFileWatcher
+@brief DFileWatcher 类提供了对 DBaseFileWatcher 接口的实现,可供监视文件和目录的变动
+
+@fn DFileWatcher::DFileWatcher(const QString &filepath, QObject *parent = 0)
+@brief 构造函数
+@param filepath 要监视的文件或目录的路径
+@param parent 父对象
+
+@fn void DFileWatcher::onFileDeleted(const QString &path, const QString &name)
+@brief 当文件被删除时触发的信号
+@param[in] path 文件所在的目录路径
+@param[in] name 文件名
+
+@fn void DFileWatcher::onFileAttributeChanged(const QString &path, const QString &name)
+@brief 当文件属性发生变化时触发的信号
+@param[in] path 文件所在的目录路径
+@param[in] name 文件名
+
+@fn void DFileWatcher::onFileMoved(const QString &fromPath, const QString &fromName, const QString &toPath, const QString &toName)
+@brief 当文件被移动时触发的信号
+@param[in] fromPath 文件原来所在的目录路径
+@param[in] fromName 文件原来的文件名
+@param[in] toPath 文件现在所在的目录路径
+@param[in] toName 文件现在的文件名
+
+@fn void DFileWatcher::onFileModified(const QString &path, const QString &name)
+@brief 当文件被修改时触发的信号
+@param[in] path 文件所在的目录路径
+@param[in] name 文件名
+
+@fn void DFileWatcher::onFileCreated(const QString &path, const QString &name)
+@brief 当文件被创建时触发的信号
+@param[in] path 文件所在的目录路径
+@param[in] name 文件名
+
+@fn void DFileWatcher::onFileClosed(const QString &path, const QString &name)
+@brief 当文件被关闭时触发的信号
+@param[in] path 文件所在的目录路径
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dfilesystem
+@file include/filesystem/dfilewatchermanager.h
+
+@class DFileWatcherManager
+@brief DFileWatcherManager 类可以帮助管理一系列 DFileWatcher 文件监视器,并在文件变动时发送信号通知.
+@details
+示例代码:
+```cpp
+
+#include "dfilewatchermanager"
+#include <QCoreApplication>
+#include <QTemporaryFile>
+#include <QDebug>
+#include <QTimer>
+DCORE_USE_NAMESPACE
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+ DFileWatcherManager manager;
+ QTemporaryFile tmpfile1; // 创建临时文件1
+ tmpfile1.open();
+ QFile file1( tmpfile1.fileName());
+ QTemporaryFile tmpfile2; // 创建临时文件2
+ tmpfile2.open();
+ QFile file2( tmpfile2.fileName());
+
+ manager.add(tmpfile1.fileName());// 监控临时文件1
+ manager.add(tmpfile2.fileName());// 监控临时文件2
+
+ QObject::connect(&manager, &Dtk::Core::DFileWatcherManager::fileModified, &app, [=](const QString value) {
+ qDebug() << "文件发生变动:" << value;
+ }); // 文件发生变动时打印文件路径
+
+ QObject::connect(&manager, &Dtk::Core::DFileWatcherManager::fileDeleted, &app, [=](const QString value) {
+ qDebug() << "文件被删除:" << value;
+ });
+
+
+ file1.open(QIODevice::WriteOnly|QIODevice::Text);// 修改临时文件1
+ file1.write("test");
+ file1.close();
+
+ file2.open(QIODevice::WriteOnly|QIODevice::Text);// 修改临时文件2
+ file2.write("test");
+ file2.close();
+
+ qDebug() << manager.watchedFiles();// 打印所有被监控的文件路径
+ qDebug() << "---------------------------";
+ app.processEvents();// 处理事件
+ manager.removeAll();// 移除所有的监控
+ qDebug() << manager.watchedFiles();// 打印所有被监控的文件路径
+ return app.exec();
+}
+```
+上面代码演示了如何使用 DFileWatcherManager 类来监控文件变动和清除文件变动的监控.
+具体可以参照源码中的example文件夹中的文件变动监控例子.
+
+@fn DFileWatcher* DFileWatcherManager::add(const QString &filePath)
+@brief 为路径`filePath`创建 DFileWatcher 并将其添加到 DFileWatcherManager 中.
+@return 被创建并添加到 DFileWatcherManager 的 DFileWatcher
+
+@fn void DFileWatcherManager::remove(const QString &filePath)
+@brief 从 DFileWatcherManager 中移除路径`filePath`对应的 DFileWatcher.
+
+@fn void DFileWatcherManager::removeAll()
+@brief 从 DFileWatcherManager 中移除所有的 DFileWatcher.
+
+@fn void DFileWatcherManager::watchedFiles()
+@brief 获取 DFileWatcherManager 中所有的 DFileWatcher.
+
+@var void DFileWatcherManager::fileDeleted(const QString &filePath)
+@brief 当路径`filePath`对应的文件被删除时发送此信号.
+
+@var void DFileWatcherManager::fileAttributeChanged(const QString &filePath)
+@brief 当路径`filePath`对应的文件属性发生变化时发送此信号.
+
+@var void DFileWatcherManager::fileMoved(const QString &fromFilePath, const QString &toFilePath)
+@brief 当路径`fromFilePath`对应的文件被移动到路径`toFilePath`时发送此信号.
+
+@var void DFileWatcherManager::fileClosed(const QString &filePath)
+@brief 当路径`filePath`对应的文件被关闭时发送此信号.
+
+@var void DFileWatcherManager::fileModified(const QString &filePath)
+@brief 当路径`filePath`对应的文件被修改时发送此信号.
+
+@var void DFileWatcherManager::subfileCreated(const QString &filePath)
+@brief 当路径`filePath`对应的文件夹中有新的子文件被创建时发送此信号.
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dfilesystem
+@file include/filesystem/dstandardpaths.h
+
+@class DStandardPaths
+@brief DStandardPaths 类描述了一些标准的文件路径,包括XDG文件路径,locate等
+
+@fn static QString DStandardPaths::writableLocation(QStandardPaths::StandardLocation type)
+@brief DStandardPaths提供兼容Snap/Dtk标准的路径模式。DStandardPaths实现了Qt的QStandardPaths主要接口。此处返回可写路径
+
+@fn static QStringList DStandardPaths::standardLocations (QStandardPaths::StandardLocation type)
+@brief DStandardPaths提供兼容Snap/Dtk标准的路径模式。DStandardPaths实现了Qt的QStandardPaths主要接口。此处返回所有Standardpath
+
+@fn static QString DStandardPaths::locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile)
+@brief 在 type 的标准位置查找名为 fileName 的文件或目录。选项标志允许您指定是否查找文件或目录。默认情况下,此标志设置为 LocateFile。返回找到的第一个文件或目录的绝对路径,否则返回空字符串。
+
+@fn static QStringList DStandardPaths::locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile)
+@brief 在类型的标准位置中按名称 fileName 查找所有文件或目录。选项标志允许您指定是否查找文件或目录。默认情况下,此标志设置为 LocateFile。返回找到的所有文件的列表。
+
+@fn static QString DStandardPaths::findExecutable(const QString &executableName, const QStringList &paths = QStringList())
+@brief 同QStandardPaths::findExecutable, 查找可执行文件
+
+@fn static void DStandardPaths::setMode(DStandardPaths::Mode mode)
+@brief 同QStandardPaths::setTestModeEnabled, 设置是否是测试模式
+
+@fn static QString DStandardPaths::homePath()
+@brief 返回家目录
+
+@fn static QString DStandardPaths::homePath(const uint uid)
+@brief 用uid返回家目录
+
+@fn static QString DStandardPaths::path(DStandardPaths::XDG type)
+@brief 返回对应的xdg目录
+
+@fn static QString DStandardPaths::path(DStandardPaths::DSG type)
+@brief 返回对应Dsg目录
+
+@fn static QStringList DStandardPaths::paths(DStandardPaths::DSG type)
+@brief 返回所有DSG下所有目录
+
+@fn static QString DStandardPaths::filePath(DStandardPaths::XDG type, QString fileName)
+@brief 用xdg和文件名称拼接,返回文件绝对路径
+
+@fn static QString DStandardPaths::filePath(DStandardPaths::DSG type, QString fileName)
+@brief 用dsg和文件名称拼接,返回文件绝对路径
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dfilesystem
+@file include/filesystem/dtrashmanager.h
+@class DTrashManager
+@brief dtk垃圾管理器提供管理文件回收站的功能。
+@details 非常简单的一个类
+
+@fn ststic DTrashManager *DTrashManager::instance()
+@brief 获取DTrashManager的实例
+
+@fn bool DTrashManager::trashIsEmpty() const
+@brief 判断回收站是否为空
+
+@fn bool DTrashManager::cleanTrash()
+@brief 清空回收站
+
+@fn bool DTrashManager::moveToTrash(const QString &filePath, bool followSymlink = false)
+@brief 将文件移动到回收站
+
+*/
--- /dev/null
+@page dfilesystem dfilesystem--dtk文件系统操作的封装
+
+
+# Dlog:dtk日志组件
+
+TODO:添加filesystem组件使用说明
+@defgroup dfilesystem
+@brief dtk文件系统操作的封装
--- /dev/null
+/*!
+@~chinese
+@file include/global/dconfig.h
+@ingroup dglobal
+@class Dtk::Core::DConfigBackend dconfig.h
+@brief 配置后端的抽象接口。
+@details 所有DConfig使用的配置后端都继承此类,用户可以继承此类实现自己的配置后端。
+
+@sa FileBackend
+@sa DBusBackend
+@sa QSettingBackend
+
+@fn Dtk::Core::DConfigBackend::~DConfigBackend()
+@brief DConfigBackend析构函数
+@sa FileBackend::~FileBackend()
+@sa DBusBackend::~DBusBackend()
+@sa QSettingBackend::~QSettingBackend()
+
+@fn bool Dtk::Core::DConfigBackend::isValid() const = 0
+@brief 判断此后端是否可用
+@sa DConfig::isValid()
+@sa FileBackend::isValid()
+@sa DBusBackend::isValid()
+@sa QSettingBackend::isValid()
+
+@fn bool Dtk::Core::DConfigBackend::load(const QString &) = 0
+@brief 初始化后端
+@details appId 管理的配置信息key值,默认为应用程序名称。
+@sa FileBackend::load()
+@sa DBusBackend::load()
+@sa QSettingBackend::load()
+
+@fn QStringList Dtk::Core::DConfigBackend::keyList() = 0
+@brief 获得所有可用的配置项名称
+@sa DConfig::keyList()
+@sa FileBackend::keyList()
+@sa DBusBackend::keyList()
+@sa QSettingBackend::keyList()
+
+@fn QVariant Dtk::Core::DConfigBackend::value(const QString &key, const QVariant &fallback = QVariant()) const = 0
+@brief 根据配置项名称获得对应值
+@param[in] key 配置项名称
+@param[in] fallback 没有获取到配置项值后提供的默认值
+@sa DConfig::value()
+@sa FileBackend::value()
+@sa DBusBackend::value()
+@sa QSettingBackend::value()
+
+@fn void Dtk::Core::DConfigBackend::setValue(const QString &key, const QVariant &value) = 0
+@brief 根据配置项名称设置其值
+@param[in] key 配置项名称
+@param[in] value 需要更新的值
+@sa DConfig::setValue()
+@sa FileBackend::setValue()
+@sa DBusBackend::setValue()
+@sa QSettingBackend::setValue()
+
+@fn void Dtk::Core::DConfigBackend::reset(const QString &key)
+@brief 设置其配置项对应的默认值,此值为经过override机制覆盖后的值,不一定为此配置文件中meta中定义的值。
+@param[in] key 配置项名称
+@sa DConfig::reset()
+@sa FileBackend::reset()
+@sa DBusBackend::reset()
+@sa QSettingBackend::reset()
+
+@fn QString Dtk::Core::DConfigBackend::name() const = 0
+@brief 后端配置的唯一标识
+@sa FileBackend::name()
+@sa DBusBackend::name()
+@sa QSettingBackend::name()
+
+@fn bool Dtk::Core::DConfigBackend::isDefaultValue(const QString &key)
+@brief 检测指定配置项名称对应的值是否为默认值。
+@param[in] key 配置项名称
+@sa DConfig::isDefaultValue()
+@sa FileBackend::isDefaultValue()
+@sa DBusBackend::isDefaultValue()
+@sa QSettingBackend::isDefaultValue()
+
+@class Dtk::Core::QSettingBackend dconfig.h
+@brief QSetting后端,继承自DConfigBackend抽象接口,并实现了虚函数。
+@sa DConfigBackend
+
+@fn QSettingBackend Dtk::Core::QSettingBackend::QSettingBackend(DConfigPrivate* o)
+@brief QSettingBackend构造函数
+
+@class Dtk::Core::DConfigPrivate dconfig.h
+@brief DConfig的私有实现
+
+@fn DConfigPrivate Dtk::Core::DConfigPrivate::DConfigPrivate()
+@brief DConfigPrivate构造函数
+
+@fn bool Dtk::Core::DConfigPrivate::invalid()
+@brief 判断此后端是否可用
+
+@fn DConfigBackend* Dtk::Core::DConfigPrivate::getOrCreateBackend()
+@brief 创建一个配置后端
+@details 默认使用的配置后端会优先根据环境变量来选择配置中心的D-Bus接口还是文件配置后端接口。若没有配置此环境变量,则根据是否有配置中心提供D-Bus服务来选择配置中心服务还是文件配置后端接口。
+
+@fn DConfigBackend* Dtk::Core::DConfigPrivate::createBackendByEnv()
+@brief 创建一个配置后端
+@details 尝试根据环境变量来选择配置中心的D-Bus接口还是文件配置后端接口。
+
+@var QString Dtk::Core::DConfigPrivate::appId
+@brief 配置文件所属的应用Id,为空时默认为本应用Id。
+
+@var QString Dtk::Core::DConfigPrivate::name
+@brief 配置文件名
+
+@var QString Dtk::Core::DConfigPrivate::subpath
+@brief 配置文件对应的子目录
+
+@var QScopedPointer<DConfigBackend> Dtk::Core::DConfigPrivate::backend
+@brief 配置策略后端
+
+@class Dtk::Core::DConfig dconfig.h
+@brief 配置策略提供的接口类
+@details
+## 概述
+
+此接口规范定义了开发库所提供的关于配置文件读写的相关接口,如果应用程序所使用的开发库实现了此规范,则程序应当优先使用开发库提供的接口。
+
+项目目录结构如下:
+```bash
+├── CMakeLists.txt
+├── config
+│ └── example.json
+└── main.cpp
+```
+
+## CMakeLists.txt
+
+```cmake
+cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
+
+project(dconfig-example VERSION 1.0.0 LANGUAGES CXX) # 指定项目名称, 版本, 语言 cxx就是c++
+
+set(CMAKE_CXX_STANDARD 11) # 指定c++标准
+set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
+
+set(CMAKE_AUTOMOC ON) # 支持qt moc
+set(CMAKE_AUTORCC ON) # support qt resource file # 支持qt资源文件
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 支持 clangd
+
+if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
+ set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
+endif()
+
+find_package(Qt5 REQUIRED COMPONENTS Core) # 寻找Qt5组件Core
+find_package(Dtk REQUIRED COMPONENTS Core) # 寻找Dtk组件Core
+
+add_executable(${PROJECT_NAME} # 生成可执行文件
+ main.cpp
+)
+
+target_link_libraries(${PROJECT_NAME} PRIVATE # 添加需要链接的共享库
+ Qt5::Core
+ dtkcore
+)
+
+# dtk_add_config_meta_files函数,部署一些"meta"的配置。
+# 函数定义在dtkcore的cmake目录下
+# APPID 应用的ID
+# FILES 需要部署的文件。
+dtk_add_config_meta_files(
+ APPID ${PROJECT_NAME}
+ FILES ./config/example.json
+)
+```
+
+## example.json
+```json
+{
+ "magic": "dsg.config.meta",
+ "version": "1.0",
+ "contents": {
+ "canExit": {
+ "value": true,
+ "serial": 0,
+ "flags": ["global"],
+ "name": "I am name",
+ "name[zh_CN]": "我是名字",
+ "description": "I am description",
+ "permissions": "readwrite",
+ "visibility": "private"
+ },
+ "key1": {
+ "value": "125",
+ "serial": 0,
+ "flags": ["nooverride"],
+ "name": "I am name",
+ "name[zh_CN]": "我是名字",
+ "description": "I am description",
+ "permissions": "readwrite",
+ "visibility": "public"
+ },
+ "number": {
+ "value": 1,
+ "serial": 0,
+ "flags": ["global"],
+ "name": "array value type",
+ "permissions": "readwrite",
+ "visibility": "public"
+ },
+ "array": {
+ "value": ["value1", "value2"],
+ "serial": 0,
+ "flags": ["global"],
+ "name": "array",
+ "permissions": "readwrite",
+ "visibility": "public"
+ },
+ "map": {
+ "value": {"key1": "value1", "key2": "value2"},
+ "serial": 0,
+ "flags": ["global"],
+ "name": "map",
+ "permissions": "readwrite",
+ "visibility": "public"
+ }
+ }
+}
+```
+
+## main.cpp
+```cpp
+#include <DConfig>
+#include <QDebug>
+#include <QCoreApplication>
+
+DCORE_USE_NAMESPACE
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ // 构造DConfig,元数据文件名example,与元数据安装目录的/usr/share/dsg/configs/APPID名(可执行文件名)对应目录/example.json,
+ DConfig config("example");
+
+ // 判断是否有效
+ if (!config.isValid()) {
+ qWarning() << QString("DConfig无效, name:[%1].").
+ arg(config.name());
+ return 0;
+ }
+
+ // 获取所有配置项的key
+ qDebug() << "所有的所有配置项的key:" << config.keyList();
+
+ // 获取指定配置项的值,配置项可以是字符串,数组,map容器,布尔值,整型,详见example.json
+ qDebug() << "canExit对应的值:" << config.value("canExit").toBool();
+
+ QVariantMap map;
+ for (int i = 0; i < 1; i++) {
+ QVariantMap nestItem;
+ for (int j = 0; j < 1; j++) {
+ nestItem[QString::number(j)] = QString::number(j);
+ }
+ map[QString::number(i)] = nestItem;
+ }
+
+ QScopedPointer<DConfig> heapConfig;
+ heapConfig.reset(new DConfig("example"));
+
+ if (!heapConfig->isValid()) {
+ qWarning() << QString("DConfig无效, name:[%1].").
+ arg(heapConfig->name());
+ return 0;
+ }
+
+ // 监听值改变的信号
+ const bool &oldValue = heapConfig->value("canExit").toBool();
+ QObject::connect(heapConfig.get(), &DConfig::valueChanged, [oldValue,&heapConfig](const QString &key){
+ qDebug() << "canExit原来的值:" << oldValue << ", canExit新的值:" << heapConfig->value(key).toBool();
+ });
+
+ // 重置canExit的值
+ heapConfig->setValue("canExit", !oldValue);
+
+ return a.exec();
+}
+```
+
+## 从源码构建
+```bash
+mkdir build && cd build
+# 修改路径前缀为/usr,GNU标准的默认值为/usr/local
+cmake .. -DCMAKE_INSTALL_PREFIX=/usr
+make
+sudo make install
+```
+结果如下图
+
+
+
+@fn DConfig Dtk::Core::DConfig(const QString &name, const QString &subpath, QObject *parent)
+@brief 构造配置策略提供的对象
+@param[in] name 配置文件名
+@param[in] subpath 配置文件对应的子目录
+@param[in] parent 父对象
+
+@fn DConfig Dtk::Core::DConfig(DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent)
+@brief 使用自定义的配置策略后端构造对象
+@param[in] backend 调用者继承于DConfigBackend的配置策略后端
+@param[in] name 配置文件名
+@param[in] subpath 配置文件对应的子目录
+@param[in] parent 父对象
+
+@fn static DConfig* Dtk::Core::DConfig::create(const QString &appId, const QString &name, const QString &subpath, QObject *parent)
+@brief 构造配置策略提供的对象,指定配置所属的应用Id,管理某一特定应用的配置。
+@param[in] appId 配置文件所属的应用Id,为空时默认为本应用Id
+@param[in] name 配置文件名
+@param[in] subpath 配置文件对应的子目录
+@param[in] parent 父对象
+@return 构造的配置策略对象,由调用者释放
+
+@fn static DConfig* Dtk::Core::DConfig::create(DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent)
+@brief 构造配置策略提供的对象,指定配置所属的应用Id。
+@param[in] backend 调用者继承于DConfigBackend的配置策略后端
+@param[in] appId 配置文件所属的应用Id,为空时默认为本应用Id
+@param[in] name 配置文件名
+@param[in] subpath 配置文件对应的子目录
+@param[in] parent 父对象
+@return 构造的配置策略对象,由调用者释放
+
+@fn static DConfig* Dtk::Core::DConfig::createGeneric(const QString &name, const QString &subpath, QObject *parent)
+@brief 构造配置策略提供的对象,用来管理与应用无关的配置。
+@param[in] name 配置文件名
+@param[in] subpath 配置文件对应的子目录
+@param[in] parent 父对象
+@return 构造的配置策略对象,由调用者释放
+@note 如果我们管理针对某一特定应用的配置,应该使用 Dtk::Core::DConfig::create(),或 Dtk::Core::DConfig(),来指定所属应用的appId。
+
+@fn static DConfig* Dtk::Core::DConfig::createGeneric(DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent)
+@sa Dtk::Core::DConfig::createGeneric()
+
+@fn DConfig Dtk::Core::DConfig(DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent)
+@brief 使用自定义的配置策略后端构造对象
+@param[in] backend 调用者继承于DConfigBackend的配置策略后端
+@param[in] appId 配置文件所属的应用Id,为空时默认为本应用Id
+@param[in] name 配置文件名
+@param[in] subpath 配置文件对应的子目录
+@param[in] parent 父对象
+@note 调用者只构造backend,由DConfig释放。
+
+@fn static void DConfig::setAppId(const QString &appId)
+@brief 显示指定应用Id,不采用DSGApplication::id()作为应用Id
+@param[in] appId 配置文件所属的应用Id
+@note 需要在QCoreApplication构造前设置。
+
+@fn QString Dtk::Core::DConfig::backendName()
+@brief 配置策略后端名称
+@return 配置策略后端名称
+@note 调用者只能用DConfig访问DConfigBackend对象,所以不返回DConfigBackend对象。
+
+@fn QStringList Dtk::Core::DConfig::keyList()
+@brief 获得所有可用的配置项名称
+@return 配置项名称集合
+
+@fn bool Dtk::Core::DConfig::isValid()
+@brief 判断此后端是否可用
+
+@fn bool Dtk::Core::DConfig::isDefaultValue(const QString &key)
+@brief 检测指定配置项名称对应的值是否为默认值。
+@param[in] key 配置项名称
+
+@fn QVariant Dtk::Core::DConfig::value(const QString &key, const QVariant &fallback)
+@brief 根据配置项名称获得对应值
+@param[in] key 配置项名称
+@param[in] fallback 没有获取到配置项值后提供的默认值
+
+@fn void Dtk::Core::DConfig::setValue(const QString &key, const QVariant &value);
+@brief 根据配置项名称设置其值
+@param[in] key 配置项名称
+@param[in] value 需要更新的值
+
+@fn void Dtk::Core::DConfig::reset(const QString &key)
+@brief 设置其配置项对应的默认值,此值为经过override机制覆盖后的值,不一定为此配置文件中meta中定义的值
+@param[in] key 配置项名称
+
+@fn QString Dtk::Core::DConfig::name()
+@brief 返回配置文件名称
+
+@fn QString Dtk::Core::DConfig::subpath()
+@brief 返回配置文件对应的子目录
+
+*/
--- /dev/null
+/*!
+@~chinese
+@file include/global/dconfigfile.h
+@ingroup dglobal
+
+@class Dtk::Core::DConfigFile dconfigfile.h
+@brief 规范配置文件读写的相关接口的配置文件实现
+@details
+## 概述
+
+规范配置文件读写的相关接口的配置文件实现
+
+项目目录结构如下:
+```bash
+├── CMakeLists.txt
+├── config
+│ └── example.json
+└── main.cpp
+```
+
+## CMakeLists.txt
+```cmake
+cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
+
+project(dconfigfile-example VERSION 1.0.0 LANGUAGES CXX) # 指定项目名称, 版本, 语言 cxx就是c++
+
+set(CMAKE_CXX_STANDARD 11) # 指定c++标准
+set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
+
+set(CMAKE_AUTOMOC ON) # 支持qt moc
+set(CMAKE_AUTORCC ON) # 支持qt资源文件
+set(CMAKE_AUTOUIC ON) # 支持qt ui文件(非必须)
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 支持 clangd
+
+if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
+ set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
+endif()
+
+find_package(Qt5 REQUIRED COMPONENTS Core) # 寻找Qt5组件Core
+find_package(Dtk REQUIRED COMPONENTS Core) # 寻找Dtk组件Core
+
+add_executable(${PROJECT_NAME} # 生成可执行文件
+ main.cpp
+)
+
+target_link_libraries(${PROJECT_NAME} PRIVATE # 添加需要链接的共享库
+ Qt5::Core
+ dtkcore
+)
+
+# dtk_add_config_meta_files函数,部署一些"meta"的配置。
+# 函数定义在dtkcore的cmake目录下
+# APPID 应用的ID
+# FILES 需要部署的文件。
+dtk_add_config_meta_files(
+ APPID ${PROJECT_NAME}
+ FILES ./config/example.json
+)
+```
+
+## example.json
+```json
+{
+ "magic": "dsg.config.meta",
+ "version": "1.0",
+ "contents": {
+ "canExit": {
+ "value": true,
+ "serial": 0,
+ "flags": ["global"],
+ "name": "I am name",
+ "name[zh_CN]": "我是名字",
+ "description": "I am description",
+ "permissions": "readwrite",
+ "visibility": "private"
+ },
+ "key1": {
+ "value": "125",
+ "serial": 0,
+ "flags": ["nooverride"],
+ "name": "I am name",
+ "name[zh_CN]": "我是名字",
+ "description": "I am description",
+ "permissions": "readwrite",
+ "visibility": "public"
+ },
+ "number": {
+ "value": 1,
+ "serial": 0,
+ "flags": ["global"],
+ "name": "array value type",
+ "permissions": "readwrite",
+ "visibility": "public"
+ },
+ "array": {
+ "value": ["value1", "value2"],
+ "serial": 0,
+ "flags": ["global"],
+ "name": "array",
+ "permissions": "readwrite",
+ "visibility": "public"
+ },
+ "map": {
+ "value": {"key1": "value1", "key2": "value2"},
+ "serial": 0,
+ "flags": ["nooverride"],
+ "name": "map",
+ "permissions": "readwrite",
+ "visibility": "public"
+ },
+ "publicConfig": {
+ "value": true,
+ "serial": 0,
+ "flags": ["user-public"],
+ "name": "public configure",
+ "name[zh_CN]": "我是公开的配置",
+ "description": "I am public configure",
+ "permissions": "readwrite",
+ "visibility": "private"
+ }
+ }
+}
+```
+
+## main.cpp
+```cpp
+#include <DConfigFile>
+#include <QDebug>
+#include <QCoreApplication>
+#include <unistd.h>
+
+DCORE_USE_NAMESPACE
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ // 构造DConfigFile,元数据文件名example,与元数据安装目录的/usr/share/dsg/configs/APPID名(可执行文件名)对应目录/example.json,
+ DConfigFile configFile("dconfigfile-example","example");
+ // 解析配置文件
+ configFile.load();
+
+ // 创建用户缓存
+ QScopedPointer<DConfigCache> userCache(configFile.createUserCache(getuid()));
+ // 解析配置文件
+ userCache->load();
+
+ // 判断是否有效
+ if (!configFile.isValid()) {
+ qWarning() << QString("DConfig无效.");
+ return 0;
+ }
+
+ // meta 返回原型对象, keyList获取所有配置项的key
+ qDebug() << "所有的所有配置项的key:" << configFile.meta()->keyList();
+
+ // 获取指定配置项的值,配置项可以是字符串,数组,map容器,布尔值,整型,详见example.json
+ qDebug() << "canExit对应的值:" << configFile.value("canExit").toBool();
+
+ // 配置项的可见性,其余配置项标记、配置项的权限可查看文档
+ qDebug() << "配置项的可见性" << configFile.meta()->visibility("canExit");
+
+ QVariantMap map;
+ map.insert("k1","v1");
+ map.insert("k2","v2");
+ // 设置map的值
+ configFile.setValue("map", map, "dconfigfile-example", userCache.get());
+
+ configFile.save();
+
+ // root用户运行,save的数据会保存到/root/.config/dsg/configs-fake-global/dconfigfile-example/example.json
+ // map数据对应的flags标记为NoOverride,配置项允许被覆盖,如果flags为global泽忽略用户身份,详见文档。
+ userCache->save();
+
+ return a.exec();
+}
+```
+
+## 从源码构建
+```bash
+mkdir build && cd build
+# 修改路径前缀为/usr,GNU标准的默认值为/usr/local
+cmake .. -DCMAKE_INSTALL_PREFIX=/usr
+sudo make install
+sudo ./dconfigfile-example
+```
+
+结果如下图
+
+
+
+
+
+@enum Dtk::Core::DConfigFile::Flag
+@brief 配置项名称
+@var Dtk::Core::DConfigFile::Flag Dtk::Core::DConfigFile::NoOverride
+@brief 存在此标记时,将表明则此配置项不可被覆盖(详见下述 override 机制)。反之,不存在此标记时表明此配置项允许被覆盖,对于此类配置项,如若其有界面设置入口,则当此项不可写时,应当隐藏或禁用界面的设置入口.
+@var Dtk::Core::DConfigFile::Flag Dtk::Core::DConfigFile::Global
+@brief 当读写此类配置时,将忽略用户身份,无论程序使用哪个用户身份执行,读操作都将获取到同样的数据,写操作将对所有用户都生效。但是,如果对应的配置存储目录不存在或无权限写入,则忽略此标志
+@var Dtk::Core::DConfigFile::Flag Dtk::Core::DConfigFile::UserPublic
+@brief 该类配置项允许被其他用户访问
+
+
+@enum Dtk::Core::DConfigFile::Permissions
+@brief 配置项的权限
+@var Dtk::Core::DConfigFile::Permissions Dtk::Core::DConfigFile::ReadOnly
+@brief 将配置项覆盖为只读
+@var Dtk::Core::DConfigFile::Permissions Dtk::Core::DConfigFile::ReadWrite
+@brief 将配置项覆盖为可读可写
+
+
+@enum Dtk::Core::DConfigFile::Visibility
+@brief 配置项的可见性
+@var Dtk::Core::DConfigFile::Visibility Dtk::Core::DConfigFile::Private
+@brief 仅限程序内部使用,对外不可见。此类配置项完全由程序自己读写,可随意增删改写其含义,无需做兼容性考虑
+@var Dtk::Core::DConfigFile::Visibility Dtk::Core::DConfigFile::Public
+@brief 外部程序可使用。 此类配置项一旦发布,在兼容性版本的升级中,要保障此配置项向下兼容,简而言之,只允许在程序/库的大版本升级时才允许删除或修改此类配置项,当配置项的 permissions、visibility、flags 任意一个属性被修改则认为此配置项被修改,除此之外修改 value、name、description 属性时则不需要考虑兼容性。
+
+@struct Dtk::Core::DConfigFile::Version
+@brief 版本信息
+@details
+此文件的内容格式的版本。版本号使用两位数字描述,
+首位数字不同的描述文件相互之间不兼容,第二位数字不同的描述文件需满足向下兼容。
+读取此描述文件的程序要根据版本进行内容分析,当遇到不兼容的版本时,需要立即终止解析,忽略此文件,
+并在程序日志中写入警告信息,如 “1.0” 和 “2.0” 版本之间不兼容,
+如果解析程序最高只支持 1.0 版本,则遇到 2.0 版本的描述文件时应该终止解析,
+但是如果遇到 1.1 版本,则可以继续执行。
+写入此描述文件时,遇到不兼容的版本时,需要先清空当前内容再写入,每次写入皆需更新此字段。
+
+@fn static constexpr DConfigFile::Version Dtk::Core::DConfigFile::supportedVersion()
+@brief 支持的版本
+@return
+
+@fn Dtk::Core::DConfigFile::DConfigFile(const QString &appId, const QString &name, const QString &subpath = QString())
+@brief DConfigFile构造函数,构造配置文件管理对象。
+@param[in] appId 应用程序唯一标识
+@param[in] name 配置文件名
+@param[in] subpath 子目录
+
+@fn Dtk::Core::DConfigFile::DConfigFile(const DConfigFile &other);
+@brief DConfigFile构造函数,构造配置文件管理对象。
+@param[in] appId 应用程序唯一标识
+@param[in] name 配置文件名
+@param[in] subpath 子目录
+
+@fn bool Dtk::Core::DConfigFile::load(const QString &localPrefix = QString())
+@brief 解析配置文件
+@param[in] localPrefix 为目录前缀
+@return
+
+@fn bool Dtk::Core::DConfigFile::load(QIODevice *meta, const QList<QIODevice*> &overrides)
+@brief 解析配置文件流
+@param[in] meta 为原型流
+@param[in] overrides 为覆盖机制查找的文件流
+@return
+
+@fn bool Dtk::Core::DConfigFile::save(const QString &localPrefix = QString(), QJsonDocument::JsonFormat format = QJsonDocument::Indented, bool sync = false) const
+@brief 保存缓存的值到磁盘中
+@param[in] format 保存格式
+@param[in] sync 是否立即刷新
+@return
+
+@fn bool Dtk::Core::DConfigFile::isValid() const
+@brief 检测配置文件是否有效
+@return
+
+@fn QVariant Dtk::Core::DConfigFile::value(const QString &key, DConfigCache *userCache = nullptr) const
+@brief DConfigFile::value
+@param[in] key 配置项名称
+@param[in] userCache 用户缓存,当key为全局项时, \a userCache 不会被使用
+@return
+
+@fn QVariant Dtk::Core::DConfigFile::cacheValue(DConfigCache *userCache, const QString &key) const
+@brief DConfigFile::cacheValue 获取指定用户缓存的配置项值,若无此配置项的用户缓存值,返回无效值
+@param[in] key 配置项名称
+@param[in] userCache 用户缓存,当key为全局配置项时, \a userCache 不会被使用
+@return
+
+@fn bool Dtk::Core::DConfigFile::setValue(const QString &key, const QVariant &value, const QString &callerAppid, DConfigCache *userCache = nullptr)
+@brief 设置缓存中的值
+@param[in] key 配置项名称
+@param[in] value 需要设置的值
+@param[in] uid 设置时的用户id
+@param[in] appid 设置时的应用id
+@return 为true时表示重新设置了新值,false表示没有设置
+
+@fn DConfigCache* Dtk::Core::DConfigFile::createUserCache(const uint uid)
+@brief 创建用户缓存
+
+@fn DConfigCache* Dtk::Core::DConfigFile::globalCache() const
+@brief 返回全局缓存
+@return
+
+@fn DConfigMeta* Dtk::Core::DConfigFile::meta()
+@brief 返回原型对象
+@return
+
+*/
+
+/*!
+@class Dtk::Core::DConfigMeta dconfigfile.h
+@brief 提供配置文件的原型和覆盖机制的访问接口
+
+@fn virtual DConfigFile::Version Dtk::Core::DConfigMeta::version() const = 0
+@brief 返回配置版本信息
+@return
+
+@fn virtual void Dtk::Core::DConfigMeta::setVersion(quint16 major, quint16 minor) = 0
+@brief 设置配置版本信息
+@param[in] major 主板本号
+@param[in] minor 次版本号
+
+@fn virtual bool Dtk::Core::DConfigMeta::load(const QString &localPrefix = QString()) = 0
+@brief 解析配置文件
+@param[in] localPrefix 为目录前缀
+@return
+
+@fn virtual bool Dtk::Core::DConfigMeta::load(QIODevice *meta, const QList<QIODevice*> &overrides) = 0
+@brief 解析配置文件流
+@param[in] meta 为原型流
+@param[in] overrides 为覆盖机制查找的文件流
+@return
+
+@fn virtual QStringList Dtk::Core::DConfigMeta::keyList() const = 0
+@brief 返回配置内容的所有配置项
+@return
+
+@fn virtual DConfigFile::Flags Dtk::Core::DConfigMeta::flags(const QString &key) const = 0
+@brief 返回指定配置项的特性
+@param[in] key 配置项名称, NoOverride为此配置项不可被覆盖, Global为忽略用户身份
+@return
+
+@fn virtual DConfigFile::Permissions Dtk::Core::DConfigMeta::permissions(const QString &key) const = 0
+@brief 返回指定配置项的权限
+@param[in] key 配置项名称
+@return
+
+@fn virtual DConfigFile::Visibility Dtk::Core::DConfigMeta::visibility(const QString &key) const = 0
+@brief 返回指定配置项的可见性
+@param[in] key 配置项名称
+@return
+
+@fn virtual int Dtk::Core::DConfigMeta::serial(const QString &key) const = 0
+@brief 返回配置项的单调递增值
+@param[in] key 配置项名称
+@return -1为无效值,表明没有配置此项
+
+@fn virtual QString Dtk::Core::DConfigMeta::displayName(const QString &key, const QLocale &locale) = 0
+@brief 返回指定配置项的显示名
+@param[in] key 配置项名称
+@param[in] locale 为语言版本
+@return
+
+@fn virtual QString Dtk::Core::DConfigMeta::description(const QString &key, const QLocale &locale) = 0
+@brief 返回指定配置项的描述信息
+@param[in] key 配置项名称
+@param[in] locale 为语言版本
+@return
+
+@fn virtual QString Dtk::Core::DConfigMeta::metaPath(const QString &localPrefix = QString(), bool *useAppId = nullptr) const = 0
+@brief 返回描述文件的路径
+@param[in] localPrefix 目录的所有需要查找的覆盖机制目录
+@param[in] useAppId 是否不使用通用目录
+@return
+
+@fn virtual QStringList Dtk::Core::DConfigMeta::allOverrideDirs(const bool useAppId, const QString &prefix = QString()) const = 0
+@brief 获得前缀为 `prefix` 目录的所有需要查找的覆盖机制目录
+@param[in] useAppId 是否不使用通用目录
+@param[in] prefix 目录的应用或公共库的所有覆盖机制目录
+@return
+
+@fn virtual QVariant DConfigMeta::value(const QString &key) const = 0
+@brief meta初始值经过覆盖机制覆盖后的原始值
+@param[in] key 配置项名称
+@return
+
+@fn static QStringList genericMetaDirs(const QString &localPrefix = QString())
+@brief 获取应用无关配置存储的目录
+@param[in] localPrefix 配置的目录前缀
+@return 返回应用无关配置存储的目录列表
+
+@fn static QStringList applicationMetaDirs(const QString &localPrefix, const QString &appId)
+@brief 获取应用配置存储的目录
+@param[in] localPrefix 配置的目录前缀
+@param[in] appId 应用唯一标识
+@return 返回存储应用配置的目录列表
+*/
+
+/*!
+@class Dtk::Core::DConfigCache dconfigfile.h
+@brief 提供配置文件的用户和全局运行缓存访问接口
+
+@fn virtual bool Dtk::Core::DConfigCache::load(const QString &localPrefix = QString()) = 0
+@brief 解析缓存配置文件
+@return
+
+@fn virtual bool Dtk::Core::DConfigCache::load(const QString &localPrefix = QString()) = 0
+@brief 解析缓存配置文件
+@return
+
+@fn virtual bool Dtk::Core::DConfigCache::save(const QString &localPrefix = QString(), QJsonDocument::JsonFormat format = QJsonDocument::Indented, bool sync = false) = 0
+@brief 保存缓存的值到磁盘中
+@param[in] localPrefix 为目录前缀
+@param[in] format 保存格式
+@param[in] sync 是否立即刷新
+@return
+
+@fn virtual bool Dtk::Core::DConfigCache::isGlobal() const = 0
+@brief 是否是全局缓存
+@return
+
+@fn virtual void Dtk::Core::DConfigCache::remove(const QString &key) = 0
+@brief 删除缓存中的配置项
+@param[in] key 配置项名称
+@return
+
+@fn virtual QStringList Dtk::Core::DConfigCache::keyList() const = 0
+@brief 返回配置内容的所有配置项
+@return
+
+@fn virtual bool Dtk::Core::DConfigCache::setValue(const QString &key, const QVariant &value, const int serial, const uint uid, const QString &callerAppid) = 0
+@brief 设置缓存中的值
+@param[in] key 配置项名称
+@param[in] value 需要设置的值
+@param[in] uid 设置时的用户id
+@param[in] callerAppid 设置时的应用id
+@return 为true时表示重新设置了新值,false表示没有设置。
+
+@fn virtual QVariant Dtk::Core::DConfigCache::value(const QString &key) const = 0
+@brief 获取缓存中的值
+@param[in] key 配置项名称
+@return
+
+@fn virtual int Dtk::Core::DConfigCache::serial(const QString &key) const = 0
+@brief 返回配置项的单调递增值
+@param[in] key 配置项名称
+@return -1为无效值,表明没有配置此项
+
+@fn virtual uint Dtk::Core::DConfigCache::uid() const = 0
+@brief 用户标识,为全局缓存时,uid为非用户标识的特定值
+@return
+
+@fn virtual void setCachePathPrefix(const QString &prefix) = 0
+@brief 指定缓存位置前缀,缓存访问所需的权限及区分不同缓存的位置由调用者考虑,其默认值参考配置策略规范
+@param[in] prefix 缓存位置的前缀
+
+*/
--- /dev/null
+/*!
+@~chinese
+@file include/global/ddesktopentry.h
+@ingroup dglobal
+
+@class Dtk::Core::DDesktopEntry ddesktopentry.h
+@brief 处理desktop文件的接口
+@details
+## 概述
+
+DDesktopEntry提供了处理XDG desktop读写的方法的接口,这个Class类似于QSettings。
+
+有关该规范本身的更多详细信息,请参阅:
+https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
+
+
+项目目录结构在同一目录下
+
+## CMakeLists.txt
+
+```cmake
+cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
+
+project(example1 VERSION 1.0.0 LANGUAGES CXX) # 指定项目名称, 版本, 语言 cxx就是c++
+
+set(CMAKE_CXX_STANDARD 11) # 指定c++标准
+set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
+set(target example1) # 指定目标名称
+
+set(CMAKE_AUTOMOC ON) # support qt moc # 支持qt moc
+set(CMAKE_AUTORCC ON) # support qt resource file # 支持qt资源文件
+set(CMAKE_AUTOUIC ON) # support qt ui file # 支持qt ui文件(非必须)
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # support clangd # 支持 clangd
+
+if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
+ set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
+endif()
+find_package(Qt5 COMPONENTS Core REQUIRED) # 寻找Qt5组件Core
+find_package(Dtk COMPONENTS Core REQUIRED) # 寻找Dtk组件Core
+
+add_executable(${target} # 生成可执行文件
+ main.cpp
+)
+
+target_link_libraries(${target} PRIVATE # 添加需要链接的共享库
+ Qt5::Core
+ dtkcore
+)
+```
+
+## main.cpp
+
+```cpp
+#include <QDebug>
+#include <QString>
+#include <DDesktopEntry>
+#include <QFile>
+
+DCORE_USE_NAMESPACE // 使用Dtk Core命名空间
+
+const QString fileContent = { QStringLiteral(R"desktop(# A. Example Desktop Entry File
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=Foo Viewer
+Name[zh_CN]=福查看器
+Comment=The best viewer for Foo objects available!
+# Next line have an extra " character
+Comment[zh_CN]=最棒的 "福 查看器!
+TryExec=fooview
+Exec=fooview %F
+Icon=fooview
+MimeType=image/x-foo;
+Actions=Gallery;Create;
+
+[Desktop Action Gallery]
+Exec=fooview --gallery
+Name=Browse Gallery
+
+[Desktop Action Create]
+Exec=fooview --create-new
+Name=Create a new Foo!
+Icon=fooview-new
+)desktop") };
+
+int main(int argc, char *argv[])
+{
+ QFile file("example1.desktop");
+ // 尝试打开文件
+ if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
+ qDebug()<<"文件打开失败";
+ }
+ const QString fileName = file.fileName();
+ QTextStream ts(&file);
+ ts << fileContent;
+ file.close();
+ QFile::exists(fileName);
+
+ // 打开一个fileName为example1.desktop的文件
+ QScopedPointer<DDesktopEntry> desktopFile(new DDesktopEntry(fileName));
+
+ // 获取desktop中所有组并返回列表,对应"Desktop Entry"、"Desktop Action Gallery"、"Desktop Action Create"三组
+ QStringList allGroups = desktopFile->allGroups();
+
+ qDebug() << QString("Desktop 文件共有%1组").arg(allGroups.count());
+
+ // 调用allGroups函数,传入true,保持读取desktop文件时的顺序不变,获取第0组
+ qDebug() << QString("Desktop 文件第0组为: %1").arg(desktopFile->allGroups(true)[0]);
+
+ // 获取key=Name,localeKey=zh_CN的值,即Name[zh_CN]=福查看器
+ qDebug() << QString("Name[zh_CN]=%1") \
+ .arg(desktopFile->localizedValue("Name", "zh_CN"));
+
+ // 获取key为Nam,,localeKey为empty的值,empty表示没有localeKey,即Name=Foo Viewer
+ qDebug() << QString("Name=%1") \
+ .arg(desktopFile->localizedValue("Name", "empty"));
+
+ // 获取Desktop Entry组下的所有key,即"Actions", "Comment", "Comment[zh_CN]", "Exec", "Icon", "MimeType", "Name", "Name[zh_CN]", "TryExec", "Type", "Version"
+ qDebug() << QString("Desktop Entry组下的所有key: ") \
+ << desktopFile->keys("Desktop Entry");
+
+ // 设置 key 为 Name的值为"Bar Viewer",默认组是"Desktop Entry"
+ desktopFile->setRawValue("Bar Viewer", "Name");
+
+ // 设置 key 为 Name,localeKey为zh_CN的值为霸查看器,默认组是"Desktop Entry"
+ desktopFile->setLocalizedValue("霸查看器", "zh_CN", "Name");
+
+ // 检查 section 中是否包 key 为 Semicolon 的值,包含 key 返回true; 否则返回false,默认组是Desktop Entry
+ qDebug() << QString("Desktop Entry组是否包key是Semicolon: ") \
+ << desktopFile->contains("Semicolon", "Desktop Entry");
+
+ // 设置key为Semicolon的值为";grp\\;2;grp3;",默认组是"Desktop Entry"
+ desktopFile->setRawValue(";grp\\;2;grp3;", "Semicolon");
+
+ // 返回给定 section 中与给定 key 关联的字符串的列表。如果destkop不包含为该键的项,则函数返回一个空字符串列表。 默认组是Desktop Entry
+ qDebug() << QString("Desktop Entry组中Semicolon对应值的字符串列表: ") \
+ << desktopFile->stringListValue("Semicolon");
+
+ // 再次检查 section 中是否包 key 为 Semicolon 的值,此时为true
+ qDebug() << QString("Desktop Entry组是否包key是Semicolon: ") \
+ << desktopFile->contains("Semicolon", "Desktop Entry");
+
+ // 删除desktop中 section 中 key 对应的值,默认组是"Desktop Entry"
+ desktopFile->removeEntry("Semicolon", "Desktop Entry");
+
+ // 再次检查 section 中是否包 key 为 Semicolon 的值,此时为false
+ qDebug() << QString("Desktop Entry组是否包key是Semicolon: ") \
+ << desktopFile->contains("Semicolon", "Desktop Entry");
+
+ // 将数据回写到desktop文件。 true表示写成功; 否则返回false
+ if (desktopFile->save())
+ {
+ qDebug() << "文件保存成功";
+ } else {
+ qDebug() << "文件保存失败";
+ }
+
+ return 0;
+}
+```
+
+结果如下图
+
+
+
+@enum Dtk::Core::DDesktopEntry::EntryType
+@brief 桌面入口文件的类型
+@var Dtk::Core::DDesktopEntry::Unknown
+@brief 未知的桌面文件类型。可能是无效的
+@var Dtk::Core::DDesktopEntry::Application
+@brief 该文件描述应用程序
+@var Dtk::Core::DDesktopEntry::Link
+@brief 该文件描述URL
+@var Dtk::Core::DDesktopEntry::Directory
+@brief 该文件描述目录设置
+@var Dtk::Core::DDesktopEntry::ServiceType
+@brief KDE特定类型。规范中提到过, 所以这里也列出了
+@var Dtk::Core::DDesktopEntry::Service
+@brief KDE特定类型。规范中提到过, 所以这里也列出了
+@var Dtk::Core::DDesktopEntry::FSDevice
+@brief KDE特定类型。规范中提到过, 所以这里也列出了
+
+@enum Dtk::Core::DDesktopEntry::ValueType
+@brief 值的类型
+@var Dtk::Core::DDesktopEntry::Unparsed
+@brief 未解析的值
+@var Dtk::Core::DDesktopEntry::String
+@brief 字符串
+@var Dtk::Core::DDesktopEntry::Strings
+@brief 字符串数组
+@var Dtk::Core::DDesktopEntry::Boolean
+@brief 布尔值
+@var Dtk::Core::DDesktopEntry::Numeric
+@brief 数字
+@var Dtk::Core::DDesktopEntry::NotExisted
+@brief 不存在
+
+@enum Dtk::Core::DDesktopEntry::Status
+@brief desktop文件的解析状态
+@var Dtk::Core::DDesktopEntry::NoError
+@brief 没有错误发生
+@var Dtk::Core::DDesktopEntry::AccessError
+@brief 发生访问错误(例如, 试图写入只读文件)
+@var Dtk::Core::DDesktopEntry::FormatError
+@brief 发生格式错误(例如, 加载格式错误的desktop文件)
+
+@fn Dtk::Core::DDesktopEntry::DDesktopEntry(const QString &filePath) noexcept
+@brief DDesktopEntry构造函数
+
+@fn bool Dtk::Core::DDesktopEntry::save() const
+@brief 将数据回写到desktop文件。
+@return true表示写成功; 否则返回false
+
+@fn Status Dtk::Core::DDesktopEntry::status() const
+@brief Get data parse status
+@return 返回一个状态码, 表示DDesktopEntry遇到的第一个错误, 如果没有错误发生, 则返回QSettings::NoError。请注意, DDesktopEntry会延迟执行某些操作。
+
+@fn QStringList Dtk::Core::DDesktopEntry::keys(const QString §ion = "Desktop Entry") const
+@brief 根据 `section` 返回全部键值
+@return 返回所有的键值
+
+@fn QStringList Dtk::Core::DDesktopEntry::allGroups(bool sorted = false) const
+@brief 获取desktop中所有组的列表。如果 `sorted` 设置为true, 则返回结果将保持读取desktop文件时的顺序不变。
+@return 返回所有的组.
+
+@fn bool Dtk::Core::DDesktopEntry::contains(const QString &key, const QString §ion = "Desktop Entry") const
+@brief 检查desktop文件是否有给定的 `section` 包含给定的 `key`
+@return 如果desktop在 `section` 包含 `key` 返回true; 否则返回false。
+
+@fn QString Dtk::Core::DDesktopEntry::name() const
+@brief 返回“Desktop Entry”部分下的“Name”键的本地化字符串值。这等价于调用localizedValue("Name")。
+@return 返回“Desktop Entry”部分下的“Name”键的本地化字符串值。
+@sa localizedValue(), genericName(), ddeDisplayName()
+
+@fn QString Dtk::Core::DDesktopEntry::genericName() const
+@brief 返回"Desktop Entry"部分下的"GenericName"键的本地化字符串值。它等价于调用localizedValue("GenericName")。如果是“GenericName”不存在。则不会回退到“Name”。
+@return 返回"Desktop Entry"部分下的"GenericName"键的本地化字符串值。
+@sa localizedValue(), name(), ddeDisplayName()
+
+@fn QString Dtk::Core::DDesktopEntry::ddeDisplayName() const
+@brief 为DDE应用程序专门显示名称
+@details 这将检查“X-Deepin-Vendor”,并将返回本地化的字符串值“GenericName”
+"X-Deepin-Vendor"是"deepin",否则它将返回"Name"的本地化字符串值。
+@return 返回专门用于DDE应用程序的显示名称
+@sa localizedValue(), name(), genericName()
+
+@fn QString Dtk::Core::DDesktopEntry::comment() const
+@brief 返回“Desktop Entry”部分下的“Comment”键的本地化字符串值。这等价于调用localizedValue("Comment")。
+@return 返回“Desktop Entry”部分下的“Comment”键的本地化字符串值。
+@sa localizedValue()
+
+@fn QString Dtk::Core::DDesktopEntry::rawValue(const QString &key, const QString §ion = "Desktop Entry", const QString &defaultValue = QString()) const
+@brief 返回 `section` 中与给定 `key` 关联的原始字符串值。如果desktop不包含具有该键的项, 则函数返回一个构造好的 `defaultValue`。
+@return 返回 `section` 中与给定 `key` 相关联的原始字符串值。
+@sa stringValue() localizedValue() stringListValue()
+
+@fn QString Dtk::Core::DDesktopEntry::stringValue(const QString &key, const QString §ion = "Desktop Entry", const QString &defaultValue = QString()) const
+@brief 返回 `section` 与给定 `key` 关联的未转义字符串值。如果desktop不包含键值为0的项, 则函数返回一个构造好的 `defaultValue`。
+@return 返回 `section` 中与给定 `key` 相关联的未转义字符串值。
+@sa rawValue() localizedValue() stringListValue()
+
+@fn QString Dtk::Core::DDesktopEntry::localizedValue(const QString &key, const QString &localeKey = "default", const QString §ion = "Desktop Entry", const QString& defaultValue = QString()) const
+@brief 返回与 `section` 中给定的 `key` 和 `localeKey` 相关联的本地化字符串值。
+@details
+如果找不到给定的 `localeKey` ,它将回退到"C",如果仍然找不到,将回退 `key` 没有`localeKey`部分。。
+如果destkop不包含 `key` 值为0的项,则函数返回一个构造好的 `defaultValue`。
+@return 返回 `section` 中与给定的 `key` 和 `localeKey` 关联的本地化字符串值。
+@sa rawValue() stringValue() stringListValue()
+
+@fn QString Dtk::Core::DDesktopEntry::localizedValue(const QString &key, const QLocale &locale, const QString §ion = "Desktop Entry", const QString& defaultValue = QString()) const
+@brief 返回与给定的 `key` 和 `section` 中的区域设置相关联的本地化字符串值。
+@details
+如果找不到给定的 `localeKey` ,它将回退到"C",如果仍然找不到,将回退 `key` 没有`localeKey`部分。
+如果destkop不包含 `key` 值为0的项,则函数返回一个构造好的 `defaultValue`。
+@return 返回 `section`中 与给定的 `key` 和 `locale` 设置相关联的本地化字符串值。
+@sa rawValue() stringValue() stringListValue()
+
+@fn QStringList Dtk::Core::DDesktopEntry::stringListValue(const QString &key, const QString §ion = "Desktop Entry") const
+@brief 返回给定 `section` 中与给定 `key` 关联的字符串的列表。如果destkop不包含为该键的项,则函数返回一个空字符串列表。
+@return 返回给定 `section` 中与给定 `key` 关联的字符串的列表。
+@sa rawValue() stringValue() localizedValue()
+
+@fn bool Dtk::Core::DDesktopEntry::setRawValue(const QString &value, const QString &key, const QString& section = "Desktop Entry")
+@brief 设置给定 `section` 中与给定 `key` 关联的原始字符串值。
+
+@fn bool Dtk::Core::DDesktopEntry::setStringValue(const QString &value, const QString &key, const QString& section = "Desktop Entry")
+@brief 设置给定 `section` 中与给定 `key` 关联的字符串
+
+@fn bool Dtk::Core::DDesktopEntry::setLocalizedValue(const QString &value, const QString& localeKey, const QString &key, const QString& section = "Desktop Entry")
+@brief 设置给定的 `key` 和 `section` 中的区域设置相关联的本地化字符串值。
+
+@fn bool Dtk::Core::DDesktopEntry::removeEntry(const QString &key, const QString §ion = "Desktop Entry");
+@brief 删除desktop中 `section` 与 `key` 对应的值
+
+@fn static QString& Dtk::Core::DDesktopEntry::escape(QString &str)
+@brief 支持转义序列`\s`、`\n`、`\t`、`\r`和`\\`表示值
+@details string和localestring类型的值支持转义序列`\s`、`\n`、`\t`、`\r`和`\\`,分别表示ASCII空格、换行符、制表符、回车和反斜杠。
+
+@fn static QString& Dtk::Core::DDesktopEntry::escapeExec(QString &str)
+@brief 必须将参数括在双引号之间,并对双引号字符进行转义。
+@details
+| 原字符 | 转义后 |
+|------|---------|
+| \` | "`" |
+| $ | "$" |
+| \ | "\" |
+在它前面加上一个额外的反斜杠字符。实现必须在扩展字段代码之前和之前撤销引用,将参数传递给可执行程序。
+@note 类型为string的值的通用转义规则规定,反斜杠字符也可以转义为("\\")和这个转义规则应用在引用规则之前。<br>
+因此,要明确地表示在desktop文件中,引号参数中的文字反斜杠字符 <br>
+要求使用四个连续的反斜杠字符("\\\\")。同样,在桌面入口文件中引用参数中的美元符号表示为("\\$")。
+
+@fn static QString& Dtk::Core::DDesktopEntry::unescape(QString &str, bool unescapeSemicolons = false)
+@brief 对于类型为string和localestring的值,支持转义序列`\s`、`\n`、`\t`、`\r`和`\\`,分别表示ASCII空格、换行符、制表符、回车符和反斜杠。
+@details 有些键可以有多个值。这种情况下,`key` 的值被指定为复数形式:
+例如,字符串。多个值应该用分号分隔,`key` 的值可以选择以分号结尾。空字符串必须以分号结尾。
+这些值中的分号需要使用`\;`转义。
+
+有关该规范本身的更多详细信息,请参阅:
+https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#value-types
+
+@fn static QString& Dtk::Core::DDesktopEntry::unescapeExec(QString &str)
+@brief 必须将参数括在双引号之间,并对双引号字符进行转义,
+@details
+| 原字符 | 转义后 |
+|------|---------|
+| \` | "`" |
+| $ | "$" |
+| \ | "\" |
+在它前面加上一个额外的反斜杠字符。实现必须在扩展字段代码之前和之前撤销引用,将参数传递给可执行程序。
+
+保留字符:
+| 功能 | 字符 |
+|---------------------|---------|
+| space | " " |
+| tab | |
+| newline | |
+| double quote | |
+| single quote | "'" |
+| backslash character | "\" |
+| greater-than sign | ">" |
+| less-than sign | "<" |
+| tilde | "~" |
+| vertical bar | \| |
+| ampersand | "&" |
+| semicolon | ";" |
+| dollar sign | "$" |
+| asterisk | "*" |
+| question mark | "?" |
+| hash mark | "#" |
+| parenthesis | "(" 和 ")" |
+| backtick character | "`" |
+@note 类型为string的值的通用转义规则规定 <br>
+反斜杠字符也可以转义为("\\"),而且转义规则在引号规则之前应用。<br>
+因此,要在desktop文件的引号参数中明确表示字面上的反斜杠字符,需要使用四个连续的反斜杠字符(“\\\\”)。<br>
+同样,在desktop文件中,引号参数中的美元符号可以明确地表示为("\\$")。
+
+@fn bool Dtk::Core::DDesktopEntry::setStatus(const Status &status)
+@brief 设置desktop文件解析状态
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dglobal
+@file include/global/dlicenseinfo.h
+
+@class Dtk::Core::DLicenseInfo::DComponentInfo
+@brief dcomponentinfo 是一组用于查询组件所用开源协议信息的类
+
+@fn Dtk::Core::DLicenseInfo::DComponentInfo::DComponentInfo(DObject *parent)
+@brief 组件信息类的构造函数
+@param[in] parent 组件信息类的父对象
+
+@fn QString Dtk::Core::DLicenseInfo::DComponentInfo::name()
+@brief 获取组件的名称
+
+@fn QString Dtk::Core::DLicenseInfo::DComponentInfo::version()
+@brief 获取组件的版本号
+
+@fn QString Dtk::Core::DLicenseInfo::DComponentInfo::copyRight()
+@brief 获取组件的授权信息
+
+@fn QString Dtk::Core::DLicenseInfo::DComponentInfo::licenseName()
+@brief 获取组件的所用开源许可协议名称
+
+@class Dtk::Core::DLicenseInfo
+@brief dlicenseinfo是一组用于查询应用所用开源许可协议相关信息的类
+
+@fn Dtk::Core::DLicenseInfo::DLicenseInfo(DObject *parent)
+@brief 开源许可协议信息类的构造函数
+@param[in] parent 开源许可协议信息类的父对象
+
+@fn bool Dtk::Core::DLicenseInfo::loadContent(const QByteArray &content)
+@brief 通过内容content加载协议
+@return 0 加载失败
+@return 1 加载成功
+
+@fn bool Dtk::Core::DLicenseInfo::loadFile(const QString &file)
+@brief 通过文件file加载协议
+@return 0 加载失败
+@return 1 加载成功
+
+@fn void Dtk::Core::DLicenseInfo::setLicenseSearchPath(const QString &path)
+@brief 设置协议内容路径path
+
+@fn QByteArray Dtk::Core::DLicenseInfo::licenseContent(const QString &licenseName)
+@brief 获取协议名为licenseName的内容
+
+@fn DLicenseInfo::DComponentInfos Dtk::Core::DLicenseInfo::componentInfos()
+@brief 获取组件的相关信息
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dglobal
+@file include/global/dsysinfo.h
+
+@class Dtk::Core::DSysInfo
+@brief dsysinfo 是一组用于查询系统信息的静态类
+@details
+## 概述
+
+dsysinfo是一组用于查询系统信息的静态类
+
+项目目录结构如下:
+
+```bash
+├── CMakeLists.txt
+└── main.cpp
+```
+
+## CMakeLists.txt
+
+```cmake
+cmake_minimum_required(VERSION 3.13) # cmake版本要求
+set (VERSION "1.0.0" CACHE STRING "define project version") # 定义项目版本
+set(BIN_NAME test) # 定义项目名称
+project(test) # 定义项目名称
+file(GLOB_RECURSE SRCS "*.h" "*.cpp") # 定义项目源文件
+find_package(Qt5 REQUIRED COMPONENTS Core) # 寻找Qt5
+find_package(DtkCore REQUIRED) # 寻找DtkCore
+
+add_executable(test
+ main.cpp # 源文件
+)
+
+target_link_libraries(test PRIVATE
+ ${DtkCore_LIBRARIES} # 链接DtkCore
+ Qt5::Core # 链接Qt5
+)
+
+```
+
+## main.cpp
+
+```cpp
+#include <DSysInfo> // 引入DSysInfo
+#include <qdebug.h> // 引入qdebug.h
+DCORE_USE_NAMESPACE // 使用dtkcore命名空间
+
+int main(int argc, char **argv) {
+
+ qDebug() << DSysInfo::deepinType(); // 打印deepin类型
+ qDebug() << DSysInfo::ProductType(); // 打印产品类型
+ return 0;
+}
+```
+
+@enum Dtk::Core::DSysInfo::ProductType
+@brief 产品信息
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::Deepin
+@brief 深度操作系统
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::ArchLinux
+@brief ArchLinux
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::CentOS
+@brief CentOS
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::Debian
+@brief Debian
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::Fedora
+@brief Fedora
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::LinuxMint
+@brief LinuxMint
+@var Dtj::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::Manjaro
+@brief Manjaro
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::openSUSE
+@brief openSUSE
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::SailfishOS
+@brief SailfishOS
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::Ubuntu
+@brief Ubuntu
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::Uos
+@brief UOS
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::Gentoo
+@brief Gentoo
+@var Dtk::Core::DSysInfo::ProductType Dtk::Core::DSysInfo::NixOS
+@brief NixOS
+
+@enum Dtk::Core::DSysInfo::DeepinType
+@brief 深度操作系统版本
+@var Dtk::Core::DSysInfo::DeepinType Dtk::Core::DSysInfo::UnknownDeepin
+@brief 未知版本
+@var Dtk::Core::DSysInfo::DeepinType Dtk::Core::DSysInfo::DeepinDesktop
+@brief 桌面版
+@var Dtk::Core::DSysInfo::DeepinType Dtk::Core::DSysInfo::DeepinProfessional
+@brief deepin专业版, 现为uos专业版
+@var Dtk::Core::DSysInfo::DeepinType Dtk::Core::DSysInfo::DeepinServer
+@brief deepin服务器版本, 现为uos服务器版
+@var Dtk::Core::DSysInfo::DeepinType Dtk::Core::DSysInfo::DeepinPersonal
+@brief deepin个人版, 现为uos家庭版
+
+@enum Dtk::Core::DSysInfo::LogoType
+@brief 系统的logo类型
+@var Dtk::Core::DSysInfo::LogoType Dtk::Core::DSysInfo::Normal
+@brief 正常
+@var Dtk::Core::DSysInfo::LogoType Dtk::Core::DSysInfo::Light
+@brief 亮色
+@var Dtk::Core::DSysInfo::LogoType Dtk::Core::DSysInfo::Symbolic
+@brief 符号
+@var Dtk::Core::DSysInfo::LogoType Dtk::Core::DSysInfo::Transparent
+@brief 水印
+
+@enum Dtk::Core::DSysInfo::OrgType
+@brief 组织类型
+@var Dtk::Core::DSysInfo::OrgType Dtk::Core::DSysInfo::Distribution
+@brief 当前版本
+@var Dtk::Core::DSysInfo::OrgType Dtk::Core::DSysInfo::Distributor
+@brief 当前发行版
+@var Dtk::Core::DSysInfo::OrgType Dtk::Core::DSysInfo::Manufacturer
+@brief 当前发行版或设备的制造商
+
+@enum Dtk::Core::DSysInfo::UosType
+@brief UOS版本类型
+@var Dtk::Core::DSysInfo::UosType Dtk::Core::DSysInfo::UosTypeUnknown
+@brief 未知版本
+@var Dtk::Core::DSysInfo::UosType Dtk::Core::DSysInfo::UosDesktop
+@brief UOS桌面版
+@var Dtk::Core::DSysInfo::UosType Dtk::Core::DSysInfo::UosServer
+@brief UOS服务器版
+@var Dtk::Core::DSysInfo::UosType Dtk::Core::DSysInfo::UosDevice
+@brief UOS设备版
+@var Dtk::Core::DSysInfo::UosType Dtk::Core::DSysInfo::UosTypeCount
+@brief 记录枚举数量
+
+@enum Dtk::Core::DSysInfo::UosEdition
+@brief 详细uos版本
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosEditionUnknown
+@brief 未知版本
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosProfessional
+@brief UOS专业版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosHome
+@brief UOS家庭版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosCommunity
+@brief 社区版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosMilitary
+@brief *
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosEnterprise
+@brief UOS企业版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosEnterpriseC
+@brief UOS行业版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosEuler
+@brief UOS服务器欧拉版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosMilitaryS
+@brief *
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosDeviceEdition
+@brief UOS专用设备版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosEducation
+@brief UOS教育版
+@var Dtk::Core::DSysInfo::UosEdition Dtk::Core::DSysInfo::UosEditionCount
+@brief 记录枚举数量
+
+@enum Dtk::Core::DSysInfo::UosArch
+@brief UOS使用的架构
+@var Dtk::Core::DSysInfo::UosArch Dtk::Core::DSysInfo::UosArchUnknown
+@brief 未知架构
+@var Dtk::Core::DSysInfo::UosArch Dtk::Core::DSysInfo::UosAMD64
+@brief x86_64
+@var Dtk::Core::DSysInfo::UosArch Dtk::Core::DSysInfo::UosARM64
+@brief arm64
+@var Dtk::Core::DSysInfo::UosArch Dtk::Core::DSysInfo::UosMIPS64
+@brief mips64
+@var Dtk::Core::DSysInfo::UosArch Dtk::Core::DSysInfo::UosSW64
+@brief sw_64
+
+
+@fn static bool Dtk::Core::DSysInfo::isDeepin() //FIXME: 显示错乱 无法修复
+@brief 是否为 deepin 或 uos 系统
+@return 0 不是 deepin 或 uos 系统
+@return 1 是 deepin 或 uos 系统
+
+@fn static bool Dtk::Core::DSysInfo::isDDE()
+@brief 是否使用 dde 桌面环境
+@note 此方法仅在 linux 平台下可用
+
+@fn static DeepinType Dtk::Core::DSysInfo::deepinType()
+@brief deepin 系统类型
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::deepinTypeDisplayName (const QLocale &locale=QLocale::system())
+@brief 显示的 deepin 发行版类型名称
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::deepinVersion()
+@brief deepin 版本
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::deepinCopyright()
+@brief deepin 开源许可协议
+@note 此方法仅在 linux 平台下可用
+
+@fn static UosEdition Dtk::Core::DSysInfo::uosEditionType()
+@brief DSysInfo::osEditionType 版本类型 显示版本类型 专业版/个人版/社区版..
+@note 根据 osBuild.B && osBuild.D
+@note 此方法仅在 linux 平台下可用
+
+@fn static UosArch Dtk::Core::DSysInfo::uosArch()
+@brief DSysInfo::osArch 架构信息
+@details(使用一个字节的二进制位, 从低位到高位) 【0x8 sw64】【0x4 mips64】【0x2 arm64】【0x1 amd64】
+@note 此处架构是从 OsBuild 获取的系统版本的 Arch 信息, 并不是指硬件的 Arch 信息
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString uosProductTypeName(const QLocale &locale=QLocale::system())
+@brief DSysInfo::osProductTypeName 版本名称
+@details ProductType[xx] 项对应的值, 如果找不到对应语言的默认使用 ProductType 的值(Desktop/Server/Device) locale 当前系统语言
+
+@fn static QString Dtk::Core::DSysInfo::uosSystemName(const QLocale &locale=QLocale::system())
+@brief SystemName[xx] 项对应的值
+@details 如果找不到对应语言的默认使用 SystemName 的值 Uniontech OS locale 当前系统语言
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::function uosEditionName(const QLocale &locale=QLocale::system())
+@brief 版本名称 EditionName[xx] 项对应的值
+@details 如果找不到对应语言的默认使用 EditionName 的值(Professional/Home/Community...) locale 当前系统语言
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::spVersion()
+@brief 阶段版本名称
+@details 小版本号 A-BC-D 中 BC、 A.B.C 中的 B 返回 SP1-SPxx, 如果正式版返回空 X.Y.Z模式下暂不支持返回此版本号
+@note minVersion.BC == 00 正式版本, minVersion.BC | minVersion.B == 01-99 SP1….SP99
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::udpateVersion()
+@brief 更新版本名称 小版本号 A-BC-D 中 D、A.B.C 模式中的 C 返回 update1… update9, 如果正式版返回空 X.Y.Z 模式下暂不支持返回此版本号
+@note minVersion.D == 0;正式版本 minVersion.D | minVersion.C == 1-9;update1… update9, updateA...updateZ
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::majorVersion()
+@brief 主版本号 主版本号 【20】【23】【25】【26】【29】【30】
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::minorVersion()
+@brief 小版本号 【ABCD】 ·[0-9]{4} 【A.B.C】 或者【X.Y.Z】
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::buildVersion()
+@brief 小版本号 系统镜像批次号, 按时间顺序(不可回退)从100-999递增
+@note 此方法仅在 linux 平台下可用
+
+@fn static QString Dtk::Core::DSysInfo::distributionInfoPath ()
+@brief 返回 distribution 文件地址 一般在`/usr/share/deepin/`目录下
+
+@fn static QString Dtk::Core::DSysInfo::distributionInfoSectionName(OrgType type)
+@brief 返回 distribution.info 文件中 SectionName 字段的值
+
+@fn static Dtk::Core::DSysInfo::distributionOrgName(OrgType type=Distribution, const QLocale &locale=QLocale::system())
+@brief 返回组织名称
+@details 使用类型为Distribution来获取当前deepin distribution本身的名称
+
+@fn static QPair<QString, QString>Dtk::Core::DSysInfo::distributionOrgWebsite(OrgType type=Distribution)
+@brief 发行版组织的网站名称和网址。使用 type 作为 Distribution 获取当前 deepin 发行版本身的名称。
+
+@fn static QString Dtk::Core::DSysInfo::distributionOrgLogo(OrgType orgType=Distribution, LogoType type=Normal, const QString &fallback=QString())
+@brief 获得的组织logo路径, 如果不存在, 则返回给定的其他路径
+@details 使用 type 作为 Distribution 获取当前 deepin 发行版本身的logo。
+
+@fn static QString Dtk::Core::DSysInfo::operatingSystemName()
+@brief 操作系统名
+
+@fn static ProductType Dtk::Core::DSysInfo::productType()
+@brief 产品类型
+
+@fn static QString Dtk::Core::DSysInfo::productVersion()
+@brief 产品版本
+
+@fn static bool Dtk::Core::DSysInfo::isCommunityEdition()
+@brief 检查当前版本是否是社区版 开发者可以使用这种方式来检查我们是否需要启用或禁用社区版或企业版的功能。
+@details 目前的规则:
+ 专业版、服务器版、个人版(DeepinType)将被视为企业版。<br>
+ Uos(ProductType)将被视为企业版。
+
+@fn static QString Dtk::Core::DSysInfo::computerName()
+@brief 电脑名
+
+@fn static QString Dtk::Core::DSysInfo::cpuModelName()
+@brief cpu模式名
+
+@fn static qint64 Dtk::Core::DSysInfo::memoryInstalledSize()
+@brief 内存安装大小
+
+@fn static qint64 Dtk::Core::DSysInfo::memoryTotalSize()
+@brief 实际内存大小
+
+@fn static qint64 Dtk::Core::DSysInfo::systemDiskSize()
+@brief 系统磁盘大小
+
+@fn static QDateTime Dtk::Core::DSysInfo::bootTime ()
+@brief 系统启动时间点
+
+@fn static QDateTime Dtk::Core::DSysInfo::shutdownTime ()
+@brief 上一次正常关机时间点(重启也会被记录在内)
+
+@fn static qint64 Dtk::Core::DSysInfo::uptime()
+@brief 系统启动到现在时长
+@note 参见`cat /proc/uptime`命令
+
+@fn static Arch Dtk::Core::DSysInfo::arch
+@brief cpu架构信息
+@note 此处架构是从gcc编译器获取的
+
+*/
--- /dev/null
+@page global global--dtk全局工具组件
+
+# DTk global:dtk全局工具类
+## dsysinfo:dtk系统信息工具类
+
+[dsysinfo.h 详细文档](dsysinfo_8h.html)<br>
+这里放一个最小化使用dsysinfo的例子:<br>
+cmake:
+
+```cmake
+cmake_minimum_required(VERSION 3.13) # cmake版本要求
+set (VERSION "1.0.0" CACHE STRING "define project version") # 定义项目版本
+set(BIN_NAME test) # 定义项目名称
+project(test) # 定义项目名称
+file(GLOB_RECURSE SRCS "*.h" "*.cpp") # 定义项目源文件
+find_package(Qt5 REQUIRED COMPONENTS Core) # 寻找Qt5
+find_package(DtkCore REQUIRED) # 寻找DtkCore
+
+add_executable(test
+ main.cpp # 源文件
+)
+
+target_link_libraries(test PRIVATE
+ ${DtkCore_LIBRARIES} # 链接DtkCore
+ Qt5::Core # 链接Qt5
+)
+
+```
+cpp:
+```cpp
+#include <DSysInfo> // 引入DSysInfo
+#include <qdebug.h> // 引入qdebug.h
+DCORE_USE_NAMESPACE // 使用dtkcore命名空间
+
+int main(int argc, char **argv) {
+
+ qDebug() << DSysInfo::deepinType(); // 打印deepin类型
+ qDebug() << DSysInfo::ProductType(); // 打印产品类型
+ return 0;
+}
+```
+其余的组件使用方法类似,这里就不一一列举了
+
+@defgroup dglobal
+@brief dtk设置全局工具组件
+@details
+ dtk全局工具组件,提供了设置全局工具的功能。<br>
+ 包含以下功能:
+ * dsysinfo:dtk系统信息工具类
+ * dconfig:dtk配置文件工具类
--- /dev/null
+/*!
+@~chinese
+@ingroup dlog
+@file include/log/AbstractAppender.h
+
+AbstractAppender类是所有可以与Logger一起使用的日志appender的基础接口类。
+@class Dtk::Core::AbstractAppender
+@brief AbstractAppender为应用消息的线程安全、互斥保护的日志提供了一个通用的实现
+@details AbstractAppender为应用消息的线程安全、互斥保护的日志提供了一个通用的实现,例如ConsoleAppender、FileAppender或其他的东西。<br>
+ AbstractAppender是抽象的,不能被实例化,但是你可以使用它的任何一个子类,或者根据你的选择创建一个自定义的日志appender。<br>
+ Appenders是逻辑设备,旨在通过调用`Logger::registerAppender()`附加到Logger对象。在每个来自应用程序的日志记录调用中,Logger对象都会依次调用所有在它身上注册的appender的`write()`函数。<br>
+ 你可以子类化AbstractAppender来实现你喜欢的任何类型的日志目标。它可以是外部日志子系统(例如,*nix中的syslog)、XML文件、SQL数据库条目、D-Bus消息或任何你能想到的其他东西。<br>
+ 对于简单的非结构化的纯文本日志(例如,到一个纯文本文件或到控制台输出),请子类化AbstractStringAppender而不是AbstractAppender,这将给你一个更方便的方法来控制日志输出的格式。
+
+@fn AbstractAppender Dtk::Core::AbstractAppender::AbstractAppender()
+@brief AbstractAppender构造函数
+
+@fn AbstractAppender Dtk::Core::AbstractAppender::~AbstractAppender()
+@brief AbstractAppender析构函数
+
+@fn Logger::LogLevel Dtk::Core::AbstractAppender::detailsLevel()
+@brief 返回appender的当前日志级别
+@details 返回appender的当前日志级别.日志级别低于当前`detailsLevel()`的日志记录将被appender默认忽略,
+ 并且不会被发送到其append()函数。
+ 它提供了额外的日志灵活性,允许你为不同类型的日志设置不同的记录等级
+@note 该函数是线程安全的
+@sa setDetailsLevel()
+@sa Logger::LogLevel
+@return 日志记录等级
+
+@fn void Dtk::Core::AbstractAppender::setDetailsLevel(Logger::LogLevel level)
+@brief 设置当前appender的记录级别,默认记录级别为Logger::Debug
+@note 该函数是线程安全的
+@sa setDetailsLevel()
+@sa Logger::LogLevel
+
+@fn void Dtk::Core::AbstractAppender::setDetailsLevel(const QString &level)
+@brief 设置当前appender的记录级别,这个函数是为了简化输入而提供的,它的行为与同名函数类似。
+@sa AbstractAppender::setDetailsLevel(Logger::LogLevel level)
+@sa setDetailsLevel()
+@sa Logger::LogLevel
+
+@fn void Dtk::Core::AbstractAppender::write(const QDateTime &time, Logger::LogLevel level, const char *file, int line, const char *func, const QString &category, const QString &msg)
+@brief 尝试写入日志,这是由Logger对象调用的函数,用于向appender写入日志信息
+@param[in] time 时间戳
+@param[in] level 日志记录等级
+@param[in] file 目标文件名
+@param[in] line 要输出的行数
+@param[in] func 输出的函数名称
+@param[in] category 日志类别
+@param[in] msg 输出信息
+@note 该函数是线程安全的
+@sa Logger::write()
+@sa detailsLevel()
+
+@fn void Dtk::Core::AbstractAppender::AbstractAppender::append(const QDateTime &timeStamp, Logger::LogLevel level, const char *file, int line,
+ const char *function, const QString &category, const QString &message) = 0
+@brief 将日志记录写到logger实例中
+@details 每次当用户试图使用`write()`函数向这个AbstractAppender实例写入消息时,都会调用这个函数。`write()`函数作为代理工作,只输出日志级别大于或等于当前`logLevel()`的消息
+@note 当你实现一个自定义的appender时,需要重载这个函数。
+@note 该函数不需要是线程安全的,因为它不会被Logger对象直接调用。`write()`函数作为代理,保护该函数不被并发调用。
+@param[in] timeStamp 时间戳
+@param[in] level 日志记录等级
+@param[in] file 目标文件名
+@param[in] line 要输出的行数
+@param[in] function 输出的函数名称
+@param[in] category 日志类别
+@param[in] message 输出信息
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dlog
+@file include/log/AbstractStringAppender.h
+
+@class Dtk::Core::AbstractStringAppender
+@brief AbstractStringAppender类为处理纯文本格式的Appender提供了一个方便的基础日志
+@details AbstractStringAppender是AbstractAppender类的简单扩展,
+ 它提供了一种方便的方式来创建自定义日志应用程序, 该程序使用纯文本格式的日志.
+ 它有`formattedString()`保护类型(不可直接被调用)函数, 可以根据`setFormat()`设置的格式来格式化日志参数。
+@note 这个类不能直接实例化, 因为它包含从AbstractAppender类继承的纯虚函数。
+@brief 关于自定义日志输出格式的更详细描述, 请参见setFormat()函数的文档
+@sa AbstractStringAppender::setFormat()
+
+@fn AbstractStringAppender Dtk::Core::AbstractStringAppender::AbstractStringAppender()
+@brief 构建一个新的字符串appender对象
+
+@fn QString Dtk::Core::AbstractStringAppender::format()
+@brief 返回当前使用的format字符串
+@details 默认记录格式为:`"%{time}{yyyy-MM-ddTHH:mm:ss.zzz} [%{type:-7}] <%{function}> %{message}\n"`
+ 你可以使用setFormat()函数来设置不同的日志记录格式。
+@sa AbstractStringAppender::setFormat()
+@return 返回当前使用的format字符串
+
+@fn void Dtk::Core::AbstractStringAppender::setFormat(const QString &format)
+@brief 设置日志格式, 以便用这个appender向日志目标写入字符串。
+@details
+ 对于那些使用过标准sprintf函数的开发者来说, 字符串格式非常常见。
+ 日志输出格式是一个简单的QString, 带有特殊的标记(以%符号开始), 在写日志记录时将被替换成它的内部含义。
+ 控制标记以百分号(%)开始, 后面是{}括号内的命令(该命令描述了将被放入日志记录而不是标记的内容)。
+ 可选的字段宽度参数可以在命令后直接指定(通过括号内的冒号), 有些命令需要一个额外的格式化参数(在第二个{}括号内)
+ 字段宽度参数的工作原理与`QString::arg()`fieldWidth参数几乎相同(并在内部使用它),
+ 例如, "%{type:-7}"将被替换为消息的左边填充的调试级别("Debug")或其他东西。更详细的描述请参考Qt文档。
+@details 支持的标记:
+| **标记** | **含义** | **备注** |
+|:-----------:|:-----------------------------------------------------:|:-------------------------------------------------------------------:|
+| %{time} | 时间戳。你可以使用标记后的第二个{}括号来指定你的自定义时间戳格式。默认格式:"HH:mm:ss.zzz" | "%{time}{dd-MM-yyyy, HH:mm}"可能被替换为 "20-9-2022, 21:24", 这取决于当前的日期和时间。 |
+| %{type} | 日志级别。可能的日志级别在Logger::LogLevel枚举中显示。 | |
+| %{Type} | 大写的日志级别 | |
+| %{typeOne} | 一个字母的日志级别 | |
+| %{TypeOne} | 一个大写字母的日志级别 | |
+| %{File} | 记录日志的文件的完整源文件名(含路径), 使用 `__FILE__`预处理程序宏 | |
+| %{file} | 简短的文件名(去除路径后的文件名) | |
+| %{line} | 源文件中的行数。使用`__LINE__`预处理程序宏。 | |
+| %{Function} | 调用`LOG_*`宏的函数的名称。使用Qt提供的`Q_FUNC_INFO`宏。 | |
+| %{function} | 类似于%{Function}, 但使用 stripFunctionName 剥离了函数名。 | |
+| %{message} | 日志内容 | |
+| %{category} | 日志类别 | |
+| %{appname} | 应用程序名称(由`QCoreApplication::applicationName()`函数返回) | |
+| %{pid} | 应用程序的pid(由`QCoreApplication::applicationPid()`函数返回) | |
+| %{threadid} | 线程ID | |
+| %% | 转译为单`%`标记 | |
+
+@fn static QString Dtk::Core::AbstractStringAppender::stripFunctionName(const char *name)
+@brief 剥离长函数签名(由Q_FUNC_INFO宏添加)
+@details 字符串处理掉了函数的返回类型、参数和模板参数, 这对于提高日志输出的可读性是非常有用的
+@param[in] name 函数名称
+@return 剥离的函数名称
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dlog
+@file include/log/ConsoleAppender.h
+
+@class Dtk::Core::ConsoleAppender
+@brief ConsoleAppender是简单的控制台appender,将日志记录写入`std::cerr`输出流<br>
+@details ConsoleAppender使用`[%{type:-7}] <%{function}> %{message}\n`作为默认输出格式。它类似于AbstractStringAppender,但不显示时间<br>
+ 你可以通过使用`QT_MESSAGE_PATTERN`环境变量来修改ConsoleAppender的输出格式,而不用修改你的代码。
+ 变量。如果你需要你的应用程序忽略这个环境变量,你可以调用`ConsoleAppender::ignoreEnvironmentPattern(true)`
+
+@fn ConsoleAppender Dtk::Core::ConsoleAppender::ConsoleAppender()
+@brief 构造函数,设置默认的日志格式为`[%{type:-7}] <%{function}> %{message}\n`
+
+@fn virtual QString Dtk::Core::ConsoleAppender::format()
+@brief 返回当前默认输出格式,可以调用父类的`setFormat()`来更改日志输出格式
+@sa AbstractStringAppender::setFormat()
+
+@fn void Dtk::Core::ConsoleAppender::ignoreEnvironmentPattern(bool ignore)
+@brief 设置应用程序忽略环境变量来修改ConsoleAppender的输出格式,使用默认输出格式
+@sa [QT_MESSAGE_PATTERN](https://doc.qt.io/qt-5/debug.html#warning-and-debugging-messages)
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dlog
+@file include/log/FileAppender.h
+
+@class Dtk::Core::FileAppender
+@brief 简单的文件appender,将日志记录写到纯文本文件中
+
+@fn FileAppender Dtk::Core::FileAppender::FileAppender(const QString &fileName = QString())
+@brief 构造函数,指定日志记录文件的文件名。
+
+@fn QString Dtk::Core::FileAppender::fileName() const
+@brief 返回由setFileName()设置的名称,或返回FileAppender构造函数传入的fileName
+@sa FileAppender::setFileName()
+
+@fn void Dtk::Core::FileAppender::setFileName(const QString &s)
+@brief 设置文件的名称。该名称可以没有路径,可以是相对路径,也可以是绝对路径
+@sa FileAppender::fileName()
+
+@fn qint64 Dtk::Core::FileAppender::size()
+@brief 返回日志文件大小
+
+@fn bool FileAppender::openFile()
+@brief 打开日志记录文件
+
+@fn void FileAppender::closeFile()
+@brief 关闭日志记录文件
+
+*/
--- /dev/null
+/*!
+@~chinese
+
+@ingroup dlog
+@file include/log/Logger.h
+
+@class Dtk::Core::Logger Logger.h
+@brief 非常简单但相当强大的组件,可用于记录你的应用程序活动。
+
+@enum Dtk::Core::Logger::LogLevel
+@brief 日志等级
+@var Dtk::Core::Logger::LogLevel Dtk::Core::Logger::Trace
+追踪级别,可用于大部分不需要的记录,用于内部代码追踪
+@var Dtk::Core::Logger::LogLevel Dtk::Core::Logger::Debug
+调试级别,用于软件的调试。
+@var Dtk::Core::Logger::LogLevel Dtk::Core::Logger::Info
+信息级别,可用于信息记录,这可能不仅对开发者有意义
+@var Dtk::Core::Logger::LogLevel Dtk::Core::Logger::Warning
+警告,可以用来记录你的应用程序检测到的一些非致命的警告
+@var Dtk::Core::Logger::LogLevel Dtk::Core::Logger::Error
+错误,可能是一个较大问题,导致你的程序工作出错,但不至于崩溃
+@var Dtk::Core::Logger::LogLevel Dtk::Core::Logger::Fatal
+致命错误,用于不可恢复的错误,在写入日志记录后立即崩溃应用程序(终止)
+
+@fn Logger Dtk::Core::Logger::Logger()
+@brief 构建Logger的实例。
+@note 如果你只使用一个全局的logger实例,不需要手动使用这个构造函数,可以考虑使用logger宏来代替访问记录器实例
+
+@fn Logger Dtk::Core::Logger::Logger(const QString &defaultCategory)
+@brief 构建Logger的实例并设置Logger的默认类别
+@note 如果你只使用一个全局的logger实例,不需要手动使用这个构造函数,
+ 可以考虑使用logger宏来访问logger实例并调用setDefaultCategory方法
+@sa Logger::Logger()
+@sa Logger::setDefaultCategory()
+
+@fn Logger Dtk::Core::Logger::~Logger()
+@brief 析构函数
+@note 你可能不需要直接使用这个函数。记录器的全局实例将在你的QCoreApplication执行结束后自动销毁
+
+@fn static Logger* Dtk::Core::Logger::globalInstance()
+@brief 返回Logger的全局对象
+@note 在大多数情况下,你不应该直接使用这个函数。可以考虑使用 [logger](@ref logger) 宏来代替
+@return Logger指针
+
+@fn static QString Dtk::Core::Logger::levelToString(Logger::LogLevel level)
+@brief 将LogLevel枚举值转换为其字符串表示
+@sa Logger::LogLevel
+
+@fn static LogLevel Dtk::Core::Logger::levelFromString(const QString &str)
+@brief 将LogLevel字符串表示转换为枚举值
+@note 字符串的比较是不分大小写的。如果提供的日志级别字符串不合法,则返回`Logger::Debug`的枚举值
+@sa Logger::LogLevel
+@sa Logger::levelToString()
+
+@fn void Dtk::Core::Logger::registerAppender(AbstractAppender *appender)
+@brief 注册appender来写入日志记录<br>
+ 在写入日志的调用中(使用其中一个宏或`write()`函数),Logger遍历appender列表,并向每个appender写入日志记录。请查阅AbstractAppender文档以了解appenders的概念。
+ 如果没有appender被添加到Logger中,它就会退回到记录到`std::cerr`流中。
+@param[in] appender 要在Logger中注册的Appender
+@note Logger对appender拥有所有权,它将在应用程序退出时删除它。因此,appender必须在堆上创建,以防止appender被重复销毁。
+@sa Logger::registerCategoryAppender()
+@sa Dtk::Core::AbstractAppender
+
+@fn void Dtk::Core::Logger::registerCategoryAppender(const QString &category, AbstractAppender *appender)
+@brief 注册appender,将日志记录写到特定的类别中<br>
+@details 调用这个方法,你可以将一些appender与命名的类别联系起来。
+ 在调用特定类别的日志写入时(直接调用带有类别参数的`write()`,写入默认类别,或使用特殊的`dCDebug()`、`dCWarning()`等宏),
+ Logger只将日志信息写入注册的类别appender列表中。<br>
+ 你可以调用`logToGlobalInstance()`将所有类别的日志信息传递给全局的Logger实例Appender(使用`registerAppender()`注册)。
+ 如果没有特定名称的类别应用程序被注册到记录器上,它就会退回到记录到`std::cerr` STL流中,这两种方法都有简单的警告信息。
+@param[in] category 类别名称
+@param[in] appender 要在Logger中注册的Appender
+@note Logger对appender拥有所有权,它将在应用程序退出时删除它。根据这一点,appender必须在堆上创建,以防止appender被重复销毁。
+@sa Logger::registerAppender()
+@sa Logger::logToGlobalInstance()
+@sa Logger::setDefaultCategory()
+
+@fn void Dtk::Core::Logger::logToGlobalInstance(const QString &category, bool logToGlobal = false)
+@brief 将一些日志类别与全局日志实例应用者联系起来。
+ 如果logToGlobal设置为 "true",所有到指定类别的Logger的日志消息也将被写入全局日志实例appenders(使用`registerAppender()`注册)<br>
+ 默认情况下,所有到特定类别的消息都只写到特定的类别应用者
+ (使用 `registerCategoryAppender()` 注册)
+@param[in] category 类别名称
+@param[in] logToGlobal 是否将日志写入全局日志appenders
+@sa Logger::registerAppender()
+@sa Logger::globalInstance()
+@sa Logger::registerCategoryAppender()
+
+@fn void Dtk::Core::Logger::setDefaultCategory(const QString &category);
+ QString defaultCategory()
+@brief 设置默认的日志类别
+ 所有到这个类别应用的日志信息也将被写入一般的日志实例应用(使用[registerAppender](@ref registerAppender)方法注册),反之亦然
+ 特别是,任何对dDebug()宏的调用都将被视为类别日志
+ 所以你不需要用dCDebug()宏来指定类别名称
+ 要取消默认的类别,传递一个空字符串作为参数
+@param[in] category 类别名称
+@note "category "格式标记将被设置为所有这些消息的类别名称
+@sa Dtk::Core::AbstractStringAppender::setFormat()
+@sa Logger::defaultCategory()
+@sa Logger::registerCategoryAppender()
+@sa Logger::logToGlobalInstance()
+
+@fn QString Dtk::Core::Logger::defaultCategory()
+@brief 返回默认的日志类别名称
+@sa Logger::setDefaultCategory()
+
+@fn void Dtk::Core::Logger::write(const QDateTime &time, LogLevel level,
+ const char *file, int line,const char *func,
+ const char *category, const QString &msg)
+@brief 写入日志记录。
+ 将带有所提供参数的日志记录写给所有注册的应用
+@param[in] time 时间戳
+@param[in] level 日志记录等级
+@param[in] file 目标文件名
+@param[in] line 要输出的行数
+@param[in] func 输出的函数名称
+@param[in] category 日志类别
+@param[in] msg 输出信息
+@note 使用`Logger::Fatal`日志级别记录日志记录将导致调用STL `abort()`函数,
+ 这将中断你的软件的运行并Core dump
+@sa Logger::LogLevel
+@sa Dtk::Core::AbstractAppender
+
+@fn void Dtk::Core::Logger::write(LogLevel level, const char *file, int line,
+ const char *func, const char *category, const QString &msg)
+@brief 这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入time参数
+@note 这个函数使用了`QDateTime::currentDateTime()`用获得的当前时间戳
+@sa Logger::write(const QDateTime &time, LogLevel level,
+ const char *file, int line,const char *func,
+ const char *category, const QString &msg)
+@param[in] level 日志记录等级
+@param[in] file 目标文件名
+@param[in] line 要输出的行数
+@param[in] func 输出的函数名称
+@param[in] category 日志类别
+@param[in] msg 输出信息
+
+@fn QDebug Dtk::Core::Logger::write(LogLevel level, const char *file,
+ int line,const char *func, const char *category)
+@brief 这是为方便而提供的重载函数。它的行为与同名函数类似,此函数无需传入message参数
+@details 这个函数不接受任何日志信息作为参数。它返回的是可以使用流函数写入的`QDebug`对象<br>
+ 例如,你可能想写:
+ @code
+ dDebug() << "This is the size" << size << "of the element" << elementName;
+ @endcode
+ 而不是写为:
+ @code
+ dDebug(QString(QLatin1String("This is the size %1x%2 of the element %3")).arg(size.x()).arg(size.y()).arg(elementName));
+ @endcode
+ 这样会更优雅一些<br>
+ 请考虑阅读Qt参考文档,了解QDebug类的使用语法
+@note 这个重载肯定是最好用的一个重载,但是代价是它会比其他的重载更为慢
+@sa Logger::write(const QDateTime &time, LogLevel level,
+ const char *file, int line,const char *func,
+ const char *category, const QString &msg)
+@param[in] level 日志记录等级
+@param[in] file 目标文件名
+@param[in] line 要输出的行数
+@param[in] func 输出的函数名称
+@param[in] category 日志类别
+
+@fn void Dtk::Core::Logger:: writeAssert(const char *file, int line,
+ const char *func, const char *condition)
+@brief 写入断言
+@details 这个函数使用write()函数来写断言记录<br>
+ 断言记录总是使用`Logger::Fatal`日志级别来写,这将导致程序的中止和核心转储(core dump)的生成(如果支持)
+ 写入appenders的信息与传入参数相同,前缀为 `ASSERT:`
+@param[in] file 目标文件名
+@param[in] line 要输出的行数
+@param[in] func 输出的函数名称
+@note 不建议直接调用这个函数,你可以直接调用`LOG_ASSERT`宏,它将为这个函数提供所有需要的信息
+@sa Logger::write(const QDateTime &time, LogLevel level,
+ const char *file, int line,const char *func,
+ const char *category, const QString &msg)
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dlog
+@file include/log/RollingFileAppender.h
+
+@class Dtk::Core::RollingFileAppender
+@brief RollingFileAppender类扩展了FileAppender,使日志文件在按照用户指定的频率进行滚动
+@details
+ 该类是基于`Log4Qt.DailyRollingFileAppender`类[Log4Qt](http://log4qt.sourceforge.net/)
+ 并具有相同的日期模式格式<br>
+ 例如,如果fileName设置为`/foo/bar`,DatePattern设置为每日滚动('.yyy-MM-dd'.log'),在2022-05-28的午夜。
+ 日志文件`/foo/bar.log`将被复制到`/foo/bar.2022-05-28.log`,2022-05-29的日志将在`/foo/bar`中继续,直到第二天滚动<br>
+ logFilesLimit参数用于在滚动期间自动删除目录中最旧的日志文件。
+ (所以在任何时候,目录中都不会有超过logFilesLimit的最新日志文件存在)
+
+@enum Dtk::Core::RollingFileAppender::DatePattern
+@brief 日志频率
+@var Dtk::Core::RollingFileAppender::DatePattern Dtk::Core::RollingFileAppender::MinutelyRollover
+@brief 每分钟的日期模式字符串是`.yyyy-MM-dd-hh-mm`
+@var Dtk::Core::RollingFileAppender::DatePattern Dtk::Core::RollingFileAppender::HourlyRollover
+@brief 每小时的日期模式字符串是 `.yyyy-MM-dd-hh`
+@var Dtk::Core::RollingFileAppender::DatePattern Dtk::Core::RollingFileAppender::HalfDailyRollover
+@brief 每半天的日期模式字符串是`.yyyy-MM-dd-a`
+@var Dtk::Core::RollingFileAppender::DatePattern Dtk::Core::RollingFileAppender::DailyRollover
+@brief 每天的日期模式字符串是`.yyyy-MM-dd`
+@var Dtk::Core::RollingFileAppender::DatePattern Dtk::Core::RollingFileAppender::WeeklyRollover
+@brief 每周的日期模式字符串是`.'yyyy-ww`
+@var Dtk::Core::RollingFileAppender::DatePattern Dtk::Core::RollingFileAppender::MonthlyRollover
+@brief 每月的日期模式字符串是`.yyyy-MM`
+
+@fn RollingFileAppender Dtk::Core::RollingFileAppender::RollingFileAppender()
+@brief 构造函数,默认限制日志文件个数是0,默认日志文件大小是1024*1024*20=20m
+
+@fn DatePattern Dtk::Core::RollingFileAppender::datePattern()
+@brief 返回当前的滚动更新频率
+@sa RollingFileAppender::DatePattern
+
+@fn void Dtk::Core::RollingFileAppender::setDatePattern(DatePattern datePattern)
+@brief 设置日志滚动频率
+@sa RollingFileAppender::DatePattern
+
+@fn void Dtk::Core::RollingFileAppender::setDatePattern(const QString &datePattern)
+@brief 此重载是为了方便使用,可以传入一个滚动频率字符串
+@sa RollingFileAppender::DatePattern
+@sa RollingFileAppender::setDatePattern(DatePattern datePattern)
+
+@fn QString Dtk::Core::RollingFileAppender::datePatternString()
+@brief 以字符串形式,返回当前滚动频率
+
+@fn void Dtk::Core::RollingFileAppender::setLogFilesLimit(int limit)
+@brief 设置日志文件数量上限,最旧的文件会被滚动覆盖
+
+@fn int Dtk::Core::RollingFileAppender::logFilesLimit()
+@brief 返回设置的日志文件数量上限
+@sa RollingFileAppender::setLogFilesLimit()
+
+@fn int Dtk::Core::RollingFileAppender::setLogSizeLimit(int qint64)
+@brief 设置日志文件单个文件大小上限
+
+@fn qint64 Dtk::Core::RollingFileAppender::logSizeLimit()
+@brief 返回设置的日志文件单个文件大小上限
+@sa RollingFileAppender::setLogSizeLimit(int qint64)
+
+*/
--- /dev/null
+/*!
+@~chinese
+
+@ingroup dlog
+@file include/log/LogManager.h
+@class Dtk::Core::DLogManager
+@brief DLogManager是dtk日志管理类,提供对日志的基础设置
+@details 使用此类可以很方便的为自己的dtk程序加上日志,一般情况下应用如果需要写入日志只需要调用此类
+调用相应的注册方法设置存储路径相关信息即可
+
+@fn static void Dtk::Core::DLogManager::registerConsoleAppender()
+@brief 注册默认的控制台记录器
+
+@fn static void Dtk::Core::DLogManager::registerFileAppender()
+@brief 注册默认的文件记录器,默认的文件记录器类型为RollingFileAppender.
+@note 输出日志默认文件位置为`~/.cache/<organizationName>/<applicationName>.log`如果获取 $HOME 环境变量失败将不写日志.
+如果在创建程序的时候没有指定这两个name,如果未设置organizationName,则是 `~/.cache/<applicationName>/<applicationName>.log`
+如果applicationName没有设置, 会fallback到进程二进制文件名
+@sa DLogManager::setlogFilePath()
+
+@fn static void Dtk::Core::DLogManager::registerJournaldAppender()
+@brief 注册默认的journald记录器
+@note 此方法只在linux下有效
+@detials 默认输出文件位置为`/var/log/journal/<machine-id>.journal`,前提是此目录存在且有写权限,
+如果目录不存在,systemd将不会自动创建此目录,并将日志写入到`/run/log/journal/<machine-id>.journal`中,此目录不支持持久化存储,
+将在下次重启后丢失。
+@note 查看日志可用`journalctl`命令,查看详细信息可用`journalctl -o verbose`命令,也可以使用deepin 日志查看器查看
+
+@fn static QString Dtk::Core::DLogManager::getlogFilePath()
+@brief 获取当前的日志存储路径,包括文件名
+
+@fn static void Dtk::Core::DLogManager::setlogFilePath(const QString &logFilePath)
+@brief 设置log文件路径。如果文件存在且不是log文件类型(比如文件夹)会导致设置无效并输出一条警告。
+@note 注意,此文件路径为包括具体文件名的绝对路径。需要此文件不存在或者存在且为有效类型(xxx.log),一般情况下无需手动指定路径。
+
+@fn static void Dtk::Core::DLogManager::setLogFormat(const QString &format)
+@brief 设置日志的格式,如果没有设置格式
+@details 默认的格式为:`"%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] [%{file:-20} %{function:-35} %{line}] %{message}\n"`
+@sa Dtk::Core::AbstractStringAppender::format()
+
+*/
--- /dev/null
+@page DLog dlog--DTK日志组件
+
+# Dlog:DTK日志组件
+
+## 简介
+
+DTK日志组件,提供了日志的输出、日志级别的设置、日志文件的设置等功能。为了简化日志的使用,我们提供了两种使用方式,一种是使用宏,另一种是使用类。
+但是更为建议使用宏的方式进行使用。因为使用宏可以输出更多的信息,比如文件名、函数名、行号等。
+
+## 使用
+
+### 宏
+
+DTK日志组件提供了一系列的宏,用于输出日志。这些宏的定义在dloggerdefs.h中
+如果需要使用宏,则需要在你的代码中包含`DLog`文件。
+@note DTK更推荐使用CPP标准引入头文件的方式,即使用`#include <DLog>`的方式引入头文件,而不是使用`#include "xxxxx.h"`的方式引入头文件。
+
+示例代码如下:
+
+```cpp
+#include <DLog>
+#include <QCoreApplication>
+DCORE_USE_NAMESPACE
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+#ifdef Q_OS_LINUX
+ DLogManager::registerJournalAppender();
+#endif
+ DLogManager::registerConsoleAppender();
+ dDebug() << "this is a debug message";
+ return app.exec();
+}
+```
+
+上述代码中,我们使用了dDebug()宏,用于输出一条debug级别的日志。在输出日志时,我们可以使用`<<`运算符,将多个变量输出到日志中。
+注意,registerJournalAppender()仅在Linux平台下有效,因为journal仅在Linux平台下有效。而registerConsoleAppender()则是在所有平台下都有效。
+
+### 类
+
+使用类的方式需要先创建一个logger对象,然后使用logger对象的方法来输出日志,具体请参见logger文档
+
+## 注意事项
+
+### 日志级别
+
+DTK使用的日志级别与Qt的日志级别一致,分别为:Trace、Debug、Info、Warning、Error、Fatal。其中Trace是最低级别,Fatal是最高级别。
+与之不同的是journal的日志级别和DTK的日志级别不一致,journal的日志级别分别为:emergency、alert、critical、error、warning、notice、info、debug。
+这是因为journal的日志级别是从syslog中继承过来的,而syslog的日志级别是从BSD的syslog中继承过来的。而DTK的日志级别是从Qt的日志级别中继承过来的。
+下表是DTK日志级别和journal日志级别的对应关系
+| DTK值 | 序号 | 含义 | syslog值 | syslog序号 |
+|---------|----|-------------------------------------|-------------|----------|
+| dTrace | 0 | 追踪级别,可用于大部分不需要的记录,用于内部代码追踪 | 无 | |
+| dDebug | 1 | 调试级别,用于软件的调试。 | LOG_DEBUG | 7 |
+| dInfo | 2 | 信息级别,可用于信息记录,这可能不仅对开发者有意义 | LOG_INFO | 6 |
+| dWarning | 3 | 警告,可以用来记录你的应用程序检测到的一些非致命的警告 | LOG_WARNING | 4 |
+| dError | 4 | 错误,可能是一个较大问题,导致你的程序工作出错,但不至于崩溃 | LOG_ERR | 3 |
+| dFatal | 5 | 致命错误,用于不可恢复的错误,在写入日志记录后立即崩溃应用程序(终止) | LOG_EMERG | 0 |
+| | | | LOG_ALERT | 1 |
+| | | | LOG_CRIT | 2 |
+| | | | LOG_NOTICE | 6 |
+
+### 日志文件
+
+如果你选择使用journal作为日志输出,那么你需要在系统中安装systemd(一般的linux发行版都会自带systemd)。并且需要确保`/var/log/journal/`
+目录的存在,否则journal会将日志写入到`/run/log/journal/`目录中。
+
+如果你选择使用控制台作为日志输出,那么不会生成日志文件。
+
+如果你选择使用文件作为日志输出,那么你需要确保你的日志文件所在的目录存在,否则会导致日志文件无法创建。
+
+### 日志格式
+
+如果你选择使用journal作为日志输出,且使用宏的方式进行日志输出,那么日志的格式为:
+`[时间] [进程ID] [线程ID] [日志级别] [文件名:行号] [函数名] [日志内容]`,你仅需要关注日志内容即可。其他的信息都是journal自动添加的。
+
+
+@defgroup dlog
+@brief DTK日志组件
+@details
+ DTK日志组件,提供了日志的输出、日志级别的设置、日志文件的设置等功能。
+ 对于DTK日志组件,我们提供了两种使用方式,一种是使用宏,另一种是使用类。
+ 但是更为建议使用宏的方式进行使用
--- /dev/null
+/*!
+@~chinese
+@file include/settings/backend/dsettingsdconfigbackend.h
+@ingroup dsettings
+
+@class Dtk::Core::DSettingsDConfigBackend dsettingsdconfigbackend.h
+@brief 配置存储到DConfig
+
+@fn Dtk::Core::DSettingsDConfigBackend::DSettingsDConfigBackend(const QString &name, const QString &subpath = QString(), QObject *parent = nullptr)
+@brief DSettingsDConfigBackend构造函数,使用DConfig为配置文件名,保存数据到配置文件。
+@param[in] name 配置文件名
+@param[in] subpath 配置文件名的子目录
+@param[in] parent 父对象
+
+@fn virtual QStringList Dtk::Core::DSettingsDConfigBackend::keys() const
+@brief 返回Dconfig的全部键值
+@return
+
+@fn virtual QVariant Dtk::Core::DSettingsDConfigBackend::getOption(const QString &key) const
+@brief 从DConfig获取键值
+@param[in] key
+@return
+
+@fn virtual void QVariant Dtk::Core::DSettingsDConfigBackend::doSetOption(const QString &key, const QVariant &value)
+@brief 给DConfig设置键值
+@param[in] key
+@param[in] value
+
+@fn virtual void Dtk::Core::DSettingsDConfigBackend::doSync()
+@brief 触发DSettings将选项值保存到DConfig
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+@~chinese
+@file include/settings/backend/gsettingsbackend.h
+@ingroup dsettings
+
+@class Dtk::Core::GSettingsBackend gsettingsbackend.h
+@brief DSettings的存储后端使用gsettings
+@details 你可以从libdtkcore-bin中找到此工具, 使用/usr/lib/x86_64-linux-gnu/libdtk-<VERSION(版本号)>/DCore/bin/dtk-settings -h 获取帮助
+
+@fn Dtk::Core::GSettingsBackend::GSettingsBackend(DSettings *settings, QObject *parent = nullptr)
+@brief GSettingsBackend构造函数
+
+@fn virtual QStringList Dtk::Core::GSettingsBackend::keys() const
+@brief gsettings的全部键值
+@return 返回gsettings的全部键值
+
+@fn virtual QVariant Dtk::Core::GSettingsBackend::getOption(const QString &key) const
+@brief 根据`key`获取值
+@return 返回键对应的值
+
+@fn virtual void Dtk::Core::GSettingsBackend::doSetOption(const QString &key, const QVariant &value)
+@brief 设置`key`对应的值
+
+@fn virtual void Dtk::Core::GSettingsBackend::doSync()
+@brief 触发DSettings将选项同步到存储
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+@~chinese
+@file include/settings/backend/qsettingbackend.h
+@ingroup dsettings
+
+@class Dtk::Core::QSettingBackend qsettingbackend.h
+@brief 存储DSettings到QSettings
+
+@fn Dtk::Core::QSettingBackend::QSettingBackend(const QString &filepath, QObject *parent = 0)
+@brief QSettingBackend构造函数,使用QSettings::NativeFormat将数据保存到指定路径。
+@param[in] filepath 存储数据的路径
+@param[in] parent 父对象
+
+@fn virtual QStringList Dtk::Core::QSettingBackend::keys() const
+@brief QSettings的全部键值
+@return 返回QSettings的全部键值
+
+@fn virtual QVariant Dtk::Core::QSettingBackend::getOption(const QString &key) const
+@brief 根据`key`获取值
+@param[in] key 配置项名称
+@return 返回键对应的值
+
+@fn virtual void Dtk::Core::QSettingBackend::doSetOption(const QString &key, const QVariant &value)
+@brief 设置`key`对应的值
+@param[in] key 配置项名称
+@param[in] value 需要设置的值
+
+@fn virtual void Dtk::Core::QSettingBackend::doSync()
+@brief 触发DSettings选项值保存到QSettings
+
+*/
\ No newline at end of file
--- /dev/null
+/*!
+@~chinese
+@file include/settings/dsettings.h
+@ingroup dsettings
+@class Dtk::Core::DSettingsBackend dsettings.h
+@brief DSettingsBackend是一个配置存储类的接口
+@details 简单的例子:
+@code
+{
+ "groups": [{
+ "key": "base",
+ "name": "Basic settings",
+ "groups": [{
+ "key": "open_action",
+ "name": "Open Action",
+ "options": [{
+ "key": "alway_open_on_new",
+ "type": "checkbox",
+ "text": "Always Open On New Windows",
+ "default": true
+ },
+ {
+ "key": "open_file_action",
+ "name": "Open File:",
+ "type": "combobox",
+ "default": ""
+ }
+ ]
+ },
+ {
+ "key": "new_tab_windows",
+ "name": "New Tab & Window",
+ "options": [{
+ "key": "new_window_path",
+ "name": "New Window Open:",
+ "type": "combobox",
+ "default": ""
+ },
+ {
+ "key": "new_tab_path",
+ "name": "New Tab Open:",
+ "type": "combobox",
+ "default": ""
+ }
+ ]
+ }
+ ]
+ }]
+}
+@endcode
+
+读取/设置其值的示例如下:
+@code
+ // 初始化一个存储后端
+ QTemporaryFile tmpFile;
+ tmpFile.open();
+ auto backend = new Dtk::Core::QSettingBackend(tmpFile.fileName());
+
+ // 从json中初始化配置
+ auto settings = Dtk::Core::DSettings::fromJsonFile(":/resources/data/dfm-settings.json");
+ settings->setBackend(backend);
+
+ // 读取配置
+ auto opt = settings->option("base.new_tab_windows.new_window_path");
+ qDebug() << opt->value();
+
+ // 修改配置
+ opt->setValue("Test")
+ qDebug() << opt->value();
+@endcode
+@sa Dtk::Core::DSettingsOption
+@sa Dtk::Core::DSettingsGroup
+@sa Dtk::Core::DSettingsBackend
+@sa Dtk::Widget::DSettingsWidgetFactory
+@sa Dtk::Widget::DSettingsDialog
+
+@fn Dtk::Core::DSettingsBackend::DSettingsBackend(QObject *parent = Q_NULLPTR)
+@brief DSettingsBackend构造函数
+
+@fn virtual QStringList DSettingsBackend::keys() const = 0;
+@brief 返回全部键值
+
+@fn virtual QVariant DSettingsBackend::getOption(const QString &key) const = 0;
+@brief 获取 `key` 对应的值
+
+@fn virtual void DSettingsBackend::doSync() = 0;
+@brief 开始进行同步
+
+@fn virtual void DSettingsBackend::doSetOption(const QString &key, const QVariant &value) = 0;
+@brief 设置`key`对应的值,并使用存储后端进行存储。
+
+@fn void DSettingsBackend::optionChanged(const QString &key, const QVariant &value);
+@brief DSettingsOption的值发生变化时发出的信号。
+@details `key` 发生改变的 option 键,`value`对应键的值。
+
+@fn void DSettingsBackend::sync();
+@brief 私有信号,请勿使用。
+
+@fn void DSettingsBackend::setOption(const QString &key, const QVariant &value);
+@brief 私有信号,请勿使用。
+
+@class Dtk::Core::DSettings dsettings.h
+@brief DSettings是设计上为Dtk的应用程序提供统一的配置存储以及界面生成工具的基础库。
+@details DSetting使用json作为应用配置程序的描述文件。简单来说,应用查询的配置分为组/键值二个基础层级,
+对于一个标准的Dtk配置控件,一般只包含组/子组/键值三个层级,对于超过三个层级的键值,可以通过
+DSettings的API接口进行读取和写入,但是不能在标准的DSettingsDialogs上显示出来。
+
+一个简单的配置文件如下:
+@code
+{
+ "groups": [{
+ "key": "base",
+ "name": "Basic settings",
+ "groups": [{
+ "key": "open_action",
+ "name": "Open Action",
+ "options": [{
+ "key": "alway_open_on_new",
+ "type": "checkbox",
+ "text": "Always Open On New Windows",
+ "default": true
+ },
+ {
+ "key": "open_file_action",
+ "name": "Open File:",
+ "type": "combobox",
+ "default": ""
+ }
+ ]
+ },
+ {
+ "key": "new_tab_windows",
+ "name": "New Tab & Window",
+ "options": [{
+ "key": "new_window_path",
+ "name": "New Window Open:",
+ "type": "combobox",
+ "default": ""
+ },
+ {
+ "key": "new_tab_path",
+ "name": "New Tab Open:",
+ "type": "combobox",
+ "default": ""
+ }
+ ]
+ }
+ ]
+ }]
+}
+@endcode
+
+该组中包含一个base的root组,两个子组: open_action/new_tab_windows,每个子组有包含若干选项。
+对于"New Window Open:"这个配置,其完整的访问id为base.new_tab_windows.new_window_path。
+
+读取/设置其值的示例如下:
+@code
+ // 初始化一个存储后端
+ QTemporaryFile tmpFile;
+ tmpFile.open();
+ auto backend = new Dtk::Core::QSettingBackend(tmpFile.fileName());
+
+ // 从json中初始化配置
+ auto settings = Dtk::Core::DSettings::fromJsonFile(":/resources/data/dfm-settings.json");
+ settings->setBackend(backend);
+
+ // 读取配置
+ auto opt = settings->option("base.new_tab_windows.new_window_path");
+ qDebug() << opt->value();
+
+ // 修改配置
+ opt->setValue("Test")
+ qDebug() << opt->value();
+@endcode
+@sa Dtk::Core::DSettingsOption
+@sa Dtk::Core::DSettingsGroup
+@sa Dtk::Core::DSettingsBackend
+@sa Dtk::Widget::DSettingsWidgetFactory
+@sa Dtk::Widget::DSettingsDialog
+
+@fn Dtk::Core::DSettings::DSettings(QObject *parent = Q_NULLPTR)
+@brief DSettings构造函数
+
+@fn void Dtk::Core::DSettings::setBackend(DSettingsBackend *backend = nullptr)
+@brief 设置存储后端
+
+@fn static QPointer<DSettings> Dtk::Core::DSettings::fromJson(const QByteArray &json)
+@brief 从 json 中获取 DSettings,返回的数据使用之后需要自己手动释放。
+
+@fn static QPointer<DSettings> Dtk::Core::DSettings::fromJsonFile(const QString &filepath)
+@brief 从 json 文件中获取 DSetting。
+
+@fn QJsonObject Dtk::Core::DSettings::meta() const
+@brief 返回JSON对象
+
+@fn QStringList Dtk::Core::DSettings::keys() const
+@brief 返回全部键值
+
+@fn QList<QPointer<DSettingsOption> > Dtk::Core::DSettings::options() const
+@brief 返回全部 `key` 的值
+
+@fn QPointer<DSettingsOption> Dtk::Core::DSettings::option(const QString &key) const
+@brief 获取 `key` 对应的值
+
+@fn QVariant Dtk::Core::DSettings::value(const QString &key) const
+@brief 获取 `key` 对应的值
+
+@fn QStringList Dtk::Core::DSettings::groupKeys() const
+@brief 返回子组全部键值
+
+@fn QList<QPointer<DSettingsGroup> > Dtk::Core::DSettings::groups() const
+@brief 返回子组全部 `key` 的值
+
+@fn QPointer<DSettingsGroup> Dtk::Core::DSettings::group(const QString &key) const
+@brief DSettings::group将递归找到子组
+@return
+
+@fn QVariant Dtk::Core::DSettings::getOption(const QString &key) const
+@brief 获取 `key` 对应的值
+
+@fn void Dtk::Core::DSettings::sync()
+@brief 开始进行同步
+
+@fn void Dtk::Core::DSettings::setOption(const QString &key, const QVariant &value)
+@brief 设置键值
+
+@fn void Dtk::Core::DSettings::reset()
+@brief 重置键值
+
+*/
--- /dev/null
+/*!
+@~chinese
+@file include/settings/dsettingsgroup.h
+@ingroup dsettings
+
+@class Dtk::Core::DSettingsGroup dsettingsgroup.h
+@brief 一组DSettings选项的集合,也可以包含子组。
+
+@fn Dtk::Core::DSettingsGroup::DSettingsGroup(QObject *parent = Q_NULLPTR)
+@brief DSettingsGroup构造函数
+
+@fn QPointer<DSettingsGroup> Dtk::Core::DSettingsGroup::parentGroup() const
+@brief 获取当前组的父组
+@return
+
+@fn void Dtk::Core::DSettingsGroup::setParentGroup(QPointer< DSettingsGroup > parentGroup)
+@brief 设置当前组的父组为 `parentGroup`
+
+@fn QString Dtk::Core::DSettingsGroup::key() const
+@brief 返回这个组的键,会包含全部的父组的键
+@return 返回这个组的键,会包含全部的父组的键
+
+@fn QString Dtk::Core::DSettingsGroup::name() const
+@brief 返回这个组名称,它可能被翻译。
+@return 返回这个组名称
+
+@fn bool Dtk::Core::DSettingsGroup::isHidden() const
+@brief 检查这个选项组是否会在界面上显示
+@return true 表示则这个选项组会显示出来
+
+@fn QPointer<DSettingsGroup> Dtk::Core::DSettingsGroup::childGroup(const QString &groupKey) const
+@brief 返回给定键在选项组中对应的子组。`groupKey`子组的键
+@return 返回子组的指针
+
+@fn QPointer<DSettingsOption> Dtk::Core::DSettingsGroup::option(const QString &key) const
+@brief 根据键值获取选项。`key`选项的完整键
+@return 返回对应键值选项指针
+
+@fn QList<QPointer<DSettingsGroup> > Dtk::Core::DSettingsGroup::childGroups() const
+@brief 列出组下面所有的直接子组。
+@return 返回所有子组指针列表
+
+@fn QList<QPointer<DSettingsOption> > Dtk::Core::DSettingsGroup::childOptions() const
+@brief 列出组下面所有的直接选项。
+@return 返回所有子选项指针列表
+
+@fn QList<QPointer<DSettingsOption> > Dtk::Core::DSettingsGroup::options() const
+@brief 列出组下面所有的选项。
+@return 返回所有选项指针列表
+
+@fn QPointer<DSettingsGroup> Dtk::Core::DSettingsGroup::fromJson(const QString &prefixKey, const QJsonObject &group)
+@brief 将json对象转化为DSettingsGroup。`prefixKey` 组键值前缀 `group` 待反序列化的json对象
+@return 返回解析json后的组指针
+@sa QPointer Dtk::Core::DSettingsOption
+
+@fn void Dtk::Core::DSettingsGroup::parseJson(const QString &prefixKey, const QJsonObject &group)
+@brief 将json对象转化为DSettingsGroup。`prefixKey` 组键值前缀 `group` 待反序列化的json对象
+@sa QPointer<DSettingsOption> Dtk::Core::DSettingsGroup::fromJson(const QString &prefixKey, const QJsonObject &json)
+
+*/
--- /dev/null
+/*!
+@~chinese
+@file include/settings/dsettingsoption.h
+@ingroup dsettings
+
+@class Dtk::Core::DSettingsOption dsettingsoption.h
+@brief DSettingsOption是DSettings的基本单元,用于存放一对键-值数据。
+
+@fn Dtk::Core::DSettingsOption::DSettingsOption(QObject *parent = Q_NULLPTR)
+@brief DSettingsOption构造函数
+
+@fn QPointer<DSettingsGroup> Dtk::Core::DSettingsOption::parentGroup() const
+@brief 当前选项的直接上级组
+@return 返回当前选项的直接上级组
+
+@fn void Dtk::Core::DSettingsOption::setParentGroup(QPointer<DSettingsGroup> parentGroup)
+@brief 修改当前选项的上级组
+@param[in] parentGroup 上级组
+
+@fn QString Dtk::Core::DSettingsOption::key() const
+@brief 当前选项的键值
+@return 返回当前选项的键值
+
+@fn QString Dtk::Core::DSettingsOption::name() const
+@brief 当前选项的名称
+@return 返回当前选项的名称
+
+@fn bool Dtk::Core::DSettingsOption::canReset() const
+@brief 选项是否可以重置,如果可以重置,在调用reset方法后,选项的值会变成初始值。
+@return 如果可以重置则为true
+
+@fn QVariant Dtk::Core::DSettingsOption::defaultValue() const
+@brief 选项的默认值
+@return 返回选项的默认值
+
+@fn QVariant Dtk::Core::DSettingsOption::value() const
+@brief 选项的当前值
+@return 返回选项的当前值
+
+@fn QVariant Dtk::Core::DSettingsOption::data(const QString &dataType) const
+@param[in] dataType 数据类型
+@brief 选项的附件data,用于未选项设置一些额外的辅助属性。
+@return 数据类型对应的数据.
+@sa QObject::property
+@sa Dtk::Core::DSettingsOption::setData
+
+@fn QString Dtk::Core::DSettingsOption::viewType() const
+@brief 选项的控件类型
+@return 返回选项的控件类型
+@sa Dtk::Widget::DSettingsWidgetFactory
+
+@fn bool Dtk::Core::DSettingsOption::isHidden() const
+@brief 检查选项是否会在界面上显示
+@return 如果显示则返回true,否则返回false。
+
+@fn static QPointer<DSettingsOption> Dtk::Core::DSettingsOption::fromJson(const QString &prefixKey, const QJsonObject &json)
+@brief 从json对象中反序列化出一个选项对象
+@param[in] prefixKey 选项的前缀
+@param[in] json 待反序列化的json对象
+@return 返回解析完成后的 `option` 数据
+
+@fn void Dtk::Core::DSettingsOption::setValue(QVariant value)
+@brief 设置选项的当前值.
+@param[in] value 选项的当前值
+
+@fn void Dtk::Core::DSettingsOption::setData(const QString &dataType, QVariant value)
+@brief 为选项添加自定义属性
+@param[in] dataType 选项的扎属性数据id,对每个选项必须唯一
+@param[in] value 选项id对应的值
+@sa Dtk::Core::DSettingsOption::data
+
+@fn void Dtk::Core::DSettingsOption::parseJson(const QString &prefixKey, const QJsonObject &option)
+@brief 从json对象中反序列化,并设置自身的值。
+@param[in] prefixKey 选项的前缀
+@param[in] option 待反序列化的json对象
+@sa QPointer<DSettingsOption> Dtk::Core::DSettingsOption::fromJson(const QString &prefixKey, const QJsonObject &json)
+
+@fn void Dtk::Core::DSettingsOption::valueChanged(QVariant value)
+@brief 选项的数据变化时发出改信息
+@param[in] value 发生改变的数据
+
+@fn void Dtk::Core::DSettingsOption::dataChanged(const QString &dataType, QVariant value);
+@brief 选项的附件的额外数据变化时发出改信息,可以看作这个值的属性发生变化。
+@param[in] dataType 改变的数据类型
+@param[in] value 发生改变的数据
+
+*/
\ No newline at end of file
--- /dev/null
+@page dsettings dsettings--dtk设置工具组件
+
+# DSettings
+
+## DSettings:dtk设置组件
+
+[dsettings.h 详细文档](dsettings_8h.html)
+
+项目目录结构如下:
+
+```bash
+├── CMakeLists.txt
+├── data
+│ └── settings.json
+├── data.qrc
+└── main.cpp
+```
+
+CMakeLists.txt:
+
+```cmake
+cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
+
+project(dsetting-example VERSION 1.0.0 LANGUAGES CXX)# 指定项目名称, 版本, 语言 cxx就是c++
+
+set(CMAKE_CXX_STANDARD 11) # 指定c++标准
+set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
+
+set(CMAKE_AUTORCC ON) # support qt resource file # 支持qt资源文件
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 支持 clangd
+
+if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
+ set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
+endif()
+
+find_package(DtkCore REQUIRED) # 寻找Dtk组件Core
+
+add_executable(${PROJECT_NAME} # 生成可执行文件
+ main.cpp
+ data.qrc
+)
+
+target_link_libraries(${PROJECT_NAME} PRIVATE # 添加需要链接的共享库
+ Dtk::Core
+)
+```
+
+settings.json:
+
+```json
+{
+ "groups": [{
+ "key": "base",
+ "name": "Basic settings",
+ "groups": [{
+ "key": "open_action",
+ "name": "Open Action",
+ "options": [{
+ "key": "alway_open_on_new",
+ "type": "checkbox",
+ "text": "Always Open On New Windows",
+ "default": true
+ },
+ {
+ "key": "open_file_action",
+ "name": "Open File:",
+ "type": "combobox",
+ "default": ""
+ }
+ ]
+ },
+ {
+ "key": "new_tab_windows",
+ "name": "New Tab & Window",
+ "options": [{
+ "key": "new_window_path",
+ "name": "New Window Open:",
+ "type": "combobox",
+ "default": ""
+ },
+ {
+ "key": "new_tab_path",
+ "name": "New Tab Open:",
+ "type": "combobox",
+ "default": ""
+ }
+ ]
+ }
+ ]
+ }]
+}
+```
+
+data.qrc
+
+```xml
+<RCC>
+ <qresource prefix="/">
+ <file>data/settings.json</file>
+ </qresource>
+</RCC>
+```
+
+main.cpp
+
+```cpp
+#include <QCoreApplication>
+#include <DSettings>
+#include <qsettingbackend.h>
+#include <DSettingsGroup>
+#include <DSettingsOption>
+#include <QTemporaryFile>
+#include <QDebug>
+
+DCORE_USE_NAMESPACE
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ // 初始化一个存储后端
+ QTemporaryFile tmpFile;
+ tmpFile.open();
+ QPointer<QSettingBackend> backend = new QSettingBackend(tmpFile.fileName());
+
+ // 从json中初始化配置
+ QPointer<DSettings> settings = DSettings::fromJsonFile(":/data/settings.json");
+ settings->setBackend(backend);
+
+ // 读取配置
+ // 该组中包含一个base的root组,两个子组: open_action/new_tab_windows,每个子组有包含若干选项。
+ // 对于"New Window Open:"这个配置,其完整的访问id为base.new_tab_windows.new_window_path。
+ QPointer<DSettingsOption> opt = settings->option("base.new_tab_windows.new_window_path");
+ qDebug() << opt->value();
+
+ // 修改配置
+ opt->setValue("Test");
+ qDebug() << opt->value();
+
+ // 获取所有keys
+ QStringList keys = settings->keys();
+ qDebug() << keys;
+
+ // base.open_action对应的组
+ QPointer<DSettingsGroup> group = settings->group("base.open_action");
+ qDebug() << group->key();
+
+ return a.exec();
+}
+```
+
+编译运行:
+
+```bash
+cmake -Bbuild
+cmake --build build
+./build/dsetting-example
+```
+
+运行结果如下图:
+
+
+
+@defgroup dsettings
+@brief dtk设置组件
--- /dev/null
+/*!
+@~chinese
+@file include/util/dabstractunitformatter.h
+
+dabstractunitformatter.h文件提供了DAbstractUnitFormatter类, DAbstractUnitFormatter是抽象的单位格式化工具, 提供统一的单位格式化接口
+
+@class Dtk::Core::DAbstractUnitFormatter include/util/dabstractunitformatter.h
+@brief 抽象格式化工具基类
+@details
+ DAbstractUnitFormatter提供统一的单位格式化接口. 在DAbstractUnitFormatter的设计理念中, 不同大小的单位被编号成不同级别的单位id. <br>
+ id从小到大, 单位从低级到高级. 各相邻单位之间的进率可以是不均匀的, 实现者只需实现unitConvertRate, 返回当前单位到下一高级单位(从id为x的单位到id为x+1的单位)的进率是正确的. <br>
+ 事实上, 实现者如果保证unitConvertRate对于任一id为x的单位, 其到id为x+1的单位的换算比率(允许小于1)是正确的, 不需满足id递增, 单位级别递增的约束(即unitConvertRate总是大于1的约束) <br>
+ 注意, 实现者此时需重写其他接口以同时保证正确性.
+
+@fn DAbstractUnitFormatter::DAbstractUnitFormatter()
+@brief 空参构造函数
+@note 注意, 该类为抽象类, 不可直接实例化, 该构造函数仅供实现子类使用.
+
+@fn @pure virtual int DAbstractUnitFormatter::unitMax() const = 0
+@brief 获取最大的单位id
+@return 最大的单位id
+
+@fn @pure virtual int DAbstractUnitFormatter::unitMin() const = 0
+@brief 获取最小的单位id
+@return 最小的单位id
+
+@fn @pure virtual uint DAbstractUnitFormatter::unitConvertRate(int unitId) const = 0
+@brief 获取当前单位到下一高级单位的进率
+@param[in] unitId 当前单位id
+@return 进率, 正常情况下, 大于1
+@note 下一高级单位指id为unitId + 1的单位.
+
+@fn virtual qreal DAbstractUnitFormatter::unitValueMax(int unitId) const
+@brief 获取当前单位的最大值
+@param[in] unitId 当前单位id
+@return 单位最大值
+
+@fn virtual qreal DAbstractUnitFormatter::unitValueMin(int unitId) const
+@brief 获取当前单位的最小值
+@param[in] unitId 当前单位id
+@return 单位最小值
+
+@fn virtual QString DAbstractUnitFormatter::unitStr(int unitId) const = 0
+@brief 获取当前单位的字符串表示
+@param[in] unitId 当前单位id
+@return 单位字符串表示
+
+@fn qreal DAbstractUnitFormatter::formatAs(qreal value, int currentUnit, const int targetUnit) const
+@brief 格式化数值到指定单位
+@param[in] value 当前单位下表示的数值
+@param[in] currentUnit 当前单位id
+@param[in] targetUnit 目标单位id
+@return 格式化后以目标单位表示的数值
+
+@fn QPair<qreal, int> DAbstractUnitFormatter::format(const qreal value, const int unit) const
+@brief 格式化数值到合适的单位
+@param[in] value 当前单位下表示的数值
+@param[in] unit 当前单位
+@return 格式化后的合适的数值和单位
+
+合适是指: 如果单位大于unitMin()或者小于unitMax(), 会尽量保证值被转换到接近最小值的合适单位上.
+
+@fn QList<QPair<qreal, int> > DAbstractUnitFormatter::formatAsUnitList(const qreal value, int unit) const
+@brief 包括完整转换数据版本的format()
+@param[in] value 当前单位下表示的数值
+@param[in] unit 当前单位
+@return 格式化产生的所有的数值和单位
+
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dutil
+@file include/util/ddbusextendedabstractinterface.h
+
+该文件提供了一个扩展DBus接口工具类
+
+@class Dtk::Core::DDBusExtendedAbstractInterface
+@brief 扩展DBus接口, 继承自QDBusAbstractInterface
+@details 和QDBusAbstractInterface相比, 该类连接了org.freedesktop.DBus.Properties接口, 提供了异步访问属性的接口, 可以方便地通过此类进行异步DBus通信. <br>
+同时此类提供了属性改变信号的分发和中继.
+
+@fn DDBusExtendedAbstractInterface::DDBusExtendedAbstractInterface(const QString &service, const QString &path, const char *interface, const QDBusConnection &connection, QObject *parent)
+@brief 构造函数
+@param[in] service 该interface属于的服务
+@param[in] path 该interface属于的对象路径
+@param[in] interface 该interface实际连接的接口
+@param[in] connection 用于连接该interface的DBus连接
+@param[in] parent 父对象
+@note 该构造函数受到保护, 只有子对象才能访问.
+
+@property Dtk::Core::DDBusExtendedAbstractInterface::sync
+@brief 是否同步获取属性
+@details 当sync为false的时候, 在调用属性的get函数的时候会一直返回空值, 解决方法是监听属性的changed信号并自行保存一份缓存, 让changed信号修改这个缓存.
+
+@property Dtk::Core::DDBusExtendedAbstractInterface::useCache
+@brief 是否使用缓存
+@details 如果使用缓存, 在内部获取属性的时候将不再进行DBus调用更新属性.
+
+@fn inline bool DDBusExtendedAbstractInterface::sync() const
+@brief 获取是否同步
+@sa [sync](@ref Dtk::Core::DDBusExtendedAbstractInterface::sync)
+
+@fn void DDBusExtendedAbstractInterface::setSync(bool sync, bool autoStart)
+@brief 设置是否同步和自启动
+@param[in] sync 是否同步
+@param[in] autoStart 是否自启动
+@sa [sync](@ref Dtk::Core::DDBusExtendedAbstractInterface::sync)
+
+
+@fn void DDBusExtendedAbstractInterface::setSync(bool sync)
+@brief 设置是否同步
+@param[in] sync 是否是同步模式
+@sa [sync](@ref Dtk::Core::DDBusExtendedAbstractInterface::sync)
+@details 该函数内部实现调用[setSync](@ref DDBusExtendedAbstractInterface::setSync(bool sync, bool autoStart)), autoStart参数值为true, 即默认自启动.
+
+@fn inline bool DDBusExtendedAbstractInterface::useCache() const
+@brief 获取是否使用缓存
+@sa [useCache](@ref Dtk::Core::DDBusExtendedAbstractInterface::useCache)
+
+@fn inline void DDBusExtendedAbstractInterface::setUseCache()
+@brief 设置是否使用缓存
+@sa [useCache](@ref Dtk::Core::DDBusExtendedAbstractInterface::useCache)
+
+@fn void DDBusExtendedAbstractInterface::getAllProperties()
+@brief 获取所有属性
+@sa [sync](@ref Dtk::Core::DDBusExtendedAbstractInterface::sync)
+@details 该方法会调用org.freedesktop.DBus.Properties接口的GetAll方法, 获取所有属性并且发送属性改变信号, 如果是同步模式(sync为true), 该方法会使用同步调用call. <br>
+sync为false的时候会使用异步调用asyncCall.
+
+@fn inline QDBusError DDBusExtendedAbstractInterface::lastExtendedError() const
+@brief 获取上一次的错误
+@return QDBusError 上一次由DBus调用引起的错误
+
+@fn void DDBusExtendedAbstractInterface::startServiceProcess()
+@brief 启动服务进程
+@details 该函数会调用org.freedesktop.DBus的服务的/路径的StartServiceByName方法启动DDBusExtendedAbstractInterface对应的Service.
+
+@fn void DDBusExtendedAbstractInterface::serviceValidChanged(const bool valid) const
+@brief 服务是否有效状态改变信号
+@param[in] valid 服务是否有效
+
+@fn void DDBusExtendedAbstractInterface::serviceStartFinished(const quint32 ret) const
+@brief 服务启动完成通知信号
+@param[in] ret 启动服务的返回值
+@details 启动服务是调用org.freedesktop.DBus服务的/路径的StartServiceByName方法, ret为StartServiceByName的返回值.
+
+@fn void DDBusExtendedAbstractInterface::propertyChanged(const QString &propertyName, const QVariant &value)
+@brief 属性改变信号
+@param[in] propertyName 改变的属性名
+@param[in] value 改变后的属性值
+
+@fn void DDBusExtendedAbstractInterface::propertyInvalidated(const QString &propertyName)
+@brief 属性失效通知信号
+@param[in] propertyName 失效的属性名
+@details 该信号会在DBus属性改变但是本地反序列化失败的情况下发出.
+
+@fn void DDBusExtendedAbstractInterface::asyncPropertyFinished(const QString &propertyName)
+@brief 异步获取属性完成通知信号
+@param[in] propertyName 获取成功的属性名
+
+@fn void DDBusExtendedAbstractInterface::asyncSetPropertyFinished(const QString &propertyName)
+@brief 异步设置属性完成通知信号
+@param[in] propertyName 设置成功的属性名
+
+@fn void DDBusExtendedAbstractInterface::asyncGetAllPropertiesFinished()
+@brief 异步获取所有属性完成的通知信号
+@sa [getAllProperties](@ref Dtk::Core::DDBusExtendedAbstractInterface::getAllProperties())
+@details getAllProperties方法并没有返回值, 须监听此信号以实现完整功能.
+
+
+@fn void DDBusExtendedAbstractInterface::connectNotify(const QMetaMethod &signal)
+@brief 信号连接通知函数
+@param[in] signal 连接到该对象的信号
+@details 该函数重写了QObject的connectNotify函数, 当有某一个信号连接到该对象的时候, 该函数就会被调用.
+
+@fn void DDBusExtendedAbstractInterface::disconnectNotify(const QMetaMethod &signal)
+@brief 信号断开连接通知函数
+@param[in] signal 断连的信号
+@details 该函数重写了QObject的disconnectNotify函数, 当有某一个连接到该对象的信号断连时, 该函数就会被调用.
+
+@fn QVariant DDBusExtendedAbstractInterface::internalPropGet(const char *propname, void *propertyPtr)
+@brief 内部属性获取函数
+@param[in] propname 属性名
+@param[in] propertyPtr 属性缓存指针
+@sa [useCache](@ref Dtk::Core::DDBusExtendedAbstractInterface::useCache)
+@sa [sync](@ref Dtk::Core::DDBusExtendedAbstractInterface::sync)
+@details 当useCache为true的时候, 该函数仅仅返回propertyPtr指向的内存拷贝.
+
+@fn void DDBusExtendedAbstractInterface::internalPropSet(const char *propname, const QVariant &value, void *propertyPtr)
+@brief 内部属性设置函数
+@param[in] propname 属性名
+@param[in] value 要设置的值
+@param[in] propertyPtr 属性缓存指针
+@sa [sync](@ref Dtk::Core::DDBusExtendedAbstractInterface::sync)
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dutil
+@file include/util/ddbussender.h
+
+本文件包含了DDBusSender类和相对应的工具类
+
+@class DDBusData
+@brief DBus数据存储类
+@details 该类用来存储DBus连接的相关信息
+
+@var DDBusData::service
+@brief 请求调用服务名
+
+@var DDBusData::path
+@brief 请求调用对象路径
+
+@var DDBusData::interface
+@brief 请求调用接口名
+
+@var DDBusData::queryName
+@brief 请求调用函数名
+
+@var DDBusData::connection
+@brief 进行调用的维护的DBus连接
+
+@class DDBusCaller
+@brief DBus接口调用工具类
+@details 该类用于完成实际的DBus接口调用
+
+@fn template <typename T> DDBusCaller DDBusCaller::arg(const T &argument)
+@brief 添加调用参数
+@details 改接口符合链式编程规则
+@param[in] argument 调用参数
+@return DDBusCaller 添加参数之后的caller
+
+@fn QDBusPendingCall DDBusCaller::call()
+@brief 发起实际调用
+@return QDBusPendingCall 异步调用对象
+
+@class DDBusProperty
+@brief DBus属性操作对象
+@details 该类的作用和DDBusCaller类似, 用于完成实际的调用, 其封装了org.freedesktop.DBus.Properties的接口, 提供方便快捷地属性访问方法set和get
+
+@fn QDBusPendingCall DDBusProperty::get()
+@brief 获取属性值
+@return QDBusPendingCall 异步调用对象, 在完成之后可用于获取属性值
+
+@fn template <typename T> QDBusPendingCall DDBusProperty::set(const T &value)
+@brief 设置属性值
+@param[in] value 需要设置的值
+@return QDBusPendingCall 异步调用对象, 在完成之后可用于判断设置操作是否成功
+
+@class DDBusSender
+@brief DBus请求工具类
+@details 通过该类的方法可以方便地调用某个服务的某个方法. 该类的设计采用链式编程, 多个api都会返回操作之后的对象, 这使得原本需要使用QDBusMessage多行代码完成的调用只需要一行代码即可完成.
+
+@fn DDBusSender DDBusSender::service(const QString &service)
+@brief 设置请求服务名
+@param[in] service 请求服务名
+@return DDBusSender 设置之后的sender
+
+@fn DDBusSender DDBusSender::interface(const QString &interface)
+@brief 设置请求接口名
+@param[in] interface 请求接口名
+@return DDBusSender 设置之后的sender
+
+@fn DDBusSender DDBusSender::path(const QString &path)
+@brief 设置请求对象路径
+@param[in] path 请求对象路径
+@return DDBusSender 设置之后的sender
+
+@fn DDBusCaller DDBusSender::method(const QString &method)
+@brief 设置请求方法名并获取请求调用对象
+@details 确保在调用该方法之前, service, path和interface都已经被正确设置
+@param[in] method 请求方法名
+@return DDBusCaller 方法调用工具对象, 调用该对象的call函数即可完成最终调用
+
+@fn DDBusProperty DDBusSender::property(const QString &property)
+@brief 设置访问的属性名并获得属性操作对象
+@details 确保在调用该方法之前, service, path和interface都已经被正确设置
+@param[in] property 访问属性名
+@return DDBusProperty 属性操作对象
+
+@fn static DDBusSender DDBusSender::system()
+@brief 获取 systembus 访问的能力
+@details DDBusSender 默认使用 sessionbus ,此接口提供 systembus 的访问能力
+@return DDBusSender 可以访问 systembus 的 sender 对象
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dutil
+@file include/util/ddisksizeformatter.h
+
+本文件定义了用于转换磁盘大小单位的类DDiskSizeFormatter
+
+@class Dtk::Core::DDiskSizeFormatter
+@brief 磁盘大小单位转换类
+@details 继承自DAbstractUnitFormatter, 支持最小的单位为字节, 最大的单位为T字节, 支持修改相邻单位之间的进率, 是采用1000还是1024. 默认使用1000作为进率
+
+@enum Dtk::Core::DDiskSizeFormatter::DiskUnits
+@brief 磁盘大小单位枚举
+@var Dtk::Core::DDiskSizeFormatter::DiskUnits Dtk::Core::DDiskSizeFormatter::B
+@brief 字节
+@var Dtk::Core::DDiskSizeFormatter::DiskUnits Dtk::Core::DDiskSizeFormatter::K
+@brief 千字节
+@var Dtk::Core::DDiskSizeFormatter::DiskUnits Dtk::Core::DDiskSizeFormatter::M
+@brief 兆字节
+@var Dtk::Core::DDiskSizeFormatter::DiskUnits Dtk::Core::DDiskSizeFormatter::G
+@brief 吉字节
+@var Dtk::Core::DDiskSizeFormatter::DiskUnits Dtk::Core::DDiskSizeFormatter::T
+@brief 太字节|
+
+@fn QString DDiskSizeFormatter::unitStr(int unitId) const override
+@brief 获取unitId对应单位的字符串表示
+@param[in] unitId 单位id
+@return QString 字符串表示
+
+@fn DDiskSizeFormatter DDiskSizeFormatter::rate(int rate)
+@brief 设置当前的单位进率
+@param[in] rate 需要设置的进率
+@return DDiskSizeFormatter 设置之后的formatter
+
+@fn int DDiskSizeFormatter::unitMin() const override
+@brief 获取最小的单位枚举
+@return int 最小的单位
+
+@fn int DDiskSizeFormatter::unitMax() const override
+@brief 获取最大的单位枚举
+@return int 最大的单位
+
+@fn uint DDiskSizeFormatter::unitConvertRate(int unitId) const override
+@brief 获取unitId对应单位到下一个单位的进率
+@param[in] unitId 当前单位id
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dutil
+@file include/util/dtextencoding.h
+@details 本文件包含文本编码识别和文本编码转换的公共接口。
+
+@class Dtk::Core::DTextEncoding
+@brief 文本编码信息类,提供文本编码识别和文本编码转换的公共接口。
+@details 提供文本编码识别和文本编码转换的公共接口,默认使用 QTextCodec 进行检测,
+ 若系统环境中存在 libuchardet.so 及 libicuuc.so 库,可拓展支持的编码格式。
+
+@fn QByteArray Dtk::Core::DTextEncoding::detectTextEncoding(const QByteArray &content)
+@brief 检测给定文本的编码格式。
+@details 默认使用 QTextCodec 检测,若系统环境中存在 libuchardet.so 及 libicuuc.so 库,可拓展支持的编码格式。
+ 检测会判断最接近的编码格式,未成功识别或为 ASCII 编码格式,将返回 UTF-8 编码格式。
+@param[in] content 待检测的文本内容
+@return 文本编码格式
+
+@fn QByteArray Dtk::Core::DTextEncoding::detectFileEncoding(const QString &fileName, bool *isOk)
+@brief 检测给定文件的文本编码格式,将读取文件头部最多 64KB 的文本用于检测。若文件访问失败,返回空编码格式。
+@param[in] fileName 文件路径
+@param[out] isOk 检测是否成功,主要判断文件内容能否正确读取
+@return 文本编码格式
+@sa DTextEncoding::detectTextEncoding
+
+@fn bool Dtk::Core::DTextEncoding::convertTextEncoding(QByteArray &content, QByteArray &outContent, const QByteArray &toEncoding, const QByteArray &fromEncoding, QString *errString)
+@brief 将输入的文本 `content` 从 `fromEncoding` 编码格式转换到 `toEncoding` 编码格式,转换后的文本保存到 `outContent` 。
+ 若转换过程中出现错误,将返回 false , 并设置 `errString` 错误信息,已转换的文本仍会写入 `outContent` 。
+@note 当处理大量文本数据时,需考虑并行处理,防止阻塞线程。
+@param[in] content 传入的文本
+@param[out] outContent 编码转换后的文本
+@param[in] toEncoding 转换的编码格式
+@param[in] fromEncoding 原始的编码格式,默认为空,会通过 `DTextEncoding::detectTextEncoding` 检测编码格式
+@param[out] errString 错误信息
+@return 是否转换成功
+@sa DTextEncoding::convertTextEncodingEx
+
+@fn bool Dtk::Core::DTextEncoding::convertTextEncodingEx(QByteArray &content, QByteArray &outContent, const QByteArray &toEncoding, const QByteArray &fromEncoding, QString *errString, int *convertedBytes)
+@brief 将输入的文本 `content` 从 `fromEncoding` 编码格式转换到 `toEncoding` 编码格式,转换后的文本保存到 `outContent` 。
+ 若转换过程中出现错误,将返回 false , 并设置 `errString` 错误信息,已转换的文本仍会写入 `outContent` 。
+@note 当处理大量文本数据时,需考虑并行处理,防止阻塞线程。
+@note 返回 false 时,已转换的文本仍会写入 `outContent` ,同时 `convertedBytes` 会记录已转换数据长度,你可以决定保留或移除转换文本。
+@param[in] content 传入的文本
+@param[out] outContent 编码转换后的文本
+@param[in] toEncoding 转换的编码格式
+@param[in] fromEncoding 原始的编码格式,默认为空,会通过 `DTextEncoding::detectTextEncoding` 检测编码格式
+@param[out] errString 错误信息
+@param[out] convertedBytes 已转换的 `content` 数据长度,若转换过程出现错误,这个值会指向异常字符出现的位置
+@return 是否转换成功
+
+@fn bool DTextEncoding::convertFileEncoding(const QString &fileName, const QByteArray &toEncoding, const QByteArray &fromEncoding, QString *errString)
+@brief 读取输入的 `fileName` 文件内容,将文件内容从 `fromEncoding` 编码格式转换到 `toEncoding` 编码格式,转换后的文本保存到 `fileName` 。
+ 若转换过程中出现错误,将返回 false , 并设置 `errString` 错误信息,已转换的文本会被抛弃。
+@param[in] fileName 传入及保存的文件路径
+@param[in] toEncoding 转换的编码格式
+@param[in] fromEncoding 原始的编码格式,为空时会通过 `DTextEncoding::detectTextEncoding` 检测编码格式
+@param[out] errString 错误信息
+@return 是否转换成功
+@sa DTextEncoding::convertTextEncoding
+
+@fn bool DTextEncoding::convertFileEncodingTo(const QString &fromFile, const QString &toFile, const QByteArray &toEncoding, const QByteArray &fromEncoding, QString *errString)
+@brief 读取输入的 `fromFile` 文件内容,将文件内容从 `fromEncoding` 编码格式转换到 `toEncoding` 编码格式,转换后的文本保存到 `toFile` 。
+ 若转换过程中出现错误,将返回 false , 并设置 `errString` 错误信息,已转换的文本会被抛弃。
+@param[in] fromFile 传入的文件路径
+@param[in] toFile 保存的文件路径
+@param[in] toEncoding 转换的编码格式
+@param[in] fromEncoding 原始的编码格式,为空时会通过 `DTextEncoding::detectTextEncoding` 检测编码格式
+@param[out] errString 错误信息
+@return 是否转换成功
+@sa DTextEncoding::convertTextEncoding
+
+ */
--- /dev/null
+/*!
+@~chinese
+@ingroup dutil
+@file include/util/dthreadutils.h
+
+本文件定义了线程相关的帮助类
+
+@class DThreadUtils
+@brief 线程帮助类
+@details 本类主要用来进行异步线程调用, 此外本类所有的public接口都是线程安全的
+
+@fn static DThreadUtils& DThreadUtils::gui()
+@brief 获取以GUI线程初始化的静态对象
+@return DThreadUtils& 静态对象的引用
+
+@fn QThread* DThreadUtils::thread() const noexcept
+@brief 获取DThreadUtils对应的线程
+@return QThread* 对应线程的QThread对象的指针
+
+@fn template <typename Func, typename... Args> inline auto run(QObject *context,typename QtPrivate::FunctionPointer<Func>::Object *obj, Func fun, Args &&...args)
+@brief 在对应的线程执行传入的成员函数, 非阻塞
+@param[in] context 对象上下文, 用来在执行调用时判断对象是否存在
+@param[in] obj 对象指针
+@param[in] fun 成员函数指针
+@param[in] args 对应函数的参数
+@return 以成员函数返回值类型实例化的QFuture对象
+
+@fn template <typename Func, typename... Args> inline auto run(typename QtPrivate::FunctionPointer<Func>::Object *obj, Func fun, Args &&...args)
+@brief 在对应的线程执行传入的成员函数, 非阻塞
+@param[in] obj 对象指针
+@param[in] fun 成员函数指针
+@param[in] args 对应函数的参数
+@return 以成员函数返回值类型实例化的QFuture对象
+
+@fn template <typename Func, typename... Args> inline QFuture<std::invoke_result_t<std::decay_t<Func>, Args...>> run(QObject *context, Func fun, Args &&...args)
+@brief 在对应的线程执行传入的成员函数, 非阻塞
+@param[in] context 对象上下文, 用来在执行调用时判断对象是否存在
+@param[in] fun 成员函数指针
+@param[in] args 对应函数的参数
+@return 以成员函数返回值类型实例化的QFuture对象
+
+@fn template <typename Func, typename... Args> inline QFuture<std::invoke_result_t<std::decay_t<Func>, Args...>> run(Func fun, Args &&...args)
+@brief 在对应的线程执行传入的成员函数, 非阻塞
+@param[in] fun 可调用对象
+@param[in] args 调用对应的参数
+@return 以函数返回值类型实例化的QFuture对象
+
+@fn template <typename... T> inline decltype(auto) exec(T &&...args)
+@brief 在对应的线程执行传入的成员函数, 阻塞
+@details 本函数是run函数的包装
+@note 调用此函数的一方需要确保对应线程有事件循环, 否则会无限等待
+@param[in] args 参数包, 具体含义参考run函数
+@return 传入函数的返回值
+
+*/
--- /dev/null
+/*!
+@~chinese
+@ingroup dutil
+@file include/util/dtimeunitformatter.h
+
+该文件定义了用于转换时间单位的工具类DTimeUnitFormatter.
+
+@class Dtk::Core::DTimeUnitFormatter
+@brief 转换时间单位的工具类
+@details 继承自DAbstractUnitFormatter, 支持最小单位为秒, 最大单位为天.
+
+@enum Dtk::Core::DTimeUnitFormatter::TimeUnits
+@brief 时间单位枚举
+@var Dtk::Core::DTimeUnitFormatter::TimeUnits Dtk::Core::DTimeUnitFormatter::Seconds
+@brief 秒
+@var Dtk::Core::DTimeUnitFormatter::TimeUnits Dtk::Core::DTimeUnitFormatter::Minute
+@brief 分钟
+@var Dtk::Core::DTimeUnitFormatter::TimeUnits Dtk::Core::DTimeUnitFormatter::Hour
+@brief 小时
+@var Dtk::Core::DTimeUnitFormatter::TimeUnits Dtk::Core::DTimeUnitFormatter::Day
+@brief 天
+
+@fn QString DTimeUnitFormatter::unitStr(int unitId) const override
+@brief 获取unitId对应单位的字符串表示
+@param[in] unitId 单位id
+@return QString 字符串表示
+
+@fn int DTimeUnitFormatter::unitMin() const override
+@brief 获取最小的单位枚举
+@return int 最小的单位
+
+@fn int DTimeUnitFormatter::unitMax() const override
+@brief 获取最大的单位枚举
+@return int 最大的单位
+
+@fn uint DTimeUnitFormatter::unitConvertRate(int unitId) const override
+@brief 获取unitId对应单位到下一个单位的进率
+@param[in] unitId 当前单位id
+
+*/
--- /dev/null
+/*!
+@chinese
+@ingroup dutil
+@file include/util/dutil.h
+
+该文件定义和实现了一些小的工具函数.
+
+@fn QString DUtil::escapeToObjectPath(const QString &str)
+@brief 将字符串转义成符合DBus ObjectPath规则字符串
+@param[in] str 需要转义的字符串
+@return 转义后字符串
+@attention 不要传入完整的dbus路径, 否则'/'也会被转义
+
+@fn QString DUtil::unescapeFromObjectPath(const QString &str)
+@brief 将DBus ObjectPath的部分路径转义成原来的字符串
+@param[in] str 需要转义的字符串
+@return 转义后字符串
+
+@fn QString DUtil::getAppIdFromAbsolutePath(const QString &path)
+@brief 从desktop文件的绝对路径中提取出AppId
+@param[in] path 文件路径
+@return 代表AppId的字符串
+@attention AppId可能为空, 代表无法获取AppId
+
+@fn QStringList DUtil::getAbsolutePathFromAppId(const QString &appId)
+@brief 从appId中获取符合条件的Desktop文件路径
+@param[in] appId app的Id
+@return desktop文件的路径
+@attention 可能有多个desktop文件的appId相同, 所以返回所有符合条件的列表
+
+*/
--- /dev/null
+@page util util--DTK工具组件
+
+# DTK util
+
+## 模块介绍
+
+该模块提供一些实用工具用于开发,包括:
+
++ 同种数据类的单位转换接口
++ DBus接口工具类
+
+@defgroup dutil
+@brief dtk实用工具
--- /dev/null
+set(LIB_NAME dtk${DTK_VERSION_MAJOR}core)
+set(DtkCore Dtk${DTK_VERSION_MAJOR}Core)
+
+macro(add_sub_dir dir)
+# message("add_subdirectory(${dir} ${OUTPUT_DIR}/${dir})")
+ add_subdirectory(${dir} ${OUTPUT_DIR}/${dir})
+endmacro()
+
+message("Current Qt Version: ${QT_VERSION_MAJOR}")
+message("Current Dtk Version: ${DTK_VERSION_MAJOR}")
+
+set(OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
+set (LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
+set (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/dtk${PROJECT_VERSION_MAJOR}/DCore")
+set (TOOL_INSTALL_DIR "${CMAKE_INSTALL_LIBEXECDIR}/dtk${PROJECT_VERSION_MAJOR}/DCore/bin")
+set (MKSPECS_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/qt${QT_VERSION_MAJOR}/mkspecs/modules" CACHE STRING "Install dir for qt pri files")
+set (FEATURES_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/qt${QT_VERSION_MAJOR}/mkspecs/features" CACHE STRING "Install dir for qt prf files")
+set (CONFIG_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${DtkCore}" CACHE STRING "Install dir for cmake config files")
+set (DSG_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}" CACHE STRING "PREFIX of DSG_DATA_DIRS")
+set (DSYSINFO_PREFIX "" CACHE STRING "PREFIX of DSysInfo")
+
+set (BUILD_EXAMPLES ON CACHE BOOL "Build examples")
+set (BUILD_VERSION "0" CACHE STRING "buildversion")
+
+if(UNIX AND NOT APPLE)
+ set(LINUX TRUE)
+endif()
+
+set (BUILD_WITH_SYSTEMD OFF CACHE BOOL "Build with systemd")
+if (BUILD_WITH_SYSTEMD)
+ add_definitions(-DBUILD_WITH_SYSTEMD)
+endif()
+
+set(CMAKE_CXX_STANDARD 17)
+
+# CXX FILAGS
+if("${QT_VERSION_MAJOR}" STREQUAL "5")
+ set (BUILD_DOCS ON CACHE BOOL "Generate doxygen-based documentation")
+else()
+ # dtk6 not build doc
+ set (BUILD_DOCS OFF CACHE BOOL "Generate doxygen-based documentation")
+endif()
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Release)
+endif()
+
+if(NOT MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed -pie")
+ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(BUILD_TESTING ON)
+ endif ()
+ string(REPLACE "-O3" "-Ofast" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+endif()
+
+if (BUILD_DOCS)
+ add_sub_dir(docs)
+endif ()
+
+add_sub_dir(src)
+if(BUILD_TESTING)
+ message("==================================")
+ message(" Now Testing is enabled ")
+ message("==================================")
+ enable_testing()
+ add_sub_dir(tests)
+endif()
+if(BUILD_EXAMPLES)
+ message("===================================")
+ message("You can build and run examples now ")
+ message("===================================")
+ add_sub_dir(examples)
+endif()
+add_sub_dir(tools)
+
+if("${QT_VERSION_MAJOR}" STREQUAL "6")
+ set(DTK_VERSION_MAJOR 6)
+endif()
+
+configure_package_config_file(cmake/DtkCMake/DtkCMakeConfig.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/cmake/DtkCMake/Dtk${DTK_VERSION_MAJOR}CMakeConfig.cmake
+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}CMake"
+ PATH_VARS TOOL_INSTALL_DIR)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/DtkCMake/Dtk${DTK_VERSION_MAJOR}CMakeConfig.cmake
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}CMake")
+
+configure_package_config_file(cmake/DtkTools/DtkToolsConfig.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/cmake/DtkTools/Dtk${DTK_VERSION_MAJOR}ToolsConfig.cmake
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}Tools
+ PATH_VARS TOOL_INSTALL_DIR)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/DtkTools/Dtk${DTK_VERSION_MAJOR}ToolsConfig.cmake
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}Tools")
+
+install(FILES cmake/DtkTools/DtkSettingsToolsMacros.cmake
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}Tools"
+ RENAME Dtk${DTK_VERSION_MAJOR}SettingsToolsMacros.cmake)
+
+install(FILES cmake/DtkTools/DtkDBusMacros.cmake
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}Tools")
+
+if (NOT DTK_VERSION_MAJOR)
+ set(DCONFIG_DEPRECATED_FUNCS [=[
+# deprecated since dtk6
+function(dconfig_meta_files)
+ dtk_add_config_meta_files(${ARGV})
+endfunction()
+function(dconfig_override_files)
+ dtk_add_config_override_files(${ARGV})
+endfunction()]=])
+endif()
+
+configure_package_config_file(cmake/DtkDConfig/DtkDConfigConfig.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/cmake/DtkDConfig/Dtk${DTK_VERSION_MAJOR}DConfigConfig.cmake
+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}DConfig"
+ PATH_VARS TOOL_INSTALL_DIR)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/DtkDConfig/Dtk${DTK_VERSION_MAJOR}DConfigConfig.cmake
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}DConfig")
+
+configure_package_config_file(misc/DtkCoreConfig.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${DtkCore}Config.cmake
+ INSTALL_DESTINATION ${CONFIG_CMAKE_INSTALL_DIR}
+ PATH_VARS TOOL_INSTALL_DIR)
+write_basic_package_version_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/${DtkCore}ConfigVersion.cmake"
+ VERSION ${DTK_VERSION}
+ COMPATIBILITY SameMajorVersion
+)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DtkCore}Config.cmake DESTINATION ${CONFIG_CMAKE_INSTALL_DIR})
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DtkCore}ConfigVersion.cmake DESTINATION ${CONFIG_CMAKE_INSTALL_DIR})
+
+configure_file(misc/dtkcore.pc.in ${LIB_NAME}.pc @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+
+configure_file(misc/qt_lib_dtkcore.pri.in qt_lib_dtkcore.pri @ONLY)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qt_lib_dtkcore.pri DESTINATION "${MKSPECS_INSTALL_DIR}")
+install(FILES misc/dtk_install_dconfig.prf DESTINATION ${FEATURES_INSTALL_DIR})
+set(CONFIGNAME include/global/dtkcore_config.h)
+file(WRITE ${CONFIGNAME}
+ "// it is auto make config\n"
+ "#define DTK_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}\n"
+ "#define DTK_VERSION_MINOR ${PROJECT_VERSION_MINOR}\n"
+ "#define DTK_VERSION_PATCH ${PROJECT_VERSION_PATCH}\n"
+ "#define DTK_VERSION_BUILD ${BUILD_VERSION}\n"
+ "#define DTK_VERSION_STR \"${PROJECT_VERSION}\"\n"
+ "\n"
+)
+file(GLOB CONFIGSOURCE include/DtkCore/*)
+
+foreach(FILENAME ${CONFIGSOURCE})
+ get_filename_component(thefile ${FILENAME} NAME)
+ file(APPEND ${CONFIGNAME} "#define DTKCORE_CLASS_${thefile}\n")
+endforeach()
-add_subdirectory(dasync-example)
add_subdirectory(expintf-example)
+add_subdirectory(textcodec-example)
+add_subdirectory(filewatcher-example)
+add_subdirectory(dlog-example)
+++ /dev/null
-set(BINNAME dasync)
-set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-find_package(Qt5 REQUIRED COMPONENTS Widgets)
-find_package(Qt5 REQUIRED COMPONENTS Core)
-
-add_executable(${BINNAME}
- main.cpp
-)
-
-target_link_libraries(
- ${BINNAME} PRIVATE
- Qt5::Core
- Qt5::Widgets
- dtkcore
- -lpthread
-)
-target_include_directories(${BINNAME} PUBLIC
- ../../include/global/
- ../../include/util/
- ../../include/
-)
+++ /dev/null
-// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#include <QWidget>
-#include <QTimer>
-#include <iostream>
-#include <QEventLoop>
-#include <QApplication>
-
-#include <unistd.h>
-
-#include "util/dasync.h"
-#include "util/dthreadutils.h"
-
-#ifdef QT_DEBUG
-#include <sanitizer/asan_interface.h>
-#endif
-
-DCORE_USE_NAMESPACE
-
-#define XLog() qDebug() << __LINE__ << " "
-
-#define RUN_IN_SUB_THREAD 1
-
-#define THREAD_BEGIN std::thread thread([&]{
-#define THREAD_END }); thread.detach();
-
-#if RUN_IN_SUB_THREAD
-# define OPT_THREAD_BEGIN THREAD_BEGIN
-# define OPT_THREAD_END THREAD_END
-#else
-# define OPT_THREAD_BEGIN
-# define OPT_THREAD_END
-#endif
-
-#define TIMED_EXIT(second, loop) QTimer::singleShot(second * 1000, [&]{ loop.exit(); })
-
-struct Configure
-{
- QObject *o = nullptr;
- QWidget *w = nullptr;
-} conf;
-static Configure *config = &conf;
-
-int main1(int argc, char *argv[]);
-int main2(int argc, char *argv[]);
-int main3(int argc, char *argv[]);
-
-int main(int argc, char *argv[]) {
- QApplication app(argc, argv);
-
- // 将以下所有新建的对象都托管给 w、o
- config->w = new QWidget;
- config->o = new QObject;
-
- config->w->show();
-
- main1(argc, argv);
- main2(argc, argv);
- main3(argc, argv);
-
- QTimer::singleShot(1 * 1000, [&]{
- config->w->deleteLater();
- config->o->deleteLater();
- });
-
- QTimer::singleShot(2 * 1000, [&]{
- qApp->exit(0);
- });
-
- qDebug() << "finished xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
-
- return app.exec();
-}
-
-#pragma mark main1 ------------------------------------------------------------
-
-// 这是一个最基础的示例程序
-DAsync<int, int> *testTask() {
- auto task = new DAsync<int, int>(config->o);
-
- int i = 0;
- while (i < 100) {
- task->postData(i++);
- }
-
- task->post([](int arg) {
-
- Q_ASSERT(!D_THREAD_IN_MAIN());
- XLog() << "run in child thread: " << arg;
- return arg * 2;
-
- })->then([&](int arg) {
-
- Q_ASSERT(D_THREAD_IN_MAIN());
- XLog() << "run in main thread:" << arg;
-
- })->start();
-
- task->postData(i++);
-
- return task;
-}
-
-void runTest()
-{
- OPT_THREAD_BEGIN
- auto task = testTask();
- // 删除前应该先等待所有的任务执行完或取消未执行的任务
- // 主线程中只能用 isFinished 查询状态,用 cancelAll 取消之后的任务队列
- // 其它子线程中(非 post、非 then 函数)中可以直接 waitForFinished 然后删除
- // 也可以使用 task->setParent 去托管,自动释放
- if (!D_THREAD_IN_MAIN()) {
- task->waitForFinished(false);
- // task->deleteLater();
- }
- OPT_THREAD_END
-}
-
-int main1(int argc, char *argv[]) {
- QEventLoop loop;
- TIMED_EXIT(3, loop);
-
- XLog() << "in main thread: " << pthread_self();
-
- // DAsync 依赖事件循环,不能被阻塞,比如 thread.join 就不行
- // 运行在主线程中和运行在子线程中应该有一样的结果才对
- OPT_THREAD_BEGIN
- runTest();
- OPT_THREAD_END
-
- return loop.exec();
-}
-
-#pragma mark main2 ------------------------------------------------------------
-
-int main2(int argc, char *argv[]) {
- QEventLoop loop;
- TIMED_EXIT(3, loop);
-
- OPT_THREAD_BEGIN
- QWidget *w = DThreadUtil::runInMainThread([&](){
- QWidget *w = new QWidget(config->w);
- w->setBackgroundRole(QPalette::HighlightedText);
- w->show();
- return w;
- });
- // w->show();
- OPT_THREAD_END
-
- return loop.exec();
-}
-
-#pragma mark main3 ------------------------------------------------------------
-
-int test1();
-int test2();
-int test3();
-int test4();
-int test5();
-int test6();
-int test7();
-int test8();
-
-int main3(int argc, char *argv[]) {
- std::clog << "in main thread: " << pthread_self() << std::endl;
-
- // 示例 1,输入输出都是基本类型
- test1();
-
- // 示例 2,输入基本类型,输出复合类型
- test2();
-
- // 示例 3,输入输出都是复合类型
- test3();
-
- // 示例 4,输入输出都是自定义类型的指针
- test4();
-
- // 示例 5, 异步执行一个输入复合类型、没有输出的一次性任务,执行结束后通知主线程
- // 间歇性输入数据,要保证生产者消费者模型的正确性。
- test5();
-
- // 示例 6, 异步执行一个没有输入、输出参数的一次性任务,执行结束后通知在主线
- test6();
-
- // 示例 7, 异步运行一个没有输入参数的一次性任务,执行后在主线程处理结果
- test7();
-
- // 示例 8, 在子线程中异步创建一个 widget 并显示出来:
- test8();
- // std::thread thread([&]{ test8(); });
- // thread.detach();
-
- return 0;
-}
-
-int test1() {
- QEventLoop loop;
- TIMED_EXIT(2, loop);
-
- // 加 static 防止函数执行结束后线程中继续 postData 访问已经释放的栈上变量
- static auto task1 = new DAsync<int, int>(config->o);
- static int i = 0;
-
- while (i < 100) {
- task1->postData(i++);
- }
-
- task1->post([](int arg) {
-
- XLog() << "async task: " << arg;
- return arg * 2;
-
- })->then([](int arg) {
-
- XLog() << "get result: " << arg;
-
- })->start();
-
- return loop.exec();
-}
-
-int test2() {
- QEventLoop loop;
-
- static auto task2 = new DAsync<int, QString>(config->o);
-
- static int i = 0;
- static bool stopFlag = false;
-
- // TIMED_EXIT(3, loop);
- QTimer::singleShot(3 * 1000, [&]{
- stopFlag = true;
- loop.exit();
- });
-
- while(i < 100) {
- task2->postData(i++);
- }
-
- task2->post([](int arg) -> QString {
-
- XLog() << "async task: " << arg;
- return QString::number(arg);
-
- })->then([](QString arg) {
-
- XLog() << "get result: " << arg;
-
- })->start();
-
- THREAD_BEGIN
- while (!stopFlag && i < 220) {
- XLog() << "post data: " << i;
- task2->postData(i++);
- usleep(200 * 1000);
- }
- THREAD_END
-
- // task2->waitForFinished();
- // task2->deleteLater();
-
- return loop.exec();
-}
-
-int test3() {
- QEventLoop loop;
- TIMED_EXIT(3, loop);
-
- static auto task3 = new DAsync<QString, QString>(config->o);
-
- static int i = 0;
- while (i < 100) {
- task3->postData(QString::number(i++));
- }
-
- task3->post([](QString arg) -> QString {
-
- XLog() << "async task: " << arg;
- return arg;
-
- })->then([](QString arg) {
-
- XLog() << "get result " << arg;
-
- })->start();
-
- // task3->waitForFinished();
- // task3->deleteLater();
-
- return loop.exec();
-}
-
-int test4() {
- QEventLoop loop;
- TIMED_EXIT(3, loop);
-
- class Test : public QObject {
- public:
- Test(int in, QObject *parent = nullptr)
- : QObject (parent)
- , count (in)
- {
- }
- int count = 0;
- };
-
- static auto task4 = new DAsync<Test *, Test*>(config->o);
- static int i = 0;
-
- while (i < 100) {
- task4->postData(new Test(i++, config->o));
- }
-
- task4->post([](Test *arg) -> Test * {
-
- XLog() << "async task: " << arg->count;
- return arg;
-
- })->then([](Test *arg) {
-
- XLog() << "get result " << arg->count;
-
- })->start();
-
- return loop.exec();
-}
-
-int test5() {
- QEventLoop loop;
- // TIMED_EXIT(3, loop);
- static bool stopFlag = false;
- QTimer::singleShot(3 * 1000, [&]{
- stopFlag = true;
- loop.exit();
- });
-
- static auto task5 = new DAsync<QString, void>(config->o);
- static int i = 0;
-
- while (i < 100) {
- task5->postData(QString::number(i++));
- }
-
- task5->post([](QString arg) {
-
- XLog() << "async task." << arg;
-
- })->then([]() {
-
- XLog() << "get void";
-
- })->start();
-
- OPT_THREAD_BEGIN
- while (!stopFlag) {
- usleep(200 * 1000);
- task5->postData(QString::number(i++));
- }
- OPT_THREAD_END
-
- return loop.exec();
-}
-
-int test6() {
- QEventLoop loop;
- TIMED_EXIT(1, loop);
-
- static auto task6 = new DAsync<void, void>(config->o);
-
- task6->post([]() {
-
- XLog() << "async task.";
-
- })->then([]() {
-
- XLog() << "get result.";
-
- })->start();
-
- // 如果只想在子线程执行一个任务,不需要主线程的任何处理,按照以下方式,
- // 其实也只是只设置一个函数就可以了:
- // task6->post([]() { XLog() << "async task."; });
- // task6->startUp();
-
- return loop.exec();
-}
-
-int test7() {
- QEventLoop loop;
- TIMED_EXIT(1, loop);
-
- static auto task7 = new DAsync<void, QString>(config->o);
- static int i = 0;
-
- task7->post([&]() {
-
- XLog() << "async task.";
- return QString("%1").arg(i++);
-
- })->then([](QString arg) {
-
- XLog() << "get result " << arg;
-
- })->start();
-
- return loop.exec();
-}
-
-int test8() {
- QEventLoop loop;
- TIMED_EXIT(1, loop);
-
- static auto task8 = new DAsync<void, QString>(config->o);
-
- // 注意,任务是异步执行的,传进去的一定不能是栈区变量!
- static int i = 0;
- task8->post([&]() -> QString {
- Q_ASSERT(!D_THREAD_IN_MAIN());
- QWidget *w = DThreadUtil::runInMainThread([](){
- Q_ASSERT(D_THREAD_IN_MAIN());
- QWidget *w = new QWidget(config->w);
- w->setBackgroundRole(QPalette::Text);
- w->show();
- return w;
- });
-
- // 在外面调用并不合适,虽然也能显示出来。比如 mac 上这么用就显示不出来
- // w->setBackgroundRole(QPalette::Text);
- // w->show();
-
- XLog() << "async task." << QString("%1").arg(i++);
- return QString("%1").arg(i++);
-
- })->then([](QString str) {
-
- XLog() << "get result " << str;
-
- })->start();
-
- return loop.exec();
-}
--- /dev/null
+set(BIN_NAME dlog${DTK_VERSION_MAJOR})
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
+
+add_executable(${BIN_NAME}
+ main.cpp
+)
+
+target_link_libraries(
+ ${BIN_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::Core
+ ${LIB_NAME}
+)
+target_include_directories(${BIN_NAME} PUBLIC
+ ../../include/
+)
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <DLog>
+#include <QCoreApplication>
+#include <QTimer>
+
+DCORE_USE_NAMESPACE
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+#ifdef Q_OS_LINUX
+ DLogManager::registerJournalAppender();
+#endif
+ DLogManager::registerConsoleAppender();
+ dDebug() << "Anything that can possibly go wrong, will go wrong. ";
+ qWarning() << "FBI Warning: Code smells.";
+ qInfo() << "Why dark mode? Because light attracts bugs";
+ qCritical() << "You Should Never Run `sudo rm -rf /`";
+
+ {
+ dDebugTime("Test the running time of a code block");
+ QTimer timer;
+ timer.setInterval(500);
+ QEventLoop loop;
+ QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
+ timer.start();
+ loop.exec();
+ }
+
+ return app.exec();
+}
-set(BINNAME exprintf)
+set(BIN_NAME exprintf${DTK_VERSION_MAJOR})
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-find_package(Qt5 REQUIRED COMPONENTS DBus)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS DBus)
-add_executable(${BINNAME}
+add_executable(${BIN_NAME}
main.cpp
)
target_link_libraries(
- ${BINNAME} PRIVATE
- Qt5::DBus
- dtkcore
+ ${BIN_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::DBus
+ ${LIB_NAME}
)
-target_include_directories(${BINNAME} PUBLIC
+target_include_directories(${BIN_NAME} PUBLIC
../../include/base
../../include/base/private/
../../include/filesystem/
--- /dev/null
+set(BIN_NAME filewatcher${DTK_VERSION_MAJOR})
+
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
+
+add_executable(${BIN_NAME}
+ main.cpp
+)
+
+target_link_libraries(
+ ${BIN_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::Core
+ ${LIB_NAME}
+)
+
+target_include_directories(${BIN_NAME} PUBLIC
+ ../../include/filesystem/
+ ../../include/
+)
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include "filesystem/dfilewatchermanager.h"
+#include <QCoreApplication>
+#include <QTemporaryFile>
+#include <QDebug>
+DCORE_USE_NAMESPACE
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+ DFileWatcherManager manager;
+ QTemporaryFile tmpfile1;
+ tmpfile1.open();
+ QFile file1(tmpfile1.fileName());
+ QTemporaryFile tmpfile2;
+ tmpfile2.open();
+ QFile file2(tmpfile2.fileName());
+
+ manager.add(tmpfile1.fileName());
+ manager.add(tmpfile2.fileName());
+
+ QObject::connect(&manager, &Dtk::Core::DFileWatcherManager::fileModified, &app, [=](const QString value) {
+ qDebug() << "文件发生变动:" << value;
+ });
+
+ QObject::connect(&manager, &Dtk::Core::DFileWatcherManager::fileDeleted, &app, [=](const QString value) {
+ qDebug() << "文件被删除:" << value;
+ });
+
+ file1.open(QIODevice::WriteOnly | QIODevice::Text);
+ file1.write("test");
+ file1.flush();
+ file1.close();
+
+ file2.open(QIODevice::WriteOnly | QIODevice::Text);
+ file2.write("test");
+ file2.close();
+
+ qDebug() << manager.watchedFiles();
+ qDebug() << "---------------------------";
+ app.processEvents();
+ manager.removeAll();
+ qDebug() << manager.watchedFiles();
+ return app.exec();
+}
--- /dev/null
+set(BIN_NAME textcodec${DTK_VERSION_MAJOR})
+
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
+
+add_executable(${BIN_NAME}
+ main.cpp
+)
+
+target_link_libraries(
+ ${BIN_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::Core
+ ${LIB_NAME}
+)
+
+target_include_directories(${BIN_NAME} PUBLIC
+ ../../include/util/
+ ../../include/
+)
--- /dev/null
+// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <DTextEncoding>
+
+#include <QCoreApplication>
+#include <QCommandLineOption>
+#include <QCommandLineParser>
+#include <QDebug>
+
+DCORE_USE_NAMESPACE
+
+void convertFileEncoding(const QString &fromFile,
+ const QString &toFile,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding = QByteArray())
+{
+ QByteArray contentEncoding = fromEncoding;
+ if (contentEncoding.isEmpty()) {
+ bool isOk = false;
+ contentEncoding = DTextEncoding::detectFileEncoding(fromFile, &isOk);
+ if (!isOk) {
+ qInfo().noquote() << QString("Detect file %1 encoding failed").arg(fromFile);
+ return;
+ }
+ }
+
+ QString errString;
+ if (!DTextEncoding::convertFileEncodingTo(fromFile, toFile, toEncoding, contentEncoding, &errString)) {
+ qInfo().noquote() << QString("Convert file %1 encoding from %2 to %3 failed. error: %4")
+ .arg(fromFile)
+ .arg(QString::fromUtf8(contentEncoding))
+ .arg(QString::fromUtf8(toEncoding))
+ .arg(errString);
+ } else {
+ qInfo().noquote() << QString("Convert file %1 encoding from %2 to %3 successed.")
+ .arg(fromFile)
+ .arg(QString::fromUtf8(contentEncoding))
+ .arg(QString::fromUtf8(toEncoding));
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+ QCoreApplication::setApplicationName("Text codec");
+
+ QCommandLineOption toEncodingOption({"t", "toEncoding"}, "Convert file encoding to specified encoding.", "encoding");
+ QCommandLineOption fromEncodingOption({"f", "fromEncoding"}, "Convert file encoding from specified encoding.", "encoding");
+ QCommandLineOption outputOption(
+ {"o", "output"}, "Save converted text with file path, only supported when opening a single file.", "path");
+
+ QCommandLineParser parser;
+ parser.setApplicationDescription("Text codec, provide encoding detection and encoding conversion.");
+ parser.addHelpOption();
+ parser.addOption(toEncodingOption);
+ parser.addOption(fromEncodingOption);
+ parser.addOption(outputOption);
+ parser.addPositionalArgument("file", "Open file.", "[file...]");
+ parser.process(app);
+
+ const QStringList args = parser.positionalArguments();
+ if (args.isEmpty()) {
+ parser.showHelp();
+ }
+
+ const QStringList fileArgs = parser.positionalArguments();
+ if (fileArgs.isEmpty()) {
+ qInfo().noquote() << "Not set open file.";
+ return 0;
+ }
+
+ if (parser.isSet(outputOption)) {
+ if (fileArgs.size() > 1) {
+ qInfo().noquote() << "Output file path only supported when opening a single file.";
+ return 0;
+ } else if (!parser.isSet(toEncodingOption)) {
+ qInfo().noquote() << "Convert file with not set convert encoding.";
+ } else {
+ QString fromFile = fileArgs.first();
+ QString toFile = parser.value(outputOption);
+ QByteArray toEncoding = parser.value(toEncodingOption).toUtf8();
+
+ convertFileEncoding(fromFile, toFile, toEncoding, parser.value(fromEncodingOption).toUtf8());
+ return 0;
+ }
+ }
+
+ QByteArray toEncoding = parser.value(toEncodingOption).toUtf8();
+ for (QString fileName : fileArgs) {
+ if (toEncoding.isEmpty()) {
+ // Only display file encoding.
+ qInfo().noquote() << fileName << DTextEncoding::detectFileEncoding(fileName);
+ } else {
+ // Convert file encoding.
+ convertFileEncoding(fileName, fileName, toEncoding, parser.value(fromEncodingOption).toUtf8());
+ }
+ }
+
+ return 0;
+}
+++ /dev/null
-#include "ddbusextended.h"
--- /dev/null
+#include "dlicenseinfo.h"
-#include "RollingFileAppender.h"
-#include "Logger.h"
-#include "LogManager.h"
-#include "FileAppender.h"
-#include "ConsoleAppender.h"
-#include "AbstractStringAppender.h"
-#include "AbstractAppender.h"
+#include <RollingFileAppender.h>
+#include <Logger.h>
+#include <LogManager.h>
+#include <FileAppender.h>
+#include <ConsoleAppender.h>
+#include <AbstractStringAppender.h>
+#include <AbstractAppender.h>
+#include <JournalAppender.h>
+#include <dloghelper.h>
--- /dev/null
+#include "dtextencoding.h"
* 模板类Dtk::Core::DExpected提供存储两个值之一的方式。Dtk::Core::DExpected的对象要么保有一个期待的T类型值,要么保有一个不期待的E类型值,不会没有值。
* @tparam T 期待的类型
* @tparam E 不期待的类型
+ * @note 该类自DtkCore 5.6.3引入
*/
template <typename T, typename E = DError>
class DExpected
{
}
- /*!
- * @brief Dtk::Core::DExpected的默认拷贝构造函数
- */
- DExpected(const DExpected &) = default;
-
/*!
* @brief Dtk::Core::DExpected的拷贝构造函数
*/
- template <typename std::enable_if<std::is_copy_constructible<T>::value and std::is_copy_constructible<E>::value and
- (!std::is_trivially_copy_constructible<T>::value or
- !std::is_trivially_copy_constructible<E>::value),
- bool>::type = true>
+ template <
+ typename std::enable_if<std::is_copy_constructible<T>::value and std::is_copy_constructible<E>::value, bool>::type = true>
DExpected(const DExpected &_x) noexcept(
std::is_nothrow_copy_constructible<T>::value and std::is_nothrow_copy_constructible<E>::value)
: m_has_value(_x.m_has_value)
construct_at(std::addressof(m_error), _x.m_error);
}
- /*!
- * @brief Dtk::Core::DExpected的默认移动构造函数
- */
- DExpected(DExpected &&) = default;
-
/*!
* @brief Dtk::Core::DExpected的移动构造函数
*/
- template <typename std::enable_if<std::is_move_constructible<T>::value and std::is_move_constructible<E>::value and
- (!std::is_trivially_move_constructible<T>::value or
- !std::is_trivially_move_constructible<E>::value),
- bool>::type = true>
+ template <
+ typename std::enable_if<std::is_move_constructible<T>::value and std::is_move_constructible<E>::value, bool>::type = true>
DExpected(DExpected &&_x) noexcept(
std::is_nothrow_move_constructible<T>::value and std::is_nothrow_move_constructible<E>::value)
: m_has_value(_x.m_has_value)
{
}
- DExpected(const DExpected &) = default;
-
- template <typename std::enable_if<std::is_copy_constructible<E>::value and !std::is_trivially_copy_constructible<E>::value,
- bool>::type = true>
+ template <typename std::enable_if<std::is_copy_constructible<E>::value, bool>::type = true>
DExpected(const DExpected &_x) noexcept(std::is_nothrow_copy_constructible<E>::value)
: m_has_value(_x.m_has_value)
, m_void()
construct_at(std::addressof(m_error), _x.m_error);
}
- DExpected(DExpected &&) = default;
-
- template <typename std::enable_if<std::is_move_constructible<E>::value and !std::is_trivially_move_constructible<E>::value,
- bool>::type = true>
+ template <typename std::enable_if<std::is_move_constructible<E>::value, bool>::type = true>
DExpected(DExpected &&_x) noexcept(std::is_nothrow_move_constructible<E>::value)
: m_has_value(_x.m_has_value)
, m_void()
class LIBDTKCORESHARED_EXPORT DSingleton
{
public:
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QT_DEPRECATED_X("Use ref")
static inline T *instance()
{
static T *_instance = new T;
return _instance;
}
-
+#endif
static T& ref()
{
static T instance;
#include <QStringList>
-QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
class QIODevice;
QT_END_NAMESPACE
bool exists() const;
static bool exists(const QString &fileName);
-#if QT_DEPRECATED_SINCE(5, 13)
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
D_DECL_DEPRECATED_X("Use QFile::symLinkTarget() instead")
QString readLink() const;
#endif
D_DECLARE_PRIVATE(DCapManager)
public:
static DCapManager *instance();
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
+ QT_DEPRECATED_X("This api will no longer take effect, please use DCapDir or DCapFile")
static void registerFileEngine();
+ QT_DEPRECATED_X("This api will no longer take effect, please use DCapDir or DCapFile")
static void unregisterFileEngine();
-
+#endif
void appendPath(const QString &path);
void appendPaths(const QStringList &pathList);
-// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2017 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dobject.h"
#include <QObject>
+#include <QString>
DCORE_BEGIN_NAMESPACE
DFileWatcher *add(const QString &filePath);
void remove(const QString &filePath);
-
+ void removeAll();
+ QStringList watchedFiles() const;
Q_SIGNALS:
void fileDeleted(const QString &filePath);
void fileAttributeChanged(const QString &filePath);
static QString findExecutable(const QString &executableName, const QStringList &paths = QStringList());
static void setMode(Mode mode);
+ /**
+ * @brief About XDG dir, view it in https://gitlab.freedesktop.org/xdg/xdg-specs/
+ */
enum class XDG {
+ /*
+ * @brief DataHome, usually is ~/.local/share, also can be defined by ${XDG_DATA_HOME}, where stores the data of applications
+ */
DataHome,
+ /*
+ * @brief ConfigHome, usually is ~/.config, can be defined by ${XDG_CONFIG_HOME}, where stores the config of applications
+ */
ConfigHome,
+ /*
+ * @brief CacheHome, usually is ~/.cache, can be defined by ${XDG_CACHE_HOME}, where stores caches, can be always cleared
+ */
CacheHome,
- RuntimeTime
+ /*
+ * @brief Where temp files or sock files always be put in, like sddm.sock. It is unique per session. It is /run/user/${uid} or ${XDG_RUNTIME_DIR},
+ */
+ RuntimeDir,
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
+ RuntimeTime [[deprecated("Use RuntimeDir Instead")]] = RuntimeDir,
+#endif
+ /*
+ * @brief where history file and state file should be. It is induced because users do not want to mix their config files and state files. It is always ~/.local/state, or defined by ${XDG_STATE_HOME}
+ */
+ StateHome
};
enum class DSG {
static QString homePath();
static QString homePath(const uint uid);
+ /*
+ * @brief Get the XDG dir path by XDG type
+ */
static QString path(XDG type);
static QString path(DSG type);
static QStringList paths(DSG type);
virtual void setValue(const QString &/*key*/, const QVariant &/*value*/) = 0;
virtual void reset(const QString &key) { setValue(key, QVariant());}
virtual QString name() const {return QString("");}
+ virtual bool isDefaultValue(const QString &/*key*/) const { return true; }
};
class DConfigPrivate;
QObject *parent = nullptr);
static DConfig *create(DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath = QString(),
QObject *parent = nullptr);
+ static DConfig *createGeneric(const QString &name, const QString &subpath = QString(),
+ QObject *parent = nullptr);
+ static DConfig *createGeneric(DConfigBackend *backend, const QString &name, const QString &subpath = QString(),
+ QObject *parent = nullptr);
+
+ static void setAppId(const QString &appId);
QString backendName() const;
QStringList keyList() const;
bool isValid() const;
+ bool isDefaultValue(const QString &key) const;
QVariant value(const QString &key, const QVariant &fallback = QVariant()) const;
void setValue(const QString &key, const QVariant &value);
void reset(const QString &key);
-// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
public:
enum Flag {
NoOverride = 1 << 0,
- Global = 1 << 1
+ Global = 1 << 1,
+ UserPublic = 1 << 2
};
Q_DECLARE_FLAGS(Flags, Flag)
bool isValid() const;
QVariant value(const QString &key, DConfigCache *userCache = nullptr) const;
+ QVariant cacheValue(DConfigCache *userCache, const QString &key) const;
bool setValue(const QString &key, const QVariant &value, const QString &callerAppid,
DConfigCache *userCache = nullptr);
virtual QStringList allOverrideDirs(const bool useAppId, const QString &prefix = QString()) const = 0;
virtual QVariant value(const QString &key) const = 0;
+ static QStringList genericMetaDirs(const QString &localPrefix = QString());
+ static QStringList applicationMetaDirs(const QString &localPrefix, const QString &appId);
};
class LIBDTKCORESHARED_EXPORT DConfigCache {
virtual QVariant value(const QString &key) const = 0;
virtual int serial(const QString &key) const = 0;
virtual uint uid() const = 0;
+
+ virtual void setCachePathPrefix(const QString &prefix) = 0;
};
#ifndef QT_NO_DEBUG_STREAM
Q_GADGET
public:
enum EntryType {
- Unknown = 0, //!< Unknown desktop file type. Maybe is invalid.
- Application, //!< The file describes application.
- Link, //!< The file describes URL.
- Directory, //!< The file describes directory settings.
- ServiceType, //!< KDE specific type. mentioned in the spec, so listed here too.
- Service, //!< KDE specific type. mentioned in the spec, so listed here too.
- FSDevice //!< KDE specific type. mentioned in the spec, so listed here too.
+ Unknown = 0, //!<@~english Unknown desktop file type. Maybe is invalid.
+ Application, //!<@~english The file describes application.
+ Link, //!<@~english The file describes URL.
+ Directory, //!<@~english The file describes directory settings.
+ ServiceType, //!<@~english KDE specific type. mentioned in the spec, so listed here too.
+ Service, //!<@~english KDE specific type. mentioned in the spec, so listed here too.
+ FSDevice //!<@~english KDE specific type. mentioned in the spec, so listed here too.
};
Q_ENUM(EntryType)
Q_ENUM(ValueType)
enum Status {
- NoError = 0, //!< No error occurred.
- AccessError, //!< An access error occurred (e.g. trying to write to a read-only file).
- FormatError //!< A format error occurred (e.g. loading a malformed desktop entry file).
+ NoError = 0, //!<@~english No error occurred.
+ AccessError, //!<@~english An access error occurred (e.g. trying to write to a read-only file).
+ FormatError //!<@~english A format error occurred (e.g. loading a malformed desktop entry file).
};
Q_ENUM(Status)
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#ifndef DLICENSEINFO_H
+#define DLICENSEINFO_H
+
+#include <QVector>
+
+#include <dtkcore_global.h>
+#include <dobject.h>
+
+DCORE_BEGIN_NAMESPACE
+
+class DLicenseInfoPrivate;
+class LIBDTKCORESHARED_EXPORT DLicenseInfo : public DObject
+{
+public:
+ explicit DLicenseInfo(DObject *parent = nullptr);
+
+ bool loadContent(const QByteArray &content);
+ bool loadFile(const QString &file);
+ void setLicenseSearchPath(const QString &path);
+ QByteArray licenseContent(const QString &licenseName);
+
+ class DComponentInfoPrivate;
+ class LIBDTKCORESHARED_EXPORT DComponentInfo : public DObject
+ {
+ public:
+ explicit DComponentInfo(DObject *parent = nullptr);
+ ~DComponentInfo() override;
+
+ QString name() const;
+ QString version() const;
+ QString copyRight() const;
+ QString licenseName() const;
+
+ private:
+ D_DECLARE_PRIVATE(DComponentInfo)
+ friend class DLicenseInfoPrivate;
+ };
+ using DComponentInfos = QVector<DComponentInfo*>;
+ DComponentInfos componentInfos() const;
+
+private:
+ D_DECLARE_PRIVATE(DLicenseInfo)
+};
+
+DCORE_END_NAMESPACE
+
+#endif // DLICENSEINFO_H
DeepinDesktop,
DeepinProfessional,
DeepinServer,
- DeepinPersonal
+ DeepinPersonal,
+ DeepinMilitary
};
enum LogoType {
};
enum OrgType {
- Distribution, //!< distribution itself
- Distributor, //!< distributer of the current distribution
- Manufacturer //!< manufacturer of the current distribution or device
+ Distribution, //!<@~english distribution itself
+ Distributor, //!<@~english distributer of the current distribution
+ Manufacturer //!<@~english manufacturer of the current distribution or device
};
enum UosType {
UosDesktop,
UosServer,
UosDevice,
+ UosSmart,
UosTypeCount // must at last
};
static QString deepinCopyright();
// uos version interface
- Q_DECL_DEPRECATED_X("Use arch() instead") static UosType uosType();
+ static UosType uosType();
static UosEdition uosEditionType();
- static UosArch uosArch();
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
+ Q_DECL_DEPRECATED_X("Use arch() instead") static UosArch uosArch();
+#endif
static QString uosProductTypeName(const QLocale &locale = QLocale::system());
static QString uosSystemName(const QLocale &locale = QLocale::system());
static QString uosEditionName(const QLocale &locale = QLocale::system());
static QString buildVersion(); // xyzs
#endif
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
Q_DECL_DEPRECATED_X("Use distributionInfoPath() instead") static QString deepinDistributionInfoPath();
+ Q_DECL_DEPRECATED_X("Use distributionOrgName() instead") static QString deepinDistributorName();
+ Q_DECL_DEPRECATED_X("Use distributionOrgWebsite() instead") static QPair<QString, QString> deepinDistributorWebsite();
+ Q_DECL_DEPRECATED_X("Use distributionOrgLogo() instead") static QString deepinDistributorLogo(LogoType type = Normal, const QString & fallback = QString());
+#endif
static QString distributionInfoPath();
static QString distributionInfoSectionName(OrgType type);
static QString distributionOrgName(OrgType type = Distribution, const QLocale &locale = QLocale::system());
- Q_DECL_DEPRECATED_X("Use deepinDistributionOrgName() instead") static QString deepinDistributorName();
static QPair<QString, QString> distributionOrgWebsite(OrgType type = Distribution);
- Q_DECL_DEPRECATED_X("Use deepinDistributionOrgWebsite() instead") static QPair<QString, QString> deepinDistributorWebsite();
static QString distributionOrgLogo(OrgType orgType = Distribution, LogoType type = Normal, const QString & fallback = QString());
- Q_DECL_DEPRECATED_X("Use deepinDistributionOrgLogo() instead") static QString deepinDistributorLogo(LogoType type = Normal, const QString & fallback = QString());
static QString operatingSystemName();
static ProductType productType();
#define D_DECL_DEPRECATED_X(text) Q_DECL_HIDDEN
#define D_DECL_DEPRECATED Q_DECL_HIDDEN
#else
+#ifdef __GNUC__
+#if __GNUC__ < 13
+#define D_DECL_DEPRECATED __attribute__((__deprecated__))
+#define D_DECL_DEPRECATED_X(text) __attribute__((__deprecated__(text)))
+#else
#define D_DECL_DEPRECATED Q_DECL_DEPRECATED
#define D_DECL_DEPRECATED_X Q_DECL_DEPRECATED_X
#endif
+#else
+#define D_DECL_DEPRECATED Q_DECL_DEPRECATED
+#define D_DECL_DEPRECATED_X Q_DECL_DEPRECATED_X
+#endif
+#endif
#define DTK_VERSION_CHECK(major, minor, patch, build) ((major<<24)|(minor<<16)|(patch<<8)|build)
#define DTK_VERSION DTK_VERSION_CHECK(DTK_VERSION_MAJOR, DTK_VERSION_MINOR, DTK_VERSION_PATCH, DTK_VERSION_BUILD)
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
extern "C" {
int LIBDTKCORESHARED_EXPORT dtkVersion();
const LIBDTKCORESHARED_EXPORT char *dtkVersionString();
}
+#endif
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#ifndef ABSTRACTAPPENDER_H
-#define ABSTRACTAPPENDER_H
-
-#include "dtkcore_global.h"
-#include <Logger.h>
-
-#include <QMutex>
-
-DCORE_BEGIN_NAMESPACE
-
-class LIBDTKCORESHARED_EXPORT AbstractAppender
-{
-public:
- AbstractAppender();
- virtual ~AbstractAppender();
-
- Logger::LogLevel detailsLevel() const;
- void setDetailsLevel(Logger::LogLevel level);
- void setDetailsLevel(const QString &level);
-
- void write(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg);
-
-protected:
- virtual void append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg) = 0;
-
-private:
- QMutex m_writeMutex;
-
- Logger::LogLevel m_detailsLevel;
- mutable QMutex m_detailsLevelMutex;
-};
-
-DCORE_END_NAMESPACE
-#endif // ABSTRACTAPPENDER_H
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#ifndef ABSTRACTSTRINGAPPENDER_H
-#define ABSTRACTSTRINGAPPENDER_H
-
-#include "AbstractAppender.h"
-
-#include <QReadWriteLock>
-#include <QDateTime>
-
-DCORE_BEGIN_NAMESPACE
-
-class LIBDTKCORESHARED_EXPORT AbstractStringAppender : public AbstractAppender
-{
-public:
- AbstractStringAppender();
- virtual QString format() const;
- void setFormat(const QString &format);
-
- static QString stripFunctionName(const char *name);
-protected:
- QString formattedString(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg) const;
-
-private:
- static QByteArray qCleanupFuncinfo(const char*);
-
- QString m_format;
- mutable QReadWriteLock m_formatLock;
-};
-
-DCORE_END_NAMESPACE
-#endif // ABSTRACTSTRINGAPPENDER_H
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#ifndef CONSOLEAPPENDER_H
-#define CONSOLEAPPENDER_H
-
-#include "dtkcore_global.h"
-#include <AbstractStringAppender.h>
-
-DCORE_BEGIN_NAMESPACE
-
-class LIBDTKCORESHARED_EXPORT ConsoleAppender : public AbstractStringAppender
-{
-public:
- ConsoleAppender();
- virtual QString format() const;
- void ignoreEnvironmentPattern(bool ignore);
-
-protected:
- virtual void append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg);
-
-private:
- bool m_ignoreEnvPattern;
-};
-
-DCORE_END_NAMESPACE
-
-#endif // CONSOLEAPPENDER_H
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#ifndef FILEAPPENDER_H
-#define FILEAPPENDER_H
-
-// Logger
-#include "dtkcore_global.h"
-#include <AbstractStringAppender.h>
-
-// Qt
-#include <QFile>
-#include <QTextStream>
-
-DCORE_BEGIN_NAMESPACE
-
-class LIBDTKCORESHARED_EXPORT FileAppender : public AbstractStringAppender
-{
-public:
- FileAppender(const QString &fileName = QString());
- ~FileAppender();
-
- QString fileName() const;
- void setFileName(const QString &s);
-
- qint64 size() const;
-
-protected:
- virtual void append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg);
- bool openFile();
- void closeFile();
-
-private:
- QFile m_logFile;
- QTextStream m_logStream;
- mutable QMutex m_logFileMutex;
-};
-
-DCORE_END_NAMESPACE
-
-#endif // FILEAPPENDER_H
#ifndef LOGMANAGER_H
#define LOGMANAGER_H
-#include <QtCore>
+#include <QScopedPointer>
#include "dtkcore_global.h"
DCORE_BEGIN_NAMESPACE
-class ConsoleAppender;
-class RollingFileAppender;
-
+class DLogManagerPrivate;
class LIBDTKCORESHARED_EXPORT DLogManager
{
+ Q_DISABLE_COPY(DLogManager)
public:
static void registerConsoleAppender();
static void registerFileAppender();
+ static void registerJournalAppender();
static QString getlogFilePath();
static void setLogFormat(const QString &format);
private:
- QString m_format;
- QString m_logPath;
- ConsoleAppender* m_consoleAppender;
- RollingFileAppender* m_rollingFileAppender;
-
void initConsoleAppender();
void initRollingFileAppender();
+ void initJournalAppender();
QString joinPath(const QString &path, const QString &fileName);
inline static DLogManager* instance(){
}
explicit DLogManager();
~DLogManager();
- DLogManager(const DLogManager &);
- DLogManager & operator = (const DLogManager &);
+
+ QScopedPointer<DLogManagerPrivate> d_ptr;
+ Q_DECLARE_PRIVATE(DLogManager)
};
DCORE_END_NAMESPACE
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-#ifndef LOGGER_H
-#define LOGGER_H
-
-#include <QString>
-#include <QDebug>
-#include <QDateTime>
-
-#include "dloggerdefs.h"
-
-DCORE_BEGIN_NAMESPACE
-
-class AbstractAppender;
-class LoggerPrivate;
-class LIBDTKCORESHARED_EXPORT Logger
-{
- Q_DISABLE_COPY(Logger)
-public:
- //! the log levels
- enum LogLevel {
- Trace, //!< ~english Trace level. Can be used for mostly unneeded records used for internal code tracing.
- Debug, //!< ~english Debug level.for the debugging of the software.
- Info, //!< ~english Info level. Can be used for informational records, which may be interesting for not only developers.
- Warning, //!< ~english Warning. May be used to log some non-fatal warnings detected by your application.
- Error, //!< ~english May be used for a big problems making your application work wrong but not crashing.
- Fatal //!< ~english Fatal. Used for unrecoverable errors, crashes the application (abort) right after the log record is written.
- };
-
- Logger();
- Logger(const QString &defaultCategory);
- ~Logger();
-
- static Logger *globalInstance();
-
- static QString levelToString(LogLevel level);
- static LogLevel levelFromString(const QString &str);
-
- void registerAppender(AbstractAppender *appender);
- void registerCategoryAppender(const QString &category, AbstractAppender *appender);
-
- void logToGlobalInstance(const QString &category, bool logToGlobal = false);
-
- void setDefaultCategory(const QString &category);
- QString defaultCategory() const;
-
- void write(const QDateTime &time, LogLevel level, const char *file, int line,
- const char *func, const char *category, const QString &msg);
- void write(LogLevel level, const char *file, int line,
- const char *func, const char *category, const QString &msg);
- QDebug write(LogLevel level, const char *file, int line,
- const char *func, const char *category);
- void writeAssert(const char *file, int line,
- const char *func, const char *condition);
-
-private:
- void write(const QDateTime &time, LogLevel level, const char *file, int line,
- const char *func, const char *category,
- const QString &msg, bool fromLocalInstance);
- Q_DECLARE_PRIVATE(Logger)
- LoggerPrivate *d_ptr;
-};
-
-
-class LIBDTKCORESHARED_EXPORT CuteMessageLogger
-{
- Q_DISABLE_COPY(CuteMessageLogger)
-
-public:
- Q_DECL_CONSTEXPR CuteMessageLogger(Logger *l, Logger::LogLevel level,
- const char *file, int line, const char *func)
- : m_l(l),
- m_level(level),
- m_file(file),
- m_line(line),
- m_function(func),
- m_category(nullptr)
- {}
-
- Q_DECL_CONSTEXPR CuteMessageLogger(Logger *l, Logger::LogLevel level, const char *file,
- int line, const char *func, const char *category)
- : m_l(l),
- m_level(level),
- m_file(file),
- m_line(line),
- m_function(func),
- m_category(category)
- {}
-
- void write(const char *msg, ...) const
-#if defined(Q_CC_GNU) && !defined(__INSURE__)
- #if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG)
- __attribute__((format(gnu_printf, 2, 3)));
- #else
- __attribute__((format(printf, 2, 3)));
- #endif
-#endif
-
- void write(const QString &msg) const;
- QDebug write() const;
-
-private:
- Logger *m_l;
- Logger::LogLevel m_level;
- const char *m_file;
- int m_line;
- const char *m_function;
- const char *m_category;
-};
-
-class LIBDTKCORESHARED_EXPORT LoggerTimingHelper
-{
- Q_DISABLE_COPY(LoggerTimingHelper)
-public:
- inline explicit LoggerTimingHelper(Logger *l, Logger::LogLevel level,
- const char *file, int line, const char *func)
- : m_logger(l),
- m_logLevel(level),
- m_file(file),
- m_line(line),
- m_function(func)
- {}
-
- void start(const char *msg, ...)
-#if defined(Q_CC_GNU) && !defined(__INSURE__)
- #if defined(Q_CC_MINGW) && !defined(Q_CC_CLANG)
- __attribute__((format(gnu_printf, 2, 3)));
- #else
- __attribute__((format(printf, 2, 3)));
- #endif
-#endif
-
- void start(const QString &msg = QString());
-
- ~LoggerTimingHelper();
-
-private:
- Logger *m_logger;
- QTime m_time;
- Logger::LogLevel m_logLevel;
- const char *m_file;
- int m_line;
- const char *m_function;
- QString m_block;
-};
-
-DCORE_END_NAMESPACE
-#endif // LOGGER_H
+++ /dev/null
-// Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#ifndef ROLLINGFILEAPPENDER_H
-#define ROLLINGFILEAPPENDER_H
-
-#include <QDateTime>
-
-#include <FileAppender.h>
-
-DCORE_BEGIN_NAMESPACE
-
-class LIBDTKCORESHARED_EXPORT RollingFileAppender : public FileAppender
-{
- public:
- /*!
- The enum DatePattern defines constants for date patterns.
- \sa setDatePattern(DatePattern)
- */
- enum DatePattern
- {
- /*! The minutely date pattern string is "'.'yyyy-MM-dd-hh-mm". */
- MinutelyRollover = 0,
- /*! The hourly date pattern string is "'.'yyyy-MM-dd-hh". */
- HourlyRollover,
- /*! The half-daily date pattern string is "'.'yyyy-MM-dd-a". */
- HalfDailyRollover,
- /*! The daily date pattern string is "'.'yyyy-MM-dd". */
- DailyRollover,
- /*! The weekly date pattern string is "'.'yyyy-ww". */
- WeeklyRollover,
- /*! The monthly date pattern string is "'.'yyyy-MM". */
- MonthlyRollover
- };
-
- RollingFileAppender(const QString &fileName = QString());
-
- DatePattern datePattern() const;
- void setDatePattern(DatePattern datePattern);
- void setDatePattern(const QString &datePattern);
-
- QString datePatternString() const;
-
- void setLogFilesLimit(int limit);
- int logFilesLimit() const;
-
- void setLogSizeLimit(int qint64);
- qint64 logSizeLimit() const;
-
- protected:
- virtual void append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg);
-
- private:
- void rollOver();
- void computeRollOverTime();
- void computeFrequency();
- void removeOldFiles();
- void setDatePatternString(const QString &datePatternString);
-
- QString m_datePatternString;
- DatePattern m_frequency;
-
- QDateTime m_rollOverTime;
- QString m_rollOverSuffix;
- int m_logFilesLimit;
- qint64 m_logSizeLimit;
- mutable QMutex m_rollingMutex;
-};
-
-DCORE_END_NAMESPACE
-
-#endif // ROLLINGFILEAPPENDER_H
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-#ifndef DLOGGER_DEFINE_H
-#define DLOGGER_DEFINE_H
-
-#include "dtkcore_global.h"
-
-DCORE_BEGIN_NAMESPACE
-
-class Logger;
-class CuteMessageLogger;
-class LoggerTimingHelper;
-LIBDTKCORESHARED_EXPORT Logger *loggerInstance();
-#define logger loggerInstance()
-
-#define dTrace CuteMessageLogger(loggerInstance(), Logger::Trace, __FILE__, __LINE__, Q_FUNC_INFO).write
-#define dDebug CuteMessageLogger(loggerInstance(), Logger::Debug, __FILE__, __LINE__, Q_FUNC_INFO).write
-#define dInfo CuteMessageLogger(loggerInstance(), Logger::Info, __FILE__, __LINE__, Q_FUNC_INFO).write
-#define dWarning CuteMessageLogger(loggerInstance(), Logger::Warning, __FILE__, __LINE__, Q_FUNC_INFO).write
-#define dError CuteMessageLogger(loggerInstance(), Logger::Error, __FILE__, __LINE__, Q_FUNC_INFO).write
-#define dFatal CuteMessageLogger(loggerInstance(), Logger::Fatal, __FILE__, __LINE__, Q_FUNC_INFO).write
-
-#define dCDebug(category) CuteMessageLogger(loggerInstance(), Logger::Debug, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
-#define dCInfo(category) CuteMessageLogger(loggerInstance(), Logger::Info, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
-#define dCWarning(category) CuteMessageLogger(loggerInstance(), Logger::Warning, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
-#define dCError(category) CuteMessageLogger(loggerInstance(), Logger::Error, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
-#define dCFatal(category) CuteMessageLogger(loggerInstance(), Logger::Fatal, __FILE__, __LINE__, Q_FUNC_INFO, category).write()
-
-#define dTraceTime LoggerTimingHelper loggerTimingHelper(loggerInstance(), Logger::Trace, __FILE__, __LINE__, Q_FUNC_INFO); loggerTimingHelper.start
-#define dDebugTime LoggerTimingHelper loggerTimingHelper(loggerInstance(), Logger::Debug, __FILE__, __LINE__, Q_FUNC_INFO); loggerTimingHelper.start
-#define dInfoTime LoggerTimingHelper loggerTimingHelper(loggerInstance(), Logger::Info, __FILE__, __LINE__, Q_FUNC_INFO); loggerTimingHelper.start
-
-#define dAssert(cond) ((!(cond)) ? loggerInstance()->writeAssert(__FILE__, __LINE__, Q_FUNC_INFO, #cond) : qt_noop())
-#define dAssertX(cond, msg) ((!(cond)) ? loggerInstance()->writeAssert(__FILE__, __LINE__, Q_FUNC_INFO, msg) : qt_noop())
-
-#define dCategory(category) \
- private:\
- Logger* loggerInstance()\
- {\
- static Logger customLoggerInstance(category);\
- return &customLoggerInstance;\
- }\
-
-#define dGlobalCategory(category) \
- private:\
- Logger* loggerInstance()\
- {\
- static Logger customLoggerInstance(category);\
- customLoggerInstance.logToGlobalInstance(category, true);\
- return &customLoggerInstance;\
- }\
-
-DCORE_END_NAMESPACE
-
-#endif // DLOGGER_DEFINE_H
+++ /dev/null
-// SPDX-FileCopyrightText: 2010 Karl-Heinz Reichel (khreichel at googlemail dot com)
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#ifndef OUTPUTDEBUGAPPENDER_H
-#define OUTPUTDEBUGAPPENDER_H
-
-#include "dtkcore_global.h"
-#include <AbstractStringAppender.h>
-
-DCORE_BEGIN_NAMESPACE
-
-class LIBDTKCORESHARED_EXPORT OutputDebugAppender : public AbstractStringAppender
-{
- protected:
- virtual void append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg);
-};
-
-DCORE_END_NAMESPACE
-
-#endif // OUTPUTDEBUGAPPENDER_H
#define D_THREAD_IN_MAIN() (qApp->instance() && qApp->instance()->thread() == QThread::currentThread())
// TODO: 添加 DtkCorePrivate 到 dtkcore_global.h
-namespace DtkCorePrivate
+namespace DtkCorePrivate {
+// 本类是继承实现的,只有子类方法是安全的,暂不对外提供接口
+template <class T>
+class DSafeQueue : public QQueue<T>
{
- // 本类是继承实现的,只有子类方法是安全的,暂不对外提供接口
- template<class T>
- class DSafeQueue : public QQueue<T> {
- public:
- inline void enqueue(const T &t) {
- QMutexLocker lkc(&m_mtx);
- QQueue<T>::enqueue(t);
- }
- inline T dequeue() {
- QMutexLocker lkc(&m_mtx);
- return QQueue<T>::dequeue();
- }
- inline int size() {
- QMutexLocker lkc(&m_mtx);
- return QQueue<T>::size();
- }
- inline T &head() {
- QMutexLocker lkc(&m_mtx);
- return QQueue<T>::head();
- }
- inline const T &head() const {
- QMutexLocker lkc(&m_mtx);
- return QQueue<T>::head();
- }
- private:
- mutable QMutex m_mtx;
- };
+public:
+ inline void enqueue(const T &t)
+ {
+ QMutexLocker lkc(&m_mtx);
+ QQueue<T>::enqueue(t);
+ }
+ inline T dequeue()
+ {
+ QMutexLocker lkc(&m_mtx);
+ return QQueue<T>::dequeue();
+ }
+ inline int size()
+ {
+ QMutexLocker lkc(&m_mtx);
+ return QQueue<T>::size();
+ }
+ inline T &head()
+ {
+ QMutexLocker lkc(&m_mtx);
+ return QQueue<T>::head();
+ }
+ inline const T &head() const
+ {
+ QMutexLocker lkc(&m_mtx);
+ return QQueue<T>::head();
+ }
- // 内部使用,不对外提供接口
- class MainWorker : public QObject {
+private:
+ mutable QMutex m_mtx;
+};
+
+// 内部使用,不对外提供接口
+class MainWorker : public QObject
+{
Q_OBJECT
- std::function<void(void *)> m_handle;
- std::function<void(void *)> m_handleProxy;
+ std::function<void(void *)> m_handle;
+ std::function<void(void *)> m_handleProxy;
- std::function<void(void)> m_handleV;
- std::function<void(void)> m_handleVProxy;
+ std::function<void(void)> m_handleV;
+ std::function<void(void)> m_handleVProxy;
- bool m_dasyncDestroyed = false;
- char __padding[7];
- public:
- void setDAsyncDestroyed() {
- m_dasyncDestroyed = true;
- }
- bool dasyncDestroyed() {
- return m_dasyncDestroyed;
- }
- public:
- MainWorker(QObject *parent = nullptr)
- : QObject (parent)
- {
- // Ensure that QApplication is initialized
- Q_ASSERT(qApp->instance() && qApp->instance()->thread());
- moveToThread(qApp->instance()->thread());
+ bool m_dasyncDestroyed = false;
+ char __padding[7];
- bool isStartInMain = D_THREAD_IN_MAIN();
-
- QObject::connect(this, &MainWorker::sigRunInMain,
- this, &MainWorker::slotRunInMain,
- isStartInMain ? Qt::AutoConnection : Qt::BlockingQueuedConnection);
+public:
+ void setDAsyncDestroyed() { m_dasyncDestroyed = true; }
+ bool dasyncDestroyed() { return m_dasyncDestroyed; }
- QObject::connect(this, &MainWorker::sigRunInMainVoid,
- this, &MainWorker::slotRunInMainVoid,
- isStartInMain ? Qt::AutoConnection : Qt::BlockingQueuedConnection);
- }
+public:
+ MainWorker(QObject *parent = nullptr)
+ : QObject(parent)
+ {
+ // Ensure that QApplication is initialized
+ Q_ASSERT(qApp->instance() && qApp->instance()->thread());
+ moveToThread(qApp->instance()->thread());
+
+ bool isStartInMain = D_THREAD_IN_MAIN();
+
+ QObject::connect(this,
+ &MainWorker::sigRunInMain,
+ this,
+ &MainWorker::slotRunInMain,
+ isStartInMain ? Qt::AutoConnection : Qt::BlockingQueuedConnection);
+
+ QObject::connect(this,
+ &MainWorker::sigRunInMainVoid,
+ this,
+ &MainWorker::slotRunInMainVoid,
+ isStartInMain ? Qt::AutoConnection : Qt::BlockingQueuedConnection);
+ }
- // 1. handle arg is non void
- template <typename FUNC, typename ArgType>
- typename std::enable_if<!std::is_void<ArgType>::value>::type
- setHandle(FUNC &&func) {
- m_handle = [&] (void *arg) {
- DSafeQueue<ArgType> *q = static_cast<DSafeQueue<ArgType>*>(arg);
- while (q && q->size()) {
- // 这里是 then 回调真正执行到的地方
- func(q->dequeue());
- }
- };
+ // 1. handle arg is non void
+ template <typename FUNC, typename ArgType>
+ typename std::enable_if<!std::is_void<ArgType>::value>::type setHandle(FUNC &&func)
+ {
+ m_handle = [&](void *arg) {
+ DSafeQueue<ArgType> *q = static_cast<DSafeQueue<ArgType> *>(arg);
+ while (q && q->size()) {
+ // 这里是 then 回调真正执行到的地方
+ func(q->dequeue());
+ }
+ };
- m_handleProxy = [this] (void *arg) {
- if (m_handle) {
- m_handle(arg);
- }
- };
- }
+ m_handleProxy = [this](void *arg) {
+ if (m_handle) {
+ m_handle(arg);
+ }
+ };
+ }
- // 2. handle arg is void
- template <typename FUNC, typename ArgType>
- typename std::enable_if<std::is_void<ArgType>::value>::type
- setHandle(FUNC &&func) {
- m_handleV = [&] (void) {
- // 这里是 then 回调真正执行到的地方
- func();
- };
+ // 2. handle arg is void
+ template <typename FUNC, typename ArgType>
+ typename std::enable_if<std::is_void<ArgType>::value>::type setHandle(FUNC &&func)
+ {
+ m_handleV = [&](void) {
+ // 这里是 then 回调真正执行到的地方
+ func();
+ };
- m_handleVProxy = [this] (void) {
- if (m_handleV) {
- m_handleV();
- }
- };
- }
- Q_SIGNALS:
- void sigRunInMain(void *arg);
- void sigRunInMainVoid();
- public Q_SLOTS:
- void slotRunInMain(void *arg) {
- Q_ASSERT(D_THREAD_IN_MAIN());
- if (m_handleProxy && !m_dasyncDestroyed) {
- m_handleProxy(arg);
+ m_handleVProxy = [this](void) {
+ if (m_handleV) {
+ m_handleV();
}
+ };
+ }
+Q_SIGNALS:
+ void sigRunInMain(void *arg);
+ void sigRunInMainVoid();
+public Q_SLOTS:
+ void slotRunInMain(void *arg)
+ {
+ Q_ASSERT(D_THREAD_IN_MAIN());
+ if (m_handleProxy && !m_dasyncDestroyed) {
+ m_handleProxy(arg);
}
- void slotRunInMainVoid(void) {
- Q_ASSERT(D_THREAD_IN_MAIN());
- if (m_handleVProxy && !m_dasyncDestroyed) {
- m_handleVProxy();
- }
+ }
+ void slotRunInMainVoid(void)
+ {
+ Q_ASSERT(D_THREAD_IN_MAIN());
+ if (m_handleVProxy && !m_dasyncDestroyed) {
+ m_handleVProxy();
}
- };
-}
+ }
+};
+} // namespace DtkCorePrivate
-class DAsyncState : public QObject {
+class DAsyncState : public QObject
+{
Q_OBJECT
public:
explicit DAsyncState(QObject *parent = nullptr) noexcept
- : QObject (parent)
+ : QObject(parent)
{
}
enum AsyncTaskState {
- NotReady = 0x00, // initial state
- Ready = 0x02, // deffered = false
- Running = 0x04, // thread started
- Pending = Ready | Running, // condition wait
- Cancel = 0x08, // set thread canceled
- WaitFinished = 0x10, // wiaitForFinished
- Finished = 0x20, // thread exit
- Forever = 0x30, // TODO: DAsync<void, xxx>::post execute forever
+ NotReady = 0x00, // initial state
+ Ready = 0x02, // deffered = false
+ Running = 0x04, // thread started
+ Pending = Ready | Running, // condition wait
+ Cancel = 0x08, // set thread canceled
+ WaitFinished = 0x10, // wiaitForFinished
+ Finished = 0x20, // thread exit
+ Forever = 0x30, // TODO: DAsync<void, xxx>::post execute forever
};
Q_DECLARE_FLAGS(AsyncTaskStatus, AsyncTaskState)
};
// Template classes not supported by Q_OBJECT, so class MainWorker is independent
template <typename DataTypeIn, typename DataTypeOut>
-class DAsync : public QObject {
-
+class D_DECL_DEPRECATED DAsync : public QObject
+{
class Helper;
std::mutex m_mtxIn;
std::mutex m_mtxForWaitTask;
std::condition_variable m_cvForWaitTask;
- class Guard {
+ class Guard
+ {
DAsync *m_as;
// 如果 DAsync 已经析构了,工作线程还没结束
// DAsync 中的有些数据就不能在 guard 的析构里面访问了
bool m_dasDestructed = false;
+
public:
- bool destructed() {
- return m_dasDestructed;
- }
- void setDestructed() {
- m_dasDestructed = true;
- }
+ bool destructed() { return m_dasDestructed; }
+ void setDestructed() { m_dasDestructed = true; }
+
public:
- explicit Guard(DAsync *as) noexcept : m_as (as)
+ explicit Guard(DAsync *as) noexcept
+ : m_as(as)
{
m_as->m_status.setFlag(DAsyncState::Ready);
- m_as->m_status.setFlag(DAsyncState::Finished, false); // 防止重入
+ m_as->m_status.setFlag(DAsyncState::Finished, false); // 防止重入
}
- ~Guard() {
+ ~Guard()
+ {
if (destructed()) {
return;
}
m_as->m_threadGuard = nullptr;
m_as->m_status.setFlag(DAsyncState::Finished);
- m_as->m_status.setFlag(DAsyncState::Ready, false); // 防止重入
+ m_as->m_status.setFlag(DAsyncState::Ready, false); // 防止重入
if (m_as->m_status.testFlag(DAsyncState::WaitFinished)) {
m_as->m_cvForWaitTask.notify_one();
}
setPending(false);
}
- void setPending(bool isPending) {
+ void setPending(bool isPending)
+ {
if (!destructed()) {
m_as->m_status.setFlag(DAsyncState::Pending, isPending);
}
* 在 emitHelper 中调用 post 进来的任务,然后将结果传到主线程中处理
* 数据传递使用 void * 做转换,对于复合类型避免了使用 qRegisterMetaType
*/
- template<typename T, typename Enable = void>
- struct DataQueueType { DtkCorePrivate::DSafeQueue<T> m_queue; };
- template<class T>
- struct DataQueueType<T, typename std::enable_if<std::is_void<T>::value>::type> { };
+ template <typename T, typename Enable = void>
+ struct DataQueueType
+ {
+ DtkCorePrivate::DSafeQueue<T> m_queue;
+ };
+ template <class T>
+ struct DataQueueType<T, typename std::enable_if<std::is_void<T>::value>::type>
+ {
+ };
using DataInQueue = DataQueueType<DataTypeIn>;
using DataOutQueue = DataQueueType<DataTypeOut>;
// Queue 中处理完的结果经由 m_QueueIn 变量暂存,然后经由 signal、slot 传给 then 中的回调函数做参数
DataOutQueue m_QueueOut;
// 存储不同类型的输入函数
- template<typename T1, typename T2, typename Enable1 = void, typename Enable2 = void>
- struct FuncType {
+ template <typename T1, typename T2, typename Enable1 = void, typename Enable2 = void>
+ struct FuncType
+ {
};
- template<typename T1, typename T2>
- struct FuncType<T1, T2,
- typename std::enable_if<std::is_void<T1>::value>::type,
- typename std::enable_if<std::is_void<T2>::value>::type> {
- std::function <void(void)> cbp;
+ template <typename T1, typename T2>
+ struct FuncType<T1,
+ T2,
+ typename std::enable_if<std::is_void<T1>::value>::type,
+ typename std::enable_if<std::is_void<T2>::value>::type>
+ {
+ std::function<void(void)> cbp;
};
- template<typename T1, typename T2>
- struct FuncType<T1, T2,
- typename std::enable_if<!std::is_void<T1>::value>::type,
- typename std::enable_if<!std::is_void<T2>::value>::type> {
- std::function <T2(T1)> cbp;
+ template <typename T1, typename T2>
+ struct FuncType<T1,
+ T2,
+ typename std::enable_if<!std::is_void<T1>::value>::type,
+ typename std::enable_if<!std::is_void<T2>::value>::type>
+ {
+ std::function<T2(T1)> cbp;
};
- template<typename T1, typename T2>
- struct FuncType<T1, T2,
- typename std::enable_if<std::is_void<T1>::value>::type,
- typename std::enable_if<!std::is_void<T2>::value>::type> {
- std::function <T2(void)> cbp;
+ template <typename T1, typename T2>
+ struct FuncType<T1,
+ T2,
+ typename std::enable_if<std::is_void<T1>::value>::type,
+ typename std::enable_if<!std::is_void<T2>::value>::type>
+ {
+ std::function<T2(void)> cbp;
};
- template<typename T1, typename T2>
- struct FuncType<T1, T2,
- typename std::enable_if<!std::is_void<T1>::value>::type,
- typename std::enable_if<std::is_void<T2>::value>::type> {
- std::function <void(T1)> cbp;
+ template <typename T1, typename T2>
+ struct FuncType<T1,
+ T2,
+ typename std::enable_if<!std::is_void<T1>::value>::type,
+ typename std::enable_if<std::is_void<T2>::value>::type>
+ {
+ std::function<void(T1)> cbp;
};
std::mutex m_mtxFunc;
public:
explicit DAsync(QObject *parent = nullptr) noexcept
- : QObject (parent)
- , m_func ({nullptr})
- , m_status (DAsyncState::NotReady)
+ : QObject(parent)
+ , m_func({nullptr})
+ , m_status(DAsyncState::NotReady)
{
m_mainWorker = new DtkCorePrivate::MainWorker();
m_helper = new Helper(this, this);
}
- ~DAsync() {
+ ~DAsync()
+ {
if (m_threadGuard) {
m_threadGuard->setDestructed();
}
private:
// 1. input void & emit void
template <typename PostInType, typename EmitInType>
- typename std::enable_if<std::is_void<PostInType>::value && std::is_void<EmitInType>::value>::type
- emitHelper() {
+ typename std::enable_if<std::is_void<PostInType>::value && std::is_void<EmitInType>::value>::type emitHelper()
+ {
m_func.cbp();
Q_EMIT m_mainWorker->sigRunInMainVoid();
}
// 2. input non void & emit non void
template <typename PostInType, typename EmitInType>
- typename std::enable_if<!std::is_void<PostInType>::value && !std::is_void<EmitInType>::value>::type
- emitHelper() {
+ typename std::enable_if<!std::is_void<PostInType>::value && !std::is_void<EmitInType>::value>::type emitHelper()
+ {
m_QueueOut.m_queue.enqueue(m_func.cbp(m_QueueIn.m_queue.dequeue()));
Q_EMIT m_mainWorker->sigRunInMain(static_cast<void *>(&(m_QueueOut.m_queue)));
}
// 3. input non void & emit void
template <typename PostInType, typename EmitInType>
- typename std::enable_if<!std::is_void<PostInType>::value && std::is_void<EmitInType>::value>::type
- emitHelper() {
+ typename std::enable_if<!std::is_void<PostInType>::value && std::is_void<EmitInType>::value>::type emitHelper()
+ {
m_func.cbp(m_QueueIn.m_queue.dequeue());
Q_EMIT m_mainWorker->sigRunInMainVoid();
}
// 4. input void & emit non void
template <typename PostInType, typename EmitInType>
- typename std::enable_if<std::is_void<PostInType>::value && !std::is_void<EmitInType>::value>::type
- emitHelper() {
+ typename std::enable_if<std::is_void<PostInType>::value && !std::is_void<EmitInType>::value>::type emitHelper()
+ {
m_QueueOut.m_queue.enqueue(m_func.cbp());
Q_EMIT m_mainWorker->sigRunInMain(static_cast<void *>(&(m_QueueOut.m_queue)));
}
public:
- void startUp() {
+ void startUp()
+ {
if (m_status.testFlag(DAsyncState::Cancel)) {
return;
}
m_helper->start();
}
- void cancelAll() {
+ void cancelAll()
+ {
m_status.setFlag(DAsyncState::Cancel);
if (m_status.testFlag(DAsyncState::Pending)) {
m_cvIn.notify_one();
}
}
- bool isFinished() {
- return m_status.testFlag(DAsyncState::Finished);
- }
+ bool isFinished() { return m_status.testFlag(DAsyncState::Finished); }
/*
* 不能在 QTimer 中使用 waitForFinished,防止阻塞主线程
* 也不能在主线程执行前使用 waitForFinished()
* 任务结束只要调用 cancelAll + isFinished 轮询判断就行了,
* DAsync 的工作线程就会在完成后自动退出。
*/
- void waitForFinished(bool cancelAllWorks = true) {
+ void waitForFinished(bool cancelAllWorks = true)
+ {
Q_ASSERT(!D_THREAD_IN_MAIN());
if (cancelAllWorks) {
cancelAll();
m_cvIn.notify_one();
}
m_status.setFlag(DAsyncState::WaitFinished);
- std::unique_lock <std::mutex> lck(m_mtxForWaitTask);
+ std::unique_lock<std::mutex> lck(m_mtxForWaitTask);
m_cvForWaitTask.wait(lck);
}
}
// 输入数据不是 void 类型则依赖于 m_QueueIn
template <typename FUNC, typename InputType = DataTypeIn>
- typename std::enable_if<!std::is_void<InputType>::value, Helper *>::type
- post(FUNC &&func) {
+ typename std::enable_if<!std::is_void<InputType>::value, Helper *>::type post(FUNC &&func)
+ {
m_func.cbp = std::forward<FUNC>(func);
if (m_postProxy) {
return m_helper;
}
- m_postProxy = [this] () {
+ m_postProxy = [this]() {
std::thread thread([this] {
if (m_status.testFlag(DAsyncState::Cancel)) {
return;
Guard guard(this);
m_threadGuard = &guard;
- std::unique_lock <std::mutex> lck(m_mtxIn);
+ std::unique_lock<std::mutex> lck(m_mtxIn);
while (true) {
while (!m_status.testFlag(DAsyncState::Ready) || !m_QueueIn.m_queue.size()) {
guard.setPending(true);
}
template <typename FUNC, typename InputType = DataTypeIn>
- typename std::enable_if<std::is_void<InputType>::value, Helper *>::type
- post(FUNC &&func) {
+ typename std::enable_if<std::is_void<InputType>::value, Helper *>::type post(FUNC &&func)
+ {
{
std::lock_guard<std::mutex> lckFunc(m_mtxFunc);
m_func.cbp = std::forward<FUNC>(func);
if (m_postProxy) {
return m_helper;
}
- m_postProxy = [this] () {
+ m_postProxy = [this]() {
std::thread thread([this] {
if (m_status.testFlag(DAsyncState::Cancel)) {
return;
Guard guard(this);
m_threadGuard = &guard;
- std::unique_lock <std::mutex> lck(m_mtxIn);
+ std::unique_lock<std::mutex> lck(m_mtxIn);
while (true) {
if (!m_status.testFlag(DAsyncState::Ready)) {
guard.setPending(true);
// 定时查询 flag,防止睡死的情况发生
m_cvIn.wait_for(lck, std::chrono::milliseconds(200));
- if (guard.destructed() || m_status.testFlag(DAsyncState::Cancel)){
+ if (guard.destructed() || m_status.testFlag(DAsyncState::Cancel)) {
return;
}
}
if (m_func.cbp) {
std::lock_guard<std::mutex> lckFunc(m_mtxFunc);
emitHelper<DataTypeIn, DataTypeOut>();
- m_func.cbp = nullptr; // reset
+ m_func.cbp = nullptr; // reset
}
}
});
// only support DAsync<non void type, ...>
template <typename InputType = DataTypeIn>
- typename std::enable_if<!std::is_void<InputType>::value>::type
- postData(const InputType &data) {
+ typename std::enable_if<!std::is_void<InputType>::value>::type postData(const InputType &data)
+ {
if (Q_UNLIKELY(!m_status.testFlag(DAsyncState::Cancel))) {
m_QueueIn.m_queue.enqueue(data);
if (m_status.testFlag(DAsyncState::Pending)) {
private:
std::function<void()> m_postProxy;
- class Helper : public QObject {
+ class Helper : public QObject
+ {
DAsync *m_async;
+
public:
explicit Helper(DAsync *async, QObject *parent = nullptr) noexcept
- : QObject (parent)
- , m_async (async)
+ : QObject(parent)
+ , m_async(async)
{
}
template <typename FUNC>
- Helper *then(FUNC &&func) {
+ Helper *then(FUNC &&func)
+ {
m_async->m_mainWorker->template setHandle<FUNC, DataTypeOut>(std::forward<FUNC>(func));
return this;
}
// 仅启动,非阻塞
- void start(bool immediately = true) {
+ void start(bool immediately = true)
+ {
if (m_async->m_postProxy) {
m_async->m_postProxy();
}
};
DCORE_END_NAMESPACE
-#endif //DASYNC_H
+#endif // DASYNC_H
+++ /dev/null
-// SPDX-FileCopyrightText: 2015 Jolla Ltd.
-//
-// SPDX-License-Identifier: LGPL-2.1-or-later
-
-#ifndef QT_DBUS_EXTENDED_H
-#define QT_DBUS_EXTENDED_H
-
-#if defined(QT_DBUS_EXTENDED_LIBRARY)
-# define QT_DBUS_EXTENDED_EXPORT Q_DECL_EXPORT
-#else
-# define QT_DBUS_EXTENDED_EXPORT Q_DECL_IMPORT
-#endif
-
-#endif /* QT_DBUS_EXTENDED_H */
#ifndef DBUSEXTENDEDABSTRACTINTERFACE_H
#define DBUSEXTENDEDABSTRACTINTERFACE_H
-
-#include <DDBusExtended>
+#include "dtkcore_global.h"
#include <QDBusAbstractInterface>
#include <QDBusError>
-
class QDBusPendingCallWatcher;
+DCORE_BEGIN_NAMESPACE
+
class DDBusExtendedPendingCallWatcher;
-class QT_DBUS_EXTENDED_EXPORT DDBusExtendedAbstractInterface: public QDBusAbstractInterface
+class LIBDTKCORESHARED_EXPORT DDBusExtendedAbstractInterface : public QDBusAbstractInterface
{
Q_OBJECT
void startServiceProcess();
protected:
- DDBusExtendedAbstractInterface(const QString &service,
- const QString &path,
- const char *interface,
- const QDBusConnection &connection,
- QObject *parent);
+ DDBusExtendedAbstractInterface(
+ const QString &service, const QString &path, const char *interface, const QDBusConnection &connection, QObject *parent);
void connectNotify(const QMetaMethod &signal);
void disconnectNotify(const QMetaMethod &signal);
void asyncGetAllPropertiesFinished();
private Q_SLOTS:
- void onPropertiesChanged(const QString& interfaceName,
- const QVariantMap& changedProperties,
- const QStringList& invalidatedProperties);
+ void onPropertiesChanged(const QString &interfaceName,
+ const QVariantMap &changedProperties,
+ const QStringList &invalidatedProperties);
void onDBusNameOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner);
void onAsyncPropertyFinished(QDBusPendingCallWatcher *w);
void onAsyncSetPropertyFinished(QDBusPendingCallWatcher *w);
private:
QVariant asyncProperty(const QString &propertyName);
void asyncSetProperty(const QString &propertyName, const QVariant &value);
- static QVariant demarshall(const QString &interface, const QMetaProperty &metaProperty, const QVariant &value, QDBusError *error);
+ static QVariant
+ demarshall(const QString &interface, const QMetaProperty &metaProperty, const QVariant &value, QDBusError *error);
bool m_sync;
bool m_useCache;
QString m_dbusOwner;
bool m_propertiesChangedConnected;
};
+DCORE_END_NAMESPACE
#endif /* DBUSEXTENDEDABSTRACTINTERFACE_H */
class DDBusInterfacePrivate;
+// Imported since 5.6.3
class DDBusInterface : public QDBusAbstractInterface
{
Q_OBJECT
public:
explicit DDBusInterface(const QString &service,
const QString &path,
- const QString &interface = QString(),
+ const QString &interface,
const QDBusConnection &connection = QDBusConnection::sessionBus(),
QObject *parent = nullptr);
virtual ~DDBusInterface() override;
{
public:
DDBusData();
+ QDBusPendingCall asyncCallWithArguments(const QString &method, const QVariantList &arguments, const QString &iface = QString());
QString service;
QString path;
template <typename T>
QDBusPendingCall DDBusProperty::set(const T &value)
{
- QDBusInterface iface(m_dbusData->service, m_dbusData->path, QStringLiteral("org.freedesktop.DBus.Properties"), m_dbusData->connection);
-
- const QVariantList args = { QVariant::fromValue(m_dbusData->interface), QVariant::fromValue(m_propertyName), QVariant::fromValue(QDBusVariant(value)) };
-
- return iface.asyncCallWithArgumentList(QStringLiteral("Set"), args);
+ QVariantList args{QVariant::fromValue(m_dbusData->interface), QVariant::fromValue(m_propertyName), QVariant::fromValue(QDBusVariant(value))};
+ return m_dbusData->asyncCallWithArguments(QStringLiteral("Set"), args, QStringLiteral("org.freedesktop.DBus.Properties"));
}
class LIBDTKCORESHARED_EXPORT DDBusSender
DDBusCaller method(const QString &method);
DDBusProperty property(const QString &property);
+ static DDBusSender system();
private:
DDBusSender type(const QDBusConnection::BusType busType);
-// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2017 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
DCORE_BEGIN_NAMESPACE
+// without polyphonic support
QString LIBDTKCORESHARED_EXPORT Chinese2Pinyin(const QString& words);
+//!< @~english enum ToneStyle - pinyin tone style
+enum ToneStyle {
+ TS_NoneTone, /*!< @~english pinyin without tone */
+ TS_Tone, /*!< @~english pinyin tone, default style in dictory file*/
+ TS_ToneNum, /*!< @~english pinyin tone number */
+};
+
+// support polyphonic
+QStringList LIBDTKCORESHARED_EXPORT pinyin(const QString& words, ToneStyle ts = TS_Tone, bool *ok = nullptr);
+
+// support polyphonic
+QStringList LIBDTKCORESHARED_EXPORT firstLetters(const QString& words);
+
DCORE_END_NAMESPACE
#endif // DPINYIN_H
--- /dev/null
+// SPDX-FileCopyrightText: 2022-2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#ifndef DTEXTENCODING_H
+#define DTEXTENCODING_H
+
+#include <dtkcore_global.h>
+
+#include <QString>
+#include <QByteArray>
+
+DCORE_BEGIN_NAMESPACE
+
+class LIBDTKCORESHARED_EXPORT DTextEncoding
+{
+public:
+ static QByteArray detectTextEncoding(const QByteArray &content);
+ static QByteArray detectFileEncoding(const QString &fileName, bool *isOk = nullptr);
+
+ static bool convertTextEncoding(QByteArray &content,
+ QByteArray &outContent,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding = QByteArray(),
+ QString *errString = nullptr);
+ static bool convertTextEncodingEx(QByteArray &content,
+ QByteArray &outContent,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding = QByteArray(),
+ QString *errString = nullptr,
+ int *convertedBytes = nullptr);
+ static bool convertFileEncoding(const QString &fileName,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding = QByteArray(),
+ QString *errString = nullptr);
+ static bool convertFileEncodingTo(const QString &fromFile,
+ const QString &toFile,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding = QByteArray(),
+ QString *errString = nullptr);
+};
+
+DCORE_END_NAMESPACE
+
+#endif // DTEXTENCODING_H
-// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <QPointer>
#include <QDebug>
+#if DTK_VERSION >= DTK_VERSION_CHECK(6, 0, 0, 0)
+#include <QFuture>
+#include <QPromise>
+#include <QEvent>
+#endif
+
DCORE_BEGIN_NAMESPACE
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
namespace DThreadUtil {
typedef std::function<void()> FunctionType;
return runInMainThread(obj, obj, fun, std::forward<Args>(args)...);
}
}
+#else
+class LIBDTKCORESHARED_EXPORT DThreadUtils final
+{
+ friend class Caller;
+public:
+ explicit DThreadUtils(QThread *thread);
+ ~DThreadUtils();
-DCORE_END_NAMESPACE
+ static DThreadUtils &gui();
+
+ QThread *thread() const noexcept;
-#endif // DTHREADUTILS_H
+ template <typename Func, typename... Args>
+ inline auto run(QObject *context,typename QtPrivate::FunctionPointer<Func>::Object *obj, Func fun, Args &&...args)
+ {
+ return call(context, fun, *obj, std::forward<Args>(args)...);
+ }
+ template <typename Func, typename... Args>
+ inline auto run(typename QtPrivate::FunctionPointer<Func>::Object *obj, Func fun, Args &&...args)
+ {
+ if constexpr (std::is_base_of<QObject, typename QtPrivate::FunctionPointer<Func>::Object>::value) {
+ return call(obj, fun, *obj, std::forward<Args>(args)...);
+ } else {
+ return call(static_cast<QObject *>(nullptr), fun, *obj, std::forward<Args>(args)...);
+ }
+ }
+ template <typename Func, typename... Args>
+ inline QFuture<std::invoke_result_t<std::decay_t<Func>, Args...>> run(QObject *context, Func fun, Args &&...args)
+ {
+ return call(context, fun, std::forward<Args>(args)...);
+ }
+ template <typename Func, typename... Args>
+ inline QFuture<std::invoke_result_t<std::decay_t<Func>, Args...>> run(Func fun, Args &&...args)
+ {
+ return call(static_cast<QObject *>(nullptr), fun, std::forward<Args>(args)...);
+ }
+ template <typename... T>
+ inline decltype(auto) exec(T &&...args)
+ {
+ auto future = run(std::forward<T>(args)...);
+ if (!thread()->isRunning()) {
+ qWarning() << "The target thread is not running, maybe lead to deadlock.";
+ }
+ future.waitForFinished();
+ if constexpr (std::is_same_v<decltype(future), QFuture<void>>) {
+ return;
+ } else {
+ return future.result();
+ }
+ }
+
+private:
+ class AbstractCallEvent : public QEvent
+ {
+ public:
+ AbstractCallEvent(QEvent::Type type)
+ : QEvent(type)
+ {
+ }
+ virtual void call() = 0;
+ };
+
+ template <typename Func, typename... Args>
+ class Q_DECL_HIDDEN CallEvent : public AbstractCallEvent
+ {
+ using FunInfo = QtPrivate::FunctionPointer<std::decay_t<Func>>;
+ using ReturnType = std::invoke_result_t<std::decay_t<Func>, Args...>;
+
+ public:
+ CallEvent(QEvent::Type type, Func &&fun, Args &&...args)
+ : AbstractCallEvent(type)
+ , function(std::forward<Func>(fun))
+ , arguments(std::forward<Args>(args)...)
+ {
+ }
+
+ QEvent *clone() const override { return nullptr; }
+
+ void call() override
+ {
+ if (promise.isCanceled()) {
+ return;
+ }
+
+ if (contextChecker == context) {
+ promise.start();
+#ifndef QT_NO_EXCEPTIONS
+ try {
+#endif
+ if constexpr (std::is_void_v<ReturnType>) {
+ std::apply(function, arguments);
+ } else {
+ promise.addResult(std::apply(function, arguments));
+ }
+#ifndef QT_NO_EXCEPTIONS
+ } catch (...) {
+ promise.setException(std::current_exception());
+ }
+#endif
+ promise.finish();
+ } else {
+ promise.start();
+ promise.setException(std::make_exception_ptr(std::runtime_error("The context object is destroyed.")));
+ promise.finish();
+ }
+ }
+
+ Func function;
+ const std::tuple<Args...> arguments;
+ QPromise<ReturnType> promise;
+
+ QObject *context{nullptr};
+ QPointer<QObject> contextChecker;
+ };
+
+ template <typename Func, typename... Args>
+ inline auto call(QObject *context, Func fun, Args &&...args)
+ {
+ using FuncInfo = QtPrivate::FunctionPointer<std::decay_t<Func>>;
+ using ReturnType = std::invoke_result_t<std::decay_t<Func>, Args...> ;
+
+ if constexpr (FuncInfo::IsPointerToMemberFunction) {
+ static_assert(std::is_same_v<std::decay_t<typename QtPrivate::List<Args...>::Car>, typename FuncInfo::Object>,
+ "The obj and function are not compatible.");
+ static_assert(
+ QtPrivate::CheckCompatibleArguments<typename QtPrivate::List<Args...>::Cdr, typename FuncInfo::Arguments>::value,
+ "The args and function are not compatible.");
+ } else if constexpr (FuncInfo::ArgumentCount != -1) {
+ static_assert(QtPrivate::CheckCompatibleArguments<QtPrivate::List<Args...>, typename FuncInfo::Arguments>::value,
+ "The args and function are not compatible.");
+ } else { // for lambda and impl operator()
+ static_assert(std::is_invocable_r_v<ReturnType, Func, Args...>,
+ "The callable object can't invoke with supplied args");
+ }
+
+ QPromise<ReturnType> promise;
+ auto future = promise.future();
+
+ if (Q_UNLIKELY(QThread::currentThread() == m_thread)) {
+ promise.start();
+ if constexpr (std::is_void_v<ReturnType>) {
+ std::invoke(fun, std::forward<Args>(args)...);
+ } else {
+ promise.addResult(std::invoke(fun, std::forward<Args>(args)...));
+ }
+ promise.finish();
+ } else {
+ auto event = new CallEvent<Func, Args...>(eventType, std::move(fun), std::forward<Args>(args)...);
+ event->promise = std::move(promise);
+ event->context = context;
+ event->contextChecker = context;
+
+ QCoreApplication::postEvent(ensureThreadContextObject(), event);
+ }
+
+ return future;
+ }
+
+ QObject *ensureThreadContextObject();
+
+ static inline QEvent::Type eventType;
+ QThread *m_thread;
+ QAtomicPointer<QObject> threadContext;
+};
+#endif // version macro end
+DCORE_END_NAMESPACE
+#endif // protect macro end
-// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2016 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <QThread>
#include <QMetaObject>
#include <QCoreApplication>
+#include <QRegularExpression>
+#include <QStandardPaths>
+#include <QDir>
+#include <type_traits>
+#include <cstring>
namespace DUtil
{
template <class T>
void SecureErase(T *p, size_t size)
{
- memset(p, 0, size);
+ static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value,
+ "try to erase content of raw pointer, but type T isn't suitable");
+
+ std::memset(p, 0, size);
}
template <class T>
void SecureErase(T &obj)
{
+ static_assert(std::is_default_constructible<typename T::value_type>::value,
+ "container's value type must have a default constructor.");
+
for (typename T::iterator i = obj.begin(); i != obj.end(); ++i) {
- *i = 0;
+ *i = typename T::value_type{};
}
- obj.clear();
}
+inline QString escapeToObjectPath(const QString &str)
+{
+ if (str.isEmpty()) {
+ return "_";
+ }
+
+ auto ret = str;
+ QRegularExpression re{R"([^a-zA-Z0-9])"};
+ auto matcher = re.globalMatch(ret);
+ while (matcher.hasNext()) {
+ auto replaceList = matcher.next().capturedTexts();
+ replaceList.removeDuplicates();
+ for (const auto &c : replaceList) {
+ auto hexStr = QString::number(static_cast<uint>(c.front().toLatin1()), 16);
+ ret.replace(c, QString{R"(_%1)"}.arg(hexStr));
+ }
+ }
+ return ret;
+}
+
+inline QString unescapeFromObjectPath(const QString &str)
+{
+ auto ret = str;
+ for (int i = 0; i < str.size(); ++i) {
+ if (str[i] == '_' && i + 2 < str.size()) {
+ auto hexStr = str.mid(i + 1, 2);
+ ret.replace(QString{"_%1"}.arg(hexStr), QChar::fromLatin1(hexStr.toUInt(nullptr, 16)));
+ i += 2;
+ }
+ }
+ return ret;
+}
+
+inline QString getAppIdFromAbsolutePath(const QString &path)
+{
+ static QString desktopSuffix{u8".desktop"};
+ const auto &appDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
+ if (!path.endsWith(desktopSuffix) ||
+ !std::any_of(appDirs.cbegin(), appDirs.constEnd(), [&path](const QString &dir) { return path.startsWith(dir); })) {
+ return {};
+ }
+
+ auto tmp = path.chopped(desktopSuffix.size());
+ auto components = tmp.split(QDir::separator(), Qt::SkipEmptyParts);
+ auto location = std::find(components.cbegin(), components.cend(), "applications");
+ if (location == components.cend()) {
+ return {};
+ }
+
+ auto appId = QStringList{location + 1, components.cend()}.join('-');
+ return appId;
+}
+
+inline QStringList getAbsolutePathFromAppId(const QString &appId)
+{
+ auto components = appId.split('-', Qt::SkipEmptyParts);
+ auto appDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
+
+ QStringList ret;
+ for (const auto &dirPath : appDirs) {
+ auto currentDir = dirPath;
+ for (auto it = components.cbegin(); it != components.cend(); ++it) {
+ auto currentName = QStringList{it, components.cend()}.join('-') + QString{".desktop"};
+ QDir dir{currentDir};
+ if (dir.exists(currentName)) {
+ ret.append(dir.filePath(currentName));
+ }
+
+ currentDir.append(QDir::separator() + *it);
+ }
+ }
+
+ return ret;
+}
}
#include <QObject>
#include <QSet>
#include <QDebug>
-
+#include <QLoggingCategory>
#include <functional>
#include <type_traits>
DCORE_BEGIN_NAMESPACE
+#ifndef QT_DEBUG
+inline Q_LOGGING_CATEGORY(vtableHook, "dtk.vtableHook", QtInfoMsg);
+#else
+inline Q_LOGGING_CATEGORY(vtableHook, "dtk.vtableHook");
+#endif
+
class LIBDTKCORESHARED_EXPORT DVtableHook
{
public:
static inline int getVtableSize(quintptr **obj)
{
quintptr *begin = *obj;
- while(*begin) ++begin;
- return begin - *obj;
+ while (true) {
+ if ((int64_t)*begin == 0 or (int64_t)*begin < QSysInfo::WordSize) // offset will grater than 8 bytes(64 bit)
+ break;
+ ++begin;
+ }
+ return begin - *obj + 2; // for offset and rtti info
}
static inline quintptr *getVtableOfObject(const void *obj)
quintptr *vfptr_t1 = reinterpret_cast<quintptr*>(resolve(vtable_symbol.constData()));
- if (!vfptr_t1)
- return nullptr;
-
- // symbol address + 2 * sizeof(quintptr) = virtal table start address
- return vfptr_t1 + 2;
+ return vfptr_t1 ? adjustToEntry(vfptr_t1) : nullptr;
}
static int getDestructFunIndex(quintptr **obj, std::function<void(void)> destoryObjFun);
{
typedef QtPrivate::FunctionPointer<Fun1> FunInfo1;
// 检查析构函数是否为虚
- class OverrideDestruct : public FunInfo1::Object { ~OverrideDestruct() override;};
+ class OverrideDestruct : public FunInfo1::Object { ~OverrideDestruct() override;}; //TODO: we can use std::has_virtual_destructor
if (!ensureVtable((void*)t1, std::bind(&_destory_helper<typename FunInfo1::Object>, t1))) {
return false;
quintptr fun1_offset = toQuintptr(&fun1);
quintptr fun2_offset = toQuintptr(&fun2);
- if (fun1_offset < 0 || fun1_offset > UINT_LEAST16_MAX)
+ if (fun1_offset > UINT_LEAST16_MAX)
return false;
quintptr *vfun = vfptr_t1 + fun1_offset / sizeof(quintptr);
static inline StdFunType fun(StdFunType f, bool check = true) {
static StdFunType fun = f;
static bool initialized = false;
- if (initialized && check) {
- qWarning("The StdFunWrap is dirty! Don't use std::bind(use lambda functions).");
- }
+ if (initialized && check)
+ qCWarning(vtableHook, "The StdFunWrap is dirty! Don't use std::bind(use lambda functions).");
initialized = true;
return fun;
}
rvf.oldFun = DVtableHook::resetVfptrFun((void*)obj, fun_offset);
if (!rvf.oldFun) {
- qWarning() << "Reset the function failed, object:" << obj;
+ qCWarning(vtableHook) << "Reset the function failed, object: " << obj;
abort();
}
private:
static bool copyVtable(quintptr **obj);
static bool clearGhostVtable(const void *obj);
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
+ Q_DECL_DEPRECATED static bool isFinalClass(quintptr *obj);
+ Q_DECL_DEPRECATED static quintptr **adjustThis(quintptr *obj);
+#endif
+
+ template <typename T>
+ static T adjustToTop(T obj) // vtableTop: vtable start address, Usually refers to offset_to_top
+ {
+ // this function should'n be called when entry is parent entry
+ using fundamentalType = typename std::remove_cv<typename std::remove_pointer<T>::type>::type;
+ return obj - static_cast<fundamentalType>(2); // vtable start address = vtable entry - 2
+ }
+
+ template <typename T>
+ static T adjustToEntry(T obj) // vtableEntry: is located after rtti in the virtual table
+ {
+ // this function should'n be called when entry is parent entry
+ using fundamentalType = typename std::remove_cv<typename std::remove_pointer<T>::type>::type;
+ return obj + static_cast<fundamentalType>(2); // vtable entry = vtable start address + 2
+ }
template<typename T>
static void _destory_helper(const T *obj) {
--- /dev/null
+package:
+ id: dtkcore
+ name: dtkcore
+ kind: lib
+ version: 5.6.3
+ description: |
+ Deepin Tool Kit Core Devel library \
+ DtkCore is base devel library of Deepin Qt/C++ applications.
+
+base:
+ id: org.deepin.base/23.0.0
+
+depends:
+ - id: qtbase/5.15.7
+ - id: dtkcommon/5.6.0.1
+ - id: gsettings-qt/0.3.1.1
+
+source:
+ kind: local
+
+variables:
+ extra_args: |
+ -DBUILD_EXAMPLES=OFF \
+ -DBUILD_DOCS=OFF \
+ -DBUILD_TESTING=OFF \
+ -DDTK_VERSION=${VERSION}
+
+build:
+ kind: cmake
+++ /dev/null
-@PACKAGE_INIT@
-
-set_and_check(DtkCore_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@")
-set_and_check(DtkCore_LIBRARY_DIRS "@PACKAGE_LIBRARY_INSTALL_DIR@")
-set(DtkCore_TOOL_DIRS "@PACKAGE_TOOL_INSTALL_DIR@")
-set(DtkCore_LIBRARIES dtkcore)
-
-include_directories("${DtkCore_INCLUDE_DIRS}")
-
-check_required_components(DtkCore)
-
-# Keep deprecated variables for compatibility
-set(DTKCORE_INCLUDE_DIRS ${DtkCore_INCLUDE_DIRS})
-set(DTKCORE_TOOL_DIRS ${DtkCore_TOOL_DIRS})
--- /dev/null
+@PACKAGE_INIT@
+
+if(UNIX AND NOT APPLE)
+ set(LINUX TRUE)
+endif()
+include(CMakeFindDependencyMacro)
+find_dependency(Qt@QT_VERSION_MAJOR@Core)
+find_dependency(Qt@QT_VERSION_MAJOR@Xml)
+find_dependency(Dtk@DTK_VERSION_MAJOR@Log)
+
+if (LINUX)
+ find_dependency(Qt@QT_VERSION_MAJOR@DBus)
+endif()
+find_dependency(Dtk@DTK_VERSION_MAJOR@DConfig)
+include(${CMAKE_CURRENT_LIST_DIR}/Dtk@DTK_VERSION_MAJOR@CoreTargets.cmake)
+
+set(DtkCore_LIBRARIES Dtk@DTK_VERSION_MAJOR@::Core)
+get_target_property(DtkCore_INCLUDE_DIRS Dtk@DTK_VERSION_MAJOR@::Core INTERFACE_INCLUDE_DIRECTORIES)
+get_target_property(DtkCore_LIBRARY_DIRS Dtk@DTK_VERSION_MAJOR@::Core INTERFACE_LINK_DIRECTORIES)
+set(DtkCore_TOOL_DIRS "@PACKAGE_TOOL_INSTALL_DIR@")
+check_required_components(DtkCore)
+
+# Keep deprecated variables for compatibility
+set(DTKCORE_INCLUDE_DIRS ${DtkCore_INCLUDE_DIRS})
+set(DTKCORE_TOOL_DIRS ${DtkCore_TOOL_DIRS})
+
+add_definitions(-DQT_MESSAGELOGCONTEXT)
--- /dev/null
+# This prf file is used to deploy files that dconfig's meta and override configure.
+#
+# get variable `$$DSG_DATA_DIR` 's value, it’s consistent with class DConfigFile code.
+isEmpty(DSG_DATA_DIR) {
+ isEmpty(PREFIX) {
+ DSG_DATA_DIR=/usr/share/dsg
+ } else {
+ DSG_DATA_DIR=$$PREFIX/share/dsg
+ }
+}
+
+# deploy some `meta` 's configure.
+#
+# files - deployed files.
+# base - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
+# appid - working for the app, if it's empty, depending on `TEMPLATE`.
+# commonid - working for common, if it's empyt, depending on `TEMPLATE`.
+#
+# e.g:
+# dconfig_example.files += \
+# $$PWD/configs/dconf-example.json \
+# $$PWD/configs/a/dconf-example.json
+# dconfig_example.base = $$PWD/configs
+# dconfig_example.appid = $$TARGET
+#
+# dconfig_example2.files += $$PWD/configs/a/dconf-example.json
+#
+# DCONFIG_META_FILES += dconfig_example dconfig_example2
+#
+for(metaitem, DCONFIG_META_FILES) {
+ eval(dconfig_meta_$${metaitem}.files = $$eval($${metaitem}.files))
+ eval(dconfig_meta_$${metaitem}.base = $$eval($${metaitem}.base))
+ isEmpty($${metaitem}.appid) {
+ is_common_configuration=true
+ isEmpty($${metaitem}.commonid) {
+ equals(TEMPLATE, app) {
+ eval(dconfig_meta_$${metaitem}.path = $$DSG_DATA_DIR/configs/$$TARGET/)
+ is_common_configuration=false
+ }
+ }
+ if ($$is_common_configuration) {
+ eval(dconfig_meta_$${metaitem}.path = $$DSG_DATA_DIR/configs)
+ }
+ } else {
+ eval(dconfig_meta_$${metaitem}.path = $$DSG_DATA_DIR/configs/$$eval($${metaitem}.appid))
+ }
+ INSTALLS += dconfig_meta_$${metaitem}
+}
+
+
+# deploy some `meta` 's override configure.
+#
+# configuration for the `meta_name` 's override configure.
+#
+# files - deployed files.
+# base - used to get subpath, if it's empty, only copy files, and ignore it's subpath structure.
+# appid - working for the app, if it's empty, working for all app.
+# meta_name - override for the meta configure.
+#
+# e.g :
+# dconfig_example.files += \
+# $$PWD/configs/dconf-example.override.json \
+# $$PWD/configs/a/dconf-example.override.a.json
+# dconfig_example.base = $$PWD/configs
+# dconfig_example.meta_name = example
+# dconfig_example.appid = $$TARGET
+#
+# dconfig_example2.files += $$PWD/configs/a/dconf-example.override.a.json
+# dconfig_example2.meta_name = example2
+#
+# DCONFIG_OVERRIDE_FILES += dconfig_example dconfig_example2
+#
+for(overrideitem, DCONFIG_OVERRIDE_FILES) {
+ eval(dconfig_override_$${overrideitem}.files = $$eval($${overrideitem}.files))
+ eval(dconfig_override_$${overrideitem}.base = $$eval($${overrideitem}.base))
+ isEmpty($${overrideitem}.meta_name) : error("Please set meta_name for the override configuration." $${overrideitem})
+ isEmpty($${overrideitem}.appid) {
+ eval(dconfig_override_$${overrideitem}.path = $$DSG_DATA_DIR/configs/overrides/$$eval($${overrideitem}.meta_name))
+ } else {
+ eval(dconfig_override_$${overrideitem}.path = $$DSG_DATA_DIR/configs/overrides/$$eval($${overrideitem}.appid)/$$eval($${overrideitem}.meta_name))
+ }
+ INSTALLS += dconfig_override_$${overrideitem}
+}
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-libdir=@LIBRARY_INSTALL_DIR@
-includedir=@INCLUDE_INSTALL_DIR@
+libdir=${prefix}/@LIBRARY_INSTALL_DIR@
+includedir=${prefix}/@INCLUDE_INSTALL_DIR@
-Name: dtkcore
+Name: dtk@DTK_VERSION_MAJOR@core
Description: Deepin Tool Kit dtkcore header files
Version: @CMAKE_PROJECT_VERSION@
-Libs: -L${libdir} -ldtkcore
-Cflags: -I${includedir}
+Libs: -L${libdir} -ldtk@DTK_VERSION_MAJOR@core
+Cflags: -I${includedir} -DQT_MESSAGELOGCONTEXT
+Requires: dtk@DTK_VERSION_MAJOR@log
QT.dtkcore.MINOR_VERSION = @PROJECT_VERSION_MINOR@
QT.dtkcore.PATCH_VERSION = @PROJECT_VERSION_PATCH@
QT.dtkcore.name = dtkcore
-QT.dtkcore.module = dtkcore
-QT.dtkcore.tools = @TOOL_INSTALL_DIR@
-QT.dtkcore.libs = @LIBRARY_INSTALL_DIR@
-QT.dtkcore.includes = @INCLUDE_INSTALL_DIR@
+QT.dtkcore.module = dtk@DTK_VERSION_MAJOR@core
+QT.dtkcore.tools = @CMAKE_INSTALL_PREFIX@/@TOOL_INSTALL_DIR@
+QT.dtkcore.libs = @CMAKE_INSTALL_PREFIX@/@LIBRARY_INSTALL_DIR@
+QT.dtkcore.includes = @CMAKE_INSTALL_PREFIX@/@INCLUDE_INSTALL_DIR@
QT.dtkcore.frameworks =
-QT.dtkcore.depends = core dbus xml
+QT.dtkcore.depends = core dbus xml dtklog
QT.dtkcore.module_config = v2 ltcg
-QT.dtkcore.DEFINES =
+QT.dtkcore.DEFINES += QT_MESSAGELOGCONTEXT
QT_MODULES +=
BuildRequires: pkgconfig(Qt5Core)
BuildRequires: pkgconfig(gsettings-qt)
BuildRequires: gtest-devel
+BuildRequires: uchardet-devel
+BuildRequires: libicu-devel
# since f30
Obsoletes: deepin-tool-kit <= 0.3.3
#cmake_minimum_required(VERSION 3.5)
-set(LIBNAME dtkcore)
-
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
-set (DSG_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}" CACHE STRING "PREFIX of DSG_DATA_DIRS")
-add_definitions(-DPREFIX="${DSG_PREFIX_PATH}")
-add_definitions(-DLIBDTKCORE_LIBRARY)
-find_package(Qt5 REQUIRED COMPONENTS Core)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
+find_package(Dtk${DTK_VERSION_MAJOR}Log REQUIRED)
if(LINUX)
-find_package(PkgConfig REQUIRED)
-pkg_check_modules(QGSettings REQUIRED gsettings-qt)
-find_package(Qt5 REQUIRED COMPONENTS DBus)
+ find_package(PkgConfig REQUIRED)
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS DBus)
+ if("${QT_VERSION_MAJOR}" STREQUAL "5")
+ pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt) #Dtk6 removed.
+ endif()
+
endif()
-find_package(Qt5 REQUIRED COMPONENTS Xml)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Xml)
+find_package(DtkBuildHelper REQUIRED)
-# start base
+# start text encoding
+find_package(ICU REQUIRED COMPONENTS uc)
+pkg_check_modules(uchardet REQUIRED uchardet)
+# end text encoding
+
+# start base
include(base/base.cmake)
# end base
-if(LINUX)
- include(dbus/dbus.cmake)
-endif()
-#message(${dbus_SRCS})
-# end dbus
# start dci
include(dci/dci.cmake)
#start filesystem
include(filesystem/filesystem.cmake)
#end filesystem
-# start log
+# start log
include(log/log.cmake)
#end log
-# start settings
+# start settings
include(settings/settings.cmake)
#end settings
-#start utils
+#start utils
include(util/util.cmake)
#end utils
include(glob.cmake)
#endGLOG
if(LINUX)
- add_library(${LIBNAME} SHARED
- ${dbus_SRCS}
+ add_library(${LIB_NAME} SHARED
${base_SRCS}
${dci_SRCS}
${filesystem_SRCS}
${glob_SRC}
)
target_link_libraries(
- ${LIBNAME} PRIVATE
- Qt5::Core
- Qt5::DBus
- Qt5::Xml
- ${QGSettings_LIBRARIES}
+ ${LIB_NAME} PUBLIC
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::DBus
+ Qt${QT_VERSION_MAJOR}::Xml
+ Dtk${DTK_VERSION_MAJOR}::Log
+ )
+ target_link_libraries(${LIB_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::CorePrivate
)
+ if("${QT_VERSION_MAJOR}" STREQUAL "5")
+ target_link_libraries(${LIB_NAME} PRIVATE
+ PkgConfig::QGSettings
+ )
+ endif()
+
else()
- add_library(${LIBNAME} SHARED
+ add_library(${LIB_NAME} SHARED
${base_SRCS}
${dci_SRCS}
${filesystem_SRCS}
${glob_SRC}
)
target_link_libraries(
- ${LIBNAME} PRIVATE
- Qt5::Core
- Qt5::Xml
+ ${LIB_NAME} PUBLIC
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::Xml
)
+ target_link_libraries(${LIB_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::CorePrivate
+ )
+ if("${QT_VERSION_MAJOR}" STREQUAL "5")
+ target_link_libraries(${LIB_NAME} PRIVATE
+ PkgConfig::QGSettings
+ )
+ endif()
endif()
-set_target_properties(${LIBNAME} PROPERTIES
+set_target_properties(${LIB_NAME} PROPERTIES
VERSION ${CMAKE_PROJECT_VERSION}
SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR}
+ EXPORT_NAME Core
+)
+
+target_compile_definitions(${LIB_NAME} PUBLIC
+ PREFIX="${DSG_PREFIX_PATH}"
+ DSYSINFO_PREFIX="${DSYSINFO_PREFIX}"
+)
+
+target_compile_definitions(${LIB_NAME} PRIVATE
+ LIBDTKCORE_LIBRARY
+)
+
+target_include_directories(${LIB_NAME} PRIVATE
+ ${uchardet_INCLUDE_DIRS}
)
-target_include_directories( ${LIBNAME} PUBLIC
- ${QGSettings_INCLUDE_DIRS}
- ${Qt5Core_PRIVATE_INCLUDE_DIRS}
- ../include/util/
- ../include/dci/
- ../include/log/
- ../include/base/
- ../include/base/private
- ../include/global/
- ../include/DtkCore/
- ../include/settings/
- ../include/filesystem/
- ../include/
+target_include_directories(${LIB_NAME} PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/util>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/dci>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/log>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/base>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/base/private>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/global>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/DtkCore>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/settings>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/filesystem>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
)
+
+target_include_directories(${LIB_NAME} INTERFACE
+ $<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
+)
+
+target_link_directories(${LIB_NAME} INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ $<INSTALL_INTERFACE:${LIBRARY_INSTALL_DIR}>
+)
+
+set(EnableCov CACHE BOOL OFF)
+if (EnableCov)
+ dtk_setup_code_coverage(${LIB_NAME})
+endif()
+
+dtk_check_and_add_definitions(${LIB_NAME}
+ DEFS
+ OS_VERSION_TEST_FILE
+ LSB_RELEASE_TEST_FILE
+ OS_RELEASE_TEST_FILE
+ DEEPIN_VERSION_TEST_FILE
+)
+
set(TOINSTALLBASE
../include/base/dobject.h
../include/base/dsingleton.h
../include/base/dexpected.h
)
install(FILES ${TOINSTALLBASE} DESTINATION "${INCLUDE_INSTALL_DIR}")
+install(FILES ${LOG_HEADER} DESTINATION "${INCLUDE_INSTALL_DIR}")
+install(FILES ${SETTINGS_HEADERS} DESTINATION "${INCLUDE_INSTALL_DIR}")
+install(FILES ${UTILS_HEADERS} DESTINATION "${INCLUDE_INSTALL_DIR}")
+
install(DIRECTORY ../include/dci/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*.h")
install(DIRECTORY ../include/DtkCore/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*")
install(DIRECTORY ../include/filesystem/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*.h")
install(DIRECTORY ../include/global/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*.h")
-file(GLOB TOINSTALLLOG
- ../include/log/*.h
-)
-install(FILES ${TOINSTALLLOG} DESTINATION "${INCLUDE_INSTALL_DIR}")
-file(GLOB TOINSTALLSETTINGS
- ../include/settings/*.h
- ../include/settings/backend/*.h
+
+install(TARGETS ${LIB_NAME} EXPORT ${DtkCore}Targets
+ DESTINATION ${LIBRARY_INSTALL_DIR})
+
+install(EXPORT ${DtkCore}Targets
+ FILE ${DtkCore}Targets.cmake
+ NAMESPACE Dtk${DTK_VERSION_MAJOR}::
+ DESTINATION ${CONFIG_CMAKE_INSTALL_DIR}
)
-install(FILES ${TOINSTALLSETTINGS} DESTINATION "${INCLUDE_INSTALL_DIR}")
-install(DIRECTORY ../include/util/ DESTINATION "${INCLUDE_INSTALL_DIR}" FILES_MATCHING PATTERN "*.h")
-install(TARGETS ${LIBNAME} DESTINATION ${LIBRARY_INSTALL_DIR})
set(dbus_SRCS)
set_source_files_properties(
- ${CMAKE_CURRENT_LIST_DIR}/org.desktopspec.ConfigManager.xml
- PROPERTIES
- NO_NAMESPACE ON
- CLASSNAME DSGConfig
-)
-qt5_add_dbus_interface(dbus_SRCS
${CMAKE_CURRENT_LIST_DIR}/org.desktopspec.ConfigManager.xml
- configmanager_interface
+ PROPERTIES
+ NO_NAMESPACE ON
+ CLASSNAME DSGConfig
)
+
+if("${QT_VERSION_MAJOR}" STREQUAL "6")
+ qt_add_dbus_interface(dbus_SRCS
+ ${CMAKE_CURRENT_LIST_DIR}/org.desktopspec.ConfigManager.xml
+ configmanager_interface
+ )
+else()
+ qt5_add_dbus_interface(dbus_SRCS
+ ${CMAKE_CURRENT_LIST_DIR}/org.desktopspec.ConfigManager.xml
+ configmanager_interface
+ )
+endif()
+
set_source_files_properties(
${CMAKE_CURRENT_LIST_DIR}/org.desktopspec.ConfigManager.Manager.xml
PROPERTIES
NO_NAMESPACE ON
CLASSNAME DSGConfigManager
)
-qt5_add_dbus_interface(dbus_SRCS
+
+if("${QT_VERSION_MAJOR}" STREQUAL "6")
+ qt_add_dbus_interface(dbus_SRCS
+ ${CMAKE_CURRENT_LIST_DIR}/org.desktopspec.ConfigManager.Manager.xml
+ manager_interface
+ )
+else()
+ qt5_add_dbus_interface(dbus_SRCS
${CMAKE_CURRENT_LIST_DIR}/org.desktopspec.ConfigManager.Manager.xml
manager_interface
-)
+ )
+endif()
<arg type='s' name='key' direction='in'/>
<arg type='v' name='value' direction='out'/>
</method>
+ <method name='isDefaultValue'>
+ <arg type='s' name='key' direction='in'/>
+ <arg type='b' name='isDefaultValue' direction='out'/>
+ </method>
<method name='setValue'>
<arg type='s' name='key' direction='in'/>
<arg type='v' name='value' direction='in'/>
QString linkPath() const {
const QString &path = QString::fromUtf8(data);
- if (path.startsWith('/'))
+ QStringView pathView{path};
+ if (pathView.startsWith('/'))
return path;
// 转为绝对路径
auto pNode = parent;
int pathStart = 0;
- while (pathStart < path.size()) {
- if (path.midRef(pathStart, 3) == QLatin1String("../")) {
+ while (pathStart < pathView.size()) {
+ if (pathView.mid(pathStart, 3) == QLatin1String("../")) {
pathStart += 3;
pNode = pNode->parent;
if (!pNode)
return QString();
- } else if (path.midRef(pathStart, 2) == QLatin1String("./")) {
+ } else if (pathView.mid(pathStart, 2) == QLatin1String("./")) {
pathStart += 2;
} else {
break;
}
}
Q_ASSERT(pNode);
- return pNode->path() + QLatin1Char('/') + path.midRef(pathStart);
+ return pNode->path() + QLatin1Char('/') + path.mid(pathStart);
}
};
bool DDciFile::isValid() const
{
D_DC(DDciFile);
- return d->root;
+ return !!(d->root);
}
QString DDciFile::lastErrorString() const
// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
+#include <QtGlobal>
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+#include <filesystem> //Avoid changing the access control of the standard library
+#endif
#define private public
#define protected public
#define DCI_FILE_SCHEME "dci:"
#define DCI_FILE_SUFFIX ".dci"
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+std::unique_ptr<QAbstractFileEngine> DDciFileEngineHandler::create(const QString &fileName) const
+#else
QAbstractFileEngine *DDciFileEngineHandler::create(const QString &fileName) const
+#endif
{
if (!fileName.startsWith(QStringLiteral(DCI_FILE_SCHEME)))
return nullptr;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ std::unique_ptr<DDciFileEngine> engine(new DDciFileEngine(fileName));
+#else
DDciFileEngine *engine = new DDciFileEngine(fileName);
+#endif
+
if (!engine->isValid()) {
+#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
delete engine;
+#endif
return nullptr;
}
}
DDciFileEngineIterator::DDciFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters)
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ : QAbstractFileEngineIterator(nullptr, filters, nameFilters)
+#else
: QAbstractFileEngineIterator(filters, nameFilters)
+#endif
{
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
+DDciFileEngineIterator::DDciFileEngineIterator(QDirListing::IteratorFlags filters, const QStringList &nameFilters)
+ : QAbstractFileEngineIterator(nullptr, filters, nameFilters)
+{
+
+}
+#endif
+
+#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
QString DDciFileEngineIterator::next()
{
current = nextValid;
}
bool DDciFileEngineIterator::hasNext() const
+#else
+bool DDciFileEngineIterator::advance()
+#endif
{
if (!file) {
const auto paths = DDciFileEngine::resolvePath(path());
continue;
nextValid = i;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ current = nextValid;
+#endif
return true;
}
return file && file->isValid();
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+bool DDciFileEngine::open(QIODevice::OpenMode openMode, std::optional<QFile::Permissions> permissions)
+#else
bool DDciFileEngine::open(QIODevice::OpenMode openMode)
+#endif
{
if (fileBuffer) {
setError(QFile::OpenError, "The file is opened");
// 此时当文件不存在时应当创建它
if (openMode & QIODevice::WriteOnly) {
realDciFile.setFileName(dciFilePath);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ auto success = permissions ? realDciFile.open(openMode, permissions.value()) : realDciFile.open(openMode);
+ if (!success)
+ return false;
+#else
if (!realDciFile.open(openMode)) {
return false;
}
+#endif
// 不存在时尝试新建
if (!file->exists(subfilePath)
return file->link(subfilePath, linkPath) && forceSave();
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+bool DDciFileEngine::mkdir(const QString &dirName,
+ bool createParentDirectories,
+ std::optional<QFile::Permissions> permissions) const
+{
+ Q_UNUSED(permissions)
+#else
bool DDciFileEngine::mkdir(const QString &dirName, bool createParentDirectories) const
{
+#endif
if (!file->isValid())
return false;
// 解析出新的 dci 内部文件路径
return QDir::cleanPath(DCI_FILE_SCHEME + dciFilePath);
case BaseName:
return QFileInfo(subfilePath).baseName();
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ case AbsoluteLinkTarget:
+#else
case LinkName:
+#endif
return this->file->type(subfilePath) == DDciFile::Symlink
? this->file->symlinkTarget(subfilePath)
: QString();
file = getDciFile(dciFilePath, QFile::exists(dciFilePath));
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 1)
+QDateTime DDciFileEngine::fileTime(QFile::FileTime time) const
+{
+ return QFileInfo(dciFilePath).fileTime(time);
+}
+#else
QDateTime DDciFileEngine::fileTime(QAbstractFileEngine::FileTime time) const
{
return QFileInfo(dciFilePath).fileTime(static_cast<QFile::FileTime>(time));
}
-
+#endif
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
+QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames)
+#elif QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames)
+#else
DDciFileEngine::Iterator *DDciFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
+#endif
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ Q_UNUSED(path);
+ return QAbstractFileEngine::IteratorUniquePtr(new DDciFileEngineIterator(filters, filterNames));
+#else
return new DDciFileEngineIterator(filters, filterNames);
+#endif
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+QAbstractFileEngine::IteratorUniquePtr DDciFileEngine::endEntryList()
+#else
DDciFileEngine::Iterator *DDciFileEngine::endEntryList()
+#endif
{
return nullptr;
}
class DDciFileEngineHandler : public QAbstractFileEngineHandler
{
public:
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override;
+#else
QAbstractFileEngine *create(const QString &fileName) const override;
+#endif
};
class DDciFile;
public:
DDciFileEngineIterator(QDir::Filters filters, const QStringList &nameFilters);
+#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
QString next() override;
bool hasNext() const override;
+#else
+ DDciFileEngineIterator(QDirListing::IteratorFlags filters, const QStringList &nameFilters);
+ bool advance() override;
+#endif
QString currentFileName() const override;
~DDciFileEngine();
bool isValid() const;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ bool open(QIODevice::OpenMode openMode, std::optional<QFile::Permissions> permissions = std::nullopt) override;
+#else
bool open(QIODevice::OpenMode openMode) override;
+#endif
bool close() override;
bool flushToFile(QFile *target, bool writeFile) const;
bool flush() override;
bool rename(const QString &newName) override;
bool renameOverwrite(const QString &newName) override;
bool link(const QString &newName) override;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ bool mkdir(const QString &dirName,
+ bool createParentDirectories,
+ std::optional<QFile::Permissions> permissions = std::nullopt) const override;
+#else
bool mkdir(const QString &dirName, bool createParentDirectories) const override;
+#endif
bool rmdir(const QString &dirName, bool recurseParentDirectories) const override;
bool setSize(qint64 size) override;
bool caseSensitive() const override;
void setFileName(const QString &fullPath) override;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 1)
+ QDateTime fileTime(QFile::FileTime time) const override;
+#else
QDateTime fileTime(FileTime time) const override;
+#endif
typedef DDciFileEngineIterator Iterator;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
+ IteratorUniquePtr beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames) override;
+ IteratorUniquePtr endEntryList() override;
+#elif QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override;
+ IteratorUniquePtr endEntryList() override;
+#else
Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
Iterator *endEntryList() override;
+#endif
qint64 read(char *data, qint64 maxlen) override;
qint64 write(const char *data, qint64 len) override;
DCORE_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(cfLog)
+static QString NoAppId;
/*!
- \class Dtk::Core::DConfigBackend
+@~english
+ @class Dtk::Core::DConfigBackend
\inmodule dtkcore
- \brief 配置后端的抽象接口.
+ @brief Configure the abstract interface of the backend.
- 所有DConfig使用的配置后端都继承此类,用户可以继承此类实现自己的配置后端.
+ All configuration backends used by DConfig inherit this class, and users can inherit this class to implement their own configuration backends.
*/
/*!
- \fn bool DConfigBackend::load(const QString &) = 0
+@~english
+ @fn bool DConfigBackend::load(const QString &) = 0
- \brief 初始化后端
+ @brief Initialize the backend
- \a appId 管理的配置信息key值,默认为应用程序名称
+ \a appId Managed configuration information key value, the default is the application name.
*/
/*!
- \fn bool DConfigBackend::isValid() const = 0
+@~english
+ @fn bool DConfigBackend::isValid() const = 0
- \sa DConfig::isValid().
+ @sa DConfig::isValid().
*/
/*!
- \fn QStringList DConfigBackend::keyList() const = 0
+@~english
+ @fn QStringList DConfigBackend::keyList() const = 0
- \sa DConfig::keyList()
+ @sa DConfig::keyList()
*/
/*!
- \fn QVariant DConfigBackend::value(const QString &key, const QVariant &fallback = QVariant()) const = 0
+@~english
+ @fn QVariant DConfigBackend::value(const QString &key, const QVariant &fallback = QVariant()) const = 0
- \sa DConfig::value()
+ @sa DConfig::value()
*/
/*!
- \fn void DConfigBackend::setValue(const QString &key, const QVariant &value) = 0
+@~english
+ @fn void DConfigBackend::setValue(const QString &key, const QVariant &value) = 0
- \sa DConfig::setValue()
+ @sa DConfig::setValue()
*/
/*!
- \fn void DConfigBackend::reset(const QString &key)
+@~english
+ @fn void DConfigBackend::reset(const QString &key)
- \sa DConfig::reset()
+ @sa DConfig::reset()
*/
/*!
- \fn QString DConfigBackend::name() const = 0
+@~english
+ @fn QString DConfigBackend::name() const = 0
- \brief 后端配置的唯一标识
+ @brief The unique identity of the backend configuration
+
+/*!
+@~english
+ @fn bool DConfigBackend::isDefaultValue(const QString &key) const = 0
+
+ @sa DConfig::isDefaultValue()
*/
{
}
+static QString _globalAppId;
class Q_DECL_HIDDEN DConfigPrivate : public DObjectPrivate
{
public:
const QString &name,
const QString &subpath)
: DObjectPrivate(qq)
- , appId(appId.isEmpty() ? DSGApplication::id() : appId)
+ , appId(appId)
, name(name)
, subpath(subpath)
{
configCache.reset(configFile->createUserCache(getuid()));
const QString &prefix = localPrefix();
- return configFile->load(prefix) &&
- configCache->load(prefix);
+ if (!configFile->load(prefix) || !configCache->load(prefix))
+ return false;
+
+ // generic config doesn't need to fallback to generic configration.
+ if (owner->appId == NoAppId)
+ return true;
+
+ QScopedPointer<DConfigFile> file(new DConfigFile(NoAppId, owner->name, owner->subpath));
+ const bool canFallbackToGeneric = !file->meta()->metaPath(prefix).isEmpty();
+ if (canFallbackToGeneric) {
+ QScopedPointer<DConfigCache> cache(file->createUserCache(getuid()));
+ if (file->load(prefix) && cache->load(prefix)) {
+ genericConfigFile.reset(file.take());
+ genericConfigCache.reset(cache.take());
+ }
+ }
+ return true;
}
virtual QStringList keyList() const override
virtual QVariant value(const QString &key, const QVariant &fallback) const override
{
- const QVariant &v = configFile->value(key, configCache.get());
- return v.isValid() ? v : fallback;
+ const QVariant &vc = configFile->cacheValue(configCache.get(), key);
+ if (vc.isValid())
+ return vc;
+
+ // fallback to generic configuration, and use itself's configuration if generic isn't set.
+ if (genericConfigFile) {
+ const auto &tmp = genericConfigFile->cacheValue(genericConfigCache.get(), key);
+ if (tmp.isValid())
+ return tmp;
+ }
+ const QVariant &v = configFile->value(key);
+ if (v.isValid())
+ return v;
+ // fallback to default value of generic configuration.
+ const QVariant &vg = genericConfigFile->value(key);
+ return vg.isValid() ? vg : fallback;
+ }
+
+ virtual bool isDefaultValue(const QString &key) const override
+ {
+ // Don't fallback to generic configuration
+ const QVariant &vc = configFile->cacheValue(configCache.get(), key);
+ return !vc.isValid();
}
virtual void setValue(const QString &key, const QVariant &value) override
virtual void reset(const QString &key) override
{
- const auto &originValue = configFile->meta()->value(key);
- setValue(key, originValue);
+ setValue(key, QVariant());
}
virtual QString name() const override
private:
QScopedPointer<DConfigFile> configFile;
QScopedPointer<DConfigCache> configCache;
+ QScopedPointer<DConfigFile> genericConfigFile;
+ QScopedPointer<DConfigCache> genericConfigCache;
DConfigPrivate* owner;
const QByteArray envLocalPrefix = qgetenv("DSG_DCONFIG_FILE_BACKEND_LOCAL_PREFIX");
};
configFile->save(prefix);
configFile.reset();
}
+ if (genericConfigCache) {
+ genericConfigCache->save(prefix);
+ genericConfigCache.reset();
+ }
+ if (genericConfigFile) {
+ genericConfigFile->save(prefix);
+ genericConfigFile.reset();
+ }
}
#ifndef D_DISABLE_DBUS_CONFIG
}
/*!
+ @~english
\internal
- 初始化DBus连接,会先调用acquireManager动态获取一个配置连接,
- 再通过这个配置连接进行配置文件的访问.
+ Initialize the DBus connection, the call acquireManager dynamically obtains a configuration connection,
+ The configuration file is then accessed through this configuration connection.
*/
virtual bool load(const QString &/*appId*/) override
{
return decodeQDBusArgument(reply.value().variant());
}
+ virtual bool isDefaultValue(const QString &key) const override
+ {
+ auto reply = config->isDefaultValue(key);
+ reply.waitForFinished();
+ if (reply.isError()) {
+ qWarning() << "Failed to call `isDefaultValue`, key:" << key
+ << ", error message:" << reply.error().message();
+ return false;
+ }
+ return reply.value();
+ }
+
virtual void setValue(const QString &key, const QVariant &value) override
{
- config->setValue(key, QDBusVariant(value));
+ auto reply = config->setValue(key, QDBusVariant(value));
+ reply.waitForFinished();
+ if (reply.isError())
+ qCWarning(cfLog) << "Failed to setValue for the key:" << key
+ << ", error message:" << reply.error();
}
virtual void reset(const QString &key) override
{
- config->reset(key);
+ auto reply = config->reset(key);
+ reply.waitForFinished();
+ if (reply.isError())
+ qCWarning(cfLog) << "Failed to reset for the key:" << key
+ << ", error message:" << reply.error();
}
virtual QString name() const override
}
/*!
+@~english
\internal
- \brief 创建一个配置后端
+ @brief Create a configuration backend
- 默认使用的配置后端会优先根据环境变量来选择配置中心的D-Bus接口还是文件配置后端接口。
- 若没有配置此环境变量,则根据是否有配置中心提供D-Bus服务来选择配置中心服务还是文件配置后端接口.
+ The default configuration backend preferentially selects the D-Bus interface in the configuration center or the file configuration backend interface based on environment variables.
+ If this environment variable is not configured, the configuration center service or file configuration backend interface will be selected according to whether the configuration center provides D-Bus services
*/
DConfigBackend *DConfigPrivate::getOrCreateBackend()
{
}
/*!
+@~english
\internal
- \brief 创建一个配置后端
+ @brief Create a configuration backend
- 尝试根据环境变量来选择配置中心的D-Bus接口还是文件配置后端接口。
+ Try to choose between configuring the D-Bus interface in the center or the file configuration backend interface based on the environment variables.
*/
DConfigBackend *DConfigPrivate::createBackendByEnv()
{
}
/*!
- \class Dtk::Core::DConfig
+@~english
+ @class Dtk::Core::DConfig
\inmodule dtkcore
- \brief 配置策略提供的接口类
+ @brief Configure the interface class provided by the policy
- 此接口规范定义了开发库所提供的关于配置文件读写的相关接口,
- 如果应用程序所使用的开发库实现了此规范,则程序应当优先使用开发库提供的接口。
+
+ This interface specification defines the relevant interfaces provided by the development library for reading and writing configuration files,
+ If the application uses a development library that implements this specification, the application should use the interfaces provided by the development library first.
*/
/*!
- * \brief 构造配置策略提供的对象
- * \a name 配置文件名
- * \a subpath 配置文件对应的子目录
- * \a parent 父对象
+@~english
+ * @brief Constructs the objects provided by the configuration policy
+ * \a name Configuration File Name
+ * \a subpath Subdirectory corresponding to the configuration file
+ * \a parent Parent object
*/
DConfig::DConfig(const QString &name, const QString &subpath, QObject *parent)
: DConfig(nullptr, name, subpath, parent)
}
DConfig::DConfig(DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent)
- : DConfig(backend, QString(), name, subpath, parent)
+ : DConfig(backend, _globalAppId.isEmpty() ? DSGApplication::id() : _globalAppId, name, subpath, parent)
{
}
+
/*!
- * \brief 构造配置策略提供的对象, 指定配置所属的应用Id
+@~english
+ * @brief Constructs the object provided by the configuration policy, specifying the application Id to which the configuration belongs.
* \a appId
* \a name
* \a subpath
* \a parent
- * \return 构造的配置策略对象,由调用者释放
+ * @return The constructed configuration policy object, which is released by the caller
+ * @note \a appId is not empty.
*/
DConfig *DConfig::create(const QString &appId, const QString &name, const QString &subpath, QObject *parent)
{
+ Q_ASSERT(appId != NoAppId);
return new DConfig(nullptr, appId, name, subpath, parent);
}
DConfig *DConfig::create(DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent)
{
+ Q_ASSERT(appId != NoAppId);
return new DConfig(backend, appId, name, subpath, parent);
}
/*!
- * \brief 使用自定义的配置策略后端构造对象
- * \a backend 调用者继承于DConfigBackend的配置策略后端
- * \a appId 配置文件所属的应用Id,为空时默认为本应用Id
- * \a name 配置文件名
- * \a subpath 配置文件对应的子目录
- * \a parent 父对象
- * \note 调用者只构造backend,由DConfig释放。
+ * \brief Constructs the object, and which is application.
+ * \param name
+ * \param subpath
+ * \param parent
+ * \return Dconfig object, which is released by the caller
+ * @note It's usually used for application independent, we should use DConfig::create if the configuration is a specific application.
+ */
+DConfig *DConfig::createGeneric(const QString &name, const QString &subpath, QObject *parent)
+{
+ return new DConfig(nullptr, NoAppId, name, subpath, parent);
+}
+
+DConfig *DConfig::createGeneric(DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent)
+{
+ return new DConfig(backend, NoAppId, name, subpath, parent);
+}
+
+/*!
+ * \brief Explicitly specify application Id for config.
+ * \param appId
+ * @note It's should be called before QCoreApplication constructed.
+ */
+void DConfig::setAppId(const QString &appId)
+{
+ if (!_globalAppId.isEmpty()) {
+ qCWarning(cfLog, "`setAppId`should only be called once.");
+ }
+ _globalAppId = appId;
+ qCDebug(cfLog, "Explicitly specify application Id as appId=%s for config.", qPrintable(appId));
+}
+
+/*!
+@~english
+ * @brief Use custom configuration policy backend to construct objects
+ * \a backend The caller inherits the configuration policy backend of DConfigBackend
+ * \a appId The application Id of the configuration file. If it is blank, it will be the application Id by default
+ * \a name Configuration File Name
+ * \a subpath Subdirectory corresponding to the configuration file
+ * \a parent Parent object
+ * @note The caller only constructs backend, which is released by DConfig.
*/
DConfig::DConfig(DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent)
: QObject(parent)
{
D_D(DConfig);
- Q_ASSERT(!d->appId.isEmpty());
-
qCDebug(cfLog, "Load config of appid=%s name=%s, subpath=%s",
qPrintable(d->appId), qPrintable(d->name), qPrintable(d->subpath));
}
/*!
- * \brief DConfig::backendName
- * \return 配置策略后端名称
- * \note 调用者只能用DConfig访问DConfigBackend对象,所以不返回DConfigBackend对象。
+@~english
+ * @brief DConfig::backendName
+ * @return Configure policy backend name
+ * @note The caller can only access the DConfigBackend object with DConfig, so the DConfigBackend object is not returned.
*/
QString DConfig::backendName() const
{
}
/*!
- * \brief 获得所有可用的配置项名称
- * \return 配置项名称集合
+@~english
+ * @brief Get all available configuration item names
+ * @return Configuration item name collection
*/
QStringList DConfig::keyList() const
{
}
/*!
- * \brief 判断此后端是否可用
- * \return
+@~english
+ * @brief Check whether the backend is available
+ * @return
*/
bool DConfig::isValid() const
{
}
/*!
- * \brief 根据配置项名称获得对应值
- * \param key 配置项名称
- * \param fallback 没有获取到配置项值后提供的默认值
- * \return
+@~english
+ * @brief Check whether the value is default according to the configuration item name
+ * @param key Configuration Item Name
+ * @return Return `true` if the value isn't been set, otherwise return `false`
+ */
+bool DConfig::isDefaultValue(const QString &key) const
+{
+ D_DC(DConfig);
+ if (d->invalid())
+ return false;
+ return d->backend->isDefaultValue(key);
+}
+
+/*!
+@~english
+ * @brief Get the corresponding value according to the configuration item name
+ * @param key Configuration Item Name
+ * @param fallback The default value provided after the configuration item value is not obtained
+ * @return
*/
QVariant DConfig::value(const QString &key, const QVariant &fallback) const
{
}
/*!
- * \brief 根据配置项名称设置其值
- * \param 配置项名称
- * \param 需要更新的值
+@~english
+ * @brief Set the value according to the configuration item name
+ * @param key Configuration Item Name
+ * @param value Values that need to be updated
*/
void DConfig::setValue(const QString &key, const QVariant &value)
{
}
/*!
- * \brief 设置其配置项对应的默认值,此值为经过override机制覆盖后的值,不一定为此配置文件中meta中定义的值
- * \param 配置项名称
+@~english
+ * @brief Set the default value corresponding to its configuration item. This value is overridden by the override mechanism. It is not necessarily the value defined in the meta in this configuration file
+ * @param key Configuration Item Name
*/
void DConfig::reset(const QString &key)
{
}
/*!
- * \brief 返回配置文件名称
- * \return
+@~english
+ * @brief Return configuration file name
+ * @return
*/
QString DConfig::name() const
{
}
/*!
- * \brief 返回配置文件对应的子目录
- * \return
+@~english
+ * @brief Return the subdirectory corresponding to the configuration file
+ * @return
*/
QString DConfig::subpath() const
{
-// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#define FILE_SUFFIX QLatin1String(".json")
+// subpath must be a subdirectory of the dir.
+inline static bool subpathIsValid(const QString &subpath, const QDir &dir)
+{
+ if (subpath.isEmpty())
+ return true;
+
+ const QDir subDir(dir.filePath(subpath.mid(1)));
+ return subDir.absolutePath().startsWith(dir.absolutePath());
+}
+// name must be a valid filename.
+inline static bool isValidFilename(const QString& filename)
+{
+ static const QRegularExpression regex("^[\\w\\-\\.\\ ]+$");
+ QRegularExpressionMatch match = regex.match(filename);
+ return match.hasMatch();
+}
+// AppId don't contain ' ', but it can be empty.
+inline static bool isValidAppId(const QString& appId)
+{
+ static const QRegularExpression regex("^[\\w\\-\\.]*$");
+ QRegularExpressionMatch match = regex.match(appId);
+ return match.hasMatch();
+}
/*!
+@~english
\internal
- \brief 按子目录查找机制查找配置文件
+ @brief 按子目录查找机制查找配置文件
在 \a baseDir目录下,查找名称为 \a name的文件,
若存在 \a subpath,则从 \a subpath叶子目录逐级向上查找名称为 \a name的文件,
qPrintable(baseDir), qPrintable(subpath), qPrintable(name));
const QDir base_dir(baseDir);
+ if (!subpathIsValid(subpath, base_dir)) {
+ qCDebug(cfLog, "subpath is invalid in the base dir:\"%s\", subpath:\"%s\".", qPrintable(baseDir), qPrintable(subpath));
+ return QString();
+ }
QDir target_dir = base_dir;
if (!subpath.isEmpty())
}
/*!
- \class Dtk::Core::DConfigFile
+@~english
+ @class Dtk::Core::DConfigFile
\inmodule dtkcore
- \brief 规范配置文件读写的相关接口的配置文件实现.
+ @brief Specification configuration file implementation of the interface that the configuration file reads and writes.
*/
/*!
- \enum DConfigFile::Flag
-
- \value NoOverride 存在此标记时,将表明则此配置项不可被覆盖(详见下述 override 机制)。
- 反之,不存在此标记时表明此配置项允许被覆盖,对于此类配置项,
- 如若其有界面设置入口,则当此项不可写时,应当隐藏或禁用界面的设置入口.
- \value Global 当读写此类配置时,将忽略用户身份,无论程序使用哪个用户身份执行,读操作都将获取到同样的数据,
- 写操作将对所有用户都生效。但是,如果对应的配置存储目录不存在或无权限写入,则忽略此标志.
+@~english
+ @enum DConfigFile::Flag
+
+ \value NoOverride When this flag exists , it indicates that this configuration item can't be overwritten (see the override mechanism below for details).
+ Otherwise, the absence of this flag indicates that this configuration item is allowed to be overwritten,
+ If it has a screen setting entry, hide or disable the screen setting entry when this entry is not writable.
+ \value Global When reading or writing such a configuration, the user identity is ignored and the same data is obtained regardless of which user identity the program executes.
+ The write operation will take effect for all users. However, if the corresponding configuration storage directory does not exist or has no write permission, this flag is ignored.
*/
/*!
- \enum DConfigFile::Permissions
+@~english
+ @enum DConfigFile::Permissions
- \value ReadOnly 将配置项覆盖为只读,
- \value ReadWrite 将配置项覆盖为可读可写.
+ \value ReadOnly Overwrite the configuration item as readonly.
+ \value ReadWrite Overwrite the configuration item as readable and writable.
*/
/*!
- \enum DConfigFile::Visibility
-
- \value Private 仅限程序内部使用,
- 对外不可见。此类配置项完全由程序自己读写,可随意增删改写其含义,无需做兼容性考虑,
- \value Public 外部程序可使用。
- 此类配置项一旦发布,在兼容性版本的升级中,要保障此配置项向下兼容,
- 简而言之,只允许在程序/库的大版本升级时才允许删除或修改此类配置项,
- 当配置项的 permissions、visibility、flags 任意一个属性被修改则认为此配置项被修改,
- 除此之外修改 value、name、description 属性时则不需要考虑兼容性.
+@~english
+ @enum DConfigFile::Visibility
+
+ \value Private For internal program use only,
+ Not visible to the outside world. Such configuration items are completely read and written by the program itself, and can be added, deleted and rewritten at will without compatibility consideration,
+ \value Public External programs are available.
+ Once this type of configuration item is released, ensure that the configuration item is backward compatible during the upgrade of the compatible version.
+ In short, this type of configuration item is only allowed to be deleted or modified when a major version of the program/library is upgraded.
+ The configuration item is changed if any of its permissions, visibility, or flags properties are changed.
+ In addition, you do not need to consider compatibility when modifying the value, name, and description attributes.
*/
/*!
- \struct Dtk::Core::DConfigFile::Version
+@~english
+ @struct Dtk::Core::DConfigFile::Version
\inmodule dtkcore
- \brief 版本信息
-
- 此文件的内容格式的版本。版本号使用两位数字描述,
- 首位数字不同的描述文件相互之间不兼容,第二位数字不同的描述文件需满足向下兼容。
- 读取此描述文件的程序要根据版本进行内容分析,当遇到不兼容的版本时,需要立即终止解析,忽略此文件,
- 并在程序日志中写入警告信息,如 “1.0” 和 “2.0” 版本之间不兼容,
- 如果解析程序最高只支持 1.0 版本,则遇到 2.0 版本的描述文件时应该终止解析,
- 但是如果遇到 1.1 版本,则可以继续执行。
- 写入此描述文件时,遇到不兼容的版本时,需要先清空当前内容再写入,每次写入皆需更新此字段。
+ @brief Version Information
+
+ The content format version of this file. The version number is described by two digits,
+ Profiles with different first digits are incompatible with each other, and profiles with different second digits need to be compatible with each other.
+ A program that reads this profile needs to perform content analysis by version, and when it encounters an incompatible version, it needs to terminate parsing immediately and ignore the file.
+ And write a warning message to the program log, such as "1.0" and "2.0" versions are not compatible,
+ If the parser only supports version 1.0, it should stop parsing when it encounters a 2.0 profile.
+ But if version 1.1 is encountered, execution can continue.
+ When writing to this profile, if an incompatible version is encountered, the current contents need to be cleared before writing, and this field needs to be updated with each write
*/
DConfigMeta::~DConfigMeta() {}
+QStringList DConfigMeta::genericMetaDirs(const QString &localPrefix)
+{
+ QStringList paths;
+ // lower priority is higher.
+ for (auto item: DStandardPaths::paths(DStandardPaths::DSG::DataDir)) {
+ paths.prepend(QDir::cleanPath(QString("%1/%2/configs").arg(localPrefix, item)));
+ }
+ return paths;
+}
+
+QStringList DConfigMeta::applicationMetaDirs(const QString &localPrefix, const QString &appId)
+{
+ QStringList paths;
+ const auto &dataPaths = genericMetaDirs(localPrefix);
+ paths.reserve(dataPaths.size());
+ for (auto item : dataPaths) {
+ paths << QString("%1/%2").arg(item, appId);
+ }
+ return paths;
+}
+
Dtk::Core::DConfigCache::~DConfigCache() {}
struct DConfigKey {
flags |= DConfigFile::NoOverride;
} else if (flag == QLatin1String("global")) {
flags |= DConfigFile::Global;
+ } else if (flag == QLatin1String("user-public")) {
+ flags |= DConfigFile::UserPublic;
}
}
return values.keys();
}
+ inline bool contains(const QString &key) const
+ {
+ return values.contains(key);
+ }
+
inline void remove(const QString &key)
{
values.remove(key);
/*!
- \class Dtk::Core::DConfigMeta
+@~english
+ @class Dtk::Core::DConfigMeta
\inmodule dtkcore
- \brief 提供配置文件的原型和覆盖机制的访问接口.
+ @brief Provides a prototype of the configuration file and an access interface to the override mechanism.
*/
/*!
- \fn DConfigFile::Version DConfigMeta::version() const = 0;
+@~english
+ @fn DConfigFile::Version DConfigMeta::version() const = 0;
- \brief 返回配置版本信息.
- \return
+ @brief Returns configuration version information.
+ @return
*/
/*!
- \fn void DConfigMeta::setVersion(quint16 major, quint16 minor) = 0;
+@~english
+ @fn void DConfigMeta::setVersion(quint16 major, quint16 minor) = 0;
- \brief 设置配置版本信息
- \a major 主板本号
- \a minor 次版本号
+ @brief Sets configuration version information
+ \a major Major version number
+ \a minor Minor version number
*/
/*!
- \fn bool DConfigMeta::load(const QString &localPrefix = QString()) = 0;
+@~english
+ @fn bool DConfigMeta::load(const QString &localPrefix = QString()) = 0;
- \brief 解析配置文件
- \a localPrefix 为目录前缀
- \return
+ @brief Parsing configuration files
+ \a localPrefix Directory prefix
+ @return
*/
/*!
- \fn bool DConfigMeta::load(QIODevice *meta, const QList<QIODevice*> &overrides) = 0;
+@~english
+ @fn bool DConfigMeta::load(QIODevice *meta, const QList<QIODevice*> &overrides) = 0;
- \brief 解析配置文件流
- \a meta 为原型流
- \a overrides 为覆盖机制查找的文件流
- \return
+ @brief Parse the configuration file stream
+ \a meta Prototype stream
+ \a overrides The file stream to find for the override mechanism
+ @return
*/
/*!
- \fn QStringList DConfigMeta::keyList() const = 0;
+@~english
+ @fn QStringList DConfigMeta::keyList() const = 0;
- \brief 返回配置内容的所有配置项
- \return
+ @brief Returns all configuration items for the configuration content
+ @return
*/
/*!
- \fn DConfigFile::Flags DConfigMeta::flags(const QString &key) const = 0;
+@~english
+ @fn DConfigFile::Flags DConfigMeta::flags(const QString &key) const = 0;
- \brief 返回指定配置项的特性
- \a key 配置项名称, NoOverride为此配置项不可被覆盖, Global为忽略用户身份
- \return
+ @brief Returns the attribute of the specified configuration item
+ \a key Configure the name of the option, NoOverride This option can't be overridden, and Global ignores the user identity
+ @return
*/
/*!
- \fn DConfigFile::Permissions DConfigMeta::permissions(const QString &key) const = 0;
+@~english
+ @fn DConfigFile::Permissions DConfigMeta::permissions(const QString &key) const = 0;
- \brief 返回指定配置项的权限
- \a key 配置项名称
- \return
+ @brief Returns the permission for the specified configuration item
+ \a key Configuration name
+ @return
*/
/*!
- \fn DConfigFile::Visibility DConfigMeta::visibility(const QString &key) const = 0;
+@~english
+ @fn DConfigFile::Visibility DConfigMeta::visibility(const QString &key) const = 0;
- \brief 返回指定配置项的可见性
- \a key 配置项名称
- \return
+ @brief Returns the visibility of the specified configuration item
+ \a key Configuration name
+ @return
*/
/*!
- \fn int DConfigMeta::serial(const QString &key) const = 0;
+@~english
+ @fn int DConfigMeta::serial(const QString &key) const = 0;
+
+ @brief Returns a monotonically increasing value of a configuration item
+ \a key Configuration name
+ @return An invalid value of -1 indicates that the entry is not configured
- \brief 返回配置项的单调递增值
- \a key 配置项名称
- \return -1为无效值,表明没有配置此项
*/
/*!
- \fn QString DConfigMeta::displayName(const QString &key, const QLocale &locale) = 0;
+@~english
+ @fn QString DConfigMeta::displayName(const QString &key, const QLocale &locale) = 0;
- \brief 返回指定配置项的显示名
- \a key 配置项名称
- \a locale 为语言版本
- \return
+ @brief Returns the display name of the specified configuration
+ \a key Configuration name
+ \a locale Language version
+ @return
*/
/*!
- \fn QString DConfigMeta::description(const QString &key, const QLocale &locale) = 0;
+@~english
+ @fn QString DConfigMeta::description(const QString &key, const QLocale &locale) = 0;
- \brief 返回指定配置项的描述信息
- \a key 配置项名称
- \a locale 为语言版本
- \return
+ @brief Returns a description of the specified configuration item
+ \a key Configuration name
+ \a locale Language version
+ @return
*/
/*!
- \fn QString DConfigMeta::metaPath(const QString &localPrefix = QString(), bool *useAppId = nullptr) const = 0;
+@~english
+ @fn QString DConfigMeta::metaPath(const QString &localPrefix = QString(), bool *useAppId = nullptr) const = 0;
- \brief 返回描述文件的路径
- \a localPrefix 目录的所有需要查找的覆盖机制目录
- \return
+ @brief Returns the path to the profile
+ \a localPrefix Directory of all override mechanisms that need to be searched
+ @return
*/
/*!
- \fn QStringList DConfigMeta::allOverrideDirs(const bool useAppId, const QString &prefix = QString()) const = 0;
+@~english
+ @fn QStringList DConfigMeta::allOverrideDirs(const bool useAppId, const QString &prefix = QString()) const = 0;
- \brief 获得前缀为 \a prefix 目录的所有需要查找的覆盖机制目录
- \a userAppId 是否不使用通用目录
- \return
+ @brief Gets all the override mechanism directories to look for for the \a prefix directory
+ \a useAppId Whether not to use the generic directory
+ @return
*/
/*!
- \fn QVariant DConfigMeta::value(const QString &key) const = 0;
+@~english
+ @fn QVariant DConfigMeta::value(const QString &key) const = 0;
- \brief meta初始值经过覆盖机制覆盖后的原始值
- \a key 配置项名称
- \return
+ @brief Original value of meta overwritten by the overwriting mechanism
+ \a key Configuration name
+ @return
*/
class Q_DECL_HIDDEN DConfigMetaImpl : public DConfigMeta {
return values.value(key);
}
- inline QStringList applicationMetaDirs(const QString &prefix) const
- {
- QStringList paths;
- // lower priority is higher.
- const auto &dataPaths = DStandardPaths::paths(DStandardPaths::DSG::DataDir);
- paths.reserve(dataPaths.size());
- for (auto item : dataPaths) {
- paths.prepend(QString("%1/%2/configs/%3").arg(prefix, item, configKey.appId));
- }
- return paths;
- }
-
- inline static QStringList genericMetaDirs(const QString &prefix) {
- QStringList paths;
- for (auto item: DStandardPaths::paths(DStandardPaths::DSG::DataDir)) {
- paths.prepend(QString("%1/%2/configs").arg(prefix, item));
- }
- return paths;
- }
-
QString metaPath(const QString &localPrefix, bool *useAppId) const override
{
bool useAppIdForOverride = true;
QString path;
- const QStringList &applicationMetas = applicationMetaDirs(localPrefix);
+ const QStringList &applicationMetas = applicationMetaDirs(localPrefix, configKey.appId);
for (auto iter = applicationMetas.rbegin(); iter != applicationMetas.rend(); iter++) {
path = getFile(*iter, configKey.subpath, configKey.fileName + FILE_SUFFIX);
if (!path.isEmpty())
bool load(const QString &localPrefix) override
{
+ if (!isValidAppId(configKey.appId)) {
+ qCWarning(cfLog, "AppId is invalid, appId=%s", qPrintable(configKey.appId));
+ return false;
+ }
+ if (!isValidFilename(configKey.fileName)) {
+ qCWarning(cfLog, "Name is invalid, filename=%s", qPrintable(configKey.fileName));
+ return false;
+ }
bool useAppIdForOverride = true;
QString path = metaPath(localPrefix, &useAppIdForOverride);
if (path.isEmpty()) {
auto i = contents.constBegin();
for (; i != contents.constEnd(); ++i) {
+ if (!values.contains(i.key())) {
+ qCWarning(cfLog, "The meta doesn't contain the override key: \"%s\".", qPrintable(i.key()));
+ continue;
+ }
// 检查是否允许 override
if (values.flags(i.key()) & DConfigFile::NoOverride)
continue;
return true;
}
/*!
+ @~english
\internal
- \brief 获得前缀为\a prefix目录的应用或公共库的所有覆盖机制目录,越后优先级越高
+ @brief 获得前缀为 \a prefix 目录的应用或公共库的所有覆盖机制目录,越后优先级越高
*/
inline QStringList overrideDirs(const QString & prefix, bool useAppId) const {
const QString &path2 = QString("%1/etc/dsg/configs/overrides/%2/%3")
return dirs;
}
/*!
+ @~english
\internal
- \brief 获得所有遵守覆盖机制的文件流
+ @brief 获得所有遵守覆盖机制的文件流
在override文件放置路径下按优先级查找覆盖文件,支持子目录查找机制,
使用自然排序(如“a2”在“a11”之前)规则按文件名进行排序
if (!base_dir.exists())
continue;
+ if (!subpathIsValid(configKey.subpath, base_dir))
+ continue;
+
QDir target_dir = base_dir;
target_dir.setFilter(filters);
target_dir.setNameFilters(nameFilters);
}
/*!
- \class Dtk::Core::DConfigCache
+@~english
+ @class Dtk::Core::DConfigCache
\inmodule dtkcore
- \brief 提供配置文件的用户和全局运行缓存访问接口.
+ @brief Provides user and global runtime cache access interfaces for Configuration file.
*/
/*!
- \fn bool DConfigCache::load(const QString &localPrefix = QString()) = 0;
- \brief 解析缓存配置文件
- \return
+@~english
+ @fn bool DConfigCache::load(const QString &localPrefix = QString()) = 0;
+ @brief Parse the cache configuration file
+ @return
*/
/*!
- \fn bool DConfigCache::save(const QString &localPrefix = QString(), QJsonDocument::JsonFormat format = QJsonDocument::Indented, bool sync = false) = 0;
- \brief 保存缓存的值到磁盘中
- \a localPrefix 为目录前缀
- \a format 保存格式
- \a sync 是否立即刷新
- \return
+@~english
+ @fn bool DConfigCache::save(const QString &localPrefix = QString(), QJsonDocument::JsonFormat format = QJsonDocument::Indented, bool sync = false) = 0;
+ @brief Save the cached value to disk
+ \a localPrefix Directory prefix
+ \a format Save format
+ \a sync Whether to refresh immediately
+ @return
*/
/*!
- \fn bool DConfigCache::isGlobal() const = 0;
- \brief 是否是全局缓存
- \return
+@~english
+ @fn bool DConfigCache::isGlobal() const = 0;
+ @brief Whether to cache globally
+ @return
*/
/*!
- \fn void DConfigCache::remove(const QString &key) = 0;
- \brief 删除缓存中的配置项
- \a key 配置项名称
- \return
+@~english
+ @fn void DConfigCache::remove(const QString &key) = 0;
+ @brief Delete a configuration entry from the cache
+ \a key Configuration name
+ @return
*/
/*!
- \fn QStringList DConfigCache::keyList() const = 0;
- \brief 返回配置内容的所有配置项
- \return
+@~english
+ @fn QStringList DConfigCache::keyList() const = 0;
+ @brief Returns all configuration items for the configuration content
+ @return
*/
/*!
- \fn bool DConfigCache::setValue(const QString &key, const QVariant &value, const int serial, const uint uid, const QString &callerAppid) = 0;
- \brief 设置缓存中的值
- \a key 配置项名称
- \a value 需要设置的值
- \a uid 设置时的用户id
- \a callerAppid 设置时的应用id
- \return 为true时表示重新设置了新值,false表示没有设置
+@~english
+ @fn bool DConfigCache::setValue(const QString &key, const QVariant &value, const int serial, const uint uid, const QString &callerAppid) = 0;
+ @brief Sets the value in the cache
+ \a key Configuration name
+ \a value Configuration name
+ \a uid User Id at setup time
+ \a callerAppid Application id at setup time
+ @return A value of true indicates that the new value has been reset, and false indicates that it has not been set
*/
/*!
- \fn QVariant DConfigCache::value(const QString &key) const = 0;
- \brief 获取缓存中的值
- \a key 配置项名称
- \return
+@~english
+ @fn QVariant DConfigCache::value(const QString &key) const = 0;
+ @brief Get the value in the cache
+ \a key Configuration name
+ @return
*/
/*!
- \fn int DConfigCache::serial(const QString &key) const = 0;
- \brief 返回配置项的单调递增值
- \a key 配置项名称
- \return -1为无效值,表明没有配置此项
+@~english
+ @fn int DConfigCache::serial(const QString &key) const = 0;
+ @brief Returns a monotonically increasing value of a configuration item
+ \a key Configuration name
+ @return An invalid value of -1 indicates that the entry is not configured
*/
/*!
- \fn uint DConfigCache::uid() const = 0;
- \brief 用户标识,为全局缓存时,uid为非用户标识的特定值
- \return
+@~english
+ @fn uint DConfigCache::uid() const = 0;
+ @brief User identification, when used in the global cache, uid is a specific value for non-user identification
+ @return
+*/
+
+/*!
+@~english
+ @fn void setCachePathPrefix(const QString &prefix) = 0;
+ @brief Set cache's prefix path, it's access permissions is considered by caller,
+and it needs to distinguish the paths of different caches by caller.
+ @param prefix cache's prefix path.
*/
class Q_DECL_HIDDEN DConfigCacheImpl : public DConfigCache {
return values.keyList();
}
- inline static QString applicationCacheDir(const QString &prefix, const QString &suffix,
- uint userid, const QString &appId) {
- // If target user is current user, then get the home path by environment variable first.
- const QString &homePath = (getuid() == userid) ? DStandardPaths::homePath()
- : DStandardPaths::homePath(userid);
- if (homePath.isEmpty()) {
- return QString();
+ inline QString applicationCacheDir(const QString &localPrefix, const QString &suffix) const
+ {
+ QString prefix(cachePrefix);
+ if (prefix.isEmpty()) {
+ // If target user is current user or system user, then get the home path by environment variable first.
+ QString homePath;
+ if (userid == InvalidUID || (getuid() == userid)) {
+ homePath = DStandardPaths::homePath();
+ } else {
+ homePath = DStandardPaths::homePath(getuid());
+ }
+
+ if (homePath.isEmpty())
+ return QString();
+
+ // fallback to default application cache directory.
+ prefix = homePath + QStringLiteral("/.config/dsg/configs");
}
- const QString userHomeConfigDir = homePath + QStringLiteral("/.config/dsg/configs") + suffix;
- return prefix + userHomeConfigDir + QDir::separator() + appId;
+ return QDir::cleanPath(QString("%1/%2/%3").arg(localPrefix, prefix + suffix, configKey.appId));
}
- inline QString applicationCacheDir(const QString &prefix) const {
- return applicationCacheDir(prefix, QString(), userid, configKey.appId);
+ inline QString applicationCacheDir(const QString &localPrefix) const
+ {
+ return applicationCacheDir(localPrefix, QString());
}
inline QString cacheDir(const QString &basePath) {
return dir.filePath(configKey.fileName + FILE_SUFFIX);
}
- inline QString globalCacheDir(const QString &prefix) const {
- // TODO `DSG_APP_DATA` is not set and `appid` is not captured in `DStandardPaths::path`.
- QString appDataDir = DStandardPaths::path(DStandardPaths::DSG::AppData);
- if (appDataDir.isEmpty()) {
+ inline QString globalCacheDir(const QString &localPrefix) const {
+ QString prefix(cachePrefix);
+ if (prefix.isEmpty()) {
+ // TODO `DSG_APP_DATA` is not set and `appid` is not captured in `DStandardPaths::path`.
+ QString appDataDir = DStandardPaths::path(DStandardPaths::DSG::AppData);
+ if (appDataDir.isEmpty()) {
#ifdef D_DSG_APP_DATA_FALLBACK
- appDataDir = QStringLiteral(D_DSG_APP_DATA_FALLBACK);
- QFileInfo tmp(appDataDir);
- if (!tmp.exists() && !tmp.isSymLink() && !QDir::current().mkpath(appDataDir)) {
- qCDebug(cfLog, "Not found a valid DSG_APP_DATA directory");
- return QString();
- }
+ appDataDir = QStringLiteral(D_DSG_APP_DATA_FALLBACK);
+ QFileInfo tmp(appDataDir);
+ if (!tmp.exists() && !tmp.isSymLink() && !QDir::current().mkpath(appDataDir)) {
+ qCDebug(cfLog, "Not found a valid DSG_APP_DATA directory");
+ return QString();
+ }
#else
- return QString();
+ return QString();
#endif
+ }
+ // fallback to default global cache directory.
+ prefix = QString("%1/configs").arg(appDataDir);
}
- return QString("%1/%2/configs/%3").arg(prefix, appDataDir, configKey.appId);
+ return QDir::cleanPath(QString("%1/%2/%3").arg(localPrefix, prefix, configKey.appId));
}
QString getCacheDir(const QString &localPrefix = QString())
return dir;
// Not supported the global config, fallback the config cache data to user directory.
- return applicationCacheDir(localPrefix, "-fake-global", getuid(), configKey.appId);
+ return applicationCacheDir(localPrefix, "-fake-global");
} else {
return applicationCacheDir(localPrefix);
}
inline void remove(const QString &key) override
{
values.remove(key);
+ cacheChanged = true;
}
bool setValue(const QString &key, const QVariant &value, const int serial, const uint uid, const QString &appid) override
{
bool save(const QString &localPrefix, QJsonDocument::JsonFormat format, bool sync) override;
+ virtual void setCachePathPrefix(const QString &prefix) override
+ {
+ cachePrefix = prefix;
+ }
+
DConfigKey configKey;
DConfigInfo values;
+ QString cachePrefix;
uint userid;
bool global;
bool cacheChanged = false;
if (!cacheChanged)
return true;
+ cacheChanged = false;
const QString &dir = getCacheDir(localPrefix);
if (dir.isEmpty()) {
qCWarning(cfLog, "Falied on saveing, the config cache directory is empty for the user[%d], "
} else {
const auto &metaValue = configMeta->value(key);
// sample judgement to reduce a copy of convert.
- if (metaValue.type() == value.type())
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ if (metaValue.typeId() == value.typeId())
return cache->setValue(key, value, configMeta->serial(key), cache->uid(), appid);
// convert copy to meta's type, it promises `setValue` don't change meta's type.
+ auto copy = value;
+ if (!copy.convert(metaValue.metaType())) {
+ qCWarning(cfLog) << "check type error, meta type is " << metaValue.metaType().name()
+ << ", and now type is " << value.metaType().name();
+ return false;
+ }
+#else
+ if (metaValue.type() == value.type())
+ return cache->setValue(key, value, configMeta->serial(key), cache->uid(), appid);
+
auto copy = value;
if (!copy.convert(metaValue.userType())) {
qCWarning(cfLog) << "check type error, meta type is " << metaValue.type()
<< ", and now type is " << value.type();
return false;
}
+#endif
return cache->setValue(key, copy, configMeta->serial(key), cache->uid(), appid);
}
}
return userCache;
}
- QVariant value(const QString &key, DConfigCache *userCache) const
+ QVariant cacheValue(DConfigCache *userCache, const QString &key) const
{
// 检查权限
if (configMeta->permissions(key) != DConfigFile::ReadOnly) {
}
}
}
-
+ return QVariant();
+ }
+ QVariant value(const QString &key, DConfigCache *userCache) const
+ {
+ const QVariant &v = cacheValue(userCache, key);
+ if (v.isValid())
+ return v;
return configMeta->value(key);
}
}
/*!
- \brief 支持的版本
- \return
+@~english
+ @brief Supported versions
+ @return
*/
constexpr DConfigFile::Version DConfigFile::supportedVersion()
{
}
/*!
- \brief 构造配置文件管理对象
- \a appId 应用程序唯一标识
- \a name 配置文件名
- \a subpath 子目录
+@~english
+ @brief 构造配置文件管理对象
+ \a appId Application unique identification
+ \a name Config filename
+ \a subpath Subdirectories
*/
DConfigFile::DConfigFile(const QString &appId, const QString &name, const QString &subpath)
: DObject(*new DConfigFilePrivate(this, appId, name, subpath))
{
- Q_ASSERT(!name.isEmpty());
-
D_D(DConfigFile);
d->globalCache = new DConfigCacheImpl(d->configKey, InvalidUID, true);
}
}
/*!
- \brief 解析配置文件
- \a localPrefix 为目录前缀
- \return
+@~english
+ @brief Parse configuration files
+ \a localPrefix Directory prefix
+ @return
*/
bool DConfigFile::load(const QString &localPrefix)
{
}
/*!
- \brief 解析配置文件流
- \a meta 为原型流
- \a overrides 为覆盖机制查找的文件流
- \return
+@~english
+ @brief Parse the profile stream
+ \a meta Prototype stream
+ \a overrides File stream to find for the override mechanism
+ @return
*/
bool DConfigFile::load(QIODevice *meta, const QList<QIODevice *> &overrides)
{
}
/*!
- \brief 保存缓存的值到磁盘中
- \a format 保存格式
- \a sync 是否立即刷新
- \return
+@~english
+ @brief Save the cached value to disk
+ \a format Save format
+ \a sync Whether to refresh immediately
+ @return
*/
bool DConfigFile::save(const QString &localPrefix, QJsonDocument::JsonFormat format, bool sync) const
{
}
/*!
- * \brief DConfigFile::value
- * \param key 配置项名称
- * \param uid 用户id,当key为全局项时,uid无效
- * \return
+@~english
+ * @brief DConfigFile::value
+ * @param key Configuration name
+ * @param userCache Specific user cache, \a userCache is unused when the key is global
+ * @return
*/
QVariant DConfigFile::value(const QString &key, DConfigCache *userCache) const
{
}
/*!
- \brief 设置缓存中的值
- \a key 配置项名称
- \a value 需要设置的值
- \a uid 设置时的用户id
- \a appid 设置时的应用id
- \return 为true时表示重新设置了新值,false表示没有设置
+ * \brief DConfigFile::cacheValue Get a specific user cache's value
+ * \param userCache Specific user cache, it is unused if the \a key is global configuration item
+ * \param key Configuration name
+ * \return
+ */
+QVariant DConfigFile::cacheValue(DConfigCache *userCache, const QString &key) const
+{
+ D_DC(DConfigFile);
+ return d->cacheValue(userCache, key);
+}
+
+/*!
+@~english
+ @brief Sets the value in the cache
+ \a key Configuration name
+ \a value The value to set
+ \a userCache Specific user cache at setup time
+ \a appid Application id at setup time
+ @return A value of true indicates that the new value has been reset, and false indicates that it has not been set
*/
bool DConfigFile::setValue(const QString &key, const QVariant &value, const QString &callerAppid, DConfigCache *userCache)
{
/*!
- \brief 返回全局缓存
- \return
+@~english
+ @brief Return to the global cache
+ @return
*/
DConfigCache *DConfigFile::globalCache() const
{
}
/*!
- \brief 返回原型对象
- \return
+@~english
+ @brief Return the prototype object
+ @return
*/
DConfigMeta *DConfigFile::meta()
{
}
/*!
- \brief 检测配置文件是否有效
- \return
+@~english
+ @brief Checks whether the configuration file is valid
+ @return
*/
bool DConfigFile::isValid() const
{
// construct data and return
QByteArray data;
- data.append(QString("[%1]\n").arg(name));
+ data.append(QString("[%1]\n").arg(name).toLocal8Bit());
QMap<QString, QString>::const_iterator i;
for (i = valuesMap.begin(); i != valuesMap.end(); i++) {
- data.append(QString("%1=%2\n").arg(i.key(), i.value()));
+ data.append(QString("%1=%2\n").arg(i.key(), i.value()).toLocal8Bit());
}
return data;
}
/*!
- \class Dtk::Core::DDesktopEntry
+@~english
+ @class Dtk::Core::DDesktopEntry
\inmodule dtkcore
- \brief Handling desktop entry files.
+ @brief Handling desktop entry files.
DDesktopEntry provide method for handling XDG desktop entry read and write. The interface
of this class is similar to QSettings.
}
/*!
- \brief Write back data to the desktop entry file.
- \return true if write success; otherwise returns false.
+@~english
+ @brief Write back data to the desktop entry file.
+ @return true if write success; otherwise returns false.
*/
bool DDesktopEntry::save() const
{
}
/*!
- \brief Get data parse status
+@~english
+ @brief Get data parse status
- \return Returns a status code indicating the first error that was met by DDesktopEntry, or QSettings::NoError if no error occurred.
+ @return Returns a status code indicating the first error that was met by DDesktopEntry, or QSettings::NoError if no error occurred.
Be aware that DDesktopEntry delays performing some operations.
*/
}
/*!
- \brief Get a list of all section keys inside the given \a section.
+@~english
+ @brief Get a list of all section keys inside the given \a section.
- \return all available section keys.
+ @return all available section keys.
*/
QStringList DDesktopEntry::keys(const QString §ion) const
{
}
/*!
- \brief Get a list of all section groups inside the desktop entry.
+@~english
+ @brief Get a list of all section groups inside the desktop entry.
If \a sorted is set to true, the returned result will keep the order as-is when reading the entry file.
- \return all available section groups.
+ @return all available section groups.
*/
QStringList DDesktopEntry::allGroups(bool sorted) const
{
}
/*!
- \brief Check if the desktop entry file have the given \a section contains the given \a key
+@~english
+ @brief Check if the desktop entry file have the given \a section contains the given \a key
- \return true if the desktop entry contains the \a key in \a section; otherwise returns false.
+ @return true if the desktop entry contains the \a key in \a section; otherwise returns false.
*/
bool DDesktopEntry::contains(const QString &key, const QString §ion) const
{
}
/*!
- \brief Returns the localized string value of the "Name" key under "Desktop Entry" section.
+@~english
+ @brief Returns the localized string value of the "Name" key under "Desktop Entry" section.
It's equivalent to calling localizedValue("Name").
- \return Returns the localized string value of the "Name" key under "Desktop Entry" section.
+ @return Returns the localized string value of the "Name" key under "Desktop Entry" section.
- \sa localizedValue(), genericName(), ddeDisplayName()
+ @sa localizedValue(), genericName(), ddeDisplayName()
*/
QString DDesktopEntry::name() const
{
}
/*!
- \brief Returns the localized string value of the "GenericName" key under "Desktop Entry" section.
+@~english
+ @brief Returns the localized string value of the "GenericName" key under "Desktop Entry" section.
It's equivalent to calling localizedValue("GenericName"). It will NOT fallback to "Name" if "GenericName"
is not existed.
- \return Returns the localized string value of the "GenericName" key under "Desktop Entry" section.
+ @return Returns the localized string value of the "GenericName" key under "Desktop Entry" section.
- \sa localizedValue(), name(), ddeDisplayName()
+ @sa localizedValue(), name(), ddeDisplayName()
*/
QString DDesktopEntry::genericName() const
{
}
/*!
- \brief Display name specially for DDE applications.
+@~english
+ @brief Display name specially for DDE applications.
This will check "X-Deepin-Vendor" and will return the localized string value of "GenericName" if
"X-Deepin-Vendor" is "deepin", or it will return the localized string value of "Name".
- \return Returns the display name specially for DDE applications.
+ @return Returns the display name specially for DDE applications.
- \sa localizedValue(), name(), genericName()
+ @sa localizedValue(), name(), genericName()
*/
QString DDesktopEntry::ddeDisplayName() const
{
}
/*!
- \brief Returns the localized string value of the "Comment" key under "Desktop Entry" section.
+@~english
+ @brief Returns the localized string value of the "Comment" key under "Desktop Entry" section.
It's equivalent to calling localizedValue("Comment").
- \return Returns the localized string value of the "Comment" key under "Desktop Entry" section.
+ @return Returns the localized string value of the "Comment" key under "Desktop Entry" section.
- \sa localizedValue()
+ @sa localizedValue()
*/
QString DDesktopEntry::comment() const
{
}
/*!
- \brief Returns the raw string value associated with the given \a key in \a section.
+@~english
+ @brief Returns the raw string value associated with the given \a key in \a section.
If the entry contains no item with the key, the function returns a constructed \a defaultValue.
- \return Returns the raw string value associated with the given \a key in \a section.
+ @return Returns the raw string value associated with the given \a key in \a section.
- \sa stringValue() localizedValue() stringListValue()
+ @sa stringValue() localizedValue() stringListValue()
*/
QString DDesktopEntry::rawValue(const QString &key, const QString §ion, const QString &defaultValue) const
{
}
/*!
- \brief Returns the unescaped string value associated with the given \a key in \a section.
+@~english
+ @brief Returns the unescaped string value associated with the given \a key in \a section.
If the entry contains no item with the key, the function returns a constructed \a defaultValue.
- \return Returns the unescaped string value associated with the given \a key in \a section.
+ @return Returns the unescaped string value associated with the given \a key in \a section.
- \sa rawValue() localizedValue() stringListValue()
+ @sa rawValue() localizedValue() stringListValue()
*/
QString DDesktopEntry::stringValue(const QString &key, const QString §ion, const QString &defaultValue) const
{
}
/*!
- \brief Returns the localized string value associated with the given \a key and \a localeKey in \a section.
+@~english
+ @brief Returns the localized string value associated with the given \a key and \a localeKey in \a section.
If the given \a localeKey can't be found, it will fallback to "C", if still cannot found, will fallback to the
key without localeKey.
If the entry contains no item with the key, the function returns a constructed \a defaultValue.
- \return Returns the localized string value associated with the given \a key and \a localeKey in \a section.
+ @return Returns the localized string value associated with the given \a key and \a localeKey in \a section.
- \sa rawValue() stringValue() stringListValue()
+ @sa rawValue() stringValue() stringListValue()
*/
QString DDesktopEntry::localizedValue(const QString &key, const QString &localeKey, const QString §ion, const QString &defaultValue) const
{
}
/*!
- \brief Returns the localized string value associated with the given \a key and \a locale in \a section.
+@~english
+ @brief Returns the localized string value associated with the given \a key and \a locale in \a section.
If the given \a locale can't be found, it will fallback to "C", if still cannot found, will fallback to the
key without a locale key.
If the entry contains no item with the key, the function returns a default-constructed value.
- \return Returns the localized string value associated with the given \a key and \a locale in \a section.
+ @return Returns the localized string value associated with the given \a key and \a locale in \a section.
- \sa rawValue() stringValue() stringListValue()
+ @sa rawValue() stringValue() stringListValue()
*/
QString DDesktopEntry::localizedValue(const QString &key, const QLocale &locale, const QString §ion, const QString &defaultValue) const
{
}
/*!
- \brief Returns a list of strings associated with the given \a key in the given \a section.
+@~english
+ @brief Returns a list of strings associated with the given \a key in the given \a section.
If the entry contains no item with the key, the function returns a empty string list.
- \return Returns a list of strings associated with the given \a key in the given \a section.
+ @return Returns a list of strings associated with the given \a key in the given \a section.
- \sa rawValue() stringValue() localizedValue()
+ @sa rawValue() stringValue() localizedValue()
*/
QStringList DDesktopEntry::stringListValue(const QString &key, const QString §ion) const
{
// The parseCombinedArgString() splits the string by the space symbols,
// we temporarily replace them on the special characters.
// Replacement will reverse after the splitting.
- repl.insert(QLatin1Char(' '), 01); // space
- repl.insert(QLatin1Char('\t'), 02); // tab
- repl.insert(QLatin1Char('\n'), 03); // newline,
+ repl.insert(QLatin1Char(' '), QChar::fromLatin1(01)); // space
+ repl.insert(QLatin1Char('\t'), QChar::fromLatin1(02)); // tab
+ repl.insert(QLatin1Char('\n'), QChar::fromLatin1(03)); // newline,
repl.insert(QLatin1Char('"'), QLatin1Char('"')); // double quote,
repl.insert(QLatin1Char('\''), QLatin1Char('\'')); // single quote ("'"),
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include "dlicenseinfo.h"
+
+#include <DObjectPrivate>
+
+#include <QFile>
+#include <QJsonParseError>
+#include <QJsonObject>
+#include <QJsonArray>
+#include <QDebug>
+
+DCORE_BEGIN_NAMESPACE
+
+class DLicenseInfo::DComponentInfoPrivate : public DObjectPrivate
+{
+public:
+ QString name;
+ QString version;
+ QString copyRight;
+ QString licenseName;
+
+protected:
+ explicit DComponentInfoPrivate(DLicenseInfo::DComponentInfo *qq)
+ : DObjectPrivate(qq)
+ {
+ }
+
+private:
+ Q_DECLARE_PUBLIC(DLicenseInfo::DComponentInfo)
+ friend class DLicenseInfoPrivate;
+};
+
+DLicenseInfo::DComponentInfo::DComponentInfo(DObject * parent)
+ : DObject(*new DLicenseInfo::DComponentInfoPrivate(this), parent)
+{
+
+}
+
+DLicenseInfo::DComponentInfo::~DComponentInfo()
+{
+}
+
+QString DLicenseInfo::DComponentInfo::name() const
+{
+ return d_func()->name;
+}
+
+QString DLicenseInfo::DComponentInfo::version() const
+{
+ return d_func()->version;
+}
+
+QString DLicenseInfo::DComponentInfo::copyRight() const
+{
+ return d_func()->copyRight;
+}
+
+QString DLicenseInfo::DComponentInfo::licenseName() const
+{
+ return d_func()->licenseName;
+}
+
+class Q_DECL_HIDDEN DLicenseInfoPrivate : public DObjectPrivate
+{
+public:
+ explicit DLicenseInfoPrivate(DLicenseInfo *qq);
+ ~DLicenseInfoPrivate() override;
+
+ bool loadFile(const QString &file);
+ bool loadContent(const QByteArray &content);
+ QByteArray licenseContent(const QString &licenseName);
+ void clear();
+
+ QString licenseSearchPath;
+ DLicenseInfo::DComponentInfos componentInfos;
+};
+
+DLicenseInfoPrivate::DLicenseInfoPrivate(DLicenseInfo *qq)
+ : DObjectPrivate(qq)
+{
+}
+
+DLicenseInfoPrivate::~DLicenseInfoPrivate()
+{
+ clear();
+}
+
+bool DLicenseInfoPrivate::loadFile(const QString &file)
+{
+ QFile jsonFile(file);
+ if (!jsonFile.open(QIODevice::ReadOnly)) {
+ qWarning() << QString("Failed on open file: \"%1\", error message: \"%2\"").arg(
+ qPrintable(jsonFile.fileName()), qPrintable(jsonFile.errorString()));
+ return false;
+ }
+ return loadContent(jsonFile.readAll());
+}
+
+bool DLicenseInfoPrivate::loadContent(const QByteArray &content)
+{
+ QJsonParseError error;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(content, &error);
+ if (error.error != QJsonParseError::NoError) {
+ qWarning() << "When loading the license, parseJson failed:" << qPrintable(error.errorString());
+ return false;
+ }
+ if (!jsonDoc.isArray()) {
+ qWarning() << "When loading the license, parseJson failed: it is not a JSON array";
+ return false;
+ }
+
+ clear();
+ QJsonArray array = jsonDoc.array();
+ for (const QJsonValue &value : array) {
+ if (!value.isObject()) {
+ qWarning() << "When loading the license, parseJson failed: it is not a JSON object!";
+ return false;
+ }
+ DLicenseInfo::DComponentInfo *componentInfo = new DLicenseInfo::DComponentInfo;
+ QJsonObject obj = value.toObject();
+ QJsonValue name = obj.value("name");
+ QJsonValue version = obj.value("version");
+ QJsonValue copyright = obj.value("copyright");
+ QJsonValue license = obj.value("license");
+ if (!name.isString() || !version.isString()
+ || !copyright.isString() || !license.isString()) {
+ qWarning() << "When loading the license, parseJson failed: it is not a string!";
+ return false;
+ }
+ componentInfo->d_func()->name = name.toString();
+ componentInfo->d_func()->version = version.toString();
+ componentInfo->d_func()->copyRight = copyright.toString();
+ componentInfo->d_func()->licenseName = license.toString();
+ componentInfos.append(componentInfo);
+ }
+ return true;
+}
+
+QByteArray DLicenseInfoPrivate::licenseContent(const QString &licenseName)
+{
+ QByteArray content;
+ QStringList dirs{"/usr/share/spdx-license"};
+ if (!licenseSearchPath.isEmpty())
+ dirs.prepend(licenseSearchPath);
+ for (const QString &dir : dirs) {
+ QFile file(QString("%1/%2.txt").arg(dir).arg(licenseName));
+ if (!file.exists())
+ continue;
+ if (file.open(QIODevice::ReadOnly)) {
+ content = file.readAll();
+ file.close();
+ break;
+ }
+ }
+ if (content.isEmpty()) {
+ qWarning() << QString("License content is empty when getting license content!");
+ }
+ return content;
+}
+
+void DLicenseInfoPrivate::clear()
+{
+ qDeleteAll(componentInfos);
+ componentInfos.clear();
+}
+
+DLicenseInfo::DLicenseInfo(DObject *parent)
+ : DObject(*new DLicenseInfoPrivate(this), parent)
+{
+}
+
+bool DLicenseInfo::loadContent(const QByteArray &content)
+{
+ D_D(DLicenseInfo);
+ return d->loadContent(content);
+}
+
+bool DLicenseInfo::loadFile(const QString &file)
+{
+ D_D(DLicenseInfo);
+ return d->loadFile(file);
+}
+
+void DLicenseInfo::setLicenseSearchPath(const QString &path)
+{
+ D_D(DLicenseInfo);
+ d->licenseSearchPath = path;
+}
+
+QByteArray DLicenseInfo::licenseContent(const QString &licenseName)
+{
+ D_D(DLicenseInfo);
+ return d->licenseContent(licenseName);
+}
+
+DLicenseInfo::DComponentInfos DLicenseInfo::componentInfos() const
+{
+ D_DC(DLicenseInfo);
+ return d->componentInfos;
+}
+
+DCORE_END_NAMESPACE
#include "dsecurestring.h"
#include "dutil.h"
+#include <cstring>
DCORE_BEGIN_NAMESPACE
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2022-2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dsgapplication.h"
+#include <sys/syscall.h>
+#include <unistd.h>
+
+#include <QDir>
+#include <QFile>
#include <QByteArray>
#include <QCoreApplication>
+#include <QDebug>
+#include <QDBusUnixFileDescriptor>
+#include <QDBusReply>
+#include <QRegularExpression>
+#include <QLoggingCategory>
+#include <QDBusConnectionInterface>
+
+#include <DDBusInterface>
+
+#ifdef QT_DEBUG
+Q_LOGGING_CATEGORY(dsgApp, "dtk.core.dsg")
+#else
+Q_LOGGING_CATEGORY(dsgApp, "dtk.core.dsg", QtInfoMsg)
+#endif
DCORE_BEGIN_NAMESPACE
QByteArray selfId = qgetenv("DSG_APP_ID");
if (!selfId.isEmpty())
return selfId;
- selfId = DSGApplication::getId(QCoreApplication::applicationPid());
- if (selfId.isEmpty() && !qEnvironmentVariableIsSet("DTK_DISABLED_FALLBACK_APPID")) {
- selfId = QCoreApplication::applicationName().toLocal8Bit();
- }
- Q_ASSERT(!selfId.isEmpty());
- if (selfId.isEmpty()) {
- qt_assert("The application ID is empty", __FILE__, __LINE__);
- }
- return selfId;
+ return DSGApplication::getId(QCoreApplication::applicationPid());
+}
+
+static bool isServiceActivatable(const QString &service)
+{
+ if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(service))
+ return false;
+
+ const QDBusReply<QStringList> activatableNames = QDBusConnection::sessionBus().interface()->
+ callWithArgumentList(QDBus::AutoDetect,
+ QLatin1String("ListActivatableNames"),
+ QList<QVariant>());
+
+ return activatableNames.value().contains(service);
+}
+
+// Format appId to valid.
+static QByteArray formatAppId(const QByteArray &appId)
+{
+ static const QRegularExpression regex("[^\\w\\-\\.]");
+ QString format(appId);
+ format.replace(QDir::separator(), ".");
+ format = format.replace(regex, QStringLiteral("-"));
+ const QString InvalidPrefix{"."};
+ if (format.startsWith(InvalidPrefix))
+ format = format.mid(InvalidPrefix.size());
+ return format.toLocal8Bit();
}
QByteArray DSGApplication::id()
{
static QByteArray selfId = getSelfAppId();
- return selfId;
+ if (!selfId.isEmpty())
+ return selfId;
+ QByteArray result = selfId;
+ if (!qEnvironmentVariableIsSet("DTK_DISABLED_FALLBACK_APPID")) {
+ result = QCoreApplication::applicationName().toLocal8Bit();
+ if (result.isEmpty()) {
+ QFile file("/proc/self/cmdline");
+ if (file.open(QIODevice::ReadOnly))
+ result = file.readLine();
+ }
+ if (result.isEmpty()) {
+ const QFileInfo file(QFile::symLinkTarget("/proc/self/exe"));
+ if (file.exists())
+ result = file.absoluteFilePath().toLocal8Bit();
+ }
+ if (!result.isEmpty()) {
+ result = formatAppId(result);
+ qCDebug(dsgApp) << "The applicatiion ID is fallback to " << result;
+ }
+ }
+ if (result.isEmpty())
+ qCWarning(dsgApp) << "The application ID is empty.";
+
+ return result;
}
-QByteArray DSGApplication::getId(qint64)
+QByteArray DSGApplication::getId(qint64 pid)
{
- // TODO(zccrs): Call the org.desktopspec.ApplicationManager DBus service
- return nullptr;
+ if (!isServiceActivatable("org.desktopspec.ApplicationManager1")) {
+ qCInfo(dsgApp) << "Can't getId from AM for the " << pid << ", because AM is unavailable.";
+ return QByteArray();
+ }
+
+ int pidfd = syscall(SYS_pidfd_open, pid, 0);
+ if (pidfd < 0) {
+ qCWarning(dsgApp) << "pidfd open failed:" << strerror(errno);
+ return QByteArray();
+ }
+
+ DDBusInterface infc("org.desktopspec.ApplicationManager1",
+ "/org/desktopspec/ApplicationManager1",
+ "org.desktopspec.ApplicationManager1");
+
+ QDBusReply<QString> reply = infc.call("Identify", QVariant::fromValue(QDBusUnixFileDescriptor(pidfd)));
+
+ if (!reply.isValid()) {
+ qCWarning(dsgApp) << "Identify from AM failed." << reply.error().message();
+ return QByteArray();
+ }
+
+ const QByteArray appId = reply.value().toLatin1();
+ qCInfo(dsgApp) << "AppId is fetched from AM, and value is " << appId;
+ return appId;
}
DCORE_END_NAMESPACE
-// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2017 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <QSettings>
#include <QStandardPaths>
#include <QDateTime>
+#include <QRegularExpression>
+#include <QLoggingCategory>
#include <qmath.h>
#ifdef Q_OS_LINUX
#include <unistd.h>
#endif
-#ifndef OS_VERSION_TEST_FILE
-#define OS_VERSION_FILE "/etc/os-version"
-#else
-#define OS_VERSION_FILE OS_VERSION_TEST_FILE
-#endif
+#define OS_VERSION_FILE DSYSINFO_PREFIX"/etc/os-version"
+#define LSB_RELEASE_FILE DSYSINFO_PREFIX"/etc/lsb-release"
+#define OS_RELEASE_FILE DSYSINFO_PREFIX"/etc/os-release"
+#define DEEPIN_VERSION_FILE DSYSINFO_PREFIX"/etc/deepin-version"
+
+static inline bool inTest()
+{
+ return !QLatin1String(DSYSINFO_PREFIX).isEmpty();
+}
DCORE_BEGIN_NAMESPACE
+#ifdef QT_DEBUG
+Q_LOGGING_CATEGORY(logSysInfo, "dtk.dsysinfo")
+#else
+Q_LOGGING_CATEGORY(logSysInfo, "dtk.dsysinfo", QtInfoMsg)
+#endif
+
class Q_DECL_HIDDEN DSysInfoPrivate
{
public:
void ensureReleaseInfo();
void ensureComputerInfo();
QMap<QString, QString> parseInfoFile(QFile &file);
-
+ QMap<QString, QString> parseInfoContent(const QString &content);
#ifdef Q_OS_LINUX
DSysInfo::DeepinType deepinType = DSysInfo::DeepinType(-1);
QMap<QString, QString> deepinTypeMap; //Type Name with Language
minVersion.D = minv % 10;
} else if (minorVersion.length() > 0) {
const QString D = minorVersion.right(1);
- if (D.contains(QRegExp("[0-9A-Z]"))) {
+ if (D.contains(QRegularExpression("[0-9A-Z]"))) {
// 0-9...A-Z
minVersion.D = 10 + static_cast<uint>(D.data()->toLatin1() - 'A');
} else {
void DSysInfoPrivate::ensureDeepinInfo()
{
- if (static_cast<int>(deepinType) >= 0)
+ if (static_cast<int>(deepinType) > 0 && !inTest())
return;
- QFile file("/etc/deepin-version");
+ if (inTest())
+ deepinTypeMap.clear(); // clear cache for test
+
+ QFile file(DEEPIN_VERSION_FILE);
if (!file.open(QFile::ReadOnly)) {
deepinType = DSysInfo::UnknownDeepin;
deepinCopyright = QString::fromUtf8(key_value.second);
}
- if (!deepinTypeMap.isEmpty() && !deepinEdition.isEmpty() && !deepinCopyright.isEmpty()) {
- break;
- }
+ // deepinTypeMap may not parse finished(multi language) but !deepinTypeMap.isEmpty()
+// if (!deepinTypeMap.isEmpty() && !deepinEdition.isEmpty() && !deepinCopyright.isEmpty()) {
+// break;
+// }
}
file.close();
deepinType = DSysInfo::DeepinServer;
} else if (deepin_type == "Personal") {
deepinType = DSysInfo::DeepinPersonal;
+ } else if (deepin_type == "Military") {
+ deepinType = DSysInfo::DeepinMilitary;
} else {
deepinType = DSysInfo::UnknownDeepin;
}
bool DSysInfoPrivate::ensureOsVersion()
{
-#ifndef OS_VERSION_TEST_FILE // Always re-read the file when testing
- if (osBuild.A > 0)
+ if (osBuild.A > 0 && !inTest())
return true;
-#endif
DDesktopEntry entry(OS_VERSION_FILE);
bool ok = false;
ok = (osbs.size() >= 2 && osbs.value(0).size() == 5);
D_ASSET_EXIT(ok, "OsBuild version invalid!");
+#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
+ const QStringList &left = osbs.value(0).split(QString(), Qt::SkipEmptyParts);
+#else
const QStringList &left = osbs.value(0).split(QString(), QString::SkipEmptyParts);
+#endif
D_ASSET_EXIT(left.size() == 5, "OsBuild version(ls) invalid!");
int idx = 0;
quint8 valid_data_count = 0;
char buf[1024];
+
+ if (inTest()) {
+ // for test clear cache
+ info->productTypeString.clear();
+ info->productType = DSysInfo::UnknownType;
+ }
+
while (valid_data_count < 3) {
int buf_length = file.readLine(buf, sizeof(buf));
static bool readOsRelease(DSysInfoPrivate *info)
{
- if (!readEtcFile(info, "/etc/os-release", "ID=", "VERSION_ID=", "PRETTY_NAME="))
- return readEtcFile(info, "/usr/lib/os-release", "ID=", "VERSION_ID=", "PRETTY_NAME=");
+ if (!readEtcFile(info, OS_RELEASE_FILE, "ID=", "VERSION_ID=", "PRETTY_NAME="))
+ return readEtcFile(info, DSYSINFO_PREFIX"/usr/lib/os-release", "ID=", "VERSION_ID=", "PRETTY_NAME=");
return true;
}
static bool readLsbRelease(DSysInfoPrivate *info)
{
- return readEtcFile(info, "/etc/lsb-release", "DISTRIB_ID=", "DISTRIB_RELEASE=", "DISTRIB_DESCRIPTION=");
+ return readEtcFile(info, LSB_RELEASE_FILE, "DISTRIB_ID=", "DISTRIB_RELEASE=", "DISTRIB_DESCRIPTION=");
}
#endif
void DSysInfoPrivate::ensureReleaseInfo()
{
- if (productType >= 0) {
+ if (productType > 0 && !inTest()) {
return;
}
return map;
}
+QMap<QString, QString> DSysInfoPrivate::parseInfoContent(const QString &content)
+{
+ QMap<QString, QString> map;
+ QStringList lineContents = content.split("\n");
+ for (auto lineContent : lineContents) {
+ if (lineContent.contains(':')) {
+ QStringList list = lineContent.split(':');
+ if (list.size() == 2) {
+ map.insert(list.first().trimmed(), list.back().trimmed());
+ }
+ }
+ }
+ return map;
+}
+
Q_GLOBAL_STATIC(DSysInfoPrivate, siGlobal)
QString DSysInfo::operatingSystemName()
bool DSysInfo::isDDE()
{
+ if (!DSysInfo::isDeepin()) {
+ const QByteArray &xsd = qgetenv("XDG_SESSION_DESKTOP");
+ return !xsd.compare("deepin", Qt::CaseInsensitive) ||
+ !xsd.compare("DDE", Qt::CaseInsensitive);
+ }
+
siGlobal->ensureDeepinInfo();
return siGlobal->deepinType != UnknownDeepin;
*/
DSysInfo::UosType DSysInfo::uosType()
{
+ if (!DSysInfo::isDeepin() && !inTest())
+ return UosTypeUnknown;
+
siGlobal->ensureOsVersion();
UosType ost = UosTypeUnknown;
return ospt;
}
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
/*!
@~english
\brief Architecture information (using bit flags of a byte)
return static_cast<UosArch>(siGlobal->osBuild.E);
}
+#endif
static QString getUosVersionValue(const QString &key, const QLocale &locale)
{
}
#endif
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QString DSysInfo::deepinDistributionInfoPath()
{
return distributionInfoPath();
}
+#endif
QString DSysInfo::distributionInfoPath()
{
#ifdef Q_OS_LINUX
- return "/usr/share/deepin/distribution.info";
+ // return "/usr/share/deepin/distribution.info";
+ return QStandardPaths::locate(QStandardPaths::GenericDataLocation, "deepin/distribution.info");
#else
return QDir(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).filePath("deepin-distribution.info");
#endif // Q_OS_LINUX
return siGlobal->distributionInfo->localizedValue("Name", locale, distributionInfoSectionName(type), fallback);
}
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QString DSysInfo::deepinDistributorName()
{
return distributionOrgName(Distributor);
}
-
+#endif
/*!
@~english
\return the organization website name and url.
};
}
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QPair<QString, QString> DSysInfo::deepinDistributorWebsite()
{
return distributionOrgWebsite(Distributor);
}
+#endif
/*!
@~english
return QString();
}
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QString DSysInfo::deepinDistributorLogo(DSysInfo::LogoType type, const QString &fallback)
{
return distributionOrgLogo(Distributor, type, fallback);
}
+#endif
DSysInfo::ProductType DSysInfo::productType()
{
QString DSysInfo::cpuModelName()
{
+ if (!siGlobal->cpuModelName.isEmpty())
+ return siGlobal->cpuModelName;
+
#ifdef Q_OS_LINUX
static QFile file("/proc/cpuinfo");
} else if (map.contains("cpu model")) {
// loonson3-cpuinfo sw-cpuinfo
siGlobal->cpuModelName = map.value("cpu model");
+ } else if (map.contains("Hardware")) {
+ // "HardWare" field contains cpu info on huawei kirin machine (e.g. klv or klu)
+ siGlobal->cpuModelName = map.value("Hardware");
}
file.close();
}
+
+ // Get the cpu info by executing lscpu command
+ if (siGlobal->cpuModelName.isEmpty()) {
+ const auto &lscpu_command = QStandardPaths::findExecutable("lscpu");
+ if (lscpu_command.isEmpty()) {
+ qWarning() << "lscpu not found";
+ return QString();
+ }
+ QProcess lscpu;
+ QStringList env = QProcess::systemEnvironment();
+ env << "LC_ALL=C"; // Add an environment variable
+ lscpu.setEnvironment(env);
+ lscpu.setProgram(lscpu_command);
+ lscpu.start();
+ if (lscpu.waitForFinished(3000)) {
+ const QMap<QString, QString> map = siGlobal->parseInfoContent(lscpu.readAll());
+ if (map.contains("Model name")) {
+ siGlobal->cpuModelName = map.value("Model name");
+ }
+ } else {
+ qWarning() << "lscpu:" << lscpu.errorString();
+ }
+ }
+
return siGlobal->cpuModelName;
#endif
return QString();
#ifdef Q_OS_LINUX
// Getting Memory Installed Size
// TODO: way to not dept on lshw?
+ if (siGlobal->memoryInstalledSize >= 0) {
+ return siGlobal->memoryInstalledSize;
+ }
if (!QStandardPaths::findExecutable("lshw").isEmpty()) {
QProcess lshw;
}
const QByteArray &lshwInfoJson = lshw.readAllStandardOutput();
- QJsonArray lshwResultArray = QJsonDocument::fromJson(lshwInfoJson).array();
- if (!lshwResultArray.isEmpty()) {
- QJsonValue memoryHwInfo = lshwResultArray.first();
- QString id = memoryHwInfo.toObject().value("id").toString();
- Q_ASSERT(id == "memory");
- siGlobal->memoryInstalledSize = memoryHwInfo.toObject().value("size").toDouble(); // TODO: check "units" is "bytes" ?
+
+ QJsonParseError error;
+ auto doc = QJsonDocument::fromJson(lshwInfoJson, &error);
+ if (error.error != QJsonParseError::NoError) {
+ qCWarning(logSysInfo(), "parse failed, expect json doc from lshw command");
+ return -1;
+ }
+
+ if (!doc.isArray()) {
+ qCWarning(logSysInfo(), "parse failed, expect array");
+ return -1;
+ }
+
+ QJsonArray lshwResultArray = doc.array();
+ for (const QJsonValue value : lshwResultArray) {
+ QJsonObject obj = value.toObject();
+ if (obj.contains("id") && obj.value("id").toString() == "memory") {
+ siGlobal->memoryInstalledSize = obj.value("size").toDouble(); // TODO: check "units" is "bytes" ?
+ break;
+ }
}
}
+ Q_ASSERT(siGlobal->memoryInstalledSize > 0);
+
return siGlobal->memoryInstalledSize;
-#endif
+#else
return -1;
+#endif
}
/*!
{
#ifdef Q_OS_LINUX
// Getting Disk Size
- const QString &deviceName = QStorageInfo::root().device();
+ QString deviceName;
QProcess lsblk;
- lsblk.start("lsblk", {"-Jlpb", "-oNAME,KNAME,PKNAME,SIZE"}, QIODevice::ReadOnly);
+ lsblk.start("lsblk", {"-Jlpb", "-oNAME,KNAME,PKNAME,SIZE,MOUNTPOINT"}, QIODevice::ReadOnly);
if (!lsblk.waitForFinished()) {
return -1;
QString kname = oneValue.toObject().value("kname").toString();
QString pkname = oneValue.toObject().value("pkname").toString();
qulonglong size = oneValue.toObject().value("size").toVariant().toULongLong();
+ QString deviceNameMP = oneValue.toObject().value("mountpoint").toString();
+
+ if ("/" == deviceNameMP){
+ deviceName = name;
+ }
if (keyName.isNull() && deviceName == name) {
keyName = kname;
const QByteArray data = lastx.readLine(1024);
//shutdown system down 4.19.0-amd64-des Fri Sep 30 17:53:17 2022 - Sat Oct 8 08:32:47 2022 (7+14:39)
if (data.startsWith("shutdown")) {
+#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
+ QString timeFmt = QString(data).split(' ', Qt::SkipEmptyParts).mid(4, 5).join(' ');
+#else
QString timeFmt = QString(data).split(' ', QString::SkipEmptyParts).mid(4, 5).join(' ');
+#endif
dt = QDateTime::fromString(timeFmt);
break;
}
#error "DTK_VERSION or DTK_VERSION_STR not defined!"
#endif
-void doubleLoadCheck()
-{
- QFile f("/proc/self/maps");
- if (!f.open(QIODevice::ReadOnly))
- qFatal("%s", f.errorString().toLocal8Bit().data());
-
- const QByteArray &data = f.readAll();
- QTextStream ts(data);
- QString modulePath;
- while (Q_UNLIKELY(!ts.atEnd())) {
- const QString line = ts.readLine();
- const QStringList &maps = line.split(' ', QString::SplitBehavior::SkipEmptyParts);
- if (Q_UNLIKELY(maps.size() < 6))
- continue;
-
- QFileInfo info(maps.value(5));
- const QString &infoAbPath = info.absoluteFilePath();
- if (modulePath == infoAbPath || !info.fileName().contains("dtkcore") || info.fileName().contains("dtkcore.so.2"))
- continue;
-
- if (modulePath.isEmpty()) {
- modulePath = infoAbPath;
- } else {
- // modulePath != infoAbPath
- QByteArray msg;
- msg += modulePath + " and " + info.absoluteFilePath() + " both loaded";
- qFatal("%s", msg.data());
- }
- }
-}
-
-// 在库被加载时就执行此函数
-__attribute__((constructor)) void init()
-{
- doubleLoadCheck();
-}
-
int dtkVersion()
{
return DTK_VERSION;
#ifdef QT_DEBUG
qWarning() << "Use DTK_VERSION_STR instead.";
#endif
- return "";//DTK_VERSION_STR;
+ return ""; // DTK_VERSION_STR;
}
}
/*!
- \class Dtk::Core::DBaseFileWatcher
- \inmodule dtkcore
+@~english
+ @class Dtk::Core::DBaseFileWatcher
+ @ingroup dtkcore
- \brief The DBaseFileWatcher class provides an interface for monitoring files and directories for modifications.
- \brief DBaseFileWatcher 类提供了一系列接口可供监视文件和目录的变动。
+ @brief The DBaseFileWatcher class provides an interface for monitoring files and directories for modifications.
*/
DBaseFileWatcher::~DBaseFileWatcher()
}
/*!
- \brief 开始文件变动监视
- \brief Let file watcher start watching file changes.
- \return 成功开始返回 true ,否则返回 false.
-
- \sa stopWatcher(), restartWatcher()
+@~english
+ @brief Let file watcher start watching file changes.
+ @sa stopWatcher(), restartWatcher()
*/
bool DBaseFileWatcher::startWatcher()
{
}
/*!
- \brief 停止文件变动监视.
- \brief Stop watching file changes.
- \return 成功停止返回 true ,否则返回 false.
-
- \sa startWatcher(), restartWatcher()
+@~english
+ @brief Stop watching file changes.
+ @sa startWatcher(), restartWatcher()
*/
bool DBaseFileWatcher::stopWatcher()
{
}
/*!
- \brief 重新开始文件变动监视.
- \brief Stop file watcher and then restart it to watching file changes.
- \return 成功开启返回 true,否则返回 false.
-
- \sa startWatcher(), stopWatcher()
+@~english
+ @brief Stop file watcher and then restart it to watching file changes.
+ @sa startWatcher(), stopWatcher()
*/
bool DBaseFileWatcher::restartWatcher()
{
}
/*!
- \brief 设置是否对 \a subfileUrl 目录启用文件监视
- \brief Set enable file watcher for \a subfileUrl or not
-
- \a subfileUrl 设置所针对的 Url
- \a subfileUrl The given url
-
- \a enabled 是否启用文件变动监视
- \a enabled Enable file change watching or not.
+@~english
+ @brief Set enable file watcher for \a subfileUrl or not
+ @param[in] subfileUrl The given url
+ @param[in] enabled Enable file change watching or not.
*/
void DBaseFileWatcher::setEnabledSubfileWatcher(const QUrl &subfileUrl, bool enabled)
{
}
/*!
- \brief 发送一个信号表示目标目录 \a targetUrl 得到了一个 \a signal 信号,包含参数 \a arg1 。
- \brief Emit a signal about \a targetUrl got a \a signal with \a arg1
-
- 示例用法:
+@~english
+ @brief Emit a signal about \a targetUrl got a \a signal with \a arg1
Example usage:
-
- \code
+
+ @code
DBaseFileWatcher::ghostSignal(QUrl("bookmark:///"), &DBaseFileWatcher::fileDeleted, QUrl("bookmark:///bookmarkFile1"));
- \endcode
+ @endcode
- \return 成功发送返回 true,否则返回 false.
+ @return 成功发送返回 true,否则返回 false.
*/
bool DBaseFileWatcher::ghostSignal(const QUrl &targetUrl, DBaseFileWatcher::SignalType1 signal, const QUrl &arg1)
{
}
/*!
- \brief 发送一个信号表示目标目录 \a targetUrl 得到了一个 \a signal 信号,包含参数 \a arg1 和 arg2。
- \brief Emit a signal about \a targetUrl got a \a signal with \a arg1 and \a arg2
-
- 示例用法:
+@~english
+ @brief Emit a signal about \a targetUrl got a \a signal with \a arg1 and \a arg2
Example usage:
-
- \code
+ @code
DBaseFileWatcher::ghostSignal(QUrl("bookmark:///"), &DBaseFileWatcher::fileMoved, QUrl("bookmark:///bookmarkFile1"), QUrl("bookmark:///NewNameFile1"));
- \endcode
+ @endcode
*/
bool DBaseFileWatcher::ghostSignal(const QUrl &targetUrl, DBaseFileWatcher::SignalType2 signal, const QUrl &arg1, const QUrl &arg2)
{
#include "dcapfile.h"
#include "dobject_p.h"
-#include "dcapmanager.h"
#include "private/dcapfsfileengine_p.h"
#include <private/qdir_p.h>
return DCapFile(fileName).exists();
}
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
QString DCapFile::readLink() const
{
D_DC(DCapFile);
if (!d->canReadWrite(d->fileName))
return {};
- return QFile::readLink();
+ return QFile::symLinkTarget();
}
+#endif
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
QString DCapFile::symLinkTarget() const
{
- return readLink();
+ return QFile::symLinkTarget();
}
#endif
extern QString _d_cleanPath(const QString &path);
extern bool _d_isSubFileOf(const QString &filePath, const QString &directoryPath);
+#if QT_VERSION < QT_VERSION_CHECK(6, 8, 0)
static bool capDirIteraterHasNext(QAbstractFileEngineIterator *it)
{
const QStringList &paths = DCapManager::instance()->paths();
QString path = it->path();
QFileInfo info(path);
if (info.isSymLink())
- info = info.symLinkTarget();
+ info = QFileInfo{info.symLinkTarget()};
bool ret = std::any_of(paths.cbegin(), paths.cend(), std::bind(_d_isSubFileOf, path, std::placeholders::_1));
return ret;
return DVtableHook::callOriginalFun(it, &QAbstractFileEngineIterator::hasNext);
}
+#endif
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+std::unique_ptr<QAbstractFileEngine> DCapFSFileEngineHandler::create(const QString &fileName) const
+#else
QAbstractFileEngine *DCapFSFileEngineHandler::create(const QString &fileName) const
+#endif
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ return std::unique_ptr<QAbstractFileEngine>(new DCapFSFileEngine(fileName));
+#else
return new DCapFSFileEngine(fileName);
+#endif
}
{
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+bool DCapFSFileEngine::open(QIODevice::OpenMode openMode, std::optional<QFile::Permissions> permissions)
+#else
bool DCapFSFileEngine::open(QIODevice::OpenMode openMode)
+#endif
{
D_D(DCapFSFileEngine);
if (!d->canReadWrite(d->file))
return false;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ return QFSFileEngine::open(openMode, permissions);
+#else
return QFSFileEngine::open(openMode);
+#endif
}
bool DCapFSFileEngine::remove()
return QFSFileEngine::link(newName);
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+bool DCapFSFileEngine::mkdir(const QString &dirName,
+ bool createParentDirectories,
+ std::optional<QFile::Permissions> permissions) const
+#else
bool DCapFSFileEngine::mkdir(const QString &dirName, bool createParentDirectories) const
+#endif
{
D_DC(DCapFSFileEngine);
if (!d->canReadWrite(dirName))
return false;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ return QFSFileEngine::mkdir(dirName, createParentDirectories, permissions);
+#else
return QFSFileEngine::mkdir(dirName, createParentDirectories);
+#endif
}
bool DCapFSFileEngine::rmdir(const QString &dirName, bool recurseParentDirectories) const
return {};
return QFSFileEngine::entryList(filters, filterNames);
}
-
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
+QAbstractFileEngine::IteratorUniquePtr DCapFSFileEngine::beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames)
+#elif QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+QAbstractFileEngine::IteratorUniquePtr DCapFSFileEngine::beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames)
+#else
QAbstractFileEngine::Iterator *DCapFSFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames)
+#endif
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ auto ret = QFSFileEngine::beginEntryList(path, filters, filterNames);
+#else
auto ret = QFSFileEngine::beginEntryList(filters, filterNames);
DVtableHook::overrideVfptrFun(ret, &QAbstractFileEngineIterator::hasNext, &capDirIteraterHasNext);
+#endif
return ret;
}
static QStringList defaultWriteablePaths() {
QStringList paths;
- int list[] = {
- QStandardPaths::AppConfigLocation, QStandardPaths::AppDataLocation,
- QStandardPaths::CacheLocation, QStandardPaths::TempLocation,
- QStandardPaths::DataLocation, QStandardPaths::GenericConfigLocation,
- QStandardPaths::HomeLocation, QStandardPaths::MusicLocation,
- QStandardPaths::DocumentsLocation, QStandardPaths::MoviesLocation,
- QStandardPaths::PicturesLocation, QStandardPaths::DownloadLocation
- };
+ int list[] = {QStandardPaths::AppConfigLocation,
+ QStandardPaths::AppDataLocation,
+ QStandardPaths::CacheLocation,
+ QStandardPaths::TempLocation,
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QStandardPaths::DataLocation,
+#endif
+ QStandardPaths::GenericConfigLocation,
+ QStandardPaths::HomeLocation,
+ QStandardPaths::MusicLocation,
+ QStandardPaths::DocumentsLocation,
+ QStandardPaths::MoviesLocation,
+ QStandardPaths::PicturesLocation,
+ QStandardPaths::DownloadLocation};
for (uint i = 0; i < sizeof (list) / sizeof (int); ++i) {
const QString &path = QStandardPaths::writableLocation(QStandardPaths::StandardLocation(list[i]));
paths.append(path);
}
- for (int i = 0; i <= static_cast<int>(DStandardPaths::XDG::RuntimeTime); ++i) {
+ for (int i = 0; i <= static_cast<int>(DStandardPaths::XDG::RuntimeDir); ++i) {
const QString &path = DStandardPaths::path(DStandardPaths::XDG(i));
if (path.isEmpty())
continue;
return paths;
}
-static DCapFSFileEngineHandler *globalHandler = nullptr;
-
class DCapManagerPrivate : public DObjectPrivate
{
D_DECLARE_PUBLIC(DCapManager)
return capManager;
}
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
void DCapManager::registerFileEngine()
{
- if (globalHandler)
- return;
- globalHandler = new DCapFSFileEngineHandler;
}
void DCapManager::unregisterFileEngine()
{
- if (!globalHandler)
- return;
- delete globalHandler;
- globalHandler = nullptr;
}
+#endif
void DCapManager::appendPath(const QString &path)
{
}
/*!
- \class Dtk::Core::DFileSystemWatcher
+@~english
+ @class Dtk::Core::DFileSystemWatcher
\inmodule dtkcore
\brief The DFileSystemWatcher class provides an interface for monitoring files and directories for modifications.
they have been renamed or removed from disk, and directories once
they have been removed from disk.
- \note On systems running a Linux kernel without inotify support,
+ @note On systems running a Linux kernel without inotify support,
file systems that contain watched paths cannot be unmounted.
- \note Windows CE does not support directory monitoring by
+ @note Windows CE does not support directory monitoring by
default as this depends on the file system driver installed.
- \note The act of monitoring files and directories for
+ @note The act of monitoring files and directories for
modifications consumes system resources. This implies there is a
limit to the number of files and directories your process can
monitor simultaneously. On all BSD variants, for
/*!
+@~english
Constructs a new file system watcher object with the given \a parent.
*/
DFileSystemWatcher::DFileSystemWatcher(QObject *parent)
}
/*!
+@~english
Constructs a new file system watcher object with the given \a parent
which monitors the specified \a paths list.
*/
}
/*!
+@~english
Destroys the file system watcher.
*/
DFileSystemWatcher::~DFileSystemWatcher()
{ }
/*!
+@~english
Adds \a path to the file system watcher if \a path exists. The
path is not added if it does not exist, or if it is already being
monitored by the file system watcher.
may include the resource not existing, access failures, or the
total watch count limit, if the platform has one.
- \note There may be a system dependent limit to the number of
+ @note There may be a system dependent limit to the number of
files and directories that can be monitored simultaneously.
If this limit is been reached, \a path will not be monitored,
and false is returned.
- \sa addPaths(), removePath()
+ @sa addPaths(), removePath()
*/
bool DFileSystemWatcher::addPath(const QString &path)
{
}
/*!
+@~english
Adds each path in \a paths to the file system watcher. Paths are
not added if they not exist, or if they are already being
monitored by the file system watcher.
may include the resource not existing, access failures, or the
total watch count limit, if the platform has one.
- \note There may be a system dependent limit to the number of
+ @note There may be a system dependent limit to the number of
files and directories that can be monitored simultaneously.
If this limit has been reached, the excess \a paths will not
be monitored, and they will be added to the returned QStringList.
- \sa addPath(), removePaths()
+ @sa addPath(), removePaths()
*/
QStringList DFileSystemWatcher::addPaths(const QStringList &paths)
{
}
/*!
+@~english
Removes the specified \a path from the file system watcher.
If the watch is successfully removed, true is returned.
Reasons for watch removal failing are generally system-dependent,
but may be due to the path having already been deleted, for example.
- \sa removePaths(), addPath()
+ @sa removePaths(), addPath()
*/
bool DFileSystemWatcher::removePath(const QString &path)
{
}
/*!
+@~english
Removes the specified \a paths from the file system watcher.
The return value is a list of paths which were not able to be
Reasons for watch removal failing are generally system-dependent,
but may be due to the path having already been deleted, for example.
- \sa removePath(), addPaths()
+ @sa removePath(), addPaths()
*/
QStringList DFileSystemWatcher::removePaths(const QStringList &paths)
{
}
/*!
- \fn void DFileSystemWatcher::fileChanged(const QString &path)
+@~english
+ @fn void DFileSystemWatcher::fileChanged(const QString &path)
This signal is emitted when the file at the specified \a path is
modified, renamed or removed from disk.
- \sa directoryChanged()
+ @sa directoryChanged()
*/
/*!
- \fn void DFileSystemWatcher::directoryChanged(const QString &path)
+@~english
+ @fn void DFileSystemWatcher::directoryChanged(const QString &path)
This signal is emitted when the directory at a specified \a path
is modified (e.g., when a file is added or deleted) or removed
However, the last change in the sequence of changes will always
generate this signal.
- \sa fileChanged()
+ @sa fileChanged()
*/
/*!
- \fn QStringList DFileSystemWatcher::directories() const
+@~english
+ @fn QStringList DFileSystemWatcher::directories() const
Returns a list of paths to directories that are being watched.
- \sa files()
+ @sa files()
*/
/*!
- \fn QStringList DFileSystemWatcher::files() const
+@~english
+ @fn QStringList DFileSystemWatcher::files() const
Returns a list of paths to files that are being watched.
- \sa directories()
+ @sa directories()
*/
QStringList DFileSystemWatcher::directories() const
#include <QDir>
#include <QSocketNotifier>
#include <QDebug>
+#include <QMultiMap>
#include <sys/inotify.h>
#include <sys/fcntl.h>
if ((event.mask & (IN_DELETE_SELF | IN_MOVE_SELF | IN_UNMOUNT)) != 0) {
do {
if (event.mask & IN_MOVE_SELF) {
- QMap<int, QString>::const_iterator iterator = cookieToFilePath.constBegin();
+ QMultiMap<int, QString>::const_iterator iterator = cookieToFilePath.constBegin();
bool isMove = false;
}
/*!
+@~english
\class Dtk::Core::DFileWatcher
\inmodule dtkcore
\brief The DFileWatcher class provides an implementation of DBaseFileWatcher for monitoring files and directories for modifications.
- \brief DFileWatcher 类提供了对 DBaseFileWatcher 接口的实现,可供监视文件和目录的变动。
*/
DFileWatcher::DFileWatcher(const QString &filePath, QObject *parent)
-// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2017 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
DFileWatcherManagerPrivate::DFileWatcherManagerPrivate(DFileWatcherManager *qq)
: DObjectPrivate(qq)
{
-
}
/*!
+@~english
\class Dtk::Core::DFileWatcherManager
\inmodule dtkcore
\brief The DFileWatcherManager class can help you manage file watchers and get signal when file got changed.
- \brief DFileWatcherManager 类可以帮助管理一系列 DFileWatcher 文件监视器,并在文件变动时发送信号通知.
*/
DFileWatcherManager::DFileWatcherManager(QObject *parent)
: QObject(parent)
, DObject(*new DFileWatcherManagerPrivate(this))
{
-
}
-DFileWatcherManager::~DFileWatcherManager()
-{
-
-}
+DFileWatcherManager::~DFileWatcherManager() {}
/*!
- \brief 为路径 \a filePath 创建 DFileWatcher 并将其添加到 DFileWatcherManager 中.
+@~english
\brief Add file watcher for \a filePath to the file watcher manager.
-
- \return 被创建并添加到 DFileWatcherManager 的 DFileWatcher
\return The file watcher which got created and added into the file watcher manager.
*/
DFileWatcher *DFileWatcherManager::add(const QString &filePath)
watcher = new DFileWatcher(filePath, this);
- connect(watcher, &DFileWatcher::fileAttributeChanged, this, [this](const QUrl & url) {
+ connect(watcher, &DFileWatcher::fileAttributeChanged, this, [this](const QUrl &url) {
Q_EMIT fileAttributeChanged(url.toLocalFile());
});
- connect(watcher, &DFileWatcher::fileClosed, this, [this](const QUrl & url) {
- Q_EMIT fileClosed(url.toLocalFile());
- });
- connect(watcher, &DFileWatcher::fileDeleted, this, [this](const QUrl & url) {
- Q_EMIT fileDeleted(url.toLocalFile());
- });
- connect(watcher, &DFileWatcher::fileModified, this, [this](const QUrl & url) {
- Q_EMIT fileModified(url.toLocalFile());
- });
- connect(watcher, &DFileWatcher::fileMoved, this, [this](const QUrl & fromUrl, const QUrl & toUrl) {
+ connect(watcher, &DFileWatcher::fileClosed, this, [this](const QUrl &url) { Q_EMIT fileClosed(url.toLocalFile()); });
+ connect(watcher, &DFileWatcher::fileDeleted, this, [this](const QUrl &url) { Q_EMIT fileDeleted(url.toLocalFile()); });
+ connect(watcher, &DFileWatcher::fileModified, this, [this](const QUrl &url) { Q_EMIT fileModified(url.toLocalFile()); });
+ connect(watcher, &DFileWatcher::fileMoved, this, [this](const QUrl &fromUrl, const QUrl &toUrl) {
Q_EMIT fileMoved(fromUrl.toLocalFile(), toUrl.toLocalFile());
});
- connect(watcher, &DFileWatcher::subfileCreated, this, [this](const QUrl & url) {
- Q_EMIT subfileCreated(url.toLocalFile());
- });
+ connect(watcher, &DFileWatcher::subfileCreated, this, [this](const QUrl &url) { Q_EMIT subfileCreated(url.toLocalFile()); });
d->watchersMap[filePath] = watcher;
watcher->startWatcher();
}
/*!
- \brief 从当前 DFileWatcherManager 中移除监视 \a filePath 的 DFileWatcher.
+@~english
\brief Remove file watcher for \a filePath from the file watcher manager.
*/
void DFileWatcherManager::remove(const QString &filePath)
}
}
+/*!
+@~english
+ @brief Remove all file watcher
+*/
+void DFileWatcherManager::removeAll()
+{
+ Q_D(DFileWatcherManager);
+ for (auto it : d->watchersMap) {
+ it->deleteLater();
+ }
+ d->watchersMap.clear();
+}
+
+/*!
+@~english
+ @brief Show all file watcher
+*/
+QStringList DFileWatcherManager::watchedFiles() const
+{
+ Q_D(const DFileWatcherManager);
+ return d->watchersMap.keys();
+}
+
DCORE_END_NAMESPACE
if (!home.isEmpty())
return QString::fromLocal8Bit(home);
- struct passwd *pw = getpwuid(getuid());
- const char *homedir = pw->pw_dir;
- return QString::fromLocal8Bit(homedir);
+ return homePath(getuid());
}
QString DStandardPaths::path(DStandardPaths::XDG type)
return QString::fromLocal8Bit(path);
return homePath() + QStringLiteral("/.config");
}
- case XDG::RuntimeTime: {
+ case XDG::RuntimeDir: {
const QByteArray &path = qgetenv("XDG_RUNTIME_DIR");
if (!path.isEmpty())
return QString::fromLocal8Bit(path);
return QStringLiteral("/run/user/") + QString::number(getuid());
}
+ case XDG::StateHome: {
+ const QByteArray &path = qgetenv("XDG_STATE_HOME");
+ if (!path.isEmpty())
+ return QString::fromLocal8Bit(path);
+#ifdef Q_OS_LINUX
+ return homePath() + QStringLiteral("/.local/state");
+#else
+ // TODO: handle it on mac
+ return QString();
+#endif
+ }
}
return QString();
}
data.append("[Trash Info]\n");
data.append("Path=").append(sourceFilePath.toUtf8().toPercentEncoding("/")).append("\n");
- data.append("DeletionDate=").append(datetime.toString(Qt::ISODate)).append("\n");
+ data.append("DeletionDate=").append(datetime.toString(Qt::ISODate).toLatin1()).append("\n");
qint64 size = metadata.write(data);
metadata.close();
class DCapFSFileEngineHandler : public QAbstractFileEngineHandler
{
public:
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override;
+#else
QAbstractFileEngine *create(const QString &fileName) const override;
+#endif
};
class DCapFSFileEnginePrivate;
DCapFSFileEngine(const QString &file);
~DCapFSFileEngine() override;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ bool open(QIODevice::OpenMode openMode, std::optional<QFile::Permissions> permissions = std::nullopt) override;
+#else
bool open(QIODevice::OpenMode openMode) override;
+#endif
bool remove() override;
bool copy(const QString &newName) override;
bool rename(const QString &newName) override;
bool renameOverwrite(const QString &newName) override;
bool link(const QString &newName) override;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)
+ bool mkdir(const QString &dirName,
+ bool createParentDirectories,
+ std::optional<QFile::Permissions> permissions = std::nullopt) const override;
+#else
bool mkdir(const QString &dirName, bool createParentDirectories) const override;
+#endif
bool rmdir(const QString &dirName, bool recurseParentDirectories) const override;
FileFlags fileFlags(FileFlags type) const override;
bool cloneTo(QAbstractFileEngine *target) override;
bool setSize(qint64 size) override;
QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const override;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 1)
+ IteratorUniquePtr beginEntryList(const QString &path, QDirListing::IteratorFlags filters, const QStringList &filterNames) override;
+#elif QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
+ IteratorUniquePtr beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override;
+#else
Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+#endif
bool canReadWrite(const QString &path) const;
};
+set(OUTER_SOURCE
+ ${CMAKE_CURRENT_LIST_DIR}/dconfig.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/dsgapplication.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/dsysinfo.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/dlicenseinfo.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/dsecurestring.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/ddesktopentry.cpp
+)
+
+if (NOT DTK_VERSION_MAJOR)
+ list(APPEND OUTER_SOURCE ${CMAKE_CURRENT_LIST_DIR}/dtkcore_global.cpp)
+endif()
+
+set(OUTER_HEADER
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/dtkcore_global.h
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/dconfig.h
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/dsgapplication.h
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/dsysinfo.h
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/dlicenseinfo.h
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/dsecurestring.h
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/ddesktopentry.h
+)
+
if(LINUX)
- file(GLOB OUTER_SOURCE
- ${CMAKE_CURRENT_LIST_DIR}/*.cpp
+ if(DEFINED D_DSG_APP_DATA_FALLBACK)
+ add_definitions(-DD_DSG_APP_DATA_FALLBACK="${D_DSG_APP_DATA_FALLBACK}")
+ endif()
+ list(APPEND OUTER_SOURCE
+ ${CMAKE_CURRENT_LIST_DIR}/dconfigfile.cpp
)
- file(GLOB OUTER_HEADER
- ${CMAKE_CURRENT_LIST_DIR}/../include/global/*.h
+ list(APPEND OUTER_HEADER
+ ${CMAKE_CURRENT_LIST_DIR}/../include/global/dconfigfile.h
)
+# generic dbus interfaces
+ if(NOT DEFINED DTK_DISABLE_DBUS_CONFIG)
+ include(${CMAKE_CURRENT_LIST_DIR}/dbus/dbus.cmake)
+ list(APPEND glob_SRC ${dbus_SRCS})
+ else()
+ add_definitions(-DD_DISABLE_DBUS_CONFIG)
+ endif()
else()
- set(OUTER_SOURCE
- ${CMAKE_CURRENT_LIST_DIR}/dconfig.cpp
- ${CMAKE_CURRENT_LIST_DIR}/dsgapplication.cpp
- ${CMAKE_CURRENT_LIST_DIR}/dsysinfo.cpp
- ${CMAKE_CURRENT_LIST_DIR}/dsecurestring.cpp
- ${CMAKE_CURRENT_LIST_DIR}/ddesktopentry.cpp
- ${CMAKE_CURRENT_LIST_DIR}/dtkcore_global.cpp
- )
- set(OUTER_HEADER
- ${CMAKE_CURRENT_LIST_DIR}/../include/global/dtkcore_global.h
- ${CMAKE_CURRENT_LIST_DIR}/../include/dconfig.h
- ${CMAKE_CURRENT_LIST_DIR}/../include/dsgapplication.h
- ${CMAKE_CURRENT_LIST_DIR}/../include/dsysinfo.h
- ${CMAKE_CURRENT_LIST_DIR}/../include/dsecurestring.h
- ${CMAKE_CURRENT_LIST_DIR}/../include/ddesktopentry.h
- )
+ add_definitions(-DD_DISABLE_DCONFIG)
endif()
-set(glob_SRC
+
+list(APPEND glob_SRC
${OUTER_HEADER}
${OUTER_SOURCE}
)
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#include "AbstractAppender.h"
-
-DCORE_BEGIN_NAMESPACE
-
-/*!
- \class Dtk::Core::AbstractAppender
- \inmodule dtkcore
-
- \brief The AbstractAppender class provides an abstract base class for writing a log entries.
-
- The AbstractAppender class is the base interface class for all log appenders that could be used with Logger.
-
- AbstractAppender provides a common implementation for the thread safe, mutex-protected logging of application
- messages, such as ConsoleAppender, FileAppender or something else. AbstractAppender is abstract and can not be
- instantiated, but you can use any of its subclasses or create a custom log appender at your choice.
-
- Appenders are the logical devices that is aimed to be attached to Logger object by calling
- Logger::registerAppender(). On each log record call from the application Logger object sequentially calls write()
- function on all the appenders registered in it.
-
- You can subclass AbstractAppender to implement a logging target of any kind you like. It may be the external logging
- subsystem (for example, syslog in *nix), XML file, SQL database entries, D-Bus messages or anything else you can
- imagine.
-
- For the simple non-structured plain text logging (for example, to a plain text file or to the console output) you may
- like to subclass the AbstractStringAppender instead of AbstractAppender, which will give you a more convenient way to
- control the format of the log output.
-
- \sa AbstractStringAppender
- \sa Logger::registerAppender()
- */
-
-
-/*!
- \brief Constructs a AbstractAppender object.
- */
-AbstractAppender::AbstractAppender()
- :m_detailsLevel(Logger::Debug)
-{
-
-}
-
-/*!
- \brief Destructs the AbstractAppender object.
- */
-AbstractAppender::~AbstractAppender()
-{
-
-}
-
-/*!
- \brief Returns the current details level of appender.
-
- Log records with a log level lower than a current detailsLevel() will be silently ignored by appender and would not
- be sent to its append() function.
-
- It provides additional logging flexibility, allowing you to set the different severity levels for different types
- of logs.
-
- \note This function is thread safe.
-
- \return The log level.
-
- \sa setDetailsLevel()
- \sa Logger::LogLevel
- */
-Logger::LogLevel AbstractAppender::detailsLevel() const
-{
- QMutexLocker locker(&m_detailsLevelMutex);
- return m_detailsLevel;
-}
-
-/*!
- \brief Sets the current details level of appender.
-
- Default details \a level is Logger::Debug
-
- \note This function is thread safe.
-
- \sa detailsLevel()
- \sa Logger::LogLevel
- */
-void Dtk::Core::AbstractAppender::setDetailsLevel(Logger::LogLevel level)
-{
- QMutexLocker locker(&m_detailsLevelMutex);
- m_detailsLevel = level;
-}
-
-/*!
- \brief Sets the current details \a level of appender.
-
- This function is provided for convenience, it behaves like an above function.
-
- \sa detailsLevel()
- \sa Logger::LogLevel
- */
-void AbstractAppender::setDetailsLevel(const QString &level)
-{
- setDetailsLevel(Logger::levelFromString(level));
-}
-
-/*!
- \brief Tries to write the log record to this logger.
-
- This is the function called by Logger object to write a log \a message to the appender.
-
- The \a time parameter indicates the time stamp.
- The \a level parameter describes the LogLevel.
- The \a file parameter is the current file name.
- The \a line parameter indicates the number of lines to output.
- The \a func parameter indicates the function name to output.
- The \a category parameter indicates the log category.
- The \a msg parameter indicates the output message.
-
- \note This function is thread safe.
-
- \sa Logger::write()
- \sa detailsLevel()
- */
-void AbstractAppender::write(const QDateTime &time, Logger::LogLevel level, const char *file, int line, const char *func, const QString &category, const QString &msg)
-{
- if (level < detailsLevel())
- return;
-
- QMutexLocker locker(&m_writeMutex);
- append(time, level, file, line, func, category, msg);
-}
-
-/*!
- \fn virtual void AbstractAppender::append(const QDateTime &timeStamp, Logger::LogLevel level, const char *file, int line,
- const char *function, const QString &category, const QString &message) = 0
-
- \brief Writes the log record to the logger instance
-
- This function is called every time when user tries to write a message to this AbstractAppender instance using
- the write() function. Write function works as proxy and transfers only the messages with log level more or equal
- to the current logLevel().
-
- Overload this function when you are implementing a custom appender.
-
- The \a time parameter indicates the time stamp.
- The \a level parameter describes the LogLevel.
- The \a file parameter is the current file name.
- The \a line parameter indicates the number of lines to output.
- The \a func parameter indicates the function name to output.
- The \a category parameter indicates the log category.
- The \a msg parameter indicates the output message.
-
- \note This function is not needed to be thread safe because it is never called directly by Logger object. The
- write() function works as a proxy and protects this function from concurrent access.
-
- \sa Logger::write()
- */
-
-DCORE_END_NAMESPACE
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#include "AbstractStringAppender.h"
-
-#include <QRegExp>
-#include <QCoreApplication>
-#include <QThread>
-
-DCORE_BEGIN_NAMESPACE
-
-/*!
- \class Dtk::Core::AbstractStringAppender
- \inmodule dtkcore
-
- \brief The AbstractStringAppender class provides a convenient base for appenders working with plain text formatted
- logs.
-
- AbstractSringAppender is the simple extension of the AbstractAppender class providing the convenient way to create
- custom log appenders working with a plain text formatted log targets.
-
- It have the formattedString() protected function that formats the logging arguments according to a format set with
- setFormat().
-
- This class can not be directly instantiated because it contains pure virtual function inherited from AbstractAppender
- class.
-
- For more detailed description of customizing the log output format see the documentation on the setFormat() function.
- */
-
-const char formattingMarker = '%';
-
-/*!
- \brief Constructs a new string appender object.
- */
-AbstractStringAppender::AbstractStringAppender()
- : m_format(QLatin1String("%{time}{yyyy-MM-ddTHH:mm:ss.zzz} [%{type:-7}] <%{function}> %{message}\n"))
-{
-
-}
-
-/*!
- \brief Returns the current log format string.
-
- The default format is set to "%{time}{yyyy-MM-ddTHH:mm:ss.zzz} [%{type:-7}] <%{function}> %{message}\n". You can set a different log record
- format using the setFormat() function.
-
- \sa setFormat(const QString&)
- */
-QString AbstractStringAppender::format() const
-{
- QReadLocker locker(&m_formatLock);
- return m_format;
-}
-
-/*!
- \brief Sets the logging format for writing strings to the log target with this appender.
-
- The string format seems to be very common to those developers who have used a standard sprintf function.
-
- Log output format is a simple QString with the special markers (starting with % sign) which will be replaced with
- it's internal meaning when writing a log record.
-
- Controlling marker begins with the percent sign (%) which is followed by the command inside {} brackets
- (the command describes, what will be put to log record instead of marker).
- Optional field width argument may be specified right after the command (through the colon symbol before the closing bracket)
- Some commands requires an additional formatting argument (in the second {} brackets).
-
- Field width argument works almost identically to the QString::arg() fieldWidth argument (and uses it
- internally). For example, "%{type:-7}" will be replaced with the left padded debug level of the message
- ("Debug ") or something. For the more detailed description of it you may consider to look to the Qt
- Reference Documentation.
-
- Supported marker commands are:
- \list
- \li %{time} - timestamp. You may specify your custom timestamp \a format using the second {} brackets after the marker,
- \li timestamp \a format here will be similar to those used in QDateTime::toString() function. For example,
- \li "%{time}{dd-MM-yyyy, HH:mm}" may be replaced with "17-12-2010, 20:17" depending on current date and time.
- \li The default \a format used here is "HH:mm:ss.zzz".
- \li %{type} - Log level. Possible log levels are shown in the Logger::LogLevel enumerator.
- \li %{Type} - Uppercased log level.
- \li %{typeOne} - One letter log level.
- \li %{TypeOne} - One uppercase letter log level.
- \li %{File} - Full source file name (with path) of the file that requested log recording. Uses the __FILE__
- \li preprocessor macro.
- \li %{file} - Short file name (with stripped path).
- \li %{line} - Line number in the source file. Uses the __LINE__ preprocessor macro.
- \li %{Function} - Name of function that called on of the LOG_* macros. Uses the Q_FUNC_INFO macro provided with
- \li Qt.
- \li %{function} - Similar to the %{Function}, but the function name is stripped using stripFunctionName
- \li %{message} - The log message sent by the caller.
- \li %{category} - The log category.
- \li %{appname} - Application name (returned by QCoreApplication::applicationName() function).
- \li %{pid} - Application pid (returned by QCoreApplication::applicationPid() function).
- \li %{threadid} - ID of current thread.
- \li %% - Convinient marker that is replaced with the single % mark.
- \endlist
-
- \note Format doesn't add '\\n' to the end of the \a format line. Please consider adding it manually.
-
- \sa format()
- \sa stripFunctionName()
- \sa Logger::LogLevel
- */
-void AbstractStringAppender::setFormat(const QString &format)
-{
- QWriteLocker locker(&m_formatLock);
- m_format = format;
-}
-
-/*!
- \brief Strips the long function signature (as added by Q_FUNC_INFO macro).
-
- The string processing drops the returning type, arguments and template parameters of function. It is definitely
- useful for enchancing the log output readability.
-
- The \a name parameter is the function name.
-
- \return stripped function name
- */
-QString AbstractStringAppender::stripFunctionName(const char *name)
-{
- return QString::fromLatin1(qCleanupFuncinfo(name));
-}
-
-// The function was backported from Qt5 sources (qlogging.h)
-QByteArray AbstractStringAppender::qCleanupFuncinfo(const char *name)
-{
- QByteArray info(name);
-
- // Strip the function info down to the base function name
- // note that this throws away the template definitions,
- // the parameter types (overloads) and any const/volatile qualifiers.
- if (info.isEmpty())
- return info;
-
- int pos;
-
- // skip trailing [with XXX] for templates (gcc)
- pos = info.size() - 1;
- if (info.endsWith(']')) {
- while (--pos) {
- if (info.at(pos) == '[')
- info.truncate(pos);
- }
- }
-
- bool hasLambda = false;
- QRegExp lambdaRegex("::<lambda\\(.*\\)>");
- int lambdaIndex = lambdaRegex.indexIn(QString::fromLatin1(info));
- if (lambdaIndex != -1)
- {
- hasLambda = true;
- info.remove(lambdaIndex, lambdaRegex.matchedLength());
- }
-
- // operator names with '(', ')', '<', '>' in it
- static const char operator_call[] = "operator()";
- static const char operator_lessThan[] = "operator<";
- static const char operator_greaterThan[] = "operator>";
- static const char operator_lessThanEqual[] = "operator<=";
- static const char operator_greaterThanEqual[] = "operator>=";
-
- // canonize operator names
- info.replace("operator ", "operator");
-
- // remove argument list
- Q_FOREVER {
- int parencount = 0;
- pos = info.lastIndexOf(')');
- if (pos == -1) {
- // Don't know how to parse this function name
- return info;
- }
-
- // find the beginning of the argument list
- --pos;
- ++parencount;
- while (pos && parencount) {
- if (info.at(pos) == ')')
- ++parencount;
- else if (info.at(pos) == '(')
- --parencount;
- --pos;
- }
- if (parencount != 0)
- return info;
-
- info.truncate(++pos);
-
- if (info.at(pos - 1) == ')') {
- if (info.indexOf(operator_call) == pos - (int)strlen(operator_call))
- break;
-
- // this function returns a pointer to a function
- // and we matched the arguments of the return type's parameter list
- // try again
- info.remove(0, info.indexOf('('));
- info.chop(1);
- continue;
- } else {
- break;
- }
- }
-
- if (hasLambda)
- info.append("::lambda");
-
- // find the beginning of the function name
- int parencount = 0;
- int templatecount = 0;
- --pos;
-
- // make sure special characters in operator names are kept
- if (pos > -1) {
- switch (info.at(pos)) {
- case ')':
- if (info.indexOf(operator_call) == pos - (int)strlen(operator_call) + 1)
- pos -= 2;
- break;
- case '<':
- if (info.indexOf(operator_lessThan) == pos - (int)strlen(operator_lessThan) + 1)
- --pos;
- break;
- case '>':
- if (info.indexOf(operator_greaterThan) == pos - (int)strlen(operator_greaterThan) + 1)
- --pos;
- break;
- case '=': {
- int operatorLength = (int)strlen(operator_lessThanEqual);
- if (info.indexOf(operator_lessThanEqual) == pos - operatorLength + 1)
- pos -= 2;
- else if (info.indexOf(operator_greaterThanEqual) == pos - operatorLength + 1)
- pos -= 2;
- break;
- }
- default:
- break;
- }
- }
-
- while (pos > -1) {
- if (parencount < 0 || templatecount < 0)
- return info;
-
- char c = info.at(pos);
- if (c == ')')
- ++parencount;
- else if (c == '(')
- --parencount;
- else if (c == '>')
- ++templatecount;
- else if (c == '<')
- --templatecount;
- else if (c == ' ' && templatecount == 0 && parencount == 0)
- break;
-
- --pos;
- }
- info = info.mid(pos + 1);
-
- // remove trailing '*', '&' that are part of the return argument
- while ((info.at(0) == '*')
- || (info.at(0) == '&'))
- info = info.mid(1);
-
- // we have the full function name now.
- // clean up the templates
- while ((pos = info.lastIndexOf('>')) != -1) {
- if (!info.contains('<'))
- break;
-
- // find the matching close
- int end = pos;
- templatecount = 1;
- --pos;
- while (pos && templatecount) {
- register char c = info.at(pos);
- if (c == '>')
- ++templatecount;
- else if (c == '<')
- --templatecount;
- --pos;
- }
- ++pos;
- info.remove(pos, end - pos + 1);
- }
-
- return info;
-}
-
-/*!
- \brief Returns the string to record to the logging target, formatted according to the format().
-
- \a time The time stamp.
- The \a level parameter describes the LogLevel, and the \a file parameter is the current file name,
- and the \a line parameter indicates the number of lines to output.
- The \a func parameter indicates the function name to output.
- The \a category parameter indicates the log category.
- The \a msg parameter indicates the output message.
-
- \sa format()
- \sa setFormat(const QString&)
- */
-QString AbstractStringAppender::formattedString(const QDateTime &time, Logger::LogLevel level,
- const char *file, int line, const char *func,
- const QString &category, const QString &msg) const
-{
- QString f = format();
- const int size = f.size();
-
- QString result;
-
- int i = 0;
- while (i < f.size()) {
- QChar c = f.at(i);
-
- // We will silently ignore the broken % marker at the end of string
- if (c != QLatin1Char(formattingMarker) || (i + 2) >= size) {
- result.append(c);
- } else {
- i += 2;
- QChar currentChar = f.at(i);
- QString command;
- int fieldWidth = 0;
-
- if (currentChar.isLetter()) {
- command.append(currentChar);
- int j = 1;
- while ((i + j) < size && f.at(i + j).isLetter()) {
- command.append(f.at(i+j));
- j++;
- }
-
- i+=j;
- currentChar = f.at(i);
-
- // Check for the padding instruction
- if (currentChar == QLatin1Char(':')) {
- currentChar = f.at(++i);
- if (currentChar.isDigit() || currentChar.category() == QChar::Punctuation_Dash) {
- int j = 1;
- while ((i + j) < size && f.at(i + j).isDigit()) j++;
-
- fieldWidth = f.mid(i, j).toInt();
- i += j;
- }
- }
- }
-
- // Log record chunk to insert instead of formatting instruction
- QString chunk;
-
- // Time stamp
- if (command == QLatin1String("time")) {
- if (f.at(i + 1) == QLatin1Char('{')) {
- int j = 1;
- while ((i + 2 + j) < size && f.at(i + 2 + j) != QLatin1Char('}')) j++;
-
- if ((i + 2 + j) < size) {
- chunk = time.toString(f.mid(i + 2, j));
-
- i += j;
- i += 2;
- }
- }
-
- if (chunk.isNull())
- chunk = time.toString(QLatin1String("HH:mm:ss.zzz"));
-
- } else if (command == QLatin1String("type")) {
- // Log level
- chunk = Logger::levelToString(level);
- } else if (command == QLatin1String("Type")) {
- // Uppercased log level
- chunk = Logger::levelToString(level).toUpper();
- } else if (command == QLatin1String("typeOne")) {
- // One letter log level
- chunk = Logger::levelToString(level).left(1).toLower();
- } else if (command == QLatin1String("TypeOne")) {
- // One uppercase letter log level
- chunk = Logger::levelToString(level).left(1).toUpper();
- } else if (command == QLatin1String("File")) {
- // Filename
- chunk = QLatin1String(file);
- } else if (command == QLatin1String("file")) {
- // Filename without a path
- chunk = QString(QLatin1String(file)).section('/', -1);
- } else if (command == QLatin1String("line")) {
- // Source line number
- chunk = QString::number(line);
- } else if (command == QLatin1String("Function")) {
- // Function name, as returned by Q_FUNC_INFO
- chunk = QString::fromLatin1(func);
- } else if (command == QLatin1String("function")) {
- // Stripped function name
- chunk = stripFunctionName(func);
- } else if (command == QLatin1String("message")) {
- // Log message
- chunk = msg;
- } else if (command == QLatin1String("category")) {
- // Log message
- chunk = category;
- } else if (command == QLatin1String("pid")) {
- // Application pid
- chunk = QString::number(QCoreApplication::applicationPid());
- } else if (command == QLatin1String("appname")) {
- // Application name
- chunk = QCoreApplication::applicationName();
- } else if (command == QLatin1String("threadid")) {
- // Thread ID (duplicates Qt5 threadid debbuging way)
- chunk = QLatin1String("0x") + QString::number(qlonglong(QThread::currentThread()->currentThread()), 16);
- } else if (command == QString(formattingMarker)) {
- // We simply replace the double formatting marker (%) with one
- chunk = QLatin1Char(formattingMarker);
- } else {
- // Do not process any unknown commands
- chunk = QString(formattingMarker);
- chunk.append(command);
- }
-
- if (!chunk.isEmpty() && chunk != "0") {
- result.append(QString(QLatin1String("%1")).arg(chunk, fieldWidth));
- }
- }
- ++i;
- }
-
- return result;
-}
-
-DCORE_END_NAMESPACE
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-// Local
-#include "ConsoleAppender.h"
-
-// STL
-#include <iostream>
-
-DCORE_BEGIN_NAMESPACE
-
-/*!
- \class Dtk::Core::ConsoleAppender
- \inmodule dtkcore
-
- \brief ConsoleAppender is the simple appender that writes the log records to the std::cerr output stream.
-
- ConsoleAppender uses "[%{type:-7}] <%{function}> %{message}\n" as a default output format. It is similar to the
- AbstractStringAppender but doesn't show a time.
-
- You can modify ConsoleAppender output format without modifying your code by using \c QT_MESSAGE_PATTERN environment
- variable. If you need your application to ignore this environment variable you can call
- ConsoleAppender::ignoreEnvironmentPattern(true)
- */
-
-
-ConsoleAppender::ConsoleAppender()
- : AbstractStringAppender()
- ,m_ignoreEnvPattern(false)
-{
- setFormat("[%{type:-7}] <%{function}> %{message}\n");
-}
-
-
-QString ConsoleAppender::format() const
-{
- const QString envPattern = QString::fromLocal8Bit(qgetenv("QT_MESSAGE_PATTERN"));
- return (m_ignoreEnvPattern || envPattern.isEmpty()) ? AbstractStringAppender::format() : (envPattern + "\n");
-}
-
-
-void ConsoleAppender::ignoreEnvironmentPattern(bool ignore)
-{
- m_ignoreEnvPattern = ignore;
-}
-
-/*!
- \brief Writes the log record to the std::cerr stream.
- \reimp
-
- The \a time parameter indicates the time stamp.
- The \a level parameter describes the LogLevel.
- The \a file parameter is the current file name.
- The \a line parameter indicates the number of lines to output.
- The \a func parameter indicates the function name to output.
- The \a category parameter indicates the log category.
- The \a msg parameter indicates the output message.
-
- \sa AbstractStringAppender::format()
- */
-void ConsoleAppender::append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg)
-{
- std::cerr << qPrintable(formattedString(time, level, file, line, func, category, msg));
-}
-
-DCORE_END_NAMESPACE
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#include "FileAppender.h"
-
-#include <iostream>
-
-DCORE_BEGIN_NAMESPACE
-
-/*!
- \class Dtk::Core::FileAppender
- \inmodule dtkcore
-
- \brief Simple appender that writes the log records to the plain text file.
- */
-
-
-/*!
- \brief Constructs the new file appender assigned to file with the given \a fileName.
- */
-FileAppender::FileAppender(const QString &fileName)
-{
- setFileName(fileName);
-}
-
-
-FileAppender::~FileAppender()
-{
- closeFile();
-}
-
-/*!
- \brief Returns the name set by setFileName() or to the FileAppender constructor.
-
- \sa setFileName()
- */
-QString FileAppender::fileName() const
-{
- QMutexLocker locker(&m_logFileMutex);
- return m_logFile.fileName();
-}
-
-/*!
- \brief Sets the \a s name of the file. The name can have no path, a relative path, or an absolute path.
-
- \sa fileName()
- */
-void FileAppender::setFileName(const QString &s)
-{
- QMutexLocker locker(&m_logFileMutex);
- if (m_logFile.isOpen())
- m_logFile.close();
-
- m_logFile.setFileName(s);
-}
-
-qint64 FileAppender::size() const
-{
- return m_logFile.size();
-}
-
-
-bool FileAppender::openFile()
-{
- bool isOpen = m_logFile.isOpen();
- if (!isOpen) {
- isOpen = m_logFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
- if (isOpen)
- m_logStream.setDevice(&m_logFile);
- else
- std::cerr << "<FileAppender::append> Cannot open the log file " << qPrintable(m_logFile.fileName()) << std::endl;
- }
- return isOpen;
-}
-
-/*!
- \brief Write the log record to the file.
- \reimp
-
- The \a time parameter indicates the time stamp.
- The \a level parameter describes the LogLevel.
- The \a file parameter is the current file name.
- The \a line parameter indicates the number of lines to output.
- The \a func parameter indicates the func name to output.
- The \a category parameter indicates the log category.
- The \a msg parameter indicates the output message.
-
- \sa fileName()
- \sa AbstractStringAppender::format()
- */
-void FileAppender::append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg)
-{
- QMutexLocker locker(&m_logFileMutex);
-
- if (openFile())
- {
- m_logStream << formattedString(time, level, file, line, func, category, msg);
- m_logStream.flush();
- m_logFile.flush();
- }
-}
-
-
-void FileAppender::closeFile()
-{
- QMutexLocker locker(&m_logFileMutex);
- m_logFile.close();
-}
-
-DCORE_END_NAMESPACE
//
// SPDX-License-Identifier: LGPL-3.0-or-later
+#include <QtCore>
#include "LogManager.h"
+#include "dconfig.h"
+#include <DSGApplication>
#include <Logger.h>
#include <ConsoleAppender.h>
#include <RollingFileAppender.h>
+#include <JournalAppender.h>
+#include "dstandardpaths.h"
DCORE_BEGIN_NAMESPACE
+#define RULES_KEY ("rules")
+// Courtesy qstandardpaths_unix.cpp
+static void appendOrganizationAndApp(QString &path)
+{
+#ifndef QT_BOOTSTRAPPED
+ const QString org = QCoreApplication::organizationName();
+ if (!org.isEmpty())
+ path += QLatin1Char('/') + org;
+ const QString appName = QCoreApplication::applicationName();
+ if (!appName.isEmpty())
+ path += QLatin1Char('/') + appName;
+#else
+ Q_UNUSED(path);
+#endif
+}
+
+#define DEFAULT_FMT "%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] [%{file:-20} %{function:-35} %{line}] %{message}"
+
+class DLogManagerPrivate {
+public:
+ explicit DLogManagerPrivate(DLogManager *q)
+ : m_format(DEFAULT_FMT)
+ , q_ptr(q)
+ {
+ }
+
+ DConfig *createDConfig(const QString &appId);
+ void initLoggingRules();
+ void updateLoggingRules();
+
+ QString m_format;
+ QString m_logPath;
+ ConsoleAppender* m_consoleAppender = nullptr;
+ RollingFileAppender* m_rollingFileAppender = nullptr;
+ JournalAppender* m_journalAppender = nullptr;
+ QScopedPointer<DConfig> m_dsgConfig;
+ QScopedPointer<DConfig> m_fallbackConfig;
+
+ DLogManager *q_ptr = nullptr;
+ Q_DECLARE_PUBLIC(DLogManager)
+
+};
+
+DConfig *DLogManagerPrivate::createDConfig(const QString &appId)
+{
+ if (appId.isEmpty())
+ return nullptr;
+
+ DConfig *config = DConfig::create(appId, "org.deepin.dtk.preference");
+ if (!config->isValid()) {
+ qWarning() << "Logging rules config is invalid, please check `appId` [" << appId << "]arg is correct";
+ delete config;
+ config = nullptr;
+ return nullptr;
+ }
+
+ QObject::connect(config, &DConfig::valueChanged, config, [this](const QString &key) {
+ if (key != RULES_KEY)
+ return;
+
+ updateLoggingRules();
+ });
+
+ return config;
+}
+
+void DLogManagerPrivate::initLoggingRules()
+{
+ if (qEnvironmentVariableIsSet("DTK_DISABLED_LOGGING_RULES"))
+ return;
+
+ // 1. 未指定 fallbackId 时,以 dsgAppId 为准
+ QString dsgAppId = DSGApplication::id();
+ m_dsgConfig.reset(createDConfig(dsgAppId));
+
+ QString fallbackId = qgetenv("DTK_LOGGING_FALLBACK_APPID");
+ // 2. fallbackId 和 dsgAppId 非空且不等时,都创建和监听变化
+ if (!fallbackId.isEmpty() && fallbackId != dsgAppId)
+ m_fallbackConfig.reset(createDConfig(fallbackId));
+
+ // 3. 默认值和非默认值时,非默认值优先
+ updateLoggingRules();
+}
+
+void DLogManagerPrivate::updateLoggingRules()
+{
+ QVariant var;
+ // 4. 优先看 dsgConfig 是否默认值,其次 fallback 是否默认值
+ if (m_dsgConfig && !m_dsgConfig->isDefaultValue(RULES_KEY)) {
+ var = m_dsgConfig->value(RULES_KEY);
+ } else if (m_fallbackConfig && !m_fallbackConfig->isDefaultValue(RULES_KEY)) {
+ var = m_fallbackConfig->value(RULES_KEY);
+ } else if (m_dsgConfig) {
+ var = m_dsgConfig->value(RULES_KEY);
+ }
+
+ if (var.isValid())
+ QLoggingCategory::setFilterRules(var.toString().replace(";", "\n"));
+}
/*!
+@~english
\class Dtk::Core::DLogManager
\inmodule dtkcore
-
+
\brief DLogManager is the deepin user application log manager.
*/
DLogManager::DLogManager()
+ :d_ptr(new DLogManagerPrivate(this))
{
-#if !defined(QT_DEBUG) && !defined(QT_MESSAGELOGCONTEXT)
- m_format = "%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] %{message}\n";
-#else
- m_format = "%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] [%{file:-20} %{function:-35} %{line}] %{message}\n";
-#endif
+ d_ptr->initLoggingRules();
}
void DLogManager::initConsoleAppender(){
- m_consoleAppender = new ConsoleAppender;
- m_consoleAppender->setFormat(m_format);
- logger->registerAppender(m_consoleAppender);
+ Q_D(DLogManager);
+ d->m_consoleAppender = new ConsoleAppender;
+ d->m_consoleAppender->setFormat(d->m_format);
+ dlogger->registerAppender(d->m_consoleAppender);
}
void DLogManager::initRollingFileAppender(){
- m_rollingFileAppender = new RollingFileAppender(getlogFilePath());
- m_rollingFileAppender->setFormat(m_format);
- m_rollingFileAppender->setLogFilesLimit(5);
- m_rollingFileAppender->setDatePattern(RollingFileAppender::DailyRollover);
- logger->registerAppender(m_rollingFileAppender);
+ Q_D(DLogManager);
+ d->m_rollingFileAppender = new RollingFileAppender(getlogFilePath());
+ d->m_rollingFileAppender->setFormat(d->m_format);
+ d->m_rollingFileAppender->setLogFilesLimit(5);
+ d->m_rollingFileAppender->setDatePattern(RollingFileAppender::DailyRollover);
+ dlogger->registerAppender(d->m_rollingFileAppender);
+}
+
+void DLogManager::initJournalAppender()
+{
+#if (defined BUILD_WITH_SYSTEMD && defined Q_OS_LINUX)
+ Q_D(DLogManager);
+ d->m_journalAppender = new JournalAppender();
+ dlogger->registerAppender(d->m_journalAppender);
+#else
+ qWarning() << "BUILD_WITH_SYSTEMD not defined or OS not support!!";
+#endif
}
/*!
+@~english
\brief Registers the appender to write the log records to the Console.
\sa registerFileAppender
}
/*!
+@~english
\brief Registers the appender to write the log records to the file.
\sa getlogFilePath
DLogManager::instance()->initRollingFileAppender();
}
+void DLogManager::registerJournalAppender()
+{
+ DLogManager::instance()->initJournalAppender();
+}
+
/*!
+@~english
\brief Return the path file log storage.
- \brief DLogManager::getlogFilePath 获取日志文件路径
- \brief 默认日志路径是 ~/.cache/organizationName/applicationName.log
- \brief 如果获取 HOME 环境变量失败将不写日志
+ \brief DLogManager::getlogFilePath Get the log file path
+ \brief The default log path is ~/.cache/<OrganizationName>/<ApplicationName>.log
+ \brief If the environment variable $HOME cannot be acquired, DLogManager will not log anything
\sa registerFileAppender
*/
QString DLogManager::getlogFilePath()
{
- // 不再构造时去设置默认logpath(且mkdir), 而在getlogPath时再去判断是否设置默认值
- // 修复设置了日志路径还是会在默认的位置创建目录的问题
- if (DLogManager::instance()->m_logPath.isEmpty()) {
- if (QDir::homePath() == QDir::rootPath()) {
- qWarning() << "unable to locate the cache directory."
- << "logfile path is empty, the log will not be written.\r\n"
- << (qgetenv("HOME").isEmpty() ? "the HOME environment variable not set" : "");
+ //No longer set the default log path (and mkdir) when constructing now, instead set the default value if it's empty when getlogFilePath is called.
+ //Fix the problem that the log file is still created in the default path when the log path is set manually.
+ if (DLogManager::instance()->d_func()->m_logPath.isEmpty()) {
+ if (DStandardPaths::homePath().isEmpty()) {
+ qWarning() << "Unable to locate the cache directory, cannot acquire home directory, and the log will not be written to file..";
return QString();
}
- QString cachePath = QStandardPaths::standardLocations(QStandardPaths::CacheLocation).at(0);
+ QString cachePath(DStandardPaths::path(DStandardPaths::XDG::CacheHome));
+ appendOrganizationAndApp(cachePath);
+
if (!QDir(cachePath).exists()) {
QDir(cachePath).mkpath(cachePath);
}
- DLogManager::instance()->m_logPath = DLogManager::instance()->joinPath(cachePath, QString("%1.log").arg(qApp->applicationName()));
+ instance()->d_func()->m_logPath = instance()->joinPath(cachePath, QString("%1.log").arg(qApp->applicationName()));
}
- return QDir::toNativeSeparators(DLogManager::instance()->m_logPath);
+ return QDir::toNativeSeparators(DLogManager::instance()->d_func()->m_logPath);
}
/*!
- \brief DLogManager::setlogFilePath 设置日志文件路径
- \a logFilePath 日志文件路径
- \brief 如果设置的文件路进不是文件路径将什么都不做,输出一条警告
+@~english
+ \brief DLogManager::setlogFilePath Set the log file path
+ \a logFilePath Log file path
+ \brief If the file path set is not the file path, nothing will do, and an output warning
*/
void DLogManager::setlogFilePath(const QString &logFilePath)
{
if (info.exists() && !info.isFile())
qWarning() << "invalid file path:" << logFilePath << " is not a file";
else
- DLogManager::instance()->m_logPath = logFilePath;
+ DLogManager::instance()->d_func()->m_logPath = logFilePath;
}
void DLogManager::setLogFormat(const QString &format)
{
//m_format = "%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] [%{file:-20} %{function:-35} %{line}] %{message}\n";
- DLogManager::instance()->m_format = format;
+ DLogManager::instance()->d_func()->m_format = format;
}
QString DLogManager::joinPath(const QString &path, const QString &fileName){
DLogManager::~DLogManager()
{
-
}
DCORE_END_NAMESPACE
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#include "Logger.h"
-#include "AbstractAppender.h"
-#include "AbstractStringAppender.h"
-
-#include <QCoreApplication>
-#include <QReadWriteLock>
-#include <QSemaphore>
-#include <QMutex>
-#include <QDateTime>
-#include <QIODevice>
-#include <QTextCodec>
-
-#include <iostream>
-
-DCORE_BEGIN_NAMESPACE
-
-/*!
- \headerfile <Logger.h>
- \inmodule dtkcore
- \brief A file containing the description of Logger class and and additional useful macros for logging.
- */
-
-/*!
- \macro Dtk::Core::logger
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::logger
-
- \brief Macro returning the current instance of Logger object
-
- If you haven't created a local Logger object it returns the same value as the Logger::globalInstance() functions.
- This macro is a recommended way to get an access to the Logger instance used in current class.
-
- Example:
- \code
- ConsoleAppender* consoleAppender = new ConsoleAppender;
- logger->registerAppender(consoleAppender);
- \endcode
-
- \sa Dtk::Core::Logger::globalInstance()
- */
-
-/*!
- \macro Dtk::Core::dTrace
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dTrace
-
- \brief Writes the trace log record
-
- This macro is the convenient way to call Logger::write(). It uses the common preprocessor macros \c __FILE__,
- \c __LINE__ and the standard Qt \c Q_FUNC_INFO macros to automatically determine the needed parameters to call
- Logger::write().
-
- \note This and other (dInfo() etc...) macros uses the variadic macro arguments to give convenient usage form for
- the different versions of Logger::write() (using the QString or const char *argument or returning the QDebug class
- instance). Not all compilers will support this. Please, consider reviewing your compiler documentation to ensure
- it support __VA_ARGS__ macro.
-
- \sa Dtk::Core::dInfo Dtk::Core::dDebug Dtk::Core::dWarning Dtk::Core::dError
- \sa Dtk::Core::Logger::LogLevel
- \sa Dtk::Core::Logger::write()
- */
-
-/*!
- \macro Dtk::Core::dDebug
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dDebug
-
- \brief Writes the debug log record
-
- This macro records the debug log record using the Logger::write() function. It works similar to the dTrace()
- macro.
-
- \sa Dtk::Core::dTrace Dtk::Core::dInfo Dtk::Core::dWarning Dtk::Core::dError
- \sa Dtk::Core::Logger::LogLevel
- \sa Dtk::Core::Logger::write()
- */
-
-/*!
- \macro Dtk::Core::dInfo
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dInfo
-
- \brief Writes the info log record
-
- This macro records the info log record using the Logger::write() function. It works similar to the dTrace()
- macro.
-
- \sa Dtk::Core::dTrace Dtk::Core::dDebug Dtk::Core::dWarning Dtk::Core::dError
- \sa Dtk::Core::Logger::LogLevel
- \sa Dtk::Core::Logger::write()
- */
-
-/*!
- \macro Dtk::Core::dWarning
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dWarning
-
- \brief Write the warning log record
-
- This macro records the warning log record using the Logger::write() function. It works similar to the dTrace()
- macro.
-
- \sa Dtk::Core::dTrace Dtk::Core::dInfo Dtk::Core::dDebug Dtk::Core::dError
- \sa Dtk::Core::Logger::LogLevel
- \sa Dtk::Core::Logger::write()
- */
-
-/*!
- \macro Dtk::Core::dError
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dError
-
- \brief Write the error log record
- This macro records the error log record using the Logger::write() function. It works similar to the dTrace()
- macro.
-
- \sa Dtk::Core::dTrace
- \sa Dtk::Core::Logger::LogLevel
- \sa Dtk::Core::Logger::write()
- */
-
-/*!
- \macro Dtk::Core::dFatal
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dFatal
-
- \brief Write the fatal log record
-
- This macro records the fatal log record using the Logger::write() function. It works similar to the dTrace()
- macro.
-
- \note Recording of the log record using the Logger::Fatal log level will lead to calling the STL abort()
- function, which will interrupt the running of your software and begin the writing of the core dump.
-
- \sa Dtk::Core::dTrace
- \sa Dtk::Core::Logger::LogLevel
- \sa Dtk::Core::Logger::write()
- */
-
-/*!
- \macro Dtk::Core::dCTrace(category)
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dCTrace()
-
- \brief Writes the trace log record to the specific category
-
- This macro is the similar to the dTrace() macro, but has a category parameter
- to write only to the category appenders (registered using Logger::registerCategoryAppender() method).
-
- \a category category name string
-
- \sa Dtk::Core::dTrace
- \sa Dtk::Core::Logger::LogLevel
- \sa Dtk::Core::Logger::registerCategoryAppender()
- \sa Dtk::Core::Logger::write()
- \sa Dtk::Core::dCategory(), Dtk::Core::dGlobalCategory()
- */
-
-
-/*!
- \macro Dtk::Core::dCDebug
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dCDebug
-
- \brief Writes the debug log record to the specific category
-
- This macro records the debug log record using the Logger::write() function. It works similar to the dCTrace()
- macro.
-
- \sa Dtk::Core::dCTrace()
- */
-
-/*!
- \macro Dtk::Core::dCInfo
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dCInfo
-
- \brief Writes the info log record to the specific category
-
- This macro records the info log record using the Logger::write() function. It works similar to the dCTrace()
- macro.
-
- \sa Dtk::Core::dCTrace()
- */
-
-/*!
- \macro Dtk::Core::dCWarning
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dCWarning
-
- \brief Writes the warning log record to the specific category
-
- This macro records the warning log record using the Logger::write() function. It works similar to the dCTrace()
- macro.
-
- \sa Dtk::Core::dCTrace()
- */
-
-/*!
- \macro Dtk::Core::dCError
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dCError
-
- \brief Writes the error log record to the specific category
-
- This macro records the error log record using the Logger::write() function. It works similar to the dCTrace()
- macro.
-
- \sa Dtk::Core::dCTrace()
- */
-
-/*!
- \macro Dtk::Core::dCFatal
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dCFatal
-
- \brief Write the fatal log record to the specific category
-
- This macro records the fatal log record using the Logger::write() function. It works similar to the dCTrace()
- macro.
-
- \note Recording of the log record using the Logger::Fatal log level will lead to calling the STL abort()
- function, which will interrupt the running of your software and begin the writing of the core dump.
-
- \sa Dtk::Core::dCTrace()
- */
-
-/*!
- \macro Dtk::Core::dCategory(category)
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dCategory()
-
- \brief Create logger instance inside your custom class to log all messages to the specified \a category
-
- This macro is used to pass all log messages inside your custom class to the specific \a category.
- You must include this macro inside your class declaration (similarly to the Q_OBJECT macro).
- Internally, this macro redefines loggerInstance() function, creates the local Logger object inside your class and
- sets the default category to the specified parameter.
-
- Thus, any call to loggerInstance() (for example, inside dTrace() macro) will return the local Logger object,
- so any logging message will be directed to the default category.
-
- \note This macro does not register any appender to the newly created logger instance. You should register
- logger appenders manually, inside your class.
-
- Usage example:
- \code
- class CustomClass : public QObject
- {
- Q_OBJECT
- dCategory("custom_category")
- ...
- };
-
- CustomClass::CustomClass(QObject* parent) : QObject(parent)
- {
- logger->registerAppender(new FileAppender("custom_category_log"));
- dTrace() << "Trace to the custom category log";
- }
- \endcode
-
- \sa Dtk::Core::Logger::write()
- \sa Dtk::Core::dTrace()
- \sa Dtk::Core::Logger::registerCategoryAppender()
- \sa Dtk::Core::Logger::setDefaultCategory()
- */
-
-/*!
- \macro Dtk::Core::dGlobalCategory(category)
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dGlobalCategory()
-
- \brief Create logger instance inside your custom class to log all messages both to the specified \a category and to
- the global logger instance.
-
- This macro is similar to dCategory(), but also passes all log messages to the global logger instance appenders.
- It is equal to defining the local \a category logger using dCategory macro and calling:
- \code
- logger->logToGlobalInstance(logger->defaultCategory(), true);
- \endcode
-
- \sa Dtk::Core::dCategory
- \sa Dtk::Core::Logger::logToGlobalInstance()
- \sa Dtk::Core::Logger::defaultCategory()
- \sa Dtk::Core::Logger::registerCategoryAppender()
- \sa Dtk::Core::Logger::write()
- */
-
-/*!
- \macro Dtk::Core::dAssert
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dAssert
-
- \brief Check the assertion
-
- This macro is a convenient and recommended to use way to call Logger::writeAssert() function. It uses the
- preprocessor macros (as the dDebug() does) to fill the necessary arguments of the Logger::writeAssert() call. It
- also uses undocumented but rather mature and stable \c qt_noop() function (which does nothing) when the assertion
- is true.
-
- Example:
- \code
- bool b = checkSomething();
- ...
- dAssert(b == true);
- \endcode
-
- \sa Dtk::Core::Logger::writeAssert()
- */
-
-/*!
- \macro Dtk::Core::dTraceTime
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dTraceTime
-
- \brief Logs the processing time of current function / code block
-
- This macro automagically measures the function or code of block execution time and outputs it as a Logger::Trace
- level log record.
-
- Example:
- \code
- int foo()
- {
- dTraceTime();
- ... // Do some long operations
- return 0;
- } // Outputs: Function foo finished in <time> ms.
- \endcode
-
- If you are measuring a code of block execution time you may also add a name of block to the macro:
- \code
- int bar(bool doFoo)
- {
- dTraceTime();
-
- if (doFoo)
- {
- dTraceTime("Foo");
- ...
- }
-
- ...
- }
- // Outputs:
- // "Foo" finished in <time1> ms.
- // Function bar finished in <time2> ms.
- \endcode
-
- \note Macro switches to logging the seconds instead of milliseconds when the execution time reaches 10000 ms.
- \sa Dtk::Core::dDebugTime, Dtk::Core::dInfoTime
- */
-
-/*!
- \macro Dtk::Core::dDebugTime
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dDebugTime
-
- \brief Logs the processing time of current function / code block
-
- This macro automagically measures the function or code of block execution time and outputs it as a Logger::Debug
- level log record. It works similar to dTraceTime() macro.
-
- \sa Dtk::Core::dTraceTime
- */
-
-/*!
- \macro Dtk::Core::dInfoTime
- \relates Dtk::Core::Logger
- \keyword Dtk::Core::dInfoTime
-
- \brief Logs the processing time of current function / code block
-
- This macro automagically measures the function or code of block execution time and outputs it as a Logger::Info
- level log record. It works similar to dTraceTime() macro.
-
- \sa Dtk::Core::dTraceTime
- */
-
-/*!
- \enum Dtk::Core::Logger::LogLevel
- \value Trace
- Can be used for mostly unneeded records used for internal code tracing.
- \value Debug
- Useful for non-necessary records used for the debugging of the software.
- \value Info
- Can be used for informational records, which may be interesting for not only developers.
- \value Warning
- May be used to log some non-fatal warnings detected by your application.
- \value Error
- May be used for a big problems making your application work wrong but not crashing.
- \value Fatal
- Used for unrecoverable errors, crashes the application right after the log record is written.
-*/
-
-/*!
- \class Dtk::Core::Logger
- \inmodule dtkcore
-
- \brief Very simple but rather powerful component which may be used for logging your application activities.
-
- Global logger instance created on a first access to it (e.g. registering appenders, calling a dDebug() macro
- etc.) registers itself as a Qt default message handler and captures all the qDebug/dWarning/qCritical output.
-
- \note Qt 4 qDebug set of macro doesn't support capturing source function name, file name or line number so we
- recommend to use dDebug() and other Logger macros instead.
-
- \sa Dtk::Core::logger
- */
-
-class LogDevice : public QIODevice
-{
-public:
- LogDevice(Logger* l)
- : m_logger(l),
- m_semaphore(1)
- {}
-
- void lock(Logger::LogLevel level, const char *file, int line,
- const char *func, const char *category)
- {
- m_semaphore.acquire();
-
- if (!isOpen())
- open(QIODevice::WriteOnly);
-
- m_logLevel = level;
- m_file = file;
- m_line = line;
- m_function = func;
- m_category = category;
- }
-
-protected:
- qint64 readData(char*, qint64)
- {
- return 0;
- }
-
- qint64 writeData(const char *data, qint64 maxSize)
- {
- if (maxSize > 0) {
- const QString & msg = QString::fromLocal8Bit(QByteArray(data, int(maxSize)));
- m_logger->write(m_logLevel, m_file, m_line,
- m_function, m_category, msg);
- }
-
- m_semaphore.release();
- return maxSize;
- }
-
-private:
- Logger* m_logger;
- QSemaphore m_semaphore;
- Logger::LogLevel m_logLevel;
- const char *m_file;
- int m_line;
- const char *m_function;
- const char *m_category;
-};
-
-// Forward declarations
-//static void cleanupLoggerGlobalInstance();
-
-//#if QT_VERSION >= 0x050000
-//static void qtLoggerMessageHandler(QtMsgType, const QMessageLogContext& context, const QString &msg);
-//#else
-//static void qtLoggerMessageHandler(QtMsgType type, const char *msg);
-//#endif
-
-/*!
- \internal
-
- LoggerPrivate class implements the Singleton pattern in a thread-safe way. It contains a static pointer to the
- global logger instance protected by QReadWriteLock
- */
-class LoggerPrivate
-{
-public:
- static Logger* globalInstance;
- static QReadWriteLock globalInstanceLock;
-
- QList<AbstractAppender*> appenders;
- mutable QMutex loggerMutex;
-
- QMap<QString, bool> categories;
- QMultiMap<QString, AbstractAppender*> categoryAppenders;
- QString defaultCategory;
-
- LogDevice* logDevice;
-};
-
-Logger* LoggerPrivate::globalInstance = nullptr;
-QReadWriteLock LoggerPrivate::globalInstanceLock;
-
-static void cleanupLoggerGlobalInstance()
-{
- QWriteLocker locker(&LoggerPrivate::globalInstanceLock);
-
- delete LoggerPrivate::globalInstance;
- LoggerPrivate::globalInstance = nullptr;
-}
-
-#if QT_VERSION >= 0x050000
-static void qtLoggerMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString &msg)
-{
- Logger::LogLevel level = Logger::Warning;
- switch (type)
- {
- case QtDebugMsg:
- level = Logger::Debug;
- break;
-#if QT_VERSION >= 0x050500
- case QtInfoMsg:
- level = Logger::Info;
- break;
-#endif
- case QtWarningMsg:
- level = Logger::Warning;
- break;
- case QtCriticalMsg:
- level = Logger::Error;
- break;
- case QtFatalMsg:
- level = Logger::Fatal;
- break;
- }
-
- bool isDefaultCategory = QString::fromLatin1(context.category) == "default";
- Logger::globalInstance()->write(level, context.file, context.line, context.function,
- isDefaultCategory ? nullptr : context.category, msg);
-}
-
-#else
-
-static void qtLoggerMessageHandler(QtMsgType type, const char *msg)
-{
- switch (type)
- {
- case QtDebugMsg:
- loggerInstance()->write(Logger::Debug, "", 0, "qDebug", 0, msg);
- break;
- case QtWarningMsg:
- loggerInstance()->write(Logger::Warning, "", 0, "qDebug", 0, msg);
- break;
- case QtCriticalMsg:
- loggerInstance()->write(Logger::Error, "", 0, "qDebug", 0, msg);
- break;
- case QtFatalMsg:
- loggerInstance()->write(Logger::Fatal, "", 0, "qDebug", 0, msg);
- break;
- }
-}
-#endif
-
-
-/*!
- \brief Construct the instance of Logger.
-
- If you're only using one global instance of logger you wouldn't probably need to use this constructor manually.
- Consider using [logger](@ref logger) macro instead to access the logger instance
- */
-Logger::Logger()
- : d_ptr(new LoggerPrivate)
-{
- Q_D(Logger);
- d->logDevice = new LogDevice(this);
-}
-
-/*!
- \brief Construct the instance of Logger and set logger default category.
-
- If you're only using one global instance of logger you wouldn't probably need to use this constructor manually.
- Consider using logger macro instead to access the logger instance and call setDefaultCategory method.
-
- \sa Logger()
- \sa setDefaultCategory()
- */
-Logger::Logger(const QString &defaultCategory)
- :Logger()
-{
- setDefaultCategory(defaultCategory);
-}
-
-/*!
- \brief Destroy the instance of Logger.
-
- You probably wouldn't need to use this function directly. Global instance of logger will be destroyed automatically
- at the end of your QCoreApplication execution
- */
-Logger::~Logger()
-{
- Q_D(Logger);
-
- QMutexLocker appendersLocker(&d->loggerMutex);
-
- QSet<AbstractAppender*> appenderList;
- appenderList += d->appenders.toSet() += d->categoryAppenders.values().toSet();
- qDeleteAll(appenderList);
-
- delete d->logDevice;
- appendersLocker.unlock();
-
- delete d_ptr;
-}
-
-/*!
- \brief Returns the global instance of Logger.
-
- In a most cases you shouldn't use this function directly. Consider using [logger](@ref logger) macro instead.
-
- \sa Dtk::Core::logger
- */
-Logger *Logger::globalInstance()
-{
- Logger* result = nullptr;
- {
- QReadLocker locker(&LoggerPrivate::globalInstanceLock);
- result = LoggerPrivate::globalInstance;
- }
-
- if (!result)
- {
- QWriteLocker locker(&LoggerPrivate::globalInstanceLock);
- LoggerPrivate::globalInstance = new Logger;
-
-#if QT_VERSION >= 0x050000
- qInstallMessageHandler(qtLoggerMessageHandler);
-#else
- qInstallMsgHandler(qtLoggerMessageHandler);
-#endif
- qAddPostRoutine(cleanupLoggerGlobalInstance);
- result = LoggerPrivate::globalInstance;
- }
-
- return result;
-}
-
-/*!
- \brief Converts the LogLevel enum value to its string representation.
-
- \a logLevel Log level to convert
-
- \sa LogLevel
- \sa levelFromString()
- */
-QString Logger::levelToString(Logger::LogLevel level)
-{
- switch (level)
- {
- case Trace:
- return QLatin1String("Trace");
- case Debug:
- return QLatin1String("Debug");
- case Info:
- return QLatin1String("Info");
- case Warning:
- return QLatin1String("Warning");
- case Error:
- return QLatin1String("Error");
- case Fatal:
- return QLatin1String("Fatal");
- }
-
- return QString();
-}
-
-/*!
- \brief Converts the LogLevel string representation to enum value.
-
- Comparation of the strings is case independent. If the log level string provided cannot be understood
- Logger::Debug is returned.
-
- \a s String to be decoded
-
- \sa LogLevel
- \sa levelToString()
- */
-Logger::LogLevel Logger::levelFromString(const QString &str)
-{
- const QString &s = str.trimmed().toLower();
-
- LogLevel result = Debug;
-
- if (s == QLatin1String("trace"))
- result = Trace;
- else if (s == QLatin1String("debug"))
- result = Debug;
- else if (s == QLatin1String("info"))
- result = Info;
- else if (s == QLatin1String("warning"))
- result = Warning;
- else if (s == QLatin1String("error"))
- result = Error;
- else if (s == QLatin1String("fatal"))
- result = Fatal;
-
- return result;
-}
-
-/*!
- \brief Registers the appender to write the log records to.
-
- On the log writing call (using one of the macros or the write() function) Logger traverses through the list of
- the appenders and writes a log records to the each of them. Please, look through the AbstractAppender
- documentation to understand the concept of appenders.
-
- If no appenders was added to Logger, it falls back to logging into the \c std::cerr STL stream.
-
- \a appender Appender to register in the Logger
-
- \note Logger takes ownership on the appender and it will delete it on the application exit. According to this,
- appenders must be created on heap to prevent double destruction of the appender.
-
- \sa registerCategoryAppender
- \sa AbstractAppender
- */
-void Logger::registerAppender(AbstractAppender *appender)
-{
- Q_D(Logger);
- QMutexLocker locker(&d->loggerMutex);
-
- if (!d->appenders.contains(appender))
- d->appenders.append(appender);
- else
- std::cerr << "Trying to register appender that was already registered" << std::endl;
-}
-
-/*!
- \brief Registers the appender to write the log records to the specific category.
-
- Calling this method, you can link some appender with the named category.
- On the log writing call to the specific category (calling write() with category parameter directly,
- writing to the default category, or using special dCDebug(), dCWarning() etc. macros),
- Logger writes the log message only to the list of registered category appenders.
-
- You can call logToGlobalInstance() to pass all category log messages to the global logger instance appenders
- (registered using registerAppender()).
- If no category appenders with specific name was registered to the Logger,
- it falls back to logging into the \c std::cerr STL stream, both with simple warning message.
-
- \a category Category name
- \a appender Appender to register in the Logger
-
- \note Logger takes ownership on the appender and it will delete it on the application exit. According to this,
- appenders must be created on heap to prevent double destruction of the appender.
-
- \sa registerAppender
- \sa Dtk::Core::dCTrace(), Dtk::Core::dCDebug(), Dtk::Core::dCInfo(), Dtk::Core::dCWarning(), Dtk::Core::dCError(), Dtk::Core::dCFatal()
- \sa Dtk::Core::dCategory(), Dtk::Core::dGlobalCategory()
- \sa logToGlobalInstance()
- \sa setDefaultCategory()
- */
-void Logger::registerCategoryAppender(const QString &category, AbstractAppender *appender)
-{
- Q_D(Logger);
- QMutexLocker locker(&d->loggerMutex);
-
- if (!d->categoryAppenders.contains(category, appender))
- d->categoryAppenders.insert(category, appender);
- else
- std::cerr << "Trying to register category [" << qPrintable(category) <<
- "] appender that was already registered" << std::endl;
-}
-
-/*!
- \brief Links some logging category with the global logger instance appenders.
-
- If set to true, all log messages to the specified category appenders will also be written to the global logger instance appenders,
- registered using registerAppender().
-
- By default, all messages to the specific category are written only to the specific category appenders
- (registered using registerCategoryAppender()).
-
- \a category Category name
- \a logToGlobal Link or onlink the category from global logger instance appender
-
- \sa globalInstance
- \sa registerAppender
- \sa registerCategoryAppender
- */
-void Logger::logToGlobalInstance(const QString &category, bool logToGlobal)
-{
- Q_D(Logger);
- if (this == globalInstance()) {
- QMutexLocker locker(&d->loggerMutex);
- d->categories.insert(category, logToGlobal);
- } else {
- globalInstance()->logToGlobalInstance(category, logToGlobal);
- }
-}
-
-/*!
- \brief Sets default logging category.
-
- All log messages to this category appenders will also be written to general logger instance appenders (registered
- using [registerAppender](@ref registerAppender) method), and vice versa.
- In particular, any calls to the dDebug() macro will be treated as category logging,
- so you needn't to specify category name using dCDebug() macro.
-
- To unset the default category, pass a null string as a parameter.
-
- \a category Category name
-
- \note "category" format marker will be set to the category name for all of these messages
- (see [AbstractStringAppender::setFormat](@ref AbstractStringAppender::setFormat)).
-
- \sa defaultCategory()
- \sa registerCategoryAppender()
- \sa logToGlobalInstance()
- */
-void Logger::setDefaultCategory(const QString &category)
-{
- Q_D(Logger);
- QMutexLocker locker(&d->loggerMutex);
- d->defaultCategory = category;
-}
-
-//! Returns default logging category name
-/*!
- \sa setDefaultCategory
- */
-QString Logger::defaultCategory() const
-{
- Q_D(const Logger);
- QMutexLocker locker(&d->loggerMutex);
- return d->defaultCategory;
-}
-
-/*!
- \brief Writes the log record.
-
- Writes the log records with the supplied arguments to all the registered appenders.
-
- \note It is not recommended to call this function directly. Instead of this you can just call one of the macros
- (dTrace, dTrac, dInfo, dWarning, dError, dFatal) that will supply all the needed
- information to this function.
-
- \a time - the time stamp of the record
- \a logLevel - the log level of the record
- \a file - the name of the source file that requested the log record
- \a line - the line of the code of source file that requested the log record
- \a function - name of the function that requested the log record
- \a category - logging category (0 for default category)
- \a message - log message
-
- \note Recording of the log record using the Logger::Fatal log level will lead to calling the STL abort()
- function, which will interrupt the running of your software and begin the writing of the core dump.
-
- \sa LogLevel
- \sa Dtk::Core::dTrace(), Dtk::Core::dDebug(), Dtk::Core::dInfo(), Dtk::Core::dWarning(), Dtk::Core::dError(), Dtk::Core::dFatal()
- \sa AbstractAppender
- */
-void Logger::write(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const char *category, const QString &msg)
-{
- write(time, level, file, line, func, category, msg, /* fromLocalInstance = */ false);
-}
-
-/*!
- This is the overloaded function provided for the convenience. It behaves similar to the above function.
-
- This function uses the current timestamp obtained with \c QDateTime::currentDateTime().
-
- \sa write()
- */
-void Logger::write(Logger::LogLevel level, const char *file, int line,
- const char *func, const char *category, const QString &msg)
-{
- write(QDateTime::currentDateTime(), level, file, line, func, category, msg);
-}
-
-/*!
- This is the overloaded function provided for the convenience. It behaves similar to the above function.
-
- This function doesn't accept any log message as argument. It returns the \c QDebug object that can be written
- using the stream functions. For example, you may like to write:
- \code
- dDebug() << "This is the size" << size << "of the element" << elementName;
- \endcode
- instead of writing
- \code
- dDebug(QString(QLatin1String("This is the size %1x%2 of the element %3"))
- .arg(size.x()).arg(size.y()).arg(elementName));
- \endcode
-
- Please consider reading the Qt Reference Documentation for the description of the QDebug class usage syntax.
-
- \note This overload is definitely more pleasant to use than the first write() overload, but it behaves definitely
- slower than all the above overloads.
-
- \sa write()
- */
-QDebug Logger::write(Logger::LogLevel level, const char *file, int line,
- const char *func, const char *category)
-{
- Q_D(Logger);
-
- d->logDevice->lock(level, file, line, func, category);
- return QDebug(d->logDevice);
-}
-
-/*!
- \brief Writes the assertion.
-
- This function writes the assertion record using the write() function.
-
- The assertion record is always written using the Logger::Fatal log level which leads to the abortation of the
- program and generation of the core dump (if supported).
-
- The message written to the appenders will be identical to the \a condition argument prefixed with the
- <tt>ASSERT:</tt> notification.
-
- The \a file parameter is the current file name.
- The \a line parameter indicates the number of lines to output.
- The \a func parameter indicates the function name to output.
-
- \note It is not recommended to call this function directly. Instead of this you can just call the LOG_ASSERT
- macro that will supply all the needed information to this function.
-
- \sa write()
- */
-void Logger::writeAssert(const char *file, int line,
- const char *func, const char *condition)
-{
- write(Logger::Fatal, file, line, func, nullptr, QString("ASSERT: \"%1\"").arg(condition));
-}
-
-void Logger::write(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const char *category, const QString &msg, bool fromLocalInstance)
-{
- Q_D(Logger);
- QMutexLocker locker(&d->loggerMutex);
-
- QString logCategory = QString::fromLatin1(category);
- if (logCategory.isNull() && !d->defaultCategory.isNull())
- logCategory = d->defaultCategory;
-
- bool wasWritten = false;
- bool isGlobalInstance = this == globalInstance();
- bool linkedToGlobal = isGlobalInstance && d->categories.value(logCategory, false);
-
- if (!logCategory.isNull()) {
- QList<AbstractAppender*> appenders = d->categoryAppenders.values(logCategory);
- if (appenders.length() == 0) {
- if (logCategory != d->defaultCategory && !linkedToGlobal && !fromLocalInstance)
- std::cerr << "No appenders assotiated with category " << qPrintable(logCategory) << std::endl;
- } else {
- for (AbstractAppender* appender : appenders)
- appender->write(time, level, file, line, func, logCategory, msg);
-
- wasWritten = true;
- }
- }
-
- // the default category is linked to the main logger appenders
- // global logger instance also writes all linked categories to the main appenders
- if (logCategory.isNull() || logCategory == d->defaultCategory || linkedToGlobal) {
- if (!d->appenders.isEmpty()) {
- for (AbstractAppender* appender : d->appenders)
- appender->write(time, level, file, line, func, logCategory, msg);
-
- wasWritten = true;
- } else {
- static bool noAppendersWarningShown = false;
- if (!noAppendersWarningShown) {
- std::cerr << "No appenders registered with logger" << std::endl;
- noAppendersWarningShown = true;
- }
- }
- }
-
- // local logger instances send category messages to the global instance
- if (!logCategory.isNull() && !isGlobalInstance)
- globalInstance()->write(time, level, file, line, func, logCategory.toLatin1(), msg, true);
-
- if (!wasWritten && !fromLocalInstance) {
- QString result = QString(QLatin1String("[%1] <%2> %3")).arg(levelToString(level), -7)
- .arg(AbstractStringAppender::stripFunctionName(func)).arg(msg);
- std::cerr << qPrintable(result) << std::endl;
- }
-
- if (level == Logger::Fatal) {
- std::cerr << "fatal level error occured, the program will abort!";
- abort();
- }
-}
-
-void CuteMessageLogger::write(const char *msg, ...) const
-{
- va_list va;
- va_start(va, msg);
- m_l->write(m_level, m_file, m_line, m_function, m_category, QString().vsprintf(msg, va));
- va_end(va);
-}
-
-void CuteMessageLogger::write(const QString &msg) const
-{
- m_l->write(m_level, m_file, m_line, m_function, m_category, msg);
-}
-
-QDebug CuteMessageLogger::write() const
-{
- return m_l->write(m_level, m_file, m_line, m_function, m_category);
-}
-
-void LoggerTimingHelper::start(const char *msg, ...)
-{
- va_list va;
- va_start(va, msg);
- m_block = QString().vsprintf(msg, va);
- va_end(va);
-
- m_time.start();
-}
-
-void LoggerTimingHelper::start(const QString &msg)
-{
- m_block = msg;
- m_time.start();
-}
-
-LoggerTimingHelper::~LoggerTimingHelper()
-{
- QString message;
- if (m_block.isEmpty())
- message = QString(QLatin1String("Function %1 finished in ")).arg(AbstractStringAppender::stripFunctionName(m_function));
- else
- message = QString(QLatin1String("\"%1\" finished in ")).arg(m_block);
-
- int elapsed = m_time.elapsed();
- if (elapsed >= 10000)
- message += QString(QLatin1String("%1 s.")).arg(elapsed / 1000);
- else
- message += QString(QLatin1String("%1 ms.")).arg(elapsed);
-
- m_logger->write(m_logLevel, m_file, m_line, m_function, nullptr, message);
-}
-
-Logger* loggerInstance()
-{
- return Logger::globalInstance();
-}
-
-DCORE_END_NAMESPACE
-#include "Logger.moc"
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-// Local
-#include "win32/OutputDebugAppender.h"
-
-// STL
-#include <windows.h>
-
-DCORE_BEGIN_NAMESPACE
-
-/*!
- \class Dtk::Core::OutputDebugAppender
- \inmodule dtkcore
-
- \brief Appender that writes the log records to the Microsoft Debug Log.
- */
-
-/*!
- \brief Writes the log record to the windows debug log.
- \reimp
-
- \brief Writes the log record to the windows debug log.
-
- The \a time parameter indicates the time stamp.
- The \a level parameter describes the LogLevel.
- The \a file parameter is the current file name.
- The \a line parameter indicates the number of lines to output.
- The \a func parameter indicates the function name to output.
- The \a category parameter indicates the log category.
- The \a msg parameter indicates the output message.
-
- \sa AbstractStringAppender::format()
- */
-void OutputDebugAppender::append(const QDateTime &time,
- Logger::LogLevel level,
- const char *file,
- int line,
- const char *func,
- const QString &category,
- const QString &msg)
-{
- QString s = formattedString(time, level, file, line, function, category, msg);
- OutputDebugStringW((LPCWSTR) s.utf16());
-}
-
-DCORE_END_NAMESPACE
+++ /dev/null
-# Dtk/Core/DLog
-
-DLog is the log module of deepin tool kit for Qt/C++
-
-Logger is a simple way to write the history of your application lifecycle to any target logging device (which is called Appender and may write to any target you will implement with it: console, text file, XML or something - you choose) and to map logging message to a class, function, source file and line of code which it is called from.
-
-Some simple appenders (which may be considered an examples) are provided with the Logger itself: see ConsoleAppender and FileAppender documentation.
-
-It supports using it in a multithreaded applications, so all of its functions are thread safe.
-
-Logger internally uses the lazy-initialized singleton object and needs no definite initialization, but you may consider registering a log appender before calling any log recording functions or macros.
-
-The library design of Logger allows you to simply mass-replace all occurrences of qDebug and similar calls with similar Logger macros (e.g. dDebug())
-
-Note
- Logger uses a singleton global instance which lives through all the application life cycle and self-destroys destruction of the QCoreApplication (or QApplication) instance. It needs a QCoreApplication instance to be created before any of the Logger's functions are called.
-
-## Usage
-
-Just add pkgconfig in .pro file
-
-```
-unix {
- CONFIG+=link_pkgconfig
- PKGCONFIG+=dtkcore
-}
-```
-
-### Example
-
-```cpp
-
-#include <QCoreApplication>
-#include <DLog>
-using namespace Dtk::Log;
-int main(int argc, char* argv[])
-{
- QCoreApplication app(argc, argv);
- // 1 you can use standrd deepin application log format
- // 1.1 log to console
- DLogManager::registerConsoleAppender();
- // 1.2 log to standrd deepin user cache path: ~/.cache/{organ}/{appname}/
- // app.setOrganizationName("dtk-test"); // must set
- // app.setApplicationName("dlog-example"); // must set
- // dInfo()<< "LogFile:" << DLogManager::getlogFilePath();
- // DLogManager::registerFileAppender();
- // 1.3 log to stdout and file
- // DLogManager::registerFileAppender();
- // DLogManager::registerConsoleAppender();
- // 2 Register your own logger format;
- // ConsoleAppender* consoleAppender = new ConsoleAppender;
- // consoleAppender->setFormat("[%{type:-7}] <%{Function}> %{message}\n");
- // logger->registerAppender(consoleAppender);
- dInfo("Starting the application");
- int result = 1;
- dWarning() << "Something went wrong." << "Result code is" << result;
- return result;
-}
-```
-
-\sa Dtk::Core::DLogManager
-
-
+++ /dev/null
-// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#include <QDateTime>
-#include <QDir>
-#include <QFileInfo>
-
-#include "RollingFileAppender.h"
-
-DCORE_BEGIN_NAMESPACE
-
-/*!
- \class Dtk::Core::RollingFileAppender
- \inmodule dtkcore
- \brief The RollingFileAppender class extends FileAppender so that the underlying file is rolled over at a user chosen frequency.
-
- The class is based on Log4Qt.DailyRollingFileAppender class (http://log4qt.sourceforge.net/)
- and has the same date pattern format.
-
- For example, if the fileName is set to /foo/bar and the DatePattern set to the daily rollover ('.'yyyy-MM-dd'.log'), on 2014-02-16 at midnight,
- the logging file /foo/bar.log will be copied to /foo/bar.2014-02-16.log and logging for 2014-02-17 will continue in /foo/bar
- until it rolls over the next day.
-
- The logFilesLimit parameter is used to automatically delete the oldest log files in the directory during rollover
- (so no more than logFilesLimit recent log files exist in the directory at any moment).
- */
-
-RollingFileAppender::RollingFileAppender(const QString &fileName)
- : FileAppender(fileName),
- m_logFilesLimit(0),
- m_logSizeLimit(1024 * 1024 * 20)
-{
-
-}
-
-void RollingFileAppender::append(const QDateTime &time, Logger::LogLevel level, const char *file, int line,
- const char *func, const QString &category, const QString &msg)
-{
-
- if (!m_rollOverTime.isNull() && QDateTime::currentDateTime() > m_rollOverTime)
- rollOver();
-
- if (size()> m_logSizeLimit)
- rollOver();
-
- FileAppender::append(time, level, file, line , func, category, msg);
-}
-
-RollingFileAppender::DatePattern RollingFileAppender::datePattern() const
-{
- QMutexLocker locker(&m_rollingMutex);
- return m_frequency;
-}
-
-QString RollingFileAppender::datePatternString() const
-{
- QMutexLocker locker(&m_rollingMutex);
- return m_datePatternString;
-}
-
-void RollingFileAppender::setDatePattern(DatePattern datePattern)
-{
- setDatePatternString(QLatin1String("'.'yyyy-MM-dd-hh-mm-ss-zzz"));
-
- QMutexLocker locker(&m_rollingMutex);
- m_frequency = datePattern;
-
- computeRollOverTime();
-}
-
-void RollingFileAppender::setDatePattern(const QString &datePattern)
-{
- setDatePatternString(datePattern);
- computeFrequency();
-
- computeRollOverTime();
-}
-
-void RollingFileAppender::setDatePatternString(const QString &datePatternString)
-{
- QMutexLocker locker(&m_rollingMutex);
- m_datePatternString = datePatternString;
-}
-
-void RollingFileAppender::computeFrequency()
-{
- QMutexLocker locker(&m_rollingMutex);
-
- const QDateTime startTime(QDate(1999, 1, 1), QTime(0, 0));
- const QString startString = startTime.toString(m_datePatternString);
-
- if (startString != startTime.addSecs(60).toString(m_datePatternString))
- m_frequency = MinutelyRollover;
- else if (startString != startTime.addSecs(60 * 60).toString(m_datePatternString))
- m_frequency = HourlyRollover;
- else if (startString != startTime.addSecs(60 * 60 * 12).toString(m_datePatternString))
- m_frequency = HalfDailyRollover;
- else if (startString != startTime.addDays(1).toString(m_datePatternString))
- m_frequency = DailyRollover;
- else if (startString != startTime.addDays(7).toString(m_datePatternString))
- m_frequency = WeeklyRollover;
- else if (startString != startTime.addMonths(1).toString(m_datePatternString))
- m_frequency = MonthlyRollover;
- else
- {
- Q_ASSERT_X(false, "DailyRollingFileAppender::computeFrequency", "The pattern '%1' does not specify a frequency");
- return;
- }
-}
-
-void RollingFileAppender::removeOldFiles()
-{
- if (m_logFilesLimit <= 1)
- return;
-
- QFileInfo fileInfo(fileName());
- QDir logDirectory(fileInfo.absoluteDir());
- logDirectory.setFilter(QDir::Files);
- logDirectory.setNameFilters(QStringList() << fileInfo.fileName() + "*");
- QFileInfoList logFiles = logDirectory.entryInfoList();
-
- QMap<QDateTime, QString> fileDates;
- for (int i = 0; i < logFiles.length(); ++i)
- {
- QString name = logFiles[i].fileName();
- QString suffix = name.mid(name.indexOf(fileInfo.fileName()) + fileInfo.fileName().length());
- QDateTime fileDateTime = QDateTime::fromString(suffix, datePatternString());
-
- if (fileDateTime.isValid())
- fileDates.insert(fileDateTime, logFiles[i].absoluteFilePath());
- }
-
- QList<QString> fileDateNames = fileDates.values();
- for (int i = 0; i < fileDateNames.length() - m_logFilesLimit + 1; ++i)
- QFile::remove(fileDateNames[i]);
-}
-
-void RollingFileAppender::computeRollOverTime()
-{
- Q_ASSERT_X(!m_datePatternString.isEmpty(), "DailyRollingFileAppender::computeRollOverTime()", "No active date pattern");
-
- QDateTime now = QDateTime::currentDateTime();
- QDate nowDate = now.date();
- QTime nowTime = now.time();
- QDateTime start;
-
- switch (m_frequency)
- {
- case MinutelyRollover:
- {
- start = QDateTime(nowDate, nowTime);
- m_rollOverTime = start.addSecs(60);
- }
- break;
- case HourlyRollover:
- {
- start = QDateTime(nowDate, nowTime);
- m_rollOverTime = start.addSecs(60*60);
- }
- break;
- case HalfDailyRollover:
- {
- int hour = nowTime.hour();
- if (hour >= 12)
- hour = 12;
- else
- hour = 0;
- start = QDateTime(nowDate, nowTime);
- m_rollOverTime = start.addSecs(60*60*12);
- }
- break;
- case DailyRollover:
- {
- start = QDateTime(nowDate, nowTime);
- m_rollOverTime = start.addDays(1);
- }
- break;
- case WeeklyRollover:
- {
- // Qt numbers the week days 1..7. The week starts on Monday.
- // Change it to being numbered 0..6, starting with Sunday.
- int day = nowDate.dayOfWeek();
- if (day == Qt::Sunday)
- day = 0;
- start = QDateTime(nowDate, nowTime).addDays(-1 * day);
- m_rollOverTime = start.addDays(7);
- }
- break;
- case MonthlyRollover:
- {
- start = QDateTime(QDate(nowDate.year(), nowDate.month(), 1), nowTime);
- m_rollOverTime = start.addMonths(1);
- }
- break;
- default:
- Q_ASSERT_X(false, "DailyRollingFileAppender::computeInterval()", "Invalid datePattern constant");
- m_rollOverTime = QDateTime::fromTime_t(0);
- }
-
- m_rollOverSuffix = start.toString(m_datePatternString);
- Q_ASSERT_X(now.toString(m_datePatternString) == m_rollOverSuffix,
- "DailyRollingFileAppender::computeRollOverTime()", "File name changes within interval");
- Q_ASSERT_X(m_rollOverSuffix != m_rollOverTime.toString(m_datePatternString),
- "DailyRollingFileAppender::computeRollOverTime()", "File name does not change with rollover");
-}
-
-void RollingFileAppender::rollOver()
-{
- Q_ASSERT_X(!m_datePatternString.isEmpty(), "DailyRollingFileAppender::rollOver()", "No active date pattern");
-
- QString rollOverSuffix = m_rollOverSuffix;
- computeRollOverTime();
- if (rollOverSuffix == m_rollOverSuffix)
- return;
-
- closeFile();
-
- QString targetFileName = fileName() + rollOverSuffix;
- QFile f(targetFileName);
- if (f.exists() && !f.remove())
- return;
- f.setFileName(fileName());
- if (!f.rename(targetFileName))
- return;
-
- openFile();
- removeOldFiles();
-}
-
-void RollingFileAppender::setLogFilesLimit(int limit)
-{
- QMutexLocker locker(&m_rollingMutex);
- m_logFilesLimit = limit;
-}
-
-int RollingFileAppender::logFilesLimit() const
-{
- QMutexLocker locker(&m_rollingMutex);
- return m_logFilesLimit;
-}
-
-DCORE_END_NAMESPACE
file(GLOB LOG_HEADER
- ${CMAKE_CURRENT_LIST_DIR}/../../include/log/*.h
+ ${CMAKE_CURRENT_LIST_DIR}/../../include/log/LogManager.h
)
-set(LOG_SOURCE
- ${CMAKE_CURRENT_LIST_DIR}/RollingFileAppender.cpp
- ${CMAKE_CURRENT_LIST_DIR}/Logger.cpp
- ${CMAKE_CURRENT_LIST_DIR}/FileAppender.cpp
- ${CMAKE_CURRENT_LIST_DIR}/ConsoleAppender.cpp
- ${CMAKE_CURRENT_LIST_DIR}/AbstractStringAppender.cpp
- ${CMAKE_CURRENT_LIST_DIR}/AbstractAppender.cpp
+set(LOG_SOURCE
${CMAKE_CURRENT_LIST_DIR}/LogManager.cpp
)
-if(WIN32)
- set(log_SRCS
- ${LOG_HEADER}
- ${LOG_SOURCE}
- ${CMAKE_CURRENT_LIST_DIR}/OutputDebugAppender.cpp
- ${CMAKE_CURRENT_LIST_DIR}/../../include/log/win32/OutputDebugAppender.h
- )
-else()
- set(log_SRCS
- ${LOG_HEADER}
- ${LOG_SOURCE}
- )
-endif()
+
+set(log_SRCS
+${LOG_HEADER}
+${LOG_SOURCE}
+)
+
};
/*!
- \class Dtk::Core::DSettingsDConfigBackend
+@~english
+ @class Dtk::Core::DSettingsDConfigBackend
\inmodule dtkcore
- \brief Storage DSetttings to an DConfig.
+ @brief Storage DSetttings to an DConfig.
*/
/*!
- \brief Save data to configure file name with DConfig.
+@~english
+ @brief Save data to configure file name with DConfig.
\a name configure file name.
\a subpath subdirectory of configure file name.
\a parent
}
/*!
- \brief List all keys of DConfig
- \return
+@~english
+ @brief List all keys of DConfig
+ @return
*/
QStringList DSettingsDConfigBackend::keys() const
{
}
/*!
- \brief Get value of key from DConfig
+@~english
+ @brief Get value of key from DConfig
\a key
- \return
+ @return
*/
QVariant DSettingsDConfigBackend::getOption(const QString &key) const
{
}
/*!
- \brief Set value of key to DConfig
+@~english
+ @brief Set value of key to DConfig
\a key
\a value
*/
}
/*!
- \brief Trigger DSettings to save option value to DConfig
+@~english
+ @brief Trigger DSettings to save option value to DConfig
*/
void DSettingsDConfigBackend::doSync()
{
};
/*!
- \class Dtk::Core::GSettingsBackend
+@~english
+ @class Dtk::Core::GSettingsBackend
\inmodule dtkcore
- \brief Storage backend of DSettings use gsettings.
+ @brief Storage backend of DSettings use gsettings.
You should generate gsetting schema with /usr/lib/x86_64-linux-gnu/libdtk-$$VERSION/DCore/bin/dtk-settings.
}
/*!
- \brief List all gsettings keys.
- \return Return all gsettings keys.
+@~english
+ @brief List all gsettings keys.
+ @return Return all gsettings keys.
*/
QStringList GSettingsBackend::keys() const
{
}
/*!
- \brief Get value of key.
- \return Return the value of the given \a key.
+@~english
+ @brief Get value of key.
+ @return Return the value of the given \a key.
*/
QVariant GSettingsBackend::getOption(const QString &key) const
{
}
/*!
- \brief Set value to gsettings
+@~english
+ @brief Set value to gsettings
Use the \a key to save the \a value.
*/
void GSettingsBackend::doSetOption(const QString &key, const QVariant &value)
}
/*!
- \brief Trigger DSettings to sync option to storage.
+@~english
+ @brief Trigger DSettings to sync option to storage.
*/
void GSettingsBackend::doSync()
{
};
/*!
- \class Dtk::Core::QSettingBackend
+@~english
+ @class Dtk::Core::QSettingBackend
\inmodule dtkcore
- \brief Storage DSetttings to an QSettings.
+ @brief Storage DSetttings to an QSettings.
*/
/*!
- \brief Save data to filepath with QSettings::NativeFormat format.
+@~english
+ @brief Save data to filepath with QSettings::NativeFormat format.
\a filepath is path to storage data.
\a parent
*/
}
/*!
- \brief List all keys of QSettings
- \return
+@~english
+ @brief List all keys of QSettings
+ @return
*/
QStringList QSettingBackend::keys() const
{
}
/*!
- \brief Get value of key from QSettings
+@~english
+ @brief Get value of key from QSettings
\a key
- \return
+ @return
*/
QVariant QSettingBackend::getOption(const QString &key) const
{
}
/*!
- \brief Set value of key to QSettings
+@~english
+ @brief Set value of key to QSettings
\a key
\a value
*/
}
/*!
- \brief Trigger DSettings to save option value to QSettings
+@~english
+ @brief Trigger DSettings to save option value to QSettings
*/
void QSettingBackend::doSync()
{
/*!
- \class Dtk::Core::DSettingsBackend
+@~english
+ @class Dtk::Core::DSettingsBackend
\inmodule dtkcore
- \brief DSettingsBackend is interface of DSettings storage class.
+ @brief DSettingsBackend is interface of DSettings storage class.
Simaple example:
-\code
+@code
{
"groups": [{
"key": "base",
]
}]
}
-\endcode
+@endcode
How to read/write key and value:
- \code
+ @code
// init a storage backend
QTemporaryFile tmpFile;
tmpFile.open();
// modify value
opt->setValue("Test")
qDebug() << opt->value();
- \endcode
- \sa Dtk::Core::DSettingsOption
- \sa Dtk::Core::DSettingsGroup
- \sa Dtk::Core::DSettingsBackend
- \sa Dtk::Widget::DSettingsWidgetFactory
- \sa Dtk::Widget::DSettingsDialog
+ @endcode
+ @sa Dtk::Core::DSettingsOption
+ @sa Dtk::Core::DSettingsGroup
+ @sa Dtk::Core::DSettingsBackend
+ @sa Dtk::Widget::DSettingsWidgetFactory
+ @sa Dtk::Widget::DSettingsDialog
*/
/*!
- \fn virtual QStringList DSettingsBackend::keys() const = 0;
- \brief return all key of storage.
- \brief 返回全部键值。
+@~english
+ @fn virtual QStringList DSettingsBackend::keys() const = 0;
+ @brief return all key of storage.
*/
/*!
- \fn virtual QVariant DSettingsBackend::getOption(const QString &key) const = 0;
- \brief get value by \a key.
- \brief 获取 \a key 对应的值。
+@~english
+ @fn virtual QVariant DSettingsBackend::getOption(const QString &key) const = 0;
+ @brief get value by \a key.
*/
/*!
- \fn virtual void DSettingsBackend::doSync() = 0;
- \brief do the real sync action.
- \brief 开始进行同步。
+@~english
+ @fn virtual void DSettingsBackend::doSync() = 0;
+ @brief do the real sync action.
*/
/*!
- \fn virtual void DSettingsBackend::doSetOption(const QString &key, const QVariant &value) = 0;
- \brief write \a key / \a value to storage.
- \brief 设置key对应的值,并使用存储后端进行存储。
+@~english
+ @fn virtual void DSettingsBackend::doSetOption(const QString &key, const QVariant &value) = 0;
+ @brief write \a key / \a value to storage.
*/
/*!
- \fn void DSettingsBackend::optionChanged(const QString &key, const QVariant &value);
- \brief emitted when option \a value changed.
- \brief DSettingsOption的值发生变化时发出的信号.
-
- \a key 发生改变的 option 键,\a value 对应键的值.
+@~english
+ @fn void DSettingsBackend::optionChanged(const QString &key, const QVariant &value);
+ @brief emitted when option \a value changed.
*/
/*!
- \fn void DSettingsBackend::sync();
- \brief private signal, please do not use it.
- \brief 私有信号,请勿使用。
+@~english
+ @fn void DSettingsBackend::sync();
+ @brief private signal, please do not use it.
*/
/*!
- \fn void DSettingsBackend::setOption(const QString &key, const QVariant &value);
- \brief private signal, please do not use it.
- \brief 私有信号,请勿使用.
+@~english
+ @fn void DSettingsBackend::setOption(const QString &key, const QVariant &value);
+ @brief private signal, please do not use it.
\internal
\a key \a value
*/
/*!
- \class Dtk::Core::DSettings
+@~english
+ @class Dtk::Core::DSettings
\inmodule dtkcore
- \brief DSettings是设计上为Dtk的应用程序提供统一的配置存储以及界面生成工具的基础库.
+ @brief DSettings is the basic library that provides unified configuration storage and interface generation tools for Dtk applications.
- DSetting使用json作为应用配置程序的描述文件。简单来说,应用查询的配置分为组/键值二个基础层级,
- 对于一个标准的Dtk配置控件,一般只包含组/子组/键值三个层级,对于超过三个层级的键值,可以通过
- DSettings的API接口进行读取和写入,但是不能在标准的DSettingsDialogs上显示出来。
+ DSetting uses json as the description file for the application configuration. The configuration of application query is divided into two basic levels: group / key value.
+ The standard Dtk configuration control generally contains only three levels of group / subgroup / key values. For keys with more than three levels, you can use the.
+ DSettings's API interface reads and writes, but cannot be displayed on standard DSettingsDialogs.
- 一个简单的配置文件如下:
-\code
+
+ Simple configuration file:
+@code
{
"groups": [{
"key": "base",
]
}]
}
-\endcode
+@endcode
-改组中包含一个base的root组,两个子组: open_action/new_tab_windows,每个子组有包含若干选项。
-对于"New Window Open:"这个配置,其完整的访问id为base.new_tab_windows.new_window_path。
-读取/设置其值的示例如下:
+The group contains a root group of base with two subgroups: open_action/new_tab_windows, each of which contains several options.
+The complete access id for the configuration "New Window Open:" is base.new_tab_windows.new_window_path.
-\code
- // 初始化一个存储后端
+How to read/write key and value:
+@code
+ // init a storage backend
QTemporaryFile tmpFile;
tmpFile.open();
auto backend = new Dtk::Core::QSettingBackend(tmpFile.fileName());
- // 从json中初始化配置
+ // read settings from json
auto settings = Dtk::Core::DSettings::fromJsonFile(":/resources/data/dfm-settings.json");
settings->setBackend(backend);
- // 读取配置
+ // read value
auto opt = settings->option("base.new_tab_windows.new_window_path");
qDebug() << opt->value();
- // 修改配置
+ // modify value
opt->setValue("Test")
qDebug() << opt->value();
-\endcode
-\sa Dtk::Core::DSettingsOption
-\sa Dtk::Core::DSettingsGroup
-\sa Dtk::Core::DSettingsBackend
-\sa Dtk::Widget::DSettingsWidgetFactory
-\sa Dtk::Widget::DSettingsDialog
+@endcode
+@sa Dtk::Core::DSettingsOption
+@sa Dtk::Core::DSettingsGroup
+@sa Dtk::Core::DSettingsBackend
+@sa Dtk::Widget::DSettingsWidgetFactory
+@sa Dtk::Widget::DSettingsDialog
*/
DSettings::DSettings(QObject *parent) :
}
/*!
- \brief 从 \a json 中获取 DSettings, 返回的数据使用之后需要自己手动释放。
+@~english
+ @brief Get DSettings from \a json. The returned data needs to be manually released after use.
*/
QPointer<DSettings> DSettings::fromJson(const QByteArray &json)
{
return d->childGroups.values();
}
/*!
- \brief DSettings::group will recurrence find childGroup
+@~english
+ @brief DSettings::group will recurrence find childGroup
\a key
- \return
+ @return
*/
QPointer<DSettingsGroup> DSettings::group(const QString &key) const
{
};
/*!
- \class Dtk::Core::DSettingsGroup
+@~english
+ @class Dtk::Core::DSettingsGroup
\inmodule dtkcore
- \brief A group of DSettingsOption and DSettingsGroup.
+ @brief A group of DSettingsOption and DSettingsGroup.
DSettingsGroup can contain a lost option and subgroup.
- \brief 一组DSettings选项的集合,也可以包含子组。
*/
}
/*!
- \brief Get direct parent group of this group.
- \brief 获取当前组的父组。
- \return
+@~english
+ @brief Get direct parent group of this group.
+ @return
*/
QPointer<DSettingsGroup> DSettingsGroup::parentGroup() const
{
}
/*!
- \brief Change the direct \a parentGroup of this group.
- \brief 设置当前组的父组为 \a parentGroup 。
+@~english
+ @brief Change the direct \a parentGroup of this group.
*/
void DSettingsGroup::setParentGroup(QPointer<DSettingsGroup> parentGroup)
{
}
/*!
- \brief Return the full key of this group, include all parent.
- \return 返回这个组的键,会包含全部的父组的键。
+@~english
+ @brief Return the full key of this group, include all parent.
+ @return eturn the full key of this group, include all parent.
*/
QString DSettingsGroup::key() const
{
}
/*!
- \brief Get display name of this group, it may be translated.
- \return 返回这个组名称。
+@~english
+ @brief Get display name of this group, it may be translated.
+ @return Get display name of this group.
*/
QString DSettingsGroup::name() const
{
}
/*!
- \brief Check this group will show on DSettings dialog.
- \brief 检查这个选项组是否会在界面上显示。
- \return true 表示则这个选项组会显示出来。
+@~english
+ @brief Check this group will show on DSettings dialog.
+ @return true indicates that this option group will be displayed。
*/
bool DSettingsGroup::isHidden() const
{
}
/*!
- \brief Get the child group of groupKey
+@~english
+ @brief Get the child group of groupKey
\a groupKey is child group key
- \brief 返回给定键在选项组中对应的子组。
- \a groupKey 子组的键
- \return 返回子组的指针.
+ @return Returns a pointer to a subgroup.
*/
QPointer<DSettingsGroup> DSettingsGroup::childGroup(const QString &groupKey) const
{
}
/*!
- \brief Get the child option of key
+@~english
+ @brief Get the child option of key
\a key is child option key
- \brief 根据键值获取选项。
- \a key 选项的完整键
- \return 返回对应键值选项指针.
+ @return Returns a pointer to the child option of key.
*/
QPointer<DSettingsOption> DSettingsGroup::option(const QString &key) const
{
}
/*!
- \brief Enum all direct child group of this group
- \brief 列出组下面所有的直接子组。
+@~english
+ @brief Enum all direct child group of this group
- \return 返回所有子组指针列表.
+ @return Returns a list of all subgroup Pointers.
*/
QList<QPointer<DSettingsGroup> > DSettingsGroup::childGroups() const
{
}
/*!
- \brief Enum all direct child option with the raw order in json description file.
- \brief 列出组下面所有的直接选项。
- \return 返回所有子选项指针列表.
+@~english
+ @brief Enum all direct child option with the raw order in json description file.
+ @return Returns a list of all suboption Pointers.
*/
QList<QPointer<DSettingsOption> > DSettingsGroup::childOptions() const
{
}
/*!
- \brief Enum all direct child option of this group.
- \brief 列出组下面所有的选项。
- \return 返回所有选项指针列表.
+@~english
+ @brief Enum all direct child option of this group.
+ @return Returns a list of all option Pointers.
*/
QList<QPointer<DSettingsOption> > DSettingsGroup::options() const
{
}
/*!
- \brief Convert QJsonObject to DSettingsGroup.
+@~english
+ @brief Convert QJsonObject to DSettingsGroup.
\a prefixKey instead parse prefix key from parent.
\a group is an QJsonObejct instance.
- \brief 将json对象转化为DSettingsGroup
- \a prefixKey 组键值前缀
- \a group 待反序列化的json对象
- \return 返回解析json后的组指针.
+ @return Returns a group pointer after parsing json.
- \sa QPointer Dtk::Core::DSettingsOption
+ @sa QPointer Dtk::Core::DSettingsOption
*/
QPointer<DSettingsGroup> DSettingsGroup::fromJson(const QString &prefixKey, const QJsonObject &group)
{
}
/*!
- \brief Parse QJsonObject to DSettingsGroup.
+@~english
+ @brief Parse QJsonObject to DSettingsGroup.
\a prefixKey instead parse prefix key from parent.
\a json is an QJsonObejct instance.
- \sa QPointer<DSettingsOption> Dtk::Core::DSettingsGroup::fromJson(const QString &prefixKey, const QJsonObject &json)
- \brief 将json对象转化为DSettingsGroup
- \a prefixKey 组键值前缀
- \a group 待反序列化的json对象
- \sa QPointer<DSettingsOption> Dtk::Core::DSettingsGroup::fromJson(const QString &prefixKey, const QJsonObject &json)
+ @sa QPointer<DSettingsOption> Dtk::Core::DSettingsGroup::fromJson(const QString &prefixKey, const QJsonObject &json)
*/
void DSettingsGroup::parseJson(const QString &prefixKey, const QJsonObject &group)
{
};
/*!
- \class Dtk::Core::DSettingsOption
+@~english
+ @class Dtk::Core::DSettingsOption
\inmodule dtkcore
- \brief DSettingsOption is the base key/value item of DSettings.
- \brief DSettingsOption是DSettings的基本单元,用于存放一对键-值数据。
+ @brief DSettingsOption is the base key/value item of DSettings.
*/
/*!
- \fn void DSettingsOption::valueChanged(QVariant value);
- \brief Emit when option value change.
- \brief 选项的数据变化时发出改信息.
+@~english
+ @fn void DSettingsOption::valueChanged(QVariant value);
+ @brief Emit when option value change.
- \a value 发生改变的数据.
+ \a value Changed data.
*/
/*!
- \fn void DSettingsOption::dataChanged(const QString &dataType, QVariant value);
- \brief Emit when option data change.
- \brief 选项的附件的额外数据变化时发出改信息,可以看作这个值的属性发生变化.
+@~english
+ @fn void DSettingsOption::dataChanged(const QString &dataType, QVariant value);
+ @brief Emit when option data change.
- \a dataType 改变的数据类型, \a value 改变的数据.
+ \a dataType Changed data type, \a value Changed data.
*/
/*!
- \property Dtk::Core::DSettingsOption::value
- \brief Current value of this option.
+@~english
+ @property Dtk::Core::DSettingsOption::value
+ @brief Current value of this option.
*/
DSettingsOption::DSettingsOption(QObject *parent) :
}
/*!
- \brief Get direct parent group of this option.
- \brief 当前选项的直接上级组。
- \return 返回当前选项的直接上级组.
+@~english
+ @brief Get direct parent group of this option.
+ @return Returns the direct parent group of the this option.
*/
QPointer<DSettingsGroup> DSettingsOption::parentGroup() const
{
}
/*!
- \brief Change the direct parent group of this option.
- \brief 修改但前选项的上级组.
+@~english
+ @brief Change the direct parent group of this option.
- \a parentGroup 上级组.
+ \a parentGroup parent group.
*/
void DSettingsOption::setParentGroup(QPointer<DSettingsGroup> parentGroup)
{
}
/*!
- \brief Return the full key of this option, include all parent.
- \brief 当前选项的键值.
- \return 返回当前选项的键值.
+@~english
+ @brief Return the full key of this option, include all parent.
+ @return Return the full key of this option, include all parent.
*/
QString DSettingsOption::key() const
{
}
/*!
- \brief Get display name of the option, it may be translated.
- \brief 当前选项的名称.
- \return 返回当前选项的名称.
+@~english
+ @brief Get display name of the option, it may be translated.
+ @return Return the name of the option.
*/
QString DSettingsOption::name() const
{
}
/*!
- \brief Check this option can be reset to default value. if false, reset action will not take effect.
- \brief 选项是否可以重置,如果可以重置,在调用reset方法后,选项的值会变成初始值.
+@~english
+ @brief Check this option can be reset to default value. if false, reset action will not take effect.
- \return true if can be reset.
+ @return true if can be reset.
*/
bool DSettingsOption::canReset() const
{
}
/*!
- \brief Default value of this option, must config in this json desciption file.
- \brief 选项的默认值.
+@~english
+ @brief Default value of this option, must config in this json desciption file.
- \return 返回选项的默认值.
+ @return Return the default value of this option.
*/
QVariant DSettingsOption::defaultValue() const
{
}
/*!
- \brief Get current value of option.
- \brief 选项的当前值.
+@~english
+ @brief Get current value of option.
- \return 返回选项的当前值.
+ @return Return the current value of this option.
*/
QVariant DSettingsOption::value() const
{
}
/*!
- \brief Custom data of option, like QObject::property.
- \a dataType 数据类型.
- \brief 选项的附件data,用于未选项设置一些额外的辅助属性.
+@~english
+ @brief Custom data of option, like QObject::property.
+ \a dataType Data type.
- \return 数据类型对应的数据.
- \sa QObject::property
- \sa Dtk::Core::DSettingsOption::setData
+ @return Data type Indicates the data.
+ @sa QObject::property
+ @sa Dtk::Core::DSettingsOption::setData
*/
QVariant DSettingsOption::data(const QString &dataType) const
{
}
/*!
- \brief UI widget type of this option.
- \brief 选项的控件类型.
+@~english
+ @brief UI widget type of this option.
- \return 返回选项的控件类型.
- \sa Dtk::Widget::DSettingsWidgetFactory
+ @return Returns the UI widget type of the option.
+ @sa Dtk::Widget::DSettingsWidgetFactory
*/
QString DSettingsOption::viewType() const
{
}
/*!
- \brief Check this option will show on DSettings dialog.
- \brief 检查选项是否会在界面上显示.
+@~english
+ @brief Check this option will show on DSettings dialog.
- \return true if option not bind to ui element.
- \return 如果显示则返回true,否则返回false。
+ @return true if option not bind to ui element.
*/
bool DSettingsOption::isHidden() const
{
}
/*!
- \brief Convert QJsonObject to DSettingsOption.
- \brief 从json对象中反序列化出一个选项对象.
+@~english
+ @brief Convert QJsonObject to DSettingsOption.
\a prefixKey instead parse prefix key from parent.
- \a prefixKey 选项的前缀
\a json is an QJsonObejct instance.
- \a json 待反序列化的json对象
- \return 返回解析完成后的 option 数据.
+ @return Return the option data after parsing.
*/
QPointer<DSettingsOption> DSettingsOption::fromJson(const QString &prefixKey, const QJsonObject &json)
{
}
/*!
- \brief Set current value of option.
- \brief 设置选项的当前值.
+@~english
+ @brief Set current value of option.
- \a value 选项的当前值.
+ \a value Current value of option.
*/
void DSettingsOption::setValue(QVariant value)
{
}
///*!
-// * \brief Override default value of json
+// * @brief Override default value of json
// * \a value
// */
//void DSettingsOption::setDefault(QVariant value)
//}
/*!
- \brief Set custom data.
- \brief 为选项添加自定义属性.
+@~english
+ @brief Set custom data.
\a dataType is data id, just a unique string.
\a value of the data id.
- \a dataType 选项的扎属性数据id,对每个选项必须唯一
- \a value 选项id对应的值
- \sa Dtk::Core::DSettingsOption::data
- \sa Dtk::Core::DSettingsOption::data
+ @sa Dtk::Core::DSettingsOption::data
*/
void DSettingsOption::setData(const QString &dataType, QVariant value)
{
}
/*!
- \brief Parse QJsonObject to DSettingsOption.
- \brief 从json对象中反序列化,并设置自身的值。
+@~english
+ @brief Parse QJsonObject to DSettingsOption.
\a prefixKey instead parse prefix key from parent.
- \a json is an QJsonObejct instance.
- \a 选项的前缀
- \a 待反序列化的json对象
- \sa QPointer<DSettingsOption> Dtk::Core::DSettingsOption::fromJson(const QString &prefixKey, const QJsonObject &json)
- \sa QPointer<DSettingsOption> Dtk::Core::DSettingsOption::fromJson(const QString &prefixKey, const QJsonObject &json)
+ \a option is an QJsonObejct instance.
+ @sa QPointer<DSettingsOption> Dtk::Core::DSettingsOption::fromJson(const QString &prefixKey, const QJsonObject &json)
*/
void DSettingsOption::parseJson(const QString &prefixKey, const QJsonObject &option)
{
if(LINUX)
- file(GLOB SETTINGS_SOURCE
+ file(GLOB SETTINGS_SOURCES
${CMAKE_CURRENT_LIST_DIR}/*.cpp
${CMAKE_CURRENT_LIST_DIR}/backend/*.cpp
)
- file(GLOB SETTINGS_HEADER
+ file(GLOB SETTINGS_HEADERS
${CMAKE_CURRENT_LIST_DIR}/../../include/settings/*.h
${CMAKE_CURRENT_LIST_DIR}/../../include/settings/backend/*.h
)
else()
- file(GLOB SETTINGS_SOURCE
+ file(GLOB SETTINGS_SOURCES
${CMAKE_CURRENT_LIST_DIR}/*.cpp
${CMAKE_CURRENT_LIST_DIR}/backend/dsettingsdconfigbackend.cpp
${CMAKE_CURRENT_LIST_DIR}/backend/qsettingbackend.cpp
)
- file(GLOB SETTINGS_HEADER
+ file(GLOB SETTINGS_HEADERS
${CMAKE_CURRENT_LIST_DIR}/../../include/settings/*.h
${CMAKE_CURRENT_LIST_DIR}/../../include/settings/backend/dsettingsdconfigbackend.h
${CMAKE_CURRENT_LIST_DIR}/../../include/settings/backend/qsettingbackend.h
)
endif()
+
+if(DTK_VERSION_MAJOR)
+ list(REMOVE_ITEM SETTINGS_SOURCES "${CMAKE_CURRENT_LIST_DIR}/backend/gsettingsbackend.cpp")
+ list(REMOVE_ITEM SETTINGS_HEADERS "${CMAKE_CURRENT_LIST_DIR}/../../include/settings/backend/gsettingsbackend.h")
+endif()
+
set(settings_SRC
- ${SETTINGS_HEADER}
- ${SETTINGS_SOURCE}
+ ${SETTINGS_HEADERS}
+ ${SETTINGS_SOURCES}
)
DCORE_BEGIN_NAMESPACE
/*!
- \class Dtk::Core::DAbstractUnitFormatter
- \inmodule dtkcore
- \brief DAbstractUnitFormatter 类是对拥有相同类型数据管理的接口类.
-
- 接口定义了最大值、最小值、转换单位和单位对应的字符串。
+ @~english
+ @class Dtk::Core::DAbstractUnitFormatter
+ @ingroup dutil
+ @brief DAbstractUnitFormatter is a interface which manages the data with the
+ same type
+
+ DAbstractUnitFormatter provides interfaces including: <br>
+ 1. The maximum value of one unit.
+ 2. The minumum value of one unit.
+ 3. The convert rate to next unit.
+ 4. The string to display one unit.
*/
/*!
- \fn int DAbstractUnitFormatter::unitMax() const = 0
- \brief 返回列表中最大的单位.
+ @~english
+ @fn int DAbstractUnitFormatter::unitMax() const = 0
+ @brief Get the maximum unit in the list
*/
/*!
- \fn int DAbstractUnitFormatter::unitMin() const = 0
- \brief 返回列表中最小的单位.
+ @~english
+ @fn int DAbstractUnitFormatter::unitMin() const = 0
+ @brief Get the minumum unit in the list
*/
/*!
- \fn uint DAbstractUnitFormatter::unitConvertRate(int unitId) const = 0
- \brief 返回当前设置的转换单位.
- \a unitId 单元ID.
+ @~english
+ @fn uint DAbstractUnitFormatter::unitConvertRate(int unitId) const = 0
+ @brief Get the convert rate to next unit of unitId
+ @param[in] unitId the id of one unit
*/
/*!
- \fn qreal DAbstractUnitFormatter::unitValueMax(int unitId) const
- \brief 返回列表中根据当前设置的转换单位的最大值.
- \a unitId 单元ID.
+ @~english
+ @fn qreal DAbstractUnitFormatter::unitValueMax(int unitId) const
+ @brief Get the maximum value of unitId
+ @param[in] unitId the id of one unit
*/
/*!
- \fn qreal DAbstractUnitFormatter::unitValueMin(int unitId) const
- \brief 返回列表中根据当前设置的转换单位的最小值.
- \a unitId 单元ID.
+ @~english
+ @fn qreal DAbstractUnitFormatter::unitValueMin(int unitId) const
+ @brief Get the minumum value of unitId
+ @param[in] unitId the id of one unit
*/
/*!
- \fn QString DAbstractUnitFormatter::unitStr(int unitId) const = 0
- \brief 传入id,返回列表中对应的字符串.
- \a unitId 单元ID.
+ @~english
+ @fn QString DAbstractUnitFormatter::unitStr(int unitId) const = 0
+ @brief Get the display string of unitId
+ @param[in] unitId the id of one unit
*/
/*!
- \brief DAbstractUnitFormatter 的构造函数.
-
- */
-DAbstractUnitFormatter::DAbstractUnitFormatter()
-{
+ @~english
+ @brief Constructor of DAbstractUnitFormatter
-}
+ */
+DAbstractUnitFormatter::DAbstractUnitFormatter() {}
/*!
- \brief DAbstractUnitFormatter 的析构函数
-
- */
-DAbstractUnitFormatter::~DAbstractUnitFormatter()
-{
+ @~english
+ @brief Destructor of DAbstractUnitFormatter
-}
+ */
+DAbstractUnitFormatter::~DAbstractUnitFormatter() {}
/*!
- \brief 将传入的值从当前转换单位转换到目标单位上,返回转换过的值
- 如果当前转换单位小于目标单位,值会被缩小,反之会放大,当前转换单位也会被缩小和放大,直至当前转换单位等于目标单位。
-
- \a value 原始数值
- \a currentUnit 当前的转换比率
- \a targetUnit 目标的转换比率
- \return qreal 返回转换过的值
+ @~english
+ @brief Convert value from unit currentUnit to targetUnit. If currentUnit is
+ smaller than targetUnit, the value will zoom out until the unit is equal to
+ targetUnit. Instead it will zoom in.
+
+ @param[in] value primitive value
+ @param[in] currentUnit current unit of value
+ @param[in] targetUnit target unit to convert to
+ @return qreal the value with unit targetUnit
*/
-qreal DAbstractUnitFormatter::formatAs(qreal value, int currentUnit, const int targetUnit) const
-{
- while (currentUnit < targetUnit)
- value /= unitConvertRate(currentUnit++);
- while (currentUnit > targetUnit)
- value *= unitConvertRate(--currentUnit);
-
- return value;
+qreal DAbstractUnitFormatter::formatAs(qreal value, int currentUnit,
+ const int targetUnit) const {
+ while (currentUnit < targetUnit)
+ value /= unitConvertRate(currentUnit++);
+ while (currentUnit > targetUnit)
+ value *= unitConvertRate(--currentUnit);
+
+ return value;
}
/*!
- \brief 将值转换到最合适的单位上
-
- 如果值大于 unitMin() 或者小于 unitMax() ,会尽量保证值被转换到接近最小值的合适单位上。
-
- \a value 原始数值
- \a unit 当前的转换单位
- \return QPair<qreal, int> 转换过的数值和转化单位
+ @~english
+ @brief Convert the value to a proper unit.
+
+ If unit is larger than unitMin() or smaller than unitMax, value will be
+ converted to the unit where value is close to the unitValueMin()
+
+ @param[in] value primitive value
+ @param[in] unit current unit
+ @return QPair<qreal, int> a pair of the converted value and unit
*/
-QPair<qreal, int> DAbstractUnitFormatter::format(const qreal value, const int unit) const
-{
- // can convert to smaller unit
- if (unit > unitMin() && value < unitValueMin(unit))
- return format(value * unitConvertRate(unit - 1), unit - 1);
+QPair<qreal, int> DAbstractUnitFormatter::format(const qreal value,
+ const int unit) const {
+ // can convert to smaller unit
+ if (unit > unitMin() && value < unitValueMin(unit))
+ return format(value * unitConvertRate(unit - 1), unit - 1);
- // can convert to bigger unit
- if (unit < unitMax() && value > unitValueMax(unit))
- return format(value / unitConvertRate(unit), unit + 1);
+ // can convert to bigger unit
+ if (unit < unitMax() && value > unitValueMax(unit))
+ return format(value / unitConvertRate(unit), unit + 1);
- return QPair<qreal, int>(value, unit);
+ return QPair<qreal, int>(value, unit);
}
/*!
- \brief 是 format() ,但是包含了完整的转换数据
-
- \a value
- \a unit
- \return QList<QPair<qreal, int> >
+ @~english
+ @brief A version of format() with all the convert data
+
+ @param[in] value primitive value
+ @param[in] unit current unit
+ @return QList<QPair<qreal, int>> pairs of all converted value and unit
*/
-QList<QPair<qreal, int> > DAbstractUnitFormatter::formatAsUnitList(const qreal value, int unit) const
-{
- if (qFuzzyIsNull(value))
- return QList<QPair<qreal, int>>();
-
- if (value < unitValueMin(unit) || unit == unitMin())
- {
- if (unit != unitMin())
- return formatAsUnitList(value * unitConvertRate(unit - 1), unit - 1);
- else
- return std::move(QList<QPair<qreal, int>>() << QPair<qreal, int>(value, unit));
- }
-
- ulong _value = ulong(value);
- QList<QPair<qreal, int>> ret = formatAsUnitList(value - _value, unit);
-
- while (_value && unit != unitMax())
- {
- const ulong rate = unitConvertRate(unit);
- const ulong r = _value % rate;
- if (r)
- ret.push_front(QPair<qreal, int>(r, unit));
-
- unit += 1;
- _value /= rate;
- }
-
- if (_value)
- ret.push_front(QPair<qreal, int>(_value, unit));
-
- return ret;
+QList<QPair<qreal, int>>
+DAbstractUnitFormatter::formatAsUnitList(const qreal value, int unit) const {
+ if (qFuzzyIsNull(value))
+ return QList<QPair<qreal, int>>();
+
+ if (value < unitValueMin(unit) || unit == unitMin()) {
+ if (unit != unitMin())
+ return formatAsUnitList(value * unitConvertRate(unit - 1), unit - 1);
+ else
+ return std::move(QList<QPair<qreal, int>>()
+ << QPair<qreal, int>(value, unit));
+ }
+
+ ulong _value = ulong(value);
+ QList<QPair<qreal, int>> ret = formatAsUnitList(value - _value, unit);
+
+ while (_value && unit != unitMax()) {
+ const ulong rate = unitConvertRate(unit);
+ const ulong r = _value % rate;
+ if (r)
+ ret.push_front(QPair<qreal, int>(r, unit));
+
+ unit += 1;
+ _value /= rate;
+ }
+
+ if (_value)
+ ret.push_front(QPair<qreal, int>(_value, unit));
+
+ return ret;
}
DCORE_END_NAMESPACE
#include <DDBusExtendedAbstractInterface>
-#include <QtDBus/QDBusMetaType>
#include <QtDBus/QDBusMessage>
+#include <QtDBus/QDBusMetaType>
#include <QtDBus/QDBusPendingCall>
#include <QtDBus/QDBusPendingCallWatcher>
#include <QtDBus/QDBusPendingReply>
#include <QtCore/QDebug>
#include <QtCore/QMetaProperty>
+DCORE_BEGIN_NAMESPACE
Q_GLOBAL_STATIC_WITH_ARGS(QByteArray, dBusInterface, ("org.freedesktop.DBus"))
Q_GLOBAL_STATIC_WITH_ARGS(QByteArray, dBusPropertiesInterface, ("org.freedesktop.DBus.Properties"))
Q_GLOBAL_STATIC_WITH_ARGS(QByteArray, propertyChangedSignature, ("propertyChanged(QString,QVariant)"))
Q_GLOBAL_STATIC_WITH_ARGS(QByteArray, propertyInvalidatedSignature, ("propertyInvalidated(QString)"))
-
-DDBusExtendedAbstractInterface::DDBusExtendedAbstractInterface(const QString &service, const QString &path, const char *interface, const QDBusConnection &connection, QObject *parent)
+DDBusExtendedAbstractInterface::DDBusExtendedAbstractInterface(
+ const QString &service, const QString &path, const char *interface, const QDBusConnection &connection, QObject *parent)
: QDBusAbstractInterface(service, path, interface, connection, parent)
, m_sync(true)
, m_useCache(false)
, m_getAllPendingCallWatcher(0)
, m_propertiesChangedConnected(false)
{
- const_cast<QDBusConnection&>(connection).connect(QString("org.freedesktop.DBus"), QString("/org/freedesktop/DBus"), QString("org.freedesktop.DBus"), QString("NameOwnerChanged"), this, SLOT(onDBusNameOwnerChanged(QString,QString,QString)));
+ const_cast<QDBusConnection &>(connection)
+ .connect(QString("org.freedesktop.DBus"),
+ QString("/org/freedesktop/DBus"),
+ QString("org.freedesktop.DBus"),
+ QString("NameOwnerChanged"),
+ this,
+ SLOT(onDBusNameOwnerChanged(QString, QString, QString)));
}
-DDBusExtendedAbstractInterface::~DDBusExtendedAbstractInterface()
+DDBusExtendedAbstractInterface::~DDBusExtendedAbstractInterface() {}
+
+void DDBusExtendedAbstractInterface::setSync(bool sync)
{
+ setSync(sync, true);
}
-void DDBusExtendedAbstractInterface::setSync(bool sync) { setSync(sync, true); }
-
/*
- * Note: After sync is set to false, it will always return a empty value
+ * @~english
+ * @note After sync is set to false, it will always return a empty value
* if you call the property's get function directly. So you can only get it
- * through the changed signal when you get an property, and it's also a good idea
- * to save a cache yourself.
- */
-
-/*
- * 注意: 如果设置 sync 为 false 那么在调用属性的 get 函数获取一个属性时会一直返回空值,
- * 解决方法是监听属性的 changed 信号并自行保存一份缓存, 让 changed 信号修改这个缓存
+ * through the changed signal when you get an property, and it's also a good
+ * idea to save a cache yourself.
*/
void DDBusExtendedAbstractInterface::setSync(bool sync, bool autoStart)
{
if (reply.signature() != QLatin1String("a{sv}")) {
QString errorMessage = QStringLiteral("Invalid signature \"%1\" in return from call to %2")
- .arg(reply.signature(),
- QString(*dBusPropertiesInterface()));
+ .arg(reply.signature(), QString(*dBusPropertiesInterface()));
qWarning() << Q_FUNC_INFO << errorMessage;
m_lastExtendedError = QDBusError(QDBusError::InvalidSignature, errorMessage);
return;
QDBusPendingReply<QVariantMap> async = connection().asyncCall(msg);
m_getAllPendingCallWatcher = new QDBusPendingCallWatcher(async, this);
- connect(m_getAllPendingCallWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onAsyncGetAllPropertiesFinished(QDBusPendingCallWatcher*)));
+ connect(m_getAllPendingCallWatcher,
+ SIGNAL(finished(QDBusPendingCallWatcher *)),
+ this,
+ SLOT(onAsyncGetAllPropertiesFinished(QDBusPendingCallWatcher *)));
return;
}
}
void DDBusExtendedAbstractInterface::connectNotify(const QMetaMethod &signal)
{
- if (signal.methodType() == QMetaMethod::Signal
- && (signal.methodSignature() == *propertyChangedSignature()
- || signal.methodSignature() == *propertyInvalidatedSignature())) {
+ if (signal.methodType() == QMetaMethod::Signal && (signal.methodSignature() == *propertyChangedSignature() ||
+ signal.methodSignature() == *propertyInvalidatedSignature())) {
if (!m_propertiesChangedConnected) {
QStringList argumentMatch;
argumentMatch << interface();
- connection().connect(service(), path(), *dBusPropertiesInterface(), *dBusPropertiesChangedSignal(),
- argumentMatch, QString(),
- this, SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+ connection().connect(service(),
+ path(),
+ *dBusPropertiesInterface(),
+ *dBusPropertiesChangedSignal(),
+ argumentMatch,
+ QString(),
+ this,
+ SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
m_propertiesChangedConnected = true;
return;
void DDBusExtendedAbstractInterface::disconnectNotify(const QMetaMethod &signal)
{
- if (signal.methodType() == QMetaMethod::Signal
- && (signal.methodSignature() == *propertyChangedSignature()
- || signal.methodSignature() == *propertyInvalidatedSignature())) {
- if (m_propertiesChangedConnected
- && 0 == receivers(propertyChangedSignature()->constData())
- && 0 == receivers(propertyInvalidatedSignature()->constData())) {
+ if (signal.methodType() == QMetaMethod::Signal && (signal.methodSignature() == *propertyChangedSignature() ||
+ signal.methodSignature() == *propertyInvalidatedSignature())) {
+ if (m_propertiesChangedConnected && 0 == receivers(propertyChangedSignature()->constData()) &&
+ 0 == receivers(propertyInvalidatedSignature()->constData())) {
QStringList argumentMatch;
argumentMatch << interface();
- connection().disconnect(service(), path(), *dBusPropertiesInterface(), *dBusPropertiesChangedSignal(),
- argumentMatch, QString(),
- this, SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+ connection().disconnect(service(),
+ path(),
+ *dBusPropertiesInterface(),
+ *dBusPropertiesChangedSignal(),
+ argumentMatch,
+ QString(),
+ this,
+ SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
m_propertiesChangedConnected = false;
return;
if (m_useCache) {
int propertyIndex = metaObject()->indexOfProperty(propname);
QMetaProperty metaProperty = metaObject()->property(propertyIndex);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ return QVariant{metaProperty.metaType(), propertyPtr};
+#else
return QVariant(metaProperty.userType(), propertyPtr);
+#endif
}
if (m_sync) {
QVariant ret = property(propname);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ ret.metaType().construct(propertyPtr, ret.constData());
+#else
QMetaType::construct(ret.userType(), propertyPtr, ret.constData());
+#endif
return ret;
} else {
if (!isValid()) {
int propertyIndex = metaObject()->indexOfProperty(propname);
if (-1 == propertyIndex) {
- QString errorMessage = QStringLiteral("Got unknown property \"%1\" to read")
- .arg(QString::fromLatin1(propname));
+ QString errorMessage = QStringLiteral("Got unknown property \"%1\" to read").arg(QString::fromLatin1(propname));
m_lastExtendedError = QDBusMessage::createError(QDBusError::Failed, errorMessage);
qWarning() << Q_FUNC_INFO << errorMessage;
return QVariant();
QMetaProperty metaProperty = metaObject()->property(propertyIndex);
if (!metaProperty.isReadable()) {
- QString errorMessage = QStringLiteral("Property \"%1\" is NOT readable")
- .arg(QString::fromLatin1(propname));
+ QString errorMessage = QStringLiteral("Property \"%1\" is NOT readable").arg(QString::fromLatin1(propname));
m_lastExtendedError = QDBusMessage::createError(QDBusError::Failed, errorMessage);
qWarning() << Q_FUNC_INFO << errorMessage;
return QVariant();
// is this metatype registered?
const char *expectedSignature = "";
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ if (metaProperty.typeId() != QMetaType::QVariant) {
+ expectedSignature = QDBusMetaType::typeToSignature(metaProperty.metaType());
+#else
if (int(metaProperty.type()) != QMetaType::QVariant) {
expectedSignature = QDBusMetaType::typeToSignature(metaProperty.userType());
+#endif
if (0 == expectedSignature) {
- QString errorMessage =
- QStringLiteral("Type %1 must be registered with Qt D-Bus "
- "before it can be used to read property "
- "%2.%3")
- .arg(metaProperty.typeName(),
- interface(),
- propname);
+ QString errorMessage = QStringLiteral("Type %1 must be registered with Qt D-Bus "
+ "before it can be used to read property "
+ "%2.%3")
+ .arg(metaProperty.typeName(), interface(), propname);
m_lastExtendedError = QDBusMessage::createError(QDBusError::Failed, errorMessage);
qWarning() << Q_FUNC_INFO << errorMessage;
return QVariant();
}
asyncProperty(propname);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ return QVariant{metaProperty.metaType(), propertyPtr};
+#else
return QVariant(metaProperty.userType(), propertyPtr);
+#endif
}
}
int propertyIndex = metaObject()->indexOfProperty(propname);
if (-1 == propertyIndex) {
- QString errorMessage = QStringLiteral("Got unknown property \"%1\" to write")
- .arg(QString::fromLatin1(propname));
+ QString errorMessage = QStringLiteral("Got unknown property \"%1\" to write").arg(QString::fromLatin1(propname));
m_lastExtendedError = QDBusMessage::createError(QDBusError::Failed, errorMessage);
qWarning() << Q_FUNC_INFO << errorMessage;
return;
QMetaProperty metaProperty = metaObject()->property(propertyIndex);
if (!metaProperty.isWritable()) {
- QString errorMessage = QStringLiteral("Property \"%1\" is NOT writable")
- .arg(QString::fromLatin1(propname));
+ QString errorMessage = QStringLiteral("Property \"%1\" is NOT writable").arg(QString::fromLatin1(propname));
m_lastExtendedError = QDBusMessage::createError(QDBusError::Failed, errorMessage);
qWarning() << Q_FUNC_INFO << errorMessage;
return;
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ QVariant variant = QVariant{metaProperty.metaType(), propertyPtr};
+#else
QVariant variant = QVariant(metaProperty.type(), propertyPtr);
+#endif
variant = value;
asyncSetProperty(propname, variant);
QDBusPendingReply<QVariant> async = connection().asyncCall(msg);
DDBusExtendedPendingCallWatcher *watcher = new DDBusExtendedPendingCallWatcher(async, propertyName, QVariant(), this);
- connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onAsyncPropertyFinished(QDBusPendingCallWatcher*)));
+ connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(onAsyncPropertyFinished(QDBusPendingCallWatcher *)));
return QVariant();
}
QDBusPendingReply<> async = connection().asyncCall(msg);
DDBusExtendedPendingCallWatcher *watcher = new DDBusExtendedPendingCallWatcher(async, propertyName, value, this);
- connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onAsyncSetPropertyFinished(QDBusPendingCallWatcher*)));
+ connect(
+ watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(onAsyncSetPropertyFinished(QDBusPendingCallWatcher *)));
}
void DDBusExtendedAbstractInterface::startServiceProcess()
{
const QString &servName = service();
- if (isValid())
- {
+ if (isValid()) {
qWarning() << "Service" << servName << "is already started.";
return;
}
- QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/", *dBusInterface(), QStringLiteral("StartServiceByName"));
+ QDBusMessage msg =
+ QDBusMessage::createMethodCall("org.freedesktop.DBus", "/", *dBusInterface(), QStringLiteral("StartServiceByName"));
msg << servName << quint32(0);
QDBusPendingReply<quint32> async = connection().asyncCall(msg);
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this);
void DDBusExtendedAbstractInterface::onStartServiceProcessFinished(QDBusPendingCallWatcher *w)
{
- if (w->isError())
- {
+ if (w->isError()) {
m_lastExtendedError = w->error();
} else {
m_lastExtendedError = QDBusError();
m_lastExtendedError = reply.error();
} else {
int propertyIndex = metaObject()->indexOfProperty(watcher->asyncProperty().toLatin1().constData());
- QVariant value = demarshall(interface(),
- metaObject()->property(propertyIndex),
- reply.value(),
- &m_lastExtendedError);
+ QVariant value = demarshall(interface(), metaObject()->property(propertyIndex), reply.value(), &m_lastExtendedError);
if (m_lastExtendedError.isValid()) {
Q_EMIT propertyInvalidated(watcher->asyncProperty());
// Resetting the property to its previous value after sending the
// finished signal
- if (reply.isError()) {
+ if (!reply.isError()) {
m_lastExtendedError = QDBusError();
Q_EMIT propertyChanged(watcher->asyncProperty(), watcher->previousValue());
}
watcher->deleteLater();
}
-void DDBusExtendedAbstractInterface::onPropertiesChanged(const QString& interfaceName,
- const QVariantMap& changedProperties,
- const QStringList& invalidatedProperties)
+void DDBusExtendedAbstractInterface::onPropertiesChanged(const QString &interfaceName,
+ const QVariantMap &changedProperties,
+ const QStringList &invalidatedProperties)
{
if (interfaceName == interface()) {
QVariantMap::const_iterator i = changedProperties.constBegin();
int propertyIndex = metaObject()->indexOfProperty(i.key().toLatin1().constData());
if (-1 == propertyIndex) {
- qDebug() << Q_FUNC_INFO << "Got unknown changed property" << i.key();
+ qDebug() << Q_FUNC_INFO << "Got unknown changed property" << i.key();
} else {
QVariant value = demarshall(interface(), metaObject()->property(propertyIndex), i.value(), &m_lastExtendedError);
QStringList::const_iterator j = invalidatedProperties.constBegin();
while (j != invalidatedProperties.constEnd()) {
if (-1 == metaObject()->indexOfProperty(j->toLatin1().constData())) {
- qDebug() << Q_FUNC_INFO << "Got unknown invalidated property" << *j;
+ qDebug() << Q_FUNC_INFO << "Got unknown invalidated property" << *j;
} else {
m_lastExtendedError = QDBusError();
Q_EMIT propertyInvalidated(*j);
void DDBusExtendedAbstractInterface::onDBusNameOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner)
{
- if (name == service() && oldOwner.isEmpty())
- {
+ if (name == service() && oldOwner.isEmpty()) {
m_dbusOwner = newOwner;
Q_EMIT serviceValidChanged(true);
- }
- else if (name == m_dbusOwner && newOwner.isEmpty())
- {
+ } else if (name == m_dbusOwner && newOwner.isEmpty()) {
m_dbusOwner.clear();
Q_EMIT serviceValidChanged(false);
}
}
-QVariant DDBusExtendedAbstractInterface::demarshall(const QString &interface, const QMetaProperty &metaProperty, const QVariant &value, QDBusError *error)
+QVariant DDBusExtendedAbstractInterface::demarshall(const QString &interface,
+ const QMetaProperty &metaProperty,
+ const QVariant &value,
+ QDBusError *error)
{
Q_ASSERT(metaProperty.isValid());
Q_ASSERT(error != 0);
return value;
}
- QVariant result = QVariant(metaProperty.userType(), (void*)0);
QString errorMessage;
- const char *expectedSignature = QDBusMetaType::typeToSignature(metaProperty.userType());
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ QVariant result = QVariant{metaProperty.metaType()};
+ const char *expectedSignature = QDBusMetaType::typeToSignature(metaProperty.metaType());
+#else
+ QVariant result = QVariant(metaProperty.userType(), (void *)0);
+ const char *expectedSignature = QDBusMetaType::typeToSignature(metaProperty.userType());
+#endif
if (value.userType() == qMetaTypeId<QDBusArgument>()) {
// demarshalling a DBus argument ...
QDBusArgument dbusArg = value.value<QDBusArgument>();
if (expectedSignature == dbusArg.currentSignature().toLatin1()) {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ QDBusMetaType::demarshall(dbusArg, metaProperty.metaType(), result.data());
+#else
QDBusMetaType::demarshall(dbusArg, metaProperty.userType(), result.data());
+#endif
if (!result.isValid()) {
errorMessage = QStringLiteral("Unexpected failure demarshalling "
"upon PropertiesChanged signal arrival "
"for property `%3.%4' (expected type `%5' (%6))")
- .arg(interface,
- QString::fromLatin1(metaProperty.name()),
- QString::fromLatin1(metaProperty.typeName()),
- expectedSignature);
+ .arg(interface,
+ QString::fromLatin1(metaProperty.name()),
+ QString::fromLatin1(metaProperty.typeName()),
+ expectedSignature);
}
} else {
- errorMessage = QStringLiteral("Unexpected `user type' (%2) "
- "upon PropertiesChanged signal arrival "
- "for property `%3.%4' (expected type `%5' (%6))")
- .arg(dbusArg.currentSignature(),
- interface,
- QString::fromLatin1(metaProperty.name()),
- QString::fromLatin1(metaProperty.typeName()),
- QString::fromLatin1(expectedSignature));
+ errorMessage = QStringLiteral("Unexpected `user type' (%2) "
+ "upon PropertiesChanged signal arrival "
+ "for property `%3.%4' (expected type `%5' (%6))")
+ .arg(dbusArg.currentSignature(),
+ interface,
+ QString::fromLatin1(metaProperty.name()),
+ QString::fromLatin1(metaProperty.typeName()),
+ QString::fromLatin1(expectedSignature));
}
} else {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ const char *actualSignature = QDBusMetaType::typeToSignature(value.metaType());
+#else
const char *actualSignature = QDBusMetaType::typeToSignature(value.userType());
+#endif
errorMessage = QStringLiteral("Unexpected `%1' (%2) "
"upon PropertiesChanged signal arrival "
"for property `%3.%4' (expected type `%5' (%6))")
- .arg(QString::fromLatin1(value.typeName()),
- QString::fromLatin1(actualSignature),
- interface,
- QString::fromLatin1(metaProperty.name()),
- QString::fromLatin1(metaProperty.typeName()),
- QString::fromLatin1(expectedSignature));
+ .arg(QString::fromLatin1(value.typeName()),
+ QString::fromLatin1(actualSignature),
+ interface,
+ QString::fromLatin1(metaProperty.name()),
+ QString::fromLatin1(metaProperty.typeName()),
+ QString::fromLatin1(expectedSignature));
}
if (errorMessage.isEmpty()) {
return result;
}
+DCORE_END_NAMESPACE
#include "ddbusextendedpendingcallwatcher_p.h"
-
-DDBusExtendedPendingCallWatcher::DDBusExtendedPendingCallWatcher(const QDBusPendingCall &call, const QString &asyncProperty, const QVariant &previousValue, QObject *parent)
+DCORE_BEGIN_NAMESPACE
+DDBusExtendedPendingCallWatcher::DDBusExtendedPendingCallWatcher(const QDBusPendingCall &call,
+ const QString &asyncProperty,
+ const QVariant &previousValue,
+ QObject *parent)
: QDBusPendingCallWatcher(call, parent)
, m_asyncProperty(asyncProperty)
, m_previousValue(previousValue)
{
}
-DDBusExtendedPendingCallWatcher::~DDBusExtendedPendingCallWatcher()
-{
-}
+DDBusExtendedPendingCallWatcher::~DDBusExtendedPendingCallWatcher() {}
+DCORE_END_NAMESPACE
//
//
-
#ifndef DDBUSEXTENDEDPENDINGCALLWATCHER_P_H
#define DDBUSEXTENDEDPENDINGCALLWATCHER_P_H
-
-#include <QDBusPendingCallWatcher>
+#include "dtkcore_global.h"
#include <QDBusError>
+#include <QDBusPendingCallWatcher>
-class DDBusExtendedPendingCallWatcher: public QDBusPendingCallWatcher
+DCORE_BEGIN_NAMESPACE
+class DDBusExtendedPendingCallWatcher : public QDBusPendingCallWatcher
{
Q_OBJECT
public:
explicit DDBusExtendedPendingCallWatcher(const QDBusPendingCall &call,
- const QString &asyncProperty,
- const QVariant &previousValue,
- QObject *parent = 0);
+ const QString &asyncProperty,
+ const QVariant &previousValue,
+ QObject *parent = 0);
~DDBusExtendedPendingCallWatcher();
Q_PROPERTY(QString AsyncProperty READ asyncProperty)
QString m_asyncProperty;
QVariant m_previousValue;
};
+DCORE_END_NAMESPACE
#endif /* DDBUSEXTENDEDPENDINGCALLWATCHER_P_H */
static const QString &PropertiesChanged = QStringLiteral("PropertiesChanged");
static const char *PropertyName = "propname";
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ #define PropType(metaProperty) metaProperty.metaType()
+#else
+ #define PropType(metaProperty) metaProperty.userType()
+#endif
+
+static QVariant demarshall(const QMetaProperty &metaProperty, const QVariant &value)
+{
+ // if the value is the same with parent one, return value
+ if (value.userType() == metaProperty.userType())
+ return value;
+
+ // unwrap the value with parent one
+ QVariant result = QVariant(PropType(metaProperty), nullptr);
+
+
+ if (value.userType() == qMetaTypeId<QDBusArgument>()) {
+ QDBusArgument dbusArg = value.value<QDBusArgument>();
+ QDBusMetaType::demarshall(dbusArg, PropType(metaProperty), result.data());
+ }
+
+ return result;
+}
+
DDBusInterfacePrivate::DDBusInterfacePrivate(DDBusInterface *interface, QObject *parent)
: QObject(interface)
, m_parent(parent)
{
if (!m_parent)
return;
- m_propertyMap.insert(propName, value);
+
const QMetaObject *metaObj = m_parent->metaObject();
const char *typeName(value.typeName());
void *data = const_cast<void *>(value.data());
- if (value.canConvert<QDBusArgument>()) {
+ int propertyIndex = metaObj->indexOfProperty(propName);
+ QVariant result = value;
+
+ // TODO: it now cannot convert right, Like QMap
+ // if there is property, then try to convert with property
+ if (propertyIndex != -1) {
+ QMetaProperty metaProperty = metaObj->property(propertyIndex);
+ result = demarshall(metaProperty, value);
+ data = const_cast<void *>(result.data());
+ typeName = result.typeName();
+ } else if (value.canConvert<QDBusArgument>()) {
auto dbusType = qvariant_cast<QDBusArgument>(value);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ auto dbusMetaType = QDBusMetaType::signatureToMetaType(dbusType.currentSignature().toUtf8());
+ typeName = dbusMetaType.name();
+
+ void *dbusData = dbusMetaType.create();
+ QDBusMetaType::demarshall(dbusType, dbusMetaType, dbusData);
+ data = dbusData;
+ QObject dbusDataDeleter;
+ QObject::connect(&dbusDataDeleter, &QObject::destroyed, m_parent, [dbusData, dbusMetaType]() {
+ dbusMetaType.destroy(dbusData);
+ }, Qt::QueuedConnection);
+#else
auto dbusMetaType = QDBusMetaType::signatureToType(dbusType.currentSignature().toUtf8());
typeName = QMetaType::typeName(dbusMetaType);
QObject::connect(&dbusDataDeleter, &QObject::destroyed, m_parent, [dbusData, dbusMetaType]() {
QMetaType::destroy(dbusMetaType, dbusData);
}, Qt::QueuedConnection);
+#endif
}
QByteArray baSignal = QStringLiteral("%1Changed(%2)").arg(propName).arg(typeName).toLatin1();
- QByteArray baSignalName = QStringLiteral("%1Changed").arg(propName).toLatin1();
- const char *signal = baSignal.data();
- const char *signalName = baSignalName.data();
- int i = metaObj->indexOfSignal(signal);
+ int i = metaObj->indexOfSignal(baSignal.data());
if (i != -1) {
- QMetaObject::invokeMethod(m_parent, signalName, Qt::DirectConnection, QGenericArgument(typeName, data));
+ auto method = metaObj->method(i);
+ if (method.parameterCount() == 1) {
+ method.invoke(m_parent, Qt::DirectConnection, QGenericArgument(method.parameterTypes().first(), data));
+ } else {
+ method.invoke(m_parent, Qt::DirectConnection);
+ }
} else {
- qDebug() << "It's not exist the property:[" << propName <<"] for parent:" << m_parent
- << ", interface:" << q_ptr->interface()
- << ", and It's changed value is:" << value;
+ qDebug() << "It's not exist the property:[" << propName << "] for parent:" << m_parent << ", interface:" << q_ptr->interface() << ", and It's changed value is:" << value;
}
}
QVariant DDBusInterface::property(const char *propName)
{
Q_D(DDBusInterface);
- if (d->m_propertyMap.contains(propName))
- return d->m_propertyMap.value(propName);
QDBusMessage msg = QDBusMessage::createMethodCall(service(), path(), PropertiesInterface, QStringLiteral("Get"));
msg << interface() << originalPropname(propName, d->m_suffix);
QDBusPendingReply<QVariant> prop = connection().asyncCall(msg);
- if (prop.value().isValid())
- return prop.value();
+ if (prop.value().isValid()) {
+ // if there is no parent, return value
+ if (!parent()) {
+ qWarning() << "you use it without parent, and if the value is not valid, you may get nothing";
+ return prop.value();
+ }
+ auto metaObject = parent()->metaObject();
+ QVariant propresult = prop.value();
+ int i = metaObject->indexOfProperty(propName);
+ if (i != -1) {
+ QMetaProperty metaProperty = metaObject->property(i);
+ // try to use property in parent to unwrap the value
+ propresult = demarshall(metaProperty, propresult);
+ }
+ return propresult;
+ }
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(prop, this);
watcher->setProperty(PropertyName, propName);
connect(watcher, &QDBusPendingCallWatcher::finished, d, &DDBusInterfacePrivate::onAsyncPropertyFinished);
- if (d->m_propertyMap.contains(propName))
- return d->m_propertyMap.value(propName);
return QVariant();
}
public:
QObject *m_parent;
QString m_suffix;
- QVariantMap m_propertyMap;
bool m_serviceValid;
DDBusInterface *q_ptr;
return DDBusProperty(property, m_dbusData);
}
+DDBusSender DDBusSender::system()
+{
+ DDBusSender self;
+ self.type(QDBusConnection::SystemBus);
+ return self;
+}
+
DDBusSender DDBusSender::path(const QString &path)
{
m_dbusData->path = path;
}
-QDBusPendingCall DDBusCaller::call()
+QDBusPendingCall DDBusData::asyncCallWithArguments(const QString &method, const QVariantList &arguments, const QString &iface)
{
- QDBusInterface iface(m_dbusData->service, m_dbusData->path, m_dbusData->interface, m_dbusData->connection);
+ // When creating a QDBusAbstractInterface, Qt will try to invoke introspection into this dbus path;
+ // This is costing in some cases when introspection is not ready;
+ // Cause this is an asynchronous method, it'd be better not to wait for anything, just leave this to caller;
+ // Use QDBusMessage to invoke directly instead of creating a QDBusInterface.
+ const QString calledInterface = iface.isEmpty() ? interface : iface;
+ QDBusMessage methodCall = QDBusMessage::createMethodCall(service, path, calledInterface, method);
+ methodCall.setArguments(arguments);
+ return connection.asyncCall(methodCall);
+}
- return iface.asyncCallWithArgumentList(m_methodName, m_arguments);
+QDBusPendingCall DDBusCaller::call()
+{
+ return m_dbusData->asyncCallWithArguments(m_methodName, m_arguments);
}
DDBusCaller::DDBusCaller(const QString &method, std::shared_ptr<DDBusData> data)
QDBusPendingCall DDBusProperty::get()
{
- QDBusInterface iface(m_dbusData->service, m_dbusData->path, QStringLiteral("org.freedesktop.DBus.Properties"), m_dbusData->connection);
-
- return iface.asyncCallWithArgumentList(QStringLiteral("Get"), { QVariant::fromValue(m_dbusData->interface), QVariant::fromValue(m_propertyName) });
+ QVariantList args{QVariant::fromValue(m_dbusData->interface), QVariant::fromValue(m_propertyName)};
+ return m_dbusData->asyncCallWithArguments(QStringLiteral("Get"), args, QStringLiteral("org.freedesktop.DBus.Properties"));
}
DDBusProperty::DDBusProperty(const QString &property, std::shared_ptr<DDBusData> data)
DCORE_BEGIN_NAMESPACE
-/*!
- \class Dtk::Core::DDiskSizeFormatter
- \inmodule dtkcore
- \brief DDiskSizeFormatter 是用来获取磁盘容量单位的类, 通过枚举值.
-
- 获取不同类型磁盘容量的单位
- */
-
-/*!
- \enum Dtk::Core::DDiskSizeFormatter::DiskUnits
- 磁盘容量单位的枚举
- \value B
- 字节
- \value K
- 千字节
- \value M
- 兆字节
- \value G
- 吉字节
- \value T
- 太字节
- */
-
-/*!
- \reimp
- \fn int DDiskSizeFormatter::unitMax() const
- \brief 返回最大磁盘容量单位的枚举
- */
-
-/*!
- \reimp
- \fn int DDiskSizeFormatter::unitMin() const
- \brief 返回最小磁盘容量单位的枚举
- */
-
-/*!
- \reimp
- \fn uint DDiskSizeFormatter::unitConvertRate(int unitId) const
- \brief 返回当前的单位转换比率
- */
-
-/*!
- \brief DDiskSizeFormatter的构造函数
-
- */
DDiskSizeFormatter::DDiskSizeFormatter()
: DAbstractUnitFormatter()
{
-
}
-/*!
- \brief 根据枚举返回对应单位的字符串
-
- \a unitId DDiskSizeFormatter::DiskUnits 的枚举值
- \return QString 对应单位的字符串
- */
QString DDiskSizeFormatter::unitStr(int unitId) const
{
- switch (unitId)
- {
- case B: return QStringLiteral("B");
- case K: return QStringLiteral("KB");
- case M: return QStringLiteral("MB");
- case G: return QStringLiteral("GB");
- case T: return QStringLiteral("TB");
+ switch (unitId) {
+ case B:
+ return QStringLiteral("B");
+ case K:
+ return QStringLiteral("KB");
+ case M:
+ return QStringLiteral("MB");
+ case G:
+ return QStringLiteral("GB");
+ case T:
+ return QStringLiteral("TB");
}
return QString();
}
-/*!
- \brief 设置当前的单位转换比率
-
- \a rate 转换比率
- \return DDiskSizeFormatter 返回 DDiskSizeFormatter 对象
- */
DDiskSizeFormatter DDiskSizeFormatter::rate(int rate)
{
m_rate = rate;
-// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "dpinyin.h"
#include <QFile>
+#include <QSet>
#include <QTextStream>
+#include <QMap>
+#include <QDebug>
DCORE_BEGIN_NAMESPACE
while (!stream.atEnd()) {
const QString line = stream.readLine();
- const QStringList items = line.split(QChar(':'));
+ // comment
+ if (line.startsWith("#"))
+ continue;
+ const QStringList items = line.left(line.indexOf("#")).split(QChar(':'));
if (items.size() == 2) {
- dict.insert(items[0].toInt(nullptr, 16), items[1]);
+ dict.insert(items[0].toUInt(nullptr, 16), items[1].trimmed());
}
}
}
+static void initToneTable(QMap<QChar, QString> &toneTable)
+{
+ if (toneTable.size() > 0)
+ return;
+
+ const QString ts = "aāáǎà,oōóǒò,eēéěè,iīíǐì,uūúǔù,vǖǘǚǜ";
+
+ for (const QString &s : ts.split(",")) {
+ for (int i = 1; i < s.length(); ++i) {
+ toneTable.insert(s.at(i), QString("%1%2").arg(s.at(0)).arg(i));
+ }
+ }
+}
+
+static QString toned(const QString &str, ToneStyle ts)
+{
+ // TS_Tone is default
+ if (ts == TS_Tone)
+ return str;
+
+ static QMap<QChar, QString> toneTable; // {ā, a1}
+ initToneTable(toneTable);
+
+ QString newStr = str;
+ QString cv;
+ for (QChar c : str) {
+ if (!toneTable.contains(c))
+ continue;
+
+ cv = toneTable.value(c);
+ switch (ts) {
+ case TS_NoneTone:
+ newStr.replace(c, cv.left(1));
+ break;
+ case TS_ToneNum:
+ newStr.replace(c, cv);
+ break;
+ default:
+ break;
+ }
+ }
+ return newStr;
+}
+
+static QStringList toned(const QStringList &words, ToneStyle ts)
+{
+ QStringList tonedWords;
+ for (auto str : words)
+ tonedWords << toned(str, ts);
+
+ return tonedWords;
+}
+
+static QStringList permutations(const QStringList &list1, const QStringList &list2)
+{
+ QStringList ret;
+ for (const QString &str1 : list1)
+ for (const QString &str2 : list2)
+ ret << str1 + str2;
+
+ return ret;
+}
+
+static QStringList permutations(const QList<QStringList> &pyList)
+{
+ QStringList result;
+
+ if (pyList.size() <= 1)
+ return pyList.value(0, result);
+
+ result = permutations(pyList.value(0), pyList.value(1));
+
+ for (int i = 2; i < pyList.size(); ++i) {
+ result = permutations(result, pyList.value(i));
+
+ // 限制返回的大小,
+ if (result.size() > 0xFFFF) {
+ qWarning() << "Warning: Too many combinations have exceeded the limit\n";
+ break;
+ }
+ }
+
+ return result;
+}
+
+static QStringList deduplication(const QStringList &list)
+{
+ QStringList result;
+ for (const QString &item : list)
+ if (!result.contains(item))
+ result.append(item);
+
+ return result;
+}
+
+/*!
+ \fn QString Dtk::Core::Chinese2Pinyin(const QString &words)
+ \brief Convert Chinese characters to Pinyin
+ \note this function not support polyphonic characters support.
+ \return pinyin of the words
+ \sa Dtk::Core::pinyin
+ */
QString Chinese2Pinyin(const QString &words)
{
- InitDict();
+ QStringList res = pinyin(words, TS_ToneNum);
+
+ return res.value(0);
+}
+
+/*!
+ * @~english
+ \enum Dtk::Core::ToneStyle
+ pinyin tone style
+
+ \value TS_NoneTone pinyin without tone
+
+ \value TS_Tone pinyin with tone, default style in dictory file
+
+ \value TS_ToneNum pinyin tone number
+
+ */
- QString result;
+/*!
+ \fn QStringList Dtk::Core::pinyin(const QString &words, ToneStyle ts, bool *ok)
+ \brief Convert Chinese characters to Pinyin with polyphonic characters support.
+ \return pinyin list of the words
+ */
+QStringList pinyin(const QString &words, ToneStyle ts, bool *ok)
+{
+ if (words.length() < 1)
+ return QStringList();
+
+ InitDict();
+
+ if (ok)
+ *ok = true;
+ QList<QStringList> pyList;
for (int i = 0; i < words.length(); ++i) {
const uint key = words.at(i).unicode();
auto find_result = dict.find(key);
if (find_result != dict.end()) {
- result.append(find_result.value());
+ const QString &ret = find_result.value();
+ pyList << toned(ret.split(","), ts);
+
} else {
- result.append(words.at(i));
+ pyList << QStringList(words.at(i));
+ // 部分字没有在词典中找到,使用字本身, ok 可以判断结果
+ if (ok)
+ *ok = false;
}
}
- return result;
+ return deduplication(permutations(pyList));
+}
+
+/*!
+ \fn QStringList Dtk::Core::firstLetters(const QString &words)
+ \brief Convert Chinese characters to Pinyin firstLetters list
+ \brief with polyphonic characters support.
+
+ \return pinyin first letters list of the words
+ */
+QStringList firstLetters(const QString &words)
+{
+ QList<QStringList> result;
+ bool ok = false;
+ for (const QChar &w : words) {
+ QStringList pys = pinyin(w, TS_Tone, &ok);
+ if (!ok) {
+ result << QStringList(w);
+ continue;
+ }
+
+ for (QString &py : pys)
+ py = py.left(1);
+
+ result << pys;
+ }
+
+ return deduplication(permutations(result));
}
DCORE_END_NAMESPACE
#include <QFile>
#include <QDir>
#include <QUrl>
+#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
+#include <QStringConverter>
+#endif
DCORE_BEGIN_NAMESPACE
}
QTextStream out(&file);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ out.setEncoding(QStringConverter::Utf8);
+#else
out.setCodec("UTF-8");
+#endif
out << doc.toString();
out.flush();
file.close();
}
QTextStream out(&file);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ out.setEncoding(QStringConverter::Utf8);
+#else
out.setCodec("UTF-8");
+#endif
out << doc.toString();
out.flush();
file.close();
--- /dev/null
+// SPDX-FileCopyrightText: 2022-2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include "dtextencoding.h"
+
+#include <QtMath>
+#include <QFile>
+#include <QLibrary>
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+#include <QStringConverter>
+#else
+#include <QTextCodec>
+#endif
+
+#include <climits>
+#include <unicode/ucsdet.h>
+#include <uchardet/uchardet.h>
+#include <iconv.h>
+
+DCORE_BEGIN_NAMESPACE
+
+class LibICU
+{
+public:
+ LibICU();
+ ~LibICU();
+
+ bool isValid();
+ bool detectEncoding(const QByteArray &content, QByteArrayList &charset);
+
+ UCharsetDetector *(*icu_ucsdet_open)(UErrorCode *status);
+ void (*icu_ucsdet_close)(UCharsetDetector *ucsd);
+ void (*icu_ucsdet_setText)(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status);
+ const UCharsetMatch **(*icu_ucsdet_detectAll)(UCharsetDetector *ucsd, int32_t *matchesFound, UErrorCode *status);
+ const char *(*icu_ucsdet_getName)(const UCharsetMatch *ucsm, UErrorCode *status);
+ int32_t (*icu_ucsdet_getConfidence)(const UCharsetMatch *ucsm, UErrorCode *status);
+
+private:
+ QLibrary *icuuc = nullptr;
+
+ Q_DISABLE_COPY(LibICU)
+};
+
+class Libuchardet
+{
+public:
+ Libuchardet();
+ ~Libuchardet();
+
+ bool isValid();
+ QByteArray detectEncoding(const QByteArray &content);
+
+ uchardet_t (*uchardet_new)(void);
+ void (*uchardet_delete)(uchardet_t ud);
+ int (*uchardet_handle_data)(uchardet_t ud, const char *data, size_t len);
+ void (*uchardet_data_end)(uchardet_t ud);
+ void (*uchardet_reset)(uchardet_t ud);
+ const char *(*uchardet_get_charset)(uchardet_t ud);
+
+private:
+ QLibrary *uchardet = nullptr;
+
+ Q_DISABLE_COPY(Libuchardet)
+};
+
+Q_GLOBAL_STATIC(LibICU, LibICUInstance);
+Q_GLOBAL_STATIC(Libuchardet, LibuchardetInstance);
+
+LibICU::LibICU()
+{
+ // Load libicuuc.so
+ icuuc = new QLibrary("libicuuc");
+ if (!icuuc->load()) {
+ delete icuuc;
+ icuuc = nullptr;
+ return;
+ }
+
+ auto initFunctionError = [this]() {
+ icuuc->unload();
+ delete icuuc;
+ icuuc = nullptr;
+ };
+
+#define INIT_ICUUC(Name) \
+ icu_##Name = reinterpret_cast<decltype(icu_##Name)>(icuuc->resolve(#Name)); \
+ if (!icu_##Name) { \
+ initFunctionError(); \
+ return; \
+ }
+
+ // Note: use prefix 'icu' to avoid "disabled expansion of recursive macro" warning.
+ INIT_ICUUC(ucsdet_open);
+ INIT_ICUUC(ucsdet_close);
+ INIT_ICUUC(ucsdet_setText);
+ INIT_ICUUC(ucsdet_detectAll);
+ INIT_ICUUC(ucsdet_getName);
+ INIT_ICUUC(ucsdet_getConfidence);
+}
+
+LibICU::~LibICU()
+{
+ if (icuuc) {
+ delete icuuc;
+ }
+}
+
+bool LibICU::isValid()
+{
+ return (icuuc);
+}
+
+bool LibICU::detectEncoding(const QByteArray &content, QByteArrayList &charset)
+{
+ UErrorCode status = U_ZERO_ERROR;
+ UCharsetDetector *detector = icu_ucsdet_open(&status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+
+ icu_ucsdet_setText(detector, content.data(), content.size(), &status);
+ if (U_FAILURE(status)) {
+ icu_ucsdet_close(detector);
+ return false;
+ }
+
+ int32_t matchCount = 0;
+ const UCharsetMatch **charsetMatch = icu_ucsdet_detectAll(detector, &matchCount, &status);
+ if (U_FAILURE(status)) {
+ icu_ucsdet_close(detector);
+ return false;
+ }
+
+ int recordCount = qMin(3, matchCount);
+ for (int i = 0; i < recordCount; i++) {
+ const char *encoding = icu_ucsdet_getName(charsetMatch[i], &status);
+ if (U_FAILURE(status)) {
+ icu_ucsdet_close(detector);
+ return false;
+ }
+ charset << QByteArray(encoding);
+ }
+
+ icu_ucsdet_close(detector);
+ return true;
+}
+
+Libuchardet::Libuchardet()
+{
+ uchardet = new QLibrary("libuchardet", "0");
+ if (!uchardet->load()) {
+ delete uchardet;
+ uchardet = nullptr;
+ return;
+ }
+
+ auto initFunctionError = [this]() {
+ uchardet->unload();
+ delete uchardet;
+ uchardet = nullptr;
+ };
+
+#define INIT_UCHARDET(Name) \
+ Name = reinterpret_cast<decltype(Name)>(uchardet->resolve(#Name)); \
+ if (!Name) { \
+ initFunctionError(); \
+ return; \
+ }
+
+ INIT_UCHARDET(uchardet_new);
+ INIT_UCHARDET(uchardet_delete);
+ INIT_UCHARDET(uchardet_handle_data);
+ INIT_UCHARDET(uchardet_data_end);
+ INIT_UCHARDET(uchardet_reset);
+ INIT_UCHARDET(uchardet_get_charset);
+}
+
+Libuchardet::~Libuchardet()
+{
+ if (uchardet) {
+ delete uchardet;
+ }
+}
+
+bool Libuchardet::isValid()
+{
+ return uchardet;
+}
+
+QByteArray Libuchardet::detectEncoding(const QByteArray &content)
+{
+ QByteArray charset;
+
+ uchardet_t handle = uchardet_new();
+ if (0 == uchardet_handle_data(handle, content.data(), static_cast<size_t>(content.size()))) {
+ uchardet_data_end(handle);
+ charset = QByteArray(uchardet_get_charset(handle));
+ }
+ uchardet_delete(handle);
+
+ return charset;
+}
+
+QByteArray selectCharset(const QByteArray &charset, const QByteArrayList &icuCharsetList)
+{
+ if (icuCharsetList.isEmpty()) {
+ return charset;
+ }
+
+ static QByteArray encodingGB18030("GB18030");
+ if (charset.isEmpty()) {
+ return icuCharsetList.contains(encodingGB18030) ? encodingGB18030 : icuCharsetList[0];
+ } else {
+ if (charset.contains(icuCharsetList[0])) {
+ return charset;
+ } else {
+ return icuCharsetList[0].contains(charset) ? icuCharsetList[0] : charset;
+ }
+ }
+}
+
+QByteArray DTextEncoding::detectTextEncoding(const QByteArray &content)
+{
+ if (content.isEmpty()) {
+ return QByteArray("UTF-8");
+ }
+
+ QByteArray charset;
+ if (LibuchardetInstance()->isValid()) {
+ charset = LibuchardetInstance()->detectEncoding(content);
+ }
+
+ if (LibICUInstance()->isValid()) {
+ QByteArrayList icuCharsetList;
+ if (LibICUInstance()->detectEncoding(content, icuCharsetList)) {
+ if (charset.isEmpty() && !icuCharsetList.isEmpty()) {
+ charset = icuCharsetList.first();
+ } else {
+ // Improve GB18030 encoding recognition rate.
+ charset = selectCharset(charset, icuCharsetList);
+ }
+ }
+ }
+
+ if (charset.isEmpty()) {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ std::optional<QStringConverter::Encoding> encoding = QStringConverter::encodingForData(content);
+ if (encoding) {
+ return QStringConverter::nameForEncoding(encoding.value());
+ }
+#else
+ QTextCodec *codec = QTextCodec::codecForUtfText(content);
+ if (codec) {
+ return codec->name();
+ }
+#endif
+ }
+
+ // Use default encoding.
+ if (charset.isEmpty() || charset.contains("ASCII")) {
+ charset = QByteArray("UTF-8");
+ }
+
+ return charset;
+}
+
+QByteArray DTextEncoding::detectFileEncoding(const QString &fileName, bool *isOk)
+{
+ QFile file(fileName);
+ if (!file.open(QFile::ReadOnly | QFile::Text)) {
+ if (isOk) {
+ *isOk = false;
+ }
+ return QByteArray();
+ }
+
+ // At most 64Kb data.
+ QByteArray content = file.read(qMin<int>(static_cast<int>(file.size()), USHRT_MAX));
+ file.close();
+
+ if (isOk) {
+ *isOk = true;
+ }
+ return detectTextEncoding(content);
+}
+
+bool DTextEncoding::convertTextEncoding(
+ QByteArray &content, QByteArray &outContent, const QByteArray &toEncoding, const QByteArray &fromEncoding, QString *errString)
+{
+ return convertTextEncodingEx(content, outContent, toEncoding, fromEncoding, errString);
+}
+
+bool DTextEncoding::convertTextEncodingEx(QByteArray &content,
+ QByteArray &outContent,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding,
+ QString *errString,
+ int *convertedBytes)
+{
+ if (content.isEmpty() || fromEncoding == toEncoding) {
+ return true;
+ }
+
+ if (toEncoding.isEmpty()) {
+ if (errString) {
+ *errString = QStringLiteral("The encode that convert to is empty.");
+ }
+ return false;
+ }
+
+ QByteArray contentEncoding = fromEncoding;
+ if (contentEncoding.isEmpty()) {
+ contentEncoding = detectTextEncoding(content);
+ }
+
+ // iconv set errno when failed.
+ iconv_t handle = iconv_open(toEncoding.data(), contentEncoding.data());
+ if (reinterpret_cast<iconv_t>(-1) != handle) {
+ size_t inBytesLeft = static_cast<size_t>(content.size());
+ char *inbuf = content.data();
+ size_t outBytesLeft = inBytesLeft * 4;
+ char *outbuf = new char[outBytesLeft];
+
+ char *bufferHeader = outbuf;
+ size_t maxBufferSize = outBytesLeft;
+
+ size_t ret = iconv(handle, &inbuf, &inBytesLeft, &outbuf, &outBytesLeft);
+ int convertError = 0;
+ if (static_cast<size_t>(-1) == ret) {
+ convertError = errno;
+ int converted = content.size() - static_cast<int>(inBytesLeft);
+ if (convertedBytes) {
+ *convertedBytes = converted;
+ }
+
+ if (errString) {
+ switch (convertError) {
+ case EILSEQ:
+ *errString = QString("An invalid multibyte sequence has been encountered in the input."
+ "Converted byte index: %1")
+ .arg(converted);
+ break;
+ case EINVAL:
+ *errString = QString("An incomplete multibyte sequence has been encountered in the input. "
+ "Converted byte index: %1")
+ .arg(converted);
+ break;
+ case E2BIG:
+ *errString = QString("There is not sufficient room at *outbuf. Converted byte index: %1").arg(converted);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ iconv_close(handle);
+
+ // Use iconv converted byte count.
+ size_t realConvertSize = maxBufferSize - outBytesLeft;
+ outContent = QByteArray(bufferHeader, static_cast<int>(realConvertSize));
+
+ delete[] bufferHeader;
+ // For errors, user decides to keep or remove converted text.
+ return 0 == convertError;
+
+ } else {
+ if (EINVAL == errno && errString) {
+ *errString = QStringLiteral("The conversion from fromcode to tocode is not supported by the implementation.");
+ }
+
+ return false;
+ }
+}
+
+bool DTextEncoding::convertFileEncoding(const QString &fileName,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding,
+ QString *errString)
+{
+ if (fromEncoding == toEncoding) {
+ return true;
+ }
+
+ QFile file(fileName);
+ if (!file.open(QFile::ReadWrite | QFile::Text)) {
+ if (errString) {
+ *errString = file.errorString();
+ file.error();
+ }
+ return false;
+ }
+
+ QByteArray content = file.readAll();
+ QByteArray outContent;
+ if (!convertTextEncoding(content, outContent, toEncoding, fromEncoding, errString)) {
+ file.close();
+ return false;
+ }
+
+ file.seek(0);
+ file.write(outContent);
+ file.resize(outContent.size());
+ file.close();
+
+ if (QFile::NoError != file.error()) {
+ if (errString) {
+ *errString = file.errorString();
+ }
+ return false;
+ }
+ return true;
+}
+
+bool DTextEncoding::convertFileEncodingTo(const QString &fromFile,
+ const QString &toFile,
+ const QByteArray &toEncoding,
+ const QByteArray &fromEncoding,
+ QString *errString)
+{
+ if (fromEncoding == toEncoding) {
+ return true;
+ }
+
+ if (fromFile == toFile) {
+ return convertFileEncoding(fromFile, toEncoding, fromEncoding, errString);
+ }
+
+ // Check from file and to file before convert.
+ QFile readFile(fromFile);
+ if (!readFile.open(QFile::ReadOnly | QFile::Text)) {
+ if (errString) {
+ *errString = QString("Open convert from file failed, %1").arg(readFile.errorString());
+ }
+ return false;
+ }
+
+ QFile writeFile(toFile);
+ if (!writeFile.open(QFile::WriteOnly | QFile::Text)) {
+ readFile.close();
+ if (errString) {
+ *errString = QString("Open convert to file failed, %1").arg(writeFile.errorString());
+ }
+ return false;
+ }
+
+ QByteArray content = readFile.readAll();
+ readFile.close();
+ QByteArray outContent;
+
+ if (!convertTextEncoding(content, outContent, toEncoding, fromEncoding, errString)) {
+ writeFile.close();
+ writeFile.remove();
+ return false;
+ }
+
+ writeFile.write(outContent);
+ writeFile.close();
+
+ if (QFile::NoError != writeFile.error()) {
+ if (errString) {
+ *errString = writeFile.errorString();
+ }
+ return false;
+ }
+ return true;
+}
+
+DCORE_END_NAMESPACE
-// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
DCORE_BEGIN_NAMESPACE
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
namespace DThreadUtil {
FunctionCallProxy::FunctionCallProxy(QThread *thread)
{
proxy.callInLiveThread(s, target ? target : &proxy, &fun);
s->acquire();
}
-} // end namespace DThreadUtil
+}
+#else
+class Q_DECL_HIDDEN Caller : public QObject
+{
+public:
+ explicit Caller()
+ : QObject()
+ {
+ }
+
+ bool event(QEvent *event) override
+ {
+ if (event->type() == DThreadUtils::eventType) {
+ auto ev = static_cast<DThreadUtils::AbstractCallEvent *>(event);
+ ev->call();
+ return true;
+ }
+
+ return QObject::event(event);
+ }
+};
+
+DThreadUtils::DThreadUtils(QThread *thread)
+ : m_thread(thread)
+ , threadContext(nullptr)
+{
+}
+
+DThreadUtils::~DThreadUtils()
+{
+ delete threadContext.loadRelaxed();
+}
+
+DThreadUtils &DThreadUtils::gui()
+{
+ static auto global = DThreadUtils(QCoreApplication::instance()->thread());
+ return global;
+}
+
+QThread *DThreadUtils::thread() const noexcept
+{
+ return m_thread;
+}
+
+QObject *DThreadUtils::ensureThreadContextObject()
+{
+ QObject *context;
+ if (!threadContext.loadRelaxed()) {
+ context = new Caller();
+ context->moveToThread(m_thread);
+ if (!threadContext.testAndSetRelaxed(nullptr, context)) {
+ context->moveToThread(nullptr);
+ delete context;
+ }
+ }
+
+ context = threadContext.loadRelaxed();
+ Q_ASSERT(context);
+
+ return context;
+}
+#endif
DCORE_END_NAMESPACE
DCORE_BEGIN_NAMESPACE
-/*!
- \class Dtk::Core::DTimeUnitFormatter
- \inmodule dtkcore
-
- \brief DTimeUnitFormatter是用来获取时间单位的类, 通过枚举值.
-
- 获取不同类型时间单位的进制
- */
-
-/*!
- \enum Dtk::Core::DTimeUnitFormatter::TimeUnits
- 时间单位的枚举
- \value Seconds
- 返回分钟单位的进制
- \value Minute
- 返回秒单位的进制
- \value Hour
- 返回小时单位的进制
- \value Day
- 返回天单位的进制
- */
-
-/*!
- \fn int DTimeUnitFormatter::unitMax() const
- \brief 返回最大时间单位的枚举
- */
-
-/*!
- \fn int DTimeUnitFormatter::unitMin() const
- \brief 返回最小时间单位的枚举
- */
-
-/*!
- \brief DTimeUnitFormatter的构造函数
-
- */
DTimeUnitFormatter::DTimeUnitFormatter()
: DAbstractUnitFormatter()
{
-
}
-/*!
- \brief 根据枚举返回对应的单位进制
-
- \a unitId DTimeUnitFormatter::TimeUnits 的枚举值
- \return uint 对应的单位进制
- */
uint DTimeUnitFormatter::unitConvertRate(int unitId) const
{
- switch (unitId)
- {
- case Seconds: return 60;
- case Minute: return 60;
- case Hour: return 24;
- default:;
+ switch (unitId) {
+ case Seconds:
+ return 60;
+ case Minute:
+ return 60;
+ case Hour:
+ return 24;
+ default:;
}
return 0;
}
-/*!
- \brief 根据枚举返回对应单位的缩写
-
- \a unitId DTimeUnitFormatter::TimeUnits 的枚举值
- \return QString 对应单位的缩写
- */
QString DTimeUnitFormatter::unitStr(int unitId) const
{
- switch (unitId)
- {
- case Seconds: return QStringLiteral("s");
- case Minute: return QStringLiteral("m");
- case Hour: return QStringLiteral("h");
- case Day: return QStringLiteral("d");
- default:;
+ switch (unitId) {
+ case Seconds:
+ return QStringLiteral("s");
+ case Minute:
+ return QStringLiteral("m");
+ case Hour:
+ return QStringLiteral("h");
+ case Day:
+ return QStringLiteral("d");
+ default:;
}
return QString();
return false;
// 多开辟一个元素, 新的虚表结构如下:
- // 假设obj对象原虚表长度为2, 表结构为:
- // ┏━━┳━━┳━━┓其中v1 v2为虚函数地址, 0为数组结尾
- // ┃v1┃v2┃\0┃
- // ┗━━┻━━┻━━┛
+ // 假设原虚表内存布局如下(考虑多继承):
+ // C Vtable (7 entities)
+ // +--------------------+
+ // struct C | offset_to_top (0) |
+ // object +--------------------+
+ // 0 - struct A (primary base) | RTTI for C |
+ // 0 - vptr_A -----------------------------> +--------------------+
+ // 8 - int ax | C::f0() |
+ // 16 - struct B +--------------------+
+ // 16 - vptr_B ----------------------+ | C::f1() |
+ // 24 - int bx | +--------------------+
+ // 28 - int cx | | offset_to_top (-16)|
+ // sizeof(C): 32 align: 8 | +--------------------+
+ // | | RTTI for C |
+ // +------> +--------------------+
+ // | Thunk C::f1() |
+ // +--------------------+
// 则新的表结构为:
- // ┏━━┳━━┳━━┳━━┓其中前三个元素为原虚表的复制, sv为原虚表入口地址
- // ┃v1┃v2┃\0┃sv┃
- // ┗━━┻━━┻━━┻━━┛
- vtable_size += 2;
-
- quintptr *new_vtable = new quintptr[vtable_size];
-
- memcpy(new_vtable, *obj, (vtable_size - 1) * sizeof(quintptr));
+ // C Vtable (7 entities) C hooked Vtable (7 entities)
+ // +--------------------+ +--------------------+
+ // struct C | offset_to_top (0) | | offset_to_top (0) |
+ // object +--------------------+ +--------------------+
+ // 0 - struct A (primary base) | RTTI for C | | RTTI for C |
+ // 0 - vptr_A -----------------------------// +--------------------+ //------> +--------------------+
+ // 8 - int ax | C::f0() |\ | C::f0() | (or override custom function pointer)
+ // 16 - struct B +--------------------+ \ +--------------------+
+ // 16 - vptr_B ----------------------+ | C::f1() | \ | C::f1() | (or override custom function pointer)
+ // 24 - int bx | +--------------------+ \ +--------------------+
+ // 28 - int cx | | offset_to_top (-16)| \ | offset_to_top (-16)|
+ // sizeof(C): 32 align: 8 | +--------------------+ \ +--------------------+
+ // | | RTTI for C | + | RTTI for C |
+ // +------> +--------------------+ | +--------------------+
+ // | Thunk C::f1() | | | Thunk C::f1() |
+ // +--------------------+ | +--------------------+
+ // | | 0 |
+ // | +--------------------+
+ // +----| original entry |
+ // +--------------------+
+ quintptr *new_vtable = new quintptr[vtable_size + 2]; // store 0 and oringinal entry
+
+ memcpy(new_vtable, adjustToTop(*obj), vtable_size * sizeof(quintptr));
+ new_vtable[vtable_size] = 0;
//! save original vfptr
objToOriginalVfptr[obj] = *obj;
// 存储对象原虚表入口地址
- new_vtable[vtable_size - 1] = quintptr(*obj);
+ new_vtable[vtable_size + 1] = quintptr(*obj);
- *obj = new_vtable;
+ *obj = adjustToEntry(new_vtable);
//! save ghost vfptr
objToGhostVfptr[obj] = new_vtable;
bool DVtableHook::clearGhostVtable(const void *obj)
{
- objToOriginalVfptr.remove((quintptr**)obj);
+ if (!objToOriginalVfptr.remove((quintptr **)obj)) // Uninitialized memory may have values, for resetVtable
+ return false;
objDestructFun.remove(obj);
quintptr *vtable = objToGhostVfptr.take(obj);
return -1;
quintptr *new_vtable = new quintptr[vtable_size];
- std::fill(new_vtable, new_vtable + vtable_size, quintptr(&_DestoryProbe::nothing));
+ std::fill(adjustToEntry(new_vtable), new_vtable + vtable_size, quintptr(&_DestoryProbe::nothing));
// 给对象设置新的虚表
- *obj = new_vtable;
+ *obj = adjustToEntry(new_vtable);
int index = -1;
- for (int i = 0; i < vtable_size; ++i) {
+ for (int i = adjustToEntry(0); i < vtable_size; ++i) {
new_vtable[i] = quintptr(&_DestoryProbe::probe);
// 尝试销毁此对象, 且观察_DestoryProbe::probe是否被调用
destoryObjFun();
if (_DestoryProbe::probe(0) == quintptr(obj)) {
- index = i;
+ index = adjustToTop(i);
break;
}
}
if (!fun)
return;
- typedef void(*Destruct)(const void*);
- Destruct destruct = reinterpret_cast<Destruct>(fun);
- // call origin destruct function
- destruct(obj);
-
if (hasVtable(obj)) {// 需要判断一下,有可能在执行析构函数时虚表已经被删除
// clean
clearGhostVtable(obj);
}
+
+ typedef void(*Destruct)(const void*);
+ Destruct destruct = reinterpret_cast<Destruct>(fun);
+ // call origin destruct function
+ destruct(obj);
}
bool DVtableHook::ensureVtable(const void *obj, std::function<void ()> destoryObjFun)
if (objToOriginalVfptr.contains(_obj)) {
// 不知道什么原因, 此时obj对象的虚表已经被还原
- if (objToGhostVfptr.value((void*)obj) != *_obj) {
+ if (objToGhostVfptr.value((void *)obj) != adjustToTop(*_obj)) {
clearGhostVtable((void*)obj);
} else {
return true;
// 虚析构函数查找失败
if (index < 0) {
- qWarning("Failed do override destruct function");
- qDebug() << "object:" << obj;
+ qCWarning(vtableHook) << "Failed do override destruct function: " << obj;
abort();
}
quintptr **_obj = (quintptr**)obj;
int vtable_size = getVtableSize(_obj);
// 获取obj对象原本虚表的入口
- quintptr *vfptr_t2 = (quintptr*)(*_obj)[vtable_size + 1];
+ auto vtableHead = adjustToTop(*_obj);
+ quintptr *vfptr_t2 = (quintptr*)vtableHead[vtable_size + 1]; // _obj - 2 + vtable_size + 1
if (!vfptr_t2)
return;
*/
quintptr DVtableHook::resetVfptrFun(const void *obj, quintptr functionOffset)
{
- quintptr *vfptr_t1 = *(quintptr**)obj;
+ quintptr *vfptr_t1 = *(quintptr **)obj;
quintptr current_fun = *(vfptr_t1 + functionOffset / sizeof(quintptr));
quintptr origin_fun = originalFun(obj, functionOffset);
*/
quintptr DVtableHook::originalFun(const void *obj, quintptr functionOffset)
{
- quintptr **_obj = (quintptr**)obj;
- int vtable_size = getVtableSize(_obj);
- // 获取obj对象原本虚表的入口
- quintptr *vfptr_t2 = (quintptr*)(*_obj)[vtable_size + 1];
-
- if (!vfptr_t2) {
- qWarning() << "Not override the object virtual table" << obj;
-
+ quintptr **_obj = (quintptr **)obj;
+ if (!hasVtable(obj)) {
+ qCWarning(vtableHook) << "Not override the object virtual table: " << obj;
return 0;
}
- if (functionOffset > UINT_LEAST16_MAX) {
- qWarning() << "Is not a virtual function, function address: 0x" << hex << functionOffset;
+ int vtable_size = getVtableSize(_obj);
+ // 获取obj对象原本虚表的入口
+ quintptr *vfptr_t2 = (quintptr*)(*_obj)[vtable_size - 1];
+ if (functionOffset > UINT_LEAST16_MAX) {
+ qCWarning(vtableHook, "Is not a virtual function, function address: 0X%llx", functionOffset);
return 0;
}
return *(vfptr_t2 + functionOffset / sizeof(quintptr));
}
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
+bool DVtableHook::isFinalClass(quintptr *obj)
+{
+ Q_UNUSED(obj);
+ return true;
+}
+
+quintptr **DVtableHook::adjustThis(quintptr *obj)
+{
+ Q_UNUSED(obj);
+ return nullptr;
+}
+#endif
+
#if defined(Q_OS_LINUX)
static int readProtFromPsm(quintptr adr, size_t length)
{
// 增加判断是否已经可写,不能写才调用。
// 失败时直接放弃
if (!writeable && mprotect(new_adr, override_data_length, PROT_READ | PROT_WRITE)) {
- qWarning() << "mprotect(change) failed" << strerror(errno);
+ qCWarning(vtableHook, "mprotect(change) failed: %s", strerror(errno));
return false;
}
#endif
#ifdef Q_OS_LINUX
// 恢复内存标志位
if (!writeable && mprotect(new_adr, override_data_length, oldProt)) {
- qWarning() << "mprotect(restore) failed" << strerror(errno);
+ qCWarning(vtableHook, "mprotect(restore) failed: %s", strerror(errno));
return false;
}
#endif
-0x3400:qiu1
-0x3401:tian3
-0x3404:kua4
-0x3405:wu3
-0x3406:yin3
-0x340c:si4
-0x3416:ye4
-0x341c:chou2
-0x3421:nuo4
-0x3424:qiu2
-0x3428:xu4
-0x3429:xing2
-0x342b:xiong1
-0x342c:liu2
-0x342d:lin3
-0x342e:xiang1
-0x342f:yong1
-0x3430:xin4
-0x3431:zhen3
-0x3432:dai4
-0x3433:wu4
-0x3434:pan1
-0x3437:ma3
-0x3438:qian4
-0x3439:yi4
-0x343a:zhong4
-0x343b:n3
-0x343c:cheng4
-0x3441:zhuo1
-0x3442:fang3
-0x3443:ao3
-0x3444:wu3
-0x3445:zuo4
-0x3447:zhou4
-0x3448:dong4
-0x3449:su4
-0x344a:yi4
-0x344b:jiong4
-0x344c:wang1
-0x344d:lei3
-0x344e:nao3
-0x344f:zhu4
-0x3454:xu3
-0x3458:jie4
-0x3459:die2
-0x345a:nuo2
-0x345b:su4
-0x345c:yi4
-0x345d:long4
-0x345e:ying4
-0x345f:beng3
-0x3463:lan2
-0x3464:miao2
-0x3465:yi4
-0x3466:li4
-0x3467:ji4
-0x3468:yu3
-0x3469:luo2
-0x346a:chai2
-0x346e:hun2
-0x346f:xu3
-0x3470:hui4
-0x3471:rao3
-0x3473:zhou4
-0x3475:han4
-0x3476:xi4
-0x3477:tai4
-0x3478:ai3
-0x3479:hui4
-0x347a:jun4
-0x347b:ma4
-0x347c:lve4
-0x347d:tang2
-0x347e:xiao2
-0x347f:tiao2
-0x3480:zha3
-0x3481:yu3
-0x3482:ku4
-0x3483:er4
-0x3484:nang4
-0x3485:qi3
-0x3486:chi4
-0x3487:mu4
-0x3488:han4
-0x3489:tang3
-0x348a:se4
-0x348c:qiong2
-0x348d:lei2
-0x348e:sa3
-0x3491:hui4
-0x3492:pu2
-0x3493:ta4
-0x3494:shu3
-0x3496:ou3
-0x3497:tai2
-0x3499:mian2
-0x349a:wen3
-0x349b:diao4
-0x349c:yu2
-0x349d:mie4
-0x349e:jun4
-0x349f:niao3
-0x34a0:xie4
-0x34a1:you2
-0x34a4:she4
-0x34a6:lei3
-0x34a7:li4
-0x34a9:luo3
-0x34ab:ji4
-0x34b0:quan2
-0x34b2:cai2
-0x34b3:liang3
-0x34b4:gu3
-0x34b5:mao4
-0x34b7:gua3
-0x34b8:sui4
-0x34bb:mao4
-0x34bc:man2
-0x34be:shi4
-0x34bf:li2
-0x34c1:wang3
-0x34c2:kou4
-0x34c3:chui2
-0x34c4:zhen4
-0x34c8:bing4
-0x34c9:huan4
-0x34ca:dong4
-0x34cb:gong4
-0x34ce:lian2
-0x34cf:jiong3
-0x34d0:lu4
-0x34d1:xing4
-0x34d3:nan2
-0x34d4:xie4
-0x34d6:bi4
-0x34d7:jie2
-0x34d8:su4
-0x34dc:you4
-0x34dd:xing2
-0x34de:qi4
-0x34e0:dian4
-0x34e1:fu3
-0x34e2:luo4
-0x34e3:qia4
-0x34e4:jie2
-0x34e7:yan3
-0x34e8:ci2
-0x34ea:lang3
-0x34ed:he2
-0x34ef:li2
-0x34f0:hua4
-0x34f1:tou2
-0x34f2:pian4
-0x34f4:jun4
-0x34f5:e4
-0x34f6:qie4
-0x34f7:yi4
-0x34f8:jue2
-0x34f9:rui4
-0x34fa:jian4
-0x34fc:chi4
-0x34fd:chong2
-0x34fe:chi2
-0x3500:lve4
-0x3502:lin2
-0x3503:jue2
-0x3504:su4
-0x3505:xiao4
-0x3506:chan2
-0x3509:zhu2
-0x350a:dan3
-0x350b:jian4
-0x350c:zhou4
-0x350d:duo3
-0x350e:xie4
-0x350f:li4
-0x3511:chi4
-0x3512:xi2
-0x3513:jian3
-0x3515:ji2
-0x3517:fei4
-0x3518:chu4
-0x3519:bang3
-0x351a:kou3
-0x351c:ba2
-0x351d:liang3
-0x351e:kuai4
-0x3520:he2
-0x3522:jue2
-0x3523:lei2
-0x3524:shen3
-0x3525:pi2
-0x3526:yang3
-0x3527:lv4
-0x3528:bei4
-0x3529:e4
-0x352a:lu3
-0x352d:che4
-0x352e:nuo2
-0x352f:suan3
-0x3530:heng2
-0x3531:yu3
-0x3533:gui3
-0x3534:yi4
-0x3535:xian4
-0x3536:gong4
-0x3537:lou4
-0x3539:le4
-0x353a:shi4
-0x353c:sun3
-0x353d:yao4
-0x353e:jie2
-0x353f:zou4
-0x3541:que4
-0x3542:yin2
-0x3544:zhi4
-0x3545:jia3
-0x3546:hu4
-0x3547:la2
-0x3548:hou4
-0x3549:ke4
-0x354b:jing4
-0x354c:ai4
-0x354e:e4
-0x354f:chu2
-0x3550:xie3
-0x3551:chu2
-0x3552:wei2
-0x3555:huan4
-0x3556:su4
-0x3557:you4
-0x3559:jun4
-0x355a:zhao3
-0x355b:xu4
-0x355c:shi3
-0x355f:kui4
-0x3561:he2
-0x3562:gai4
-0x3563:yan3
-0x3564:qiu2
-0x3565:yi3
-0x3566:hua4
-0x3568:fan4
-0x3569:zhang4
-0x356a:dan3
-0x356b:fang3
-0x356c:song4
-0x356d:ao4
-0x356e:fu3
-0x356f:nei4
-0x3570:he4
-0x3571:you2
-0x3572:hua2
-0x3574:chen2
-0x3575:guo2
-0x3576:ng4
-0x3577:hua4
-0x3578:li4
-0x3579:fa2
-0x357a:hao2
-0x357b:pou3
-0x357d:si4
-0x3580:le4
-0x3581:lin4
-0x3582:yi4
-0x3583:hou3
-0x3585:xu4
-0x3586:qu2
-0x3587:er2
-0x358f:nei4
-0x3590:wei3
-0x3591:xie4
-0x3592:ti2
-0x3593:hong2
-0x3594:tun3
-0x3595:bo4
-0x3596:nie4
-0x3597:yin2
-0x359e:wai1
-0x359f:shou4
-0x35a0:ba4
-0x35a1:ye4
-0x35a2:ji2
-0x35a3:tou4
-0x35a4:han2
-0x35a5:jiong3
-0x35a6:dong3
-0x35a7:wen3
-0x35a8:lu4
-0x35a9:sou3
-0x35aa:guo2
-0x35ab:ling2
-0x35ad:tian3
-0x35ae:lun2
-0x35b6:ye4
-0x35b7:shi2
-0x35b8:xue2
-0x35b9:fen4
-0x35ba:chun3
-0x35bb:rou2
-0x35bc:duo3
-0x35bd:ze2
-0x35be:e4
-0x35bf:xie2
-0x35c1:e4
-0x35c2:sheng3
-0x35c3:wen3
-0x35c4:man2
-0x35c5:hu2
-0x35c6:ge2
-0x35c7:xia2
-0x35c8:man4
-0x35c9:bi4
-0x35ca:ji2
-0x35cb:hou2
-0x35cc:zhi4
-0x35d1:bai4
-0x35d2:ai4
-0x35d5:gou4
-0x35d6:dan4
-0x35d7:bai3
-0x35d8:bo2
-0x35d9:na4
-0x35da:li4
-0x35db:xiao4
-0x35dc:xiu4
-0x35e2:dong4
-0x35e3:ti4
-0x35e4:cu4
-0x35e5:kuo4
-0x35e6:lao2
-0x35e7:zhi4
-0x35e8:ai3
-0x35e9:xi1
-0x35eb:qie4
-0x35f0:chu4
-0x35f1:ji2
-0x35f2:huo4
-0x35f3:ta3
-0x35f4:yan2
-0x35f5:xu4
-0x35f7:sai3
-0x35fc:ye4
-0x35fd:xiang3
-0x35ff:xia4
-0x3600:zuo4
-0x3601:yi4
-0x3602:ci2
-0x3605:xian2
-0x3606:tai2
-0x3607:rong2
-0x3608:yi1
-0x3609:zhi4
-0x360a:yi4
-0x360b:xian2
-0x360c:ju4
-0x360d:ji2
-0x360e:han3
-0x3610:pao4
-0x3611:li4
-0x3613:lan2
-0x3614:can3
-0x3615:han3
-0x3616:yan2
-0x3619:yan2
-0x361a:han3
-0x361c:chi3
-0x361d:nian3
-0x361e:huo4
-0x3620:bi4
-0x3621:xia2
-0x3622:weng3
-0x3623:xuan2
-0x3625:you2
-0x3626:qin2
-0x3627:xu4
-0x3628:nei4
-0x3629:bi4
-0x362a:hao4
-0x362b:jing3
-0x362c:ao4
-0x362d:ao4
-0x3632:ju2
-0x3634:zuo4
-0x3635:bu4
-0x3636:jie2
-0x3637:ai4
-0x3638:zang4
-0x3639:ci2
-0x363a:fa2
-0x363f:nie4
-0x3640:liu4
-0x3641:mang3
-0x3642:dui4
-0x3644:bi4
-0x3645:bao3
-0x3647:chu4
-0x3648:han2
-0x3649:tian3
-0x364a:chang2
-0x364f:fu4
-0x3650:duo3
-0x3651:yu3
-0x3652:ye3
-0x3653:kui2
-0x3654:han2
-0x3655:kuai4
-0x3657:kuai4
-0x3659:long3
-0x365b:bu3
-0x365c:chi2
-0x365d:xie2
-0x365e:nie4
-0x365f:lang3
-0x3660:yi4
-0x3662:man2
-0x3663:zhang4
-0x3664:xia4
-0x3665:gun3
-0x3668:ji4
-0x3669:liao2
-0x366a:ye4
-0x366b:ji2
-0x366c:yin2
-0x366e:da1
-0x366f:yi4
-0x3670:xie4
-0x3671:hao4
-0x3672:yong3
-0x3673:han3
-0x3674:chan4
-0x3675:tai2
-0x3676:tang2
-0x3677:zhi2
-0x3678:bao4
-0x3679:meng2
-0x367a:gui4
-0x367b:chan2
-0x367c:lei3
-0x367e:xi4
-0x3681:qiao2
-0x3682:rang2
-0x3683:yun2
-0x3685:long2
-0x3686:fu4
-0x3689:gu3
-0x368c:hua4
-0x368d:guo2
-0x368f:gao3
-0x3690:tao4
-0x3692:shan3
-0x3693:lai2
-0x3694:nie4
-0x3695:fu2
-0x3696:gao3
-0x3697:qie2
-0x3698:ban4
-0x369b:xi4
-0x369c:xu4
-0x369d:kui2
-0x369e:meng3
-0x369f:chuo4
-0x36a1:ji3
-0x36a2:nu2
-0x36a3:xiao2
-0x36a4:yi4
-0x36a5:yu2
-0x36a6:yi2
-0x36a7:yan3
-0x36a9:ran3
-0x36aa:hao4
-0x36ab:sha4
-0x36ad:you2
-0x36af:xin2
-0x36b0:bi3
-0x36b2:dian3
-0x36b4:bu4
-0x36b6:si4
-0x36b7:er3
-0x36b9:mao3
-0x36ba:yun4
-0x36bd:qiao3
-0x36bf:pao2
-0x36c2:nuo3
-0x36c3:jie2
-0x36c5:er4
-0x36c6:duo3
-0x36ca:duo3
-0x36cd:qie4
-0x36cf:ou4
-0x36d0:sou3
-0x36d1:can4
-0x36d2:dou4
-0x36d4:peng2
-0x36d5:yi4
-0x36d7:zuo4
-0x36d8:po4
-0x36d9:qie4
-0x36da:tong3
-0x36db:xin4
-0x36dc:you2
-0x36dd:bei4
-0x36de:long4
-0x36e5:ta4
-0x36e6:lan3
-0x36e7:man3
-0x36e8:qiang3
-0x36e9:zhou2
-0x36ea:yan4
-0x36ec:lu4
-0x36ee:sao3
-0x36ef:mian3
-0x36f1:rui4
-0x36f2:fa4
-0x36f3:cha4
-0x36f4:nao3
-0x36f6:chou2
-0x36f8:shu4
-0x36f9:pian2
-0x36fb:kui3
-0x36fc:sha4
-0x36fe:xian2
-0x36ff:zhi4
-0x3703:lian4
-0x3704:xun2
-0x3705:xu4
-0x3706:mi4
-0x3707:hui4
-0x3708:mu4
-0x370a:pang4
-0x370b:yi4
-0x370c:gou4
-0x370d:tang2
-0x370e:qi2
-0x370f:yun2
-0x3710:shu4
-0x3711:fu2
-0x3712:yi4
-0x3713:da2
-0x3715:lian2
-0x3716:cao2
-0x3717:can3
-0x3718:ju4
-0x3719:lu4
-0x371a:su4
-0x371b:nen4
-0x371c:ao4
-0x371d:an3
-0x371e:qian4
-0x3723:ran2
-0x3724:shen3
-0x3725:mai2
-0x3726:han4
-0x3727:yue4
-0x3728:er2
-0x3729:ao4
-0x372a:xian3
-0x372b:ma4
-0x372e:lan4
-0x3730:yue4
-0x3731:dong4
-0x3732:weng3
-0x3733:huai2
-0x3734:meng4
-0x3735:niao3
-0x3736:wan3
-0x3737:mi2
-0x3738:nie4
-0x3739:qu2
-0x373a:zan4
-0x373b:lian4
-0x373c:zhi2
-0x373d:zi3
-0x373e:hai2
-0x373f:xu4
-0x3740:hao4
-0x3741:xun2
-0x3742:zhi4
-0x3743:fan4
-0x3744:chun2
-0x3745:gou4
-0x3747:chun2
-0x3748:luan2
-0x3749:zhu4
-0x374a:shou3
-0x374b:liao2
-0x374c:jie2
-0x374d:xie3
-0x374e:ding4
-0x374f:jie4
-0x3750:rong2
-0x3751:mang2
-0x3753:ge2
-0x3754:yao4
-0x3755:ning2
-0x3756:yi2
-0x3757:lang2
-0x3758:yong2
-0x3759:yin2
-0x375b:su4
-0x375d:lin2
-0x375e:ya4
-0x375f:mao2
-0x3760:ming2
-0x3761:zui4
-0x3762:yu3
-0x3763:ye4
-0x3764:gou4
-0x3765:mi3
-0x3766:jun4
-0x3767:wen3
-0x376a:dian4
-0x376b:long2
-0x376d:xing3
-0x376e:cui4
-0x376f:qiao2
-0x3770:mian2
-0x3771:meng4
-0x3772:qin3
-0x3774:wan2
-0x3775:de2
-0x3776:ai4
-0x3778:bian4
-0x3779:nou2
-0x377a:lian2
-0x377b:jin3
-0x377d:chui2
-0x377e:zuo3
-0x377f:bo2
-0x3781:yao4
-0x3782:tui3
-0x3783:ji2
-0x3785:guo3
-0x3786:ji3
-0x3787:wei3
-0x378a:xu4
-0x378b:nian3
-0x378c:yun4
-0x378e:ba3
-0x378f:zhe2
-0x3790:ju1
-0x3791:wei3
-0x3792:xi4
-0x3793:qi3
-0x3794:yi2
-0x3795:xie4
-0x3796:ci4
-0x3797:qiu2
-0x3798:tun2
-0x3799:niao4
-0x379a:qi4
-0x379b:ji3
-0x379f:dian4
-0x37a0:lao2
-0x37a1:zhan3
-0x37a4:yin2
-0x37a5:cen2
-0x37a6:ji3
-0x37a7:hui4
-0x37a8:zai3
-0x37a9:lan2
-0x37aa:nao2
-0x37ab:ju4
-0x37ac:qin4
-0x37ad:dai4
-0x37af:jie2
-0x37b0:xu3
-0x37b2:yong4
-0x37b3:dou3
-0x37b4:chi2
-0x37b6:min3
-0x37b7:huang2
-0x37b8:sui4
-0x37b9:ke3
-0x37ba:zu2
-0x37bb:hao4
-0x37bc:cheng2
-0x37bd:xue4
-0x37be:ni2
-0x37bf:chi4
-0x37c0:lian2
-0x37c1:an4
-0x37c2:chi3
-0x37c4:xiang2
-0x37c5:yang2
-0x37c6:hua2
-0x37c7:cuo2
-0x37c8:qiu2
-0x37c9:lao2
-0x37ca:fu2
-0x37cb:dui4
-0x37cc:mang2
-0x37cd:lang2
-0x37ce:tuo3
-0x37cf:han2
-0x37d0:mang3
-0x37d1:bo2
-0x37d3:qi2
-0x37d4:han2
-0x37d6:long4
-0x37d8:tiao2
-0x37d9:lao3
-0x37da:qi2
-0x37db:zan4
-0x37dc:mi2
-0x37dd:pei2
-0x37de:zhan4
-0x37df:xiang4
-0x37e0:gang3
-0x37e2:qi2
-0x37e4:lu4
-0x37e6:yun4
-0x37e7:e4
-0x37e8:quan2
-0x37e9:min2
-0x37ea:wei3
-0x37eb:quan2
-0x37ec:shu3
-0x37ed:min2
-0x37f0:ming3
-0x37f1:yao3
-0x37f2:jue2
-0x37f3:li4
-0x37f4:kuai4
-0x37f5:gang3
-0x37f6:yuan2
-0x37f7:da5
-0x37f9:lao2
-0x37fa:lou2
-0x37fb:qian4
-0x37fc:ao2
-0x37fd:biao3
-0x37ff:mang2
-0x3800:dao3
-0x3802:ao2
-0x3804:xi2
-0x3805:fu2
-0x3807:jiu4
-0x3808:run4
-0x3809:tong2
-0x380a:qu1
-0x380b:e4
-0x380d:ji2
-0x380e:ji2
-0x380f:hua2
-0x3810:jiao4
-0x3811:zui4
-0x3812:biao3
-0x3813:meng2
-0x3814:bai4
-0x3815:wei3
-0x3816:ji4
-0x3817:ao4
-0x3818:yu3
-0x3819:hao2
-0x381a:dui4
-0x381b:wo4
-0x381c:ni4
-0x381d:cuan2
-0x381f:li2
-0x3820:lu2
-0x3821:niao3
-0x3822:hua4
-0x3823:lai4
-0x3825:lv4
-0x3827:mi2
-0x3828:yu4
-0x382a:ju4
-0x382d:zhan3
-0x382f:yi3
-0x3831:ji4
-0x3832:bi3
-0x3834:ren4
-0x3836:fan2
-0x3837:ge2
-0x3838:ku4
-0x3839:jie4
-0x383a:miao2
-0x383d:tong2
-0x383f:ci3
-0x3840:bi4
-0x3841:kai3
-0x3842:li4
-0x3844:sun3
-0x3845:nuo3
-0x3847:ji2
-0x3848:men2
-0x3849:xian2
-0x384a:qia4
-0x384b:e4
-0x384c:mao4
-0x384f:tou2
-0x3851:qiao3
-0x3854:wu4
-0x3856:chuang2
-0x3857:ti2
-0x3858:lian2
-0x3859:bi4
-0x385b:mang2
-0x385c:xue3
-0x385d:feng4
-0x385e:lei3
-0x3860:zheng4
-0x3861:chu2
-0x3862:man4
-0x3863:long2
-0x3865:yin3
-0x3867:zheng4
-0x3868:qian1
-0x3869:luan2
-0x386a:nie2
-0x386b:yi4
-0x386d:ji4
-0x386e:ji2
-0x386f:zhai2
-0x3870:yu3
-0x3871:jiu3
-0x3872:huan2
-0x3873:di3
-0x3875:ling2
-0x3876:ji4
-0x3877:ben3
-0x3878:zha3
-0x3879:ci4
-0x387a:dan4
-0x387b:liao4
-0x387c:yi4
-0x387d:zhao4
-0x387e:xian4
-0x387f:chi4
-0x3880:ci4
-0x3881:chi3
-0x3882:yan3
-0x3883:lang2
-0x3884:dou4
-0x3885:long4
-0x3886:chan2
-0x3888:tui2
-0x3889:cha2
-0x388a:ai3
-0x388b:chi3
-0x388d:ying2
-0x388e:cha4
-0x388f:tou2
-0x3891:tui2
-0x3892:cha2
-0x3893:yao3
-0x3894:zong3
-0x3897:qiao4
-0x3898:lian2
-0x3899:qin2
-0x389a:lu3
-0x389b:yan4
-0x389e:yi4
-0x389f:chan3
-0x38a0:jiong3
-0x38a1:jiang3
-0x38a3:jing4
-0x38a5:dong4
-0x38a7:juan4
-0x38a8:han4
-0x38a9:di4
-0x38ac:hong2
-0x38ae:chi2
-0x38af:min2
-0x38b0:bi4
-0x38b2:xun4
-0x38b3:lu2
-0x38b5:she4
-0x38b6:bi4
-0x38b8:bi4
-0x38ba:xian2
-0x38bb:wei3
-0x38bc:bie4
-0x38bd:er3
-0x38be:juan4
-0x38c0:zhen4
-0x38c1:bei4
-0x38c2:yi4
-0x38c3:yu3
-0x38c4:qu2
-0x38c5:zan4
-0x38c6:mi2
-0x38c7:ni3
-0x38c8:si4
-0x38cc:shan4
-0x38cd:tai2
-0x38ce:mu4
-0x38cf:jing4
-0x38d0:bian4
-0x38d1:rong2
-0x38d2:ceng4
-0x38d3:can4
-0x38d9:di2
-0x38da:tong2
-0x38db:ta4
-0x38dc:xing2
-0x38de:duo2
-0x38df:xi4
-0x38e0:tong2
-0x38e2:ti2
-0x38e3:shan3
-0x38e4:jian4
-0x38e5:zhi4
-0x38e7:yin4
-0x38ea:huan3
-0x38eb:zhong3
-0x38ec:qi4
-0x38ef:xie4
-0x38f0:xie4
-0x38f1:ze2
-0x38f2:wei2
-0x38f5:ta4
-0x38f6:zhan1
-0x38f7:ning4
-0x38fb:yi4
-0x38fc:ren3
-0x38fd:shu4
-0x38fe:cha4
-0x38ff:zhuo2
-0x3901:mian3
-0x3902:ji2
-0x3903:fang2
-0x3904:pei4
-0x3905:ai4
-0x3906:fan4
-0x3907:ao3
-0x3908:qin4
-0x3909:qia4
-0x390a:xiao4
-0x390d:qiao3
-0x390f:tong2
-0x3911:you4
-0x3913:ben4
-0x3914:fu2
-0x3915:chu4
-0x3916:zhu4
-0x3918:chu4
-0x391a:hang2
-0x391b:nin2
-0x391c:jue2
-0x391e:cha4
-0x391f:kong3
-0x3920:lie4
-0x3921:li4
-0x3922:xu4
-0x3924:yu2
-0x3925:hai4
-0x3926:li4
-0x3927:hou2
-0x3928:gong3
-0x3929:ke4
-0x392a:yuan4
-0x392b:de2
-0x392c:hui4
-0x392e:kuang2
-0x392f:jiong3
-0x3930:zan3
-0x3931:fu4
-0x3932:qie4
-0x3933:bei3
-0x3934:xi2
-0x3935:ci2
-0x3936:pang2
-0x3938:xi4
-0x3939:qiu2
-0x393a:huang3
-0x393d:chou2
-0x393e:san4
-0x3940:de2
-0x3941:de2
-0x3942:te4
-0x3943:men4
-0x3944:ling2
-0x3945:shou4
-0x3946:dian4
-0x3947:can2
-0x3948:die2
-0x3949:che4
-0x394a:peng2
-0x394c:ju2
-0x394d:ji4
-0x394e:lai2
-0x394f:tian3
-0x3950:yuan4
-0x3952:cai3
-0x3953:qi3
-0x3954:yu2
-0x3955:lian2
-0x395a:yu2
-0x395b:ji2
-0x395c:wei4
-0x395d:mi3
-0x395e:cui4
-0x395f:xie2
-0x3960:xu3
-0x3961:xi4
-0x3962:qiu2
-0x3963:hui4
-0x3965:yu2
-0x3966:qie4
-0x3967:shun4
-0x3968:chui2
-0x3969:duo3
-0x396a:lou2
-0x396c:pang2
-0x396d:tai4
-0x396e:zhou4
-0x396f:yin3
-0x3971:fei3
-0x3972:shen4
-0x3973:yuan2
-0x3974:yi2
-0x3975:hun4
-0x3976:se4
-0x3977:ye4
-0x3978:min3
-0x3979:fen3
-0x397a:he2
-0x397c:yin3
-0x397d:ce4
-0x397e:ni4
-0x397f:ao4
-0x3980:feng2
-0x3981:lian2
-0x3982:chang2
-0x3983:chan3
-0x3984:ma2
-0x3985:di4
-0x3987:lu4
-0x3989:yi4
-0x398a:hua2
-0x398c:tui4
-0x398d:e4
-0x398e:hua4
-0x398f:sun3
-0x3990:ni4
-0x3991:lian3
-0x3992:li2
-0x3993:xian4
-0x3994:yan4
-0x3995:long2
-0x3996:men4
-0x3997:jian4
-0x399a:bian3
-0x399b:yu2
-0x399c:huo4
-0x399d:miao3
-0x399e:chou2
-0x399f:hai4
-0x39a1:le4
-0x39a2:jie2
-0x39a3:wei4
-0x39a4:yi4
-0x39a5:huan2
-0x39a6:he4
-0x39a7:can3
-0x39a8:lan2
-0x39a9:yin3
-0x39aa:xie4
-0x39ac:luo3
-0x39ad:ling2
-0x39ae:qian2
-0x39af:huo4
-0x39b1:wo3
-0x39b4:ge2
-0x39b6:die2
-0x39b7:yong3
-0x39b8:ji3
-0x39b9:ang4
-0x39ba:ru3
-0x39bb:xi2
-0x39bc:shuang4
-0x39bd:xu4
-0x39be:yi2
-0x39bf:hu4
-0x39c0:ji2
-0x39c1:qu4
-0x39c2:tian2
-0x39c4:qian3
-0x39c5:mu4
-0x39c7:mao3
-0x39c8:yin3
-0x39c9:gai4
-0x39ca:ba2
-0x39cb:xian3
-0x39cc:mao4
-0x39cd:fang3
-0x39ce:ya2
-0x39d0:song3
-0x39d1:wei2
-0x39d2:xue2
-0x39d4:guai4
-0x39d5:jiu4
-0x39d6:e4
-0x39d7:zi3
-0x39d8:cui4
-0x39d9:bi4
-0x39da:wa3
-0x39dc:lie4
-0x39df:kuai3
-0x39e1:hai4
-0x39e3:zhu4
-0x39e4:chong4
-0x39e5:xian3
-0x39e6:xuan4
-0x39e8:qiu2
-0x39e9:pei4
-0x39ea:gui3
-0x39eb:er2
-0x39ec:gong3
-0x39ed:qiong2
-0x39ef:lao3
-0x39f0:li4
-0x39f1:chen4
-0x39f2:san3
-0x39f3:bo2
-0x39f4:wo3
-0x39f5:pou2
-0x39f7:duo4
-0x39f9:te4
-0x39fa:ta4
-0x39fb:zhi3
-0x39fc:biao4
-0x39fd:gu4
-0x3a00:bing3
-0x3a01:zhi2
-0x3a02:dong3
-0x3a03:cheng2
-0x3a04:zhao4
-0x3a05:nei4
-0x3a06:lin3
-0x3a07:po2
-0x3a08:ji3
-0x3a09:min3
-0x3a0a:wei3
-0x3a0b:che3
-0x3a0c:gou4
-0x3a0e:ru2
-0x3a10:bu3
-0x3a12:kui2
-0x3a13:lao2
-0x3a14:han4
-0x3a15:ying2
-0x3a16:zhi4
-0x3a17:jie2
-0x3a18:xing3
-0x3a19:xie2
-0x3a1a:xun2
-0x3a1b:shan3
-0x3a1c:qian2
-0x3a1d:xie4
-0x3a1e:su4
-0x3a1f:hai2
-0x3a20:mi4
-0x3a21:hun2
-0x3a24:hui4
-0x3a25:na4
-0x3a26:song3
-0x3a27:ben4
-0x3a28:liu4
-0x3a29:jie2
-0x3a2a:huang4
-0x3a2b:lan3
-0x3a2d:hu4
-0x3a2e:dou1
-0x3a2f:huo4
-0x3a30:ge2
-0x3a31:yao2
-0x3a32:ce4
-0x3a33:gui3
-0x3a34:jian4
-0x3a35:jian3
-0x3a36:chou2
-0x3a37:jin4
-0x3a38:ma4
-0x3a39:hui4
-0x3a3a:men2
-0x3a3b:can2
-0x3a3c:lve4
-0x3a3d:pi3
-0x3a3e:yang4
-0x3a3f:ju4
-0x3a40:ju4
-0x3a41:que4
-0x3a44:shai1
-0x3a46:jiu4
-0x3a47:hua4
-0x3a48:xian4
-0x3a49:xie2
-0x3a4b:su4
-0x3a4c:fei4
-0x3a4d:ce4
-0x3a4e:ye4
-0x3a52:qin2
-0x3a53:hui3
-0x3a54:tun2
-0x3a56:qiang2
-0x3a57:xi2
-0x3a58:yi3
-0x3a5a:meng2
-0x3a5b:tuan2
-0x3a5c:lan3
-0x3a5d:hao2
-0x3a5e:ci4
-0x3a5f:zhai4
-0x3a60:piao3
-0x3a61:luo3
-0x3a62:mi2
-0x3a66:xie2
-0x3a67:bo2
-0x3a68:hui4
-0x3a69:qi3
-0x3a6a:xie2
-0x3a6d:bo2
-0x3a6e:qian2
-0x3a6f:ban3
-0x3a70:jiao3
-0x3a71:jue2
-0x3a72:kun3
-0x3a73:song3
-0x3a74:ju2
-0x3a75:e4
-0x3a76:nie4
-0x3a78:die2
-0x3a79:die2
-0x3a7b:gui3
-0x3a7d:qi2
-0x3a7e:chui2
-0x3a80:yu2
-0x3a81:qin2
-0x3a83:ke3
-0x3a84:fu2
-0x3a86:di3
-0x3a87:xian4
-0x3a88:gui4
-0x3a89:he2
-0x3a8a:qun2
-0x3a8b:han4
-0x3a8c:tong3
-0x3a8d:bo2
-0x3a8e:shan3
-0x3a8f:bi3
-0x3a90:lu4
-0x3a91:ye4
-0x3a92:ni2
-0x3a93:chuai2
-0x3a94:san4
-0x3a95:diao4
-0x3a96:lu4
-0x3a97:tou3
-0x3a98:lian3
-0x3a99:ke3
-0x3a9a:san4
-0x3a9b:zhen3
-0x3a9c:chuai3
-0x3a9d:lian4
-0x3a9e:mao4
-0x3aa0:qian4
-0x3aa1:ke3
-0x3aa2:shao3
-0x3aa3:qiao4
-0x3aa4:bi4
-0x3aa6:yin4
-0x3aa8:shan4
-0x3aa9:su4
-0x3aaa:sa4
-0x3aab:rui4
-0x3aac:zhuo2
-0x3aad:lu2
-0x3aae:ling2
-0x3aaf:cha2
-0x3ab1:huan4
-0x3ab4:jia2
-0x3ab5:ban4
-0x3ab6:hu2
-0x3ab7:dou3
-0x3ab9:lou3
-0x3abb:juan4
-0x3abc:ke3
-0x3abd:suo3
-0x3abe:ge2
-0x3abf:zhe2
-0x3ac0:ding3
-0x3ac1:duan4
-0x3ac2:zhu4
-0x3ac3:yan3
-0x3ac4:pang2
-0x3ac5:cha2
-0x3aca:yi3
-0x3acd:you2
-0x3ace:gun3
-0x3acf:yao3
-0x3ad0:yao3
-0x3ad1:shi2
-0x3ad2:gong3
-0x3ad3:qi3
-0x3ad4:gen4
-0x3ad7:hou4
-0x3ad8:mi4
-0x3ad9:fu2
-0x3ada:hu1
-0x3adb:guang4
-0x3adc:dan4
-0x3adf:yan2
-0x3ae2:qu4
-0x3ae4:chang3
-0x3ae5:ming3
-0x3ae7:bao4
-0x3aeb:xian3
-0x3aef:mao4
-0x3af0:lang3
-0x3af1:nan3
-0x3af2:pei4
-0x3af3:chen2
-0x3af6:cou3
-0x3af8:qie4
-0x3af9:dai4
-0x3afb:kun4
-0x3afc:die2
-0x3afd:lu4
-0x3b02:yu2
-0x3b03:tai2
-0x3b04:chan4
-0x3b05:man4
-0x3b06:mian2
-0x3b07:huan4
-0x3b09:nuan3
-0x3b0a:huan3
-0x3b0b:hou2
-0x3b0c:jing4
-0x3b0d:bo2
-0x3b0e:xian3
-0x3b0f:li4
-0x3b10:jin3
-0x3b12:mang3
-0x3b13:piao4
-0x3b14:hao2
-0x3b15:yang2
-0x3b17:xian4
-0x3b18:su4
-0x3b19:wei3
-0x3b1a:che4
-0x3b1c:jin4
-0x3b1d:ceng2
-0x3b1e:he4
-0x3b20:shai4
-0x3b21:ling2
-0x3b23:dui4
-0x3b25:pu4
-0x3b26:yue4
-0x3b27:bo2
-0x3b29:hui4
-0x3b2a:die2
-0x3b2b:yan4
-0x3b2c:ju4
-0x3b2d:jiao4
-0x3b2e:kuai4
-0x3b2f:lie4
-0x3b30:yu2
-0x3b31:ti4
-0x3b33:wu3
-0x3b34:hong3
-0x3b35:xiao2
-0x3b36:hao4
-0x3b3b:huang3
-0x3b3c:fu4
-0x3b3f:dun4
-0x3b41:reng2
-0x3b42:jiao3
-0x3b44:xin4
-0x3b47:yuan4
-0x3b48:jue2
-0x3b49:hua2
-0x3b4b:bang4
-0x3b4c:mou2
-0x3b4f:wei3
-0x3b51:mei4
-0x3b52:si4
-0x3b53:bian4
-0x3b54:lu2
-0x3b58:he2
-0x3b59:she2
-0x3b5a:lv3
-0x3b5b:pai4
-0x3b5c:rong2
-0x3b5d:qiu2
-0x3b5e:lie4
-0x3b5f:gong3
-0x3b60:xian3
-0x3b61:xi4
-0x3b64:niao3
-0x3b68:xie2
-0x3b69:lei4
-0x3b6b:cuan2
-0x3b6c:zhuo2
-0x3b6d:fei4
-0x3b6e:zuo4
-0x3b6f:die2
-0x3b70:ji4
-0x3b71:he2
-0x3b72:ji2
-0x3b78:tu2
-0x3b79:xian2
-0x3b7a:yan3
-0x3b7b:tang2
-0x3b7c:ta4
-0x3b7d:di3
-0x3b7e:jue2
-0x3b7f:ang2
-0x3b80:han2
-0x3b81:yao2
-0x3b82:ju2
-0x3b83:rui2
-0x3b84:bang3
-0x3b86:nie4
-0x3b87:tian4
-0x3b88:nai4
-0x3b8b:you3
-0x3b8c:mian2
-0x3b8f:nai4
-0x3b90:xing3
-0x3b91:qi4
-0x3b93:gen4
-0x3b94:tong2
-0x3b95:er2
-0x3b96:jia2
-0x3b97:qin2
-0x3b98:mao4
-0x3b99:e4
-0x3b9a:li4
-0x3b9b:chi2
-0x3b9d:he2
-0x3b9e:jie2
-0x3b9f:ji2
-0x3ba1:guan4
-0x3ba2:hou2
-0x3ba3:gai4
-0x3ba5:fen4
-0x3ba6:se4
-0x3ba8:ji2
-0x3baa:qiong2
-0x3bab:he2
-0x3bad:xian2
-0x3bae:jie2
-0x3baf:hua2
-0x3bb0:bi2
-0x3bb3:zhen4
-0x3bb6:shi4
-0x3bb8:song4
-0x3bb9:zhi3
-0x3bba:ben3
-0x3bbe:lang3
-0x3bbf:bi4
-0x3bc0:xian3
-0x3bc1:bang4
-0x3bc2:dai4
-0x3bc5:pi2
-0x3bc6:chan3
-0x3bc7:bi4
-0x3bc8:su4
-0x3bc9:huo4
-0x3bca:hen2
-0x3bcb:ying3
-0x3bcc:chuan2
-0x3bcd:jiang3
-0x3bce:nen4
-0x3bcf:gu3
-0x3bd0:fang3
-0x3bd3:ta4
-0x3bd4:cui4
-0x3bd6:de2
-0x3bd7:ran3
-0x3bd8:kuan3
-0x3bd9:che4
-0x3bda:da2
-0x3bdb:hu2
-0x3bdc:cui4
-0x3bdd:lu4
-0x3bde:juan4
-0x3bdf:lu4
-0x3be0:qian4
-0x3be1:pao4
-0x3be2:zhen4
-0x3be4:li4
-0x3be5:cao2
-0x3be6:qi2
-0x3be9:ti4
-0x3bea:ling2
-0x3beb:qu2
-0x3bec:lian3
-0x3bed:lu3
-0x3bee:shu3
-0x3bef:gong4
-0x3bf0:zhe2
-0x3bf1:biao3
-0x3bf2:jin4
-0x3bf3:qing2
-0x3bf6:zong1
-0x3bf7:pu2
-0x3bf8:jin3
-0x3bf9:biao3
-0x3bfa:jian4
-0x3bfb:gun3
-0x3bff:lie4
-0x3c00:li2
-0x3c01:luo3
-0x3c02:shen3
-0x3c03:mian2
-0x3c04:jian4
-0x3c05:di2
-0x3c06:bei4
-0x3c08:lian3
-0x3c0a:xun2
-0x3c0b:pin2
-0x3c0c:que4
-0x3c0d:long2
-0x3c0e:zui4
-0x3c10:jue2
-0x3c12:she2
-0x3c14:xie4
-0x3c16:lan3
-0x3c17:cu4
-0x3c18:yi2
-0x3c19:nuo2
-0x3c1a:li2
-0x3c1b:yue4
-0x3c1d:yi3
-0x3c1f:ji4
-0x3c20:kang4
-0x3c21:xie4
-0x3c23:zi4
-0x3c24:ke3
-0x3c25:hui4
-0x3c26:qu4
-0x3c2a:wa2
-0x3c2c:xun2
-0x3c2e:shen4
-0x3c2f:kou4
-0x3c30:qie4
-0x3c31:sha4
-0x3c32:xu4
-0x3c33:ya4
-0x3c34:po2
-0x3c35:zu2
-0x3c36:you3
-0x3c37:zi4
-0x3c38:lian3
-0x3c39:jin4
-0x3c3a:xia2
-0x3c3b:yi3
-0x3c3c:qie4
-0x3c3d:mi3
-0x3c3e:jiao4
-0x3c40:chi3
-0x3c41:shi4
-0x3c43:yin3
-0x3c44:mo4
-0x3c45:yi4
-0x3c47:se4
-0x3c48:jin4
-0x3c49:ye4
-0x3c4b:que4
-0x3c4c:che4
-0x3c4d:luan2
-0x3c4f:zheng4
-0x3c56:cui4
-0x3c58:an4
-0x3c59:xiu3
-0x3c5a:can2
-0x3c5b:chuan3
-0x3c5c:zha2
-0x3c5e:ji2
-0x3c5f:bo2
-0x3c62:lang2
-0x3c63:tui3
-0x3c65:ling2
-0x3c66:e4
-0x3c67:wo4
-0x3c68:lian4
-0x3c69:du2
-0x3c6a:men4
-0x3c6b:lan4
-0x3c6c:wei3
-0x3c6d:duan4
-0x3c6e:kuai4
-0x3c6f:ai2
-0x3c70:zai3
-0x3c71:hui4
-0x3c72:yi4
-0x3c73:mo4
-0x3c74:zi4
-0x3c75:ben4
-0x3c76:beng4
-0x3c78:bi4
-0x3c79:li4
-0x3c7a:lu2
-0x3c7b:luo3
-0x3c7d:dan4
-0x3c7f:que4
-0x3c80:chen2
-0x3c82:cheng2
-0x3c83:jiu4
-0x3c84:kou4
-0x3c85:ji4
-0x3c86:ling2
-0x3c88:shao2
-0x3c89:kai4
-0x3c8a:rui4
-0x3c8b:chuo4
-0x3c8c:neng4
-0x3c8e:lou2
-0x3c8f:bao3
-0x3c92:bao4
-0x3c93:rong2
-0x3c95:lei4
-0x3c98:qu2
-0x3c9b:zhi3
-0x3c9c:tan2
-0x3c9d:rong3
-0x3c9e:zu2
-0x3c9f:ying3
-0x3ca0:mao2
-0x3ca1:nai4
-0x3ca2:bian4
-0x3ca5:tang2
-0x3ca6:han4
-0x3ca7:zao4
-0x3ca8:rong2
-0x3cab:pu2
-0x3cad:tan3
-0x3caf:ran2
-0x3cb0:ning2
-0x3cb1:lie4
-0x3cb2:die2
-0x3cb3:die2
-0x3cb4:zhong4
-0x3cb6:lv4
-0x3cb7:dan4
-0x3cb9:gui3
-0x3cba:ji2
-0x3cbb:ni4
-0x3cbc:yi4
-0x3cbd:nian4
-0x3cbe:yu3
-0x3cbf:wang3
-0x3cc0:guo4
-0x3cc1:ze4
-0x3cc2:yan2
-0x3cc3:cui4
-0x3cc4:xian2
-0x3cc5:jiao3
-0x3cc6:shu3
-0x3cc7:fu4
-0x3cc8:pei4
-0x3ccd:bu4
-0x3cce:bian4
-0x3ccf:chi3
-0x3cd0:sa4
-0x3cd1:yi4
-0x3cd2:bian4
-0x3cd4:dui4
-0x3cd5:lan2
-0x3cd7:chai4
-0x3cd9:xuan4
-0x3cda:yu4
-0x3cdb:yu2
-0x3ce0:ta4
-0x3ce5:ju4
-0x3ce6:xie4
-0x3ce7:xi2
-0x3ce8:jian3
-0x3cea:pan4
-0x3ceb:ta4
-0x3cec:xuan2
-0x3ced:xian2
-0x3cee:niao4
-0x3cf4:mi4
-0x3cf5:ji4
-0x3cf6:gou4
-0x3cf7:wen3
-0x3cf9:wang3
-0x3cfa:you2
-0x3cfb:ze2
-0x3cfc:bi4
-0x3cfd:mi3
-0x3cff:xie4
-0x3d00:fan4
-0x3d01:yi4
-0x3d03:lei4
-0x3d04:ying2
-0x3d06:jin4
-0x3d07:she4
-0x3d08:yin4
-0x3d09:ji3
-0x3d0b:su4
-0x3d0f:wang3
-0x3d10:mian4
-0x3d11:su4
-0x3d12:yi4
-0x3d13:zai3
-0x3d14:se4
-0x3d15:ji2
-0x3d16:luo4
-0x3d18:mao4
-0x3d19:zha2
-0x3d1a:sui4
-0x3d1b:zhi4
-0x3d1c:bian4
-0x3d1d:li2
-0x3d25:qiao4
-0x3d26:guan4
-0x3d28:zhen4
-0x3d2a:nie4
-0x3d2b:jun4
-0x3d2c:xie4
-0x3d2d:yao3
-0x3d2e:xie4
-0x3d30:neng2
-0x3d33:long3
-0x3d34:chen2
-0x3d35:mi4
-0x3d36:que4
-0x3d38:na4
-0x3d3c:su4
-0x3d3d:xie4
-0x3d3e:bo2
-0x3d3f:ding3
-0x3d40:cuan4
-0x3d42:chuang3
-0x3d43:che4
-0x3d44:han4
-0x3d45:dan4
-0x3d46:hao4
-0x3d4a:shen3
-0x3d4b:mi4
-0x3d4c:chan4
-0x3d4d:men4
-0x3d4e:han3
-0x3d4f:cui3
-0x3d50:jue2
-0x3d51:he4
-0x3d52:fei4
-0x3d53:shi2
-0x3d54:che3
-0x3d55:shen4
-0x3d56:nv4
-0x3d57:fu4
-0x3d58:man4
-0x3d5d:yi4
-0x3d5e:chou2
-0x3d61:bao2
-0x3d62:lei2
-0x3d63:ke3
-0x3d64:dian4
-0x3d65:bi4
-0x3d66:sui2
-0x3d67:ge2
-0x3d68:bi4
-0x3d69:yi4
-0x3d6a:xian2
-0x3d6b:ni3
-0x3d6c:ying2
-0x3d6d:zhu3
-0x3d6e:chun2
-0x3d6f:feng2
-0x3d70:xu4
-0x3d71:piao3
-0x3d72:wu3
-0x3d73:liao2
-0x3d74:cang2
-0x3d75:zou4
-0x3d77:bian4
-0x3d78:yao4
-0x3d79:huan2
-0x3d7a:pai2
-0x3d7b:sou4
-0x3d7d:dui4
-0x3d7e:jing4
-0x3d7f:xi2
-0x3d81:guo2
-0x3d84:yan2
-0x3d85:xue2
-0x3d86:chu2
-0x3d87:heng2
-0x3d88:ying2
-0x3d8c:lian2
-0x3d8d:xian3
-0x3d8e:huan2
-0x3d91:lian4
-0x3d92:shan3
-0x3d93:cang2
-0x3d94:bei4
-0x3d95:jian3
-0x3d96:shu4
-0x3d97:fan4
-0x3d98:dian4
-0x3d9a:ba4
-0x3d9b:yu2
-0x3d9e:nang3
-0x3d9f:lei3
-0x3da0:yi4
-0x3da1:dai4
-0x3da3:chan2
-0x3da4:chao3
-0x3da6:jin4
-0x3da7:nen4
-0x3dab:liao3
-0x3dac:mei2
-0x3dad:jiu4
-0x3daf:liu4
-0x3db0:han2
-0x3db2:yong4
-0x3db3:jin4
-0x3db4:chi3
-0x3db5:ren4
-0x3db6:nong2
-0x3db9:hong4
-0x3dba:tian4
-0x3dbf:bo2
-0x3dc0:qiong2
-0x3dc2:shu4
-0x3dc3:cui3
-0x3dc4:hui4
-0x3dc5:chao3
-0x3dc6:dou4
-0x3dc7:guai4
-0x3dc8:e4
-0x3dc9:wei4
-0x3dca:fen2
-0x3dcb:tan2
-0x3dcd:lun2
-0x3dce:he4
-0x3dcf:yong3
-0x3dd0:hui3
-0x3dd2:yu2
-0x3dd3:zong3
-0x3dd4:yan4
-0x3dd5:qiu2
-0x3dd6:zhao4
-0x3dd7:jiong3
-0x3dd8:tai2
-0x3ddf:tui4
-0x3de0:lin2
-0x3de1:jiong3
-0x3de2:zha3
-0x3de4:he4
-0x3de6:xu4
-0x3dea:cui4
-0x3deb:qing3
-0x3dec:mo4
-0x3def:beng4
-0x3df0:li2
-0x3df3:yan4
-0x3df4:ge2
-0x3df5:mo4
-0x3df6:bei4
-0x3df7:juan3
-0x3df8:die2
-0x3df9:shao4
-0x3dfb:wu2
-0x3dfc:yan4
-0x3dfe:jue2
-0x3e00:tai2
-0x3e01:han3
-0x3e03:dian3
-0x3e04:ji4
-0x3e05:jie2
-0x3e09:xie4
-0x3e0a:la4
-0x3e0b:fan2
-0x3e0c:huo4
-0x3e0d:xi4
-0x3e0e:nie4
-0x3e0f:mi2
-0x3e10:ran2
-0x3e11:cuan4
-0x3e12:yin2
-0x3e13:mi4
-0x3e15:jue2
-0x3e17:tong2
-0x3e18:wan4
-0x3e1a:li3
-0x3e1b:shao2
-0x3e1c:kong4
-0x3e1d:kan3
-0x3e1e:ban3
-0x3e20:tiao3
-0x3e22:bei4
-0x3e23:ye4
-0x3e24:pian4
-0x3e25:chan2
-0x3e26:hu4
-0x3e27:ken4
-0x3e29:an4
-0x3e2a:chun2
-0x3e2b:qian2
-0x3e2c:bei4
-0x3e2e:fen2
-0x3e30:tuo2
-0x3e31:tuo2
-0x3e32:zuo2
-0x3e33:ling2
-0x3e35:gui3
-0x3e37:shi4
-0x3e38:hou3
-0x3e39:lie4
-0x3e3b:si4
-0x3e3d:bei4
-0x3e3e:ren4
-0x3e3f:du2
-0x3e40:bo2
-0x3e41:liang2
-0x3e42:ci4
-0x3e43:bi4
-0x3e44:ji4
-0x3e45:zong3
-0x3e47:he2
-0x3e48:li2
-0x3e49:yuan2
-0x3e4a:yue4
-0x3e4c:chan3
-0x3e4d:di2
-0x3e4e:lei2
-0x3e4f:jin3
-0x3e50:chong2
-0x3e51:si4
-0x3e52:pu3
-0x3e53:yi4
-0x3e56:huan4
-0x3e57:tao2
-0x3e58:ru2
-0x3e59:ying2
-0x3e5a:ying2
-0x3e5b:rao2
-0x3e5c:yin2
-0x3e5d:shi4
-0x3e5e:yin2
-0x3e5f:jue2
-0x3e60:tun2
-0x3e61:xuan2
-0x3e64:qie4
-0x3e65:zhu4
-0x3e68:you4
-0x3e6b:xi4
-0x3e6c:shi3
-0x3e6d:yi4
-0x3e6e:mo4
-0x3e71:hu2
-0x3e72:xiao4
-0x3e73:wu2
-0x3e75:jing4
-0x3e76:ting2
-0x3e77:shi3
-0x3e78:ni2
-0x3e7a:ta4
-0x3e7c:chu3
-0x3e7d:chan3
-0x3e7e:piao3
-0x3e7f:diao3
-0x3e80:nao2
-0x3e81:nao3
-0x3e82:gan3
-0x3e83:gou3
-0x3e84:yu3
-0x3e85:hou2
-0x3e89:hu4
-0x3e8a:yang4
-0x3e8c:xian4
-0x3e8e:rong2
-0x3e8f:lou2
-0x3e90:zhao3
-0x3e91:can2
-0x3e92:liao4
-0x3e93:piao4
-0x3e94:hai4
-0x3e95:fan2
-0x3e96:han3
-0x3e97:dan4
-0x3e98:zhan4
-0x3e9a:ta3
-0x3e9b:zhu4
-0x3e9c:ban3
-0x3e9d:jian4
-0x3e9e:yu2
-0x3e9f:zhuo2
-0x3ea0:you4
-0x3ea1:li4
-0x3ea5:chan2
-0x3ea6:lian2
-0x3ea9:jiu4
-0x3eaa:pu2
-0x3eab:qiu2
-0x3eac:gong3
-0x3ead:zi3
-0x3eae:yu2
-0x3eb1:reng2
-0x3eb2:niu3
-0x3eb3:mei2
-0x3eb5:jiu2
-0x3eb7:xu4
-0x3eb8:ping2
-0x3eb9:bian4
-0x3eba:mao4
-0x3ebf:yi2
-0x3ec0:you2
-0x3ec2:ping2
-0x3ec4:bao3
-0x3ec5:hui4
-0x3ec9:bu4
-0x3eca:mang2
-0x3ecb:la4
-0x3ecc:tu2
-0x3ecd:wu2
-0x3ece:li4
-0x3ecf:ling2
-0x3ed1:ji4
-0x3ed2:jun4
-0x3ed4:duo3
-0x3ed5:jue2
-0x3ed6:dai4
-0x3ed7:bei4
-0x3edd:la4
-0x3ede:bian4
-0x3edf:sui2
-0x3ee0:tu2
-0x3ee1:die2
-0x3ee7:duo4
-0x3eea:sui4
-0x3eeb:bi4
-0x3eec:tu2
-0x3eed:se4
-0x3eee:can4
-0x3eef:tu2
-0x3ef0:mian3
-0x3ef2:lv3
-0x3ef5:zhan4
-0x3ef6:bi3
-0x3ef7:ji2
-0x3ef8:cen2
-0x3efa:li4
-0x3efd:sui4
-0x3eff:shu3
-0x3f02:e2
-0x3f07:qiong2
-0x3f08:luo2
-0x3f09:yin4
-0x3f0a:tun2
-0x3f0b:gu3
-0x3f0c:yu3
-0x3f0d:lei3
-0x3f0e:bei4
-0x3f0f:nei3
-0x3f10:pian2
-0x3f11:lian4
-0x3f12:qiu3
-0x3f13:lian2
-0x3f16:li4
-0x3f17:ding3
-0x3f18:wa3
-0x3f19:zhou4
-0x3f1b:xing2
-0x3f1c:ang4
-0x3f1d:fan4
-0x3f1e:peng4
-0x3f1f:bai2
-0x3f20:tuo2
-0x3f22:e3
-0x3f23:bai3
-0x3f24:qi4
-0x3f25:chu2
-0x3f26:gong3
-0x3f27:tong2
-0x3f28:han2
-0x3f29:cheng2
-0x3f2a:jia2
-0x3f2b:huan4
-0x3f2c:xing4
-0x3f2d:dian4
-0x3f2e:mai2
-0x3f2f:dong4
-0x3f30:e2
-0x3f31:ruan3
-0x3f32:lie4
-0x3f33:sheng3
-0x3f34:ou3
-0x3f35:di4
-0x3f36:yu2
-0x3f37:chuan2
-0x3f38:rong2
-0x3f3a:tang2
-0x3f3b:cong2
-0x3f3c:piao2
-0x3f3d:shuang3
-0x3f3e:lu4
-0x3f3f:tong2
-0x3f40:zheng4
-0x3f41:li4
-0x3f42:sa4
-0x3f47:guai4
-0x3f48:yi4
-0x3f49:han3
-0x3f4a:xie4
-0x3f4b:luo2
-0x3f4c:liu4
-0x3f4e:dan3
-0x3f51:tan2
-0x3f55:you2
-0x3f56:nan2
-0x3f58:gang3
-0x3f59:jun4
-0x3f5a:chi4
-0x3f5b:kou4
-0x3f5c:wan3
-0x3f5d:li4
-0x3f5e:liu2
-0x3f5f:lie4
-0x3f60:xia2
-0x3f62:an3
-0x3f63:yu4
-0x3f64:ju2
-0x3f65:rou2
-0x3f66:xun2
-0x3f68:cuo2
-0x3f69:can4
-0x3f6a:zeng3
-0x3f6b:yong3
-0x3f6c:fu4
-0x3f6d:ruan3
-0x3f6f:xi2
-0x3f70:shu4
-0x3f71:jiao3
-0x3f72:jiao3
-0x3f73:han4
-0x3f74:zhang4
-0x3f77:shui4
-0x3f78:chen2
-0x3f79:fan4
-0x3f7a:ji2
-0x3f7d:gu4
-0x3f7e:wu4
-0x3f80:qie4
-0x3f81:shu4
-0x3f83:tuo2
-0x3f84:du2
-0x3f85:si4
-0x3f86:ran2
-0x3f87:mu4
-0x3f88:fu4
-0x3f89:ling2
-0x3f8a:ji2
-0x3f8b:xiu4
-0x3f8c:xuan3
-0x3f8d:nai2
-0x3f8f:jie4
-0x3f90:li4
-0x3f91:da2
-0x3f92:ji4
-0x3f94:lv3
-0x3f95:shen3
-0x3f96:li3
-0x3f97:lang3
-0x3f98:geng3
-0x3f99:yin3
-0x3f9b:qin3
-0x3f9c:qie4
-0x3f9d:che4
-0x3f9e:you3
-0x3f9f:bu4
-0x3fa0:huang2
-0x3fa1:que4
-0x3fa2:lai4
-0x3fa5:xu4
-0x3fa6:bang4
-0x3fa7:ke4
-0x3fa8:qi3
-0x3faa:sheng3
-0x3fad:zhou4
-0x3fae:huang2
-0x3faf:tui2
-0x3fb0:hu2
-0x3fb1:bei4
-0x3fb5:ji4
-0x3fb6:gu3
-0x3fb8:gao3
-0x3fb9:chai2
-0x3fba:ma4
-0x3fbb:zhu4
-0x3fbc:tui3
-0x3fbd:tui2
-0x3fbe:lian2
-0x3fbf:lang2
-0x3fc3:dai4
-0x3fc4:ai4
-0x3fc5:xian3
-0x3fc7:xi2
-0x3fc9:tui2
-0x3fca:can3
-0x3fcb:sao4
-0x3fcd:jie4
-0x3fce:fen4
-0x3fcf:qun2
-0x3fd1:yao4
-0x3fd2:dao3
-0x3fd3:jia2
-0x3fd4:lei3
-0x3fd5:yan2
-0x3fd6:lu2
-0x3fd7:tui2
-0x3fd8:ying2
-0x3fd9:pi4
-0x3fda:luo4
-0x3fdb:li2
-0x3fdc:bie3
-0x3fde:mao4
-0x3fdf:bai2
-0x3fe2:yao4
-0x3fe3:he2
-0x3fe4:chun3
-0x3fe5:hu2
-0x3fe6:ning4
-0x3fe7:chou2
-0x3fe8:li4
-0x3fe9:tang3
-0x3fea:huan2
-0x3feb:bi4
-0x3fed:che4
-0x3fee:yang4
-0x3fef:da2
-0x3ff0:ao2
-0x3ff1:xue2
-0x3ff5:ran3
-0x3ff7:zao4
-0x3ff8:wan3
-0x3ff9:ta4
-0x3ffa:bao2
-0x3ffc:yan2
-0x3ffe:zhu4
-0x3fff:ya3
-0x4000:fan2
-0x4001:you4
-0x4003:tui2
-0x4004:meng2
-0x4005:she4
-0x4006:jin4
-0x4007:gu3
-0x4008:qi4
-0x4009:qiao2
-0x400a:jiao3
-0x400b:yan2
-0x400d:kan4
-0x400e:mian3
-0x400f:xian4
-0x4010:san3
-0x4011:na4
-0x4013:huan4
-0x4014:niu2
-0x4015:cheng4
-0x4017:jue2
-0x4018:xi2
-0x4019:qi4
-0x401a:ang2
-0x401b:mei4
-0x401c:gu3
-0x401f:fan2
-0x4020:qu2
-0x4021:chan4
-0x4022:shun4
-0x4023:bi4
-0x4024:mao4
-0x4025:shuo4
-0x4026:gu3
-0x4027:hong3
-0x4028:huan4
-0x4029:luo4
-0x402a:hang2
-0x402b:jia2
-0x402c:quan2
-0x402e:mang2
-0x402f:bu3
-0x4030:gu3
-0x4032:mu4
-0x4033:ai4
-0x4034:ying3
-0x4035:shun4
-0x4036:lang3
-0x4037:jie2
-0x4038:di4
-0x4039:jie2
-0x403b:pin4
-0x403c:ren4
-0x403d:yan2
-0x403e:du3
-0x403f:di4
-0x4041:lang3
-0x4042:xian4
-0x4044:xing4
-0x4045:bei4
-0x4046:an3
-0x4047:mi4
-0x4048:qi4
-0x4049:qi4
-0x404a:wo4
-0x404b:she2
-0x404c:yu4
-0x404d:jia4
-0x404e:cheng2
-0x404f:yao3
-0x4050:ying4
-0x4051:yang2
-0x4052:ji2
-0x4053:jie4
-0x4054:han4
-0x4055:min2
-0x4056:lou1
-0x4057:kai3
-0x4058:yao3
-0x4059:yan3
-0x405a:sun3
-0x405b:gui3
-0x405c:huang3
-0x405d:ying2
-0x405e:sheng3
-0x405f:cha2
-0x4060:lian2
-0x4062:xuan2
-0x4063:chuan2
-0x4064:che4
-0x4065:ni4
-0x4066:qu4
-0x4067:miao2
-0x4068:huo4
-0x4069:yu2
-0x406a:nan3
-0x406b:hu2
-0x406c:ceng2
-0x406e:qian2
-0x406f:she4
-0x4070:jiang3
-0x4071:ao4
-0x4072:mai2
-0x4073:mang3
-0x4074:zhan3
-0x4075:bian3
-0x4076:jiao3
-0x4077:jue2
-0x4078:nong2
-0x4079:bi4
-0x407a:shi4
-0x407b:li4
-0x407c:mo4
-0x407d:lie4
-0x407e:mie4
-0x407f:mo4
-0x4080:xi1
-0x4081:chan2
-0x4082:qu2
-0x4083:jiao4
-0x4084:huo4
-0x4086:xu4
-0x4087:nang2
-0x4088:tong2
-0x4089:hou2
-0x408a:yu4
-0x408d:bo2
-0x408e:zuan3
-0x4090:chuo4
-0x4092:jie2
-0x4094:xing4
-0x4095:hui4
-0x4096:shi2
-0x409a:yao2
-0x409b:yu2
-0x409c:bang4
-0x409d:jie2
-0x409e:zhe4
-0x40a0:she2
-0x40a1:di3
-0x40a2:dong3
-0x40a3:ci2
-0x40a4:fu4
-0x40a5:min2
-0x40a6:zhen3
-0x40a7:zhen3
-0x40a9:yan4
-0x40aa:diao4
-0x40ab:hong2
-0x40ac:gong3
-0x40ae:lve4
-0x40af:guai4
-0x40b0:la4
-0x40b1:cui4
-0x40b2:fa3
-0x40b3:cuo3
-0x40b4:yan2
-0x40b6:jie2
-0x40b8:guo2
-0x40b9:suo3
-0x40ba:wan3
-0x40bb:zheng4
-0x40bc:nie4
-0x40bd:diao4
-0x40be:lai3
-0x40bf:ta4
-0x40c0:cui4
-0x40c2:gun3
-0x40c7:mian2
-0x40c9:min2
-0x40ca:ju3
-0x40cb:yu2
-0x40cd:zhao4
-0x40ce:ze2
-0x40d1:pan2
-0x40d2:he2
-0x40d3:gou4
-0x40d4:hong2
-0x40d5:lao2
-0x40d6:wu4
-0x40d7:chuo4
-0x40d9:lu4
-0x40da:cu4
-0x40db:lian2
-0x40dd:qiao4
-0x40de:shu2
-0x40e1:cen2
-0x40e3:hui3
-0x40e4:su4
-0x40e5:chuang2
-0x40e7:long2
-0x40e9:nao2
-0x40ea:tan2
-0x40eb:dan3
-0x40ec:wei3
-0x40ed:gan3
-0x40ee:da2
-0x40ef:li4
-0x40f1:xian4
-0x40f2:pan2
-0x40f3:la4
-0x40f5:niao3
-0x40f6:huai2
-0x40f7:ying2
-0x40f8:xian4
-0x40f9:lan4
-0x40fa:mo2
-0x40fb:ba4
-0x40fd:fu2
-0x40fe:bi3
-0x4100:huo4
-0x4101:yi4
-0x4102:liu4
-0x4105:juan4
-0x4106:huo2
-0x4107:cheng2
-0x4108:dou4
-0x4109:e2
-0x410b:yan3
-0x410c:zhui4
-0x410d:du4
-0x410e:qi3
-0x410f:yu2
-0x4110:quan4
-0x4111:huo2
-0x4112:nie4
-0x4113:heng2
-0x4114:ju3
-0x4115:she4
-0x4118:peng2
-0x4119:ming2
-0x411a:cao2
-0x411b:lou2
-0x411c:li2
-0x411d:chun3
-0x411f:cui4
-0x4120:shan4
-0x4122:qi2
-0x4124:lai4
-0x4125:ling2
-0x4126:liao3
-0x4127:reng2
-0x4128:yu2
-0x4129:nao2
-0x412a:chuo4
-0x412b:qi3
-0x412c:yi2
-0x412d:nian2
-0x412f:jian3
-0x4130:ya2
-0x4132:chui2
-0x4136:bi4
-0x4137:dan4
-0x4138:po4
-0x4139:nian2
-0x413a:zhi4
-0x413b:chao2
-0x413c:tian3
-0x413d:tian3
-0x413e:rou4
-0x413f:yi4
-0x4140:lie4
-0x4141:an4
-0x4142:he2
-0x4143:qiong2
-0x4144:li4
-0x4146:zi4
-0x4147:su4
-0x4148:yuan4
-0x4149:ya4
-0x414a:du4
-0x414b:wan3
-0x414d:dong4
-0x414e:you3
-0x414f:hui4
-0x4150:jian3
-0x4151:rui2
-0x4152:mang2
-0x4153:ju3
-0x4156:an3
-0x4157:sui4
-0x4158:lai2
-0x4159:hun4
-0x415a:qiang3
-0x415c:duo4
-0x415e:na4
-0x415f:can3
-0x4160:ti2
-0x4161:xu3
-0x4162:jiu4
-0x4163:huang2
-0x4164:qi4
-0x4165:jie2
-0x4166:mao2
-0x4167:yan4
-0x4169:zhi3
-0x416a:tui2
-0x416c:ai4
-0x416d:pang2
-0x416e:cang4
-0x416f:tang2
-0x4170:en3
-0x4171:hun4
-0x4172:qi2
-0x4173:chu2
-0x4174:suo3
-0x4175:zhuo2
-0x4176:nou4
-0x4177:tu2
-0x4178:zu2
-0x4179:lou2
-0x417a:miao3
-0x417b:li2
-0x417c:man2
-0x417d:gu3
-0x417e:cen2
-0x417f:hua2
-0x4180:mei3
-0x4182:lian2
-0x4183:dao3
-0x4184:shan4
-0x4185:ci2
-0x4188:zhi4
-0x4189:ba4
-0x418a:cui4
-0x418b:qiu1
-0x418d:long2
-0x418f:fei4
-0x4190:guo2
-0x4191:cheng2
-0x4192:jiu4
-0x4193:e4
-0x4195:jue2
-0x4196:hong2
-0x4197:jiao4
-0x4198:cuan2
-0x4199:yao2
-0x419a:tong2
-0x419b:cha2
-0x419c:you4
-0x419d:shu4
-0x419e:yao3
-0x419f:ge2
-0x41a0:huan4
-0x41a1:lang2
-0x41a2:jue2
-0x41a3:chen2
-0x41a6:shen4
-0x41a8:ming2
-0x41a9:ming2
-0x41ab:chuang1
-0x41ac:yun3
-0x41ae:jin4
-0x41af:chuo4
-0x41b1:tan3
-0x41b3:qiong2
-0x41b5:cheng2
-0x41b7:yu4
-0x41b8:cheng2
-0x41b9:tong3
-0x41bb:qiao4
-0x41bd:ju4
-0x41be:lan2
-0x41bf:yi4
-0x41c0:rong2
-0x41c3:si4
-0x41c5:fa2
-0x41c7:meng2
-0x41c8:gui4
-0x41cb:hai4
-0x41cc:qiao4
-0x41cd:chuo4
-0x41ce:que4
-0x41cf:dui4
-0x41d0:li4
-0x41d1:ba4
-0x41d2:jie4
-0x41d4:luo4
-0x41d6:yun3
-0x41d8:hu4
-0x41d9:yin3
-0x41db:zhi3
-0x41dc:lian3
-0x41de:gan3
-0x41df:jian4
-0x41e0:zhou4
-0x41e1:zhu4
-0x41e2:ku3
-0x41e3:na4
-0x41e4:dui4
-0x41e5:ze2
-0x41e6:yang3
-0x41e7:zhu4
-0x41e8:gong4
-0x41e9:yi4
-0x41ec:chuang3
-0x41ed:lao3
-0x41ee:ren4
-0x41ef:rong2
-0x41f1:na4
-0x41f2:ce4
-0x41f5:yi2
-0x41f6:jue2
-0x41f7:bi3
-0x41f8:cheng2
-0x41f9:jun4
-0x41fa:chou2
-0x41fb:hui4
-0x41fc:chi4
-0x41fd:zhi4
-0x41fe:yan2
-0x4201:lun2
-0x4202:bing4
-0x4203:zhao3
-0x4204:han2
-0x4205:yu4
-0x4206:dai4
-0x4207:zhao4
-0x4208:fei2
-0x4209:sha4
-0x420a:ling2
-0x420b:ta4
-0x420d:mang2
-0x420e:ye4
-0x420f:bao2
-0x4210:kui4
-0x4211:gua3
-0x4212:nan3
-0x4213:ge2
-0x4215:chi2
-0x4217:suo3
-0x4218:ci2
-0x4219:zhou4
-0x421a:tai2
-0x421b:kuai4
-0x421c:qin4
-0x421e:du3
-0x421f:ce4
-0x4220:huan3
-0x4222:sai3
-0x4223:zheng4
-0x4224:qian2
-0x4227:wei3
-0x422a:xi4
-0x422b:na4
-0x422c:pu2
-0x422d:huai2
-0x422e:ju3
-0x4232:pan2
-0x4233:ta4
-0x4234:qian4
-0x4236:rong2
-0x4237:luo4
-0x4238:hu2
-0x4239:sou3
-0x423b:pu2
-0x423c:mie4
-0x423e:shuo4
-0x423f:mai4
-0x4240:shu4
-0x4241:ling2
-0x4242:lei3
-0x4243:jiang3
-0x4244:leng2
-0x4245:zhi4
-0x4246:diao3
-0x4248:san3
-0x4249:hu2
-0x424a:fan4
-0x424b:mei4
-0x424c:sui4
-0x424d:jian3
-0x424e:tang2
-0x424f:xie4
-0x4251:mo2
-0x4252:fan2
-0x4253:lei2
-0x4255:ceng2
-0x4256:ling2
-0x4258:cong2
-0x4259:yun2
-0x425a:meng2
-0x425b:yu4
-0x425c:zhi4
-0x425d:qi3
-0x425e:dan3
-0x425f:huo4
-0x4260:wei2
-0x4261:tan2
-0x4262:se4
-0x4263:xie4
-0x4264:sou3
-0x4265:song3
-0x4267:liu2
-0x4268:yi4
-0x426a:lei4
-0x426b:li2
-0x426c:fei4
-0x426d:lie4
-0x426e:lin4
-0x426f:xian4
-0x4270:yao2
-0x4272:bie4
-0x4273:xian3
-0x4274:rang2
-0x4275:zhuan4
-0x4277:dan4
-0x4278:bian4
-0x4279:ling2
-0x427a:hong2
-0x427b:qi2
-0x427c:liao4
-0x427d:ban3
-0x427e:mi4
-0x427f:hu2
-0x4280:hu2
-0x4282:ce4
-0x4283:pei4
-0x4284:qiong2
-0x4285:ming2
-0x4286:jiu4
-0x4287:bu4
-0x4288:mei2
-0x4289:san3
-0x428a:mei4
-0x428d:li2
-0x428e:quan3
-0x4290:en4
-0x4291:xiang3
-0x4293:shi4
-0x4296:lan3
-0x4297:huang2
-0x4298:jiu4
-0x4299:yan2
-0x429b:sa3
-0x429c:tuan2
-0x429d:xie4
-0x429e:zhe2
-0x429f:men2
-0x42a0:xi4
-0x42a1:man2
-0x42a3:huang2
-0x42a4:tan2
-0x42a5:xiao4
-0x42a6:ya2
-0x42a7:bi4
-0x42a8:luo2
-0x42a9:fan2
-0x42aa:li4
-0x42ab:cui3
-0x42ac:cha4
-0x42ad:chou2
-0x42ae:di2
-0x42af:kuang4
-0x42b0:chu3
-0x42b2:chan3
-0x42b3:mi2
-0x42b4:qian4
-0x42b5:qiu2
-0x42b6:zhen4
-0x42ba:gu3
-0x42bb:yan3
-0x42bc:chi3
-0x42bd:guai4
-0x42be:mu4
-0x42bf:bo2
-0x42c0:kua4
-0x42c1:geng3
-0x42c2:yao2
-0x42c3:mao4
-0x42c4:wang3
-0x42c8:ru2
-0x42c9:jue2
-0x42cb:min2
-0x42cc:jiang3
-0x42ce:zhan4
-0x42cf:zuo4
-0x42d0:yue4
-0x42d1:bing3
-0x42d3:zhou4
-0x42d4:bi4
-0x42d5:ren4
-0x42d6:yu4
-0x42d8:chuo4
-0x42d9:er3
-0x42da:yi4
-0x42db:mi2
-0x42dc:qing4
-0x42de:wang3
-0x42df:ji4
-0x42e0:bu3
-0x42e2:bie4
-0x42e3:fan2
-0x42e4:yao4
-0x42e5:li2
-0x42e6:fan2
-0x42e7:qu2
-0x42e8:fu3
-0x42e9:er2
-0x42ed:huo4
-0x42ee:jin4
-0x42ef:qi3
-0x42f0:ju2
-0x42f1:lai2
-0x42f2:che3
-0x42f3:bei4
-0x42f4:niu4
-0x42f5:yi4
-0x42f6:xu4
-0x42f7:liu2
-0x42f8:xun2
-0x42f9:fu2
-0x42fb:nin2
-0x42fc:ting3
-0x42fd:beng3
-0x42fe:zha3
-0x4302:ou4
-0x4303:shuo4
-0x4304:geng3
-0x4305:tang2
-0x4306:gui4
-0x4307:hui4
-0x4308:ta4
-0x430a:yao2
-0x430c:qi4
-0x430d:han4
-0x430e:lve4
-0x430f:mi4
-0x4310:mi4
-0x4312:lu4
-0x4313:fan2
-0x4314:ou4
-0x4315:mi2
-0x4316:jie2
-0x4317:fu3
-0x4318:mi2
-0x4319:huang3
-0x431a:su4
-0x431b:yao2
-0x431c:nie4
-0x431d:jin4
-0x431e:lian3
-0x431f:bi4
-0x4320:qing4
-0x4321:ti3
-0x4322:ling2
-0x4323:zuan3
-0x4324:zhi3
-0x4325:yin3
-0x4326:dao3
-0x4327:chou2
-0x4328:cai4
-0x4329:mi4
-0x432a:yan2
-0x432b:lan3
-0x432c:chong2
-0x432f:guan4
-0x4330:she4
-0x4331:luo4
-0x4334:luo4
-0x4335:zhu2
-0x4337:chou2
-0x4338:juan4
-0x4339:jiong3
-0x433a:er3
-0x433b:yi4
-0x433c:rui4
-0x433d:cai3
-0x433e:ren2
-0x433f:fu2
-0x4340:lan2
-0x4341:sui4
-0x4342:yu2
-0x4343:yao2
-0x4344:dian3
-0x4345:ling2
-0x4346:zhu4
-0x4347:ta4
-0x4348:ping2
-0x4349:qian2
-0x434a:jue2
-0x434b:chui2
-0x434c:bu4
-0x434d:gu3
-0x434e:cun4
-0x4350:han3
-0x4351:han3
-0x4352:mou3
-0x4353:hu4
-0x4354:hong2
-0x4355:di3
-0x4356:fu2
-0x4357:xuan4
-0x4358:mi2
-0x4359:mei2
-0x435a:lang4
-0x435b:gu4
-0x435c:zhao4
-0x435d:ta4
-0x435e:yu4
-0x435f:zong4
-0x4360:li2
-0x4361:liao4
-0x4362:wu2
-0x4363:lei2
-0x4364:ji3
-0x4365:lei4
-0x4366:li2
-0x4368:bo2
-0x4369:ang3
-0x436a:kui4
-0x436b:tuo2
-0x436e:zhao4
-0x436f:gui3
-0x4371:xu2
-0x4372:nai2
-0x4373:chuo4
-0x4374:duo4
-0x4376:dong4
-0x4377:gui4
-0x4378:bo2
-0x437a:huan2
-0x437b:xuan3
-0x437c:can2
-0x437d:li4
-0x437e:tui2
-0x437f:huang2
-0x4380:xue4
-0x4381:hu2
-0x4382:bao3
-0x4383:ran3
-0x4384:tiao2
-0x4385:fu4
-0x4386:liao4
-0x4388:yi4
-0x4389:shu4
-0x438a:po4
-0x438b:he4
-0x438c:cu4
-0x438e:na4
-0x438f:an4
-0x4390:chao3
-0x4391:lu4
-0x4392:zhan3
-0x4393:ta4
-0x4397:qiao2
-0x4398:su4
-0x439a:guan4
-0x439d:chu2
-0x439f:er2
-0x43a0:er2
-0x43a1:nuan3
-0x43a2:qi3
-0x43a3:si4
-0x43a4:chu2
-0x43a6:yan3
-0x43a7:bang4
-0x43a8:an4
-0x43aa:ne4
-0x43ab:chuang4
-0x43ac:ba4
-0x43ae:ti4
-0x43af:han4
-0x43b0:zuo2
-0x43b1:ba4
-0x43b2:zhe2
-0x43b3:wa4
-0x43b4:sheng4
-0x43b5:bi4
-0x43b6:er4
-0x43b7:zhu4
-0x43b8:wu4
-0x43b9:wen2
-0x43ba:zhi3
-0x43bb:zhou3
-0x43bc:lu4
-0x43bd:wen2
-0x43be:gun3
-0x43bf:qiu2
-0x43c0:la4
-0x43c1:zai3
-0x43c2:sou3
-0x43c3:mian2
-0x43c4:zhi4
-0x43c5:qi4
-0x43c6:cao2
-0x43c7:piao4
-0x43c8:lian2
-0x43ca:long2
-0x43cb:su4
-0x43cc:qi4
-0x43cd:yuan4
-0x43ce:feng2
-0x43d0:jue2
-0x43d1:di4
-0x43d2:pian4
-0x43d3:guan3
-0x43d4:niu3
-0x43d5:ren3
-0x43d6:zhen4
-0x43d7:gai4
-0x43d8:pi3
-0x43d9:tan3
-0x43da:chao3
-0x43db:chun3
-0x43dd:chun2
-0x43de:mo4
-0x43df:bie4
-0x43e0:qi4
-0x43e1:shi4
-0x43e2:bi3
-0x43e3:jue2
-0x43e4:si4
-0x43e6:hua2
-0x43e7:na2
-0x43e8:hui3
-0x43ea:er4
-0x43ec:mou2
-0x43ee:xi2
-0x43ef:zhi4
-0x43f0:ren3
-0x43f1:ju2
-0x43f2:die2
-0x43f3:zhe4
-0x43f4:shao4
-0x43f5:meng3
-0x43f6:bi4
-0x43f7:han4
-0x43f8:yu2
-0x43f9:xian4
-0x43fb:neng2
-0x43fc:can2
-0x43fd:bu4
-0x43ff:qi3
-0x4400:ji4
-0x4401:niao3
-0x4402:lu4
-0x4403:jiong3
-0x4404:han4
-0x4405:yi2
-0x4406:cai3
-0x4407:chun2
-0x4408:zhi2
-0x4409:zi4
-0x440a:da2
-0x440c:tian3
-0x440d:zhou4
-0x440f:chun3
-0x4411:zhe2
-0x4413:rou2
-0x4414:bin4
-0x4415:ji2
-0x4416:yi2
-0x4417:du3
-0x4418:jue2
-0x4419:ge2
-0x441a:ji2
-0x441d:suo3
-0x441e:ruo4
-0x441f:xiang4
-0x4420:huang3
-0x4421:qi2
-0x4422:zhu4
-0x4423:cuo4
-0x4424:chi2
-0x4425:weng3
-0x4427:kao4
-0x4428:gu3
-0x4429:kai3
-0x442a:fan4
-0x442c:cao2
-0x442d:zhi4
-0x442e:chan3
-0x442f:lei2
-0x4432:zhe2
-0x4433:yu2
-0x4434:gui4
-0x4435:huang2
-0x4436:jin3
-0x4438:guo2
-0x4439:sao4
-0x443a:tan4
-0x443c:xi4
-0x443d:man2
-0x443e:duo2
-0x443f:ao2
-0x4440:pi4
-0x4441:wu4
-0x4442:ai3
-0x4443:meng2
-0x4444:pi4
-0x4445:meng2
-0x4446:yang3
-0x4447:zhi4
-0x4448:bo2
-0x4449:ying2
-0x444a:wei2
-0x444b:nao2
-0x444c:lan2
-0x444d:yan4
-0x444e:chan3
-0x444f:quan2
-0x4450:zhen3
-0x4451:pu2
-0x4453:tai2
-0x4454:fei4
-0x4455:shu3
-0x4457:dang4
-0x4458:cha2
-0x4459:ran2
-0x445a:tian2
-0x445b:chi3
-0x445c:ta4
-0x445d:jia3
-0x445e:shun4
-0x445f:huang2
-0x4460:liao3
-0x4464:jin4
-0x4465:e4
-0x4467:fu2
-0x4468:duo4
-0x446a:e4
-0x446c:yao4
-0x446d:di4
-0x446f:di4
-0x4470:bu4
-0x4471:man2
-0x4472:che4
-0x4473:lun2
-0x4474:qi2
-0x4475:mu4
-0x4476:can2
-0x447b:you2
-0x447d:da2
-0x447f:su4
-0x4480:fu2
-0x4481:ji4
-0x4482:jiang3
-0x4483:cao4
-0x4484:bo2
-0x4485:teng2
-0x4486:che4
-0x4487:fu4
-0x4488:bu3
-0x4489:wu3
-0x448b:yang3
-0x448c:ming4
-0x448d:pang3
-0x448e:mang3
-0x4490:meng2
-0x4491:cao3
-0x4492:tiao2
-0x4493:kai3
-0x4494:bai4
-0x4495:xiao3
-0x4496:xin4
-0x4497:qi4
-0x449a:shao3
-0x449b:heng2
-0x449c:niu2
-0x449d:xiao2
-0x449e:chen2
-0x44a0:fan3
-0x44a1:yin3
-0x44a2:ang2
-0x44a3:ran3
-0x44a4:ri4
-0x44a5:fa4
-0x44a6:fan4
-0x44a7:qu4
-0x44a8:shi3
-0x44a9:he2
-0x44aa:bian4
-0x44ab:dai4
-0x44ac:mo4
-0x44ad:deng3
-0x44b2:cha4
-0x44b3:duo3
-0x44b4:you3
-0x44b5:hao4
-0x44b8:xian2
-0x44b9:lei4
-0x44ba:jin3
-0x44bb:qi3
-0x44bd:mei2
-0x44c2:yan2
-0x44c3:yi4
-0x44c4:yin2
-0x44c5:qi2
-0x44c6:zhe2
-0x44c7:xi4
-0x44c8:yi4
-0x44c9:ye2
-0x44ca:e4
-0x44cc:zhi4
-0x44cd:han3
-0x44ce:chuo4
-0x44d0:chun2
-0x44d1:bing3
-0x44d2:kuai3
-0x44d3:chou2
-0x44d5:tuo3
-0x44d6:qiong2
-0x44d8:jiu4
-0x44da:cu2
-0x44db:fu3
-0x44dd:meng2
-0x44de:li4
-0x44df:lie4
-0x44e0:ta4
-0x44e2:gu4
-0x44e3:liang3
-0x44e5:la4
-0x44e6:dian3
-0x44e7:ci4
-0x44eb:ji4
-0x44ed:cha4
-0x44ee:mao4
-0x44ef:du2
-0x44f1:chai2
-0x44f2:rui4
-0x44f3:hen3
-0x44f4:ruan2
-0x44f6:lai4
-0x44f7:xing4
-0x44f9:yi4
-0x44fa:mei3
-0x44fc:he4
-0x44fd:ji4
-0x44ff:han3
-0x4501:li4
-0x4502:zi3
-0x4503:zu3
-0x4504:yao2
-0x4506:li2
-0x4507:qi3
-0x4508:gan3
-0x4509:li4
-0x450e:su4
-0x450f:chou4
-0x4511:xie2
-0x4512:bei4
-0x4513:xu3
-0x4514:jing4
-0x4515:pu2
-0x4516:ling2
-0x4517:xiang2
-0x4518:zuo4
-0x4519:diao4
-0x451a:chun2
-0x451b:qing3
-0x451c:nan2
-0x451e:lv4
-0x451f:chi2
-0x4520:shao3
-0x4521:yu2
-0x4522:hua2
-0x4523:li2
-0x4527:li2
-0x452a:dui4
-0x452c:yi4
-0x452d:ning4
-0x452f:hu2
-0x4530:fu2
-0x4532:cheng2
-0x4533:nan3
-0x4534:ce4
-0x4536:ti2
-0x4537:qin2
-0x4538:biao3
-0x4539:sui4
-0x453a:wei2
-0x453c:se4
-0x453d:ai4
-0x453e:e4
-0x453f:jie4
-0x4540:kuan3
-0x4541:fei3
-0x4543:yin4
-0x4545:sao3
-0x4546:dou4
-0x4547:hui4
-0x4548:xie4
-0x4549:ze2
-0x454a:tan2
-0x454b:chang3
-0x454c:zhi4
-0x454d:yi4
-0x454e:fu2
-0x454f:e2
-0x4551:jun4
-0x4553:cha2
-0x4554:xian2
-0x4555:man4
-0x4557:bi4
-0x4558:ling2
-0x4559:jie2
-0x455a:kui4
-0x455b:jia2
-0x455e:lang4
-0x4560:fei4
-0x4561:lu3
-0x4562:zha3
-0x4563:he2
-0x4565:ni3
-0x4566:ying2
-0x4567:xiao4
-0x4568:teng2
-0x4569:lao3
-0x456a:ze2
-0x456b:kui2
-0x456d:qian2
-0x456e:ju2
-0x456f:piao2
-0x4570:ban4
-0x4571:dou3
-0x4572:lin3
-0x4573:mi2
-0x4574:zhuo2
-0x4575:xie2
-0x4576:hu4
-0x4577:mi2
-0x4579:za2
-0x457a:cong2
-0x457b:ge2
-0x457c:nan2
-0x457d:zhu2
-0x457e:yan2
-0x457f:han4
-0x4581:yi4
-0x4582:luan2
-0x4583:yue4
-0x4584:ran2
-0x4585:ling2
-0x4586:niang4
-0x4587:yu4
-0x4588:nve4
-0x458a:yi2
-0x458b:nve4
-0x458c:qin2
-0x458d:qian2
-0x458e:xia2
-0x458f:chu3
-0x4590:jin4
-0x4591:mi4
-0x4593:na4
-0x4594:han4
-0x4595:zu3
-0x4596:xia2
-0x4597:yan2
-0x4598:tu2
-0x459b:suo3
-0x459c:yin2
-0x459d:chong2
-0x459e:zhou3
-0x459f:mang3
-0x45a0:yuan2
-0x45a1:nv4
-0x45a2:miao2
-0x45a3:sao4
-0x45a4:wan3
-0x45a5:li2
-0x45a7:na4
-0x45a8:shi2
-0x45a9:bi4
-0x45aa:ci2
-0x45ab:bang4
-0x45ad:juan4
-0x45ae:xiang3
-0x45af:gui4
-0x45b0:pai4
-0x45b2:xun2
-0x45b3:zha4
-0x45b4:yao2
-0x45b8:e2
-0x45b9:yang2
-0x45ba:tiao2
-0x45bb:you2
-0x45bc:jue2
-0x45bd:li2
-0x45bf:li2
-0x45c1:ji4
-0x45c2:hu3
-0x45c3:zhan4
-0x45c4:fu3
-0x45c5:chang2
-0x45c6:guan3
-0x45c7:ju2
-0x45c8:meng2
-0x45ca:cheng2
-0x45cb:mou2
-0x45cd:li3
-0x45d1:yi4
-0x45d2:bing4
-0x45d4:hou2
-0x45d5:wan3
-0x45d6:chi4
-0x45d8:ge2
-0x45d9:han2
-0x45da:bo2
-0x45dc:liu2
-0x45dd:can2
-0x45de:can2
-0x45df:yi4
-0x45e0:xuan2
-0x45e1:yan2
-0x45e2:suo3
-0x45e3:gao3
-0x45e4:yong2
-0x45e8:yu2
-0x45ea:zhe4
-0x45eb:ma2
-0x45ee:shuang3
-0x45ef:jin4
-0x45f0:guan4
-0x45f1:pu2
-0x45f2:lin4
-0x45f4:ting2
-0x45f6:la4
-0x45f7:yi4
-0x45f9:ci4
-0x45fa:yan3
-0x45fb:jie2
-0x45fd:wei4
-0x45fe:xian3
-0x45ff:ning2
-0x4600:fu4
-0x4601:ge2
-0x4603:mo4
-0x4604:fu4
-0x4605:nai2
-0x4606:xian3
-0x4607:wen2
-0x4608:li4
-0x4609:can2
-0x460a:mie4
-0x460c:ni4
-0x460d:chai4
-0x460f:xu4
-0x4610:nv4
-0x4611:mai4
-0x4613:kan4
-0x4615:hang2
-0x4618:yu4
-0x4619:wei4
-0x461a:zhu2
-0x461d:yi4
-0x4620:fu2
-0x4621:bi3
-0x4622:zhu3
-0x4623:zi3
-0x4624:shu4
-0x4625:xia2
-0x4626:ni2
-0x4628:jiao3
-0x4629:xuan4
-0x462b:nou4
-0x462c:rong2
-0x462d:die2
-0x462e:sa4
-0x4631:yu4
-0x4635:lu4
-0x4636:han4
-0x4638:yi4
-0x4639:zui4
-0x463a:zhan4
-0x463b:su4
-0x463c:wan3
-0x463d:ni2
-0x463e:guan3
-0x463f:jue2
-0x4640:beng3
-0x4641:can2
-0x4643:duo4
-0x4644:qi4
-0x4645:yao4
-0x4646:gui4
-0x4647:nuan3
-0x4648:hou2
-0x4649:xun2
-0x464a:xie4
-0x464c:hui4
-0x464e:xie2
-0x464f:bo2
-0x4650:ke4
-0x4652:xu4
-0x4653:bai3
-0x4655:chu4
-0x4657:ti4
-0x4658:chu3
-0x4659:chi2
-0x465a:niao3
-0x465b:guan4
-0x465c:feng2
-0x465d:xie4
-0x465f:duo4
-0x4660:jue2
-0x4661:hui4
-0x4662:zeng4
-0x4663:sa4
-0x4664:duo3
-0x4665:ling2
-0x4666:meng2
-0x4668:guo3
-0x4669:meng2
-0x466a:long2
-0x466c:ying4
-0x466e:guan4
-0x466f:cu4
-0x4670:li2
-0x4671:du2
-0x4673:e4
-0x4677:de2
-0x4678:de2
-0x4679:jiang3
-0x467a:lian2
-0x467c:shao4
-0x467d:xi4
-0x467f:wei4
-0x4682:he4
-0x4683:you2
-0x4684:lu4
-0x4685:lai2
-0x4686:ou3
-0x4687:sheng3
-0x4688:juan4
-0x4689:qi4
-0x468b:yun4
-0x468d:qi4
-0x468f:leng4
-0x4690:ji2
-0x4691:mai2
-0x4692:chuang2
-0x4693:nian3
-0x4695:li4
-0x4696:ling2
-0x4698:chen2
-0x469a:xian3
-0x469b:hu2
-0x469d:zu2
-0x469e:dai3
-0x469f:dai3
-0x46a0:hun4
-0x46a2:che4
-0x46a3:ti2
-0x46a5:nuo4
-0x46a6:zhi4
-0x46a7:liu2
-0x46a8:fei4
-0x46a9:jiao3
-0x46ab:ao2
-0x46ac:lin2
-0x46ae:reng2
-0x46af:tao3
-0x46b0:pi3
-0x46b1:xin4
-0x46b2:shan4
-0x46b3:xie4
-0x46b4:wa4
-0x46b5:tao3
-0x46b7:xi4
-0x46b8:xie4
-0x46b9:pi3
-0x46ba:yao2
-0x46bb:yao2
-0x46bc:nv4
-0x46bd:hao4
-0x46be:nin2
-0x46bf:yin4
-0x46c0:fan3
-0x46c1:nan2
-0x46c2:chi2
-0x46c3:wang4
-0x46c4:yuan3
-0x46c5:xia2
-0x46c6:zhou4
-0x46c7:yuan3
-0x46c8:shi4
-0x46c9:mi4
-0x46cb:ge2
-0x46cc:pao2
-0x46cd:fei4
-0x46ce:hu4
-0x46cf:ni2
-0x46d0:ci2
-0x46d1:mi4
-0x46d2:bian4
-0x46d4:na2
-0x46d5:yu4
-0x46d6:e4
-0x46d7:zhi3
-0x46d8:nin2
-0x46d9:xu4
-0x46da:lve4
-0x46db:hui4
-0x46dc:xun4
-0x46dd:nao2
-0x46de:han3
-0x46df:jia2
-0x46e0:dou4
-0x46e1:hua4
-0x46e4:cu4
-0x46e5:xi4
-0x46e6:song4
-0x46e7:mi2
-0x46e8:xin4
-0x46e9:wu4
-0x46ea:qiong2
-0x46eb:zheng4
-0x46ec:chou2
-0x46ed:xing4
-0x46ee:jiu4
-0x46ef:ju4
-0x46f0:hun2
-0x46f1:ti2
-0x46f2:man2
-0x46f3:jian3
-0x46f4:qi3
-0x46f5:shou4
-0x46f6:lei3
-0x46f7:wan3
-0x46f8:che4
-0x46f9:can4
-0x46fa:jie4
-0x46fb:you4
-0x46fc:hui3
-0x46fd:zha3
-0x46fe:su4
-0x46ff:ge2
-0x4700:nao3
-0x4701:xi4
-0x4704:chi2
-0x4705:wei2
-0x4706:mo4
-0x4707:gun3
-0x470a:zao4
-0x470b:hui4
-0x470c:luan2
-0x470d:liao2
-0x470e:lao2
-0x4711:qia4
-0x4712:ao4
-0x4713:nie4
-0x4714:sui2
-0x4715:mai4
-0x4716:tan4
-0x4717:xin4
-0x4718:jing3
-0x4719:an2
-0x471a:ta4
-0x471b:chan2
-0x471c:wei4
-0x471d:tuan3
-0x471e:ji4
-0x471f:chen2
-0x4720:che4
-0x4721:xu4
-0x4722:xian3
-0x4723:xin1
-0x4727:nao3
-0x4729:yan4
-0x472a:qiu2
-0x472b:hong2
-0x472c:song3
-0x472d:jun4
-0x472e:liao2
-0x472f:ju2
-0x4731:man3
-0x4732:lie4
-0x4734:chu4
-0x4735:chi3
-0x4736:xiang2
-0x4738:mei3
-0x4739:shu4
-0x473a:ce4
-0x473b:chi3
-0x473c:gu2
-0x473d:yu2
-0x4740:liao2
-0x4741:lao2
-0x4742:shu4
-0x4743:zhe2
-0x4748:e4
-0x474a:sha4
-0x474b:zong4
-0x474c:jue2
-0x474d:jun4
-0x474f:lou2
-0x4750:wei2
-0x4752:zhu4
-0x4753:la4
-0x4755:zhe2
-0x4756:zhao3
-0x4758:yi4
-0x475a:ni2
-0x475d:yi3
-0x475e:hao4
-0x475f:ya4
-0x4760:huan2
-0x4761:man4
-0x4762:man4
-0x4763:qu2
-0x4764:lao3
-0x4765:hao2
-0x4767:men2
-0x4768:xian2
-0x4769:zhen4
-0x476a:shu2
-0x476b:zuo2
-0x476c:zhu4
-0x476d:gou4
-0x476e:xuan4
-0x476f:yi4
-0x4770:ti2
-0x4772:jin4
-0x4773:can2
-0x4775:bu4
-0x4776:liang2
-0x4777:zhi4
-0x4778:ji4
-0x4779:wan3
-0x477a:guan4
-0x477c:qing2
-0x477d:ai4
-0x477e:fu4
-0x477f:gui4
-0x4780:gou4
-0x4781:xian4
-0x4782:ruan3
-0x4783:zhi4
-0x4784:biao4
-0x4785:yi2
-0x4786:suo3
-0x4787:die2
-0x4788:gui3
-0x4789:sheng4
-0x478a:xun4
-0x478b:chen4
-0x478c:she2
-0x478d:qing2
-0x4790:chun3
-0x4791:hong2
-0x4792:dong4
-0x4793:cheng1
-0x4794:wei3
-0x4795:die2
-0x4796:shu3
-0x4798:ji2
-0x4799:za2
-0x479a:qi2
-0x479c:fu4
-0x479d:ao3
-0x479e:fu2
-0x479f:po4
-0x47a1:tan3
-0x47a2:zha4
-0x47a3:che3
-0x47a4:qu2
-0x47a5:you4
-0x47a6:he2
-0x47a7:hou4
-0x47a8:gui3
-0x47a9:e4
-0x47aa:jiang4
-0x47ab:yun3
-0x47ac:tou4
-0x47ad:qiu3
-0x47af:fu4
-0x47b0:zuo2
-0x47b1:hu2
-0x47b3:bo2
-0x47b5:jue3
-0x47b6:di4
-0x47b7:jue2
-0x47b8:fu4
-0x47b9:huang2
-0x47bb:yong3
-0x47bc:chui3
-0x47bd:suo3
-0x47be:chi2
-0x47c2:man2
-0x47c3:ca4
-0x47c4:qi4
-0x47c5:jian4
-0x47c6:bi4
-0x47c8:zhi2
-0x47c9:zhu2
-0x47ca:qu2
-0x47cb:zhan3
-0x47cc:ji2
-0x47cd:dian2
-0x47cf:li4
-0x47d0:li4
-0x47d1:la3
-0x47d2:quan2
-0x47d4:fu4
-0x47d5:cha4
-0x47d6:tang4
-0x47d7:shi4
-0x47d8:hang4
-0x47d9:qie4
-0x47da:qi2
-0x47db:bo2
-0x47dc:na4
-0x47dd:tou4
-0x47de:chu2
-0x47df:cu4
-0x47e0:yue4
-0x47e1:di4
-0x47e2:chen2
-0x47e3:chu4
-0x47e4:bi4
-0x47e5:mang2
-0x47e6:ba2
-0x47e7:tian2
-0x47e8:min2
-0x47e9:lie3
-0x47ea:feng3
-0x47ec:qiu4
-0x47ed:tiao2
-0x47ee:fu2
-0x47ef:kuo4
-0x47f0:jian3
-0x47f4:zhen4
-0x47f5:qiu2
-0x47f6:cuo4
-0x47f7:chi4
-0x47f8:kui2
-0x47f9:lie4
-0x47fa:bang3
-0x47fb:du4
-0x47fc:wu3
-0x47fe:jue3
-0x47ff:lu4
-0x4800:chang3
-0x4802:chu2
-0x4803:liang3
-0x4804:tian3
-0x4805:kun3
-0x4806:chang2
-0x4807:jue2
-0x4808:tu2
-0x4809:hua4
-0x480a:fei4
-0x480b:bi3
-0x480d:qia2
-0x480e:wo4
-0x480f:ji4
-0x4810:qu4
-0x4811:kui3
-0x4812:hu2
-0x4813:cu4
-0x4814:sui4
-0x4817:qiu4
-0x4818:pi4
-0x4819:bei4
-0x481a:wa4
-0x481b:jiao3
-0x481c:rong2
-0x481e:cu4
-0x481f:die2
-0x4820:chi4
-0x4821:cuo2
-0x4822:meng4
-0x4823:xuan3
-0x4824:duo3
-0x4825:bie2
-0x4826:zhe4
-0x4827:chu2
-0x4828:chan4
-0x4829:gui4
-0x482a:duan4
-0x482b:zou4
-0x482c:deng4
-0x482d:lai2
-0x482e:teng2
-0x482f:yue4
-0x4830:quan2
-0x4831:shu3
-0x4832:ling2
-0x4834:qin3
-0x4835:fu4
-0x4836:she4
-0x4837:tiao3
-0x4839:ai2
-0x483b:qiong2
-0x483c:diao4
-0x483d:hai2
-0x483e:shan3
-0x483f:wai4
-0x4840:zhan3
-0x4841:long3
-0x4842:jiu4
-0x4843:li4
-0x4845:min3
-0x4846:rong2
-0x4847:yue4
-0x4848:jue2
-0x4849:kang3
-0x484a:fan2
-0x484b:qi2
-0x484c:hong2
-0x484d:fu2
-0x484e:lu2
-0x484f:hong2
-0x4850:tuo2
-0x4851:min2
-0x4852:tian2
-0x4853:juan4
-0x4854:qi3
-0x4855:zheng3
-0x4856:jing4
-0x4857:gong3
-0x4858:tian2
-0x4859:lang2
-0x485a:mao4
-0x485b:yin4
-0x485c:lu4
-0x485d:yun3
-0x485e:ju2
-0x485f:pi4
-0x4861:xie2
-0x4862:bian4
-0x4865:rong2
-0x4866:sang3
-0x4867:wu3
-0x4868:cha4
-0x4869:gu3
-0x486a:chan2
-0x486b:peng2
-0x486c:man4
-0x486f:shuang4
-0x4870:keng3
-0x4871:zhuan3
-0x4872:chan2
-0x4874:chuang2
-0x4875:sui4
-0x4876:bei4
-0x4877:kai4
-0x4879:zhi4
-0x487a:wei4
-0x487b:min2
-0x487c:ling2
-0x487e:nei4
-0x487f:ling2
-0x4880:qi4
-0x4881:yue4
-0x4883:yi4
-0x4884:xi3
-0x4885:chen2
-0x4887:rong3
-0x4888:chen2
-0x4889:nong2
-0x488a:you2
-0x488b:ji4
-0x488c:bo2
-0x488d:fang3
-0x4890:cu2
-0x4891:di3
-0x4893:yu2
-0x4894:ge2
-0x4895:xu4
-0x4896:lv4
-0x4897:he2
-0x4899:bai4
-0x489a:gong4
-0x489b:jiong3
-0x489d:ya4
-0x489e:nu4
-0x489f:you2
-0x48a0:song4
-0x48a1:xie4
-0x48a2:cang4
-0x48a3:yao2
-0x48a4:shu4
-0x48a5:yan2
-0x48a6:shuai4
-0x48a7:liao4
-0x48a9:yu4
-0x48aa:bo2
-0x48ab:sui2
-0x48ad:yan4
-0x48ae:lei4
-0x48af:lin2
-0x48b0:tai2
-0x48b1:du2
-0x48b2:yue4
-0x48b3:ji3
-0x48b5:yun2
-0x48b9:ju3
-0x48bb:chen2
-0x48bd:xiang4
-0x48be:xian3
-0x48c0:gui3
-0x48c1:yu3
-0x48c2:lei3
-0x48c4:tu2
-0x48c5:chen2
-0x48c6:xing2
-0x48c7:qiu2
-0x48c8:hang4
-0x48ca:dang3
-0x48cb:cai3
-0x48cc:di3
-0x48cd:yan3
-0x48d1:chan2
-0x48d3:li2
-0x48d4:suo3
-0x48d5:ma3
-0x48d6:ma3
-0x48d8:tang2
-0x48d9:pei2
-0x48da:lou2
-0x48dc:cuo2
-0x48dd:tu2
-0x48de:e4
-0x48df:can2
-0x48e0:jie2
-0x48e1:ti2
-0x48e2:ji2
-0x48e3:dang3
-0x48e4:jiao4
-0x48e5:bi3
-0x48e6:lei4
-0x48e7:yi4
-0x48e8:chun2
-0x48e9:chun2
-0x48ea:po4
-0x48eb:li2
-0x48ec:zai3
-0x48ed:tai4
-0x48ee:po4
-0x48ef:tian3
-0x48f0:ju4
-0x48f1:xu4
-0x48f2:fan4
-0x48f4:xu4
-0x48f5:er4
-0x48f6:huo2
-0x48f8:ran3
-0x48f9:fa2
-0x48fc:liang2
-0x48fd:ti3
-0x48fe:mi4
-0x4901:cen2
-0x4902:mei2
-0x4903:yin4
-0x4904:mian3
-0x4905:tu2
-0x4906:kui2
-0x4909:mi4
-0x490a:rong2
-0x490b:guo2
-0x490d:mi2
-0x490e:ju2
-0x490f:pi3
-0x4910:jin3
-0x4911:wang4
-0x4912:ji3
-0x4913:meng2
-0x4914:jian4
-0x4915:xue4
-0x4916:bao4
-0x4917:gan3
-0x4918:chan3
-0x4919:li4
-0x491a:li3
-0x491b:qiu2
-0x491c:dun4
-0x491d:ying4
-0x491e:yun3
-0x491f:chen2
-0x4920:ji1
-0x4921:ran3
-0x4923:lve4
-0x4925:gui3
-0x4926:yue4
-0x4927:hui4
-0x4928:pi4
-0x4929:cha2
-0x492a:duo3
-0x492b:chan2
-0x492d:kuan4
-0x492e:she4
-0x492f:xing2
-0x4930:weng3
-0x4931:shi4
-0x4932:chi4
-0x4933:ye4
-0x4934:han2
-0x4935:fei4
-0x4936:ye4
-0x4937:yan2
-0x4938:zuan4
-0x493a:yin3
-0x493b:duo4
-0x493c:xian4
-0x493f:qie4
-0x4940:chan3
-0x4941:han2
-0x4942:meng4
-0x4943:yue4
-0x4944:cu4
-0x4945:qian4
-0x4946:jin3
-0x4947:shan4
-0x4948:mu3
-0x494c:zheng4
-0x494d:zhi4
-0x494e:chun2
-0x494f:yu3
-0x4950:mou2
-0x4951:wan4
-0x4952:chou2
-0x4954:su4
-0x4955:pie3
-0x4956:tian2
-0x4957:kuan3
-0x4958:cu4
-0x4959:sui4
-0x495b:jie2
-0x495c:jian4
-0x495d:ao2
-0x495e:jiao3
-0x495f:ye4
-0x4961:ye4
-0x4962:long2
-0x4963:zao2
-0x4964:bao2
-0x4965:lian2
-0x4967:huan2
-0x4968:lv4
-0x4969:wei2
-0x496a:xian3
-0x496b:tie3
-0x496c:bo2
-0x496d:zheng4
-0x496e:zhu2
-0x496f:ba4
-0x4970:meng4
-0x4971:xie3
-0x4975:xiao3
-0x4976:li4
-0x4977:zha2
-0x4978:mi2
-0x497a:ye2
-0x497e:xie3
-0x4982:shan4
-0x4985:shan4
-0x4986:jue2
-0x4987:ji4
-0x4988:fang3
-0x498a:niao3
-0x498b:ao2
-0x498c:chu4
-0x498d:wu4
-0x498e:guan3
-0x498f:xie4
-0x4990:ting3
-0x4991:xie4
-0x4992:dang4
-0x4994:tan3
-0x4996:xia2
-0x4997:xu4
-0x4998:bi4
-0x4999:si4
-0x499a:huo4
-0x499b:zheng4
-0x499c:wu2
-0x499e:run4
-0x499f:chuai4
-0x49a0:shi3
-0x49a1:huan2
-0x49a2:kuo4
-0x49a3:fu4
-0x49a4:chuai4
-0x49a5:xian2
-0x49a6:qin2
-0x49a7:qie2
-0x49a8:lan2
-0x49aa:ya4
-0x49ac:que4
-0x49ae:chun3
-0x49af:zhi4
-0x49b1:kui3
-0x49b2:qian4
-0x49b3:hang4
-0x49b4:yi4
-0x49b5:ni3
-0x49b6:zheng4
-0x49b7:chuai4
-0x49b9:shi2
-0x49bb:ci4
-0x49bc:jue2
-0x49bd:xu4
-0x49be:yun3
-0x49c1:chu4
-0x49c2:dao4
-0x49c3:dian4
-0x49c4:ge4
-0x49c5:ti4
-0x49c6:hong2
-0x49c7:ni3
-0x49c9:li3
-0x49cb:xian3
-0x49cd:xi4
-0x49ce:xuan4
-0x49d2:lai2
-0x49d4:mu4
-0x49d5:cheng2
-0x49d6:jian4
-0x49d7:bi4
-0x49d8:qi2
-0x49d9:ling2
-0x49da:hao4
-0x49db:bang4
-0x49dc:tang2
-0x49dd:di4
-0x49de:fu4
-0x49df:xian4
-0x49e0:shuan4
-0x49e4:pu2
-0x49e5:hui4
-0x49e6:wei2
-0x49e7:yi3
-0x49e8:ye4
-0x49ea:che4
-0x49eb:hao2
-0x49ee:xian3
-0x49ef:chan2
-0x49f0:hun4
-0x49f2:han4
-0x49f3:ci2
-0x49f5:qi2
-0x49f6:kui2
-0x49f7:rou2
-0x49fa:xiong2
-0x49fc:hu2
-0x49fd:cui3
-0x49ff:que4
-0x4a00:di2
-0x4a01:che4
-0x4a04:yan4
-0x4a05:liao2
-0x4a06:bi2
-0x4a0b:nve4
-0x4a0c:bao2
-0x4a0d:ying3
-0x4a0e:hong2
-0x4a0f:ci2
-0x4a10:qia4
-0x4a11:ti2
-0x4a12:yu4
-0x4a13:lei2
-0x4a14:bao2
-0x4a16:ji4
-0x4a17:fu2
-0x4a18:xian4
-0x4a19:cen2
-0x4a1b:se4
-0x4a1e:yu3
-0x4a20:ai3
-0x4a21:han2
-0x4a22:dan4
-0x4a23:ge2
-0x4a24:di2
-0x4a25:hu4
-0x4a26:pang2
-0x4a29:ling2
-0x4a2a:mai2
-0x4a2b:mai4
-0x4a2c:lian2
-0x4a2e:xue3
-0x4a2f:zhen4
-0x4a30:po4
-0x4a31:fu4
-0x4a32:nou2
-0x4a33:xi4
-0x4a34:dui4
-0x4a35:dan4
-0x4a36:yun3
-0x4a37:xian4
-0x4a38:yin3
-0x4a3a:dui4
-0x4a3b:beng4
-0x4a3c:hu4
-0x4a3d:fei3
-0x4a3e:fei3
-0x4a3f:qian2
-0x4a40:bei4
-0x4a43:shi4
-0x4a44:tian3
-0x4a45:zhan3
-0x4a46:jian3
-0x4a48:hui4
-0x4a49:fu3
-0x4a4a:wan3
-0x4a4b:mo3
-0x4a4c:qiao2
-0x4a4d:liao3
-0x4a4f:mie4
-0x4a50:ge2
-0x4a51:hong2
-0x4a52:yu2
-0x4a53:qi2
-0x4a54:duo4
-0x4a55:ang2
-0x4a57:ba4
-0x4a58:di4
-0x4a59:xuan4
-0x4a5a:di4
-0x4a5b:bi4
-0x4a5c:zhou4
-0x4a5d:pao2
-0x4a5e:nian2
-0x4a5f:yi2
-0x4a61:jia2
-0x4a62:da2
-0x4a63:duo3
-0x4a64:xi4
-0x4a65:dan4
-0x4a66:tiao2
-0x4a67:xie4
-0x4a68:chang4
-0x4a69:yuan3
-0x4a6a:guan3
-0x4a6b:liang3
-0x4a6c:beng3
-0x4a6e:lu4
-0x4a6f:ji2
-0x4a70:xuan4
-0x4a71:shu4
-0x4a73:shu3
-0x4a74:hu2
-0x4a75:yun4
-0x4a76:chan3
-0x4a78:rong2
-0x4a79:e2
-0x4a7b:ba4
-0x4a7c:feng2
-0x4a7e:zhe4
-0x4a7f:fen2
-0x4a80:guan3
-0x4a81:bu3
-0x4a82:ge2
-0x4a84:huang2
-0x4a85:du2
-0x4a86:ti3
-0x4a87:bo2
-0x4a88:qian3
-0x4a89:la4
-0x4a8a:long2
-0x4a8b:wei4
-0x4a8c:zhan4
-0x4a8d:lan2
-0x4a8f:na4
-0x4a90:bi4
-0x4a91:tuo2
-0x4a92:jiao4
-0x4a94:bu3
-0x4a95:ju2
-0x4a96:po4
-0x4a97:xia2
-0x4a98:wei3
-0x4a99:fu2
-0x4a9a:he4
-0x4a9b:fan2
-0x4a9c:chan4
-0x4a9d:hu4
-0x4a9e:za2
-0x4aa4:fan2
-0x4aa5:die2
-0x4aa6:hong2
-0x4aa7:chi2
-0x4aa8:bao2
-0x4aa9:yin2
-0x4aac:bo2
-0x4aad:ruan3
-0x4aae:chou3
-0x4aaf:ying2
-0x4ab1:gai3
-0x4ab3:yun3
-0x4ab4:zhen3
-0x4ab5:ya3
-0x4ab7:hou4
-0x4ab8:min2
-0x4ab9:pei2
-0x4aba:ge2
-0x4abb:bian4
-0x4abd:hao4
-0x4abe:mi2
-0x4abf:sheng3
-0x4ac0:gen3
-0x4ac1:bi4
-0x4ac2:duo3
-0x4ac3:chun2
-0x4ac4:chua4
-0x4ac5:san4
-0x4ac6:cheng2
-0x4ac7:ran2
-0x4ac8:zen4
-0x4ac9:mao4
-0x4aca:bo2
-0x4acb:tui2
-0x4acc:pi3
-0x4acd:fu3
-0x4ad0:lin2
-0x4ad2:men2
-0x4ad3:wu2
-0x4ad4:qi4
-0x4ad5:zhi4
-0x4ad6:chen3
-0x4ad7:xia2
-0x4ad8:he2
-0x4ad9:sang3
-0x4adb:hou2
-0x4add:fu3
-0x4ade:rao2
-0x4adf:hun2
-0x4ae0:pei2
-0x4ae1:qian4
-0x4ae3:xi2
-0x4ae4:ming2
-0x4ae5:kui3
-0x4ae6:ge2
-0x4ae8:ao4
-0x4ae9:san3
-0x4aea:shuang3
-0x4aeb:lou2
-0x4aec:zhen3
-0x4aed:hui4
-0x4aee:can2
-0x4af0:lin4
-0x4af1:na2
-0x4af2:han4
-0x4af3:du2
-0x4af4:jin4
-0x4af5:mian2
-0x4af6:fan2
-0x4af7:e4
-0x4af8:nao2
-0x4af9:hong2
-0x4afa:hong2
-0x4afb:xue2
-0x4afc:xue4
-0x4afe:bi4
-0x4b00:you3
-0x4b01:yi2
-0x4b02:xue4
-0x4b03:sa4
-0x4b04:yu4
-0x4b05:li4
-0x4b06:li4
-0x4b07:yuan4
-0x4b08:dui4
-0x4b09:hao4
-0x4b0a:qie4
-0x4b0b:leng2
-0x4b0e:guo2
-0x4b0f:bu4
-0x4b10:wei3
-0x4b11:wei4
-0x4b13:an4
-0x4b14:xu4
-0x4b15:shang3
-0x4b16:heng2
-0x4b17:yang2
-0x4b19:yao2
-0x4b1b:bi4
-0x4b1d:heng2
-0x4b1e:tao2
-0x4b1f:liu2
-0x4b21:zhu4
-0x4b23:qi4
-0x4b24:chao2
-0x4b25:yi4
-0x4b26:dou4
-0x4b27:yuan2
-0x4b28:cu4
-0x4b2a:bo2
-0x4b2b:can3
-0x4b2c:yang3
-0x4b2e:yi2
-0x4b2f:nian2
-0x4b30:shao4
-0x4b31:ben4
-0x4b33:ban3
-0x4b34:mo4
-0x4b35:ai4
-0x4b36:en4
-0x4b37:she3
-0x4b39:zhi4
-0x4b3a:yang4
-0x4b3b:jian4
-0x4b3c:yuan4
-0x4b3d:dui4
-0x4b3e:ti2
-0x4b3f:wei3
-0x4b40:xun4
-0x4b41:zhi4
-0x4b42:yi4
-0x4b43:ren3
-0x4b44:shi4
-0x4b45:hu2
-0x4b46:ne4
-0x4b47:yi4
-0x4b48:jian4
-0x4b49:sui3
-0x4b4a:ying3
-0x4b4b:bao3
-0x4b4c:hu2
-0x4b4d:hu2
-0x4b4e:xie2
-0x4b50:yang4
-0x4b51:lian2
-0x4b53:en4
-0x4b55:jian4
-0x4b56:zhu4
-0x4b57:ying3
-0x4b58:yan4
-0x4b59:jin3
-0x4b5a:chuang2
-0x4b5b:dan4
-0x4b5d:kuai4
-0x4b5e:yi4
-0x4b5f:ye4
-0x4b60:jian3
-0x4b61:en4
-0x4b62:ning2
-0x4b63:ci2
-0x4b64:qian3
-0x4b65:xue4
-0x4b66:bo2
-0x4b67:mi3
-0x4b68:shui4
-0x4b69:mi4
-0x4b6a:liang2
-0x4b6b:qi3
-0x4b6c:qi3
-0x4b6d:shou3
-0x4b6e:bi4
-0x4b6f:bo2
-0x4b70:beng3
-0x4b71:bie2
-0x4b72:ni3
-0x4b73:wei4
-0x4b74:huan2
-0x4b75:fan2
-0x4b76:qi2
-0x4b77:liu2
-0x4b78:fu4
-0x4b79:ang2
-0x4b7a:ang2
-0x4b7c:qi2
-0x4b7d:qun2
-0x4b7e:tuo2
-0x4b7f:yi4
-0x4b80:bo2
-0x4b81:pian2
-0x4b82:bo2
-0x4b84:xuan2
-0x4b87:yu4
-0x4b88:chi2
-0x4b89:lu2
-0x4b8a:yi2
-0x4b8b:li4
-0x4b8d:niao3
-0x4b8e:xi4
-0x4b8f:wu2
-0x4b91:lei4
-0x4b93:zhao4
-0x4b94:zui3
-0x4b95:chuo4
-0x4b97:an4
-0x4b98:er2
-0x4b99:yu4
-0x4b9a:leng4
-0x4b9b:fu4
-0x4b9c:sha4
-0x4b9d:huan2
-0x4b9e:chu4
-0x4b9f:sou3
-0x4ba1:bi4
-0x4ba2:die2
-0x4ba4:di2
-0x4ba5:li4
-0x4ba7:han2
-0x4ba8:zai3
-0x4ba9:gu2
-0x4baa:cheng2
-0x4bab:lou2
-0x4bac:mo4
-0x4bad:mi4
-0x4bae:mai4
-0x4baf:ao4
-0x4bb0:dan3
-0x4bb1:zhu2
-0x4bb2:huang2
-0x4bb3:fan2
-0x4bb4:deng4
-0x4bb5:tong2
-0x4bb7:du2
-0x4bb8:hu2
-0x4bb9:wei4
-0x4bba:ji4
-0x4bbb:chi4
-0x4bbc:lin2
-0x4bbe:pang2
-0x4bbf:jian3
-0x4bc0:nie4
-0x4bc1:luo2
-0x4bc2:ji2
-0x4bc5:nie4
-0x4bc6:yi4
-0x4bc8:wan2
-0x4bc9:ya4
-0x4bca:qia4
-0x4bcb:bo2
-0x4bcd:ling2
-0x4bce:gan4
-0x4bcf:huo2
-0x4bd0:hai2
-0x4bd2:heng2
-0x4bd3:kui2
-0x4bd4:cen2
-0x4bd6:lang2
-0x4bd7:bi4
-0x4bd8:huan4
-0x4bd9:po4
-0x4bda:ou3
-0x4bdb:jian3
-0x4bdc:ti4
-0x4bdd:sui3
-0x4bdf:dui4
-0x4be0:ao3
-0x4be1:jian3
-0x4be2:mo2
-0x4be3:gui4
-0x4be4:kuai4
-0x4be5:an4
-0x4be6:ma4
-0x4be7:qing3
-0x4be8:fen2
-0x4bea:kao3
-0x4beb:hao4
-0x4bec:duo3
-0x4bee:nai2
-0x4bf0:jie4
-0x4bf1:fu4
-0x4bf2:pa2
-0x4bf4:chang2
-0x4bf5:nie4
-0x4bf6:man2
-0x4bf8:ci4
-0x4bfa:kuo4
-0x4bfc:di2
-0x4bfd:fu3
-0x4bfe:tiao2
-0x4bff:zu2
-0x4c00:wo3
-0x4c01:fei4
-0x4c02:cai4
-0x4c03:peng2
-0x4c04:shi4
-0x4c06:rou2
-0x4c07:qi2
-0x4c08:cha3
-0x4c09:pan2
-0x4c0a:bo2
-0x4c0b:man2
-0x4c0c:zong3
-0x4c0d:ci4
-0x4c0e:gui4
-0x4c0f:ji4
-0x4c10:lan2
-0x4c12:meng2
-0x4c13:mian2
-0x4c14:pan2
-0x4c15:lu2
-0x4c16:cuan2
-0x4c18:liu2
-0x4c19:yi3
-0x4c1a:wen2
-0x4c1b:li4
-0x4c1c:li4
-0x4c1d:zeng4
-0x4c1e:zhu3
-0x4c1f:hun2
-0x4c20:shen2
-0x4c21:chi4
-0x4c22:xing4
-0x4c23:wang3
-0x4c25:huo4
-0x4c26:pi3
-0x4c28:mei4
-0x4c29:che3
-0x4c2a:mei4
-0x4c2b:chao2
-0x4c2c:ju2
-0x4c2d:nou4
-0x4c2f:ni3
-0x4c30:ru2
-0x4c31:ling2
-0x4c32:ya4
-0x4c34:qi4
-0x4c37:bang4
-0x4c39:ze2
-0x4c3a:jie4
-0x4c3b:yu2
-0x4c3c:xin2
-0x4c3d:bei4
-0x4c3e:ba4
-0x4c3f:tuo2
-0x4c41:qiao2
-0x4c42:you3
-0x4c43:di3
-0x4c44:jie4
-0x4c45:mo4
-0x4c46:sheng2
-0x4c47:shan4
-0x4c48:qi2
-0x4c49:shan4
-0x4c4a:mi3
-0x4c4b:dan3
-0x4c4c:yi2
-0x4c4d:geng4
-0x4c4e:geng4
-0x4c4f:tou3
-0x4c51:xue2
-0x4c52:yi4
-0x4c53:ting2
-0x4c54:tiao2
-0x4c55:mou2
-0x4c56:liu2
-0x4c58:li2
-0x4c5a:lu4
-0x4c5b:xu4
-0x4c5c:cuo4
-0x4c5d:ba4
-0x4c5e:liu2
-0x4c5f:ju4
-0x4c60:zhan4
-0x4c61:ju2
-0x4c63:zu2
-0x4c64:xian4
-0x4c65:zhi2
-0x4c68:zhi4
-0x4c6b:la4
-0x4c6d:geng4
-0x4c6e:e2
-0x4c6f:mu2
-0x4c70:zhong4
-0x4c71:di4
-0x4c72:yan2
-0x4c74:geng4
-0x4c76:lang2
-0x4c77:yu2
-0x4c79:na4
-0x4c7a:hai2
-0x4c7b:hua2
-0x4c7c:zhan3
-0x4c7e:lou2
-0x4c7f:chan4
-0x4c80:die2
-0x4c81:wei4
-0x4c82:xuan2
-0x4c83:zao3
-0x4c84:min2
-0x4c8a:tuo3
-0x4c8b:cen2
-0x4c8c:kuan3
-0x4c8d:teng2
-0x4c8e:nei3
-0x4c8f:lao2
-0x4c90:lu3
-0x4c91:yi2
-0x4c92:xie4
-0x4c93:yan3
-0x4c94:qing2
-0x4c95:pu3
-0x4c96:chou2
-0x4c97:xian2
-0x4c98:guan3
-0x4c99:jie2
-0x4c9a:lai4
-0x4c9b:meng2
-0x4c9c:ye4
-0x4c9e:li4
-0x4c9f:yin4
-0x4ca2:teng2
-0x4ca3:yu2
-0x4ca6:cha2
-0x4ca7:du4
-0x4ca8:hong2
-0x4caa:xi4
-0x4cac:qi2
-0x4cae:yuan2
-0x4caf:ji2
-0x4cb0:yun4
-0x4cb1:fang3
-0x4cb3:hang2
-0x4cb4:zhen4
-0x4cb5:hu4
-0x4cb8:jie4
-0x4cb9:pei2
-0x4cba:gan4
-0x4cbb:xuan2
-0x4cbd:dao3
-0x4cbe:qiao3
-0x4cbf:ci2
-0x4cc0:die2
-0x4cc1:ba2
-0x4cc2:tiao2
-0x4cc3:wan3
-0x4cc4:ci2
-0x4cc5:zhi3
-0x4cc6:bai2
-0x4cc7:wu3
-0x4cc8:bao3
-0x4cc9:dan4
-0x4cca:ba2
-0x4ccb:tong2
-0x4cce:jiu4
-0x4ccf:gui4
-0x4cd0:ci4
-0x4cd1:you3
-0x4cd2:yuan2
-0x4cd3:lao3
-0x4cd4:jiu4
-0x4cd5:fou2
-0x4cd6:nei4
-0x4cd7:e2
-0x4cd8:e2
-0x4cd9:xing3
-0x4cda:he2
-0x4cdb:yan4
-0x4cdc:tu2
-0x4cdd:bu4
-0x4cde:beng3
-0x4cdf:kou4
-0x4ce0:chui2
-0x4ce2:qi2
-0x4ce3:yuan2
-0x4ce7:hou2
-0x4ce8:huang2
-0x4cea:juan4
-0x4ceb:kui2
-0x4cec:e4
-0x4ced:ji2
-0x4cee:mo4
-0x4cef:chong2
-0x4cf0:bao3
-0x4cf1:wu4
-0x4cf2:zhen4
-0x4cf3:xu4
-0x4cf4:da2
-0x4cf5:chi4
-0x4cf7:cong2
-0x4cf8:ma2
-0x4cf9:kou4
-0x4cfa:yan4
-0x4cfb:can2
-0x4cfd:he4
-0x4cff:lan2
-0x4d00:tong2
-0x4d01:yu4
-0x4d02:hang4
-0x4d03:nao2
-0x4d04:li4
-0x4d05:fen2
-0x4d06:pu2
-0x4d07:ling2
-0x4d08:ao3
-0x4d09:xuan2
-0x4d0a:yi2
-0x4d0b:xuan2
-0x4d0c:meng2
-0x4d0e:lei3
-0x4d0f:yan4
-0x4d10:bao3
-0x4d11:die2
-0x4d12:ling2
-0x4d13:shi1
-0x4d14:jiao1
-0x4d15:lie4
-0x4d16:jing1
-0x4d17:ju2
-0x4d18:ti1
-0x4d19:pi4
-0x4d1a:gang3
-0x4d1b:jiao3
-0x4d1c:huai2
-0x4d1d:bu4
-0x4d1e:di2
-0x4d1f:huan2
-0x4d20:yao3
-0x4d21:li4
-0x4d22:mi2
-0x4d26:ren2
-0x4d29:piao2
-0x4d2a:lu4
-0x4d2b:ling2
-0x4d2c:yi4
-0x4d2d:cai2
-0x4d2e:shan4
-0x4d30:shu2
-0x4d31:tuo2
-0x4d32:mo4
-0x4d33:he4
-0x4d34:tie4
-0x4d35:bing3
-0x4d36:peng2
-0x4d37:hun2
-0x4d39:guo3
-0x4d3a:bu4
-0x4d3b:li2
-0x4d3c:chan3
-0x4d3d:bai4
-0x4d3e:cuo2
-0x4d3f:meng2
-0x4d40:suo3
-0x4d41:qiang4
-0x4d42:zhi2
-0x4d43:kuang4
-0x4d44:bi2
-0x4d45:ao2
-0x4d46:meng2
-0x4d47:xian4
-0x4d49:tou2
-0x4d4b:wei3
-0x4d4f:lao3
-0x4d50:chan3
-0x4d51:ni4
-0x4d52:ni4
-0x4d53:li2
-0x4d54:dong3
-0x4d55:ju4
-0x4d56:jian4
-0x4d57:fu2
-0x4d58:sha4
-0x4d59:zha3
-0x4d5a:tao3
-0x4d5b:jian4
-0x4d5c:nong3
-0x4d5d:ya4
-0x4d5e:jing4
-0x4d5f:gan3
-0x4d60:di2
-0x4d61:jian3
-0x4d62:mei4
-0x4d63:da2
-0x4d64:jian3
-0x4d65:she4
-0x4d66:xie4
-0x4d67:zai4
-0x4d68:mang2
-0x4d69:li2
-0x4d6a:gun4
-0x4d6b:yu4
-0x4d6c:ta4
-0x4d6d:zhe4
-0x4d6e:yang4
-0x4d6f:tuan3
-0x4d71:he4
-0x4d72:diao4
-0x4d73:wei4
-0x4d74:yun4
-0x4d75:zha2
-0x4d76:qu2
-0x4d7a:ting3
-0x4d7b:gu3
-0x4d7d:ca4
-0x4d7e:fu2
-0x4d7f:tie4
-0x4d80:ta4
-0x4d81:ta4
-0x4d82:zhuo2
-0x4d83:han2
-0x4d84:ping2
-0x4d85:he2
-0x4d87:zhou4
-0x4d88:bo2
-0x4d89:liu2
-0x4d8a:nv4
-0x4d8c:pao4
-0x4d8d:di4
-0x4d8e:sha4
-0x4d8f:ti3
-0x4d90:kuai4
-0x4d91:ti4
-0x4d92:qi2
-0x4d93:ji4
-0x4d94:chi2
-0x4d95:pa2
-0x4d96:jin4
-0x4d97:ke4
-0x4d98:li4
-0x4d99:ju4
-0x4d9a:qu3
-0x4d9b:la4
-0x4d9c:gu4
-0x4d9d:qia4
-0x4d9e:qi2
-0x4d9f:xian4
-0x4da0:jian3
-0x4da1:shi2
-0x4da2:xian2
-0x4da3:ai2
-0x4da4:hua2
-0x4da5:ju3
-0x4da6:ze2
-0x4da7:yao3
-0x4da9:ji4
-0x4daa:cha2
-0x4dab:kan3
-0x4dae:yan2
-0x4db1:tong2
-0x4db2:nan2
-0x4db3:yue4
-0x4db5:chi2
-0x4e00:yi1
-0x4e01:ding1
-0x4e02:kao3
-0x4e03:qi1
-0x4e04:shang4
-0x4e05:xia4
-0x4e07:wan4
-0x4e08:zhang4
-0x4e09:san1
-0x4e0a:shang4
-0x4e0b:xia4
-0x4e0c:ji1
-0x4e0d:bu4
-0x4e0e:yu3
-0x4e0f:mian3
-0x4e10:gai4
-0x4e11:chou3
-0x4e12:chou3
-0x4e13:zhuan1
-0x4e14:qie3
-0x4e15:pi1
-0x4e16:shi4
-0x4e17:shi4
-0x4e18:qiu1
-0x4e19:bing3
-0x4e1a:ye4
-0x4e1b:cong2
-0x4e1c:dong1
-0x4e1d:si1
-0x4e1e:cheng2
-0x4e1f:diu1
-0x4e20:qiu1
-0x4e21:liang3
-0x4e22:diu1
-0x4e23:you3
-0x4e24:liang3
-0x4e25:yan2
-0x4e26:bing4
-0x4e27:sang1
-0x4e28:gun3
-0x4e29:jiu1
-0x4e2a:ge4
-0x4e2b:ya1
-0x4e2c:qiang2
-0x4e2d:zhong1
-0x4e2e:ji3
-0x4e2f:jie4
-0x4e30:feng1
-0x4e31:guan4
-0x4e32:chuan4
-0x4e33:chan3
-0x4e34:lin2
-0x4e35:zhuo3
-0x4e36:zhu3
-0x4e38:wan2
-0x4e39:dan1
-0x4e3a:wei4
-0x4e3b:zhu3
-0x4e3c:jing3
-0x4e3d:li4
-0x4e3e:ju3
-0x4e3f:pie3
-0x4e40:fu2
-0x4e41:yi2
-0x4e42:yi4
-0x4e43:nai3
-0x4e45:jiu3
-0x4e46:jiu3
-0x4e47:zhe2
-0x4e48:yao1
-0x4e49:yi4
-0x4e4b:zhi1
-0x4e4c:wu1
-0x4e4d:zha4
-0x4e4e:hu1
-0x4e4f:fa2
-0x4e50:le4
-0x4e51:zhong4
-0x4e52:ping1
-0x4e53:pang1
-0x4e54:qiao2
-0x4e55:hu3
-0x4e56:guai1
-0x4e57:cheng2
-0x4e58:cheng2
-0x4e59:yi3
-0x4e5a:yin3
-0x4e5c:mie1
-0x4e5d:jiu3
-0x4e5e:qi3
-0x4e5f:ye3
-0x4e60:xi2
-0x4e61:xiang1
-0x4e62:gai4
-0x4e63:jiu3
-0x4e66:shu1
-0x4e68:shi3
-0x4e69:ji1
-0x4e6a:nang2
-0x4e6b:jia1
-0x4e6d:shi2
-0x4e70:mai3
-0x4e71:luan4
-0x4e73:ru3
-0x4e74:xue2
-0x4e75:yan3
-0x4e76:fu3
-0x4e77:sha1
-0x4e78:na3
-0x4e79:gan1
-0x4e7e:gan1
-0x4e7f:chi4
-0x4e80:gui1
-0x4e81:gan1
-0x4e82:luan4
-0x4e83:lin2
-0x4e84:yi4
-0x4e85:jue2
-0x4e86:le5
-0x4e88:yu2
-0x4e89:zheng1
-0x4e8a:shi4
-0x4e8b:shi4
-0x4e8c:er4
-0x4e8d:chu4
-0x4e8e:yu2
-0x4e8f:yu2
-0x4e90:yu2
-0x4e91:yun2
-0x4e92:hu4
-0x4e93:qi2
-0x4e94:wu3
-0x4e95:jing3
-0x4e96:si4
-0x4e97:sui4
-0x4e98:gen4
-0x4e99:gen4
-0x4e9a:ya4
-0x4e9b:xie1
-0x4e9c:ya4
-0x4e9d:qi2
-0x4e9e:ya4
-0x4e9f:ji2
-0x4ea0:tou2
-0x4ea1:wang2
-0x4ea2:kang4
-0x4ea3:ta4
-0x4ea4:jiao1
-0x4ea5:hai4
-0x4ea6:yi4
-0x4ea7:chan3
-0x4ea8:heng1
-0x4ea9:mu3
-0x4eab:xiang3
-0x4eac:jing1
-0x4ead:ting2
-0x4eae:liang4
-0x4eaf:xiang3
-0x4eb0:jing1
-0x4eb1:ye4
-0x4eb2:qin1
-0x4eb3:bo2
-0x4eb4:you4
-0x4eb5:xie4
-0x4eb6:dan3
-0x4eb7:lian2
-0x4eb8:duo3
-0x4eb9:wei3
-0x4eba:ren2
-0x4ebb:ren2
-0x4ebc:ji2
-0x4ebe:wang2
-0x4ebf:yi4
-0x4ec0:shi2
-0x4ec1:ren2
-0x4ec2:le4
-0x4ec3:ding1
-0x4ec4:ze4
-0x4ec5:jin3
-0x4ec6:pu1
-0x4ec7:chou2
-0x4ec8:ba1
-0x4ec9:zhang3
-0x4eca:jin1
-0x4ecb:jie4
-0x4ecc:bing1
-0x4ecd:reng2
-0x4ece:cong2
-0x4ecf:fo2
-0x4ed0:san3
-0x4ed1:lun2
-0x4ed3:cang1
-0x4ed4:zi3
-0x4ed5:shi4
-0x4ed6:ta1
-0x4ed7:zhang4
-0x4ed8:fu4
-0x4ed9:xian1
-0x4eda:xian1
-0x4edb:tuo1
-0x4edc:hong2
-0x4edd:tong2
-0x4ede:ren4
-0x4edf:qian1
-0x4ee0:gan2
-0x4ee1:yi4
-0x4ee2:di2
-0x4ee3:dai4
-0x4ee4:ling4
-0x4ee5:yi3
-0x4ee6:chao4
-0x4ee7:chang2
-0x4ee8:sa1
-0x4eea:yi2
-0x4eeb:mu4
-0x4eec:men5
-0x4eed:ren4
-0x4eee:jia3
-0x4eef:chao4
-0x4ef0:yang3
-0x4ef1:qian2
-0x4ef2:zhong4
-0x4ef3:pi3
-0x4ef4:wan4
-0x4ef5:wu3
-0x4ef6:jian4
-0x4ef7:jia4
-0x4ef8:yao3
-0x4ef9:feng1
-0x4efa:cang1
-0x4efb:ren4
-0x4efc:wang2
-0x4efd:fen4
-0x4efe:di1
-0x4eff:fang3
-0x4f00:zhong1
-0x4f01:qi3
-0x4f02:pei4
-0x4f03:yu2
-0x4f04:diao4
-0x4f05:dun4
-0x4f06:wen4
-0x4f07:yi4
-0x4f08:xin3
-0x4f09:kang4
-0x4f0a:yi1
-0x4f0b:ji2
-0x4f0c:ai4
-0x4f0d:wu3
-0x4f0e:ji4
-0x4f0f:fu2
-0x4f10:fa2
-0x4f11:xiu1
-0x4f12:jin4
-0x4f13:bei1
-0x4f14:dan3
-0x4f15:fu1
-0x4f16:tang3
-0x4f17:zhong4
-0x4f18:you1
-0x4f19:huo3
-0x4f1a:hui4
-0x4f1b:yu3
-0x4f1c:cui4
-0x4f1d:chuan2
-0x4f1e:san3
-0x4f1f:wei3
-0x4f20:chuan2
-0x4f21:che1
-0x4f22:ya2
-0x4f23:xian4
-0x4f24:shang1
-0x4f25:chang1
-0x4f26:lun2
-0x4f27:cang1
-0x4f28:xun4
-0x4f29:xin4
-0x4f2a:wei3
-0x4f2b:zhu4
-0x4f2d:xuan2
-0x4f2e:nu2
-0x4f2f:bo2
-0x4f30:gu1
-0x4f31:ni3
-0x4f32:ni3
-0x4f33:xie4
-0x4f34:ban4
-0x4f35:xu4
-0x4f36:ling2
-0x4f37:zhou4
-0x4f38:shen1
-0x4f39:qu1
-0x4f3a:si4
-0x4f3b:beng1
-0x4f3c:si4
-0x4f3d:qie2
-0x4f3e:pi1
-0x4f3f:yi4
-0x4f40:si4
-0x4f41:ai3
-0x4f42:zheng1
-0x4f43:dian4
-0x4f44:han2
-0x4f45:mai4
-0x4f46:dan4
-0x4f47:zhu4
-0x4f48:bu4
-0x4f49:qu1
-0x4f4a:bi3
-0x4f4b:shao4
-0x4f4c:ci3
-0x4f4d:wei4
-0x4f4e:di1
-0x4f4f:zhu4
-0x4f50:zuo3
-0x4f51:you4
-0x4f52:yang1
-0x4f53:ti3
-0x4f54:zhan4
-0x4f55:he2
-0x4f56:bi4
-0x4f57:tuo2
-0x4f58:she2
-0x4f59:yu2
-0x4f5a:yi4
-0x4f5b:fo2
-0x4f5c:zuo4
-0x4f5d:kou4
-0x4f5e:ning4
-0x4f5f:tong2
-0x4f60:ni3
-0x4f61:xuan1
-0x4f62:qu2
-0x4f63:yong4
-0x4f64:wa3
-0x4f65:qian1
-0x4f67:ka3
-0x4f69:pei4
-0x4f6a:hui2
-0x4f6b:he4
-0x4f6c:lao3
-0x4f6d:xiang2
-0x4f6e:ge2
-0x4f6f:yang2
-0x4f70:bai3
-0x4f71:fa3
-0x4f72:ming2
-0x4f73:jia1
-0x4f74:er4
-0x4f75:bing4
-0x4f76:ji2
-0x4f77:hen3
-0x4f78:huo2
-0x4f79:gui3
-0x4f7a:quan2
-0x4f7b:tiao1
-0x4f7c:jiao3
-0x4f7d:ci4
-0x4f7e:yi4
-0x4f7f:shi3
-0x4f80:xing2
-0x4f81:shen1
-0x4f82:tuo1
-0x4f83:kan3
-0x4f84:zhi2
-0x4f85:gai1
-0x4f86:lai2
-0x4f87:yi2
-0x4f88:chi3
-0x4f89:kua1
-0x4f8a:guang1
-0x4f8b:li4
-0x4f8c:yin1
-0x4f8d:shi4
-0x4f8e:mi3
-0x4f8f:zhu1
-0x4f90:xu4
-0x4f91:you4
-0x4f92:an1
-0x4f93:lu4
-0x4f94:mou2
-0x4f95:er2
-0x4f96:lun2
-0x4f97:tong1
-0x4f98:cha4
-0x4f99:chi4
-0x4f9a:xun4
-0x4f9b:gong1
-0x4f9c:zhou1
-0x4f9d:yi1
-0x4f9e:ru3
-0x4f9f:jian4
-0x4fa0:xia2
-0x4fa1:jia4
-0x4fa2:zai4
-0x4fa3:lv3
-0x4fa5:jiao3
-0x4fa6:zhen1
-0x4fa7:ce4
-0x4fa8:qiao2
-0x4fa9:kuai4
-0x4faa:chai2
-0x4fab:ning4
-0x4fac:nong2
-0x4fad:jin3
-0x4fae:wu3
-0x4faf:hou2
-0x4fb0:jiong3
-0x4fb1:cheng3
-0x4fb2:zhen4
-0x4fb3:zuo4
-0x4fb4:chou3
-0x4fb5:qin1
-0x4fb6:lv3
-0x4fb7:ju2
-0x4fb8:shu4
-0x4fb9:ting3
-0x4fba:shen4
-0x4fbb:tuo1
-0x4fbc:bo2
-0x4fbd:nan2
-0x4fbe:hao1
-0x4fbf:bian4
-0x4fc0:tui3
-0x4fc1:yu3
-0x4fc2:xi4
-0x4fc3:cu4
-0x4fc4:e2
-0x4fc5:qiu2
-0x4fc6:xu2
-0x4fc7:kuang3
-0x4fc8:ku4
-0x4fc9:wu4
-0x4fca:jun4
-0x4fcb:yi4
-0x4fcc:fu3
-0x4fcd:lang2
-0x4fce:zu3
-0x4fcf:qiao4
-0x4fd0:li4
-0x4fd1:yong3
-0x4fd2:hun4
-0x4fd3:jing4
-0x4fd4:xian4
-0x4fd5:san4
-0x4fd6:pai3
-0x4fd7:su2
-0x4fd8:fu2
-0x4fd9:xi1
-0x4fda:li3
-0x4fdb:fu3
-0x4fdc:ping1
-0x4fdd:bao3
-0x4fde:yu2
-0x4fdf:si4
-0x4fe0:xia2
-0x4fe1:xin4
-0x4fe2:xiu1
-0x4fe3:yu3
-0x4fe4:ti4
-0x4fe5:che1
-0x4fe6:chou2
-0x4fe8:yan3
-0x4fe9:lia3
-0x4fea:li4
-0x4feb:lai2
-0x4fed:jian3
-0x4fee:xiu1
-0x4fef:fu3
-0x4ff0:he4
-0x4ff1:ju4
-0x4ff2:xiao4
-0x4ff3:pai2
-0x4ff4:jian4
-0x4ff5:biao4
-0x4ff6:chu4
-0x4ff7:fei4
-0x4ff8:feng4
-0x4ff9:ya4
-0x4ffa:an3
-0x4ffb:bei4
-0x4ffc:yu4
-0x4ffd:xin1
-0x4ffe:bi3
-0x4fff:jian4
-0x5000:chang1
-0x5001:chi2
-0x5002:bing4
-0x5003:zan2
-0x5004:yao2
-0x5005:cui4
-0x5006:lia3
-0x5007:wan3
-0x5008:lai2
-0x5009:cang1
-0x500a:zong4
-0x500b:ge4
-0x500c:guan1
-0x500d:bei4
-0x500e:tian1
-0x500f:shu1
-0x5010:shu1
-0x5011:men5
-0x5012:dao3
-0x5013:tan2
-0x5014:jue2
-0x5015:chui2
-0x5016:xing4
-0x5017:peng2
-0x5018:tang3
-0x5019:hou4
-0x501a:yi3
-0x501b:qi1
-0x501c:ti4
-0x501d:gan4
-0x501e:jing4
-0x501f:jie4
-0x5020:sui1
-0x5021:chang4
-0x5022:jie2
-0x5023:fang3
-0x5024:zhi2
-0x5025:kong1
-0x5026:juan4
-0x5027:zong1
-0x5028:ju4
-0x5029:qian4
-0x502a:ni2
-0x502b:lun2
-0x502c:zhuo1
-0x502d:wei1
-0x502e:luo3
-0x502f:song1
-0x5030:leng2
-0x5031:hun4
-0x5032:dong1
-0x5033:zi4
-0x5034:ben4
-0x5035:wu3
-0x5036:ju4
-0x5037:nai4
-0x5038:cai3
-0x5039:jian3
-0x503a:zhai4
-0x503b:ye1
-0x503c:zhi2
-0x503d:sha4
-0x503e:qing1
-0x5040:ying1
-0x5041:cheng1
-0x5042:jian1
-0x5043:yan3
-0x5044:nuan4
-0x5045:zhong4
-0x5046:chun3
-0x5047:jia3
-0x5048:jie2
-0x5049:wei3
-0x504a:yu3
-0x504b:bing3
-0x504c:ruo4
-0x504d:ti2
-0x504e:wei1
-0x504f:pian1
-0x5050:yan4
-0x5051:feng1
-0x5052:tang3
-0x5053:wo4
-0x5054:e4
-0x5055:xie2
-0x5056:che3
-0x5057:sheng3
-0x5058:kan3
-0x5059:di4
-0x505a:zuo4
-0x505b:cha1
-0x505c:ting2
-0x505d:bei4
-0x505e:ye4
-0x505f:huang2
-0x5060:yao3
-0x5061:zhan4
-0x5062:chou3
-0x5063:yan1
-0x5064:you3
-0x5065:jian4
-0x5066:xu1
-0x5067:zha1
-0x5068:ci1
-0x5069:fu4
-0x506a:bi1
-0x506b:zhi4
-0x506c:zong3
-0x506d:mian3
-0x506e:ji2
-0x506f:yi3
-0x5070:xie4
-0x5071:xun2
-0x5072:si1
-0x5073:duan1
-0x5074:ce4
-0x5075:zhen1
-0x5076:ou3
-0x5077:tou1
-0x5078:tou1
-0x5079:bei4
-0x507a:za2
-0x507b:lv3
-0x507c:jie2
-0x507d:wei3
-0x507e:fen4
-0x507f:chang2
-0x5080:gui1
-0x5081:sou3
-0x5082:zhi4
-0x5083:su4
-0x5084:xia1
-0x5085:fu4
-0x5086:yuan4
-0x5087:rong3
-0x5088:li4
-0x5089:ru4
-0x508a:yun3
-0x508b:gou4
-0x508c:ma4
-0x508d:bang4
-0x508e:dian1
-0x508f:tang2
-0x5090:hao4
-0x5091:jie2
-0x5092:xi1
-0x5093:shan4
-0x5094:qian4
-0x5095:jue2
-0x5096:cang1
-0x5097:chu4
-0x5098:san3
-0x5099:bei4
-0x509a:xiao4
-0x509b:yong3
-0x509c:yao2
-0x509d:tan4
-0x509e:suo1
-0x509f:yang3
-0x50a0:fa1
-0x50a1:bing4
-0x50a2:jia1
-0x50a3:dai3
-0x50a4:zai4
-0x50a5:tang3
-0x50a7:bin4
-0x50a8:chu3
-0x50a9:nuo2
-0x50aa:can1
-0x50ab:lei3
-0x50ac:cui1
-0x50ad:yong1
-0x50ae:zao1
-0x50af:zong3
-0x50b0:peng2
-0x50b1:song3
-0x50b2:ao4
-0x50b3:chuan2
-0x50b4:yu3
-0x50b5:zhai4
-0x50b6:cou4
-0x50b7:shang1
-0x50b8:qiang3
-0x50b9:jing4
-0x50ba:chi4
-0x50bb:sha3
-0x50bc:han4
-0x50bd:zhang1
-0x50be:qing1
-0x50bf:yan4
-0x50c0:di4
-0x50c1:xi1
-0x50c2:lv3
-0x50c3:bei4
-0x50c4:piao4
-0x50c5:jin3
-0x50c6:lian2
-0x50c7:lu4
-0x50c8:man4
-0x50c9:qian1
-0x50ca:xian1
-0x50cb:tan4
-0x50cc:ying2
-0x50cd:dong4
-0x50ce:zhuan4
-0x50cf:xiang4
-0x50d0:shan4
-0x50d1:qiao2
-0x50d2:jiong3
-0x50d3:tui3
-0x50d4:zun3
-0x50d5:pu2
-0x50d6:xi1
-0x50d7:lao2
-0x50d8:chang3
-0x50d9:guang1
-0x50da:liao2
-0x50db:qi1
-0x50dc:deng4
-0x50dd:chan2
-0x50de:wei3
-0x50df:ji1
-0x50e0:fan1
-0x50e1:hui4
-0x50e2:chuan3
-0x50e3:jian4
-0x50e4:dan4
-0x50e5:jiao3
-0x50e6:jiu4
-0x50e7:seng1
-0x50e8:fen4
-0x50e9:xian4
-0x50ea:jue2
-0x50eb:e4
-0x50ec:jiao1
-0x50ed:jian4
-0x50ee:tong2
-0x50ef:lin3
-0x50f0:bo2
-0x50f1:gu4
-0x50f3:su4
-0x50f4:xian4
-0x50f5:jiang1
-0x50f6:min3
-0x50f7:ye4
-0x50f8:jin4
-0x50f9:jia4
-0x50fa:qiao4
-0x50fb:pi4
-0x50fc:feng1
-0x50fd:zhou4
-0x50fe:ai4
-0x50ff:sai4
-0x5100:yi2
-0x5101:jun4
-0x5102:nong2
-0x5103:chan2
-0x5104:yi4
-0x5105:dang1
-0x5106:jing3
-0x5107:xuan1
-0x5108:kuai4
-0x5109:jian3
-0x510a:chu4
-0x510b:dan1
-0x510c:jiao3
-0x510d:sha3
-0x510e:zai4
-0x5110:bin4
-0x5111:an4
-0x5112:ru2
-0x5113:tai2
-0x5114:chou2
-0x5115:chai2
-0x5116:lan2
-0x5117:ni3
-0x5118:jin3
-0x5119:qian4
-0x511a:meng2
-0x511b:wu3
-0x511c:ning2
-0x511d:qiong2
-0x511e:ni3
-0x511f:chang2
-0x5120:lie4
-0x5121:lei3
-0x5122:lv3
-0x5123:kuang4
-0x5124:bao4
-0x5125:du2
-0x5126:biao1
-0x5127:zan3
-0x5128:zhi2
-0x5129:si4
-0x512a:you1
-0x512b:hao2
-0x512c:chen4
-0x512d:chen4
-0x512e:li4
-0x512f:teng2
-0x5130:wei3
-0x5131:long3
-0x5132:chu3
-0x5133:chan4
-0x5134:rang2
-0x5135:shu1
-0x5136:hui4
-0x5137:li4
-0x5138:luo2
-0x5139:zan3
-0x513a:nuo2
-0x513b:tang3
-0x513c:yan3
-0x513d:lei3
-0x513e:nang4
-0x513f:er2
-0x5140:wu4
-0x5141:yun3
-0x5142:zan1
-0x5143:yuan2
-0x5144:xiong1
-0x5145:chong1
-0x5146:zhao4
-0x5147:xiong1
-0x5148:xian1
-0x5149:guang1
-0x514a:dui4
-0x514b:ke4
-0x514c:dui4
-0x514d:mian3
-0x514e:tu4
-0x514f:chang2
-0x5150:er2
-0x5151:dui4
-0x5152:er2
-0x5153:xin1
-0x5154:tu4
-0x5155:si4
-0x5156:yan3
-0x5157:yan3
-0x5158:shi3
-0x515a:dang3
-0x515b:qian1
-0x515c:dou1
-0x515d:fen1
-0x515e:mao2
-0x515f:shen1
-0x5160:dou1
-0x5162:jing1
-0x5163:li3
-0x5164:huang2
-0x5165:ru4
-0x5166:wang2
-0x5167:nei4
-0x5168:quan2
-0x5169:liang3
-0x516a:yu2
-0x516b:ba1
-0x516c:gong1
-0x516d:liu4
-0x516e:xi1
-0x5170:lan2
-0x5171:gong4
-0x5172:tian1
-0x5173:guan1
-0x5174:xing1
-0x5175:bing1
-0x5176:qi2
-0x5177:ju4
-0x5178:dian3
-0x5179:zi1
-0x517b:yang3
-0x517c:jian1
-0x517d:shou4
-0x517e:ji4
-0x517f:yi4
-0x5180:ji4
-0x5181:chan3
-0x5182:jiong1
-0x5184:ran3
-0x5185:nei4
-0x5187:mao3
-0x5188:gang1
-0x5189:ran3
-0x518a:ce4
-0x518b:jiong1
-0x518c:ce4
-0x518d:zai4
-0x518e:gua3
-0x518f:jiong3
-0x5190:mao4
-0x5191:zhou4
-0x5192:mao4
-0x5193:gou4
-0x5194:xu3
-0x5195:mian3
-0x5196:mi4
-0x5197:rong3
-0x5198:yin2
-0x5199:xie3
-0x519a:kan3
-0x519b:jun1
-0x519c:nong2
-0x519d:yi2
-0x519e:mi2
-0x519f:shi4
-0x51a0:guan1
-0x51a1:meng2
-0x51a2:zhong3
-0x51a3:ju4
-0x51a4:yuan1
-0x51a5:ming2
-0x51a6:kou4
-0x51a8:fu4
-0x51a9:xie3
-0x51aa:mi4
-0x51ab:bing1
-0x51ac:dong1
-0x51ad:tai2
-0x51ae:gang1
-0x51af:feng2
-0x51b0:bing1
-0x51b1:hu4
-0x51b2:chong1
-0x51b3:jue2
-0x51b4:hu4
-0x51b5:kuang4
-0x51b6:ye3
-0x51b7:leng3
-0x51b8:pan4
-0x51b9:fu2
-0x51ba:min3
-0x51bb:dong4
-0x51bc:xian3
-0x51bd:lie4
-0x51be:xia2
-0x51bf:jian1
-0x51c0:jing4
-0x51c1:shu4
-0x51c2:mei3
-0x51c3:tu2
-0x51c4:qi1
-0x51c5:gu4
-0x51c6:zhun3
-0x51c7:song1
-0x51c8:jing4
-0x51c9:liang2
-0x51ca:qing4
-0x51cb:diao1
-0x51cc:ling2
-0x51cd:dong4
-0x51ce:gan4
-0x51cf:jian3
-0x51d0:yin1
-0x51d1:cou4
-0x51d2:yi2
-0x51d3:li4
-0x51d4:cang1
-0x51d5:ming3
-0x51d7:cui2
-0x51d8:si1
-0x51d9:duo2
-0x51da:jin4
-0x51db:lin3
-0x51dc:lin3
-0x51dd:ning2
-0x51de:xi1
-0x51df:du2
-0x51e0:ji1
-0x51e1:fan2
-0x51e2:fan2
-0x51e3:fan2
-0x51e4:feng4
-0x51e5:ju1
-0x51e6:chu3
-0x51e8:feng1
-0x51eb:fu2
-0x51ec:feng1
-0x51ed:ping2
-0x51ee:feng1
-0x51ef:kai3
-0x51f0:huang2
-0x51f1:kai3
-0x51f2:gan1
-0x51f3:deng4
-0x51f4:ping2
-0x51f5:qu1
-0x51f6:xiong1
-0x51f7:kuai4
-0x51f8:tu1
-0x51f9:ao1
-0x51fa:chu1
-0x51fb:ji2
-0x51fc:dang4
-0x51fd:han2
-0x51fe:han2
-0x51ff:zao2
-0x5200:dao1
-0x5201:diao1
-0x5202:dao1
-0x5203:ren4
-0x5204:ren4
-0x5205:chuang1
-0x5206:fen1
-0x5207:qie1
-0x5208:yi4
-0x5209:ji1
-0x520a:kan1
-0x520b:qian4
-0x520c:cun3
-0x520d:chu2
-0x520e:wen3
-0x520f:ji1
-0x5210:dan3
-0x5211:xing2
-0x5212:hua2
-0x5213:wan2
-0x5214:jue2
-0x5215:li2
-0x5216:yue4
-0x5217:lie4
-0x5218:liu2
-0x5219:ze2
-0x521a:gang1
-0x521b:chuang4
-0x521c:fu2
-0x521d:chu1
-0x521e:qu4
-0x521f:ju1
-0x5220:shan1
-0x5221:min3
-0x5222:ling2
-0x5223:zhong1
-0x5224:pan4
-0x5225:bie2
-0x5226:jie2
-0x5227:jie2
-0x5228:bao4
-0x5229:li4
-0x522a:shan1
-0x522b:bie2
-0x522c:chan3
-0x522d:jing3
-0x522e:gua1
-0x522f:gen1
-0x5230:dao4
-0x5231:chuang4
-0x5232:kui1
-0x5233:ku1
-0x5234:duo4
-0x5235:er4
-0x5236:zhi4
-0x5237:shua1
-0x5238:quan4
-0x5239:cha4
-0x523a:ci4
-0x523b:ke4
-0x523c:jie2
-0x523d:gui4
-0x523e:ci4
-0x523f:gui4
-0x5240:kai3
-0x5241:duo4
-0x5242:ji4
-0x5243:ti4
-0x5244:jing3
-0x5245:lou2
-0x5246:gen1
-0x5247:ze2
-0x5248:yuan1
-0x5249:cuo4
-0x524a:xue1
-0x524b:ke4
-0x524c:la4
-0x524d:qian2
-0x524e:cha4
-0x524f:chuang4
-0x5250:gua3
-0x5251:jian4
-0x5252:cuo4
-0x5253:li2
-0x5254:ti1
-0x5255:fei4
-0x5256:pou1
-0x5257:chan3
-0x5258:qi2
-0x5259:chuang4
-0x525a:zi4
-0x525b:gang1
-0x525c:wan1
-0x525d:bo1
-0x525e:ji1
-0x525f:duo1
-0x5260:qing2
-0x5261:yan3
-0x5262:zhuo2
-0x5263:jian4
-0x5264:ji4
-0x5265:bo1
-0x5266:yan1
-0x5267:ju4
-0x5268:huo4
-0x5269:sheng4
-0x526a:jian3
-0x526b:duo2
-0x526c:duan1
-0x526d:wu1
-0x526e:gua3
-0x526f:fu4
-0x5270:sheng4
-0x5271:jian4
-0x5272:ge1
-0x5273:zha1
-0x5274:kai3
-0x5275:chuang4
-0x5276:juan1
-0x5277:chan3
-0x5278:tuan2
-0x5279:lu4
-0x527a:li2
-0x527b:fou2
-0x527c:shan1
-0x527d:piao4
-0x527e:kou1
-0x527f:jiao3
-0x5280:gua1
-0x5281:qiao1
-0x5282:jue2
-0x5283:hua4
-0x5284:zha2
-0x5285:zhuo4
-0x5286:lian2
-0x5287:ju4
-0x5288:pi1
-0x5289:liu2
-0x528a:gui4
-0x528b:jiao3
-0x528c:gui4
-0x528d:jian4
-0x528e:jian4
-0x528f:tang1
-0x5290:huo1
-0x5291:ji4
-0x5292:jian4
-0x5293:yi4
-0x5294:jian4
-0x5295:zhi2
-0x5296:chan2
-0x5297:cuan2
-0x5298:mo2
-0x5299:li2
-0x529a:zhu2
-0x529b:li4
-0x529c:ya1
-0x529d:quan4
-0x529e:ban4
-0x529f:gong1
-0x52a0:jia1
-0x52a1:wu4
-0x52a2:mai4
-0x52a3:lie4
-0x52a4:jin4
-0x52a5:keng1
-0x52a6:xie2
-0x52a7:zhi3
-0x52a8:dong4
-0x52a9:zhu4
-0x52aa:nu3
-0x52ab:jie2
-0x52ac:qu2
-0x52ad:shao4
-0x52ae:yi4
-0x52af:zhu1
-0x52b0:miao3
-0x52b1:li4
-0x52b2:jing4
-0x52b3:lao2
-0x52b4:lao2
-0x52b5:juan4
-0x52b6:kou3
-0x52b7:yang2
-0x52b8:wa1
-0x52b9:xiao4
-0x52ba:mou2
-0x52bb:kuang1
-0x52bc:jie2
-0x52bd:lie4
-0x52be:he2
-0x52bf:shi4
-0x52c0:ke4
-0x52c1:jin4
-0x52c2:hao2
-0x52c3:bo2
-0x52c4:min3
-0x52c5:chi4
-0x52c6:lang2
-0x52c7:yong3
-0x52c8:yong3
-0x52c9:mian3
-0x52ca:ke4
-0x52cb:xun1
-0x52cc:juan4
-0x52cd:qing2
-0x52ce:lu4
-0x52cf:pou3
-0x52d0:meng3
-0x52d1:lai4
-0x52d2:le4
-0x52d3:kai4
-0x52d4:mian3
-0x52d5:dong4
-0x52d6:xu4
-0x52d7:xu4
-0x52d8:kan1
-0x52d9:wu4
-0x52da:yi4
-0x52db:xun1
-0x52dc:weng3
-0x52dd:sheng4
-0x52de:lao2
-0x52df:mu4
-0x52e0:lu4
-0x52e1:piao4
-0x52e2:shi4
-0x52e3:ji1
-0x52e4:qin2
-0x52e5:qiang3
-0x52e6:jiao3
-0x52e7:quan4
-0x52e8:yang3
-0x52e9:yi4
-0x52ea:jue2
-0x52eb:fan2
-0x52ec:juan4
-0x52ed:tong2
-0x52ee:ju4
-0x52ef:dan1
-0x52f0:xie2
-0x52f1:mai4
-0x52f2:xun1
-0x52f3:xun1
-0x52f4:lv4
-0x52f5:li4
-0x52f6:che4
-0x52f7:rang2
-0x52f8:quan4
-0x52f9:bao1
-0x52fa:shao2
-0x52fb:yun2
-0x52fc:jiu1
-0x52fd:bao4
-0x52fe:gou1
-0x52ff:wu4
-0x5300:yun2
-0x5303:gai4
-0x5304:gai4
-0x5305:bao1
-0x5306:cong1
-0x5308:xiong1
-0x5309:peng1
-0x530a:ju2
-0x530b:tao2
-0x530c:ge2
-0x530d:pu2
-0x530e:an4
-0x530f:pao2
-0x5310:fu2
-0x5311:gong1
-0x5312:da2
-0x5313:jiu4
-0x5314:qiong1
-0x5315:bi3
-0x5316:hua4
-0x5317:bei3
-0x5318:nao3
-0x5319:chi2
-0x531a:fang1
-0x531b:jiu4
-0x531c:yi2
-0x531d:za1
-0x531e:jiang4
-0x531f:kang4
-0x5320:jiang4
-0x5321:kuang1
-0x5322:hu1
-0x5323:xia2
-0x5324:qu1
-0x5325:bian4
-0x5326:gui3
-0x5327:qie4
-0x5328:zang1
-0x5329:kuang1
-0x532a:fei3
-0x532b:hu1
-0x532c:tou2
-0x532d:gui3
-0x532e:gui4
-0x532f:hui4
-0x5330:dan1
-0x5331:gui4
-0x5332:lian2
-0x5333:lian2
-0x5334:suan3
-0x5335:du2
-0x5336:jiu4
-0x5337:qu2
-0x5338:xi3
-0x5339:pi3
-0x533a:qu1
-0x533b:yi4
-0x533c:qia4
-0x533d:yan3
-0x533e:bian3
-0x533f:ni4
-0x5340:qu1
-0x5341:shi2
-0x5342:xin4
-0x5343:qian1
-0x5344:nian4
-0x5345:sa4
-0x5346:zu2
-0x5347:sheng1
-0x5348:wu3
-0x5349:hui4
-0x534a:ban4
-0x534b:shi4
-0x534c:xi4
-0x534d:wan4
-0x534e:hua2
-0x534f:xie2
-0x5350:wan4
-0x5351:bei1
-0x5352:zu2
-0x5353:zhuo1
-0x5354:xie2
-0x5355:dan1
-0x5356:mai4
-0x5357:nan2
-0x5358:dan1
-0x5359:ji2
-0x535a:bo2
-0x535b:shuai4
-0x535c:bu3
-0x535d:kuang4
-0x535e:bian4
-0x535f:bu3
-0x5360:zhan1
-0x5361:qia3
-0x5362:lu2
-0x5363:you3
-0x5364:lu3
-0x5365:xi1
-0x5366:gua4
-0x5367:wo4
-0x5368:xie4
-0x5369:jie2
-0x536a:jie2
-0x536b:wei4
-0x536c:ang2
-0x536d:qiong2
-0x536e:zhi1
-0x536f:mao3
-0x5370:yin4
-0x5371:wei1
-0x5372:shao4
-0x5373:ji2
-0x5374:que4
-0x5375:luan3
-0x5376:shi4
-0x5377:juan4
-0x5378:xie4
-0x5379:xu4
-0x537a:jin3
-0x537b:que4
-0x537c:wu4
-0x537d:ji2
-0x537e:e4
-0x537f:qing1
-0x5380:xi1
-0x5382:chang3
-0x5383:zhan1
-0x5384:e4
-0x5385:ting1
-0x5386:li4
-0x5387:zhe2
-0x5388:han3
-0x5389:li4
-0x538a:ya3
-0x538b:ya1
-0x538c:yan4
-0x538d:she4
-0x538e:zhi3
-0x538f:zha3
-0x5390:pang2
-0x5392:he2
-0x5393:ya2
-0x5394:zhi4
-0x5395:ce4
-0x5396:pang2
-0x5397:ti2
-0x5398:li2
-0x5399:she4
-0x539a:hou4
-0x539b:ting1
-0x539c:zui1
-0x539d:cuo4
-0x539e:fei4
-0x539f:yuan2
-0x53a0:ce4
-0x53a1:yuan2
-0x53a2:xiang1
-0x53a3:yan3
-0x53a4:li4
-0x53a5:jue2
-0x53a6:sha4
-0x53a7:dian1
-0x53a8:chu2
-0x53a9:jiu4
-0x53aa:qin2
-0x53ab:ao2
-0x53ac:gui3
-0x53ad:yan4
-0x53ae:si1
-0x53af:li4
-0x53b0:chang3
-0x53b1:lan2
-0x53b2:li4
-0x53b3:yan2
-0x53b4:yan3
-0x53b5:yuan2
-0x53b6:si1
-0x53b7:gong1
-0x53b8:lin2
-0x53b9:qiu2
-0x53ba:qu4
-0x53bb:qu4
-0x53bd:lei3
-0x53be:du1
-0x53bf:xian4
-0x53c0:zhuan1
-0x53c1:san1
-0x53c2:can1
-0x53c3:can1
-0x53c4:can1
-0x53c5:can1
-0x53c6:ai4
-0x53c7:dai4
-0x53c8:you4
-0x53c9:cha1
-0x53ca:ji2
-0x53cb:you3
-0x53cc:shuang1
-0x53cd:fan3
-0x53ce:shou1
-0x53cf:guai4
-0x53d0:ba2
-0x53d1:fa1
-0x53d2:ruo4
-0x53d3:shi4
-0x53d4:shu1
-0x53d5:zhuo2
-0x53d6:qu3
-0x53d7:shou4
-0x53d8:bian4
-0x53d9:xu4
-0x53da:jia3
-0x53db:pan4
-0x53dc:sou3
-0x53dd:gao4
-0x53de:wei4
-0x53df:sou3
-0x53e0:die2
-0x53e1:rui4
-0x53e2:cong2
-0x53e3:kou3
-0x53e4:gu3
-0x53e5:ju4
-0x53e6:ling4
-0x53e7:gua3
-0x53e8:tao1
-0x53e9:kou4
-0x53ea:zhi3
-0x53eb:jiao4
-0x53ec:zhao4
-0x53ed:ba1
-0x53ee:ding1
-0x53ef:ke3
-0x53f0:tai2
-0x53f1:chi4
-0x53f2:shi3
-0x53f3:you4
-0x53f4:qiu2
-0x53f5:po3
-0x53f6:xie2
-0x53f7:hao4
-0x53f8:si1
-0x53f9:tan4
-0x53fa:chi3
-0x53fb:le4
-0x53fc:diao1
-0x53fd:ji1
-0x53ff:hong1
-0x5400:mie1
-0x5401:xu1
-0x5402:mang2
-0x5403:chi1
-0x5404:ge4
-0x5405:xuan1
-0x5406:yao1
-0x5407:zi3
-0x5408:he2
-0x5409:ji2
-0x540a:diao4
-0x540b:cun4
-0x540c:tong2
-0x540d:ming2
-0x540e:hou4
-0x540f:li4
-0x5410:tu3
-0x5411:xiang4
-0x5412:zha4
-0x5413:xia4
-0x5414:ye3
-0x5415:lv3
-0x5416:a1
-0x5417:ma5
-0x5418:ou3
-0x5419:xue1
-0x541a:yi1
-0x541b:jun1
-0x541c:chou3
-0x541d:lin4
-0x541e:tun1
-0x541f:yin2
-0x5420:fei4
-0x5421:bi3
-0x5422:qin4
-0x5423:qin4
-0x5424:jie4
-0x5425:bu4
-0x5426:fou3
-0x5427:ba5
-0x5428:dun1
-0x5429:fen1
-0x542a:e2
-0x542b:han2
-0x542c:ting1
-0x542d:hang2
-0x542e:shun3
-0x542f:qi3
-0x5430:hong2
-0x5431:zhi1
-0x5432:shen3
-0x5433:wu2
-0x5434:wu2
-0x5435:chao3
-0x5436:ne5
-0x5437:xue4
-0x5438:xi1
-0x5439:chui1
-0x543a:dou1
-0x543b:wen3
-0x543c:hou3
-0x543d:ou1
-0x543e:wu2
-0x543f:gao4
-0x5440:ya1
-0x5441:jun4
-0x5442:lv3
-0x5443:e4
-0x5444:ge2
-0x5445:mei2
-0x5446:dai1
-0x5447:qi3
-0x5448:cheng2
-0x5449:wu2
-0x544a:gao4
-0x544b:fu1
-0x544c:jiao4
-0x544d:hong1
-0x544e:chi3
-0x544f:sheng1
-0x5450:ne4
-0x5451:tun1
-0x5452:fu3
-0x5453:yi4
-0x5454:dai1
-0x5455:ou1
-0x5456:li4
-0x5457:bai4
-0x5458:yuan2
-0x5459:kuai1
-0x545b:qiang1
-0x545c:wu1
-0x545d:e4
-0x545e:shi1
-0x545f:quan3
-0x5460:pen1
-0x5461:wen3
-0x5462:ni2
-0x5464:ling2
-0x5465:ran3
-0x5466:you1
-0x5467:di3
-0x5468:zhou1
-0x5469:shi4
-0x546a:zhou4
-0x546b:tie1
-0x546c:xi4
-0x546d:yi4
-0x546e:qi4
-0x546f:ping2
-0x5470:zi3
-0x5471:gu1
-0x5472:zi1
-0x5473:wei4
-0x5474:xu1
-0x5475:he1
-0x5476:nao2
-0x5477:xia1
-0x5478:pei1
-0x5479:yi4
-0x547a:xiao1
-0x547b:shen1
-0x547c:hu1
-0x547d:ming4
-0x547e:da2
-0x547f:qu1
-0x5480:ju3
-0x5482:za1
-0x5483:tuo1
-0x5484:duo1
-0x5485:pou4
-0x5486:pao2
-0x5487:bi4
-0x5488:fu2
-0x5489:yang1
-0x548a:he2
-0x548b:zha4
-0x548c:he2
-0x548d:hai1
-0x548e:jiu4
-0x548f:yong3
-0x5490:fu4
-0x5491:que4
-0x5492:zhou4
-0x5493:wa3
-0x5494:ka3
-0x5495:gu1
-0x5496:ka1
-0x5497:zuo3
-0x5498:bu4
-0x5499:long2
-0x549a:dong1
-0x549b:ning2
-0x549d:si1
-0x549e:xian4
-0x549f:huo4
-0x54a0:qi4
-0x54a1:er4
-0x54a2:e4
-0x54a3:guang1
-0x54a4:zha4
-0x54a5:xi4
-0x54a6:yi2
-0x54a7:lie3
-0x54a8:zi1
-0x54a9:mie1
-0x54aa:mi1
-0x54ab:zhi3
-0x54ac:yao3
-0x54ad:ji1
-0x54ae:zhou4
-0x54af:ge1
-0x54b0:shuai4
-0x54b1:zan2
-0x54b2:xiao4
-0x54b3:ke2
-0x54b4:hui1
-0x54b5:kua1
-0x54b6:huai4
-0x54b7:tao2
-0x54b8:xian2
-0x54b9:e4
-0x54ba:xuan3
-0x54bb:xiu1
-0x54bc:wai1
-0x54bd:yan1
-0x54be:lao3
-0x54bf:yi1
-0x54c0:ai1
-0x54c1:pin3
-0x54c2:shen3
-0x54c3:tong2
-0x54c4:hong1
-0x54c5:xiong1
-0x54c6:duo1
-0x54c7:wa1
-0x54c8:ha1
-0x54c9:zai1
-0x54ca:yu4
-0x54cb:di4
-0x54cc:pai4
-0x54cd:xiang3
-0x54ce:ai1
-0x54cf:hen3
-0x54d0:kuang1
-0x54d1:ya3
-0x54d2:da1
-0x54d3:xiao1
-0x54d4:bi4
-0x54d5:yue3
-0x54d7:hua1
-0x54d9:kuai4
-0x54da:duo3
-0x54dc:ji4
-0x54dd:nong2
-0x54de:mou1
-0x54df:yo5
-0x54e0:hao4
-0x54e1:yuan2
-0x54e2:long4
-0x54e3:pou3
-0x54e4:mang2
-0x54e5:ge1
-0x54e6:e2
-0x54e7:chi1
-0x54e8:shao4
-0x54e9:li1
-0x54ea:na3
-0x54eb:zu2
-0x54ec:he2
-0x54ed:ku1
-0x54ee:xiao1
-0x54ef:xian4
-0x54f0:lao2
-0x54f1:bo1
-0x54f2:zhe2
-0x54f3:zha1
-0x54f4:liang4
-0x54f5:ba1
-0x54f6:mie1
-0x54f7:le4
-0x54f8:sui1
-0x54f9:fou2
-0x54fa:bu3
-0x54fb:han4
-0x54fc:heng1
-0x54fd:geng3
-0x54fe:shuo1
-0x54ff:ge3
-0x5500:you3
-0x5501:yan4
-0x5502:gu3
-0x5503:gu3
-0x5504:bai4
-0x5505:han1
-0x5506:suo1
-0x5507:chun2
-0x5508:yi4
-0x5509:ai1
-0x550a:jia2
-0x550b:tu3
-0x550c:xian2
-0x550d:huan3
-0x550e:li4
-0x550f:xi1
-0x5510:tang2
-0x5511:zuo4
-0x5512:qiu2
-0x5513:che1
-0x5514:wu2
-0x5515:zao4
-0x5516:ya3
-0x5517:dou1
-0x5518:qi3
-0x5519:di2
-0x551a:qin4
-0x551b:ma4
-0x551d:hong3
-0x551e:dou3
-0x5520:lao2
-0x5521:liang3
-0x5522:suo3
-0x5523:zao4
-0x5524:huan4
-0x5526:sha1
-0x5527:ji1
-0x5528:zuo3
-0x5529:wo1
-0x552a:feng3
-0x552b:yin2
-0x552c:hu3
-0x552d:qi1
-0x552e:shou4
-0x552f:wei2
-0x5530:shua1
-0x5531:chang4
-0x5532:er2
-0x5533:li4
-0x5534:qiang4
-0x5535:an3
-0x5536:jie4
-0x5537:yo1
-0x5538:nian4
-0x5539:yu1
-0x553a:tian3
-0x553b:lai3
-0x553c:sha4
-0x553d:xi1
-0x553e:tuo4
-0x553f:hu1
-0x5540:ai2
-0x5541:zhou1
-0x5542:nou4
-0x5543:ken3
-0x5544:zhuo2
-0x5545:zhuo2
-0x5546:shang1
-0x5547:di2
-0x5548:heng4
-0x5549:lan2
-0x554a:a5
-0x554b:xiao1
-0x554c:xiang1
-0x554d:tun1
-0x554e:wu3
-0x554f:wen4
-0x5550:cui4
-0x5551:sha4
-0x5552:hu1
-0x5553:qi3
-0x5554:qi3
-0x5555:tao2
-0x5556:dan4
-0x5557:dan4
-0x5558:ye4
-0x5559:zi3
-0x555a:bi3
-0x555b:cui4
-0x555c:chuo4
-0x555d:he2
-0x555e:ya3
-0x555f:qi3
-0x5560:zhe2
-0x5561:fei1
-0x5562:liang3
-0x5563:xian2
-0x5564:pi2
-0x5565:sha4
-0x5566:la5
-0x5567:ze2
-0x5568:qing1
-0x5569:gua4
-0x556a:pa1
-0x556b:zhe3
-0x556c:se4
-0x556d:zhuan4
-0x556e:nie4
-0x556f:guo5
-0x5570:luo1
-0x5571:yan1
-0x5572:di4
-0x5573:quan2
-0x5574:tan1
-0x5575:bo5
-0x5576:ding4
-0x5577:lang1
-0x5578:xiao4
-0x557a:tang2
-0x557b:chi4
-0x557c:ti2
-0x557d:an2
-0x557e:jiu1
-0x557f:dan4
-0x5580:ka1
-0x5581:yong2
-0x5582:wei4
-0x5583:nan2
-0x5584:shan4
-0x5585:yu4
-0x5586:zhe2
-0x5587:la3
-0x5588:jie1
-0x5589:hou2
-0x558a:han3
-0x558b:die2
-0x558c:zhou1
-0x558d:chai2
-0x558e:wai1
-0x558f:re3
-0x5590:yu4
-0x5591:yin1
-0x5592:zan2
-0x5593:yao1
-0x5594:o1
-0x5595:mian3
-0x5596:hu2
-0x5597:yun3
-0x5598:chuan3
-0x5599:hui4
-0x559a:huan4
-0x559b:huan4
-0x559c:xi3
-0x559d:he1
-0x559e:ji1
-0x559f:kui4
-0x55a0:zhong3
-0x55a1:wei3
-0x55a2:sha4
-0x55a3:xu3
-0x55a4:huang2
-0x55a5:du4
-0x55a6:nie4
-0x55a7:xuan1
-0x55a8:liang4
-0x55a9:yu4
-0x55aa:sang1
-0x55ab:chi1
-0x55ac:qiao2
-0x55ad:yan4
-0x55ae:dan1
-0x55af:pen1
-0x55b0:can1
-0x55b1:li2
-0x55b2:yo5
-0x55b3:zha1
-0x55b4:wei1
-0x55b5:miao1
-0x55b6:ying2
-0x55b7:pen1
-0x55b9:kui2
-0x55ba:xi4
-0x55bb:yu4
-0x55bc:jie2
-0x55bd:lou5
-0x55be:ku4
-0x55bf:sao4
-0x55c0:huo4
-0x55c1:ti2
-0x55c2:yao2
-0x55c3:he4
-0x55c4:a2
-0x55c5:xiu4
-0x55c6:qiang1
-0x55c7:se4
-0x55c8:yong1
-0x55c9:su4
-0x55ca:hong3
-0x55cb:xie2
-0x55cc:yi4
-0x55cd:suo1
-0x55ce:ma5
-0x55cf:cha1
-0x55d0:hai4
-0x55d1:ke4
-0x55d2:ta4
-0x55d3:sang3
-0x55d4:tian2
-0x55d5:ru4
-0x55d6:sou1
-0x55d7:wa1
-0x55d8:ji1
-0x55d9:pang3
-0x55da:wu1
-0x55db:xian2
-0x55dc:shi4
-0x55dd:ge2
-0x55de:zi1
-0x55df:jie1
-0x55e0:luo4
-0x55e1:weng1
-0x55e2:wa4
-0x55e3:si4
-0x55e4:chi1
-0x55e5:hao2
-0x55e6:suo1
-0x55e8:hai1
-0x55e9:suo3
-0x55ea:qin2
-0x55eb:nie4
-0x55ec:he1
-0x55ee:sai4
-0x55f0:ge4
-0x55f1:na2
-0x55f2:dia3
-0x55f3:ai4
-0x55f5:tong1
-0x55f6:bi4
-0x55f7:ao2
-0x55f8:ao2
-0x55f9:lian2
-0x55fa:cui1
-0x55fb:zhe1
-0x55fc:mo4
-0x55fd:sou4
-0x55fe:sou3
-0x55ff:tan3
-0x5600:di2
-0x5601:qi1
-0x5602:jiao4
-0x5603:chong1
-0x5604:jiao1
-0x5605:kai3
-0x5606:tan4
-0x5607:san1
-0x5608:cao2
-0x5609:jia1
-0x560a:ai2
-0x560b:xiao1
-0x560c:piao1
-0x560d:lou5
-0x560e:ga1
-0x560f:gu3
-0x5610:xiao1
-0x5611:hu1
-0x5612:hui4
-0x5613:guo1
-0x5614:ou1
-0x5615:xian1
-0x5616:ze2
-0x5617:chang2
-0x5618:xu1
-0x5619:po2
-0x561a:de2
-0x561b:ma5
-0x561c:ma4
-0x561d:hu2
-0x561e:lei5
-0x561f:du1
-0x5620:ga1
-0x5621:tang1
-0x5622:ye3
-0x5623:beng1
-0x5624:ying1
-0x5626:jiao4
-0x5627:mi4
-0x5628:xiao4
-0x5629:hua1
-0x562a:mai3
-0x562b:ran2
-0x562c:zuo1
-0x562d:peng1
-0x562e:lao2
-0x562f:xiao4
-0x5630:ji1
-0x5631:zhu3
-0x5632:chao2
-0x5633:kui4
-0x5634:zui3
-0x5635:xiao1
-0x5636:si1
-0x5637:hao2
-0x5638:fu3
-0x5639:liao2
-0x563a:qiao2
-0x563b:xi1
-0x563c:xiu4
-0x563d:tan1
-0x563e:tan2
-0x563f:hei1
-0x5640:xun4
-0x5641:e3
-0x5642:zun3
-0x5643:fan1
-0x5644:chi1
-0x5645:hui1
-0x5646:zan3
-0x5647:chuang2
-0x5648:cu4
-0x5649:dan4
-0x564a:yu4
-0x564b:tun1
-0x564c:cheng1
-0x564d:jiao4
-0x564e:ye1
-0x564f:xi1
-0x5650:qi4
-0x5651:hao2
-0x5652:lian2
-0x5653:xu1
-0x5654:deng1
-0x5655:hui1
-0x5656:yin2
-0x5657:pu1
-0x5658:jue1
-0x5659:qin2
-0x565a:xun2
-0x565b:nie4
-0x565c:lu1
-0x565d:si1
-0x565e:yan3
-0x565f:ying4
-0x5660:da1
-0x5661:dan1
-0x5662:o1
-0x5663:zhou4
-0x5664:jin4
-0x5665:nong2
-0x5666:yue3
-0x5667:hui4
-0x5668:qi4
-0x5669:e4
-0x566a:zao4
-0x566b:yi1
-0x566c:shi4
-0x566d:jiao4
-0x566e:yuan1
-0x566f:ai3
-0x5670:yong1
-0x5671:jue2
-0x5672:kuai4
-0x5673:yu3
-0x5674:pen1
-0x5675:dao4
-0x5676:ge2
-0x5677:xin1
-0x5678:dun1
-0x5679:dang1
-0x567b:sai5
-0x567c:pi1
-0x567d:pi3
-0x567e:yin1
-0x567f:zui3
-0x5680:ning2
-0x5681:di2
-0x5682:lan4
-0x5683:ta4
-0x5684:huo4
-0x5685:ru2
-0x5686:hao1
-0x5687:xia4
-0x5688:ya4
-0x5689:duo1
-0x568a:xi4
-0x568b:chou2
-0x568c:ji4
-0x568d:jin4
-0x568e:hao2
-0x568f:ti4
-0x5690:chang2
-0x5693:ca1
-0x5694:ti4
-0x5695:lu1
-0x5696:hui4
-0x5697:bo2
-0x5698:you1
-0x5699:nie4
-0x569a:yin2
-0x569b:hu4
-0x569c:mo4
-0x569d:huang1
-0x569e:zhe2
-0x569f:li2
-0x56a0:liu2
-0x56a2:nang2
-0x56a3:xiao1
-0x56a4:mo2
-0x56a5:yan4
-0x56a6:li4
-0x56a7:lu2
-0x56a8:long2
-0x56a9:fu2
-0x56aa:dan4
-0x56ab:chen4
-0x56ac:pin2
-0x56ad:pi3
-0x56ae:xiang4
-0x56af:huo4
-0x56b0:mo2
-0x56b1:xi4
-0x56b2:duo3
-0x56b3:ku4
-0x56b4:yan2
-0x56b5:chan2
-0x56b6:ying1
-0x56b7:rang3
-0x56b8:dian3
-0x56b9:la1
-0x56ba:ta4
-0x56bb:xiao1
-0x56bc:jiao2
-0x56bd:chuo4
-0x56be:huan1
-0x56bf:huo4
-0x56c0:zhuan4
-0x56c1:nie4
-0x56c2:xiao1
-0x56c3:ca4
-0x56c4:li2
-0x56c5:chan3
-0x56c6:chai4
-0x56c7:li4
-0x56c8:yi4
-0x56c9:luo1
-0x56ca:nang2
-0x56cb:zan4
-0x56cc:su1
-0x56cd:xi3
-0x56cf:jian1
-0x56d0:za2
-0x56d1:zhu3
-0x56d2:lan2
-0x56d3:nie4
-0x56d4:nang1
-0x56d7:wei2
-0x56d8:hui2
-0x56d9:yin1
-0x56da:qiu2
-0x56db:si4
-0x56dc:nin2
-0x56dd:jian3
-0x56de:hui2
-0x56df:xin4
-0x56e0:yin1
-0x56e1:nan1
-0x56e2:tuan2
-0x56e3:tuan2
-0x56e4:dun4
-0x56e5:kang4
-0x56e6:yuan1
-0x56e7:jiong3
-0x56e8:pian1
-0x56e9:yun4
-0x56ea:cong1
-0x56eb:hu2
-0x56ec:hui2
-0x56ed:yuan2
-0x56ee:e2
-0x56ef:guo2
-0x56f0:kun4
-0x56f1:cong1
-0x56f2:wei2
-0x56f3:tu2
-0x56f4:wei2
-0x56f5:lun2
-0x56f6:guo2
-0x56f7:qun1
-0x56f8:ri4
-0x56f9:ling2
-0x56fa:gu4
-0x56fb:guo2
-0x56fc:tai1
-0x56fd:guo2
-0x56fe:tu2
-0x56ff:you4
-0x5700:guo2
-0x5701:yin2
-0x5702:hun4
-0x5703:pu3
-0x5704:yu3
-0x5705:han2
-0x5706:yuan2
-0x5707:lun2
-0x5708:quan1
-0x5709:yu3
-0x570a:qing1
-0x570b:guo2
-0x570c:chuan2
-0x570d:wei2
-0x570e:yuan2
-0x570f:quan1
-0x5710:ku1
-0x5711:fu4
-0x5712:yuan2
-0x5713:yuan2
-0x5714:e4
-0x5716:tu2
-0x5717:tu2
-0x5718:tuan2
-0x5719:lve4
-0x571a:hui4
-0x571b:yi4
-0x571c:yuan2
-0x571d:luan2
-0x571e:luan2
-0x571f:tu3
-0x5720:ya4
-0x5721:tu3
-0x5722:ting1
-0x5723:sheng4
-0x5724:pu3
-0x5725:lu4
-0x5727:ya1
-0x5728:zai4
-0x5729:wei2
-0x572a:ge1
-0x572b:yu4
-0x572c:wu1
-0x572d:gui1
-0x572e:pi3
-0x572f:yi2
-0x5730:di4
-0x5731:qian1
-0x5732:qian1
-0x5733:zhen4
-0x5734:zhuo2
-0x5735:dang4
-0x5736:qia4
-0x5739:kuang4
-0x573a:chang2
-0x573b:qi2
-0x573c:nie4
-0x573d:mo4
-0x573e:ji2
-0x573f:jia2
-0x5740:zhi3
-0x5741:zhi3
-0x5742:ban3
-0x5743:xun1
-0x5744:tou2
-0x5745:qin3
-0x5746:fen2
-0x5747:jun1
-0x5748:keng1
-0x5749:tun2
-0x574a:fang1
-0x574b:fen4
-0x574c:ben4
-0x574d:tan1
-0x574e:kan3
-0x574f:huai4
-0x5750:zuo4
-0x5751:keng1
-0x5752:bi4
-0x5753:xing2
-0x5754:di4
-0x5755:jing1
-0x5756:ji4
-0x5757:kuai4
-0x5758:di3
-0x5759:jing1
-0x575a:jian1
-0x575b:tan2
-0x575c:li4
-0x575d:ba4
-0x575e:wu4
-0x575f:fen2
-0x5760:zhui4
-0x5761:po1
-0x5762:pan3
-0x5763:tang1
-0x5764:kun1
-0x5765:qu1
-0x5766:tan3
-0x5767:zhi1
-0x5768:tuo2
-0x5769:gan1
-0x576a:ping2
-0x576b:dian4
-0x576c:gua4
-0x576d:ni2
-0x576e:tai2
-0x576f:pi1
-0x5770:jiong1
-0x5771:yang3
-0x5772:fo2
-0x5773:ao4
-0x5774:liu4
-0x5775:qiu1
-0x5776:mu4
-0x5777:ke3
-0x5778:gou4
-0x5779:xue4
-0x577a:ba2
-0x577b:chi2
-0x577c:che4
-0x577d:ling2
-0x577e:zhu4
-0x577f:fu4
-0x5780:hu1
-0x5781:zhi4
-0x5782:chui2
-0x5783:la1
-0x5784:long3
-0x5785:long3
-0x5786:lu2
-0x5787:ao4
-0x5789:pao2
-0x578b:xing2
-0x578c:dong4
-0x578d:ji4
-0x578e:ke4
-0x578f:lu4
-0x5790:ci2
-0x5791:chi3
-0x5792:lei3
-0x5793:gai1
-0x5794:yin1
-0x5795:hou4
-0x5796:dui1
-0x5797:zhao4
-0x5798:fu2
-0x5799:guang1
-0x579a:yao2
-0x579b:duo3
-0x579c:duo3
-0x579d:gui3
-0x579e:cha2
-0x579f:yang2
-0x57a0:yin2
-0x57a1:fa2
-0x57a2:gou4
-0x57a3:yuan2
-0x57a4:die2
-0x57a5:xie2
-0x57a6:ken3
-0x57a7:jiong1
-0x57a8:shou3
-0x57a9:e4
-0x57ab:dian4
-0x57ac:hong2
-0x57ad:wu4
-0x57ae:kua3
-0x57b1:dang4
-0x57b2:kai3
-0x57b4:nao3
-0x57b5:an3
-0x57b6:xing1
-0x57b7:xian4
-0x57b8:huan4
-0x57b9:bang1
-0x57ba:pei1
-0x57bb:ba4
-0x57bc:yi4
-0x57bd:yin4
-0x57be:han4
-0x57bf:xu4
-0x57c0:chui2
-0x57c1:cen2
-0x57c2:geng3
-0x57c3:ai1
-0x57c4:peng2
-0x57c5:fang2
-0x57c6:que4
-0x57c7:yong3
-0x57c8:xun4
-0x57c9:jia2
-0x57ca:di4
-0x57cb:mai2
-0x57cc:lang4
-0x57cd:xuan4
-0x57ce:cheng2
-0x57cf:yan2
-0x57d0:jin1
-0x57d1:zhe2
-0x57d2:lei4
-0x57d3:lie4
-0x57d4:pu3
-0x57d5:cheng2
-0x57d7:bu4
-0x57d8:shi2
-0x57d9:xun1
-0x57da:guo1
-0x57db:jiong1
-0x57dc:ye3
-0x57dd:nian4
-0x57de:di3
-0x57df:yu4
-0x57e0:bu4
-0x57e1:ya4
-0x57e2:juan3
-0x57e3:sui4
-0x57e4:pi2
-0x57e5:cheng1
-0x57e6:wan3
-0x57e7:ju4
-0x57e8:lun3
-0x57e9:zheng1
-0x57ea:kong1
-0x57eb:chong3
-0x57ec:dong1
-0x57ed:dai4
-0x57ee:tan4
-0x57ef:an3
-0x57f0:cai4
-0x57f1:shu2
-0x57f2:beng3
-0x57f3:kan3
-0x57f4:zhi2
-0x57f5:duo3
-0x57f6:yi4
-0x57f7:zhi2
-0x57f8:yi4
-0x57f9:pei2
-0x57fa:ji1
-0x57fb:zhun3
-0x57fc:qi2
-0x57fd:sao4
-0x57fe:ju4
-0x57ff:ni2
-0x5800:ku1
-0x5801:ke4
-0x5802:tang2
-0x5803:kun1
-0x5804:ni4
-0x5805:jian1
-0x5806:dui1
-0x5807:jin3
-0x5808:gang1
-0x5809:yu4
-0x580a:e4
-0x580b:peng2
-0x580c:gu4
-0x580d:tu4
-0x580e:leng4
-0x5810:ya2
-0x5811:qian4
-0x5813:an4
-0x5815:duo4
-0x5816:nao3
-0x5817:tu1
-0x5818:cheng2
-0x5819:yin1
-0x581a:hun2
-0x581b:bi4
-0x581c:lian4
-0x581d:guo1
-0x581e:die2
-0x581f:zhuan4
-0x5820:hou4
-0x5821:bao3
-0x5822:bao3
-0x5823:yu2
-0x5824:di1
-0x5825:mao2
-0x5826:jie1
-0x5827:ruan2
-0x5828:e4
-0x5829:geng4
-0x582a:kan1
-0x582b:zong1
-0x582c:yu2
-0x582d:huang2
-0x582e:e4
-0x582f:yao2
-0x5830:yan4
-0x5831:bao4
-0x5832:ji2
-0x5833:mei2
-0x5834:chang2
-0x5835:du3
-0x5836:tuo2
-0x5837:yin4
-0x5838:feng2
-0x5839:zhong4
-0x583a:jie4
-0x583b:zhen1
-0x583c:feng1
-0x583d:gang1
-0x583e:chuan3
-0x583f:jian3
-0x5842:xiang4
-0x5843:huang1
-0x5844:leng2
-0x5845:duan4
-0x5847:xuan1
-0x5848:ji4
-0x5849:ji2
-0x584a:kuai4
-0x584b:ying2
-0x584c:ta1
-0x584d:cheng2
-0x584e:yong3
-0x584f:kai3
-0x5850:su4
-0x5851:su4
-0x5852:shi2
-0x5853:mi4
-0x5854:ta3
-0x5855:weng3
-0x5856:cheng2
-0x5857:tu2
-0x5858:tang2
-0x5859:que4
-0x585a:zhong3
-0x585b:li4
-0x585c:peng2
-0x585d:bang4
-0x585e:sai1
-0x585f:zang4
-0x5860:dui1
-0x5861:tian2
-0x5862:wu4
-0x5863:cheng3
-0x5864:xun1
-0x5865:ge2
-0x5866:zhen4
-0x5867:ai4
-0x5868:gong1
-0x5869:yan2
-0x586a:kan3
-0x586b:tian2
-0x586c:yuan2
-0x586d:wen1
-0x586e:xie4
-0x586f:liu4
-0x5871:lang3
-0x5872:chang2
-0x5873:peng2
-0x5874:beng4
-0x5875:chen2
-0x5876:cu4
-0x5877:lu3
-0x5878:ou3
-0x5879:qian4
-0x587a:mei2
-0x587b:mo4
-0x587c:zhuan1
-0x587d:shuang3
-0x587e:shu2
-0x587f:lou3
-0x5880:chi2
-0x5881:man4
-0x5882:biao1
-0x5883:jing4
-0x5884:qi1
-0x5885:shu4
-0x5886:di4
-0x5887:zhang1
-0x5888:kan4
-0x5889:yong1
-0x588a:dian4
-0x588b:chen3
-0x588c:zhi1
-0x588d:xi4
-0x588e:guo1
-0x588f:qiang3
-0x5890:jin4
-0x5891:di1
-0x5892:shang1
-0x5893:mu4
-0x5894:cui1
-0x5895:yan4
-0x5896:ta3
-0x5897:zeng1
-0x5898:qi2
-0x5899:qiang2
-0x589a:liang2
-0x589c:zhui4
-0x589d:qiao1
-0x589e:zeng1
-0x589f:xu1
-0x58a0:shan4
-0x58a1:shan4
-0x58a2:ba2
-0x58a3:pu1
-0x58a4:kuai4
-0x58a5:dong3
-0x58a6:fan2
-0x58a7:que4
-0x58a8:mo4
-0x58a9:dun1
-0x58aa:dun1
-0x58ab:zun1
-0x58ac:di4
-0x58ad:sheng4
-0x58ae:duo4
-0x58af:duo4
-0x58b0:tan2
-0x58b1:deng4
-0x58b2:wu3
-0x58b3:fen2
-0x58b4:huang2
-0x58b5:tan2
-0x58b6:da1
-0x58b7:ye4
-0x58ba:ao4
-0x58bb:qiang2
-0x58bc:ji1
-0x58bd:qiao1
-0x58be:ken3
-0x58bf:yi4
-0x58c0:pi2
-0x58c1:bi4
-0x58c2:dian4
-0x58c3:jiang1
-0x58c4:ye3
-0x58c5:yong1
-0x58c6:bo2
-0x58c7:tan2
-0x58c8:lan3
-0x58c9:ju4
-0x58ca:huai4
-0x58cb:dang4
-0x58cc:rang3
-0x58cd:qian4
-0x58ce:xun1
-0x58cf:lan4
-0x58d0:xi3
-0x58d1:he4
-0x58d2:ai4
-0x58d3:ya1
-0x58d4:dao3
-0x58d5:hao2
-0x58d6:ruan2
-0x58d8:lei3
-0x58d9:kuang4
-0x58da:lu2
-0x58db:yan2
-0x58dc:tan2
-0x58dd:wei2
-0x58de:huai4
-0x58df:long3
-0x58e0:long3
-0x58e1:rui4
-0x58e2:li4
-0x58e3:lin2
-0x58e4:rang3
-0x58e6:xun1
-0x58e7:yan2
-0x58e8:lei2
-0x58e9:ba4
-0x58eb:shi4
-0x58ec:ren2
-0x58ee:zhuang4
-0x58ef:zhuang4
-0x58f0:sheng1
-0x58f1:yi1
-0x58f2:mai4
-0x58f3:ke2
-0x58f4:zhu3
-0x58f5:zhuang4
-0x58f6:hu2
-0x58f7:hu2
-0x58f8:kun3
-0x58f9:yi1
-0x58fa:hu2
-0x58fb:xu4
-0x58fc:kun3
-0x58fd:shou4
-0x58fe:mang3
-0x58ff:zun1
-0x5900:shou4
-0x5901:yi1
-0x5902:zhi3
-0x5903:gu1
-0x5904:chu4
-0x5905:jiang4
-0x5906:feng2
-0x5907:bei4
-0x5909:bian4
-0x590a:sui1
-0x590b:qun1
-0x590c:ling2
-0x590d:fu4
-0x590e:zuo4
-0x590f:xia4
-0x5910:xiong4
-0x5912:nao2
-0x5913:xia4
-0x5914:kui2
-0x5915:xi1
-0x5916:wai4
-0x5917:yuan4
-0x5918:mao3
-0x5919:su4
-0x591a:duo1
-0x591b:duo1
-0x591c:ye4
-0x591d:qing2
-0x591f:gou4
-0x5920:gou4
-0x5921:qi4
-0x5922:meng4
-0x5923:meng4
-0x5924:yin2
-0x5925:huo3
-0x5926:chen4
-0x5927:da4
-0x5928:ze4
-0x5929:tian1
-0x592a:tai4
-0x592b:fu1
-0x592c:guai4
-0x592d:yao1
-0x592e:yang1
-0x592f:hang1
-0x5930:gao3
-0x5931:shi1
-0x5932:ben3
-0x5933:tai4
-0x5934:tou2
-0x5935:yan3
-0x5936:bi3
-0x5937:yi2
-0x5938:kua1
-0x5939:jia1
-0x593a:duo2
-0x593c:kuang3
-0x593d:yun4
-0x593e:jia1
-0x593f:pa1
-0x5940:en1
-0x5941:lian2
-0x5942:huan4
-0x5943:di4
-0x5944:yan3
-0x5945:pao4
-0x5946:quan3
-0x5947:qi2
-0x5948:nai4
-0x5949:feng4
-0x594a:xie2
-0x594b:fen4
-0x594c:dian3
-0x594e:kui2
-0x594f:zou4
-0x5950:huan4
-0x5951:qi4
-0x5952:kai1
-0x5953:she1
-0x5954:ben1
-0x5955:yi4
-0x5956:jiang3
-0x5957:tao4
-0x5958:zang4
-0x5959:ben3
-0x595a:xi1
-0x595b:xiang3
-0x595c:fei3
-0x595d:diao1
-0x595e:xun4
-0x595f:keng1
-0x5960:dian4
-0x5961:ao4
-0x5962:she1
-0x5963:weng3
-0x5964:pan3
-0x5965:ao4
-0x5966:wu4
-0x5967:ao4
-0x5968:jiang3
-0x5969:lian2
-0x596a:duo2
-0x596b:yun1
-0x596c:jiang3
-0x596d:shi4
-0x596e:fen4
-0x596f:huo4
-0x5970:bi4
-0x5971:lian2
-0x5972:duo3
-0x5973:nv3
-0x5974:nu2
-0x5975:ding1
-0x5976:nai3
-0x5977:qian1
-0x5978:jian1
-0x5979:ta1
-0x597a:jiu3
-0x597b:nan2
-0x597c:cha4
-0x597d:hao3
-0x597e:xian1
-0x597f:fan4
-0x5980:ji3
-0x5981:shuo4
-0x5982:ru2
-0x5983:fei1
-0x5984:wang4
-0x5985:hong2
-0x5986:zhuang1
-0x5987:fu4
-0x5988:ma1
-0x5989:dan1
-0x598a:ren4
-0x598b:fu1
-0x598c:jing4
-0x598d:yan2
-0x598e:xie4
-0x598f:wen4
-0x5990:zhong1
-0x5991:pa1
-0x5992:du4
-0x5993:ji4
-0x5994:keng1
-0x5995:zhong4
-0x5996:yao1
-0x5997:jin4
-0x5998:yun2
-0x5999:miao4
-0x599a:pei1
-0x599c:yue4
-0x599d:zhuang1
-0x599e:niu1
-0x599f:yan4
-0x59a0:na4
-0x59a1:xin1
-0x59a2:fen2
-0x59a3:bi3
-0x59a4:yu2
-0x59a5:tuo3
-0x59a6:feng1
-0x59a7:yuan2
-0x59a8:fang2
-0x59a9:wu3
-0x59aa:yu4
-0x59ab:gui1
-0x59ac:du4
-0x59ad:ba2
-0x59ae:ni1
-0x59af:zhou2
-0x59b0:zhuo2
-0x59b1:zhao1
-0x59b2:da2
-0x59b3:nai3
-0x59b4:yuan3
-0x59b5:tou3
-0x59b6:xuan2
-0x59b7:zhi2
-0x59b8:e1
-0x59b9:mei4
-0x59ba:mo4
-0x59bb:qi1
-0x59bc:bi4
-0x59bd:shen1
-0x59be:qie4
-0x59bf:e1
-0x59c0:he2
-0x59c1:xu3
-0x59c2:fa2
-0x59c3:zheng1
-0x59c4:min2
-0x59c5:ban4
-0x59c6:mu3
-0x59c7:fu1
-0x59c8:ling2
-0x59c9:zi3
-0x59ca:zi3
-0x59cb:shi3
-0x59cc:ran3
-0x59cd:shan1
-0x59ce:yang1
-0x59cf:man2
-0x59d0:jie3
-0x59d1:gu1
-0x59d2:si4
-0x59d3:xing4
-0x59d4:wei3
-0x59d5:zi1
-0x59d6:ju4
-0x59d7:shan1
-0x59d8:pin1
-0x59d9:ren4
-0x59da:yao2
-0x59db:tong3
-0x59dc:jiang1
-0x59dd:shu1
-0x59de:ji2
-0x59df:gai1
-0x59e0:shang4
-0x59e1:kuo4
-0x59e2:juan1
-0x59e3:jiao1
-0x59e4:gou4
-0x59e5:mu3
-0x59e6:jian1
-0x59e7:jian1
-0x59e8:yi2
-0x59e9:nian4
-0x59ea:zhi2
-0x59eb:ji1
-0x59ec:ji1
-0x59ed:xian4
-0x59ee:heng2
-0x59ef:guang1
-0x59f0:jun1
-0x59f1:kua1
-0x59f2:yan4
-0x59f3:ming3
-0x59f4:lie4
-0x59f5:pei4
-0x59f6:yan3
-0x59f7:you4
-0x59f8:yan2
-0x59f9:cha4
-0x59fa:shen1
-0x59fb:yin1
-0x59fc:chi3
-0x59fd:gui3
-0x59fe:quan1
-0x59ff:zi1
-0x5a00:song1
-0x5a01:wei1
-0x5a02:hong2
-0x5a03:wa2
-0x5a04:lou2
-0x5a05:ya4
-0x5a06:rao3
-0x5a07:jiao1
-0x5a08:luan2
-0x5a09:ping1
-0x5a0a:xian4
-0x5a0b:shao4
-0x5a0c:li3
-0x5a0d:cheng2
-0x5a0e:xiao4
-0x5a0f:mang2
-0x5a11:suo1
-0x5a12:wu3
-0x5a13:wei3
-0x5a14:ke4
-0x5a15:lai4
-0x5a16:chuo4
-0x5a17:ding4
-0x5a18:niang2
-0x5a19:xing2
-0x5a1a:nan2
-0x5a1b:yu2
-0x5a1c:nuo2
-0x5a1d:pei1
-0x5a1e:nei3
-0x5a1f:juan1
-0x5a20:shen1
-0x5a21:zhi4
-0x5a22:han2
-0x5a23:di4
-0x5a24:zhuang1
-0x5a25:e2
-0x5a26:pin2
-0x5a27:tui4
-0x5a28:han4
-0x5a29:mian3
-0x5a2a:wu2
-0x5a2b:yan2
-0x5a2c:wu3
-0x5a2d:xi1
-0x5a2e:yan2
-0x5a2f:yu2
-0x5a30:si4
-0x5a31:yu2
-0x5a32:wa1
-0x5a34:xian2
-0x5a35:ju1
-0x5a36:qu3
-0x5a37:shui4
-0x5a38:qi1
-0x5a39:xian2
-0x5a3a:zhui1
-0x5a3b:dong1
-0x5a3c:chang1
-0x5a3d:lu4
-0x5a3e:ai3
-0x5a3f:e1
-0x5a40:e1
-0x5a41:lou2
-0x5a42:mian2
-0x5a43:cong2
-0x5a44:pou3
-0x5a45:ju2
-0x5a46:po2
-0x5a47:cai3
-0x5a48:ding2
-0x5a49:wan3
-0x5a4a:biao3
-0x5a4b:xiao1
-0x5a4c:shu3
-0x5a4d:qi3
-0x5a4e:hui1
-0x5a4f:fu4
-0x5a50:e1
-0x5a51:wo3
-0x5a52:tan2
-0x5a53:fei1
-0x5a55:jie2
-0x5a56:tian1
-0x5a57:ni2
-0x5a58:quan2
-0x5a59:jing4
-0x5a5a:hun1
-0x5a5b:jing1
-0x5a5c:qian1
-0x5a5d:dian4
-0x5a5e:xing4
-0x5a5f:hu4
-0x5a60:wa4
-0x5a61:lai2
-0x5a62:bi4
-0x5a63:yin1
-0x5a64:zhou1
-0x5a65:chuo4
-0x5a66:fu4
-0x5a67:jing4
-0x5a68:lun2
-0x5a69:yan4
-0x5a6a:lan2
-0x5a6b:kun1
-0x5a6c:yin2
-0x5a6d:ya4
-0x5a6f:li4
-0x5a70:dian3
-0x5a71:xian2
-0x5a73:hua4
-0x5a74:ying1
-0x5a75:chan2
-0x5a76:shen3
-0x5a77:ting2
-0x5a78:dang4
-0x5a79:yao3
-0x5a7a:wu4
-0x5a7b:nan4
-0x5a7c:ruo4
-0x5a7d:jia3
-0x5a7e:tou1
-0x5a7f:xu4
-0x5a80:yu2
-0x5a81:wei1
-0x5a82:ti2
-0x5a83:rou2
-0x5a84:mei3
-0x5a85:dan1
-0x5a86:ruan3
-0x5a87:qin1
-0x5a89:wu1
-0x5a8a:qian2
-0x5a8b:chun1
-0x5a8c:mao2
-0x5a8d:fu4
-0x5a8e:jie3
-0x5a8f:duan1
-0x5a90:xi1
-0x5a91:zhong4
-0x5a92:mei2
-0x5a93:huang2
-0x5a94:mian2
-0x5a95:an1
-0x5a96:ying1
-0x5a97:xuan1
-0x5a99:wei1
-0x5a9a:mei4
-0x5a9b:yuan4
-0x5a9c:zhen1
-0x5a9d:qiu1
-0x5a9e:ti2
-0x5a9f:xie4
-0x5aa0:tuo3
-0x5aa1:lian4
-0x5aa2:mao4
-0x5aa3:ran3
-0x5aa4:si1
-0x5aa5:pian1
-0x5aa6:wei4
-0x5aa7:wa1
-0x5aa8:jiu4
-0x5aa9:hu2
-0x5aaa:ao3
-0x5aad:xu1
-0x5aae:tou1
-0x5aaf:gui1
-0x5ab0:zou1
-0x5ab1:yao2
-0x5ab2:pi4
-0x5ab3:xi2
-0x5ab4:yuan2
-0x5ab5:ying4
-0x5ab6:rong2
-0x5ab7:ru4
-0x5ab8:chi1
-0x5ab9:liu2
-0x5aba:mei3
-0x5abb:pan2
-0x5abc:ao3
-0x5abd:ma1
-0x5abe:gou4
-0x5abf:kui4
-0x5ac0:qin2
-0x5ac1:jia4
-0x5ac2:sao3
-0x5ac3:zhen1
-0x5ac4:yuan2
-0x5ac5:cha1
-0x5ac6:yong2
-0x5ac7:ming2
-0x5ac8:ying1
-0x5ac9:ji2
-0x5aca:su4
-0x5acb:niao3
-0x5acc:xian2
-0x5acd:tao1
-0x5ace:pang2
-0x5acf:lang2
-0x5ad0:nao3
-0x5ad1:bao2
-0x5ad2:ai4
-0x5ad3:pi4
-0x5ad4:pin2
-0x5ad5:yi4
-0x5ad6:piao4
-0x5ad7:yu4
-0x5ad8:lei2
-0x5ad9:xuan2
-0x5ada:man4
-0x5adb:yi1
-0x5adc:zhang1
-0x5add:kang1
-0x5ade:yong2
-0x5adf:ni4
-0x5ae0:li2
-0x5ae1:di2
-0x5ae2:gui1
-0x5ae3:yan1
-0x5ae4:jin4
-0x5ae5:zhuan1
-0x5ae6:chang2
-0x5ae7:ce4
-0x5ae8:han1
-0x5ae9:nen4
-0x5aea:lao4
-0x5aeb:mo2
-0x5aec:zhe1
-0x5aed:hu4
-0x5aee:hu4
-0x5aef:ao4
-0x5af0:nen4
-0x5af1:qiang2
-0x5af3:pie4
-0x5af4:gu1
-0x5af5:wu3
-0x5af6:jiao2
-0x5af7:tuo3
-0x5af8:zhan3
-0x5af9:mao2
-0x5afa:xian2
-0x5afb:xian2
-0x5afc:mo4
-0x5afd:liao2
-0x5afe:lian2
-0x5aff:hua4
-0x5b00:gui1
-0x5b01:deng1
-0x5b02:zhi1
-0x5b03:xu1
-0x5b05:hua2
-0x5b06:xi1
-0x5b07:hui4
-0x5b08:rao3
-0x5b09:xi1
-0x5b0a:yan4
-0x5b0b:chan2
-0x5b0c:jiao1
-0x5b0d:mei3
-0x5b0e:fan4
-0x5b0f:fan1
-0x5b10:xian1
-0x5b11:yi4
-0x5b12:wei4
-0x5b13:jiao4
-0x5b14:fu4
-0x5b15:shi4
-0x5b16:bi4
-0x5b17:shan4
-0x5b18:sui4
-0x5b19:qiang2
-0x5b1a:lian3
-0x5b1b:huan2
-0x5b1d:niao3
-0x5b1e:dong3
-0x5b1f:yi4
-0x5b20:can2
-0x5b21:ai4
-0x5b22:niang2
-0x5b23:neng2
-0x5b24:ma1
-0x5b25:tiao3
-0x5b26:chou2
-0x5b27:jin4
-0x5b28:ci2
-0x5b29:yu2
-0x5b2a:pin2
-0x5b2c:xu1
-0x5b2d:nai3
-0x5b2e:yan1
-0x5b2f:tai2
-0x5b30:ying1
-0x5b31:can2
-0x5b32:niao3
-0x5b34:ying2
-0x5b35:mian2
-0x5b37:ma1
-0x5b38:shen3
-0x5b39:xing4
-0x5b3a:ni4
-0x5b3b:du2
-0x5b3c:liu3
-0x5b3d:yuan1
-0x5b3e:lan3
-0x5b3f:yan4
-0x5b40:shuang1
-0x5b41:ling2
-0x5b42:jiao3
-0x5b43:niang2
-0x5b44:lan3
-0x5b45:xian1
-0x5b46:ying1
-0x5b47:shuang1
-0x5b48:shuai1
-0x5b49:quan2
-0x5b4a:mi3
-0x5b4b:li2
-0x5b4c:luan2
-0x5b4d:yan2
-0x5b4e:zhu3
-0x5b4f:lan3
-0x5b50:zi3
-0x5b51:jie2
-0x5b52:jue2
-0x5b53:jue2
-0x5b54:kong3
-0x5b55:yun4
-0x5b56:zi1
-0x5b57:zi4
-0x5b58:cun2
-0x5b59:sun1
-0x5b5a:fu2
-0x5b5b:bei4
-0x5b5c:zi1
-0x5b5d:xiao4
-0x5b5e:xin4
-0x5b5f:meng4
-0x5b60:si4
-0x5b61:tai1
-0x5b62:bao1
-0x5b63:ji4
-0x5b64:gu1
-0x5b65:nu2
-0x5b66:xue2
-0x5b68:zhuan3
-0x5b69:hai2
-0x5b6a:luan2
-0x5b6b:sun1
-0x5b6c:huai4
-0x5b6d:mie1
-0x5b6e:cong2
-0x5b6f:qian1
-0x5b70:shu2
-0x5b71:chan2
-0x5b72:ya1
-0x5b73:zi1
-0x5b74:ni3
-0x5b75:fu1
-0x5b76:zi1
-0x5b77:li2
-0x5b78:xue2
-0x5b79:bo4
-0x5b7a:ru2
-0x5b7b:lai2
-0x5b7c:nie4
-0x5b7d:nie4
-0x5b7e:ying1
-0x5b7f:luan2
-0x5b80:mian2
-0x5b81:ning2
-0x5b82:rong3
-0x5b83:ta1
-0x5b84:gui3
-0x5b85:zhai2
-0x5b86:qiong2
-0x5b87:yu3
-0x5b88:shou3
-0x5b89:an1
-0x5b8a:tu2
-0x5b8b:song4
-0x5b8c:wan2
-0x5b8d:rou4
-0x5b8e:yao3
-0x5b8f:hong2
-0x5b90:yi2
-0x5b91:jing3
-0x5b92:zhun1
-0x5b93:mi4
-0x5b94:zhu3
-0x5b95:dang4
-0x5b96:hong2
-0x5b97:zong1
-0x5b98:guan1
-0x5b99:zhou4
-0x5b9a:ding4
-0x5b9b:wan3
-0x5b9c:yi2
-0x5b9d:bao3
-0x5b9e:shi2
-0x5b9f:shi2
-0x5ba0:chong3
-0x5ba1:shen3
-0x5ba2:ke4
-0x5ba3:xuan1
-0x5ba4:shi4
-0x5ba5:you4
-0x5ba6:huan4
-0x5ba7:yi2
-0x5ba8:tiao3
-0x5ba9:shi3
-0x5baa:xian4
-0x5bab:gong1
-0x5bac:cheng2
-0x5bad:qun2
-0x5bae:gong1
-0x5baf:xiao1
-0x5bb0:zai3
-0x5bb1:zha4
-0x5bb2:bao3
-0x5bb3:hai4
-0x5bb4:yan4
-0x5bb5:xiao1
-0x5bb6:jia1
-0x5bb7:shen3
-0x5bb8:chen2
-0x5bb9:rong2
-0x5bba:huang3
-0x5bbb:mi4
-0x5bbc:kou4
-0x5bbd:kuan1
-0x5bbe:bin1
-0x5bbf:su4
-0x5bc0:cai4
-0x5bc1:zan3
-0x5bc2:ji4
-0x5bc3:yuan1
-0x5bc4:ji4
-0x5bc5:yin2
-0x5bc6:mi4
-0x5bc7:kou4
-0x5bc8:qing1
-0x5bc9:que4
-0x5bca:zhen1
-0x5bcb:jian3
-0x5bcc:fu4
-0x5bcd:ning2
-0x5bce:bing4
-0x5bcf:huan2
-0x5bd0:mei4
-0x5bd1:qin3
-0x5bd2:han2
-0x5bd3:yu4
-0x5bd4:shi2
-0x5bd5:ning2
-0x5bd6:jin4
-0x5bd7:ning2
-0x5bd8:zhi4
-0x5bd9:yu3
-0x5bda:bao3
-0x5bdb:kuan1
-0x5bdc:ning2
-0x5bdd:qin3
-0x5bde:mo4
-0x5bdf:cha2
-0x5be0:ju4
-0x5be1:gua3
-0x5be2:qin3
-0x5be3:hu1
-0x5be4:wu4
-0x5be5:liao2
-0x5be6:shi2
-0x5be7:ning2
-0x5be8:zhai4
-0x5be9:shen3
-0x5bea:wei3
-0x5beb:xie3
-0x5bec:kuan1
-0x5bed:hui4
-0x5bee:liao2
-0x5bef:jun4
-0x5bf0:huan2
-0x5bf1:yi4
-0x5bf2:yi2
-0x5bf3:bao3
-0x5bf4:qin4
-0x5bf5:chong3
-0x5bf6:bao3
-0x5bf7:feng1
-0x5bf8:cun4
-0x5bf9:dui4
-0x5bfa:si4
-0x5bfb:xun2
-0x5bfc:dao3
-0x5bfd:lv4
-0x5bfe:dui4
-0x5bff:shou4
-0x5c00:po3
-0x5c01:feng1
-0x5c02:zhuan1
-0x5c03:fu1
-0x5c04:she4
-0x5c05:ke4
-0x5c06:jiang1
-0x5c07:jiang1
-0x5c08:zhuan1
-0x5c09:wei4
-0x5c0a:zun1
-0x5c0b:xun2
-0x5c0c:shu4
-0x5c0d:dui4
-0x5c0e:dao3
-0x5c0f:xiao3
-0x5c10:ji1
-0x5c11:shao3
-0x5c12:er3
-0x5c13:er3
-0x5c14:er3
-0x5c15:ga3
-0x5c16:jian1
-0x5c17:shu2
-0x5c18:chen2
-0x5c19:shang4
-0x5c1a:shang4
-0x5c1c:ga2
-0x5c1d:chang2
-0x5c1e:liao4
-0x5c1f:xian3
-0x5c20:xian3
-0x5c22:wang1
-0x5c23:wang1
-0x5c24:you2
-0x5c25:liao4
-0x5c26:liao4
-0x5c27:yao2
-0x5c28:mang2
-0x5c29:wang1
-0x5c2a:wang1
-0x5c2b:wang1
-0x5c2c:ga4
-0x5c2d:yao2
-0x5c2e:duo4
-0x5c2f:kui4
-0x5c30:zhong3
-0x5c31:jiu4
-0x5c32:gan1
-0x5c33:gu3
-0x5c34:gan1
-0x5c35:tui2
-0x5c36:gan1
-0x5c37:gan1
-0x5c38:shi1
-0x5c39:yin3
-0x5c3a:chi3
-0x5c3b:kao1
-0x5c3c:ni2
-0x5c3d:jin3
-0x5c3e:wei3
-0x5c3f:niao4
-0x5c40:ju2
-0x5c41:pi4
-0x5c42:ceng2
-0x5c43:xi4
-0x5c44:bi1
-0x5c45:ju1
-0x5c46:jie4
-0x5c47:tian2
-0x5c48:qu1
-0x5c49:ti4
-0x5c4a:jie4
-0x5c4b:wu1
-0x5c4c:diao3
-0x5c4d:shi1
-0x5c4e:shi3
-0x5c4f:ping2
-0x5c50:ji1
-0x5c51:xie4
-0x5c52:chen2
-0x5c53:xi4
-0x5c54:ni2
-0x5c55:zhan3
-0x5c56:xi1
-0x5c58:man3
-0x5c59:e1
-0x5c5a:lou4
-0x5c5b:ping2
-0x5c5c:ti4
-0x5c5d:fei4
-0x5c5e:shu3
-0x5c5f:xie4
-0x5c60:tu2
-0x5c61:lv3
-0x5c62:lv3
-0x5c63:xi3
-0x5c64:ceng2
-0x5c65:lv3
-0x5c66:ju4
-0x5c67:xie4
-0x5c68:ju4
-0x5c69:jue1
-0x5c6a:liao2
-0x5c6b:jue2
-0x5c6c:shu3
-0x5c6d:xi4
-0x5c6e:che4
-0x5c6f:tun2
-0x5c70:ni4
-0x5c71:shan1
-0x5c73:xian1
-0x5c74:li4
-0x5c75:xue1
-0x5c78:long2
-0x5c79:yi4
-0x5c7a:qi3
-0x5c7b:ren4
-0x5c7c:wu4
-0x5c7d:han4
-0x5c7e:shen1
-0x5c7f:yu3
-0x5c80:chu1
-0x5c81:sui4
-0x5c82:qi3
-0x5c84:yue4
-0x5c85:ban3
-0x5c86:yao3
-0x5c87:ang2
-0x5c88:ya2
-0x5c89:wu4
-0x5c8a:jie2
-0x5c8b:e4
-0x5c8c:ji2
-0x5c8d:qian1
-0x5c8e:fen1
-0x5c8f:yuan2
-0x5c90:qi2
-0x5c91:cen2
-0x5c92:qian2
-0x5c93:qi2
-0x5c94:cha4
-0x5c95:jie4
-0x5c96:qu1
-0x5c97:gang3
-0x5c98:xian4
-0x5c99:ao4
-0x5c9a:lan2
-0x5c9b:dao3
-0x5c9c:ba1
-0x5c9d:zuo4
-0x5c9e:zuo4
-0x5c9f:yang3
-0x5ca0:ju4
-0x5ca1:gang1
-0x5ca2:ke3
-0x5ca3:gou3
-0x5ca4:xue4
-0x5ca5:bei1
-0x5ca6:li4
-0x5ca7:tiao2
-0x5ca8:ju1
-0x5ca9:yan2
-0x5caa:fu2
-0x5cab:xiu4
-0x5cac:jia3
-0x5cad:ling2
-0x5cae:tuo2
-0x5caf:pei1
-0x5cb0:you3
-0x5cb1:dai4
-0x5cb2:kuang4
-0x5cb3:yue4
-0x5cb4:qu1
-0x5cb5:hu4
-0x5cb6:po4
-0x5cb7:min2
-0x5cb8:an4
-0x5cb9:tiao2
-0x5cba:ling2
-0x5cbb:chi2
-0x5cbd:dong1
-0x5cbf:kui1
-0x5cc0:xiu4
-0x5cc1:mao3
-0x5cc2:tong2
-0x5cc3:xue2
-0x5cc4:yi4
-0x5cc6:he1
-0x5cc7:ke1
-0x5cc8:luo4
-0x5cc9:e1
-0x5cca:fu4
-0x5ccb:xun2
-0x5ccc:die2
-0x5ccd:lu4
-0x5cce:an1
-0x5ccf:er3
-0x5cd0:gai1
-0x5cd1:quan2
-0x5cd2:tong2
-0x5cd3:yi2
-0x5cd4:mu3
-0x5cd5:shi2
-0x5cd6:an1
-0x5cd7:wei2
-0x5cd8:hu1
-0x5cd9:zhi4
-0x5cda:mi4
-0x5cdb:li3
-0x5cdc:ji1
-0x5cdd:tong2
-0x5cde:wei2
-0x5cdf:you4
-0x5ce1:xia2
-0x5ce2:li3
-0x5ce3:yao2
-0x5ce4:jiao4
-0x5ce5:zheng1
-0x5ce6:luan2
-0x5ce7:jiao1
-0x5ce8:e2
-0x5ce9:e2
-0x5cea:yu4
-0x5ceb:ye2
-0x5cec:bu1
-0x5ced:qiao4
-0x5cee:qun1
-0x5cef:feng1
-0x5cf0:feng1
-0x5cf1:nao2
-0x5cf2:li3
-0x5cf3:you2
-0x5cf4:xian4
-0x5cf5:hong2
-0x5cf6:dao3
-0x5cf7:shen1
-0x5cf8:cheng2
-0x5cf9:tu2
-0x5cfa:geng3
-0x5cfb:jun4
-0x5cfc:hao4
-0x5cfd:xia2
-0x5cfe:yin1
-0x5cff:yu3
-0x5d00:lang4
-0x5d01:kan3
-0x5d02:lao2
-0x5d03:lai2
-0x5d04:xian3
-0x5d05:que4
-0x5d06:kong1
-0x5d07:chong2
-0x5d08:chong2
-0x5d09:ta4
-0x5d0b:hua2
-0x5d0c:ju1
-0x5d0d:lai2
-0x5d0e:qi2
-0x5d0f:min2
-0x5d10:kun1
-0x5d11:kun1
-0x5d12:zu2
-0x5d13:gu4
-0x5d14:cui1
-0x5d15:ya2
-0x5d16:ya2
-0x5d17:gang3
-0x5d18:lun2
-0x5d19:lun2
-0x5d1a:leng2
-0x5d1b:jue2
-0x5d1c:duo1
-0x5d1d:zheng1
-0x5d1e:guo1
-0x5d1f:yin2
-0x5d20:dong1
-0x5d21:han2
-0x5d22:zheng1
-0x5d23:wei3
-0x5d24:yao2
-0x5d25:pi3
-0x5d26:yan1
-0x5d27:song1
-0x5d28:jie2
-0x5d29:beng1
-0x5d2a:zu2
-0x5d2b:jue2
-0x5d2c:dong1
-0x5d2d:zhan3
-0x5d2e:gu4
-0x5d2f:yin2
-0x5d31:ze2
-0x5d32:huang2
-0x5d33:yu2
-0x5d34:wei1
-0x5d35:yang2
-0x5d36:feng1
-0x5d37:qiu2
-0x5d38:dun4
-0x5d39:ti2
-0x5d3a:yi3
-0x5d3b:zhi4
-0x5d3c:shi4
-0x5d3d:zai3
-0x5d3e:yao3
-0x5d3f:e4
-0x5d40:zhu4
-0x5d41:kan1
-0x5d42:lv4
-0x5d43:yan3
-0x5d44:mei3
-0x5d45:gan1
-0x5d46:ji1
-0x5d47:ji1
-0x5d48:huan3
-0x5d49:ting2
-0x5d4a:sheng4
-0x5d4b:mei2
-0x5d4c:qian4
-0x5d4d:wu4
-0x5d4e:yu2
-0x5d4f:zong1
-0x5d50:lan2
-0x5d51:jue2
-0x5d52:yan2
-0x5d53:yan2
-0x5d54:wei3
-0x5d55:zong1
-0x5d56:cha2
-0x5d57:sui4
-0x5d58:rong2
-0x5d5a:qin1
-0x5d5b:yu2
-0x5d5d:lou3
-0x5d5e:tu2
-0x5d5f:dui1
-0x5d60:xi1
-0x5d61:weng1
-0x5d62:cang1
-0x5d63:dang1
-0x5d64:hong2
-0x5d65:jie2
-0x5d66:ai2
-0x5d67:liu2
-0x5d68:wu3
-0x5d69:song1
-0x5d6a:qiao1
-0x5d6b:zi1
-0x5d6c:wei2
-0x5d6d:beng1
-0x5d6e:dian1
-0x5d6f:cuo2
-0x5d70:qian3
-0x5d71:yong3
-0x5d72:nie4
-0x5d73:cuo2
-0x5d74:ji2
-0x5d77:song3
-0x5d78:zong1
-0x5d79:jiang4
-0x5d7a:liao2
-0x5d7c:chan3
-0x5d7d:die2
-0x5d7e:cen1
-0x5d7f:ding3
-0x5d80:tu1
-0x5d81:lou3
-0x5d82:zhang4
-0x5d83:zhan3
-0x5d84:zhan3
-0x5d85:ao2
-0x5d86:cao2
-0x5d87:qu1
-0x5d88:qiang1
-0x5d89:zui1
-0x5d8a:zui3
-0x5d8b:dao3
-0x5d8c:dao3
-0x5d8d:xi2
-0x5d8e:yu4
-0x5d8f:bo2
-0x5d90:long2
-0x5d91:xiang3
-0x5d92:ceng2
-0x5d93:bo1
-0x5d94:qin1
-0x5d95:jiao1
-0x5d96:yan3
-0x5d97:lao2
-0x5d98:zhan4
-0x5d99:lin2
-0x5d9a:liao2
-0x5d9b:liao2
-0x5d9c:jin1
-0x5d9d:deng4
-0x5d9e:duo4
-0x5d9f:zun1
-0x5da0:jiao4
-0x5da1:gui4
-0x5da2:yao2
-0x5da3:qiao2
-0x5da4:yao2
-0x5da5:jue2
-0x5da6:zhan1
-0x5da7:yi4
-0x5da8:xue2
-0x5da9:nao2
-0x5daa:ye4
-0x5dab:ye4
-0x5dac:yi2
-0x5dad:e4
-0x5dae:xian3
-0x5daf:ji2
-0x5db0:xie4
-0x5db1:ke3
-0x5db2:xi1
-0x5db3:di4
-0x5db4:ao4
-0x5db5:zui3
-0x5db7:yi2
-0x5db8:rong2
-0x5db9:dao3
-0x5dba:ling3
-0x5dbb:za2
-0x5dbc:yu3
-0x5dbd:yue4
-0x5dbe:yin3
-0x5dc0:jie1
-0x5dc1:li4
-0x5dc2:sui3
-0x5dc3:long2
-0x5dc4:long2
-0x5dc5:dian1
-0x5dc6:ying2
-0x5dc7:xi1
-0x5dc8:ju2
-0x5dc9:chan2
-0x5dca:ying3
-0x5dcb:kui1
-0x5dcc:yan2
-0x5dcd:wei1
-0x5dce:nao2
-0x5dcf:quan2
-0x5dd0:chao3
-0x5dd1:cuan2
-0x5dd2:luan2
-0x5dd3:dian1
-0x5dd4:dian1
-0x5dd6:yan2
-0x5dd7:yan2
-0x5dd8:yan3
-0x5dd9:nao2
-0x5dda:yan3
-0x5ddb:chuan1
-0x5ddc:gui4
-0x5ddd:chuan1
-0x5dde:zhou1
-0x5ddf:huang1
-0x5de0:jing1
-0x5de1:xun2
-0x5de2:chao2
-0x5de3:chao2
-0x5de4:lie1
-0x5de5:gong1
-0x5de6:zuo3
-0x5de7:qiao3
-0x5de8:ju4
-0x5de9:gong3
-0x5deb:wu1
-0x5dee:cha4
-0x5def:qiu2
-0x5df0:qiu2
-0x5df1:ji3
-0x5df2:yi3
-0x5df3:si4
-0x5df4:ba1
-0x5df5:zhi1
-0x5df6:zhao1
-0x5df7:xiang4
-0x5df8:yi2
-0x5df9:jin3
-0x5dfa:xun4
-0x5dfb:juan4
-0x5dfd:xun4
-0x5dfe:jin1
-0x5dff:fu2
-0x5e00:za1
-0x5e01:bi4
-0x5e02:shi4
-0x5e03:bu4
-0x5e04:ding1
-0x5e05:shuai4
-0x5e06:fan1
-0x5e07:nie4
-0x5e08:shi1
-0x5e09:fen1
-0x5e0a:pa4
-0x5e0b:zhi3
-0x5e0c:xi1
-0x5e0d:hu4
-0x5e0e:dan4
-0x5e0f:wei2
-0x5e10:zhang4
-0x5e11:tang3
-0x5e12:dai4
-0x5e13:ma4
-0x5e14:pei4
-0x5e15:pa4
-0x5e16:tie1
-0x5e17:fu2
-0x5e18:lian2
-0x5e19:zhi4
-0x5e1a:zhou3
-0x5e1b:bo2
-0x5e1c:zhi4
-0x5e1d:di4
-0x5e1e:mo4
-0x5e1f:yi4
-0x5e20:yi4
-0x5e21:ping2
-0x5e22:qia4
-0x5e23:juan4
-0x5e24:ru2
-0x5e25:shuai4
-0x5e26:dai4
-0x5e27:zheng4
-0x5e28:shui4
-0x5e29:qiao4
-0x5e2a:zhen1
-0x5e2b:shi1
-0x5e2c:qun2
-0x5e2d:xi2
-0x5e2e:bang1
-0x5e2f:dai4
-0x5e30:gui1
-0x5e31:chou2
-0x5e32:ping2
-0x5e33:zhang4
-0x5e34:sha1
-0x5e35:wan1
-0x5e36:dai4
-0x5e37:wei2
-0x5e38:chang2
-0x5e39:sha4
-0x5e3a:qi2
-0x5e3b:ze2
-0x5e3c:guo2
-0x5e3d:mao4
-0x5e3e:du3
-0x5e3f:hou2
-0x5e40:zheng4
-0x5e41:xu1
-0x5e42:mi4
-0x5e43:wei2
-0x5e44:wo4
-0x5e45:fu2
-0x5e46:yi4
-0x5e47:bang1
-0x5e48:ping2
-0x5e4a:gong1
-0x5e4b:pan2
-0x5e4c:huang3
-0x5e4d:dao1
-0x5e4e:mi4
-0x5e4f:jia1
-0x5e50:teng2
-0x5e51:hui1
-0x5e52:zhong1
-0x5e53:shan1
-0x5e54:man4
-0x5e55:mu4
-0x5e56:biao1
-0x5e57:guo2
-0x5e58:ze2
-0x5e59:mu4
-0x5e5a:bang1
-0x5e5b:zhang4
-0x5e5c:jiong3
-0x5e5d:chan3
-0x5e5e:fu2
-0x5e5f:zhi4
-0x5e60:hu1
-0x5e61:fan1
-0x5e62:chuang2
-0x5e63:bi4
-0x5e66:mi4
-0x5e67:qiao1
-0x5e68:chan1
-0x5e69:fen2
-0x5e6a:meng2
-0x5e6b:bang1
-0x5e6c:chou2
-0x5e6d:mie4
-0x5e6e:chu2
-0x5e6f:jie2
-0x5e70:xian3
-0x5e71:lan2
-0x5e72:gan1
-0x5e73:ping2
-0x5e74:nian2
-0x5e75:qian1
-0x5e76:bing4
-0x5e77:bing4
-0x5e78:xing4
-0x5e79:gan4
-0x5e7a:yao1
-0x5e7b:huan4
-0x5e7c:you4
-0x5e7d:you1
-0x5e7e:ji3
-0x5e7f:guang3
-0x5e80:pi3
-0x5e81:ting1
-0x5e82:ze4
-0x5e83:guang3
-0x5e84:zhuang1
-0x5e85:mo5
-0x5e86:qing4
-0x5e87:bi4
-0x5e88:qin2
-0x5e89:dun4
-0x5e8a:chuang2
-0x5e8b:gui3
-0x5e8c:ya3
-0x5e8d:bai4
-0x5e8e:jie4
-0x5e8f:xu4
-0x5e90:lu2
-0x5e91:wu3
-0x5e93:ku4
-0x5e94:ying4
-0x5e95:di3
-0x5e96:pao2
-0x5e97:dian4
-0x5e98:ya1
-0x5e99:miao4
-0x5e9a:geng1
-0x5e9b:ci1
-0x5e9c:fu3
-0x5e9d:tong2
-0x5e9e:pang2
-0x5e9f:fei4
-0x5ea0:xiang2
-0x5ea1:yi3
-0x5ea2:zhi4
-0x5ea3:tiao1
-0x5ea4:zhi4
-0x5ea5:xiu1
-0x5ea6:du4
-0x5ea7:zuo4
-0x5ea8:xiao1
-0x5ea9:tu2
-0x5eaa:gui3
-0x5eab:ku4
-0x5eac:pang2
-0x5ead:ting2
-0x5eae:you3
-0x5eaf:bu1
-0x5eb0:ding1
-0x5eb1:cheng3
-0x5eb2:lai2
-0x5eb3:bei1
-0x5eb4:ji2
-0x5eb5:an1
-0x5eb6:shu4
-0x5eb7:kang1
-0x5eb8:yong1
-0x5eb9:tuo3
-0x5eba:song1
-0x5ebb:shu4
-0x5ebc:qing3
-0x5ebd:yu4
-0x5ebe:yu3
-0x5ebf:miao4
-0x5ec0:sou1
-0x5ec1:ce4
-0x5ec2:xiang1
-0x5ec3:fei4
-0x5ec4:jiu4
-0x5ec5:he2
-0x5ec6:hui4
-0x5ec7:liu4
-0x5ec8:sha4
-0x5ec9:lian2
-0x5eca:lang2
-0x5ecb:sou1
-0x5ecc:zhi4
-0x5ecd:pou3
-0x5ece:qing3
-0x5ecf:jiu4
-0x5ed0:jiu4
-0x5ed1:jin3
-0x5ed2:ao2
-0x5ed3:kuo4
-0x5ed4:lou2
-0x5ed5:yin4
-0x5ed6:liao4
-0x5ed7:dai4
-0x5ed8:lu4
-0x5ed9:yi4
-0x5eda:chu2
-0x5edb:chan2
-0x5edc:tu1
-0x5edd:si1
-0x5ede:xin1
-0x5edf:miao4
-0x5ee0:chang3
-0x5ee1:wu3
-0x5ee2:fei4
-0x5ee3:guang3
-0x5ee5:kuai4
-0x5ee6:bi4
-0x5ee7:qiang2
-0x5ee8:xie4
-0x5ee9:lin3
-0x5eea:lin3
-0x5eeb:liao2
-0x5eec:lu2
-0x5eee:ying2
-0x5eef:xian1
-0x5ef0:ting1
-0x5ef1:yong1
-0x5ef2:li2
-0x5ef3:ting1
-0x5ef4:yin3
-0x5ef5:xun2
-0x5ef6:yan2
-0x5ef7:ting2
-0x5ef8:di2
-0x5ef9:po4
-0x5efa:jian4
-0x5efb:hui2
-0x5efc:nai3
-0x5efd:hui2
-0x5efe:gong3
-0x5eff:nian4
-0x5f00:kai1
-0x5f01:bian4
-0x5f02:yi4
-0x5f03:qi4
-0x5f04:nong4
-0x5f05:fen2
-0x5f06:ju3
-0x5f07:yan3
-0x5f08:yi4
-0x5f09:zang4
-0x5f0a:bi4
-0x5f0b:yi4
-0x5f0c:yi1
-0x5f0d:er4
-0x5f0e:san1
-0x5f0f:shi4
-0x5f10:er4
-0x5f11:shi4
-0x5f12:shi4
-0x5f13:gong1
-0x5f14:diao4
-0x5f15:yin3
-0x5f16:hu4
-0x5f17:fu2
-0x5f18:hong2
-0x5f19:wu1
-0x5f1a:tui2
-0x5f1b:chi2
-0x5f1c:jiang4
-0x5f1d:ba4
-0x5f1e:shen3
-0x5f1f:di4
-0x5f20:zhang1
-0x5f21:jue2
-0x5f22:tao1
-0x5f23:fu3
-0x5f24:di3
-0x5f25:mi2
-0x5f26:xian2
-0x5f27:hu2
-0x5f28:chao1
-0x5f29:nu3
-0x5f2a:jing4
-0x5f2b:zhen3
-0x5f2c:yi2
-0x5f2d:mi3
-0x5f2e:quan1
-0x5f2f:wan1
-0x5f30:shao1
-0x5f31:ruo4
-0x5f32:xuan1
-0x5f33:jing4
-0x5f34:dun1
-0x5f35:zhang1
-0x5f36:jiang4
-0x5f37:qiang2
-0x5f38:peng2
-0x5f39:dan4
-0x5f3a:qiang2
-0x5f3b:bi4
-0x5f3c:bi4
-0x5f3d:she4
-0x5f3e:dan4
-0x5f3f:jian3
-0x5f40:gou4
-0x5f42:fa1
-0x5f43:bi4
-0x5f44:kou1
-0x5f46:bie4
-0x5f47:xiao1
-0x5f48:dan4
-0x5f49:kuo4
-0x5f4a:qiang2
-0x5f4b:hong2
-0x5f4c:mi2
-0x5f4d:kuo4
-0x5f4e:wan1
-0x5f4f:jue2
-0x5f50:ji4
-0x5f51:ji4
-0x5f52:gui1
-0x5f53:dang1
-0x5f54:lu4
-0x5f55:lu4
-0x5f56:tuan4
-0x5f57:hui4
-0x5f58:zhi4
-0x5f59:hui4
-0x5f5a:hui4
-0x5f5b:yi2
-0x5f5c:yi2
-0x5f5d:yi2
-0x5f5e:yi2
-0x5f5f:huo4
-0x5f60:huo4
-0x5f61:shan1
-0x5f62:xing2
-0x5f63:wen2
-0x5f64:tong2
-0x5f65:yan4
-0x5f66:yan4
-0x5f67:yu4
-0x5f68:chi1
-0x5f69:cai3
-0x5f6a:biao1
-0x5f6b:diao1
-0x5f6c:bin1
-0x5f6d:peng2
-0x5f6e:yong3
-0x5f6f:piao1
-0x5f70:zhang1
-0x5f71:ying3
-0x5f72:chi1
-0x5f73:chi4
-0x5f74:zhuo2
-0x5f75:tuo3
-0x5f76:ji2
-0x5f77:pang2
-0x5f78:zhong1
-0x5f79:yi4
-0x5f7a:wang2
-0x5f7b:che4
-0x5f7c:bi3
-0x5f7d:chi2
-0x5f7e:ling3
-0x5f7f:fu2
-0x5f80:wang3
-0x5f81:zheng1
-0x5f82:cu2
-0x5f83:wang3
-0x5f84:jing4
-0x5f85:dai4
-0x5f86:xi1
-0x5f87:xun4
-0x5f88:hen3
-0x5f89:yang2
-0x5f8a:huai2
-0x5f8b:lv4
-0x5f8c:hou4
-0x5f8d:wa1
-0x5f8e:cheng3
-0x5f8f:zhi4
-0x5f90:xu2
-0x5f91:jing4
-0x5f92:tu2
-0x5f93:cong2
-0x5f95:lai2
-0x5f96:cong2
-0x5f97:de2
-0x5f98:pai2
-0x5f99:xi3
-0x5f9b:qi4
-0x5f9c:chang2
-0x5f9d:zhi4
-0x5f9e:cong2
-0x5f9f:zhou1
-0x5fa0:lai2
-0x5fa1:yu4
-0x5fa2:xie4
-0x5fa3:jie4
-0x5fa4:jian4
-0x5fa5:chi2
-0x5fa6:jia3
-0x5fa7:bian4
-0x5fa8:huang2
-0x5fa9:fu4
-0x5faa:xun2
-0x5fab:wei3
-0x5fac:pang2
-0x5fad:yao2
-0x5fae:wei1
-0x5faf:xi1
-0x5fb0:zheng1
-0x5fb1:piao4
-0x5fb2:chi2
-0x5fb3:de2
-0x5fb4:zheng1
-0x5fb5:zheng1
-0x5fb6:bie4
-0x5fb7:de2
-0x5fb8:chong1
-0x5fb9:che4
-0x5fba:jiao3
-0x5fbb:wei4
-0x5fbc:jiao4
-0x5fbd:hui1
-0x5fbe:mei2
-0x5fbf:long4
-0x5fc0:xiang1
-0x5fc1:bao4
-0x5fc2:qu2
-0x5fc3:xin1
-0x5fc5:bi4
-0x5fc6:yi4
-0x5fc7:le4
-0x5fc8:ren2
-0x5fc9:dao1
-0x5fca:ding4
-0x5fcb:gai3
-0x5fcc:ji4
-0x5fcd:ren3
-0x5fce:ren2
-0x5fcf:chan4
-0x5fd0:tan3
-0x5fd1:te4
-0x5fd2:te4
-0x5fd3:gan1
-0x5fd4:qi4
-0x5fd5:shi4
-0x5fd6:cun3
-0x5fd7:zhi4
-0x5fd8:wang4
-0x5fd9:mang2
-0x5fda:xi1
-0x5fdb:fan2
-0x5fdc:ying1
-0x5fdd:tian3
-0x5fde:min2
-0x5fdf:min2
-0x5fe0:zhong1
-0x5fe1:chong1
-0x5fe2:wu4
-0x5fe3:ji2
-0x5fe4:wu3
-0x5fe5:xi4
-0x5fe6:ye4
-0x5fe7:you1
-0x5fe8:wan4
-0x5fe9:cong1
-0x5fea:zhong1
-0x5feb:kuai4
-0x5fec:yu4
-0x5fed:bian4
-0x5fee:zhi4
-0x5fef:qi2
-0x5ff0:cui4
-0x5ff1:chen2
-0x5ff2:tai4
-0x5ff3:tun2
-0x5ff4:qian2
-0x5ff5:nian4
-0x5ff6:hun2
-0x5ff7:xiong1
-0x5ff8:niu3
-0x5ff9:wang3
-0x5ffa:xian1
-0x5ffb:xin1
-0x5ffc:kang1
-0x5ffd:hu1
-0x5ffe:kai4
-0x5fff:fen4
-0x6000:huai2
-0x6001:tai4
-0x6002:song3
-0x6003:wu3
-0x6004:ou4
-0x6005:chang4
-0x6006:chuang4
-0x6007:ju4
-0x6008:yi4
-0x6009:bao3
-0x600a:chao1
-0x600b:min2
-0x600c:pei1
-0x600d:zuo4
-0x600e:zen3
-0x600f:yang4
-0x6010:kou4
-0x6011:ban4
-0x6012:nu4
-0x6013:nao2
-0x6014:zheng1
-0x6015:pa4
-0x6016:bu4
-0x6017:tie1
-0x6018:gu4
-0x6019:hu4
-0x601a:ju4
-0x601b:da2
-0x601c:lian2
-0x601d:si1
-0x601e:chou1
-0x601f:di4
-0x6020:dai4
-0x6021:yi2
-0x6022:tu2
-0x6023:you2
-0x6024:fu1
-0x6025:ji2
-0x6026:peng1
-0x6027:xing4
-0x6028:yuan4
-0x6029:ni2
-0x602a:guai4
-0x602b:fu2
-0x602c:xi4
-0x602d:bi4
-0x602e:you1
-0x602f:qie4
-0x6030:xuan4
-0x6031:cong1
-0x6032:bing3
-0x6033:huang3
-0x6034:xu4
-0x6035:chu4
-0x6036:pi1
-0x6037:xi1
-0x6038:xi1
-0x6039:tan1
-0x603b:zong3
-0x603c:dui4
-0x603f:yi4
-0x6040:chi3
-0x6041:ren4
-0x6042:xun2
-0x6043:shi4
-0x6044:xi4
-0x6045:lao3
-0x6046:heng2
-0x6047:kuang1
-0x6048:mu2
-0x6049:zhi3
-0x604a:xie2
-0x604b:lian4
-0x604c:tiao1
-0x604d:huang3
-0x604e:die2
-0x604f:hao3
-0x6050:kong3
-0x6051:gui3
-0x6052:heng2
-0x6053:xi1
-0x6054:xiao4
-0x6055:shu4
-0x6057:kua3
-0x6058:qiu1
-0x6059:yang4
-0x605a:hui4
-0x605b:hui2
-0x605c:chi4
-0x605d:jia2
-0x605e:yi2
-0x605f:xiong1
-0x6060:guai4
-0x6061:lin4
-0x6062:hui1
-0x6063:zi4
-0x6064:xu4
-0x6065:chi3
-0x6066:xiang4
-0x6067:nv4
-0x6068:hen4
-0x6069:en1
-0x606a:ke4
-0x606b:tong1
-0x606c:tian2
-0x606d:gong1
-0x606e:quan2
-0x606f:xi1
-0x6070:qia4
-0x6071:yue4
-0x6072:peng1
-0x6073:ken3
-0x6074:de2
-0x6075:hui4
-0x6076:e4
-0x6078:tong4
-0x6079:yan4
-0x607a:kai3
-0x607b:ce4
-0x607c:nao3
-0x607d:yun4
-0x607e:mang2
-0x607f:yong3
-0x6080:yong3
-0x6081:yuan1
-0x6082:pi1
-0x6083:kun3
-0x6084:qiao3
-0x6085:yue4
-0x6086:yu4
-0x6087:yu4
-0x6088:jie4
-0x6089:xi1
-0x608a:zhe2
-0x608b:lin4
-0x608c:ti4
-0x608d:han4
-0x608e:hao4
-0x608f:qie4
-0x6090:ti4
-0x6091:bu4
-0x6092:yi4
-0x6093:qian4
-0x6094:hui3
-0x6095:xi1
-0x6096:bei4
-0x6097:man2
-0x6098:yi1
-0x6099:heng1
-0x609a:song3
-0x609b:quan1
-0x609c:cheng3
-0x609d:kui1
-0x609e:wu4
-0x609f:wu4
-0x60a0:you1
-0x60a1:li2
-0x60a2:liang4
-0x60a3:huan4
-0x60a4:cong1
-0x60a5:yi4
-0x60a6:yue4
-0x60a7:li4
-0x60a8:nin2
-0x60a9:nao3
-0x60aa:e4
-0x60ab:que4
-0x60ac:xuan2
-0x60ad:qian1
-0x60ae:wu4
-0x60af:min3
-0x60b0:cong2
-0x60b1:fei3
-0x60b2:bei1
-0x60b3:duo2
-0x60b4:cui4
-0x60b5:chang4
-0x60b6:men4
-0x60b7:li4
-0x60b8:ji4
-0x60b9:guan4
-0x60ba:guan4
-0x60bb:xing4
-0x60bc:dao4
-0x60bd:qi1
-0x60be:kong1
-0x60bf:tian3
-0x60c0:lun2
-0x60c1:xi1
-0x60c2:kan3
-0x60c3:kun1
-0x60c4:ni4
-0x60c5:qing2
-0x60c6:chou2
-0x60c7:dun1
-0x60c8:guo3
-0x60c9:chan1
-0x60ca:liang2
-0x60cb:wan3
-0x60cc:yuan1
-0x60cd:jin1
-0x60ce:ji4
-0x60cf:lin2
-0x60d0:yu4
-0x60d1:huo4
-0x60d2:he2
-0x60d3:quan2
-0x60d4:tan2
-0x60d5:ti4
-0x60d6:ti4
-0x60d7:nie1
-0x60d8:wang3
-0x60d9:chuo4
-0x60da:hu1
-0x60db:hun1
-0x60dc:xi1
-0x60dd:chang3
-0x60de:xin1
-0x60df:wei2
-0x60e0:hui4
-0x60e1:e4
-0x60e2:rui3
-0x60e3:zong3
-0x60e4:jian1
-0x60e5:yong3
-0x60e6:dian4
-0x60e7:ju4
-0x60e8:can3
-0x60e9:cheng2
-0x60ea:de2
-0x60eb:bei4
-0x60ec:qie4
-0x60ed:can2
-0x60ee:dan4
-0x60ef:guan4
-0x60f0:duo4
-0x60f1:nao3
-0x60f2:yun4
-0x60f3:xiang3
-0x60f4:zhui4
-0x60f5:die4
-0x60f6:huang2
-0x60f7:chun3
-0x60f8:qiong2
-0x60f9:re3
-0x60fa:xing1
-0x60fb:ce4
-0x60fc:bian3
-0x60fd:hun1
-0x60fe:zong1
-0x60ff:ti2
-0x6100:qiao3
-0x6101:chou2
-0x6102:bei4
-0x6103:xuan1
-0x6104:wei1
-0x6105:ge2
-0x6106:qian1
-0x6107:wei3
-0x6108:yu4
-0x6109:yu2
-0x610a:bi4
-0x610b:xuan1
-0x610c:huan4
-0x610d:min3
-0x610e:bi4
-0x610f:yi4
-0x6110:mian3
-0x6111:yong3
-0x6112:kai4
-0x6113:dang4
-0x6114:yin1
-0x6115:e4
-0x6116:chen2
-0x6117:mou4
-0x6118:ke4
-0x6119:ke4
-0x611a:yu2
-0x611b:ai4
-0x611c:qie4
-0x611d:yan3
-0x611e:nuo4
-0x611f:gan3
-0x6120:yun4
-0x6121:zong3
-0x6122:sai1
-0x6123:leng4
-0x6124:fen4
-0x6126:kui4
-0x6127:kui4
-0x6128:que4
-0x6129:gong1
-0x612a:yun2
-0x612b:su4
-0x612c:su4
-0x612d:qi2
-0x612e:yao2
-0x612f:song3
-0x6130:huang3
-0x6131:ji2
-0x6132:gu3
-0x6133:ju4
-0x6134:chuang4
-0x6135:ni4
-0x6136:xie2
-0x6137:kai3
-0x6138:zheng3
-0x6139:yong3
-0x613a:cao3
-0x613b:sun4
-0x613c:shen4
-0x613d:bo2
-0x613e:kai4
-0x613f:yuan4
-0x6140:xie2
-0x6141:hun4
-0x6142:yong3
-0x6143:yang3
-0x6144:li4
-0x6145:sao1
-0x6146:tao1
-0x6147:yin1
-0x6148:ci2
-0x6149:xu4
-0x614a:qian4
-0x614b:tai4
-0x614c:huang1
-0x614d:yun4
-0x614e:shen4
-0x614f:ming3
-0x6151:she4
-0x6152:cong2
-0x6153:piao4
-0x6154:mo4
-0x6155:mu4
-0x6156:guo2
-0x6157:chi4
-0x6158:can3
-0x6159:can2
-0x615a:can2
-0x615b:cui2
-0x615c:min3
-0x615d:te4
-0x615e:zhang1
-0x615f:tong4
-0x6160:ao4
-0x6161:shuang3
-0x6162:man4
-0x6163:guan4
-0x6164:que4
-0x6165:zao4
-0x6166:jiu4
-0x6167:hui4
-0x6168:kai3
-0x6169:lian2
-0x616a:ou4
-0x616b:song3
-0x616c:jin3
-0x616d:yin4
-0x616e:lv4
-0x616f:shang1
-0x6170:wei4
-0x6171:tuan2
-0x6172:man2
-0x6173:qian1
-0x6174:she4
-0x6175:yong1
-0x6176:qing4
-0x6177:kang1
-0x6178:di4
-0x6179:zhi2
-0x617a:lou2
-0x617b:juan4
-0x617c:qi1
-0x617d:qi1
-0x617e:yu4
-0x617f:ping2
-0x6180:liao2
-0x6181:cong1
-0x6182:you1
-0x6183:chong1
-0x6184:zhi4
-0x6185:tong4
-0x6186:cheng1
-0x6187:qi4
-0x6188:qu1
-0x6189:peng2
-0x618a:bei4
-0x618b:bie1
-0x618c:chun2
-0x618d:jiao1
-0x618e:zeng1
-0x618f:chi4
-0x6190:lian2
-0x6191:ping2
-0x6192:kui4
-0x6193:hui4
-0x6194:qiao2
-0x6195:cheng2
-0x6196:yin4
-0x6197:yin4
-0x6198:xi3
-0x6199:xi3
-0x619a:dan4
-0x619b:tan2
-0x619c:duo3
-0x619d:dui4
-0x619e:dui4
-0x619f:su4
-0x61a0:jue2
-0x61a1:ce4
-0x61a2:xiao1
-0x61a3:fan2
-0x61a4:fen4
-0x61a5:lao2
-0x61a6:lao4
-0x61a7:chong1
-0x61a8:han1
-0x61a9:qi4
-0x61aa:xian2
-0x61ab:min3
-0x61ac:jing3
-0x61ad:liao3
-0x61ae:wu3
-0x61af:can3
-0x61b0:jue2
-0x61b1:cu4
-0x61b2:xian4
-0x61b3:tan3
-0x61b4:sheng2
-0x61b5:pi1
-0x61b6:yi4
-0x61b7:chu3
-0x61b8:xian1
-0x61b9:nao2
-0x61ba:dan4
-0x61bb:tan3
-0x61bc:jing3
-0x61bd:song1
-0x61be:han4
-0x61bf:jiao1
-0x61c0:wai4
-0x61c1:huan2
-0x61c2:dong3
-0x61c3:qin2
-0x61c4:qin2
-0x61c5:qu2
-0x61c6:cao3
-0x61c7:ken3
-0x61c8:xie4
-0x61c9:ying1
-0x61ca:ao4
-0x61cb:mao4
-0x61cc:yi4
-0x61cd:lin3
-0x61ce:se4
-0x61cf:jun4
-0x61d0:huai2
-0x61d1:men4
-0x61d2:lan3
-0x61d3:ai4
-0x61d4:lin3
-0x61d5:yan1
-0x61d6:gua1
-0x61d7:xia4
-0x61d8:chi4
-0x61d9:yu3
-0x61da:yin4
-0x61db:dai1
-0x61dc:meng4
-0x61dd:ai4
-0x61de:meng2
-0x61df:dui4
-0x61e0:qi2
-0x61e1:mo3
-0x61e2:lan2
-0x61e3:men4
-0x61e4:chou2
-0x61e5:zhi4
-0x61e6:nuo4
-0x61e7:nuo4
-0x61e8:yan1
-0x61e9:yang3
-0x61ea:bo2
-0x61eb:zhi2
-0x61ec:kuang4
-0x61ed:kuang4
-0x61ee:you3
-0x61ef:fu1
-0x61f0:liu2
-0x61f1:mie4
-0x61f2:cheng2
-0x61f4:chan4
-0x61f5:meng3
-0x61f6:lan3
-0x61f7:huai2
-0x61f8:xuan2
-0x61f9:rang4
-0x61fa:chan4
-0x61fb:ji4
-0x61fc:ju4
-0x61fd:huan1
-0x61fe:she4
-0x61ff:yi4
-0x6200:lian4
-0x6201:nan3
-0x6202:mi2
-0x6203:tang3
-0x6204:jue2
-0x6205:gang4
-0x6206:gang4
-0x6207:gang4
-0x6208:ge1
-0x6209:yue4
-0x620a:wu4
-0x620b:jian1
-0x620c:xu1
-0x620d:shu4
-0x620e:rong2
-0x620f:xi4
-0x6210:cheng2
-0x6211:wo3
-0x6212:jie4
-0x6213:ge1
-0x6214:jian1
-0x6215:qiang1
-0x6216:huo4
-0x6217:qiang1
-0x6218:zhan4
-0x6219:dong4
-0x621a:qi1
-0x621b:jia2
-0x621c:die2
-0x621d:zei2
-0x621e:jia2
-0x621f:ji3
-0x6220:shi4
-0x6221:kan1
-0x6222:ji2
-0x6223:kui2
-0x6224:gai4
-0x6225:deng3
-0x6226:zhan4
-0x6227:chuang1
-0x6228:ge1
-0x6229:jian3
-0x622a:jie2
-0x622b:yu4
-0x622c:jian3
-0x622d:yan3
-0x622e:lu4
-0x622f:xi4
-0x6230:zhan4
-0x6231:xi4
-0x6232:xi4
-0x6233:chuo1
-0x6234:dai4
-0x6235:qu2
-0x6236:hu4
-0x6237:hu4
-0x6238:hu4
-0x6239:e4
-0x623a:shi4
-0x623b:li4
-0x623c:mao3
-0x623d:hu4
-0x623e:li4
-0x623f:fang2
-0x6240:suo3
-0x6241:bian3
-0x6242:dian4
-0x6243:jiong1
-0x6244:shang3
-0x6245:yi2
-0x6246:yi3
-0x6247:shan4
-0x6248:hu4
-0x6249:fei1
-0x624a:yan3
-0x624b:shou3
-0x624d:cai2
-0x624e:zha1
-0x624f:qiu2
-0x6250:le4
-0x6251:pu1
-0x6252:ba1
-0x6253:da3
-0x6254:reng1
-0x6255:fu2
-0x6257:zai4
-0x6258:tuo1
-0x6259:zhang4
-0x625a:diao1
-0x625b:kang2
-0x625c:yu1
-0x625d:ku1
-0x625e:han4
-0x625f:shen1
-0x6260:cha1
-0x6261:yi3
-0x6262:gu3
-0x6263:kou4
-0x6264:wu4
-0x6265:tuo1
-0x6266:qian1
-0x6267:zhi2
-0x6268:ren4
-0x6269:kuo4
-0x626a:men2
-0x626b:sao3
-0x626c:yang2
-0x626d:niu3
-0x626e:ban4
-0x626f:che3
-0x6270:rao3
-0x6271:xi1
-0x6272:qian2
-0x6273:ban1
-0x6274:jia2
-0x6275:yu2
-0x6276:fu2
-0x6277:ao4
-0x6278:xi1
-0x6279:pi1
-0x627a:zhi3
-0x627b:zi4
-0x627c:e4
-0x627d:dun4
-0x627e:zhao3
-0x627f:cheng2
-0x6280:ji4
-0x6281:yan3
-0x6282:kuang2
-0x6283:bian4
-0x6284:chao1
-0x6285:ju1
-0x6286:wen4
-0x6287:hu2
-0x6288:yue4
-0x6289:jue2
-0x628a:ba3
-0x628b:qin4
-0x628c:zhen3
-0x628d:zheng3
-0x628e:yun3
-0x628f:wan2
-0x6290:nu4
-0x6291:yi4
-0x6292:shu1
-0x6293:zhua1
-0x6294:pou2
-0x6295:tou2
-0x6296:dou3
-0x6297:kang4
-0x6298:zhe2
-0x6299:pou2
-0x629a:fu3
-0x629b:pao1
-0x629c:ba2
-0x629d:ao3
-0x629e:ze2
-0x629f:tuan2
-0x62a0:kou1
-0x62a1:lun2
-0x62a2:qiang3
-0x62a4:hu4
-0x62a5:bao4
-0x62a6:bing3
-0x62a7:zhi3
-0x62a8:peng1
-0x62a9:tan1
-0x62aa:pu1
-0x62ab:pi1
-0x62ac:tai2
-0x62ad:yao3
-0x62ae:zhen3
-0x62af:zha1
-0x62b0:yang3
-0x62b1:bao4
-0x62b2:he1
-0x62b3:ni3
-0x62b4:yi4
-0x62b5:di3
-0x62b6:chi4
-0x62b7:pi1
-0x62b8:za1
-0x62b9:mo3
-0x62ba:mei4
-0x62bb:shen4
-0x62bc:ya1
-0x62bd:chou1
-0x62be:qu1
-0x62bf:min3
-0x62c0:chu4
-0x62c1:jia1
-0x62c2:fu2
-0x62c3:zhan3
-0x62c4:zhu3
-0x62c5:dan4
-0x62c6:chai1
-0x62c7:mu3
-0x62c8:nian2
-0x62c9:la1
-0x62ca:fu3
-0x62cb:pao1
-0x62cc:ban4
-0x62cd:pai1
-0x62ce:ling1
-0x62cf:na2
-0x62d0:guai3
-0x62d1:qian2
-0x62d2:ju4
-0x62d3:tuo4
-0x62d4:ba2
-0x62d5:tuo1
-0x62d6:tuo1
-0x62d7:ao3
-0x62d8:ju1
-0x62d9:zhuo2
-0x62da:pan4
-0x62db:zhao1
-0x62dc:bai4
-0x62dd:bai4
-0x62de:di3
-0x62df:ni3
-0x62e0:ju4
-0x62e1:kuo4
-0x62e2:long3
-0x62e3:jian3
-0x62e5:yong3
-0x62e6:lan2
-0x62e7:ning2
-0x62e8:bo1
-0x62e9:ze2
-0x62ea:qian1
-0x62eb:hen2
-0x62ec:kuo4
-0x62ed:shi4
-0x62ee:jie2
-0x62ef:zheng3
-0x62f0:nin3
-0x62f1:gong3
-0x62f2:gong3
-0x62f3:quan2
-0x62f4:shuan1
-0x62f5:cun2
-0x62f6:zan3
-0x62f7:kao3
-0x62f8:chi3
-0x62f9:xie2
-0x62fa:ce4
-0x62fb:hui1
-0x62fc:pin1
-0x62fd:ye4
-0x62fe:shi2
-0x62ff:na2
-0x6300:bo4
-0x6301:chi2
-0x6302:gua4
-0x6303:zhi4
-0x6304:kuo4
-0x6305:duo3
-0x6306:duo3
-0x6307:zhi3
-0x6308:qie4
-0x6309:an4
-0x630a:nong4
-0x630b:zhen4
-0x630c:ge2
-0x630d:jiao4
-0x630e:ku1
-0x630f:dong4
-0x6310:ru2
-0x6311:tiao1
-0x6312:lie4
-0x6313:zha1
-0x6314:lv3
-0x6315:die2
-0x6316:wa1
-0x6317:jue2
-0x6319:ju3
-0x631a:zhi4
-0x631b:luan2
-0x631c:ya4
-0x631d:zhua1
-0x631e:ta4
-0x631f:xie2
-0x6320:nao2
-0x6321:dang3
-0x6322:jiao3
-0x6323:zheng1
-0x6324:ji3
-0x6325:hui1
-0x6326:xun2
-0x6328:ai1
-0x6329:tuo1
-0x632a:nuo2
-0x632b:cuo4
-0x632c:bo2
-0x632d:geng3
-0x632e:ti3
-0x632f:zhen4
-0x6330:cheng2
-0x6331:suo1
-0x6332:suo1
-0x6333:keng1
-0x6334:mei3
-0x6335:long4
-0x6336:ju2
-0x6337:peng2
-0x6338:jian3
-0x6339:yi4
-0x633a:ting3
-0x633b:shan1
-0x633c:nuo4
-0x633d:wan3
-0x633e:xie2
-0x633f:cha1
-0x6340:feng1
-0x6341:jiao3
-0x6342:wu3
-0x6343:jun4
-0x6344:jiu4
-0x6345:tong3
-0x6346:kun3
-0x6347:huo4
-0x6348:tu2
-0x6349:zhuo1
-0x634a:pou2
-0x634b:le4
-0x634c:ba1
-0x634d:han4
-0x634e:shao1
-0x634f:nie1
-0x6350:juan1
-0x6351:ze2
-0x6352:song3
-0x6353:ye2
-0x6354:jue2
-0x6355:bu3
-0x6356:huan2
-0x6357:bu4
-0x6358:zun4
-0x6359:yi4
-0x635a:zhai1
-0x635b:lv3
-0x635c:sou1
-0x635d:tuo1
-0x635e:lao1
-0x635f:sun3
-0x6360:bang1
-0x6361:jian3
-0x6362:huan4
-0x6363:dao3
-0x6365:wan4
-0x6366:qin2
-0x6367:peng3
-0x6368:she3
-0x6369:lie4
-0x636a:min2
-0x636b:men2
-0x636c:fu3
-0x636d:bai3
-0x636e:ju4
-0x636f:dao3
-0x6370:wo3
-0x6371:ai2
-0x6372:juan3
-0x6373:yue4
-0x6374:zong3
-0x6375:chen3
-0x6376:chui2
-0x6377:jie2
-0x6378:tu1
-0x6379:ben4
-0x637a:na4
-0x637b:nian3
-0x637c:nuo2
-0x637d:zu2
-0x637e:wo4
-0x637f:xi1
-0x6380:xian1
-0x6381:cheng2
-0x6382:dian1
-0x6383:sao3
-0x6384:lun1
-0x6385:qing4
-0x6386:gang1
-0x6387:duo2
-0x6388:shou4
-0x6389:diao4
-0x638a:pou2
-0x638b:di3
-0x638c:zhang3
-0x638d:gun3
-0x638e:ji3
-0x638f:tao1
-0x6390:qia1
-0x6391:qi2
-0x6392:pai2
-0x6393:shu2
-0x6394:qian1
-0x6395:ling4
-0x6396:ye4
-0x6397:ya4
-0x6398:jue2
-0x6399:zheng1
-0x639a:liang3
-0x639b:gua4
-0x639c:yi3
-0x639d:huo4
-0x639e:shan4
-0x639f:zheng3
-0x63a0:lve4
-0x63a1:cai3
-0x63a2:tan4
-0x63a3:che4
-0x63a4:bing1
-0x63a5:jie1
-0x63a6:ti4
-0x63a7:kong4
-0x63a8:tui1
-0x63a9:yan3
-0x63aa:cuo4
-0x63ab:zou1
-0x63ac:ju2
-0x63ad:tian4
-0x63ae:qian2
-0x63af:ken4
-0x63b0:bai1
-0x63b1:shou3
-0x63b2:jie1
-0x63b3:lu3
-0x63b4:guo2
-0x63b7:zhi2
-0x63b8:dan3
-0x63ba:xian1
-0x63bb:sao1
-0x63bc:guan4
-0x63bd:peng4
-0x63be:yuan4
-0x63bf:nuo4
-0x63c0:jian3
-0x63c1:zhen1
-0x63c2:jiu1
-0x63c3:jian1
-0x63c4:yu2
-0x63c5:yan2
-0x63c6:kui2
-0x63c7:nan3
-0x63c8:hong1
-0x63c9:rou2
-0x63ca:pi4
-0x63cb:wei1
-0x63cc:sai1
-0x63cd:zou4
-0x63ce:xuan1
-0x63cf:miao2
-0x63d0:ti2
-0x63d1:nie1
-0x63d2:cha1
-0x63d3:shi4
-0x63d4:zong3
-0x63d5:zhen4
-0x63d6:yi1
-0x63d7:shun3
-0x63d8:heng2
-0x63d9:bian4
-0x63da:yang2
-0x63db:huan4
-0x63dc:yan3
-0x63dd:zuan4
-0x63de:an3
-0x63df:xu1
-0x63e0:ya4
-0x63e1:wo4
-0x63e2:ke4
-0x63e3:chuai3
-0x63e4:ji2
-0x63e5:ti4
-0x63e6:la2
-0x63e7:la4
-0x63e8:cheng2
-0x63e9:kai1
-0x63ea:jiu1
-0x63eb:jiu1
-0x63ec:tu2
-0x63ed:jie1
-0x63ee:hui1
-0x63ef:geng1
-0x63f0:chong4
-0x63f1:shuo4
-0x63f2:she2
-0x63f3:xie4
-0x63f4:yuan2
-0x63f5:qian2
-0x63f6:ye2
-0x63f7:cha1
-0x63f8:zha1
-0x63f9:bei1
-0x63fa:yao2
-0x63fd:lan3
-0x63fe:wen4
-0x63ff:qin4
-0x6400:chan1
-0x6401:ge1
-0x6402:lou3
-0x6403:zong3
-0x6404:geng1
-0x6405:jiao3
-0x6406:gou4
-0x6407:qin4
-0x6408:yong3
-0x6409:que4
-0x640a:chou1
-0x640b:chi3
-0x640c:zhan3
-0x640d:sun3
-0x640e:sun1
-0x640f:bo2
-0x6410:chu4
-0x6411:rong3
-0x6412:beng4
-0x6413:cuo1
-0x6414:sao1
-0x6415:ke4
-0x6416:yao2
-0x6417:dao3
-0x6418:zhi1
-0x6419:nu4
-0x641a:xie2
-0x641b:jian1
-0x641c:sou1
-0x641d:qiu3
-0x641e:gao3
-0x641f:xian3
-0x6420:shuo4
-0x6421:sang3
-0x6422:jin4
-0x6423:mie4
-0x6424:e4
-0x6425:chui2
-0x6426:nuo4
-0x6427:shan1
-0x6428:ta4
-0x6429:jie2
-0x642a:tang2
-0x642b:pan2
-0x642c:ban1
-0x642d:da1
-0x642e:li4
-0x642f:tao1
-0x6430:hu2
-0x6431:zhi4
-0x6432:wa1
-0x6433:xia2
-0x6434:qian1
-0x6435:wen4
-0x6436:qiang3
-0x6437:tian2
-0x6438:zhen1
-0x6439:e4
-0x643a:xi1
-0x643b:nuo4
-0x643c:quan2
-0x643d:cha2
-0x643e:zha4
-0x643f:ge2
-0x6440:wu3
-0x6441:en4
-0x6442:she4
-0x6443:kang2
-0x6444:she4
-0x6445:shu1
-0x6446:bai3
-0x6447:yao2
-0x6448:bin4
-0x6449:sou1
-0x644a:tan1
-0x644b:sa4
-0x644c:chan3
-0x644d:suo1
-0x644e:liao2
-0x644f:chong1
-0x6450:chuang1
-0x6451:guo2
-0x6452:bing4
-0x6453:feng2
-0x6454:shuai1
-0x6455:di4
-0x6456:qi4
-0x6458:zhai1
-0x6459:lian3
-0x645a:tang2
-0x645b:chi1
-0x645c:guan4
-0x645d:lu4
-0x645e:luo4
-0x645f:lou3
-0x6460:zong3
-0x6461:gai4
-0x6462:hu4
-0x6463:zha1
-0x6464:chuang3
-0x6465:tang4
-0x6466:hua4
-0x6467:cui1
-0x6468:nai2
-0x6469:mo2
-0x646a:jiang1
-0x646b:gui1
-0x646c:ying4
-0x646d:zhi2
-0x646e:ao2
-0x646f:zhi4
-0x6470:nie4
-0x6471:man2
-0x6472:shan4
-0x6473:kou1
-0x6474:shu1
-0x6475:suo3
-0x6476:tuan2
-0x6477:jiao3
-0x6478:mo1
-0x6479:mo2
-0x647a:zhe2
-0x647b:shan3
-0x647c:keng1
-0x647d:piao1
-0x647e:jiang4
-0x647f:yin1
-0x6480:gou4
-0x6481:qian1
-0x6482:liao4
-0x6483:ji2
-0x6484:ying1
-0x6485:jue1
-0x6486:pie1
-0x6487:pie1
-0x6488:lao1
-0x6489:dun1
-0x648a:xian4
-0x648b:ruan2
-0x648c:kui4
-0x648d:zan3
-0x648e:yi4
-0x648f:xun2
-0x6490:cheng1
-0x6491:cheng1
-0x6492:sa1
-0x6493:nao2
-0x6494:heng4
-0x6495:si1
-0x6496:qian3
-0x6497:huang2
-0x6498:da1
-0x6499:zun3
-0x649a:nian3
-0x649b:lin3
-0x649c:zheng3
-0x649d:hui1
-0x649e:zhuang4
-0x649f:jiao3
-0x64a0:ji3
-0x64a1:cao1
-0x64a2:dan3
-0x64a3:dan3
-0x64a4:che4
-0x64a5:bo1
-0x64a6:che3
-0x64a7:jue2
-0x64a8:xiao1
-0x64a9:liao1
-0x64aa:ben4
-0x64ab:fu3
-0x64ac:qiao4
-0x64ad:bo1
-0x64ae:cuo1
-0x64af:zhuo2
-0x64b0:zhuan4
-0x64b1:tuo3
-0x64b2:pu1
-0x64b3:qin4
-0x64b4:dun1
-0x64b5:nian3
-0x64b7:xie2
-0x64b8:lu3
-0x64b9:jiao3
-0x64ba:cuan1
-0x64bb:ta4
-0x64bc:han4
-0x64bd:qiao4
-0x64be:zhua1
-0x64bf:jian3
-0x64c0:gan3
-0x64c1:yong1
-0x64c2:lei2
-0x64c3:kuo3
-0x64c4:lu3
-0x64c5:shan4
-0x64c6:zhuo2
-0x64c7:ze2
-0x64c8:pu1
-0x64c9:chuo4
-0x64ca:ji1
-0x64cb:dang3
-0x64cc:suo3
-0x64cd:cao1
-0x64ce:qing2
-0x64cf:jing4
-0x64d0:huan4
-0x64d1:jie1
-0x64d2:qin2
-0x64d3:kuai3
-0x64d4:dan1
-0x64d5:xi1
-0x64d6:ge3
-0x64d7:pi4
-0x64d8:bo4
-0x64d9:ao4
-0x64da:ju4
-0x64db:ye4
-0x64de:sou3
-0x64df:mi2
-0x64e0:ji3
-0x64e1:tai2
-0x64e2:zhuo2
-0x64e3:dao3
-0x64e4:xing3
-0x64e5:lan3
-0x64e6:ca1
-0x64e7:ju3
-0x64e8:ye2
-0x64e9:ru3
-0x64ea:ye4
-0x64eb:ye4
-0x64ec:ni3
-0x64ed:wo4
-0x64ee:ji2
-0x64ef:bin4
-0x64f0:ning2
-0x64f1:ge1
-0x64f2:zhi4
-0x64f3:jie2
-0x64f4:kuo4
-0x64f5:mo2
-0x64f6:jian4
-0x64f7:xie2
-0x64f8:lie4
-0x64f9:tan1
-0x64fa:bai3
-0x64fb:sou3
-0x64fc:lu3
-0x64fd:lve4
-0x64fe:rao3
-0x64ff:zhi2
-0x6500:pan1
-0x6501:yang3
-0x6502:lei4
-0x6503:sa4
-0x6504:shu1
-0x6505:zan3
-0x6506:nian3
-0x6507:xian3
-0x6508:jun4
-0x6509:huo4
-0x650a:li4
-0x650b:la4
-0x650c:han4
-0x650d:ying2
-0x650e:lu2
-0x650f:long3
-0x6510:qian1
-0x6511:qian1
-0x6512:zan3
-0x6513:qian1
-0x6514:lan2
-0x6515:san1
-0x6516:ying1
-0x6517:mei2
-0x6518:rang4
-0x6519:chan1
-0x651b:cuan1
-0x651c:xie2
-0x651d:she4
-0x651e:luo3
-0x651f:jun4
-0x6520:mi2
-0x6521:li2
-0x6522:zan3
-0x6523:luan2
-0x6524:tan1
-0x6525:zuan4
-0x6526:li4
-0x6527:dian1
-0x6528:wa1
-0x6529:dang3
-0x652a:jiao3
-0x652b:jue2
-0x652c:lan3
-0x652d:li4
-0x652e:nang3
-0x652f:zhi1
-0x6530:gui4
-0x6531:gui3
-0x6532:qi1
-0x6533:xin2
-0x6534:pu1
-0x6535:sui1
-0x6536:shou1
-0x6537:kao3
-0x6538:you1
-0x6539:gai3
-0x653a:yi3
-0x653b:gong1
-0x653c:gan1
-0x653d:ban1
-0x653e:fang4
-0x653f:zheng4
-0x6540:bo2
-0x6541:dian1
-0x6542:kou4
-0x6543:min3
-0x6544:wu4
-0x6545:gu4
-0x6546:he2
-0x6547:ce4
-0x6548:xiao4
-0x6549:mi3
-0x654a:chu4
-0x654b:ge2
-0x654c:di2
-0x654d:xu4
-0x654e:jiao4
-0x654f:min3
-0x6550:chen2
-0x6551:jiu4
-0x6552:zhen4
-0x6553:duo2
-0x6554:yu3
-0x6555:chi4
-0x6556:ao2
-0x6557:bai4
-0x6558:xu4
-0x6559:jiao4
-0x655a:duo2
-0x655b:lian4
-0x655c:nie4
-0x655d:bi4
-0x655e:chang3
-0x655f:dian3
-0x6560:duo2
-0x6561:yi4
-0x6562:gan3
-0x6563:san4
-0x6564:ke3
-0x6565:yan4
-0x6566:dun1
-0x6567:qi3
-0x6568:dou3
-0x6569:xiao4
-0x656a:duo2
-0x656b:jiao4
-0x656c:jing4
-0x656d:yang2
-0x656e:xia2
-0x656f:min2
-0x6570:shu4
-0x6571:ai2
-0x6572:qiao1
-0x6573:ai2
-0x6574:zheng3
-0x6575:di2
-0x6576:zhen4
-0x6577:fu1
-0x6578:shu4
-0x6579:liao2
-0x657a:qu1
-0x657b:xiong4
-0x657c:xi3
-0x657d:jiao3
-0x657f:jiao3
-0x6580:zhuo2
-0x6581:yi4
-0x6582:lian3
-0x6583:bi4
-0x6584:li4
-0x6585:xiao4
-0x6586:xiao4
-0x6587:wen2
-0x6588:xue2
-0x6589:qi2
-0x658a:qi2
-0x658b:zhai1
-0x658c:bin1
-0x658d:jue2
-0x658e:zhai1
-0x6590:fei3
-0x6591:ban1
-0x6592:ban1
-0x6593:lan2
-0x6594:yu3
-0x6595:lan2
-0x6596:wei3
-0x6597:dou3
-0x6598:sheng1
-0x6599:liao4
-0x659a:jia3
-0x659b:hu2
-0x659c:xie2
-0x659d:jia3
-0x659e:yu3
-0x659f:zhen1
-0x65a0:jiao4
-0x65a1:wo4
-0x65a2:tou3
-0x65a3:chu4
-0x65a4:jin1
-0x65a5:chi4
-0x65a6:yin2
-0x65a7:fu3
-0x65a8:qiang1
-0x65a9:zhan3
-0x65aa:qu2
-0x65ab:zhuo2
-0x65ac:zhan3
-0x65ad:duan4
-0x65ae:zhuo2
-0x65af:si1
-0x65b0:xin1
-0x65b1:zhuo2
-0x65b2:zhuo2
-0x65b3:qin2
-0x65b4:lin2
-0x65b5:zhuo2
-0x65b6:chu4
-0x65b7:duan4
-0x65b8:zhu3
-0x65b9:fang1
-0x65ba:xie4
-0x65bb:hang2
-0x65bc:yu2
-0x65bd:shi1
-0x65be:pei4
-0x65bf:you2
-0x65c1:pang2
-0x65c2:qi2
-0x65c3:zhan1
-0x65c4:mao2
-0x65c5:lv3
-0x65c6:pei4
-0x65c7:pi1
-0x65c8:liu2
-0x65c9:fu1
-0x65ca:fang3
-0x65cb:xuan2
-0x65cc:jing1
-0x65cd:jing1
-0x65ce:ni3
-0x65cf:zu2
-0x65d0:zhao4
-0x65d1:yi3
-0x65d2:liu2
-0x65d3:shao1
-0x65d4:jian4
-0x65d6:yi3
-0x65d7:qi2
-0x65d8:zhi4
-0x65d9:fan1
-0x65da:piao1
-0x65db:fan1
-0x65dc:zhan1
-0x65dd:guai4
-0x65de:sui4
-0x65df:yu2
-0x65e0:wu2
-0x65e1:ji4
-0x65e2:ji4
-0x65e3:ji4
-0x65e4:huo4
-0x65e5:ri4
-0x65e6:dan4
-0x65e7:jiu4
-0x65e8:zhi3
-0x65e9:zao3
-0x65ea:xie2
-0x65eb:tiao1
-0x65ec:xun2
-0x65ed:xu4
-0x65ee:xu4
-0x65ef:xu4
-0x65f0:gan4
-0x65f1:han4
-0x65f2:tai2
-0x65f3:di4
-0x65f4:xu1
-0x65f5:chan3
-0x65f6:shi2
-0x65f7:kuang4
-0x65f8:yang2
-0x65f9:shi2
-0x65fa:wang4
-0x65fb:min2
-0x65fc:min2
-0x65fd:tun1
-0x65fe:chun1
-0x65ff:wu3
-0x6600:yun2
-0x6601:bei4
-0x6602:ang2
-0x6603:ze4
-0x6604:ban3
-0x6605:jie2
-0x6606:kun1
-0x6607:sheng1
-0x6608:hu4
-0x6609:fang3
-0x660a:hao4
-0x660b:gui4
-0x660c:chang1
-0x660d:xuan1
-0x660e:ming2
-0x660f:hun1
-0x6610:fen1
-0x6611:qin3
-0x6612:hu1
-0x6613:yi4
-0x6614:xi1
-0x6615:xin1
-0x6616:yan2
-0x6617:ze4
-0x6618:fang3
-0x6619:tan2
-0x661a:shen4
-0x661b:ju4
-0x661c:yang2
-0x661d:zan3
-0x661e:bing3
-0x661f:xing1
-0x6620:ying4
-0x6621:xuan4
-0x6622:pei3
-0x6623:zhen3
-0x6624:ling1
-0x6625:chun1
-0x6626:hao4
-0x6627:mei4
-0x6628:zuo2
-0x6629:mo4
-0x662a:bian4
-0x662b:xu3
-0x662c:hun1
-0x662d:zhao1
-0x662e:zong4
-0x662f:shi4
-0x6630:shi4
-0x6631:yu4
-0x6632:fei4
-0x6633:die2
-0x6634:mao3
-0x6635:ni4
-0x6636:chang3
-0x6637:wen1
-0x6638:dong1
-0x6639:ai3
-0x663a:bing3
-0x663b:ang2
-0x663c:zhou4
-0x663d:long2
-0x663e:xian3
-0x663f:kuang4
-0x6640:tiao3
-0x6641:chao2
-0x6642:shi2
-0x6643:huang3
-0x6644:huang3
-0x6645:xuan1
-0x6646:kui2
-0x6647:xu1
-0x6648:jiao3
-0x6649:jin4
-0x664a:zhi3
-0x664b:jin4
-0x664c:shang3
-0x664d:tong2
-0x664e:hong3
-0x664f:yan4
-0x6650:gai1
-0x6651:xiang3
-0x6652:shai4
-0x6653:xiao3
-0x6654:ye1
-0x6655:yun1
-0x6656:hui1
-0x6657:han2
-0x6658:han4
-0x6659:jun4
-0x665a:wan3
-0x665b:xian4
-0x665c:kun1
-0x665d:zhou4
-0x665e:xi1
-0x665f:sheng4
-0x6660:sheng2
-0x6661:bu1
-0x6662:zhe2
-0x6663:zhe1
-0x6664:wu4
-0x6665:han4
-0x6666:hui4
-0x6667:hao4
-0x6668:chen2
-0x6669:wan3
-0x666a:tian3
-0x666b:zhuo2
-0x666c:zui4
-0x666d:zhou3
-0x666e:pu3
-0x666f:jing3
-0x6670:xi1
-0x6671:shan3
-0x6672:yi3
-0x6673:xi4
-0x6674:qing2
-0x6675:qi3
-0x6676:jing1
-0x6677:gui3
-0x6678:zhen3
-0x6679:yi4
-0x667a:zhi4
-0x667b:an3
-0x667c:wan3
-0x667d:lin2
-0x667e:liang4
-0x667f:chang1
-0x6680:wang3
-0x6681:xiao3
-0x6682:zan4
-0x6684:xuan1
-0x6685:xuan3
-0x6686:yi2
-0x6687:xia2
-0x6688:yun1
-0x6689:hui1
-0x668a:fu3
-0x668b:min3
-0x668c:kui2
-0x668d:he4
-0x668e:ying4
-0x668f:du3
-0x6690:wei3
-0x6691:shu3
-0x6692:qing2
-0x6693:mao4
-0x6694:nan2
-0x6695:jian3
-0x6696:nuan3
-0x6697:an4
-0x6698:yang2
-0x6699:chun1
-0x669a:yao2
-0x669b:suo3
-0x669c:jin4
-0x669d:ming2
-0x669e:jiao3
-0x669f:kai3
-0x66a0:gao3
-0x66a1:weng3
-0x66a2:chang4
-0x66a3:qi4
-0x66a4:hao4
-0x66a5:yan4
-0x66a6:li4
-0x66a7:ai4
-0x66a8:ji4
-0x66a9:gui4
-0x66aa:men3
-0x66ab:zan4
-0x66ac:xie4
-0x66ad:hao4
-0x66ae:mu4
-0x66af:mo4
-0x66b0:cong1
-0x66b1:ni4
-0x66b2:zhang1
-0x66b3:hui4
-0x66b4:bao4
-0x66b5:han4
-0x66b6:xuan2
-0x66b7:chuan2
-0x66b8:liao2
-0x66b9:xian1
-0x66ba:dan4
-0x66bb:jing3
-0x66bc:pie1
-0x66bd:lin2
-0x66be:tun1
-0x66bf:xi3
-0x66c0:yi4
-0x66c1:ji4
-0x66c2:huang4
-0x66c3:tai4
-0x66c4:ye4
-0x66c5:ye4
-0x66c6:li4
-0x66c7:tan2
-0x66c8:tong2
-0x66c9:xiao3
-0x66ca:fei4
-0x66cb:qin3
-0x66cc:zhao4
-0x66cd:hao4
-0x66ce:yi4
-0x66cf:xiang4
-0x66d0:xing1
-0x66d1:sen1
-0x66d2:jiao3
-0x66d3:bao4
-0x66d4:jing4
-0x66d5:yan4
-0x66d6:ai4
-0x66d7:ye4
-0x66d8:ru2
-0x66d9:shu4
-0x66da:meng2
-0x66db:xun1
-0x66dc:yao4
-0x66dd:pu4
-0x66de:li4
-0x66df:chen2
-0x66e0:kuang4
-0x66e1:die2
-0x66e3:yan4
-0x66e4:huo4
-0x66e5:lu2
-0x66e6:xi1
-0x66e7:rong2
-0x66e8:long2
-0x66e9:nang3
-0x66ea:luo3
-0x66eb:luan2
-0x66ec:shai4
-0x66ed:tang3
-0x66ee:yan3
-0x66ef:chu2
-0x66f0:yue1
-0x66f1:yue1
-0x66f2:qu1
-0x66f3:ye4
-0x66f4:geng4
-0x66f5:ye4
-0x66f6:hu1
-0x66f7:he2
-0x66f8:shu1
-0x66f9:cao2
-0x66fa:cao2
-0x66fc:man4
-0x66fd:ceng1
-0x66fe:ceng2
-0x66ff:ti4
-0x6700:zui4
-0x6701:can3
-0x6702:xu4
-0x6703:hui4
-0x6704:yin4
-0x6705:qie4
-0x6706:fen1
-0x6707:pi2
-0x6708:yue4
-0x6709:you3
-0x670a:ruan3
-0x670b:peng2
-0x670c:ban1
-0x670d:fu2
-0x670e:ling2
-0x670f:fei3
-0x6710:qu2
-0x6712:nv4
-0x6713:tiao4
-0x6714:shuo4
-0x6715:zhen4
-0x6716:lang3
-0x6717:lang3
-0x6718:juan1
-0x6719:ming2
-0x671a:huang1
-0x671b:wang4
-0x671c:tun1
-0x671d:zhao1
-0x671e:ji1
-0x671f:qi1
-0x6720:ying1
-0x6721:zong1
-0x6722:wang4
-0x6723:tong2
-0x6724:lang3
-0x6726:meng2
-0x6727:long2
-0x6728:mu4
-0x6729:deng3
-0x672a:wei4
-0x672b:mo4
-0x672c:ben3
-0x672d:zha2
-0x672e:shu4
-0x672f:zhu2
-0x6731:zhu1
-0x6732:ren2
-0x6733:ba1
-0x6734:po4
-0x6735:duo3
-0x6736:duo3
-0x6737:dao1
-0x6738:li4
-0x6739:qiu2
-0x673a:ji1
-0x673b:jiu1
-0x673c:bi3
-0x673d:xiu3
-0x673e:ting2
-0x673f:ci4
-0x6740:sha1
-0x6742:za2
-0x6743:quan2
-0x6744:qian1
-0x6745:yu2
-0x6746:gan1
-0x6747:wu1
-0x6748:cha1
-0x6749:shan1
-0x674a:xun2
-0x674b:fan1
-0x674c:wu4
-0x674d:zi3
-0x674e:li3
-0x674f:xing4
-0x6750:cai2
-0x6751:cun1
-0x6752:ren4
-0x6753:shao2
-0x6754:tuo1
-0x6755:di4
-0x6756:zhang4
-0x6757:mang2
-0x6758:chi4
-0x6759:yi4
-0x675a:gu3
-0x675b:gong1
-0x675c:du4
-0x675d:yi2
-0x675e:qi3
-0x675f:shu4
-0x6760:gang1
-0x6761:tiao2
-0x6765:lai2
-0x6767:mang2
-0x6768:yang2
-0x6769:ma4
-0x676a:miao3
-0x676b:si4
-0x676c:yuan2
-0x676d:hang2
-0x676e:fei4
-0x676f:bei1
-0x6770:jie2
-0x6771:dong1
-0x6772:gao3
-0x6773:yao3
-0x6774:xian1
-0x6775:chu3
-0x6776:chun1
-0x6777:pa2
-0x6778:shu1
-0x6779:hua4
-0x677a:xin1
-0x677b:chou3
-0x677c:zhu4
-0x677d:chou3
-0x677e:song1
-0x677f:ban3
-0x6780:song1
-0x6781:ji2
-0x6782:yue4
-0x6783:jin4
-0x6784:gou1
-0x6785:ji1
-0x6786:mao2
-0x6787:pi2
-0x6788:bi4
-0x6789:wang3
-0x678a:ang4
-0x678b:fang1
-0x678c:fen2
-0x678d:yi4
-0x678e:fu2
-0x678f:nan2
-0x6790:xi1
-0x6791:hu4
-0x6792:ya2
-0x6793:dou3
-0x6794:xun2
-0x6795:zhen3
-0x6796:yao1
-0x6797:lin2
-0x6798:rui4
-0x6799:e3
-0x679a:mei2
-0x679b:zhao4
-0x679c:guo3
-0x679d:zhi1
-0x679e:cong1
-0x679f:yun4
-0x67a1:dou3
-0x67a2:shu1
-0x67a3:zao3
-0x67a5:li4
-0x67a7:jian4
-0x67a8:cheng2
-0x67aa:qiang1
-0x67ab:feng1
-0x67ac:nan2
-0x67ad:xiao1
-0x67ae:xian1
-0x67af:ku1
-0x67b0:ping2
-0x67b1:yi2
-0x67b2:xi3
-0x67b3:zhi1
-0x67b4:guai3
-0x67b5:xiao1
-0x67b6:jia4
-0x67b7:jia1
-0x67b8:ju3
-0x67b9:fu1
-0x67ba:mo4
-0x67bb:yi4
-0x67bc:ye4
-0x67bd:ye4
-0x67be:shi4
-0x67bf:nie4
-0x67c0:bi3
-0x67c1:duo4
-0x67c2:yi2
-0x67c3:ling2
-0x67c4:bing3
-0x67c5:ni3
-0x67c6:la1
-0x67c7:he2
-0x67c8:pan2
-0x67c9:fan2
-0x67ca:zhong1
-0x67cb:dai4
-0x67cc:ci2
-0x67cd:yang1
-0x67ce:fu1
-0x67cf:bai3
-0x67d0:mou3
-0x67d1:gan1
-0x67d2:qi1
-0x67d3:ran3
-0x67d4:rou2
-0x67d5:mao4
-0x67d6:zhao1
-0x67d7:song1
-0x67d8:zhe4
-0x67d9:xia2
-0x67da:you4
-0x67db:shen1
-0x67dc:gui4
-0x67dd:tuo4
-0x67de:zuo4
-0x67df:nan2
-0x67e0:ning2
-0x67e1:yong3
-0x67e2:di3
-0x67e3:zhi2
-0x67e4:zha1
-0x67e5:cha2
-0x67e6:dan4
-0x67e7:gu1
-0x67e9:jiu4
-0x67ea:ao1
-0x67eb:fu2
-0x67ec:jian3
-0x67ed:bo1
-0x67ee:duo4
-0x67ef:ke1
-0x67f0:nai4
-0x67f1:zhu4
-0x67f2:bi4
-0x67f3:liu3
-0x67f4:chai2
-0x67f5:zha4
-0x67f6:si4
-0x67f7:zhu4
-0x67f8:pei1
-0x67f9:shi4
-0x67fa:guai3
-0x67fb:cha2
-0x67fc:yao3
-0x67fd:jue2
-0x67fe:jiu4
-0x67ff:shi4
-0x6800:zhi1
-0x6801:liu3
-0x6802:mei2
-0x6804:rong2
-0x6805:zha4
-0x6807:biao1
-0x6808:zhan4
-0x6809:jie2
-0x680a:long2
-0x680b:dong4
-0x680c:lu2
-0x680e:li4
-0x680f:lan2
-0x6810:yong3
-0x6811:shu4
-0x6812:xun2
-0x6813:shuan1
-0x6814:qi4
-0x6815:zhen1
-0x6816:qi1
-0x6817:li4
-0x6818:yi3
-0x6819:xiang2
-0x681a:zhen4
-0x681b:li4
-0x681c:su4
-0x681d:gua1
-0x681e:kan1
-0x681f:bing1
-0x6820:ren3
-0x6821:xiao4
-0x6822:bo2
-0x6823:ren3
-0x6824:bing4
-0x6825:zi1
-0x6826:chou2
-0x6827:yi4
-0x6828:jie2
-0x6829:xu3
-0x682a:zhu1
-0x682b:jian4
-0x682c:zui4
-0x682d:er2
-0x682e:er3
-0x682f:you3
-0x6830:fa2
-0x6831:gong3
-0x6832:kao3
-0x6833:lao3
-0x6834:zhan1
-0x6835:li4
-0x6837:yang2
-0x6838:he2
-0x6839:gen1
-0x683a:zhi3
-0x683b:shi4
-0x683c:ge2
-0x683d:zai1
-0x683e:luan2
-0x683f:fu2
-0x6840:jie2
-0x6841:heng2
-0x6842:gui4
-0x6843:tao2
-0x6844:guang4
-0x6845:wei2
-0x6846:kuang4
-0x6847:ru2
-0x6848:an4
-0x6849:an1
-0x684a:juan4
-0x684b:yi2
-0x684c:zhuo1
-0x684d:ku1
-0x684e:zhi4
-0x684f:qiong2
-0x6850:tong2
-0x6851:sang1
-0x6852:sang1
-0x6853:huan2
-0x6854:jie2
-0x6855:jiu4
-0x6856:xue4
-0x6857:duo4
-0x6858:zhui4
-0x6859:yu2
-0x685a:zan3
-0x685c:ying1
-0x685f:zhan4
-0x6860:ya2
-0x6861:nao2
-0x6862:zhen1
-0x6863:dang3
-0x6864:qi1
-0x6865:qiao2
-0x6866:hua4
-0x6867:kuai4
-0x6868:jiang3
-0x6869:zhuang1
-0x686a:xun2
-0x686b:suo1
-0x686c:sha1
-0x686d:zhen1
-0x686e:bei1
-0x686f:ting1
-0x6870:gua1
-0x6871:jing4
-0x6872:bo2
-0x6873:ben4
-0x6874:fu2
-0x6875:rui3
-0x6876:tong3
-0x6877:jue2
-0x6878:xi1
-0x6879:lang2
-0x687a:liu3
-0x687b:feng1
-0x687c:qi1
-0x687d:wen3
-0x687e:jun1
-0x687f:gan3
-0x6880:cu4
-0x6881:liang2
-0x6882:qiu2
-0x6883:ting3
-0x6884:you3
-0x6885:mei2
-0x6886:bang1
-0x6887:long4
-0x6888:peng1
-0x6889:zhuang1
-0x688a:di4
-0x688b:xuan1
-0x688c:tu2
-0x688d:zao4
-0x688e:ao1
-0x688f:gu4
-0x6890:bi4
-0x6891:di2
-0x6892:han2
-0x6893:zi3
-0x6894:zhi1
-0x6895:ren4
-0x6896:bei4
-0x6897:geng3
-0x6898:jian4
-0x6899:huan4
-0x689a:wan3
-0x689b:nuo2
-0x689c:jia2
-0x689d:tiao2
-0x689e:ji4
-0x689f:xiao1
-0x68a0:lv3
-0x68a1:hun2
-0x68a2:shao1
-0x68a3:cen2
-0x68a4:fen2
-0x68a5:song1
-0x68a6:meng4
-0x68a7:wu2
-0x68a8:li2
-0x68a9:li2
-0x68aa:dou4
-0x68ab:cen1
-0x68ac:ying3
-0x68ad:suo1
-0x68ae:ju2
-0x68af:ti1
-0x68b0:xie4
-0x68b1:kun3
-0x68b2:zhuo2
-0x68b3:shu1
-0x68b4:chan1
-0x68b5:fan4
-0x68b6:wei3
-0x68b7:jing4
-0x68b8:li2
-0x68b9:bing1
-0x68bc:tao2
-0x68bd:zhi4
-0x68be:lai2
-0x68bf:lian2
-0x68c0:jian3
-0x68c1:zhuo2
-0x68c2:ling2
-0x68c3:li2
-0x68c4:qi4
-0x68c5:bing4
-0x68c6:zhun1
-0x68c7:cong1
-0x68c8:qian4
-0x68c9:mian2
-0x68ca:qi2
-0x68cb:qi2
-0x68cc:cai3
-0x68cd:gun4
-0x68ce:chan2
-0x68cf:te4
-0x68d0:fei3
-0x68d1:pai2
-0x68d2:bang4
-0x68d3:pou3
-0x68d4:hun1
-0x68d5:zong1
-0x68d6:cheng2
-0x68d7:zao3
-0x68d8:ji2
-0x68d9:li4
-0x68da:peng2
-0x68db:yu4
-0x68dc:yu4
-0x68dd:gu4
-0x68de:hun2
-0x68df:dong4
-0x68e0:tang2
-0x68e1:gang1
-0x68e2:wang3
-0x68e3:di4
-0x68e4:xi2
-0x68e5:fan2
-0x68e6:cheng1
-0x68e7:zhan4
-0x68e8:qi3
-0x68e9:yuan1
-0x68ea:yan3
-0x68eb:yu4
-0x68ec:quan1
-0x68ed:yi4
-0x68ee:sen1
-0x68ef:ren3
-0x68f0:chui2
-0x68f1:leng2
-0x68f2:qi1
-0x68f3:zhuo2
-0x68f4:fu2
-0x68f5:ke1
-0x68f6:lai2
-0x68f7:zou1
-0x68f8:zou1
-0x68f9:zhuo1
-0x68fa:guan1
-0x68fb:fen2
-0x68fc:fen2
-0x68fd:chen1
-0x68fe:qiong2
-0x68ff:nie4
-0x6900:wan3
-0x6901:guo3
-0x6902:lu4
-0x6903:hao2
-0x6904:jie1
-0x6905:yi3
-0x6906:chou2
-0x6907:ju3
-0x6908:ju2
-0x6909:cheng2
-0x690a:zuo2
-0x690b:liang2
-0x690c:qiang1
-0x690d:zhi2
-0x690e:zhui1
-0x690f:ya1
-0x6910:ju1
-0x6911:bei1
-0x6912:jiao1
-0x6913:zhuo2
-0x6914:zi1
-0x6915:bin1
-0x6916:peng2
-0x6917:ding4
-0x6918:chu3
-0x691c:jian3
-0x691d:gui1
-0x691e:xi4
-0x691f:du2
-0x6920:qian4
-0x6924:luo2
-0x6925:zhi1
-0x692a:peng4
-0x692b:zhan3
-0x692d:tuo3
-0x692e:sen1
-0x692f:duo2
-0x6930:ye2
-0x6931:fou4
-0x6932:wei3
-0x6933:wei1
-0x6934:duan4
-0x6935:jia3
-0x6936:zong1
-0x6937:jian1
-0x6938:yi2
-0x6939:shen4
-0x693a:xi2
-0x693b:yan4
-0x693c:yan3
-0x693d:chuan2
-0x693e:zhan4
-0x693f:chun1
-0x6940:yu3
-0x6941:he2
-0x6942:zha1
-0x6943:wo4
-0x6944:pian2
-0x6945:bi4
-0x6946:yao1
-0x6947:huo4
-0x6948:xu1
-0x6949:ruo4
-0x694a:yang2
-0x694b:la4
-0x694c:yan2
-0x694d:ben3
-0x694e:hun2
-0x694f:kui2
-0x6950:jie4
-0x6951:kui2
-0x6952:si1
-0x6953:feng1
-0x6954:xie1
-0x6955:tuo3
-0x6956:zhi4
-0x6957:jian4
-0x6958:mu4
-0x6959:mao4
-0x695a:chu3
-0x695b:hu4
-0x695c:hu2
-0x695d:lian4
-0x695e:leng2
-0x695f:ting2
-0x6960:nan2
-0x6961:yu2
-0x6962:you2
-0x6963:mei2
-0x6964:song3
-0x6965:xuan4
-0x6966:xuan4
-0x6967:ying1
-0x6968:zhen1
-0x6969:pian2
-0x696a:ye4
-0x696b:ji2
-0x696c:jie2
-0x696d:ye4
-0x696e:chu3
-0x696f:shun3
-0x6970:yu2
-0x6971:cou4
-0x6972:wei1
-0x6973:mei2
-0x6974:di4
-0x6975:ji2
-0x6976:jie2
-0x6977:kai3
-0x6978:qiu1
-0x6979:ying2
-0x697a:rou2
-0x697b:heng2
-0x697c:lou2
-0x697d:le4
-0x6980:pin3
-0x6982:gai4
-0x6983:tan2
-0x6984:lan3
-0x6985:yun2
-0x6986:yu2
-0x6987:chen4
-0x6988:lv2
-0x6989:ju3
-0x698d:xie4
-0x698e:jia3
-0x698f:yi4
-0x6990:zhan3
-0x6991:fu4
-0x6992:nai4
-0x6993:mi4
-0x6994:lang2
-0x6995:rong2
-0x6996:gu3
-0x6997:jian4
-0x6998:ju3
-0x6999:ta3
-0x699a:yao3
-0x699b:zhen1
-0x699c:bang3
-0x699d:sha1
-0x699e:yuan2
-0x699f:zi3
-0x69a0:ming2
-0x69a1:su4
-0x69a2:jia4
-0x69a3:yao2
-0x69a4:jie2
-0x69a5:huang3
-0x69a6:gan4
-0x69a7:fei3
-0x69a8:zha4
-0x69a9:qian2
-0x69aa:ma4
-0x69ab:sun3
-0x69ac:yuan2
-0x69ad:xie4
-0x69ae:rong2
-0x69af:shi2
-0x69b0:zhi1
-0x69b1:cui1
-0x69b2:yun2
-0x69b3:ting2
-0x69b4:liu2
-0x69b5:rong2
-0x69b6:tang2
-0x69b7:que4
-0x69b8:zhai1
-0x69b9:si1
-0x69ba:sheng4
-0x69bb:ta4
-0x69bc:ke4
-0x69bd:xi1
-0x69be:gu4
-0x69bf:qi1
-0x69c0:kao3
-0x69c1:gao3
-0x69c2:sun1
-0x69c3:pan2
-0x69c4:tao1
-0x69c5:ge2
-0x69c6:xun2
-0x69c7:dian1
-0x69c8:nou4
-0x69c9:ji2
-0x69ca:shuo4
-0x69cb:gou4
-0x69cc:chui2
-0x69cd:qiang1
-0x69ce:cha2
-0x69cf:qian3
-0x69d0:huai2
-0x69d1:mei2
-0x69d2:xu4
-0x69d3:gang4
-0x69d4:gao1
-0x69d5:zhuo2
-0x69d6:tuo4
-0x69d8:yang4
-0x69d9:dian1
-0x69da:jia3
-0x69db:jian4
-0x69dc:zui4
-0x69df:bin1
-0x69e0:zhu1
-0x69e2:xi2
-0x69e3:qi3
-0x69e4:lian2
-0x69e5:hui4
-0x69e6:yong2
-0x69e7:qian4
-0x69e8:guo3
-0x69e9:gai4
-0x69ea:gai4
-0x69eb:tuan2
-0x69ec:hua4
-0x69ed:cu4
-0x69ee:sen1
-0x69ef:cui1
-0x69f0:beng4
-0x69f1:you3
-0x69f2:hu2
-0x69f3:jiang3
-0x69f4:hu4
-0x69f5:huan4
-0x69f6:kui4
-0x69f7:yi4
-0x69f8:nie4
-0x69f9:gao1
-0x69fa:kang1
-0x69fb:gui1
-0x69fc:gui1
-0x69fd:cao2
-0x69fe:man2
-0x69ff:jin3
-0x6a00:di4
-0x6a01:zhuang1
-0x6a02:le4
-0x6a03:lang2
-0x6a04:chen2
-0x6a05:cong1
-0x6a06:li2
-0x6a07:xiu1
-0x6a08:qing2
-0x6a09:shuang3
-0x6a0a:fan2
-0x6a0b:tong1
-0x6a0c:guan4
-0x6a0d:ji1
-0x6a0e:suo1
-0x6a0f:lei3
-0x6a10:lu3
-0x6a11:liang2
-0x6a12:mi4
-0x6a13:lou2
-0x6a14:chao2
-0x6a15:su4
-0x6a16:ke1
-0x6a17:chu1
-0x6a18:tang2
-0x6a19:biao1
-0x6a1a:lu4
-0x6a1b:jiu1
-0x6a1c:shu4
-0x6a1d:zha1
-0x6a1e:shu1
-0x6a1f:zhang1
-0x6a20:men2
-0x6a21:mo2
-0x6a22:niao3
-0x6a23:yang4
-0x6a24:tiao2
-0x6a25:peng2
-0x6a26:zhu4
-0x6a27:sha1
-0x6a28:xi1
-0x6a29:quan2
-0x6a2a:heng2
-0x6a2b:jian1
-0x6a2c:cong1
-0x6a2f:qiang2
-0x6a31:ying1
-0x6a32:er4
-0x6a33:xin2
-0x6a34:zhi2
-0x6a35:qiao2
-0x6a36:zui1
-0x6a37:cong1
-0x6a38:pu2
-0x6a39:shu4
-0x6a3a:hua4
-0x6a3b:kui4
-0x6a3c:zhen1
-0x6a3d:zun1
-0x6a3e:yue4
-0x6a3f:zhan3
-0x6a40:xi1
-0x6a41:xun2
-0x6a42:dian4
-0x6a43:fa1
-0x6a44:gan3
-0x6a45:mo2
-0x6a46:wu3
-0x6a47:qiao1
-0x6a48:nao2
-0x6a49:lin4
-0x6a4a:liu2
-0x6a4b:qiao2
-0x6a4c:xian4
-0x6a4d:run4
-0x6a4e:fan2
-0x6a4f:zhan3
-0x6a50:tuo2
-0x6a51:lao3
-0x6a52:yun2
-0x6a53:shun4
-0x6a54:tui2
-0x6a55:cheng1
-0x6a56:tang2
-0x6a57:meng2
-0x6a58:ju2
-0x6a59:cheng2
-0x6a5a:su4
-0x6a5b:jue2
-0x6a5c:jue2
-0x6a5d:tan1
-0x6a5e:hui4
-0x6a5f:ji1
-0x6a60:nuo3
-0x6a61:xiang4
-0x6a62:tuo3
-0x6a63:ning3
-0x6a64:rui3
-0x6a65:zhu1
-0x6a66:chuang2
-0x6a67:zeng1
-0x6a68:fen2
-0x6a69:qiong2
-0x6a6a:ran3
-0x6a6b:heng2
-0x6a6c:cen2
-0x6a6d:gu1
-0x6a6e:liu3
-0x6a6f:lao4
-0x6a70:gao1
-0x6a71:chu2
-0x6a76:ji2
-0x6a77:dou1
-0x6a79:lu3
-0x6a7c:yuan2
-0x6a7d:ta4
-0x6a7e:shu1
-0x6a7f:jiang1
-0x6a80:tan2
-0x6a81:lin3
-0x6a82:nong2
-0x6a83:yin3
-0x6a84:xi2
-0x6a85:sui4
-0x6a86:shan1
-0x6a87:zui4
-0x6a88:xuan2
-0x6a89:cheng1
-0x6a8a:gan4
-0x6a8b:ju1
-0x6a8c:zui4
-0x6a8d:yi4
-0x6a8e:qin2
-0x6a8f:pu3
-0x6a90:yan2
-0x6a91:lei2
-0x6a92:feng1
-0x6a93:hui3
-0x6a94:dang4
-0x6a95:ji4
-0x6a96:sui4
-0x6a97:bo4
-0x6a98:bi4
-0x6a99:ding3
-0x6a9a:chu3
-0x6a9b:zhua1
-0x6a9c:gui4
-0x6a9d:ji2
-0x6a9e:jie3
-0x6a9f:jia3
-0x6aa0:qing2
-0x6aa1:zhe4
-0x6aa2:jian3
-0x6aa3:qiang2
-0x6aa4:dao4
-0x6aa5:yi3
-0x6aa6:biao3
-0x6aa7:song1
-0x6aa8:she1
-0x6aa9:lin3
-0x6aab:cha2
-0x6aac:meng2
-0x6aad:yin2
-0x6aae:tao2
-0x6aaf:tai2
-0x6ab0:mian2
-0x6ab1:qi2
-0x6ab3:bin1
-0x6ab4:huo4
-0x6ab5:ji4
-0x6ab6:qian1
-0x6ab7:mi2
-0x6ab8:ning2
-0x6ab9:yi1
-0x6aba:gao3
-0x6abb:jian4
-0x6abc:yin4
-0x6abd:er2
-0x6abe:qing3
-0x6abf:yan3
-0x6ac0:qi2
-0x6ac1:mi4
-0x6ac2:zhao4
-0x6ac3:gui4
-0x6ac4:chun1
-0x6ac5:ji1
-0x6ac6:kui2
-0x6ac7:po2
-0x6ac8:deng4
-0x6ac9:chu2
-0x6acb:mian2
-0x6acc:you1
-0x6acd:zhi4
-0x6ace:guang4
-0x6acf:qian1
-0x6ad0:lei3
-0x6ad1:lei3
-0x6ad2:sa4
-0x6ad3:lu3
-0x6ad4:li4
-0x6ad5:cuan2
-0x6ad6:lv2
-0x6ad7:mie4
-0x6ad8:hui4
-0x6ad9:ou1
-0x6ada:lv2
-0x6adb:jie2
-0x6adc:gao1
-0x6add:du2
-0x6ade:yuan2
-0x6adf:li4
-0x6ae0:fei4
-0x6ae1:zhuo2
-0x6ae2:sou3
-0x6ae3:lian2
-0x6ae5:chu2
-0x6ae7:zhu1
-0x6ae8:lu2
-0x6ae9:yan2
-0x6aea:li4
-0x6aeb:zhu1
-0x6aec:chen4
-0x6aed:jie2
-0x6aee:e4
-0x6aef:su1
-0x6af0:huai2
-0x6af1:nie4
-0x6af2:yu4
-0x6af3:long2
-0x6af4:lai4
-0x6af6:xian3
-0x6af8:ju3
-0x6af9:xiao1
-0x6afa:ling2
-0x6afb:ying1
-0x6afc:jian1
-0x6afd:yin3
-0x6afe:you2
-0x6aff:ying2
-0x6b00:xiang1
-0x6b01:nong2
-0x6b02:bo2
-0x6b03:chan2
-0x6b04:lan2
-0x6b05:ju3
-0x6b06:shuang1
-0x6b07:she4
-0x6b08:wei2
-0x6b09:cong4
-0x6b0a:quan2
-0x6b0b:qu2
-0x6b0e:yu4
-0x6b0f:luo2
-0x6b10:li3
-0x6b11:zan4
-0x6b12:luan2
-0x6b13:dang3
-0x6b14:jue2
-0x6b16:lan3
-0x6b17:lan2
-0x6b18:zhu3
-0x6b19:lei2
-0x6b1a:li3
-0x6b1b:ba4
-0x6b1c:nang2
-0x6b1d:yu4
-0x6b1e:ling2
-0x6b20:qian4
-0x6b21:ci4
-0x6b22:huan1
-0x6b23:xin1
-0x6b24:yu2
-0x6b25:yu4
-0x6b26:qian1
-0x6b27:ou1
-0x6b28:xu1
-0x6b29:chao1
-0x6b2a:chu4
-0x6b2b:chi1
-0x6b2c:kai4
-0x6b2d:yi4
-0x6b2e:jue2
-0x6b2f:xi2
-0x6b30:xu1
-0x6b31:xia4
-0x6b32:yu4
-0x6b33:kuai4
-0x6b34:lang2
-0x6b35:kuan3
-0x6b36:shuo4
-0x6b37:xi1
-0x6b38:ai3
-0x6b39:yi1
-0x6b3a:qi1
-0x6b3b:xu1
-0x6b3c:chi3
-0x6b3d:qin1
-0x6b3e:kuan3
-0x6b3f:kan3
-0x6b40:kuan3
-0x6b41:kan3
-0x6b42:chuan2
-0x6b43:sha4
-0x6b45:yin1
-0x6b46:xin1
-0x6b47:xie1
-0x6b48:yu2
-0x6b49:qian4
-0x6b4a:xiao1
-0x6b4b:yi2
-0x6b4c:ge1
-0x6b4d:wu1
-0x6b4e:tan4
-0x6b4f:jin4
-0x6b50:ou1
-0x6b51:hu1
-0x6b52:ti4
-0x6b53:huan1
-0x6b54:xu1
-0x6b55:pen1
-0x6b56:xi1
-0x6b57:xiao4
-0x6b58:xu1
-0x6b59:xi1
-0x6b5b:han1
-0x6b5c:chu4
-0x6b5d:yi4
-0x6b5e:kan3
-0x6b5f:yu2
-0x6b60:chuo4
-0x6b61:huan1
-0x6b62:zhi3
-0x6b63:zheng4
-0x6b64:ci3
-0x6b65:bu4
-0x6b66:wu3
-0x6b67:qi2
-0x6b68:bu4
-0x6b69:bu4
-0x6b6a:wai1
-0x6b6b:ju4
-0x6b6c:qian2
-0x6b6d:chi2
-0x6b6e:se4
-0x6b6f:chi3
-0x6b70:se4
-0x6b71:zhong3
-0x6b72:sui4
-0x6b73:sui4
-0x6b74:li4
-0x6b75:cuo4
-0x6b76:yu2
-0x6b77:li4
-0x6b78:gui1
-0x6b79:dai3
-0x6b7a:dai3
-0x6b7b:si3
-0x6b7c:jian1
-0x6b7d:zhe2
-0x6b7e:mo4
-0x6b7f:mo4
-0x6b80:yao3
-0x6b81:mo4
-0x6b82:cu2
-0x6b83:yang1
-0x6b84:tian3
-0x6b85:sheng1
-0x6b86:dai4
-0x6b87:shang1
-0x6b88:xu4
-0x6b89:xun4
-0x6b8a:shu1
-0x6b8b:can2
-0x6b8c:jue2
-0x6b8d:piao3
-0x6b8e:qia4
-0x6b8f:qiu4
-0x6b90:su4
-0x6b91:qing2
-0x6b92:yun3
-0x6b93:lian4
-0x6b94:yi4
-0x6b95:fou3
-0x6b96:zhi2
-0x6b97:ye4
-0x6b98:can2
-0x6b99:hun1
-0x6b9a:dan1
-0x6b9b:ji2
-0x6b9c:ye4
-0x6b9e:yun3
-0x6b9f:wen1
-0x6ba0:chou4
-0x6ba1:bin4
-0x6ba2:ti4
-0x6ba3:jin4
-0x6ba4:shang1
-0x6ba5:yin2
-0x6ba6:diao1
-0x6ba7:cu4
-0x6ba8:hui4
-0x6ba9:cuan4
-0x6baa:yi4
-0x6bab:dan1
-0x6bac:du4
-0x6bad:jiang1
-0x6bae:lian4
-0x6baf:bin4
-0x6bb0:du2
-0x6bb2:jian1
-0x6bb3:shu1
-0x6bb4:ou1
-0x6bb5:duan4
-0x6bb6:zhu4
-0x6bb7:yin1
-0x6bb8:qing4
-0x6bb9:yi4
-0x6bba:sha1
-0x6bbb:que4
-0x6bbc:ke2
-0x6bbd:yao2
-0x6bbe:jun4
-0x6bbf:dian4
-0x6bc0:hui3
-0x6bc1:hui3
-0x6bc2:gu3
-0x6bc3:que4
-0x6bc4:ji1
-0x6bc5:yi4
-0x6bc6:ou1
-0x6bc7:hui3
-0x6bc8:duan4
-0x6bc9:yi1
-0x6bca:xiao1
-0x6bcb:wu2
-0x6bcc:guan4
-0x6bcd:mu3
-0x6bce:mei3
-0x6bcf:mei3
-0x6bd0:ai3
-0x6bd1:zuo3
-0x6bd2:du2
-0x6bd3:yu4
-0x6bd4:bi3
-0x6bd5:bi4
-0x6bd6:bi4
-0x6bd7:pi2
-0x6bd8:pi2
-0x6bd9:bi4
-0x6bda:chan2
-0x6bdb:mao2
-0x6bde:pu2
-0x6be0:jia1
-0x6be1:zhan1
-0x6be2:sai1
-0x6be3:mu4
-0x6be4:tuo4
-0x6be5:xun2
-0x6be6:er4
-0x6be7:rong2
-0x6be8:xian3
-0x6be9:ju2
-0x6bea:mu2
-0x6beb:hao2
-0x6bec:qiu2
-0x6bed:dou4
-0x6bef:tan3
-0x6bf0:pei2
-0x6bf1:ju2
-0x6bf2:duo2
-0x6bf3:cui4
-0x6bf4:bi1
-0x6bf5:san1
-0x6bf7:mao4
-0x6bf8:sui1
-0x6bf9:shu1
-0x6bfa:yu1
-0x6bfb:tuo4
-0x6bfc:he2
-0x6bfd:jian4
-0x6bfe:ta4
-0x6bff:san1
-0x6c00:lv2
-0x6c01:mu2
-0x6c02:mao2
-0x6c03:tong2
-0x6c04:rong3
-0x6c05:chang3
-0x6c06:pu3
-0x6c07:luo2
-0x6c08:zhan1
-0x6c09:sao4
-0x6c0a:zhan1
-0x6c0b:meng2
-0x6c0c:luo2
-0x6c0d:qu2
-0x6c0e:die2
-0x6c0f:shi4
-0x6c10:di3
-0x6c11:min2
-0x6c12:jue2
-0x6c13:mang2
-0x6c14:qi4
-0x6c15:pie1
-0x6c16:nai3
-0x6c17:qi4
-0x6c18:dao1
-0x6c19:xian1
-0x6c1a:chuan1
-0x6c1b:fen1
-0x6c1c:ri4
-0x6c1d:nei4
-0x6c1f:fu2
-0x6c20:shen1
-0x6c21:dong1
-0x6c22:qing1
-0x6c23:qi4
-0x6c24:yin1
-0x6c25:xi1
-0x6c26:hai4
-0x6c27:yang3
-0x6c28:an1
-0x6c29:ya4
-0x6c2a:ke4
-0x6c2b:qing1
-0x6c2c:ya4
-0x6c2d:dong1
-0x6c2e:dan4
-0x6c2f:lv4
-0x6c30:qing1
-0x6c31:yang3
-0x6c32:yun1
-0x6c33:yun1
-0x6c34:shui3
-0x6c36:zheng3
-0x6c37:bing1
-0x6c38:yong3
-0x6c39:dang4
-0x6c3b:le4
-0x6c3c:ni4
-0x6c3d:tun3
-0x6c3e:fan4
-0x6c3f:gui3
-0x6c40:ting1
-0x6c41:zhi1
-0x6c42:qiu2
-0x6c43:bin1
-0x6c44:ze4
-0x6c45:mian3
-0x6c46:cuan1
-0x6c47:hui4
-0x6c48:diao1
-0x6c49:han4
-0x6c4a:cha4
-0x6c4b:zhuo2
-0x6c4c:chuan4
-0x6c4d:wan2
-0x6c4e:fan4
-0x6c4f:dai4
-0x6c50:xi4
-0x6c51:tuo1
-0x6c52:mang2
-0x6c53:qiu2
-0x6c54:qi4
-0x6c55:shan4
-0x6c56:pai4
-0x6c57:han4
-0x6c58:qian1
-0x6c59:wu1
-0x6c5a:wu1
-0x6c5b:xun4
-0x6c5c:si4
-0x6c5d:ru3
-0x6c5e:gong3
-0x6c5f:jiang1
-0x6c60:chi2
-0x6c61:wu1
-0x6c64:tang1
-0x6c65:zhi1
-0x6c66:chi2
-0x6c67:qian1
-0x6c68:mi4
-0x6c69:gu3
-0x6c6a:wang1
-0x6c6b:qing4
-0x6c6c:jing3
-0x6c6d:rui4
-0x6c6e:jun1
-0x6c6f:hong2
-0x6c70:tai4
-0x6c71:quan3
-0x6c72:ji2
-0x6c73:bian4
-0x6c74:bian4
-0x6c75:gan4
-0x6c76:wen4
-0x6c77:zhong1
-0x6c78:fang1
-0x6c79:xiong1
-0x6c7a:jue2
-0x6c7b:hang3
-0x6c7d:qi4
-0x6c7e:fen2
-0x6c7f:xu4
-0x6c80:xu4
-0x6c81:qin4
-0x6c82:yi2
-0x6c83:wo4
-0x6c84:yun2
-0x6c85:yuan2
-0x6c86:hang2
-0x6c87:yan3
-0x6c88:chen2
-0x6c89:chen2
-0x6c8a:dan4
-0x6c8b:you2
-0x6c8c:dun4
-0x6c8d:hu4
-0x6c8e:huo4
-0x6c8f:qi1
-0x6c90:mu4
-0x6c91:rou2
-0x6c92:mei2
-0x6c93:ta4
-0x6c94:mian3
-0x6c95:wu4
-0x6c96:chong1
-0x6c97:tian1
-0x6c98:bi3
-0x6c99:sha1
-0x6c9a:zhi3
-0x6c9b:pei4
-0x6c9c:pan4
-0x6c9d:zhui3
-0x6c9e:za1
-0x6c9f:gou1
-0x6ca0:liu2
-0x6ca1:mei2
-0x6ca2:ze2
-0x6ca3:feng1
-0x6ca4:ou4
-0x6ca5:li4
-0x6ca6:lun2
-0x6ca7:cang1
-0x6ca8:feng2
-0x6ca9:wei2
-0x6caa:hu4
-0x6cab:mo4
-0x6cac:mei4
-0x6cad:shu4
-0x6cae:ju1
-0x6caf:zan3
-0x6cb0:tuo1
-0x6cb1:tuo2
-0x6cb2:tuo2
-0x6cb3:he2
-0x6cb4:li4
-0x6cb5:mi3
-0x6cb6:yi2
-0x6cb7:fa1
-0x6cb8:fei4
-0x6cb9:you2
-0x6cba:tian2
-0x6cbb:zhi4
-0x6cbc:zhao3
-0x6cbd:gu1
-0x6cbe:zhan1
-0x6cbf:yan2
-0x6cc0:si1
-0x6cc1:kuang4
-0x6cc2:jiong3
-0x6cc3:ju4
-0x6cc4:xie4
-0x6cc5:qiu2
-0x6cc6:yi1
-0x6cc7:jia1
-0x6cc8:zhong1
-0x6cc9:quan2
-0x6cca:bo2
-0x6ccb:hui4
-0x6ccc:mi4
-0x6ccd:ben1
-0x6cce:zhuo2
-0x6ccf:chu4
-0x6cd0:le4
-0x6cd1:you3
-0x6cd2:gu1
-0x6cd3:hong2
-0x6cd4:gan1
-0x6cd5:fa3
-0x6cd6:mao3
-0x6cd7:si4
-0x6cd8:hu1
-0x6cd9:ping2
-0x6cda:ci3
-0x6cdb:fan4
-0x6cdc:chi2
-0x6cdd:su4
-0x6cde:ning4
-0x6cdf:cheng1
-0x6ce0:ling2
-0x6ce1:pao4
-0x6ce2:bo1
-0x6ce3:qi4
-0x6ce4:si4
-0x6ce5:ni2
-0x6ce6:ju2
-0x6ce7:yue4
-0x6ce8:zhu4
-0x6ce9:sheng1
-0x6cea:lei4
-0x6ceb:xuan4
-0x6cec:xue4
-0x6ced:fu1
-0x6cee:pan4
-0x6cef:min3
-0x6cf0:tai4
-0x6cf1:yang1
-0x6cf2:ji3
-0x6cf3:yong3
-0x6cf4:guan4
-0x6cf5:beng4
-0x6cf6:xue2
-0x6cf7:long2
-0x6cf8:lu2
-0x6cfa:bo2
-0x6cfb:xie4
-0x6cfc:po1
-0x6cfd:ze2
-0x6cfe:jing1
-0x6cff:yin2
-0x6d00:zhou1
-0x6d01:ji2
-0x6d02:yi4
-0x6d03:hui1
-0x6d04:hui2
-0x6d05:zui3
-0x6d06:cheng2
-0x6d07:yin1
-0x6d08:wei2
-0x6d09:hou4
-0x6d0a:jian4
-0x6d0b:yang2
-0x6d0c:lie4
-0x6d0d:si4
-0x6d0e:ji4
-0x6d0f:er2
-0x6d10:xing2
-0x6d11:fu2
-0x6d12:sa3
-0x6d13:suo3
-0x6d14:zhi3
-0x6d15:yin1
-0x6d16:wu2
-0x6d17:xi3
-0x6d18:kao3
-0x6d19:zhu1
-0x6d1a:jiang4
-0x6d1b:luo4
-0x6d1d:an4
-0x6d1e:dong4
-0x6d1f:yi2
-0x6d20:mou2
-0x6d21:lei3
-0x6d22:yi1
-0x6d23:mi3
-0x6d24:quan2
-0x6d25:jin1
-0x6d26:mo4
-0x6d27:wei3
-0x6d28:xiao2
-0x6d29:xie4
-0x6d2a:hong2
-0x6d2b:xu4
-0x6d2c:shuo4
-0x6d2d:kuang1
-0x6d2e:tao2
-0x6d2f:qie4
-0x6d30:ju4
-0x6d31:er3
-0x6d32:zhou1
-0x6d33:ru4
-0x6d34:ping2
-0x6d35:xun2
-0x6d36:xiong1
-0x6d37:zhi4
-0x6d38:guang1
-0x6d39:huan2
-0x6d3a:ming2
-0x6d3b:huo2
-0x6d3c:wa1
-0x6d3d:qia4
-0x6d3e:pai4
-0x6d3f:wu1
-0x6d40:qu3
-0x6d41:liu2
-0x6d42:yi4
-0x6d43:jia2
-0x6d44:jing4
-0x6d45:qian3
-0x6d46:jiang1
-0x6d47:jiao1
-0x6d48:cheng2
-0x6d49:shi1
-0x6d4a:zhuo2
-0x6d4b:ce4
-0x6d4d:kuai4
-0x6d4e:ji4
-0x6d4f:liu2
-0x6d50:chan3
-0x6d51:hun2
-0x6d52:hu3
-0x6d53:nong2
-0x6d54:xun2
-0x6d55:jin4
-0x6d56:lie4
-0x6d57:qiu2
-0x6d58:wei3
-0x6d59:zhe4
-0x6d5a:jun4
-0x6d5b:han4
-0x6d5c:bang1
-0x6d5d:mang2
-0x6d5e:zhuo2
-0x6d5f:you2
-0x6d60:xi1
-0x6d61:bo2
-0x6d62:dou4
-0x6d63:wan3
-0x6d64:hong2
-0x6d65:yi4
-0x6d66:pu3
-0x6d67:ying3
-0x6d68:lan3
-0x6d69:hao4
-0x6d6a:lang4
-0x6d6b:han3
-0x6d6c:li3
-0x6d6d:geng1
-0x6d6e:fu2
-0x6d6f:wu2
-0x6d70:lian4
-0x6d71:chun2
-0x6d72:feng2
-0x6d73:yi4
-0x6d74:yu4
-0x6d75:tong2
-0x6d76:lao2
-0x6d77:hai3
-0x6d78:jin4
-0x6d79:jia2
-0x6d7a:chong1
-0x6d7b:weng3
-0x6d7c:mei3
-0x6d7d:sui1
-0x6d7e:cheng1
-0x6d7f:pei4
-0x6d80:xian4
-0x6d81:shen4
-0x6d82:tu2
-0x6d83:kun4
-0x6d84:pin1
-0x6d85:nie4
-0x6d86:han4
-0x6d87:jing1
-0x6d88:xiao1
-0x6d89:she4
-0x6d8a:nian3
-0x6d8b:tu1
-0x6d8c:yong3
-0x6d8d:xiao4
-0x6d8e:xian2
-0x6d8f:ting3
-0x6d90:e2
-0x6d91:su4
-0x6d92:tun1
-0x6d93:juan1
-0x6d94:cen2
-0x6d95:ti4
-0x6d96:li4
-0x6d97:shui4
-0x6d98:si4
-0x6d99:lei4
-0x6d9a:shui4
-0x6d9b:tao1
-0x6d9c:du2
-0x6d9d:lao4
-0x6d9e:lai2
-0x6d9f:lian2
-0x6da0:wei2
-0x6da1:wo1
-0x6da2:yun2
-0x6da3:huan4
-0x6da4:di2
-0x6da6:run4
-0x6da7:jian4
-0x6da8:zhang3
-0x6da9:se4
-0x6daa:fu2
-0x6dab:guan4
-0x6dac:xing4
-0x6dad:shou4
-0x6dae:shuan4
-0x6daf:ya2
-0x6db0:chuo4
-0x6db1:zhang4
-0x6db2:ye4
-0x6db3:kong1
-0x6db4:wo4
-0x6db5:han2
-0x6db6:tuo1
-0x6db7:dong1
-0x6db8:he2
-0x6db9:wo1
-0x6dba:ju1
-0x6dbb:gan4
-0x6dbc:liang2
-0x6dbd:hun1
-0x6dbe:ta4
-0x6dbf:zhuo1
-0x6dc0:dian4
-0x6dc1:qie4
-0x6dc2:de2
-0x6dc3:juan4
-0x6dc4:zi1
-0x6dc5:xi1
-0x6dc6:yao2
-0x6dc7:qi2
-0x6dc8:gu3
-0x6dc9:guo3
-0x6dca:han4
-0x6dcb:lin2
-0x6dcc:tang3
-0x6dcd:zhou1
-0x6dce:peng3
-0x6dcf:hao4
-0x6dd0:chang1
-0x6dd1:shu2
-0x6dd2:qi1
-0x6dd3:fang1
-0x6dd4:chi4
-0x6dd5:lu4
-0x6dd6:nao4
-0x6dd7:ju2
-0x6dd8:tao2
-0x6dd9:cong2
-0x6dda:lei4
-0x6ddb:zhi4
-0x6ddc:peng2
-0x6ddd:fei2
-0x6dde:song1
-0x6ddf:tian3
-0x6de0:pi4
-0x6de1:dan4
-0x6de2:yu4
-0x6de3:ni2
-0x6de4:yu1
-0x6de5:lu4
-0x6de6:gan4
-0x6de7:mi4
-0x6de8:jing4
-0x6de9:ling2
-0x6dea:lun2
-0x6deb:yin2
-0x6dec:cui4
-0x6ded:qu2
-0x6dee:huai2
-0x6def:yu4
-0x6df0:nian3
-0x6df1:shen1
-0x6df2:piao2
-0x6df3:chun2
-0x6df4:wa4
-0x6df5:yuan1
-0x6df6:lai2
-0x6df7:hun4
-0x6df8:qing1
-0x6df9:yan1
-0x6dfa:qian3
-0x6dfb:tian1
-0x6dfc:miao3
-0x6dfd:zhi3
-0x6dfe:yin3
-0x6dff:mi4
-0x6e00:ben1
-0x6e01:yuan1
-0x6e02:wen4
-0x6e03:re4
-0x6e04:fei1
-0x6e05:qing1
-0x6e06:yuan1
-0x6e07:ke3
-0x6e08:ji4
-0x6e09:she4
-0x6e0a:yuan1
-0x6e0c:lu4
-0x6e0d:zi4
-0x6e0e:du2
-0x6e10:jian4
-0x6e11:min3
-0x6e12:pi4
-0x6e14:yu2
-0x6e15:yuan1
-0x6e16:shen3
-0x6e17:shen4
-0x6e18:rou2
-0x6e19:huan4
-0x6e1a:zhu3
-0x6e1b:jian3
-0x6e1c:nuan3
-0x6e1d:yu2
-0x6e1e:qiu2
-0x6e1f:ting2
-0x6e20:qu2
-0x6e21:du4
-0x6e22:feng2
-0x6e23:zha1
-0x6e24:bo2
-0x6e25:wo4
-0x6e26:wo1
-0x6e27:di4
-0x6e28:wei1
-0x6e29:wen1
-0x6e2a:ru2
-0x6e2b:xie4
-0x6e2c:ce4
-0x6e2d:wei4
-0x6e2e:ge1
-0x6e2f:gang3
-0x6e30:yan3
-0x6e31:hong2
-0x6e32:xuan4
-0x6e33:mi3
-0x6e34:ke3
-0x6e35:mao2
-0x6e36:ying1
-0x6e37:yan3
-0x6e38:you2
-0x6e39:hong1
-0x6e3a:miao3
-0x6e3b:xing3
-0x6e3c:mei3
-0x6e3d:zai1
-0x6e3e:hun2
-0x6e3f:nai4
-0x6e40:kui2
-0x6e41:shi2
-0x6e42:e4
-0x6e43:pai4
-0x6e44:mei2
-0x6e45:lian4
-0x6e46:qi4
-0x6e47:qi4
-0x6e48:mei2
-0x6e49:tian2
-0x6e4a:cou4
-0x6e4b:wei2
-0x6e4c:can1
-0x6e4d:tuan1
-0x6e4e:mian3
-0x6e4f:hui4
-0x6e50:mo4
-0x6e51:xu3
-0x6e52:ji2
-0x6e53:pen2
-0x6e54:jian1
-0x6e55:jian3
-0x6e56:hu2
-0x6e57:feng4
-0x6e58:xiang1
-0x6e59:yi4
-0x6e5a:yin4
-0x6e5b:zhan4
-0x6e5c:shi2
-0x6e5d:jie1
-0x6e5e:cheng2
-0x6e5f:huang2
-0x6e60:tan4
-0x6e61:yu2
-0x6e62:bi4
-0x6e63:min3
-0x6e64:shi1
-0x6e65:tu2
-0x6e66:sheng1
-0x6e67:yong3
-0x6e68:qu4
-0x6e69:zhong4
-0x6e6b:jiao3
-0x6e6c:jiao3
-0x6e6e:yin1
-0x6e6f:tang1
-0x6e70:long2
-0x6e71:huo4
-0x6e72:yuan2
-0x6e73:nan3
-0x6e74:ban4
-0x6e75:you3
-0x6e76:quan2
-0x6e77:chui2
-0x6e78:liang4
-0x6e79:chan2
-0x6e7a:yan2
-0x6e7b:chun2
-0x6e7c:nie4
-0x6e7d:zi1
-0x6e7e:wan1
-0x6e7f:shi1
-0x6e80:man3
-0x6e81:ying2
-0x6e83:kui4
-0x6e85:jian4
-0x6e86:xu4
-0x6e87:lv3
-0x6e88:gui1
-0x6e89:gai4
-0x6e8c:po1
-0x6e8d:jin4
-0x6e8e:gui4
-0x6e8f:tang2
-0x6e90:yuan2
-0x6e91:suo3
-0x6e92:yuan2
-0x6e93:lian2
-0x6e94:yao3
-0x6e95:meng4
-0x6e96:zhun3
-0x6e97:sheng2
-0x6e98:ke4
-0x6e99:tai4
-0x6e9a:da2
-0x6e9b:wa1
-0x6e9c:liu1
-0x6e9d:gou1
-0x6e9e:sao1
-0x6e9f:ming2
-0x6ea0:zha4
-0x6ea1:shi2
-0x6ea2:yi4
-0x6ea3:lun2
-0x6ea4:ma3
-0x6ea5:pu3
-0x6ea6:wei2
-0x6ea7:li4
-0x6ea8:cai2
-0x6ea9:wu4
-0x6eaa:xi1
-0x6eab:wen1
-0x6eac:qiang1
-0x6ead:ze2
-0x6eae:shi1
-0x6eaf:su4
-0x6eb0:yi1
-0x6eb1:zhen1
-0x6eb2:sou1
-0x6eb3:yun2
-0x6eb4:xiu4
-0x6eb5:yin1
-0x6eb6:rong2
-0x6eb7:hun4
-0x6eb8:su4
-0x6eb9:su4
-0x6eba:ni4
-0x6ebb:ta4
-0x6ebc:shi1
-0x6ebd:ru4
-0x6ebe:wei1
-0x6ebf:pan4
-0x6ec0:chu4
-0x6ec1:chu2
-0x6ec2:pang1
-0x6ec3:weng3
-0x6ec4:cang1
-0x6ec5:mie4
-0x6ec6:he2
-0x6ec7:dian1
-0x6ec8:hao4
-0x6ec9:huang3
-0x6eca:xi4
-0x6ecb:zi1
-0x6ecc:di2
-0x6ecd:zhi3
-0x6ece:xing2
-0x6ecf:fu3
-0x6ed0:jie2
-0x6ed1:hua2
-0x6ed2:ge1
-0x6ed3:zi3
-0x6ed4:tao1
-0x6ed5:teng2
-0x6ed6:sui1
-0x6ed7:bi3
-0x6ed8:jiao4
-0x6ed9:hui4
-0x6eda:gun3
-0x6edb:yin2
-0x6edc:gao1
-0x6edd:long2
-0x6ede:zhi4
-0x6edf:yan4
-0x6ee0:she4
-0x6ee1:man3
-0x6ee2:ying4
-0x6ee3:chun2
-0x6ee4:lv4
-0x6ee5:lan4
-0x6ee6:luan2
-0x6ee8:bin1
-0x6ee9:tan1
-0x6eea:yu4
-0x6eeb:sou3
-0x6eec:hu4
-0x6eed:bi4
-0x6eee:biao1
-0x6eef:zhi4
-0x6ef0:jiang3
-0x6ef1:kou4
-0x6ef2:shen4
-0x6ef3:shang1
-0x6ef4:di1
-0x6ef5:mi4
-0x6ef6:ao2
-0x6ef7:lu3
-0x6ef8:hu3
-0x6ef9:hu1
-0x6efa:you2
-0x6efb:chan3
-0x6efc:fan4
-0x6efd:yong2
-0x6efe:gun3
-0x6eff:man3
-0x6f00:qing4
-0x6f01:yu2
-0x6f02:piao1
-0x6f03:ji2
-0x6f04:ya2
-0x6f05:jiao3
-0x6f06:qi1
-0x6f07:xi3
-0x6f08:ji4
-0x6f09:lu4
-0x6f0a:lv3
-0x6f0b:long2
-0x6f0c:jin3
-0x6f0d:guo2
-0x6f0e:cong2
-0x6f0f:lou4
-0x6f10:zhi2
-0x6f11:gai4
-0x6f12:qiang2
-0x6f13:li2
-0x6f14:yan3
-0x6f15:cao2
-0x6f16:jiao4
-0x6f17:cong1
-0x6f18:chun2
-0x6f19:tuan2
-0x6f1a:ou4
-0x6f1b:teng2
-0x6f1c:ye3
-0x6f1d:xi2
-0x6f1e:mi4
-0x6f1f:tang2
-0x6f20:mo4
-0x6f21:shang1
-0x6f22:han4
-0x6f23:lian2
-0x6f24:lan3
-0x6f25:wa1
-0x6f26:li2
-0x6f27:qian2
-0x6f28:feng2
-0x6f29:xuan2
-0x6f2a:yi1
-0x6f2b:man4
-0x6f2c:zi4
-0x6f2d:mang3
-0x6f2e:kang1
-0x6f2f:ta4
-0x6f30:peng1
-0x6f31:shu4
-0x6f32:zhang3
-0x6f33:zhang1
-0x6f34:chong2
-0x6f35:xu4
-0x6f36:huan4
-0x6f37:kuo4
-0x6f38:jian4
-0x6f39:yan1
-0x6f3a:chuang3
-0x6f3b:liao2
-0x6f3c:cui3
-0x6f3d:ti2
-0x6f3e:yang4
-0x6f3f:jiang1
-0x6f40:cong2
-0x6f41:ying3
-0x6f42:hong2
-0x6f43:xun2
-0x6f44:shu4
-0x6f45:guan4
-0x6f46:ying2
-0x6f47:xiao1
-0x6f4a:xu4
-0x6f4b:lian4
-0x6f4c:zhi4
-0x6f4d:wei2
-0x6f4e:pi4
-0x6f4f:jue2
-0x6f50:jiao4
-0x6f51:po1
-0x6f52:dang4
-0x6f53:hui4
-0x6f54:jie2
-0x6f55:wu3
-0x6f56:pa2
-0x6f57:ji2
-0x6f58:pan1
-0x6f59:gui2
-0x6f5a:xiao1
-0x6f5b:qian2
-0x6f5c:qian2
-0x6f5d:xi1
-0x6f5e:lu4
-0x6f5f:xi4
-0x6f60:sun4
-0x6f61:dun4
-0x6f62:huang2
-0x6f63:min3
-0x6f64:run4
-0x6f65:su4
-0x6f66:lao3
-0x6f67:zhen1
-0x6f68:zhong1
-0x6f69:yi4
-0x6f6a:di2
-0x6f6b:wan1
-0x6f6c:dan4
-0x6f6d:tan2
-0x6f6e:chao2
-0x6f6f:xun2
-0x6f70:kui4
-0x6f72:shao4
-0x6f73:tu2
-0x6f74:zhu1
-0x6f75:san4
-0x6f76:hei1
-0x6f77:bi3
-0x6f78:shan1
-0x6f79:chan2
-0x6f7a:chan2
-0x6f7b:shu3
-0x6f7c:tong2
-0x6f7d:pu3
-0x6f7e:lin2
-0x6f7f:wei2
-0x6f80:se4
-0x6f81:se4
-0x6f82:cheng2
-0x6f83:jiong4
-0x6f84:cheng2
-0x6f85:hua4
-0x6f86:jiao1
-0x6f87:lao4
-0x6f88:che4
-0x6f89:gan3
-0x6f8a:cun1
-0x6f8b:heng4
-0x6f8c:si1
-0x6f8d:shu4
-0x6f8e:peng2
-0x6f8f:han4
-0x6f90:yun2
-0x6f91:liu4
-0x6f92:hong4
-0x6f93:fu2
-0x6f94:hao4
-0x6f95:he2
-0x6f96:xian1
-0x6f97:jian4
-0x6f98:shan1
-0x6f99:xi4
-0x6f9c:lan2
-0x6f9e:yu2
-0x6f9f:lin3
-0x6fa0:mian3
-0x6fa1:zao3
-0x6fa2:dang1
-0x6fa3:huan3
-0x6fa4:ze2
-0x6fa5:xie4
-0x6fa6:yu4
-0x6fa7:li3
-0x6fa8:shi4
-0x6fa9:xue2
-0x6faa:ling2
-0x6fab:man4
-0x6fac:zi1
-0x6fad:yong1
-0x6fae:kuai4
-0x6faf:can4
-0x6fb0:lian4
-0x6fb1:dian4
-0x6fb2:ye4
-0x6fb3:ao4
-0x6fb4:huan2
-0x6fb5:zhen1
-0x6fb6:chan2
-0x6fb7:man4
-0x6fb8:dan3
-0x6fb9:dan4
-0x6fba:yi4
-0x6fbb:sui4
-0x6fbc:pi4
-0x6fbd:ju4
-0x6fbe:ta4
-0x6fbf:qin2
-0x6fc0:ji1
-0x6fc1:zhuo2
-0x6fc2:lian2
-0x6fc3:nong2
-0x6fc4:guo1
-0x6fc5:jin4
-0x6fc6:fen2
-0x6fc7:se4
-0x6fc8:ji2
-0x6fc9:sui1
-0x6fca:hui4
-0x6fcb:chu3
-0x6fcc:ta4
-0x6fcd:song1
-0x6fce:ding3
-0x6fd0:zhu3
-0x6fd1:lai4
-0x6fd2:bin1
-0x6fd3:lian2
-0x6fd4:mi3
-0x6fd5:shi1
-0x6fd6:shu4
-0x6fd7:mi4
-0x6fd8:ning4
-0x6fd9:ying2
-0x6fda:ying2
-0x6fdb:meng2
-0x6fdc:jin4
-0x6fdd:qi2
-0x6fde:pi4
-0x6fdf:ji4
-0x6fe0:hao2
-0x6fe1:ru2
-0x6fe2:zui3
-0x6fe3:wo4
-0x6fe4:tao1
-0x6fe5:yin4
-0x6fe6:yin3
-0x6fe7:dui4
-0x6fe8:ci2
-0x6fe9:huo4
-0x6fea:jing4
-0x6feb:lan4
-0x6fec:jun4
-0x6fed:ai4
-0x6fee:pu2
-0x6fef:zhuo2
-0x6ff0:wei2
-0x6ff1:bin1
-0x6ff2:gu3
-0x6ff3:qian2
-0x6ff4:xing2
-0x6ff6:kuo4
-0x6ff7:fei4
-0x6ffa:jian4
-0x6ffb:wei3
-0x6ffc:luo4
-0x6ffd:zan4
-0x6ffe:lv4
-0x6fff:li4
-0x7000:you1
-0x7001:yang4
-0x7002:lu3
-0x7003:si4
-0x7004:jie2
-0x7005:ying4
-0x7006:du2
-0x7007:wang3
-0x7008:hui1
-0x7009:xie4
-0x700a:pan2
-0x700b:shen3
-0x700c:biao1
-0x700d:chan2
-0x700e:mo4
-0x700f:liu2
-0x7010:jian1
-0x7011:pu4
-0x7012:se4
-0x7013:cheng2
-0x7014:gu3
-0x7015:bin1
-0x7016:huo4
-0x7017:xian4
-0x7018:lu2
-0x7019:qin1
-0x701a:han4
-0x701b:ying2
-0x701c:yong1
-0x701d:li4
-0x701e:jing4
-0x701f:xiao1
-0x7020:ying2
-0x7021:sui3
-0x7022:wei2
-0x7023:xie4
-0x7024:huai2
-0x7025:hao4
-0x7026:zhu1
-0x7027:long2
-0x7028:lai4
-0x7029:dui4
-0x702a:fan2
-0x702b:hu2
-0x702c:lai4
-0x702f:ying2
-0x7030:mi2
-0x7031:ji4
-0x7032:lian4
-0x7033:jian4
-0x7034:ying3
-0x7035:fen4
-0x7036:lin2
-0x7037:yi4
-0x7038:jian1
-0x7039:yue4
-0x703a:chan2
-0x703b:dai4
-0x703c:rang2
-0x703d:jian3
-0x703e:lan2
-0x703f:fan2
-0x7040:shuang4
-0x7041:yuan1
-0x7042:zhuo2
-0x7043:feng1
-0x7044:she4
-0x7045:lei3
-0x7046:lan2
-0x7047:cong2
-0x7048:qu2
-0x7049:yong1
-0x704a:qian2
-0x704b:fa3
-0x704c:guan4
-0x704d:que4
-0x704e:yan4
-0x704f:hao4
-0x7051:sa3
-0x7052:zan4
-0x7053:luan2
-0x7054:yan4
-0x7055:li2
-0x7056:mi3
-0x7057:shan4
-0x7058:tan1
-0x7059:dang3
-0x705a:jiao3
-0x705b:chan3
-0x705d:hao4
-0x705e:ba4
-0x705f:zhu2
-0x7060:lan3
-0x7061:lan2
-0x7062:nang3
-0x7063:wan1
-0x7064:luan2
-0x7065:xun2
-0x7066:xian3
-0x7067:yan4
-0x7068:gan3
-0x7069:yan4
-0x706a:yu4
-0x706b:huo3
-0x706c:biao1
-0x706d:mie4
-0x706e:guang1
-0x706f:deng1
-0x7070:hui1
-0x7071:xiao1
-0x7072:xiao1
-0x7074:hong2
-0x7075:ling2
-0x7076:zao4
-0x7077:zhuan4
-0x7078:jiu3
-0x7079:zha4
-0x707a:xie4
-0x707b:chi4
-0x707c:zhuo2
-0x707d:zai1
-0x707e:zai1
-0x707f:can4
-0x7080:yang2
-0x7081:qi4
-0x7082:zhong1
-0x7083:fen2
-0x7084:niu3
-0x7085:jiong3
-0x7086:wen2
-0x7087:po4
-0x7088:yi4
-0x7089:lu2
-0x708a:chui1
-0x708b:pi1
-0x708c:kai4
-0x708d:pan4
-0x708e:yan2
-0x708f:kai4
-0x7090:pang4
-0x7091:mu4
-0x7092:chao3
-0x7093:liao4
-0x7094:gui4
-0x7095:kang4
-0x7096:tun2
-0x7097:guang1
-0x7098:xin1
-0x7099:zhi4
-0x709b:guang1
-0x709c:wei3
-0x709d:qiang4
-0x709f:da2
-0x70a0:xia2
-0x70a1:zheng1
-0x70a2:zhu2
-0x70a3:ke3
-0x70a4:zhao4
-0x70a5:fu2
-0x70a6:ba2
-0x70a7:duo4
-0x70a8:duo4
-0x70a9:ling4
-0x70aa:zhuo2
-0x70ab:xuan4
-0x70ac:ju4
-0x70ad:tan4
-0x70ae:pao4
-0x70af:jiong3
-0x70b0:pao2
-0x70b1:tai2
-0x70b2:tai2
-0x70b3:bing3
-0x70b4:yang3
-0x70b5:tong1
-0x70b6:han1
-0x70b7:zhu4
-0x70b8:zha4
-0x70b9:dian3
-0x70ba:wei4
-0x70bb:shi2
-0x70bc:lian4
-0x70bd:chi4
-0x70be:huang3
-0x70c0:hu1
-0x70c1:shuo4
-0x70c2:lan4
-0x70c3:jing3
-0x70c4:jiao3
-0x70c5:xu4
-0x70c6:xing2
-0x70c7:quan4
-0x70c8:lie4
-0x70c9:huan4
-0x70ca:yang2
-0x70cb:xiao1
-0x70cc:xiu1
-0x70cd:xian3
-0x70ce:yin2
-0x70cf:wu1
-0x70d0:zhou1
-0x70d1:yao2
-0x70d2:shi4
-0x70d3:wei1
-0x70d4:tong2
-0x70d5:xue4
-0x70d6:zai1
-0x70d7:kai4
-0x70d8:hong1
-0x70d9:luo4
-0x70da:xia2
-0x70db:zhu2
-0x70dc:xuan3
-0x70dd:zheng1
-0x70de:po4
-0x70df:yan1
-0x70e0:hui3
-0x70e1:guang1
-0x70e2:zhe4
-0x70e3:hui1
-0x70e4:kao3
-0x70e6:fan2
-0x70e7:shao1
-0x70e8:ye4
-0x70e9:hui4
-0x70eb:tang4
-0x70ec:jin4
-0x70ed:re4
-0x70ef:xi1
-0x70f0:fu2
-0x70f1:jiong3
-0x70f2:che4
-0x70f3:pu3
-0x70f4:jing3
-0x70f5:zhuo2
-0x70f6:ting3
-0x70f7:wan2
-0x70f8:hai3
-0x70f9:peng1
-0x70fa:lang3
-0x70fb:shan1
-0x70fc:hu1
-0x70fd:feng1
-0x70fe:chi4
-0x70ff:rong2
-0x7100:hu2
-0x7102:shu2
-0x7103:he4
-0x7104:xun1
-0x7105:ku4
-0x7106:jue2
-0x7107:xiao1
-0x7108:xi1
-0x7109:yan1
-0x710a:han4
-0x710b:zhuang4
-0x710c:jun4
-0x710d:di4
-0x710e:xie4
-0x710f:ji2
-0x7110:wu4
-0x7113:han2
-0x7114:yan4
-0x7115:huan4
-0x7116:men4
-0x7117:ju2
-0x7118:chou2
-0x7119:bei4
-0x711a:fen2
-0x711b:lin4
-0x711c:kun1
-0x711d:hun4
-0x711e:tun1
-0x711f:xi2
-0x7120:cui4
-0x7121:wu2
-0x7122:hong1
-0x7123:ju4
-0x7124:fu3
-0x7125:wo4
-0x7126:jiao1
-0x7127:cong1
-0x7128:feng4
-0x7129:ping1
-0x712a:qiong1
-0x712b:ruo4
-0x712c:xi2
-0x712d:qiong2
-0x712e:xin4
-0x712f:zhuo2
-0x7130:yan4
-0x7131:yan4
-0x7132:yi4
-0x7133:jue2
-0x7134:yu4
-0x7135:gang4
-0x7136:ran2
-0x7137:pi2
-0x7138:gu3
-0x713a:sheng1
-0x713b:chang4
-0x713c:shao1
-0x713f:geng1
-0x7141:chen2
-0x7142:he4
-0x7143:kui3
-0x7144:zhong1
-0x7145:duan4
-0x7146:xia1
-0x7147:hui1
-0x7148:feng4
-0x7149:lian4
-0x714a:xuan1
-0x714b:xing1
-0x714c:huang2
-0x714d:jiao3
-0x714e:jian1
-0x714f:bi4
-0x7150:ying1
-0x7151:zhu3
-0x7152:wei3
-0x7153:tuan1
-0x7154:tian4
-0x7155:xi1
-0x7156:nuan3
-0x7157:nuan3
-0x7158:chan2
-0x7159:yan1
-0x715a:jiong3
-0x715b:jiong3
-0x715c:yu4
-0x715d:mei4
-0x715e:sha1
-0x715f:wei4
-0x7160:ye4
-0x7161:xin4
-0x7162:qiong2
-0x7163:rou3
-0x7164:mei2
-0x7165:huan4
-0x7166:xu3
-0x7167:zhao4
-0x7168:wei1
-0x7169:fan2
-0x716a:qiu2
-0x716b:sui4
-0x716c:yang2
-0x716d:lie4
-0x716e:zhu3
-0x7170:gao4
-0x7171:gua1
-0x7172:bao1
-0x7173:hu2
-0x7174:yun1
-0x7175:xia1
-0x7178:bian1
-0x7179:gou4
-0x717a:tui4
-0x717b:tang2
-0x717c:chao3
-0x717d:shan1
-0x717e:en1
-0x717f:bo2
-0x7180:huang3
-0x7181:xie2
-0x7182:xi4
-0x7183:wu4
-0x7184:xi2
-0x7185:yun4
-0x7186:he2
-0x7187:he4
-0x7188:xi1
-0x7189:yun2
-0x718a:xiong2
-0x718b:nai2
-0x718c:shan4
-0x718e:yao4
-0x718f:xun1
-0x7190:mi4
-0x7191:lian2
-0x7192:ying2
-0x7193:wu3
-0x7194:rong2
-0x7197:qiang4
-0x7198:liu1
-0x7199:xi1
-0x719a:bi4
-0x719b:biao1
-0x719c:zong3
-0x719d:lu4
-0x719e:jian1
-0x719f:shu2
-0x71a0:yi4
-0x71a1:lou2
-0x71a2:feng1
-0x71a3:sui1
-0x71a4:yi4
-0x71a5:tong1
-0x71a6:jue2
-0x71a7:zong1
-0x71a8:yun4
-0x71a9:hu4
-0x71aa:yi2
-0x71ab:zhi4
-0x71ac:ao2
-0x71ad:wei4
-0x71ae:liao2
-0x71af:han4
-0x71b0:ou1
-0x71b1:re4
-0x71b2:jiong3
-0x71b3:man4
-0x71b5:shang1
-0x71b6:cuan4
-0x71b7:zeng1
-0x71b8:jian1
-0x71b9:xi1
-0x71ba:xi1
-0x71bb:xi1
-0x71bc:yi4
-0x71bd:xiao4
-0x71be:chi4
-0x71bf:huang2
-0x71c0:chan3
-0x71c1:ye4
-0x71c2:qian2
-0x71c3:ran2
-0x71c4:yan4
-0x71c5:xian2
-0x71c6:qiao2
-0x71c7:zun4
-0x71c8:deng1
-0x71c9:dun4
-0x71ca:shen1
-0x71cb:jiao1
-0x71cc:fen2
-0x71cd:si1
-0x71ce:liao3
-0x71cf:yu4
-0x71d0:lin2
-0x71d1:tong2
-0x71d2:shao1
-0x71d3:fen1
-0x71d4:fan2
-0x71d5:yan4
-0x71d6:xun2
-0x71d7:lan4
-0x71d8:mei3
-0x71d9:tang4
-0x71da:yi1
-0x71db:jing3
-0x71dc:men4
-0x71df:ying2
-0x71e0:yu4
-0x71e1:yi4
-0x71e2:xue2
-0x71e3:lan2
-0x71e4:tai4
-0x71e5:zao4
-0x71e6:can4
-0x71e7:sui4
-0x71e8:xi1
-0x71e9:que4
-0x71ea:cong1
-0x71eb:lian2
-0x71ec:hui3
-0x71ed:zhu2
-0x71ee:xie4
-0x71ef:ling2
-0x71f0:wei1
-0x71f1:yi4
-0x71f2:xie2
-0x71f3:zhao4
-0x71f4:hui4
-0x71f7:lan2
-0x71f8:ru2
-0x71f9:xian3
-0x71fa:kao3
-0x71fb:xun1
-0x71fc:jin4
-0x71fd:chou2
-0x71fe:dao4
-0x71ff:yao4
-0x7200:he4
-0x7201:lan4
-0x7202:biao1
-0x7203:rong2
-0x7204:li4
-0x7205:mo4
-0x7206:bao4
-0x7207:ruo4
-0x7208:lv2
-0x7209:la4
-0x720a:ao2
-0x720b:xun4
-0x720c:kuang4
-0x720d:shuo4
-0x720f:li4
-0x7210:lu2
-0x7211:jue2
-0x7212:liao4
-0x7213:yan4
-0x7214:xi1
-0x7215:xie4
-0x7216:long2
-0x7217:ye4
-0x7219:rang3
-0x721a:yue4
-0x721b:lan4
-0x721c:cong2
-0x721d:jue2
-0x721e:tong2
-0x721f:guan4
-0x7221:che4
-0x7222:mi2
-0x7223:tang3
-0x7224:lan4
-0x7225:zhu2
-0x7227:ling2
-0x7228:cuan4
-0x7229:yu4
-0x722a:zhua3
-0x722c:pa2
-0x722d:zheng1
-0x722e:pao2
-0x722f:cheng1
-0x7230:yuan2
-0x7231:ai4
-0x7232:wei4
-0x7234:jue2
-0x7235:jue2
-0x7236:fu4
-0x7237:ye2
-0x7238:ba4
-0x7239:die1
-0x723a:ye2
-0x723b:yao2
-0x723c:zu3
-0x723d:shuang3
-0x723e:er3
-0x723f:qiang2
-0x7240:chuang2
-0x7241:ge1
-0x7242:zang1
-0x7243:die2
-0x7244:qiang1
-0x7245:yong2
-0x7246:qiang2
-0x7247:pian4
-0x7248:ban3
-0x7249:pan4
-0x724a:shao2
-0x724b:jian1
-0x724c:pai2
-0x724d:du2
-0x724e:chuang1
-0x724f:tou2
-0x7250:zha2
-0x7251:bian1
-0x7252:die2
-0x7253:bang3
-0x7254:bo2
-0x7255:chuang1
-0x7256:you3
-0x7258:du2
-0x7259:ya2
-0x725a:cheng4
-0x725b:niu2
-0x725d:pin4
-0x725e:jiu1
-0x725f:mou2
-0x7260:tuo2
-0x7261:mu3
-0x7262:lao2
-0x7263:ren4
-0x7264:mang2
-0x7265:fang1
-0x7266:mao2
-0x7267:mu4
-0x7268:gang1
-0x7269:wu4
-0x726a:yan4
-0x726b:ge1
-0x726c:bei4
-0x726d:si4
-0x726e:jian4
-0x726f:gu3
-0x7270:you4
-0x7271:ge1
-0x7272:sheng1
-0x7273:mu3
-0x7274:di3
-0x7275:qian1
-0x7276:quan4
-0x7277:quan2
-0x7278:zi4
-0x7279:te4
-0x727a:xi1
-0x727b:mang2
-0x727c:keng1
-0x727d:qian1
-0x727e:wu2
-0x727f:gu4
-0x7280:xi1
-0x7281:li2
-0x7282:li2
-0x7283:pou3
-0x7284:ji1
-0x7285:gang1
-0x7286:zhi2
-0x7287:ben1
-0x7288:quan2
-0x7289:run2
-0x728a:du2
-0x728b:ju4
-0x728c:jia1
-0x728d:jian1
-0x728e:feng1
-0x728f:pian1
-0x7290:ke1
-0x7291:ju2
-0x7292:kao4
-0x7293:chu2
-0x7294:xi4
-0x7295:bei4
-0x7296:luo4
-0x7297:jie4
-0x7298:ma2
-0x7299:san1
-0x729a:wei4
-0x729b:li2
-0x729c:dun1
-0x729d:tong2
-0x729f:jiang4
-0x72a1:li4
-0x72a2:du2
-0x72a3:lie4
-0x72a4:pi2
-0x72a5:piao3
-0x72a6:bao4
-0x72a7:xi1
-0x72a8:chou1
-0x72a9:wei4
-0x72aa:kui2
-0x72ab:chou1
-0x72ac:quan3
-0x72ae:ba2
-0x72af:fan4
-0x72b0:qiu2
-0x72b1:ji3
-0x72b2:cai2
-0x72b3:chuo2
-0x72b4:an4
-0x72b5:ge1
-0x72b6:zhuang4
-0x72b7:guang3
-0x72b8:ma4
-0x72b9:you2
-0x72ba:kang4
-0x72bb:bo2
-0x72bc:hou3
-0x72bd:ya2
-0x72be:yin2
-0x72bf:huan1
-0x72c0:zhuang4
-0x72c1:yun3
-0x72c2:kuang2
-0x72c3:niu3
-0x72c4:di2
-0x72c5:qing1
-0x72c6:zhong4
-0x72c7:mu4
-0x72c8:bei4
-0x72c9:pi1
-0x72ca:ju2
-0x72cb:ni2
-0x72cc:sheng1
-0x72cd:pao2
-0x72ce:xia2
-0x72cf:tuo2
-0x72d0:hu2
-0x72d1:ling2
-0x72d2:fei4
-0x72d3:pi1
-0x72d4:ni3
-0x72d5:ao3
-0x72d6:you4
-0x72d7:gou3
-0x72d8:yue4
-0x72d9:ju1
-0x72da:dan4
-0x72db:po4
-0x72dc:gu3
-0x72dd:xian3
-0x72de:ning2
-0x72df:huan2
-0x72e0:hen3
-0x72e1:jiao3
-0x72e2:he2
-0x72e3:zhao4
-0x72e4:ji2
-0x72e5:xun4
-0x72e6:shan1
-0x72e7:ta4
-0x72e8:rong2
-0x72e9:shou4
-0x72ea:tong1
-0x72eb:lao3
-0x72ec:du2
-0x72ed:xia2
-0x72ee:shi1
-0x72ef:hua2
-0x72f0:zheng1
-0x72f1:yu4
-0x72f2:sun1
-0x72f3:yu2
-0x72f4:bi4
-0x72f5:mang2
-0x72f6:xi3
-0x72f7:juan4
-0x72f8:li2
-0x72f9:xia2
-0x72fa:yin2
-0x72fb:suan1
-0x72fc:lang2
-0x72fd:bei4
-0x72fe:zhi4
-0x72ff:yan2
-0x7300:sha1
-0x7301:li4
-0x7302:han4
-0x7303:xian3
-0x7304:jing1
-0x7305:pai2
-0x7306:fei1
-0x7307:yao2
-0x7308:ba4
-0x7309:qi2
-0x730a:ni2
-0x730b:biao1
-0x730c:yin4
-0x730d:lai2
-0x730e:xi2
-0x730f:jian1
-0x7310:qiang1
-0x7311:kun1
-0x7312:yan1
-0x7313:guo3
-0x7314:zong4
-0x7315:mi2
-0x7316:chang1
-0x7317:yi1
-0x7318:zhi4
-0x7319:zheng1
-0x731a:ya2
-0x731b:meng3
-0x731c:cai1
-0x731d:cu4
-0x731e:she4
-0x7321:luo2
-0x7322:hu2
-0x7323:zong1
-0x7324:ji4
-0x7325:wei3
-0x7326:feng1
-0x7327:wo1
-0x7328:yuan2
-0x7329:xing1
-0x732a:zhu1
-0x732b:mao1
-0x732c:wei4
-0x732d:yuan2
-0x732e:xian4
-0x732f:tuan1
-0x7330:ya4
-0x7331:nao2
-0x7332:xie1
-0x7333:jia1
-0x7334:hou2
-0x7335:bian1
-0x7336:you2
-0x7337:you2
-0x7338:mei2
-0x7339:zha1
-0x733a:yao2
-0x733b:sun1
-0x733c:bo2
-0x733d:ming2
-0x733e:hua2
-0x733f:yuan2
-0x7340:sou1
-0x7341:ma4
-0x7342:yuan2
-0x7343:dai1
-0x7344:yu4
-0x7345:shi1
-0x7346:hao2
-0x7348:yi4
-0x7349:zhen1
-0x734a:chuang4
-0x734b:hao2
-0x734c:man4
-0x734d:jing4
-0x734e:jiang3
-0x734f:mu2
-0x7350:zhang1
-0x7351:chan2
-0x7352:ao2
-0x7353:ao2
-0x7354:hao2
-0x7355:cui1
-0x7356:fen2
-0x7357:jue2
-0x7358:bi4
-0x7359:bi4
-0x735a:huang2
-0x735b:pu2
-0x735c:lin2
-0x735d:yu4
-0x735e:tong2
-0x735f:yao4
-0x7360:liao2
-0x7361:shuo4
-0x7362:xiao1
-0x7365:xi2
-0x7366:ge2
-0x7367:juan4
-0x7368:du2
-0x7369:hui4
-0x736a:kuai4
-0x736b:xian3
-0x736c:xie4
-0x736d:ta4
-0x736e:xian3
-0x736f:xun1
-0x7370:ning2
-0x7371:pin2
-0x7372:huo4
-0x7373:nou4
-0x7374:meng2
-0x7375:lie4
-0x7376:nao2
-0x7377:guang3
-0x7378:shou4
-0x7379:lu2
-0x737a:ta3
-0x737b:xian4
-0x737c:mi2
-0x737d:rang2
-0x737e:huan1
-0x737f:nao2
-0x7380:luo2
-0x7381:xian3
-0x7382:qi2
-0x7383:jue2
-0x7384:xuan2
-0x7385:miao4
-0x7386:zi1
-0x7387:lv4
-0x7388:lu2
-0x7389:yu4
-0x738a:su4
-0x738b:wang2
-0x738c:qiu2
-0x738d:ga3
-0x738e:ding1
-0x738f:le4
-0x7390:ba1
-0x7391:ji1
-0x7392:hong2
-0x7393:di4
-0x7394:chuan4
-0x7395:gan1
-0x7396:jiu3
-0x7397:yu2
-0x7398:ji3
-0x7399:yu2
-0x739a:yang2
-0x739b:ma3
-0x739c:gong1
-0x739d:wu3
-0x739e:fu1
-0x739f:min2
-0x73a0:jie4
-0x73a1:ya4
-0x73a2:bin1
-0x73a3:bian4
-0x73a4:bang4
-0x73a5:yue4
-0x73a6:jue2
-0x73a7:yun3
-0x73a8:jue2
-0x73a9:wan2
-0x73aa:jian1
-0x73ab:mei2
-0x73ac:dan3
-0x73ad:pi2
-0x73ae:wei3
-0x73af:huan2
-0x73b0:xian4
-0x73b1:qiang1
-0x73b2:ling2
-0x73b3:dai4
-0x73b4:yi4
-0x73b5:an2
-0x73b6:ping2
-0x73b7:dian4
-0x73b8:fu2
-0x73b9:xuan2
-0x73ba:xi3
-0x73bb:bo1
-0x73bc:ci3
-0x73bd:gou3
-0x73be:jia3
-0x73bf:shao2
-0x73c0:po4
-0x73c1:ci2
-0x73c2:ke1
-0x73c3:ran3
-0x73c4:sheng1
-0x73c5:shen1
-0x73c6:yi2
-0x73c7:zu3
-0x73c8:jia1
-0x73c9:min2
-0x73ca:shan1
-0x73cb:liu3
-0x73cc:bi4
-0x73cd:zhen1
-0x73ce:zhen1
-0x73cf:jue2
-0x73d0:fa4
-0x73d1:long2
-0x73d2:jin1
-0x73d3:jiao4
-0x73d4:jian4
-0x73d5:li4
-0x73d6:guang1
-0x73d7:xian1
-0x73d8:zhou1
-0x73d9:gong3
-0x73da:yan1
-0x73db:xiu4
-0x73dc:yang2
-0x73dd:xu3
-0x73de:luo4
-0x73df:su4
-0x73e0:zhu1
-0x73e1:qin2
-0x73e2:ken4
-0x73e3:xun2
-0x73e4:bao3
-0x73e5:er3
-0x73e6:xiang4
-0x73e7:yao2
-0x73e8:xia2
-0x73e9:heng2
-0x73ea:gui1
-0x73eb:chong1
-0x73ec:xu4
-0x73ed:ban1
-0x73ee:pei4
-0x73f0:dang1
-0x73f2:hun2
-0x73f3:wen2
-0x73f4:e2
-0x73f5:cheng2
-0x73f6:di4
-0x73f7:wu3
-0x73f8:wu2
-0x73f9:cheng2
-0x73fa:jun4
-0x73fb:mei2
-0x73fc:bei4
-0x73fd:ting3
-0x73fe:xian4
-0x73ff:chuo4
-0x7400:han2
-0x7401:xuan2
-0x7402:yan2
-0x7403:qiu2
-0x7404:quan3
-0x7405:lang2
-0x7406:li3
-0x7407:xiu4
-0x7408:fu2
-0x7409:liu2
-0x740a:ye2
-0x740b:xi1
-0x740c:ling2
-0x740d:li4
-0x740e:jin4
-0x740f:lian2
-0x7410:suo3
-0x7413:wan2
-0x7414:dian4
-0x7415:pin2
-0x7416:zhan3
-0x7417:cui4
-0x7418:min2
-0x7419:yu4
-0x741a:ju1
-0x741b:chen1
-0x741c:lai2
-0x741d:wen2
-0x741e:sheng4
-0x741f:wei2
-0x7420:dian3
-0x7421:chu4
-0x7422:zhuo2
-0x7423:pei3
-0x7424:cheng1
-0x7425:hu3
-0x7426:qi2
-0x7427:e4
-0x7428:kun1
-0x7429:chang1
-0x742a:qi2
-0x742b:beng3
-0x742c:wan3
-0x742d:lu4
-0x742e:cong2
-0x742f:guan3
-0x7430:yan3
-0x7431:diao1
-0x7432:bei4
-0x7433:lin2
-0x7434:qin2
-0x7435:pi2
-0x7436:pa2
-0x7437:que4
-0x7438:zhuo2
-0x7439:qin2
-0x743a:fa4
-0x743c:qiong2
-0x743d:du3
-0x743e:jie4
-0x743f:hun2
-0x7440:yu3
-0x7441:mao4
-0x7442:mei2
-0x7444:xuan1
-0x7445:ti2
-0x7446:xing1
-0x7447:dai4
-0x7448:rou2
-0x7449:min2
-0x744a:zhen1
-0x744b:wei3
-0x744c:ruan3
-0x744d:huan4
-0x744e:jie1
-0x744f:chuan1
-0x7450:jian3
-0x7451:zhuan4
-0x7452:yang2
-0x7453:lian4
-0x7454:quan2
-0x7455:xia2
-0x7456:duan4
-0x7457:yuan4
-0x7458:ye2
-0x7459:nao3
-0x745a:hu2
-0x745b:ying1
-0x745c:yu2
-0x745d:huang2
-0x745e:rui4
-0x745f:se4
-0x7460:liu2
-0x7462:rong2
-0x7463:suo3
-0x7464:yao2
-0x7465:wen1
-0x7466:wu1
-0x7467:jin1
-0x7468:jin4
-0x7469:ying2
-0x746a:ma3
-0x746b:tao1
-0x746c:liu2
-0x746d:tang2
-0x746e:li4
-0x746f:lang2
-0x7470:gui1
-0x7471:tian4
-0x7472:qiang1
-0x7473:cuo3
-0x7474:jue2
-0x7475:zhao3
-0x7476:yao2
-0x7477:ai4
-0x7478:bin1
-0x7479:tu2
-0x747a:chang2
-0x747b:kun1
-0x747c:zhuan1
-0x747d:cong1
-0x747e:jin3
-0x747f:yi1
-0x7480:cui3
-0x7481:cong1
-0x7482:qi2
-0x7483:li2
-0x7484:ying3
-0x7485:suo3
-0x7486:qiu2
-0x7487:xuan2
-0x7488:ao2
-0x7489:lian2
-0x748a:men2
-0x748b:zhang1
-0x748c:yin2
-0x748e:ying1
-0x748f:zhi4
-0x7490:lu4
-0x7491:wu2
-0x7492:deng1
-0x7494:zeng1
-0x7495:xun2
-0x7496:qu2
-0x7497:dang4
-0x7498:lin2
-0x7499:liao2
-0x749a:qiong2
-0x749b:su4
-0x749c:huang2
-0x749d:gui1
-0x749e:pu2
-0x749f:jing3
-0x74a0:fan2
-0x74a1:jin4
-0x74a2:liu2
-0x74a3:ji1
-0x74a5:jing3
-0x74a6:ai4
-0x74a7:bi4
-0x74a8:can4
-0x74a9:qu2
-0x74aa:zao3
-0x74ab:dang1
-0x74ac:jiao3
-0x74ad:gun4
-0x74ae:tan3
-0x74af:hui4
-0x74b0:huan2
-0x74b1:se4
-0x74b2:sui4
-0x74b3:tian2
-0x74b5:yu2
-0x74b6:jin4
-0x74b7:lu2
-0x74b8:bin1
-0x74b9:shou4
-0x74ba:wen4
-0x74bb:zui3
-0x74bc:lan2
-0x74bd:xi3
-0x74be:ji4
-0x74bf:xuan2
-0x74c0:ruan3
-0x74c1:huo4
-0x74c2:gai4
-0x74c3:lei2
-0x74c4:du2
-0x74c5:li4
-0x74c6:zhi2
-0x74c7:rou2
-0x74c8:li2
-0x74c9:zan4
-0x74ca:qiong2
-0x74cb:zhe2
-0x74cc:gui1
-0x74cd:sui4
-0x74ce:la4
-0x74cf:long2
-0x74d0:lu2
-0x74d1:li4
-0x74d2:zan4
-0x74d3:lan4
-0x74d4:ying1
-0x74d5:mi2
-0x74d6:xiang1
-0x74d7:xi1
-0x74d8:guan4
-0x74d9:dao4
-0x74da:zan4
-0x74db:huan2
-0x74dc:gua1
-0x74dd:bo2
-0x74de:die2
-0x74df:bao2
-0x74e0:hu4
-0x74e1:zhi2
-0x74e2:piao2
-0x74e3:ban4
-0x74e4:rang2
-0x74e5:li4
-0x74e6:wa3
-0x74e8:jiang1
-0x74ea:fan3
-0x74eb:pen2
-0x74ec:fang3
-0x74ed:dan3
-0x74ee:weng4
-0x74ef:ou1
-0x74f3:hu2
-0x74f4:ling2
-0x74f5:yi2
-0x74f6:ping2
-0x74f7:ci2
-0x74f9:juan4
-0x74fa:chang2
-0x74fb:chi1
-0x74fd:dang4
-0x74fe:meng3
-0x74ff:pou3
-0x7500:zhui4
-0x7501:ping2
-0x7502:bian1
-0x7503:zhou4
-0x7504:zhen1
-0x7506:ci2
-0x7507:ying1
-0x7508:qi4
-0x7509:xian2
-0x750a:lou3
-0x750b:di4
-0x750c:ou1
-0x750d:meng2
-0x750e:zhuan1
-0x750f:peng4
-0x7510:lin2
-0x7511:zeng4
-0x7512:wu3
-0x7513:pi4
-0x7514:dan1
-0x7515:weng4
-0x7516:ying1
-0x7517:yan3
-0x7518:gan1
-0x7519:dai4
-0x751a:shen2
-0x751b:tian2
-0x751c:tian2
-0x751d:han1
-0x751e:chang2
-0x751f:sheng1
-0x7520:qing2
-0x7521:shen1
-0x7522:chan3
-0x7523:chan3
-0x7524:rui2
-0x7525:sheng1
-0x7526:su1
-0x7527:sen1
-0x7528:yong4
-0x7529:shuai3
-0x752a:lu4
-0x752b:fu3
-0x752c:yong3
-0x752d:beng2
-0x752e:feng4
-0x752f:ning2
-0x7530:tian2
-0x7531:you2
-0x7532:jia3
-0x7533:shen1
-0x7534:zha2
-0x7535:dian4
-0x7536:fu2
-0x7537:nan2
-0x7538:dian4
-0x7539:ping2
-0x753a:ting3
-0x753b:hua4
-0x753c:ting3
-0x753d:quan3
-0x753e:zi1
-0x753f:meng2
-0x7540:bi4
-0x7541:qi2
-0x7542:liu4
-0x7543:xun2
-0x7544:liu2
-0x7545:chang4
-0x7546:mu3
-0x7547:yun2
-0x7548:fan4
-0x7549:fu2
-0x754a:geng1
-0x754b:tian2
-0x754c:jie4
-0x754d:jie4
-0x754e:quan3
-0x754f:wei4
-0x7550:fu2
-0x7551:tian2
-0x7552:mu3
-0x7554:pan4
-0x7555:jiang1
-0x7556:wa1
-0x7557:da2
-0x7558:nan2
-0x7559:liu2
-0x755a:ben3
-0x755b:zhen3
-0x755c:chu4
-0x755d:mu3
-0x755e:mu3
-0x755f:ce4
-0x7561:gai1
-0x7562:bi4
-0x7563:da2
-0x7564:zhi4
-0x7565:lve4
-0x7566:qi2
-0x7567:lve4
-0x7568:pan1
-0x756a:fan1
-0x756b:hua4
-0x756c:yu2
-0x756d:yu2
-0x756e:mu3
-0x756f:jun4
-0x7570:yi4
-0x7571:liu2
-0x7572:yu2
-0x7573:die2
-0x7574:chou2
-0x7575:hua4
-0x7576:dang1
-0x7577:chuo4
-0x7578:ji1
-0x7579:wan3
-0x757a:jiang1
-0x757b:sheng2
-0x757c:chang4
-0x757d:tuan3
-0x757e:lei2
-0x757f:ji1
-0x7580:cha1
-0x7581:liu2
-0x7583:tuan3
-0x7584:lin2
-0x7585:jiang1
-0x7586:jiang1
-0x7587:chou2
-0x7588:bo4
-0x7589:die2
-0x758a:die2
-0x758b:pi3
-0x758c:nie4
-0x758d:dan4
-0x758e:shu1
-0x758f:shu1
-0x7590:zhi4
-0x7591:yi2
-0x7592:chuang2
-0x7593:nai3
-0x7594:ding1
-0x7595:bi3
-0x7596:jie2
-0x7597:liao2
-0x7598:gang1
-0x7599:ge1
-0x759a:jiu4
-0x759b:zhou3
-0x759c:xia4
-0x759d:shan4
-0x759e:xu1
-0x759f:nve4
-0x75a0:li4
-0x75a1:yang2
-0x75a2:chen4
-0x75a3:you2
-0x75a4:ba1
-0x75a5:jie4
-0x75a6:jue2
-0x75a7:zhi1
-0x75a8:xia1
-0x75a9:cui4
-0x75aa:bi4
-0x75ab:yi4
-0x75ac:li4
-0x75ad:zong4
-0x75ae:chuang1
-0x75af:feng1
-0x75b0:zhu4
-0x75b1:pao4
-0x75b2:pi2
-0x75b3:gan1
-0x75b4:ke1
-0x75b5:ci1
-0x75b6:xie4
-0x75b7:qi2
-0x75b8:dan3
-0x75b9:zhen3
-0x75ba:fa2
-0x75bb:zhi3
-0x75bc:teng2
-0x75bd:ju1
-0x75be:ji2
-0x75bf:fei4
-0x75c0:qu2
-0x75c1:dian4
-0x75c2:jia1
-0x75c3:xian2
-0x75c4:zha4
-0x75c5:bing4
-0x75c6:ni4
-0x75c7:zheng4
-0x75c8:yong1
-0x75c9:jing4
-0x75ca:quan2
-0x75cb:chong2
-0x75cc:tong1
-0x75cd:yi2
-0x75ce:kai1
-0x75cf:wei3
-0x75d0:hui2
-0x75d1:duo3
-0x75d2:yang3
-0x75d3:chi4
-0x75d4:zhi4
-0x75d5:hen2
-0x75d6:ya3
-0x75d7:mei4
-0x75d8:dou4
-0x75d9:jing4
-0x75da:xiao1
-0x75db:tong4
-0x75dc:tu1
-0x75dd:mang2
-0x75de:pi3
-0x75df:xiao1
-0x75e0:suan1
-0x75e1:pu1
-0x75e2:li4
-0x75e3:zhi4
-0x75e4:cuo2
-0x75e5:duo2
-0x75e6:wu4
-0x75e7:sha1
-0x75e8:lao2
-0x75e9:shou4
-0x75ea:huan4
-0x75eb:xian2
-0x75ec:yi4
-0x75ed:peng2
-0x75ee:zhang4
-0x75ef:guan3
-0x75f0:tan2
-0x75f1:fei4
-0x75f2:ma2
-0x75f3:lin2
-0x75f4:chi1
-0x75f5:ji4
-0x75f6:dian3
-0x75f7:an1
-0x75f8:chi4
-0x75f9:bi4
-0x75fa:bi4
-0x75fb:min2
-0x75fc:gu4
-0x75fd:dui1
-0x75fe:e1
-0x75ff:wei3
-0x7600:yu1
-0x7601:cui4
-0x7602:ya3
-0x7603:zhu2
-0x7604:cu4
-0x7605:dan4
-0x7606:shen4
-0x7607:zhong3
-0x7608:ji4
-0x7609:yu4
-0x760a:hou2
-0x760b:feng1
-0x760c:la4
-0x760d:yang2
-0x760e:shen4
-0x760f:tu2
-0x7610:yu3
-0x7611:gua1
-0x7612:wen2
-0x7613:huan4
-0x7614:ku4
-0x7615:jia3
-0x7616:yin1
-0x7617:yi4
-0x7618:lv2
-0x7619:sao1
-0x761a:jue2
-0x761b:chi4
-0x761c:xi2
-0x761d:guan1
-0x761e:yi4
-0x761f:wen1
-0x7620:ji2
-0x7621:chuang1
-0x7622:ban1
-0x7623:lei3
-0x7624:liu2
-0x7625:chai4
-0x7626:shou4
-0x7627:nve4
-0x7628:dian1
-0x7629:da5
-0x762a:pie1
-0x762b:tan1
-0x762c:zhang4
-0x762d:biao1
-0x762e:shen4
-0x762f:cu4
-0x7630:luo3
-0x7631:yi4
-0x7632:zong4
-0x7633:chou1
-0x7634:zhang4
-0x7635:zhai4
-0x7636:sou4
-0x7637:suo3
-0x7638:que2
-0x7639:diao4
-0x763a:lou4
-0x763b:lv2
-0x763c:mo4
-0x763d:jin4
-0x763e:yin3
-0x763f:ying3
-0x7640:huang2
-0x7641:fu2
-0x7642:liao2
-0x7643:long2
-0x7644:qiao2
-0x7645:liu2
-0x7646:lao2
-0x7647:xian2
-0x7648:fei4
-0x7649:dan4
-0x764a:yin4
-0x764b:he4
-0x764c:ai2
-0x764d:ban1
-0x764e:xian2
-0x764f:guan1
-0x7650:guai4
-0x7651:nong2
-0x7652:yu4
-0x7653:wei2
-0x7654:yi4
-0x7655:yong1
-0x7656:pi3
-0x7657:lei3
-0x7658:li4
-0x7659:shu3
-0x765a:dan4
-0x765b:lin3
-0x765c:dian4
-0x765d:lin3
-0x765e:lai4
-0x765f:bie3
-0x7660:ji4
-0x7661:chi1
-0x7662:yang3
-0x7663:xian3
-0x7664:jie2
-0x7665:zheng1
-0x7667:li4
-0x7668:huo4
-0x7669:lai4
-0x766b:dian1
-0x766c:xuan3
-0x766d:ying3
-0x766e:yin3
-0x766f:qu2
-0x7670:yong1
-0x7671:tan1
-0x7672:dian1
-0x7673:luo3
-0x7674:luan2
-0x7675:luan2
-0x7676:bo1
-0x7678:gui3
-0x7679:po1
-0x767a:fa1
-0x767b:deng1
-0x767c:fa1
-0x767d:bai2
-0x767e:bai3
-0x767f:qie2
-0x7680:bi1
-0x7681:zao4
-0x7682:zao4
-0x7683:mao4
-0x7684:de5
-0x7685:pa1
-0x7686:jie1
-0x7687:huang2
-0x7688:gui1
-0x7689:ci3
-0x768a:ling2
-0x768b:gao1
-0x768c:mo4
-0x768d:ji2
-0x768e:jiao3
-0x768f:peng3
-0x7690:gao1
-0x7691:ai2
-0x7692:e2
-0x7693:hao4
-0x7694:han4
-0x7695:bi1
-0x7696:wan3
-0x7697:chou2
-0x7698:qian4
-0x7699:xi1
-0x769a:ai2
-0x769b:jiong3
-0x769c:hao4
-0x769d:huang3
-0x769e:hao4
-0x769f:ze2
-0x76a0:cui3
-0x76a1:hao4
-0x76a2:xiao3
-0x76a3:ye4
-0x76a4:po2
-0x76a5:hao4
-0x76a6:jiao3
-0x76a7:ai4
-0x76a8:xing1
-0x76a9:huang4
-0x76aa:li4
-0x76ab:piao3
-0x76ac:he4
-0x76ad:jiao4
-0x76ae:pi2
-0x76af:gan3
-0x76b0:pao4
-0x76b1:zhou4
-0x76b2:jun1
-0x76b3:qiu2
-0x76b4:cun1
-0x76b5:que4
-0x76b6:zha1
-0x76b7:gu3
-0x76b8:jun1
-0x76b9:jun1
-0x76ba:zhou4
-0x76bb:zha1
-0x76bc:gu3
-0x76bd:zhan3
-0x76be:du2
-0x76bf:min3
-0x76c0:qi3
-0x76c1:ying2
-0x76c2:yu2
-0x76c3:bei1
-0x76c4:zhao1
-0x76c5:zhong1
-0x76c6:pen2
-0x76c7:he2
-0x76c8:ying2
-0x76c9:he2
-0x76ca:yi4
-0x76cb:bo1
-0x76cc:wan3
-0x76cd:he2
-0x76ce:ang4
-0x76cf:zhan3
-0x76d0:yan2
-0x76d1:jian1
-0x76d2:he2
-0x76d3:yu1
-0x76d4:kui1
-0x76d5:fan4
-0x76d6:gai4
-0x76d7:dao4
-0x76d8:pan2
-0x76d9:fu3
-0x76da:qiu2
-0x76db:sheng4
-0x76dc:dao4
-0x76dd:lu4
-0x76de:zhan3
-0x76df:meng2
-0x76e0:li3
-0x76e1:jin4
-0x76e2:xu4
-0x76e3:jian1
-0x76e4:pan2
-0x76e5:guan4
-0x76e6:an1
-0x76e7:lu2
-0x76e8:shu3
-0x76e9:zhou1
-0x76ea:dang4
-0x76eb:an1
-0x76ec:gu3
-0x76ed:li4
-0x76ee:mu4
-0x76ef:ding1
-0x76f0:gan3
-0x76f1:xu1
-0x76f2:mang2
-0x76f3:mang2
-0x76f4:zhi2
-0x76f5:qi4
-0x76f6:ruan3
-0x76f7:tian2
-0x76f8:xiang1
-0x76f9:dun3
-0x76fa:xin1
-0x76fb:xi4
-0x76fc:pan4
-0x76fd:feng1
-0x76fe:dun4
-0x76ff:min2
-0x7700:ming2
-0x7701:sheng3
-0x7702:shi4
-0x7703:yun2
-0x7704:mian3
-0x7705:pan1
-0x7706:fang3
-0x7707:miao3
-0x7708:dan1
-0x7709:mei2
-0x770a:mao4
-0x770b:kan4
-0x770c:xian4
-0x770d:ou1
-0x770e:shi4
-0x770f:yang1
-0x7710:zheng1
-0x7711:yao3
-0x7712:shen4
-0x7713:huo4
-0x7714:da4
-0x7715:zhen3
-0x7716:kuang4
-0x7717:ju1
-0x7718:shen4
-0x7719:chi4
-0x771a:sheng3
-0x771b:mei4
-0x771c:mo4
-0x771d:zhu4
-0x771e:zhen1
-0x771f:zhen1
-0x7720:mian2
-0x7721:di1
-0x7722:yuan1
-0x7723:die2
-0x7724:yi2
-0x7725:zi4
-0x7726:zi4
-0x7727:chao3
-0x7728:zha3
-0x7729:xuan4
-0x772a:bing3
-0x772b:mi3
-0x772c:long2
-0x772d:sui1
-0x772e:dong4
-0x772f:mi3
-0x7730:die2
-0x7731:yi2
-0x7732:er4
-0x7733:ming3
-0x7734:xuan4
-0x7735:chi1
-0x7736:kuang4
-0x7737:juan4
-0x7738:mou2
-0x7739:zhen4
-0x773a:tiao4
-0x773b:yang2
-0x773c:yan3
-0x773d:mo4
-0x773e:zhong4
-0x773f:mai4
-0x7740:zhao2
-0x7741:zheng1
-0x7742:mei2
-0x7743:jun4
-0x7744:shao4
-0x7745:han4
-0x7746:huan3
-0x7747:di4
-0x7748:cheng3
-0x7749:cuo1
-0x774a:juan4
-0x774b:e2
-0x774c:wan3
-0x774d:xian4
-0x774e:xi1
-0x774f:kun4
-0x7750:lai4
-0x7751:jian3
-0x7752:shan3
-0x7753:tian3
-0x7754:hun3
-0x7755:wan3
-0x7756:ling2
-0x7757:shi4
-0x7758:qiong2
-0x7759:lie4
-0x775a:yai2
-0x775b:jing1
-0x775c:zheng1
-0x775d:li2
-0x775e:lai4
-0x775f:sui4
-0x7760:juan4
-0x7761:shui4
-0x7762:sui1
-0x7763:du1
-0x7764:bi4
-0x7765:bi4
-0x7766:mu4
-0x7767:hun1
-0x7768:ni4
-0x7769:lu4
-0x776a:yi4
-0x776b:jie2
-0x776c:cai3
-0x776d:zhou3
-0x776e:yu2
-0x776f:hun1
-0x7770:ma4
-0x7771:xia4
-0x7772:xing3
-0x7773:xi1
-0x7774:gun4
-0x7776:chun3
-0x7777:jian1
-0x7778:mei4
-0x7779:du3
-0x777a:hou2
-0x777b:xuan1
-0x777c:ti4
-0x777d:kui2
-0x777e:gao1
-0x777f:rui4
-0x7780:mao4
-0x7781:xu4
-0x7782:fa1
-0x7783:wen1
-0x7784:miao2
-0x7785:chou3
-0x7786:kui4
-0x7787:mi1
-0x7788:weng3
-0x7789:kou4
-0x778a:dang4
-0x778b:chen1
-0x778c:ke1
-0x778d:sou3
-0x778e:xia1
-0x778f:qiong2
-0x7790:mao4
-0x7791:ming2
-0x7792:man2
-0x7793:shui4
-0x7794:ze2
-0x7795:zhang4
-0x7796:yi4
-0x7797:diao1
-0x7798:ou1
-0x7799:mo4
-0x779a:shun4
-0x779b:cong1
-0x779c:lou1
-0x779d:chi1
-0x779e:man2
-0x779f:piao3
-0x77a0:cheng1
-0x77a1:ji4
-0x77a2:meng2
-0x77a4:run2
-0x77a5:pie1
-0x77a6:xi1
-0x77a7:qiao2
-0x77a8:pu2
-0x77a9:zhu3
-0x77aa:deng4
-0x77ab:shen3
-0x77ac:shun4
-0x77ad:liao3
-0x77ae:che4
-0x77af:xian2
-0x77b0:kan4
-0x77b1:ye4
-0x77b2:xu4
-0x77b3:tong2
-0x77b4:mou2
-0x77b5:lin2
-0x77b6:kui4
-0x77b7:xian2
-0x77b8:ye4
-0x77b9:ai4
-0x77ba:hui4
-0x77bb:zhan1
-0x77bc:jian3
-0x77bd:gu3
-0x77be:zhao4
-0x77bf:ju4
-0x77c0:wei2
-0x77c1:chou3
-0x77c2:sao4
-0x77c3:ning3
-0x77c4:xun1
-0x77c5:yao4
-0x77c6:huo4
-0x77c7:meng2
-0x77c8:mian2
-0x77c9:bin1
-0x77ca:mian2
-0x77cb:li4
-0x77cc:kuang4
-0x77cd:jue2
-0x77ce:xuan1
-0x77cf:mian2
-0x77d0:huo4
-0x77d1:lu2
-0x77d2:meng2
-0x77d3:long2
-0x77d4:guan4
-0x77d5:man3
-0x77d6:xi3
-0x77d7:chu4
-0x77d8:tang3
-0x77d9:kan4
-0x77da:zhu3
-0x77db:mao2
-0x77dc:jin1
-0x77dd:lin2
-0x77de:yu4
-0x77df:shuo4
-0x77e0:ce4
-0x77e1:jue2
-0x77e2:shi3
-0x77e3:yi3
-0x77e4:shen3
-0x77e5:zhi1
-0x77e6:hou2
-0x77e7:shen3
-0x77e8:ying3
-0x77e9:ju3
-0x77ea:zhou1
-0x77eb:jiao3
-0x77ec:cuo2
-0x77ed:duan3
-0x77ee:ai3
-0x77ef:jiao3
-0x77f0:zeng1
-0x77f1:huo4
-0x77f2:bai3
-0x77f3:shi2
-0x77f4:ding4
-0x77f5:qi4
-0x77f6:ji1
-0x77f7:zi3
-0x77f8:gan1
-0x77f9:wu4
-0x77fa:tuo1
-0x77fb:ku4
-0x77fc:qiang1
-0x77fd:xi4
-0x77fe:fan2
-0x77ff:kuang4
-0x7800:dang4
-0x7801:ma3
-0x7802:sha1
-0x7803:dan1
-0x7804:jue2
-0x7805:li4
-0x7806:fu1
-0x7807:min2
-0x7808:nuo3
-0x7809:huo4
-0x780a:kang4
-0x780b:zhi3
-0x780c:qi4
-0x780d:kan3
-0x780e:jie4
-0x780f:fen1
-0x7810:e4
-0x7811:ya4
-0x7812:pi1
-0x7813:zhe2
-0x7814:yan2
-0x7815:sui4
-0x7816:zhuan1
-0x7817:che1
-0x7818:dun4
-0x7819:pan1
-0x781a:yan4
-0x781c:feng1
-0x781d:fa2
-0x781e:mo4
-0x781f:zha4
-0x7820:qu1
-0x7821:yu4
-0x7822:luo3
-0x7823:tuo2
-0x7824:tuo2
-0x7825:di3
-0x7826:zhai4
-0x7827:zhen1
-0x7828:ai4
-0x7829:fei4
-0x782a:mu3
-0x782b:zhu3
-0x782c:li4
-0x782d:bian1
-0x782e:nu3
-0x782f:ping1
-0x7830:peng1
-0x7831:ling2
-0x7832:pao4
-0x7833:le4
-0x7834:po4
-0x7835:bo1
-0x7836:po4
-0x7837:shen1
-0x7838:za2
-0x7839:nuo3
-0x783a:li4
-0x783b:long2
-0x783c:tong2
-0x783e:li4
-0x7840:chu3
-0x7841:keng1
-0x7842:quan2
-0x7843:zhu1
-0x7844:kuang1
-0x7845:gui1
-0x7846:e4
-0x7847:nao2
-0x7848:jia2
-0x7849:lu4
-0x784a:wei3
-0x784b:ai4
-0x784c:luo4
-0x784d:ken4
-0x784e:xing2
-0x784f:yan2
-0x7850:tong2
-0x7851:peng1
-0x7852:xi1
-0x7854:hong2
-0x7855:shuo4
-0x7856:xia2
-0x7857:qiao1
-0x7859:wei4
-0x785a:qiao2
-0x785c:keng1
-0x785d:xiao1
-0x785e:que4
-0x785f:chan4
-0x7860:lang3
-0x7861:hong2
-0x7862:yu2
-0x7863:xiao1
-0x7864:xia2
-0x7865:mang3
-0x7866:long4
-0x7867:yong3
-0x7868:che1
-0x7869:che4
-0x786a:e2
-0x786b:liu2
-0x786c:ying4
-0x786d:mang2
-0x786e:que4
-0x786f:yan4
-0x7870:sha1
-0x7871:kun3
-0x7872:yu4
-0x7875:lu3
-0x7876:chen3
-0x7877:jian3
-0x7878:nve4
-0x7879:song1
-0x787a:zhuo2
-0x787b:keng1
-0x787c:peng2
-0x787d:yan3
-0x787e:zhui4
-0x787f:kong1
-0x7880:ceng2
-0x7881:qi2
-0x7882:zong4
-0x7883:qing4
-0x7884:lin2
-0x7885:jun1
-0x7886:bo1
-0x7887:ding4
-0x7888:min2
-0x7889:diao1
-0x788a:jian1
-0x788b:he4
-0x788c:lu4
-0x788d:ai4
-0x788e:sui4
-0x788f:que4
-0x7890:ling2
-0x7891:bei1
-0x7892:yin2
-0x7893:dui4
-0x7894:wu3
-0x7895:qi2
-0x7896:lun4
-0x7897:wan3
-0x7898:dian3
-0x7899:gang1
-0x789a:bei4
-0x789b:qi4
-0x789c:chen3
-0x789d:ruan3
-0x789e:yan2
-0x789f:die2
-0x78a0:ding4
-0x78a1:du2
-0x78a2:tuo2
-0x78a3:jie2
-0x78a4:ying1
-0x78a5:bian3
-0x78a6:ke4
-0x78a7:bi4
-0x78a8:wei1
-0x78a9:shuo4
-0x78aa:zhen1
-0x78ab:duan4
-0x78ac:xia2
-0x78ad:dang4
-0x78ae:ti2
-0x78af:nao3
-0x78b0:peng4
-0x78b1:jian3
-0x78b2:di4
-0x78b3:tan4
-0x78b4:cha2
-0x78b6:qi4
-0x78b8:feng1
-0x78b9:xuan4
-0x78ba:que4
-0x78bb:que4
-0x78bc:ma3
-0x78bd:gong1
-0x78be:nian3
-0x78bf:su4
-0x78c0:e2
-0x78c1:ci2
-0x78c2:liu4
-0x78c3:si1
-0x78c4:tang2
-0x78c5:bang4
-0x78c6:hua2
-0x78c7:pi1
-0x78c8:wei3
-0x78c9:sang3
-0x78ca:lei3
-0x78cb:cuo1
-0x78cc:zhen1
-0x78cd:xia2
-0x78ce:qi1
-0x78cf:lian2
-0x78d0:pan2
-0x78d1:wei4
-0x78d2:yun3
-0x78d3:dui1
-0x78d4:zhe2
-0x78d5:ke1
-0x78d6:la1
-0x78d8:qing4
-0x78d9:gun3
-0x78da:zhuan1
-0x78db:chan2
-0x78dc:qi4
-0x78dd:ao2
-0x78de:peng1
-0x78df:lu4
-0x78e0:lu3
-0x78e1:kan4
-0x78e2:qiang3
-0x78e3:chen3
-0x78e4:yin3
-0x78e5:lei3
-0x78e6:biao1
-0x78e7:qi4
-0x78e8:mo2
-0x78e9:qi1
-0x78ea:cui1
-0x78eb:zong1
-0x78ec:qing4
-0x78ed:chuo4
-0x78ef:ji1
-0x78f0:shan4
-0x78f1:lao2
-0x78f2:qu2
-0x78f3:zeng1
-0x78f4:deng4
-0x78f5:jian4
-0x78f6:xi4
-0x78f7:lin2
-0x78f8:ding4
-0x78f9:dian4
-0x78fa:huang2
-0x78fb:pan2
-0x78fc:za2
-0x78fd:qiao1
-0x78fe:di1
-0x78ff:li4
-0x7901:jiao1
-0x7903:zhang3
-0x7904:qiao2
-0x7905:dun1
-0x7906:xian3
-0x7907:yu4
-0x7908:zhui4
-0x7909:he2
-0x790a:huo4
-0x790b:zhai2
-0x790c:lei4
-0x790d:ke3
-0x790e:chu3
-0x790f:ji2
-0x7910:que4
-0x7911:dang4
-0x7912:yi3
-0x7913:jiang1
-0x7914:pi4
-0x7915:pi1
-0x7916:yu4
-0x7917:pin1
-0x7918:qi4
-0x7919:ai4
-0x791a:kai4
-0x791b:jian1
-0x791c:yu4
-0x791d:ruan3
-0x791e:meng2
-0x791f:pao4
-0x7920:ci2
-0x7921:bo2
-0x7923:mie4
-0x7924:ca3
-0x7925:xian2
-0x7926:kuang4
-0x7927:lei4
-0x7928:lei3
-0x7929:zhi4
-0x792a:li4
-0x792b:li4
-0x792c:fan2
-0x792d:que4
-0x792e:pao4
-0x792f:ying1
-0x7930:li4
-0x7931:long2
-0x7932:long2
-0x7933:mo4
-0x7934:bo2
-0x7935:shuang1
-0x7936:guan4
-0x7937:lan2
-0x7938:zan3
-0x7939:yan2
-0x793a:shi4
-0x793b:shi4
-0x793c:li3
-0x793d:reng2
-0x793e:she4
-0x793f:yue4
-0x7940:si4
-0x7941:qi2
-0x7942:ta1
-0x7943:ma4
-0x7944:xie4
-0x7945:yao1
-0x7946:xian1
-0x7947:qi2
-0x7948:qi2
-0x7949:zhi3
-0x794a:beng1
-0x794b:dui4
-0x794c:zhong4
-0x794e:yi1
-0x794f:shi2
-0x7950:you4
-0x7951:zhi4
-0x7952:tiao2
-0x7953:fu2
-0x7954:fu4
-0x7955:mi4
-0x7956:zu3
-0x7957:zhi1
-0x7958:suan4
-0x7959:mei4
-0x795a:zuo4
-0x795b:qu1
-0x795c:hu4
-0x795d:zhu4
-0x795e:shen2
-0x795f:sui4
-0x7960:ci2
-0x7961:chai2
-0x7962:mi2
-0x7963:lv3
-0x7964:yu3
-0x7965:xiang2
-0x7966:wu2
-0x7967:tiao1
-0x7968:piao4
-0x7969:zhu1
-0x796a:gui3
-0x796b:xia2
-0x796c:zhi1
-0x796d:ji4
-0x796e:gao4
-0x796f:zhen1
-0x7970:gao4
-0x7971:shui4
-0x7972:jin1
-0x7973:chen3
-0x7974:gai1
-0x7975:kun3
-0x7976:di4
-0x7977:dao3
-0x7978:huo4
-0x7979:tao2
-0x797a:qi2
-0x797b:gu4
-0x797c:guan4
-0x797d:zui4
-0x797e:ling2
-0x797f:lu4
-0x7980:bing3
-0x7981:jin4
-0x7982:dao3
-0x7983:zhi2
-0x7984:lu4
-0x7985:shan4
-0x7986:bei1
-0x7987:zhe3
-0x7988:hui1
-0x7989:you3
-0x798a:xi4
-0x798b:yin1
-0x798c:zi1
-0x798d:huo4
-0x798e:zhen1
-0x798f:fu2
-0x7990:yuan4
-0x7991:wu2
-0x7992:xian3
-0x7993:yang2
-0x7994:ti2
-0x7995:yi1
-0x7996:mei2
-0x7997:si1
-0x7998:di4
-0x799a:zhuo2
-0x799b:zhen1
-0x799c:yong3
-0x799d:ji2
-0x799e:gao4
-0x799f:tang2
-0x79a0:si1
-0x79a1:ma4
-0x79a2:ta1
-0x79a4:xuan1
-0x79a5:qi2
-0x79a6:yu4
-0x79a7:xi3
-0x79a8:ji1
-0x79a9:si4
-0x79aa:chan2
-0x79ab:tan3
-0x79ac:kuai4
-0x79ad:sui4
-0x79ae:li3
-0x79af:nong2
-0x79b0:ni3
-0x79b1:dao3
-0x79b2:li4
-0x79b3:rang2
-0x79b4:yue4
-0x79b5:ti2
-0x79b6:zan3
-0x79b7:lei4
-0x79b8:rou2
-0x79b9:yu3
-0x79ba:yu2
-0x79bb:li2
-0x79bc:xie4
-0x79bd:qin2
-0x79be:he2
-0x79bf:tu1
-0x79c0:xiu4
-0x79c1:si1
-0x79c2:ren2
-0x79c3:tu1
-0x79c4:zi3
-0x79c5:cha2
-0x79c6:gan3
-0x79c7:yi4
-0x79c8:xian1
-0x79c9:bing3
-0x79ca:nian2
-0x79cb:qiu1
-0x79cc:qiu1
-0x79cd:zhong3
-0x79ce:fen2
-0x79cf:hao4
-0x79d0:yun2
-0x79d1:ke1
-0x79d2:miao3
-0x79d3:zhi1
-0x79d4:geng1
-0x79d5:bi3
-0x79d6:zhi1
-0x79d7:yu4
-0x79d8:mi4
-0x79d9:ku4
-0x79da:ban4
-0x79db:pi1
-0x79dc:ni2
-0x79dd:li4
-0x79de:you2
-0x79df:zu1
-0x79e0:pi1
-0x79e1:ba2
-0x79e2:ling2
-0x79e3:mo4
-0x79e4:cheng4
-0x79e5:nian2
-0x79e6:qin2
-0x79e7:yang1
-0x79e8:zuo2
-0x79e9:zhi4
-0x79ea:zhi1
-0x79eb:shu2
-0x79ec:ju4
-0x79ed:zi3
-0x79ee:huo2
-0x79ef:ji1
-0x79f0:cheng1
-0x79f1:tong2
-0x79f2:zhi4
-0x79f3:huo2
-0x79f4:he2
-0x79f5:yin1
-0x79f6:zi1
-0x79f7:zhi2
-0x79f8:jie1
-0x79f9:ren3
-0x79fa:du4
-0x79fb:yi2
-0x79fc:zhu1
-0x79fd:hui4
-0x79fe:nong2
-0x79ff:fu3
-0x7a00:xi1
-0x7a01:kao3
-0x7a02:lang2
-0x7a03:fu1
-0x7a04:ze4
-0x7a05:shui4
-0x7a06:lv3
-0x7a07:kun3
-0x7a08:gan3
-0x7a09:geng1
-0x7a0a:ti2
-0x7a0b:cheng2
-0x7a0c:tu2
-0x7a0d:shao1
-0x7a0e:shui4
-0x7a0f:ya4
-0x7a10:lun3
-0x7a11:lu4
-0x7a12:gu4
-0x7a13:zuo2
-0x7a14:ren3
-0x7a15:zhun4
-0x7a16:bang4
-0x7a17:bai4
-0x7a18:ji1
-0x7a19:zhi2
-0x7a1a:zhi4
-0x7a1b:kun3
-0x7a1c:leng2
-0x7a1d:peng2
-0x7a1e:ke1
-0x7a1f:bing3
-0x7a20:chou2
-0x7a21:zu2
-0x7a22:yu4
-0x7a23:su1
-0x7a24:lve4
-0x7a26:yi1
-0x7a27:xi4
-0x7a28:bian1
-0x7a29:ji4
-0x7a2a:fu4
-0x7a2b:bi1
-0x7a2c:nuo4
-0x7a2d:jie1
-0x7a2e:zhong3
-0x7a2f:zong1
-0x7a30:xu1
-0x7a31:cheng1
-0x7a32:dao4
-0x7a33:wen3
-0x7a34:lian2
-0x7a35:zi1
-0x7a36:yu4
-0x7a37:ji4
-0x7a38:xu4
-0x7a39:zhen3
-0x7a3a:zhi4
-0x7a3b:dao4
-0x7a3c:jia4
-0x7a3d:ji1
-0x7a3e:gao3
-0x7a3f:gao3
-0x7a40:gu3
-0x7a41:rong2
-0x7a42:sui4
-0x7a44:ji4
-0x7a45:kang1
-0x7a46:mu4
-0x7a47:shan1
-0x7a48:men2
-0x7a49:zhi4
-0x7a4a:ji4
-0x7a4b:lu4
-0x7a4c:su1
-0x7a4d:ji1
-0x7a4e:ying3
-0x7a4f:wen3
-0x7a50:qiu1
-0x7a51:se4
-0x7a53:yi4
-0x7a54:huang2
-0x7a55:qie4
-0x7a56:ji3
-0x7a57:sui4
-0x7a58:xiao1
-0x7a59:pu2
-0x7a5a:jiao1
-0x7a5b:zhuo1
-0x7a5c:tong2
-0x7a5e:lv3
-0x7a5f:sui4
-0x7a60:nong2
-0x7a61:se4
-0x7a62:hui4
-0x7a63:rang2
-0x7a64:nuo4
-0x7a65:yu4
-0x7a67:ji4
-0x7a68:tui2
-0x7a69:wen3
-0x7a6a:cheng1
-0x7a6b:huo4
-0x7a6c:gong3
-0x7a6d:lv3
-0x7a6e:biao1
-0x7a70:rang2
-0x7a71:zhuo1
-0x7a72:li2
-0x7a73:zan4
-0x7a74:xue2
-0x7a75:wa1
-0x7a76:jiu1
-0x7a77:qiong2
-0x7a78:xi4
-0x7a79:qiong2
-0x7a7a:kong1
-0x7a7b:yu1
-0x7a7c:sen1
-0x7a7d:jing3
-0x7a7e:yao4
-0x7a7f:chuan1
-0x7a80:zhun1
-0x7a81:tu1
-0x7a82:lao2
-0x7a83:qie4
-0x7a84:zhai3
-0x7a85:yao3
-0x7a86:bian3
-0x7a87:bao2
-0x7a88:yao3
-0x7a89:bing3
-0x7a8a:wa1
-0x7a8b:zhu2
-0x7a8c:jiao4
-0x7a8d:qiao4
-0x7a8e:diao4
-0x7a8f:wu1
-0x7a90:gui1
-0x7a91:yao2
-0x7a92:zhi4
-0x7a93:chuang1
-0x7a94:yao3
-0x7a95:tiao3
-0x7a96:jiao4
-0x7a97:chuang1
-0x7a98:jiong3
-0x7a99:xiao1
-0x7a9a:cheng2
-0x7a9b:kou4
-0x7a9c:cuan4
-0x7a9d:wo1
-0x7a9e:dan4
-0x7a9f:ku1
-0x7aa0:ke1
-0x7aa1:zhui4
-0x7aa2:xu4
-0x7aa3:su4
-0x7aa5:kui1
-0x7aa6:dou4
-0x7aa8:yin4
-0x7aa9:wo1
-0x7aaa:wa1
-0x7aab:ya4
-0x7aac:yu2
-0x7aad:ju4
-0x7aae:qiong2
-0x7aaf:yao2
-0x7ab0:yao2
-0x7ab1:tiao4
-0x7ab2:chao2
-0x7ab3:yu3
-0x7ab4:tian2
-0x7ab5:diao4
-0x7ab6:ju4
-0x7ab7:liao2
-0x7ab8:xi1
-0x7ab9:wu4
-0x7aba:kui1
-0x7abb:chuang1
-0x7abc:zhao1
-0x7abe:kuan3
-0x7abf:long2
-0x7ac0:cheng1
-0x7ac1:cui4
-0x7ac2:piao2
-0x7ac3:zao4
-0x7ac4:cuan4
-0x7ac5:qiao4
-0x7ac6:qiong2
-0x7ac7:dou4
-0x7ac8:zao4
-0x7ac9:long3
-0x7aca:qie4
-0x7acb:li4
-0x7acc:chu4
-0x7ace:fou4
-0x7ad0:chu4
-0x7ad1:hong2
-0x7ad2:qi2
-0x7ad6:shu4
-0x7ad7:miao4
-0x7ad8:ju3
-0x7ad9:zhan4
-0x7ada:zhu4
-0x7adb:ling2
-0x7adc:long2
-0x7add:bing4
-0x7ade:jing4
-0x7adf:jing4
-0x7ae0:zhang1
-0x7ae2:si4
-0x7ae3:jun4
-0x7ae4:hong2
-0x7ae5:tong2
-0x7ae6:song3
-0x7ae7:jing4
-0x7ae8:diao4
-0x7ae9:yi4
-0x7aea:shu4
-0x7aeb:jing4
-0x7aec:qu3
-0x7aed:jie2
-0x7aee:ping2
-0x7aef:duan1
-0x7af0:shao2
-0x7af1:zhuan3
-0x7af2:ceng2
-0x7af3:deng1
-0x7af4:cui1
-0x7af5:huai1
-0x7af6:jing4
-0x7af7:kan4
-0x7af8:jing4
-0x7af9:zhu2
-0x7afa:zhu2
-0x7afb:le4
-0x7afc:peng2
-0x7afd:yu2
-0x7afe:chi2
-0x7aff:gan1
-0x7b00:mang2
-0x7b01:zhu2
-0x7b03:du3
-0x7b04:ji1
-0x7b05:xiao2
-0x7b06:ba1
-0x7b07:suan4
-0x7b08:ji2
-0x7b09:zhen3
-0x7b0a:zhao4
-0x7b0b:sun3
-0x7b0c:ya2
-0x7b0d:zhui4
-0x7b0e:yuan2
-0x7b0f:hu4
-0x7b10:gang1
-0x7b11:xiao4
-0x7b12:cen2
-0x7b13:pi2
-0x7b14:bi3
-0x7b15:jian3
-0x7b16:yi3
-0x7b17:dong1
-0x7b18:shan1
-0x7b19:sheng1
-0x7b1a:xia2
-0x7b1b:di2
-0x7b1c:zhu2
-0x7b1d:na4
-0x7b1e:chi1
-0x7b1f:gu1
-0x7b20:li4
-0x7b21:qie4
-0x7b22:min3
-0x7b23:bao1
-0x7b24:tiao2
-0x7b25:si4
-0x7b26:fu2
-0x7b27:ce4
-0x7b28:ben4
-0x7b29:pei4
-0x7b2a:da2
-0x7b2b:zi3
-0x7b2c:di4
-0x7b2d:ling2
-0x7b2e:ze2
-0x7b2f:nu2
-0x7b30:fu2
-0x7b31:gou3
-0x7b32:fan2
-0x7b33:jia1
-0x7b34:ge3
-0x7b35:fan4
-0x7b36:shi3
-0x7b37:mao3
-0x7b38:po3
-0x7b3a:jian1
-0x7b3b:qiong2
-0x7b3c:long2
-0x7b3e:bian1
-0x7b3f:luo4
-0x7b40:gui4
-0x7b41:qu3
-0x7b42:chi2
-0x7b43:yin1
-0x7b44:yao4
-0x7b45:xian3
-0x7b46:bi3
-0x7b47:qiong2
-0x7b48:gua1
-0x7b49:deng3
-0x7b4a:jiao3
-0x7b4b:jin1
-0x7b4c:quan2
-0x7b4d:sun3
-0x7b4e:ru2
-0x7b4f:fa2
-0x7b50:kuang1
-0x7b51:zhu2
-0x7b52:tong3
-0x7b53:ji1
-0x7b54:da2
-0x7b55:xing2
-0x7b56:ce4
-0x7b57:zhong4
-0x7b58:kou4
-0x7b59:lai2
-0x7b5a:bi4
-0x7b5b:shai1
-0x7b5c:dang1
-0x7b5d:zheng1
-0x7b5e:ce4
-0x7b5f:fu1
-0x7b60:yun2
-0x7b61:tu2
-0x7b62:pa2
-0x7b63:li4
-0x7b64:lang2
-0x7b65:ju3
-0x7b66:guan3
-0x7b67:jian3
-0x7b68:han2
-0x7b69:tong3
-0x7b6a:xia2
-0x7b6b:zhi4
-0x7b6c:cheng2
-0x7b6d:suan4
-0x7b6e:shi4
-0x7b6f:zhu4
-0x7b70:zuo2
-0x7b71:xiao3
-0x7b72:shao1
-0x7b73:ting2
-0x7b74:ce4
-0x7b75:yan2
-0x7b76:gao3
-0x7b77:kuai4
-0x7b78:gan1
-0x7b79:chou2
-0x7b7b:gang4
-0x7b7c:yun2
-0x7b7e:qian1
-0x7b7f:xiao3
-0x7b80:jian3
-0x7b81:pu2
-0x7b82:lai2
-0x7b83:zou1
-0x7b84:bi4
-0x7b85:bi4
-0x7b86:bi4
-0x7b87:ge4
-0x7b88:chi2
-0x7b89:guai3
-0x7b8a:yu1
-0x7b8b:jian1
-0x7b8c:zhao4
-0x7b8d:gu1
-0x7b8e:chi2
-0x7b8f:zheng1
-0x7b90:jing1
-0x7b91:sha4
-0x7b92:zhou3
-0x7b93:lu4
-0x7b94:bo2
-0x7b95:ji1
-0x7b96:lin2
-0x7b97:suan4
-0x7b98:jun4
-0x7b99:fu2
-0x7b9a:zha2
-0x7b9b:gu1
-0x7b9c:kong1
-0x7b9d:qian2
-0x7b9e:quan1
-0x7b9f:jun4
-0x7ba0:chui2
-0x7ba1:guan3
-0x7ba2:yuan1
-0x7ba3:ce4
-0x7ba4:ju2
-0x7ba5:bo3
-0x7ba6:ze2
-0x7ba7:qie4
-0x7ba8:tuo4
-0x7ba9:luo2
-0x7baa:dan1
-0x7bab:xiao1
-0x7bac:ruo4
-0x7bad:jian4
-0x7baf:bian1
-0x7bb0:sun3
-0x7bb1:xiang1
-0x7bb2:xian3
-0x7bb3:ping2
-0x7bb4:zhen1
-0x7bb5:sheng3
-0x7bb6:hu2
-0x7bb7:shi1
-0x7bb8:zhu4
-0x7bb9:yue1
-0x7bba:chun3
-0x7bbb:lv4
-0x7bbc:wu1
-0x7bbd:dong3
-0x7bbe:shuo4
-0x7bbf:ji2
-0x7bc0:jie2
-0x7bc1:huang2
-0x7bc2:xing1
-0x7bc3:mei2
-0x7bc4:fan4
-0x7bc5:chui2
-0x7bc6:zhuan4
-0x7bc7:pian1
-0x7bc8:feng1
-0x7bc9:zhu2
-0x7bca:hong2
-0x7bcb:qie4
-0x7bcc:hou2
-0x7bcd:qiu1
-0x7bce:miao3
-0x7bcf:qian4
-0x7bd1:kui4
-0x7bd3:lou3
-0x7bd4:yun2
-0x7bd5:he2
-0x7bd6:tang2
-0x7bd7:yue4
-0x7bd8:chou1
-0x7bd9:gao1
-0x7bda:fei3
-0x7bdb:ruo4
-0x7bdc:zheng1
-0x7bdd:gou1
-0x7bde:nie4
-0x7bdf:qian4
-0x7be0:xiao3
-0x7be1:cuan4
-0x7be2:gong1
-0x7be3:pang2
-0x7be4:du3
-0x7be5:li4
-0x7be6:bi4
-0x7be7:zhuo2
-0x7be8:chu2
-0x7be9:shai1
-0x7bea:chi2
-0x7beb:zhu2
-0x7bec:qiang1
-0x7bed:long2
-0x7bee:lan2
-0x7bef:jian1
-0x7bf0:bu4
-0x7bf1:li2
-0x7bf2:hui4
-0x7bf3:bi4
-0x7bf4:di2
-0x7bf5:cong1
-0x7bf6:yan1
-0x7bf7:peng2
-0x7bf8:sen1
-0x7bf9:zhuan4
-0x7bfa:pai2
-0x7bfb:piao4
-0x7bfc:dou1
-0x7bfd:yu3
-0x7bfe:mie4
-0x7bff:zhuan1
-0x7c00:ze2
-0x7c01:xi3
-0x7c02:guo2
-0x7c03:yi2
-0x7c04:hu4
-0x7c05:chan3
-0x7c06:kou4
-0x7c07:cu4
-0x7c08:ping2
-0x7c09:chou4
-0x7c0a:ji1
-0x7c0b:gui3
-0x7c0c:su4
-0x7c0d:lou3
-0x7c0e:zha4
-0x7c0f:lu4
-0x7c10:nian3
-0x7c11:suo1
-0x7c12:cuan4
-0x7c14:suo1
-0x7c15:le4
-0x7c16:duan4
-0x7c18:xiao1
-0x7c19:bo2
-0x7c1a:mi4
-0x7c1b:si1
-0x7c1c:dang4
-0x7c1d:liao2
-0x7c1e:dan1
-0x7c1f:dian4
-0x7c20:fu3
-0x7c21:jian3
-0x7c22:min3
-0x7c23:kui4
-0x7c24:dai4
-0x7c25:jiao1
-0x7c26:deng1
-0x7c27:huang2
-0x7c28:sun3
-0x7c29:lao2
-0x7c2a:zan1
-0x7c2b:xiao1
-0x7c2c:lu4
-0x7c2d:shi4
-0x7c2e:zan1
-0x7c30:pai2
-0x7c32:pai2
-0x7c33:gan4
-0x7c34:ju4
-0x7c35:du4
-0x7c36:lu4
-0x7c37:yan2
-0x7c38:bo4
-0x7c39:dang1
-0x7c3a:sai4
-0x7c3b:ke1
-0x7c3c:long2
-0x7c3d:qian1
-0x7c3e:lian2
-0x7c3f:bu4
-0x7c40:zhou4
-0x7c41:lai4
-0x7c43:lan2
-0x7c44:kui4
-0x7c45:yu2
-0x7c46:yue4
-0x7c47:hao2
-0x7c48:zhen1
-0x7c49:tai2
-0x7c4a:ti4
-0x7c4b:mi2
-0x7c4c:chou2
-0x7c4d:ji2
-0x7c50:teng2
-0x7c51:zhuan4
-0x7c52:zhou4
-0x7c53:fan1
-0x7c54:sou3
-0x7c55:zhou4
-0x7c57:zhuo2
-0x7c58:teng2
-0x7c59:lu4
-0x7c5a:lu2
-0x7c5b:jian1
-0x7c5c:tuo4
-0x7c5d:ying2
-0x7c5e:yu4
-0x7c5f:lai4
-0x7c60:long2
-0x7c62:lian2
-0x7c63:lan2
-0x7c64:qian1
-0x7c65:yue4
-0x7c66:zhong1
-0x7c67:qu2
-0x7c68:lian2
-0x7c69:bian1
-0x7c6a:duan4
-0x7c6b:zuan3
-0x7c6c:li2
-0x7c6d:si1
-0x7c6e:luo2
-0x7c6f:ying2
-0x7c70:yue4
-0x7c71:zhuo2
-0x7c72:yu4
-0x7c73:mi3
-0x7c74:di2
-0x7c75:fan2
-0x7c76:shen1
-0x7c77:zhe2
-0x7c78:shen1
-0x7c79:nv3
-0x7c7a:xie2
-0x7c7b:lei4
-0x7c7c:xian1
-0x7c7d:zi3
-0x7c7e:ni2
-0x7c7f:cun4
-0x7c81:qian1
-0x7c83:bi3
-0x7c84:ban3
-0x7c85:wu4
-0x7c86:sha1
-0x7c87:kang1
-0x7c88:rou3
-0x7c89:fen3
-0x7c8a:bi4
-0x7c8b:cui4
-0x7c8d:li2
-0x7c8e:chi3
-0x7c91:ba1
-0x7c92:li4
-0x7c93:gan1
-0x7c94:ju4
-0x7c95:po4
-0x7c96:mo4
-0x7c97:cu1
-0x7c98:nian2
-0x7c99:zhou4
-0x7c9a:li2
-0x7c9b:su4
-0x7c9c:tiao4
-0x7c9d:li4
-0x7c9e:xi1
-0x7c9f:su4
-0x7ca0:hong2
-0x7ca1:tong2
-0x7ca2:zi1
-0x7ca3:ce4
-0x7ca4:yue4
-0x7ca5:zhou1
-0x7ca6:lin4
-0x7ca7:zhuang1
-0x7ca8:bai3
-0x7caa:fen4
-0x7cae:liang2
-0x7caf:xian4
-0x7cb0:fu2
-0x7cb1:liang2
-0x7cb2:can4
-0x7cb3:geng1
-0x7cb4:li3
-0x7cb5:yue4
-0x7cb6:lu4
-0x7cb7:ju2
-0x7cb8:qi2
-0x7cb9:cui4
-0x7cba:bai4
-0x7cbb:zhang1
-0x7cbc:lin2
-0x7cbd:zong4
-0x7cbe:jing1
-0x7cbf:guo3
-0x7cc1:san1
-0x7cc2:san3
-0x7cc3:tang2
-0x7cc4:bian1
-0x7cc5:rou3
-0x7cc6:mian4
-0x7cc7:hou2
-0x7cc8:xu3
-0x7cc9:zong4
-0x7cca:hu2
-0x7ccb:jian4
-0x7ccc:zan2
-0x7ccd:ci2
-0x7cce:li2
-0x7ccf:xie4
-0x7cd0:fu1
-0x7cd1:ni4
-0x7cd2:bei4
-0x7cd3:gu3
-0x7cd4:xiu3
-0x7cd5:gao1
-0x7cd6:tang2
-0x7cd7:qiu3
-0x7cd9:cao1
-0x7cda:zhuang1
-0x7cdb:tang2
-0x7cdc:mi2
-0x7cdd:san3
-0x7cde:fen4
-0x7cdf:zao1
-0x7ce0:kang1
-0x7ce1:jiang4
-0x7ce2:mo2
-0x7ce3:san3
-0x7ce4:san3
-0x7ce5:nuo4
-0x7ce6:xi1
-0x7ce7:liang2
-0x7ce8:jiang4
-0x7ce9:kuai4
-0x7cea:bo2
-0x7ceb:huan2
-0x7ced:zong4
-0x7cee:xian4
-0x7cef:nuo4
-0x7cf0:tuan2
-0x7cf1:nie4
-0x7cf2:li4
-0x7cf3:zuo4
-0x7cf4:di2
-0x7cf5:nie4
-0x7cf6:tiao4
-0x7cf7:lan2
-0x7cf8:mi4
-0x7cf9:si1
-0x7cfa:jiu1
-0x7cfb:xi4
-0x7cfc:gong1
-0x7cfd:zheng3
-0x7cfe:jiu1
-0x7cff:you4
-0x7d00:ji4
-0x7d01:cha4
-0x7d02:zhou4
-0x7d03:xun2
-0x7d04:yue1
-0x7d05:hong2
-0x7d06:yu1
-0x7d07:he2
-0x7d08:wan2
-0x7d09:ren4
-0x7d0a:wen4
-0x7d0b:wen2
-0x7d0c:qiu2
-0x7d0d:na4
-0x7d0e:zi1
-0x7d0f:tou3
-0x7d10:niu3
-0x7d11:fou2
-0x7d12:jie4
-0x7d13:shu1
-0x7d14:chun2
-0x7d15:pi1
-0x7d16:yin3
-0x7d17:sha1
-0x7d18:hong2
-0x7d19:zhi3
-0x7d1a:ji2
-0x7d1b:fen1
-0x7d1c:yun2
-0x7d1d:ren4
-0x7d1e:dan3
-0x7d1f:jin1
-0x7d20:su4
-0x7d21:fang3
-0x7d22:suo3
-0x7d23:cui4
-0x7d24:jiu3
-0x7d25:zha2
-0x7d27:jin3
-0x7d28:fu4
-0x7d29:zhi4
-0x7d2a:ci3
-0x7d2b:zi3
-0x7d2c:chou2
-0x7d2d:hong2
-0x7d2e:za1
-0x7d2f:lei4
-0x7d30:xi4
-0x7d31:fu2
-0x7d32:xie4
-0x7d33:shen1
-0x7d34:bei4
-0x7d35:zhu4
-0x7d36:qu3
-0x7d37:ling2
-0x7d38:zhu4
-0x7d39:shao4
-0x7d3a:gan4
-0x7d3b:yang1
-0x7d3c:fu2
-0x7d3d:tuo2
-0x7d3e:zhen3
-0x7d3f:dai4
-0x7d40:chu4
-0x7d41:shi1
-0x7d42:zhong1
-0x7d43:xian2
-0x7d44:zu3
-0x7d45:jiong3
-0x7d46:ban4
-0x7d47:ju4
-0x7d48:mo4
-0x7d49:shu4
-0x7d4a:zui4
-0x7d4c:jing1
-0x7d4d:ren2
-0x7d4e:heng4
-0x7d4f:xie4
-0x7d50:jie2
-0x7d51:zhu1
-0x7d52:chou2
-0x7d53:gua4
-0x7d54:bai3
-0x7d55:jue2
-0x7d56:kuang4
-0x7d57:hu2
-0x7d58:ci4
-0x7d59:geng1
-0x7d5a:geng1
-0x7d5b:tao1
-0x7d5c:xie2
-0x7d5d:ku4
-0x7d5e:jiao3
-0x7d5f:quan1
-0x7d60:gai3
-0x7d61:luo4
-0x7d62:xuan4
-0x7d63:bing1
-0x7d64:xian4
-0x7d65:fu2
-0x7d66:gei3
-0x7d67:tong2
-0x7d68:rong2
-0x7d69:tiao4
-0x7d6a:yin1
-0x7d6b:lei3
-0x7d6c:xie4
-0x7d6d:quan4
-0x7d6e:xu4
-0x7d6f:gai1
-0x7d70:die2
-0x7d71:tong3
-0x7d72:si1
-0x7d73:jiang4
-0x7d74:xiang2
-0x7d75:hui4
-0x7d76:jue2
-0x7d77:zhi2
-0x7d78:jian3
-0x7d79:juan4
-0x7d7a:chi1
-0x7d7b:mian3
-0x7d7c:zhen3
-0x7d7d:lv3
-0x7d7e:cheng2
-0x7d7f:qiu2
-0x7d80:shu1
-0x7d81:bang3
-0x7d82:tong3
-0x7d83:xiao1
-0x7d84:wan4
-0x7d85:qin1
-0x7d86:geng3
-0x7d87:xiu3
-0x7d88:ti2
-0x7d89:xiu4
-0x7d8a:xie2
-0x7d8b:hong2
-0x7d8c:xi4
-0x7d8d:fu2
-0x7d8e:ting1
-0x7d8f:sui1
-0x7d90:dui4
-0x7d91:kun3
-0x7d92:fu1
-0x7d93:jing1
-0x7d94:hu4
-0x7d95:zhi1
-0x7d96:yan2
-0x7d97:jiong3
-0x7d98:feng2
-0x7d99:ji4
-0x7d9c:zong1
-0x7d9d:lin2
-0x7d9e:duo3
-0x7d9f:li4
-0x7da0:lv4
-0x7da1:liang2
-0x7da2:chou2
-0x7da3:quan3
-0x7da4:shao4
-0x7da5:qi4
-0x7da6:qi2
-0x7da7:zhun3
-0x7da8:qi2
-0x7da9:wan3
-0x7daa:qian4
-0x7dab:xian4
-0x7dac:shou4
-0x7dad:wei2
-0x7dae:qi3
-0x7daf:tao2
-0x7db0:wan3
-0x7db1:gang1
-0x7db2:wang3
-0x7db3:beng1
-0x7db4:zhui4
-0x7db5:cai3
-0x7db6:guo3
-0x7db7:cui4
-0x7db8:lun2
-0x7db9:liu3
-0x7dba:qi3
-0x7dbb:zhan4
-0x7dbc:bei1
-0x7dbd:chuo4
-0x7dbe:ling2
-0x7dbf:mian2
-0x7dc0:qi1
-0x7dc1:qie4
-0x7dc2:tan1
-0x7dc3:zong1
-0x7dc4:gun3
-0x7dc5:zou1
-0x7dc6:yi4
-0x7dc7:zi1
-0x7dc8:xing4
-0x7dc9:liang3
-0x7dca:jin3
-0x7dcb:fei1
-0x7dcc:rui2
-0x7dcd:min2
-0x7dce:yu4
-0x7dcf:zong3
-0x7dd0:fan2
-0x7dd1:lv4
-0x7dd2:xu4
-0x7dd3:ying1
-0x7dd4:zhang4
-0x7dd6:xu4
-0x7dd7:xiang1
-0x7dd8:jian1
-0x7dd9:ke4
-0x7dda:xian4
-0x7ddb:ruan3
-0x7ddc:mian2
-0x7ddd:ji1
-0x7dde:duan4
-0x7ddf:zhong4
-0x7de0:di4
-0x7de1:min2
-0x7de2:miao2
-0x7de3:yuan2
-0x7de4:xie4
-0x7de5:bao3
-0x7de6:si1
-0x7de7:qiu1
-0x7de8:bian1
-0x7de9:huan3
-0x7dea:geng1
-0x7deb:cong1
-0x7dec:mian3
-0x7ded:wei4
-0x7dee:fu4
-0x7def:wei3
-0x7df0:yu2
-0x7df1:gou1
-0x7df2:miao3
-0x7df3:xie2
-0x7df4:lian4
-0x7df5:zong1
-0x7df6:bian4
-0x7df7:yun4
-0x7df8:yin1
-0x7df9:ti2
-0x7dfa:gua1
-0x7dfb:zhi4
-0x7dfc:yun1
-0x7dfd:cheng1
-0x7dfe:chan2
-0x7dff:dai4
-0x7e00:xia2
-0x7e01:yuan2
-0x7e02:zong3
-0x7e03:xu1
-0x7e06:geng1
-0x7e08:ying2
-0x7e09:jin4
-0x7e0a:yi4
-0x7e0b:zhui4
-0x7e0c:ni4
-0x7e0d:bang1
-0x7e0e:gu3
-0x7e0f:pan2
-0x7e10:zhou4
-0x7e11:jian1
-0x7e12:cuo3
-0x7e13:quan3
-0x7e14:shuang3
-0x7e15:yun1
-0x7e16:xia2
-0x7e17:cui1
-0x7e18:xi1
-0x7e19:rong2
-0x7e1a:tao1
-0x7e1b:fu2
-0x7e1c:yun2
-0x7e1d:chen1
-0x7e1e:gao3
-0x7e1f:ru4
-0x7e20:hu2
-0x7e21:zai3
-0x7e22:teng2
-0x7e23:xian4
-0x7e24:su4
-0x7e25:zhen3
-0x7e26:zong4
-0x7e27:tao1
-0x7e29:cai4
-0x7e2a:bi4
-0x7e2b:feng2
-0x7e2c:cu4
-0x7e2d:li2
-0x7e2e:suo1
-0x7e2f:yin3
-0x7e30:xi3
-0x7e31:zong4
-0x7e32:lei2
-0x7e33:zhuan4
-0x7e34:qian1
-0x7e35:man4
-0x7e36:zhi2
-0x7e37:lv3
-0x7e38:mo4
-0x7e39:piao3
-0x7e3a:lian2
-0x7e3b:mi2
-0x7e3c:xuan4
-0x7e3d:zong3
-0x7e3e:ji1
-0x7e3f:shan1
-0x7e40:sui4
-0x7e41:fan2
-0x7e42:shuai4
-0x7e43:beng1
-0x7e44:yi1
-0x7e45:sao1
-0x7e46:mou2
-0x7e47:yao2
-0x7e48:qiang3
-0x7e49:hun2
-0x7e4b:xi4
-0x7e4d:xiu4
-0x7e4e:ran2
-0x7e4f:xuan4
-0x7e50:sui4
-0x7e51:qiao1
-0x7e52:zeng1
-0x7e53:zuo3
-0x7e54:zhi1
-0x7e55:shan4
-0x7e56:san3
-0x7e57:lin2
-0x7e58:yu4
-0x7e59:fan1
-0x7e5a:liao2
-0x7e5b:chuo4
-0x7e5c:zun1
-0x7e5d:jian4
-0x7e5e:rao4
-0x7e5f:chan3
-0x7e60:rui3
-0x7e61:xiu4
-0x7e62:hui4
-0x7e63:hua4
-0x7e64:zuan3
-0x7e65:xi1
-0x7e66:qiang3
-0x7e68:da2
-0x7e69:sheng2
-0x7e6a:hui4
-0x7e6b:xi4
-0x7e6c:se4
-0x7e6d:jian3
-0x7e6e:jiang1
-0x7e6f:huan2
-0x7e70:zao3
-0x7e71:cong1
-0x7e72:jie4
-0x7e73:jiao3
-0x7e74:bo4
-0x7e75:chan2
-0x7e76:yi4
-0x7e77:nao2
-0x7e78:sui4
-0x7e79:yi4
-0x7e7a:shai3
-0x7e7b:xu1
-0x7e7c:ji4
-0x7e7d:bin1
-0x7e7e:qian3
-0x7e7f:lan2
-0x7e80:pu2
-0x7e81:xun1
-0x7e82:zuan3
-0x7e83:qi2
-0x7e84:peng2
-0x7e85:li4
-0x7e86:mo4
-0x7e87:lei4
-0x7e88:xie2
-0x7e89:zuan3
-0x7e8a:kuang4
-0x7e8b:you1
-0x7e8c:xu4
-0x7e8d:lei2
-0x7e8e:xian1
-0x7e8f:chan2
-0x7e91:lu2
-0x7e92:chan2
-0x7e93:ying1
-0x7e94:cai2
-0x7e95:xiang1
-0x7e96:xian1
-0x7e97:zui1
-0x7e98:zuan3
-0x7e99:luo4
-0x7e9a:xi3
-0x7e9b:dao4
-0x7e9c:lan4
-0x7e9d:lei2
-0x7e9e:lian4
-0x7e9f:si1
-0x7ea0:jiu1
-0x7ea1:yu1
-0x7ea2:hong2
-0x7ea3:zhou4
-0x7ea4:xian1
-0x7ea5:he2
-0x7ea6:yue1
-0x7ea7:ji2
-0x7ea8:wan2
-0x7ea9:kuang4
-0x7eaa:ji4
-0x7eab:ren4
-0x7eac:wei3
-0x7ead:yun2
-0x7eae:hong2
-0x7eaf:chun2
-0x7eb0:pi2
-0x7eb1:sha1
-0x7eb2:gang1
-0x7eb3:na4
-0x7eb4:ren2
-0x7eb5:zong4
-0x7eb6:lun2
-0x7eb7:fen1
-0x7eb8:zhi3
-0x7eb9:wen2
-0x7eba:fang3
-0x7ebb:zhu4
-0x7ebc:yin3
-0x7ebd:niu3
-0x7ebe:shu1
-0x7ebf:xian4
-0x7ec0:gan4
-0x7ec1:xie4
-0x7ec2:fu2
-0x7ec3:lian4
-0x7ec4:zu3
-0x7ec5:shen1
-0x7ec6:xi4
-0x7ec7:zhi1
-0x7ec8:zhong1
-0x7ec9:zhou4
-0x7eca:ban4
-0x7ecb:fu2
-0x7ecc:zhuo2
-0x7ecd:shao4
-0x7ece:yi4
-0x7ecf:jing1
-0x7ed0:dai4
-0x7ed1:bang3
-0x7ed2:rong2
-0x7ed3:jie2
-0x7ed4:ku4
-0x7ed5:rao4
-0x7ed6:die2
-0x7ed7:heng4
-0x7ed8:hui4
-0x7ed9:gei3
-0x7eda:xuan4
-0x7edb:jiang4
-0x7edc:luo4
-0x7edd:jue2
-0x7ede:jiao3
-0x7edf:tong3
-0x7ee0:geng3
-0x7ee1:xiao1
-0x7ee2:juan4
-0x7ee3:xiu4
-0x7ee4:xi4
-0x7ee5:sui1
-0x7ee6:tao1
-0x7ee7:ji4
-0x7ee8:ti2
-0x7ee9:ji1
-0x7eea:xu4
-0x7eeb:ling2
-0x7eec:ying1
-0x7eed:xu4
-0x7eee:qi3
-0x7eef:fei1
-0x7ef0:chuo4
-0x7ef1:zhang3
-0x7ef2:gun3
-0x7ef3:sheng2
-0x7ef4:wei2
-0x7ef5:mian2
-0x7ef6:shou4
-0x7ef7:beng1
-0x7ef8:chou2
-0x7ef9:tao2
-0x7efa:liu3
-0x7efb:quan3
-0x7efc:zong4
-0x7efd:zhan4
-0x7efe:wan3
-0x7eff:lv4
-0x7f00:zhui4
-0x7f01:zi1
-0x7f02:ke4
-0x7f03:xiang1
-0x7f04:jian1
-0x7f05:mian3
-0x7f06:lan4
-0x7f07:ti2
-0x7f08:miao3
-0x7f09:qi4
-0x7f0a:yun1
-0x7f0b:hui4
-0x7f0c:si1
-0x7f0d:duo3
-0x7f0e:duan4
-0x7f0f:bian4
-0x7f10:xian4
-0x7f11:gou1
-0x7f12:zhui4
-0x7f13:huan3
-0x7f14:di4
-0x7f15:lv3
-0x7f16:bian1
-0x7f17:min2
-0x7f18:yuan2
-0x7f19:jin4
-0x7f1a:fu2
-0x7f1b:ru4
-0x7f1c:zhen1
-0x7f1d:feng2
-0x7f1e:shuai1
-0x7f1f:gao3
-0x7f20:chan2
-0x7f21:li2
-0x7f22:yi4
-0x7f23:jian1
-0x7f24:bin1
-0x7f25:piao3
-0x7f26:man4
-0x7f27:lei2
-0x7f28:ying1
-0x7f29:suo1
-0x7f2a:mou2
-0x7f2b:sao1
-0x7f2c:xie2
-0x7f2d:liao2
-0x7f2e:shan4
-0x7f2f:zeng1
-0x7f30:jiang1
-0x7f31:qian3
-0x7f32:zao3
-0x7f33:huan2
-0x7f34:jiao3
-0x7f35:zuan3
-0x7f36:fou3
-0x7f37:xie4
-0x7f38:gang1
-0x7f39:fou3
-0x7f3a:que1
-0x7f3b:fou3
-0x7f3d:bo1
-0x7f3e:ping2
-0x7f3f:hou4
-0x7f41:gang1
-0x7f42:ying1
-0x7f43:ying1
-0x7f44:qing4
-0x7f45:xia4
-0x7f46:guan4
-0x7f47:zun1
-0x7f48:tan2
-0x7f4a:qi4
-0x7f4b:weng4
-0x7f4c:ying1
-0x7f4d:lei2
-0x7f4e:tan2
-0x7f4f:lu2
-0x7f50:guan4
-0x7f51:wang3
-0x7f52:wang3
-0x7f53:gang1
-0x7f54:wang3
-0x7f55:han3
-0x7f57:luo1
-0x7f58:fu2
-0x7f59:mi2
-0x7f5a:fa2
-0x7f5b:gu1
-0x7f5c:zhu3
-0x7f5d:ju1
-0x7f5e:mao2
-0x7f5f:gu3
-0x7f60:min2
-0x7f61:gang1
-0x7f62:ba4
-0x7f63:gua4
-0x7f64:ti2
-0x7f65:juan4
-0x7f66:fu2
-0x7f67:lin2
-0x7f68:yan3
-0x7f69:zhao4
-0x7f6a:zui4
-0x7f6b:gua4
-0x7f6c:zhuo2
-0x7f6d:yu4
-0x7f6e:zhi4
-0x7f6f:an3
-0x7f70:fa2
-0x7f71:nan3
-0x7f72:shu3
-0x7f73:si1
-0x7f74:pi2
-0x7f75:ma4
-0x7f76:liu3
-0x7f77:ba4
-0x7f78:fa2
-0x7f79:li2
-0x7f7a:chao1
-0x7f7b:wei4
-0x7f7c:bi4
-0x7f7d:ji4
-0x7f7e:zeng1
-0x7f7f:tong2
-0x7f80:liu3
-0x7f81:ji1
-0x7f82:juan4
-0x7f83:mi4
-0x7f84:zhao4
-0x7f85:luo2
-0x7f86:pi2
-0x7f87:ji1
-0x7f88:ji1
-0x7f89:luan2
-0x7f8a:yang2
-0x7f8b:mi3
-0x7f8c:qiang1
-0x7f8d:ta4
-0x7f8e:mei3
-0x7f8f:yang2
-0x7f90:you3
-0x7f91:you3
-0x7f92:fen2
-0x7f93:ba1
-0x7f94:gao1
-0x7f95:yang4
-0x7f96:gu3
-0x7f97:qiang1
-0x7f98:zang1
-0x7f99:gao1
-0x7f9a:ling2
-0x7f9b:yi4
-0x7f9c:zhu4
-0x7f9d:di1
-0x7f9e:xiu1
-0x7f9f:qian1
-0x7fa0:yi2
-0x7fa1:xian4
-0x7fa2:rong2
-0x7fa3:qun2
-0x7fa4:qun2
-0x7fa5:qiang3
-0x7fa6:huan2
-0x7fa7:suo1
-0x7fa8:xian4
-0x7fa9:yi4
-0x7fab:qiang1
-0x7fac:xian2
-0x7fad:yu2
-0x7fae:geng1
-0x7faf:jie2
-0x7fb0:tang1
-0x7fb1:yuan2
-0x7fb2:xi1
-0x7fb3:fan2
-0x7fb4:shan1
-0x7fb5:fen3
-0x7fb6:shan1
-0x7fb7:lian3
-0x7fb8:lei2
-0x7fb9:geng1
-0x7fba:nou2
-0x7fbb:qiang4
-0x7fbc:chan4
-0x7fbd:yu3
-0x7fbe:gong4
-0x7fbf:yi4
-0x7fc0:chong1
-0x7fc1:weng1
-0x7fc2:fen1
-0x7fc3:hong2
-0x7fc4:chi4
-0x7fc5:chi4
-0x7fc6:cui4
-0x7fc7:fu2
-0x7fc8:xia2
-0x7fc9:pen3
-0x7fca:yi4
-0x7fcb:la1
-0x7fcc:yi4
-0x7fcd:pi1
-0x7fce:ling2
-0x7fcf:liu4
-0x7fd0:zhi4
-0x7fd1:qu2
-0x7fd2:xi2
-0x7fd3:xie2
-0x7fd4:xiang2
-0x7fd5:xi4
-0x7fd6:xi4
-0x7fd7:qi2
-0x7fd8:qiao2
-0x7fd9:hui4
-0x7fda:hui1
-0x7fdb:xiao1
-0x7fdc:se4
-0x7fdd:hong2
-0x7fde:jiang1
-0x7fdf:di2
-0x7fe0:cui4
-0x7fe1:fei3
-0x7fe2:tao1
-0x7fe3:sha4
-0x7fe4:chi4
-0x7fe5:zhu4
-0x7fe6:jian3
-0x7fe7:xuan1
-0x7fe8:shi4
-0x7fe9:pian1
-0x7fea:zong1
-0x7feb:wan4
-0x7fec:hui1
-0x7fed:hou2
-0x7fee:he2
-0x7fef:he4
-0x7ff0:han4
-0x7ff1:ao2
-0x7ff2:piao1
-0x7ff3:yi4
-0x7ff4:lian2
-0x7ff5:qu2
-0x7ff7:lin2
-0x7ff8:pen3
-0x7ff9:qiao2
-0x7ffa:ao2
-0x7ffb:fan1
-0x7ffc:yi4
-0x7ffd:hui4
-0x7ffe:xuan1
-0x7fff:dao4
-0x8000:yao4
-0x8001:lao3
-0x8003:kao3
-0x8004:mao4
-0x8005:zhe3
-0x8006:qi2
-0x8007:gou3
-0x8008:gou3
-0x8009:gou3
-0x800a:die4
-0x800b:die4
-0x800c:er2
-0x800d:shua3
-0x800e:ruan3
-0x800f:er2
-0x8010:nai4
-0x8011:zhuan1
-0x8012:lei3
-0x8013:ting1
-0x8014:zi3
-0x8015:geng1
-0x8016:chao4
-0x8017:hao4
-0x8018:yun2
-0x8019:ba4
-0x801a:pi1
-0x801b:chi2
-0x801c:si4
-0x801d:chu2
-0x801e:jia1
-0x801f:ju4
-0x8020:he2
-0x8021:chu2
-0x8022:lao4
-0x8023:lun3
-0x8024:ji2
-0x8025:tang3
-0x8026:ou3
-0x8027:lou2
-0x8028:nou4
-0x8029:jiang3
-0x802a:pang3
-0x802b:ze2
-0x802c:lou2
-0x802d:ji1
-0x802e:lao4
-0x802f:huo4
-0x8030:you1
-0x8031:mo4
-0x8032:huai2
-0x8033:er3
-0x8034:zhe2
-0x8035:ting1
-0x8036:ye2
-0x8037:da1
-0x8038:song3
-0x8039:qin2
-0x803a:yun2
-0x803b:chi3
-0x803c:dan1
-0x803d:dan1
-0x803e:hong2
-0x803f:geng3
-0x8040:zhi2
-0x8042:nie4
-0x8043:dan1
-0x8044:zhen3
-0x8045:che4
-0x8046:ling2
-0x8047:zheng1
-0x8048:you3
-0x8049:wa1
-0x804a:liao2
-0x804b:long2
-0x804c:zhi2
-0x804d:ning2
-0x804e:tiao1
-0x804f:er2
-0x8050:ya4
-0x8051:die2
-0x8052:gua1
-0x8054:lian2
-0x8055:hao4
-0x8056:sheng4
-0x8057:lie4
-0x8058:pin4
-0x8059:jing1
-0x805a:ju4
-0x805b:bi4
-0x805c:di3
-0x805d:guo2
-0x805e:wen2
-0x805f:xu4
-0x8060:ping2
-0x8061:cong1
-0x8064:ting2
-0x8065:yu3
-0x8066:cong1
-0x8067:kui2
-0x8069:kui4
-0x806a:cong1
-0x806b:lian2
-0x806c:weng3
-0x806d:kui4
-0x806e:lian2
-0x806f:lian2
-0x8070:cong1
-0x8071:ao2
-0x8072:sheng1
-0x8073:song3
-0x8074:ting1
-0x8075:kui4
-0x8076:nie4
-0x8077:zhi2
-0x8078:dan1
-0x8079:ning2
-0x807b:ji1
-0x807c:ting1
-0x807d:ting1
-0x807e:long2
-0x807f:yu4
-0x8080:yu4
-0x8081:zhao4
-0x8082:si4
-0x8083:su4
-0x8084:yi4
-0x8085:su4
-0x8086:si4
-0x8087:zhao4
-0x8088:zhao4
-0x8089:rou4
-0x808a:yi4
-0x808b:lei4
-0x808c:ji1
-0x808d:qiu2
-0x808e:ken3
-0x808f:cao4
-0x8090:ge1
-0x8091:di4
-0x8092:huan2
-0x8093:huang1
-0x8094:yi3
-0x8095:ren4
-0x8096:xiao4
-0x8097:ru3
-0x8098:zhou3
-0x8099:yuan1
-0x809a:du4
-0x809b:gang1
-0x809c:rong2
-0x809d:gan1
-0x809e:cha1
-0x809f:wo4
-0x80a0:chang2
-0x80a1:gu3
-0x80a2:zhi1
-0x80a3:han2
-0x80a4:fu1
-0x80a5:fei2
-0x80a6:fen2
-0x80a7:pei1
-0x80a8:pang4
-0x80a9:jian1
-0x80aa:fang2
-0x80ab:zhun1
-0x80ac:you2
-0x80ad:na4
-0x80ae:hang2
-0x80af:ken3
-0x80b0:ran2
-0x80b1:gong1
-0x80b2:yu4
-0x80b3:wen3
-0x80b4:yao2
-0x80b5:jin4
-0x80b6:pi2
-0x80b7:qian1
-0x80b8:xi4
-0x80b9:xi1
-0x80ba:fei4
-0x80bb:ken3
-0x80bc:jing3
-0x80bd:tai4
-0x80be:shen4
-0x80bf:zhong3
-0x80c0:zhang4
-0x80c1:xie2
-0x80c2:shen1
-0x80c3:wei4
-0x80c4:zhou4
-0x80c5:die2
-0x80c6:dan3
-0x80c7:fei4
-0x80c8:ba2
-0x80c9:bo2
-0x80ca:qu2
-0x80cb:tian2
-0x80cc:bei4
-0x80cd:gua1
-0x80ce:tai1
-0x80cf:zi3
-0x80d0:ku1
-0x80d1:zhi1
-0x80d2:ni4
-0x80d3:ping2
-0x80d4:zi4
-0x80d5:fu4
-0x80d6:pang4
-0x80d7:zhen1
-0x80d8:xian2
-0x80d9:zuo4
-0x80da:pei1
-0x80db:jia3
-0x80dc:sheng4
-0x80dd:zhi1
-0x80de:bao1
-0x80df:mu3
-0x80e0:qu1
-0x80e1:hu2
-0x80e2:ke1
-0x80e3:yi3
-0x80e4:yin4
-0x80e5:xu1
-0x80e6:yang1
-0x80e7:long2
-0x80e8:dong4
-0x80e9:ka3
-0x80ea:lu2
-0x80eb:jing4
-0x80ec:nu3
-0x80ed:yan1
-0x80ee:pang2
-0x80ef:kua4
-0x80f0:yi2
-0x80f1:guang1
-0x80f2:hai3
-0x80f3:ge1
-0x80f4:dong4
-0x80f5:zhi4
-0x80f6:xiao2
-0x80f7:xiong1
-0x80f8:xiong1
-0x80f9:er2
-0x80fa:e4
-0x80fb:xing2
-0x80fc:pian2
-0x80fd:neng2
-0x80fe:zi4
-0x8100:cheng2
-0x8101:tiao4
-0x8102:zhi1
-0x8103:cui4
-0x8104:mei2
-0x8105:xie2
-0x8106:cui4
-0x8107:xie2
-0x8108:mai4
-0x8109:mai4
-0x810a:ji2
-0x810d:kuai4
-0x810e:sa4
-0x810f:zang1
-0x8110:qi2
-0x8111:nao3
-0x8112:mi3
-0x8113:nong2
-0x8114:luan2
-0x8115:wan3
-0x8116:bo2
-0x8117:wen3
-0x8118:guan3
-0x8119:qiu2
-0x811a:jiao3
-0x811b:jing4
-0x811c:rou2
-0x811d:heng1
-0x811e:cuo3
-0x811f:lie4
-0x8120:shan1
-0x8121:ting3
-0x8122:mei2
-0x8123:chun2
-0x8124:shen4
-0x8125:qian3
-0x8126:te4
-0x8127:zui1
-0x8128:cu4
-0x8129:xiu1
-0x812a:xin4
-0x812b:tuo1
-0x812c:pao1
-0x812d:cheng2
-0x812e:nei3
-0x812f:fu3
-0x8130:dou4
-0x8131:tuo1
-0x8132:niao4
-0x8134:pi3
-0x8135:gu3
-0x8136:gua1
-0x8137:li4
-0x8138:lian3
-0x8139:zhang4
-0x813a:cui4
-0x813b:jie2
-0x813c:liang3
-0x813d:zhou1
-0x813e:pi2
-0x813f:biao1
-0x8140:lun2
-0x8141:pian2
-0x8142:guo4
-0x8143:kui4
-0x8144:chui2
-0x8145:dan4
-0x8146:tian3
-0x8147:nei3
-0x8148:jing1
-0x8149:jie1
-0x814a:la4
-0x814b:yi4
-0x814c:yan1
-0x814d:ren3
-0x814e:shen4
-0x814f:chuo4
-0x8150:fu3
-0x8151:fu3
-0x8152:ju1
-0x8153:fei2
-0x8154:qiang1
-0x8155:wan4
-0x8156:dong4
-0x8157:pi2
-0x8158:guo2
-0x8159:zong1
-0x815a:ding4
-0x815b:wu1
-0x815c:mei2
-0x815d:ruan3
-0x815e:zhuan4
-0x815f:zhi4
-0x8160:cou4
-0x8161:gua1
-0x8162:ou3
-0x8163:di4
-0x8164:an1
-0x8165:xing1
-0x8166:nao3
-0x8167:yu2
-0x8168:chuan3
-0x8169:nan3
-0x816a:yun4
-0x816b:zhong3
-0x816c:rou2
-0x816d:e4
-0x816e:sai1
-0x816f:tu2
-0x8170:yao1
-0x8171:jian4
-0x8172:wei3
-0x8173:jiao3
-0x8174:yu2
-0x8175:jia1
-0x8176:duan4
-0x8177:bi4
-0x8178:chang2
-0x8179:fu4
-0x817a:xian4
-0x817b:ni4
-0x817c:mian3
-0x817d:wa4
-0x817e:teng2
-0x817f:tui3
-0x8180:bang3
-0x8181:qian1
-0x8182:lv3
-0x8183:wa4
-0x8184:sou4
-0x8185:tang2
-0x8186:su4
-0x8187:zhui4
-0x8188:ge2
-0x8189:yi4
-0x818a:bo2
-0x818b:liao2
-0x818c:ji2
-0x818d:pi2
-0x818e:xie2
-0x818f:gao1
-0x8190:lv3
-0x8191:bin4
-0x8193:chang2
-0x8194:lu4
-0x8195:guo2
-0x8196:pang1
-0x8197:chuai2
-0x8198:piao3
-0x8199:jiang3
-0x819a:fu1
-0x819b:tang2
-0x819c:mo4
-0x819d:xi1
-0x819e:zhuan1
-0x819f:lv4
-0x81a0:jiao1
-0x81a1:ying4
-0x81a2:lv2
-0x81a3:zhi4
-0x81a5:chun1
-0x81a6:lian3
-0x81a7:tong2
-0x81a8:peng2
-0x81a9:ni4
-0x81aa:zha4
-0x81ab:liao2
-0x81ac:cui4
-0x81ad:gui1
-0x81ae:xiao1
-0x81af:teng1
-0x81b0:fan2
-0x81b1:zhi2
-0x81b2:jiao1
-0x81b3:shan4
-0x81b4:hu1
-0x81b5:cui4
-0x81b6:run4
-0x81b7:xiang1
-0x81b8:sui3
-0x81b9:fen4
-0x81ba:ying1
-0x81bb:dan4
-0x81bc:zhua1
-0x81bd:dan3
-0x81be:kuai4
-0x81bf:nong2
-0x81c0:tun2
-0x81c1:lian2
-0x81c2:bi4
-0x81c3:yong3
-0x81c4:jue2
-0x81c5:chu4
-0x81c6:yi4
-0x81c7:juan3
-0x81c8:la4
-0x81c9:lian3
-0x81ca:sao1
-0x81cb:tun2
-0x81cc:gu3
-0x81cd:qi2
-0x81ce:cui4
-0x81cf:bin4
-0x81d0:xun1
-0x81d1:ru2
-0x81d2:huo4
-0x81d3:zang4
-0x81d4:xian4
-0x81d5:biao1
-0x81d6:xing4
-0x81d7:kuan1
-0x81d8:la4
-0x81d9:yan1
-0x81da:lu2
-0x81db:huo4
-0x81dc:zang1
-0x81dd:luo3
-0x81de:qu2
-0x81df:zang4
-0x81e0:luan2
-0x81e1:ni2
-0x81e2:zang1
-0x81e3:chen2
-0x81e4:qian1
-0x81e5:wo4
-0x81e6:guang4
-0x81e7:zang1
-0x81e8:lin2
-0x81e9:guang4
-0x81ea:zi4
-0x81eb:jiao3
-0x81ec:nie4
-0x81ed:chou4
-0x81ee:ji4
-0x81ef:gao1
-0x81f0:chou4
-0x81f1:mian2
-0x81f2:nie4
-0x81f3:zhi4
-0x81f4:zhi4
-0x81f5:ge2
-0x81f6:jian4
-0x81f7:die2
-0x81f8:zhi4
-0x81f9:xiu1
-0x81fa:tai2
-0x81fb:zhen1
-0x81fc:jiu4
-0x81fd:xian4
-0x81fe:yu2
-0x81ff:cha1
-0x8200:yao3
-0x8201:yu2
-0x8202:chong1
-0x8203:xi4
-0x8204:xi4
-0x8205:jiu4
-0x8206:yu2
-0x8207:yu3
-0x8208:xing1
-0x8209:ju3
-0x820a:jiu4
-0x820b:xin4
-0x820c:she2
-0x820d:she4
-0x820f:jiu3
-0x8210:shi4
-0x8211:tan1
-0x8212:shu1
-0x8213:shi4
-0x8214:tian3
-0x8215:dan4
-0x8216:pu4
-0x8217:pu4
-0x8218:guan3
-0x8219:hua4
-0x821a:tan1
-0x821b:chuan3
-0x821c:shun4
-0x821d:xia2
-0x821e:wu3
-0x821f:zhou1
-0x8220:dao1
-0x8221:gang1
-0x8222:shan1
-0x8223:yi3
-0x8225:pa1
-0x8226:tai4
-0x8227:fan2
-0x8228:ban3
-0x8229:chuan2
-0x822a:hang2
-0x822b:fang3
-0x822c:ban1
-0x822d:que4
-0x822f:zhong1
-0x8230:jian4
-0x8231:cang1
-0x8232:ling2
-0x8233:zhu2
-0x8234:ze2
-0x8235:duo4
-0x8236:bo2
-0x8237:xian2
-0x8238:ge3
-0x8239:chuan2
-0x823a:xia2
-0x823b:lu3
-0x823c:hong2
-0x823d:pang2
-0x823e:xi1
-0x8240:fu2
-0x8241:zao4
-0x8242:feng2
-0x8243:li2
-0x8244:shao1
-0x8245:yu2
-0x8246:lang2
-0x8247:ting3
-0x8249:wei3
-0x824a:bo2
-0x824b:meng3
-0x824c:nian4
-0x824d:ju1
-0x824e:huang2
-0x824f:shou3
-0x8250:zong1
-0x8251:bian4
-0x8252:mao4
-0x8253:die2
-0x8255:bang4
-0x8256:cha1
-0x8257:yi4
-0x8258:sao1
-0x8259:cang1
-0x825a:cao2
-0x825b:lou2
-0x825c:dai4
-0x825e:yao4
-0x825f:tong2
-0x8261:dang1
-0x8262:tan2
-0x8263:lu3
-0x8264:yi3
-0x8265:jie4
-0x8266:jian4
-0x8267:huo4
-0x8268:meng2
-0x8269:qi2
-0x826a:lu3
-0x826b:lu2
-0x826c:chan2
-0x826d:shuang1
-0x826e:gen4
-0x826f:liang2
-0x8270:jian1
-0x8271:jian1
-0x8272:se4
-0x8273:yan4
-0x8274:fu2
-0x8275:ping2
-0x8276:yan4
-0x8277:yan4
-0x8278:cao3
-0x827a:yi4
-0x827b:le4
-0x827c:ting1
-0x827d:qiu2
-0x827e:ai4
-0x827f:nai3
-0x8280:tiao2
-0x8281:jiao1
-0x8282:jie2
-0x8283:peng2
-0x8284:wan2
-0x8285:yi4
-0x8286:chai1
-0x8287:mian2
-0x8288:mie1
-0x8289:gan1
-0x828a:qian1
-0x828b:yu4
-0x828c:yu4
-0x828d:shao2
-0x828e:qiong1
-0x828f:tu3
-0x8290:xia4
-0x8291:qi3
-0x8292:mang2
-0x8293:zi3
-0x8294:hui3
-0x8295:sui1
-0x8296:zhi4
-0x8297:xiang1
-0x8298:pi2
-0x8299:fu2
-0x829a:tun2
-0x829b:wei3
-0x829c:wu2
-0x829d:zhi1
-0x829e:qi3
-0x829f:shan1
-0x82a0:wen2
-0x82a1:qian4
-0x82a2:ren2
-0x82a3:fu2
-0x82a4:kou1
-0x82a5:jie4
-0x82a6:lu2
-0x82a7:xu4
-0x82a8:ji2
-0x82a9:qin2
-0x82aa:qi2
-0x82ab:yuan2
-0x82ac:fen1
-0x82ad:ba1
-0x82ae:rui4
-0x82af:xin1
-0x82b0:ji4
-0x82b1:hua1
-0x82b2:hua1
-0x82b3:fang1
-0x82b4:wu4
-0x82b5:jue2
-0x82b6:gou1
-0x82b7:zhi3
-0x82b8:yun2
-0x82b9:qin2
-0x82ba:ao3
-0x82bb:chu2
-0x82bc:mao4
-0x82bd:ya2
-0x82be:fei4
-0x82bf:reng4
-0x82c0:hang2
-0x82c1:cong1
-0x82c2:yin2
-0x82c3:you3
-0x82c4:bian4
-0x82c5:yi4
-0x82c7:wei3
-0x82c8:li4
-0x82c9:pi3
-0x82ca:e4
-0x82cb:xian4
-0x82cc:chang2
-0x82cd:cang1
-0x82ce:meng2
-0x82cf:su1
-0x82d0:yi2
-0x82d1:yuan4
-0x82d2:ran3
-0x82d3:ling2
-0x82d4:tai2
-0x82d5:tiao2
-0x82d6:di3
-0x82d7:miao2
-0x82d8:qiong3
-0x82d9:li4
-0x82da:yong4
-0x82db:ke1
-0x82dc:mu4
-0x82dd:pei4
-0x82de:bao1
-0x82df:gou3
-0x82e0:min2
-0x82e1:yi3
-0x82e2:yi3
-0x82e3:ju4
-0x82e4:pi1
-0x82e5:ruo4
-0x82e6:ku3
-0x82e7:zhu4
-0x82e8:ni3
-0x82e9:bo2
-0x82ea:bing3
-0x82eb:shan1
-0x82ec:qiu2
-0x82ed:yao3
-0x82ee:xian1
-0x82ef:ben3
-0x82f0:hong2
-0x82f1:ying1
-0x82f2:zha3
-0x82f3:dong1
-0x82f4:ju1
-0x82f5:die2
-0x82f6:nie2
-0x82f7:gan1
-0x82f8:hu1
-0x82f9:ping2
-0x82fa:mei2
-0x82fb:fu2
-0x82fc:sheng1
-0x82fd:gu1
-0x82fe:bi4
-0x82ff:wei4
-0x8300:fu2
-0x8301:zhuo2
-0x8302:mao4
-0x8303:fan4
-0x8304:qie2
-0x8305:mao2
-0x8306:mao3
-0x8307:ba2
-0x8308:zi3
-0x8309:mo4
-0x830a:zi1
-0x830b:di3
-0x830c:chi2
-0x830d:ji4
-0x830e:jing1
-0x830f:long2
-0x8311:niao3
-0x8313:xue2
-0x8314:ying2
-0x8315:qiong2
-0x8316:ge2
-0x8317:ming2
-0x8318:li4
-0x8319:rong2
-0x831a:yin4
-0x831b:gen4
-0x831c:qian4
-0x831d:chai3
-0x831e:chen2
-0x831f:yu4
-0x8320:xiu1
-0x8321:zi4
-0x8322:lie4
-0x8323:wu2
-0x8324:ji4
-0x8325:gui1
-0x8326:ce4
-0x8327:chong2
-0x8328:ci2
-0x8329:gou3
-0x832a:guang1
-0x832b:mang2
-0x832c:chi2
-0x832d:jiao1
-0x832e:jiao1
-0x832f:fu2
-0x8330:yu2
-0x8331:zhu1
-0x8332:zi1
-0x8333:jiang1
-0x8334:hui2
-0x8335:yin1
-0x8336:cha2
-0x8337:fa2
-0x8338:rong2
-0x8339:ru2
-0x833a:chong1
-0x833b:mang3
-0x833c:tong2
-0x833d:zhong4
-0x833f:zhu2
-0x8340:xun2
-0x8341:huan2
-0x8342:kua1
-0x8343:quan2
-0x8344:gai1
-0x8345:da1
-0x8346:jing1
-0x8347:xing4
-0x8348:chuan3
-0x8349:cao3
-0x834a:jing1
-0x834b:er2
-0x834c:an4
-0x834d:shou1
-0x834e:chi2
-0x834f:ren3
-0x8350:jian4
-0x8351:ti2
-0x8352:huang1
-0x8353:ping2
-0x8354:li4
-0x8355:jin1
-0x8356:lao3
-0x8357:shu4
-0x8358:zhuang1
-0x8359:da2
-0x835a:jia2
-0x835b:rao2
-0x835c:bi4
-0x835d:ze2
-0x835e:qiao2
-0x835f:hui4
-0x8360:qi2
-0x8361:dang4
-0x8363:rong2
-0x8364:hun1
-0x8365:ying2
-0x8366:luo4
-0x8367:ying2
-0x8368:xun2
-0x8369:jin4
-0x836a:sun1
-0x836b:yin4
-0x836c:mai3
-0x836d:hong2
-0x836e:zhou4
-0x836f:yao4
-0x8370:du4
-0x8371:wei3
-0x8372:chu4
-0x8373:dou4
-0x8374:fu1
-0x8375:ren3
-0x8376:yin2
-0x8377:he2
-0x8378:bi2
-0x8379:bu4
-0x837a:yun2
-0x837b:di2
-0x837c:tu2
-0x837d:sui1
-0x837e:sui1
-0x837f:cheng2
-0x8380:chen2
-0x8381:wu2
-0x8382:bie2
-0x8383:xi1
-0x8384:geng3
-0x8385:li4
-0x8386:fu3
-0x8387:zhu4
-0x8388:mo4
-0x8389:li4
-0x838a:zhuang1
-0x838b:ji2
-0x838c:duo2
-0x838d:qiu2
-0x838e:sha1
-0x838f:suo1
-0x8390:chen2
-0x8391:feng1
-0x8392:ju3
-0x8393:mei2
-0x8394:meng2
-0x8395:xing4
-0x8396:jing1
-0x8397:che1
-0x8398:shen1
-0x8399:jun1
-0x839a:yan2
-0x839b:ting2
-0x839c:diao4
-0x839d:cuo4
-0x839e:guan1
-0x839f:han4
-0x83a0:you3
-0x83a1:cuo4
-0x83a2:jia2
-0x83a3:wang2
-0x83a4:you2
-0x83a5:niu3
-0x83a6:shao1
-0x83a7:xian4
-0x83a8:lang2
-0x83a9:fu2
-0x83aa:e2
-0x83ab:mo4
-0x83ac:wen4
-0x83ad:jie2
-0x83ae:nan2
-0x83af:mu4
-0x83b0:kan3
-0x83b1:lai2
-0x83b2:lian2
-0x83b3:shi2
-0x83b4:wo1
-0x83b6:lian3
-0x83b7:huo4
-0x83b8:you2
-0x83b9:ying2
-0x83ba:ying1
-0x83bc:chun2
-0x83bd:mang3
-0x83be:mang3
-0x83bf:ci4
-0x83c0:wan3
-0x83c1:jing1
-0x83c2:di1
-0x83c3:qu2
-0x83c4:dong1
-0x83c5:jian1
-0x83c6:zou1
-0x83c7:gu1
-0x83c8:la1
-0x83c9:lu4
-0x83ca:ju2
-0x83cb:wei4
-0x83cc:jun1
-0x83cd:nie4
-0x83ce:kun1
-0x83cf:he2
-0x83d0:pu2
-0x83d1:zi1
-0x83d2:gao3
-0x83d3:guo3
-0x83d4:fu2
-0x83d5:lun2
-0x83d6:chang1
-0x83d7:chou2
-0x83d8:song1
-0x83d9:chui2
-0x83da:zhan4
-0x83db:men2
-0x83dc:cai4
-0x83dd:ba2
-0x83de:li2
-0x83df:tu4
-0x83e0:bo1
-0x83e1:han4
-0x83e2:bao4
-0x83e3:qin4
-0x83e4:juan3
-0x83e5:xi1
-0x83e6:qin2
-0x83e7:di3
-0x83e8:jie1
-0x83e9:pu2
-0x83ea:dang4
-0x83eb:jin3
-0x83ec:zhao3
-0x83ed:tai2
-0x83ee:geng1
-0x83ef:hua2
-0x83f0:gu1
-0x83f1:ling2
-0x83f2:fei1
-0x83f3:jin1
-0x83f4:an1
-0x83f5:wang3
-0x83f6:beng3
-0x83f7:zhou3
-0x83f8:yan1
-0x83f9:ju1
-0x83fa:jian1
-0x83fb:lin3
-0x83fc:tan3
-0x83fd:shu2
-0x83fe:tian2
-0x83ff:dao4
-0x8400:hu3
-0x8401:qi2
-0x8402:he2
-0x8403:cui4
-0x8404:tao2
-0x8405:chun1
-0x8406:pi4
-0x8407:chang2
-0x8408:huan2
-0x8409:fei2
-0x840a:lai2
-0x840b:qi1
-0x840c:meng2
-0x840d:ping2
-0x840e:wei1
-0x840f:dan4
-0x8410:sha4
-0x8411:huan2
-0x8412:yan3
-0x8413:yi2
-0x8414:tiao2
-0x8415:qi2
-0x8416:wan3
-0x8417:ce4
-0x8418:nai4
-0x841a:tuo4
-0x841b:jiu1
-0x841c:tie1
-0x841d:luo2
-0x8420:meng2
-0x8424:ying2
-0x8425:ying2
-0x8426:ying2
-0x8427:xiao1
-0x8428:sa4
-0x8429:qiu1
-0x842a:ke1
-0x842b:xiang4
-0x842c:wan4
-0x842d:yu3
-0x842e:yu4
-0x842f:fu4
-0x8430:lian4
-0x8431:xuan1
-0x8432:yuan2
-0x8433:nan2
-0x8434:ze2
-0x8435:wo1
-0x8436:chun3
-0x8437:xiao1
-0x8438:yu2
-0x8439:pian1
-0x843a:mao4
-0x843b:an1
-0x843c:e4
-0x843d:luo4
-0x843e:ying2
-0x843f:huo2
-0x8440:gua1
-0x8441:jiang1
-0x8442:mian3
-0x8443:zuo2
-0x8444:zuo4
-0x8445:ju1
-0x8446:bao3
-0x8447:rou2
-0x8448:xi3
-0x8449:ye4
-0x844a:an1
-0x844b:qu2
-0x844c:jian1
-0x844d:fu2
-0x844e:lv4
-0x844f:jing1
-0x8450:pen2
-0x8451:feng1
-0x8452:hong2
-0x8453:hong2
-0x8454:hou2
-0x8455:yan2
-0x8456:tu2
-0x8457:zhu4
-0x8458:zi1
-0x8459:xiang1
-0x845a:shen4
-0x845b:ge2
-0x845c:jie2
-0x845d:jing4
-0x845e:mi3
-0x845f:huang2
-0x8460:shen1
-0x8461:pu2
-0x8462:gai4
-0x8463:dong3
-0x8464:zhou4
-0x8465:qian2
-0x8466:wei3
-0x8467:bo2
-0x8468:wei1
-0x8469:pa1
-0x846a:ji4
-0x846b:hu2
-0x846c:zang4
-0x846d:jia1
-0x846e:duan4
-0x846f:yao4
-0x8470:jun4
-0x8471:cong1
-0x8472:quan2
-0x8473:wei1
-0x8474:zhen1
-0x8475:kui2
-0x8476:ting2
-0x8477:hun1
-0x8478:xi3
-0x8479:shi1
-0x847a:qi4
-0x847b:lan2
-0x847c:zong1
-0x847d:yao1
-0x847e:yuan1
-0x847f:mei2
-0x8480:yun1
-0x8481:shu4
-0x8482:di4
-0x8483:zhuan4
-0x8484:guan1
-0x8486:xue1
-0x8487:chan3
-0x8488:kai3
-0x8489:kui4
-0x848b:jiang3
-0x848c:lou2
-0x848d:wei2
-0x848e:pai4
-0x8490:sou1
-0x8491:yin1
-0x8492:shi1
-0x8493:chun2
-0x8494:shi2
-0x8495:yun1
-0x8496:zhen1
-0x8497:lang4
-0x8498:nu2
-0x8499:meng2
-0x849a:he2
-0x849b:que1
-0x849c:suan4
-0x849d:yuan2
-0x849e:li4
-0x849f:ju3
-0x84a0:xi2
-0x84a1:bang4
-0x84a2:chu2
-0x84a3:xu2
-0x84a4:tu2
-0x84a5:liu2
-0x84a6:wo4
-0x84a7:zhen1
-0x84a8:qian4
-0x84a9:zu1
-0x84aa:po4
-0x84ab:cuo1
-0x84ac:yuan1
-0x84ad:chu2
-0x84ae:yu4
-0x84af:kuai3
-0x84b0:pan2
-0x84b1:pu2
-0x84b2:pu2
-0x84b3:na4
-0x84b4:shuo4
-0x84b5:xi1
-0x84b6:fen2
-0x84b7:yun2
-0x84b8:zheng1
-0x84b9:jian1
-0x84ba:ji2
-0x84bb:ruo4
-0x84bc:cang1
-0x84bd:en1
-0x84be:mi2
-0x84bf:hao1
-0x84c0:sun1
-0x84c1:zhen1
-0x84c2:ming2
-0x84c3:huo4
-0x84c4:xu4
-0x84c5:liu2
-0x84c6:xi2
-0x84c7:gu3
-0x84c8:lang2
-0x84c9:rong2
-0x84ca:weng3
-0x84cb:gai4
-0x84cc:cuo4
-0x84cd:shi1
-0x84ce:tang2
-0x84cf:luo3
-0x84d0:ru4
-0x84d1:suo1
-0x84d2:xian1
-0x84d3:bei4
-0x84d4:yao3
-0x84d5:gui4
-0x84d6:bi4
-0x84d7:zong3
-0x84d8:gun3
-0x84da:xiu1
-0x84db:ce4
-0x84dd:lan2
-0x84df:ji4
-0x84e0:li2
-0x84e1:can1
-0x84e2:lang2
-0x84e3:yu4
-0x84e5:ying4
-0x84e6:mo4
-0x84e7:diao4
-0x84e8:tiao1
-0x84e9:mao4
-0x84ea:tong1
-0x84eb:zhu2
-0x84ec:peng2
-0x84ed:an1
-0x84ee:lian2
-0x84ef:cong1
-0x84f0:xi3
-0x84f1:ping2
-0x84f2:qiu1
-0x84f3:jin4
-0x84f4:chun2
-0x84f5:jie2
-0x84f6:wei3
-0x84f7:tui1
-0x84f8:cao2
-0x84f9:yu3
-0x84fa:yi4
-0x84fb:ji2
-0x84fc:liao3
-0x84fd:bi4
-0x84fe:lu3
-0x84ff:su4
-0x8500:bu4
-0x8501:zhang1
-0x8502:luo2
-0x8503:jiang4
-0x8504:man4
-0x8505:yan2
-0x8506:ling2
-0x8507:ji4
-0x8508:piao3
-0x8509:gun3
-0x850a:han3
-0x850b:di2
-0x850c:su4
-0x850d:lu4
-0x850e:she4
-0x850f:shang1
-0x8510:di2
-0x8511:mie4
-0x8512:xun1
-0x8513:man4
-0x8514:bo5
-0x8515:di4
-0x8516:cuo2
-0x8517:zhe4
-0x8518:sen1
-0x8519:xuan4
-0x851a:wei4
-0x851b:hu2
-0x851c:ao2
-0x851d:mi3
-0x851e:lou2
-0x851f:cu4
-0x8520:zhong1
-0x8521:cai4
-0x8522:po2
-0x8523:jiang3
-0x8524:mi4
-0x8525:cong1
-0x8526:niao3
-0x8527:hui4
-0x8528:jun4
-0x8529:yin2
-0x852a:jian4
-0x852b:yan1
-0x852c:shu1
-0x852d:yin4
-0x852e:kui4
-0x852f:chen2
-0x8530:hu4
-0x8531:sha1
-0x8532:kou4
-0x8533:qian4
-0x8534:ma2
-0x8535:zang1
-0x8537:qiang2
-0x8538:dou1
-0x8539:lian4
-0x853a:lin4
-0x853b:kou4
-0x853c:ai3
-0x853d:bi4
-0x853e:li2
-0x853f:wei2
-0x8540:ji2
-0x8541:xun2
-0x8542:sheng4
-0x8543:fan2
-0x8544:meng2
-0x8545:ou3
-0x8546:chan3
-0x8547:dian3
-0x8548:xun4
-0x8549:jiao1
-0x854a:rui3
-0x854b:rui3
-0x854c:lei3
-0x854d:yu2
-0x854e:qiao2
-0x854f:chu2
-0x8550:hua2
-0x8551:jian1
-0x8552:mai3
-0x8553:yun2
-0x8554:bao1
-0x8555:you2
-0x8556:qu2
-0x8557:lu4
-0x8558:rao2
-0x8559:hui4
-0x855a:e4
-0x855b:teng2
-0x855c:fei3
-0x855d:jue2
-0x855e:zui4
-0x855f:fa4
-0x8560:ru2
-0x8561:fen2
-0x8562:kui4
-0x8563:shun4
-0x8564:rui2
-0x8565:ya3
-0x8566:xu1
-0x8567:fu4
-0x8568:jue2
-0x8569:dang4
-0x856a:wu2
-0x856b:tong2
-0x856c:si1
-0x856d:xiao1
-0x856e:xi4
-0x856f:long2
-0x8570:yun4
-0x8572:qi2
-0x8573:jian1
-0x8574:yun4
-0x8575:sun1
-0x8576:ling2
-0x8577:yu4
-0x8578:xia2
-0x8579:yong1
-0x857a:ji2
-0x857b:hong4
-0x857c:si4
-0x857d:nong2
-0x857e:lei3
-0x857f:xuan1
-0x8580:yun4
-0x8581:yu4
-0x8582:xi2
-0x8583:hao4
-0x8584:bo2
-0x8585:hao1
-0x8586:ai4
-0x8587:wei2
-0x8588:hui4
-0x8589:wei4
-0x858a:ji4
-0x858b:ci1
-0x858c:xiang1
-0x858d:luan4
-0x858e:mie4
-0x858f:yi4
-0x8590:leng2
-0x8591:jiang1
-0x8592:can4
-0x8593:shen1
-0x8594:qiang2
-0x8595:lian2
-0x8596:ke1
-0x8597:yuan2
-0x8598:da2
-0x8599:ti4
-0x859a:tang2
-0x859b:xue1
-0x859c:bi4
-0x859d:zhan2
-0x859e:sun1
-0x859f:lian3
-0x85a0:fan2
-0x85a1:ding3
-0x85a2:jie1
-0x85a3:gu3
-0x85a4:xie4
-0x85a5:shu3
-0x85a6:jian4
-0x85a7:kao3
-0x85a8:hong1
-0x85a9:sa4
-0x85aa:xin1
-0x85ab:xun1
-0x85ac:yao4
-0x85ae:sou3
-0x85af:shu3
-0x85b0:xun1
-0x85b1:dui4
-0x85b2:pin2
-0x85b3:wei3
-0x85b4:neng2
-0x85b5:chou2
-0x85b6:mai2
-0x85b7:ru2
-0x85b8:piao1
-0x85b9:tai2
-0x85ba:ci2
-0x85bb:zao3
-0x85bc:chen2
-0x85bd:zhen1
-0x85be:er3
-0x85bf:ni3
-0x85c0:ying2
-0x85c1:gao3
-0x85c2:cong4
-0x85c3:xiao1
-0x85c4:qi2
-0x85c5:fa2
-0x85c6:jian3
-0x85c7:xu4
-0x85c8:kui1
-0x85c9:jie4
-0x85ca:bian3
-0x85cb:diao4
-0x85cc:mi4
-0x85cd:lan2
-0x85ce:jin4
-0x85cf:cang2
-0x85d0:miao3
-0x85d1:qiong2
-0x85d2:qie4
-0x85d3:xian3
-0x85d5:ou3
-0x85d6:xian2
-0x85d7:su4
-0x85d8:lv2
-0x85d9:yi4
-0x85da:xu4
-0x85db:xie3
-0x85dc:li2
-0x85dd:yi4
-0x85de:la3
-0x85df:lei3
-0x85e0:xiao4
-0x85e1:di2
-0x85e2:zhi3
-0x85e3:bei1
-0x85e4:teng2
-0x85e5:yao4
-0x85e6:mo4
-0x85e7:huan3
-0x85e8:biao1
-0x85e9:fan2
-0x85ea:sou3
-0x85eb:tan2
-0x85ec:tui1
-0x85ed:qiong2
-0x85ee:qiao2
-0x85ef:wei4
-0x85f0:liu2
-0x85f1:hui4
-0x85f3:gao3
-0x85f4:yun4
-0x85f6:li4
-0x85f7:shu3
-0x85f8:chu2
-0x85f9:ai3
-0x85fa:lin4
-0x85fb:zao3
-0x85fc:xuan1
-0x85fd:chen4
-0x85fe:lai4
-0x85ff:huo4
-0x8600:tuo4
-0x8601:wu4
-0x8602:rui3
-0x8603:rui3
-0x8604:qi2
-0x8605:heng2
-0x8606:lu2
-0x8607:su1
-0x8608:tui2
-0x8609:mang2
-0x860a:yun4
-0x860b:pin2
-0x860c:yu3
-0x860d:xun1
-0x860e:ji4
-0x860f:jiong1
-0x8610:xian1
-0x8611:mo2
-0x8613:su1
-0x8614:jiong1
-0x8616:nie4
-0x8617:bo4
-0x8618:rang2
-0x8619:yi4
-0x861a:xian3
-0x861b:yu2
-0x861c:ju2
-0x861d:lian4
-0x861e:lian4
-0x861f:yin3
-0x8620:qiang2
-0x8621:ying1
-0x8622:long2
-0x8623:tong4
-0x8624:wei3
-0x8625:yue4
-0x8626:ling2
-0x8627:qu2
-0x8628:yao2
-0x8629:fan2
-0x862a:mi2
-0x862b:lan2
-0x862c:kui1
-0x862d:lan2
-0x862e:ji4
-0x862f:dang4
-0x8631:lei4
-0x8632:lei2
-0x8633:hua3
-0x8634:feng1
-0x8635:zhi2
-0x8636:wei4
-0x8637:kui2
-0x8638:zhan4
-0x8639:huai4
-0x863a:li2
-0x863b:ji4
-0x863c:mi2
-0x863d:lei3
-0x863e:huai4
-0x863f:luo2
-0x8640:ji1
-0x8641:kui2
-0x8642:lu4
-0x8643:jian1
-0x8646:lei2
-0x8647:quan3
-0x8648:xiao1
-0x8649:yi4
-0x864a:luan2
-0x864b:men2
-0x864c:bie1
-0x864d:hu1
-0x864e:hu3
-0x864f:lu3
-0x8650:nve4
-0x8651:lv4
-0x8652:si1
-0x8653:xiao1
-0x8654:qian2
-0x8655:chu4
-0x8656:hu1
-0x8657:xu1
-0x8658:cuo2
-0x8659:fu2
-0x865a:xu1
-0x865b:xu1
-0x865c:lu3
-0x865d:hu3
-0x865e:yu2
-0x865f:hao4
-0x8660:jiao3
-0x8661:ju4
-0x8662:guo2
-0x8663:bao4
-0x8664:yan2
-0x8665:zhan4
-0x8666:zhan4
-0x8667:kui1
-0x8668:ban1
-0x8669:xi4
-0x866a:shu2
-0x866b:chong2
-0x866c:qiu2
-0x866d:diao1
-0x866e:ji1
-0x866f:qiu2
-0x8670:cheng2
-0x8671:shi1
-0x8673:di4
-0x8674:zhe2
-0x8675:she2
-0x8676:yu1
-0x8677:gan1
-0x8678:zi3
-0x8679:hong2
-0x867a:hui3
-0x867b:meng2
-0x867c:ge4
-0x867d:sui1
-0x867e:xia1
-0x867f:chai4
-0x8680:shi2
-0x8681:yi3
-0x8682:ma3
-0x8683:xiang4
-0x8684:fang1
-0x8685:e4
-0x8686:pa1
-0x8687:chi3
-0x8688:qian1
-0x8689:wen2
-0x868a:wen2
-0x868b:rui4
-0x868c:bang4
-0x868d:bi3
-0x868e:yue4
-0x868f:yue4
-0x8690:jun1
-0x8691:qi2
-0x8692:tong2
-0x8693:yin3
-0x8694:qi2
-0x8695:can2
-0x8696:yuan2
-0x8697:jue2
-0x8698:hui2
-0x8699:qin2
-0x869a:qi2
-0x869b:zhong4
-0x869c:ya2
-0x869d:ci4
-0x869e:mu4
-0x869f:wang2
-0x86a0:fen2
-0x86a1:fen2
-0x86a2:hang2
-0x86a3:gong1
-0x86a4:zao3
-0x86a5:fu3
-0x86a6:ran2
-0x86a7:jie4
-0x86a8:fu2
-0x86a9:chi1
-0x86aa:dou3
-0x86ab:piao2
-0x86ac:xian4
-0x86ad:ni2
-0x86ae:te4
-0x86af:qiu1
-0x86b0:you2
-0x86b1:zha4
-0x86b2:ping2
-0x86b3:chi2
-0x86b4:you3
-0x86b5:he2
-0x86b6:han1
-0x86b7:ju4
-0x86b8:li4
-0x86b9:fu4
-0x86ba:ran2
-0x86bb:zha2
-0x86bc:gou3
-0x86bd:pi2
-0x86be:bo3
-0x86bf:xian2
-0x86c0:zhu4
-0x86c1:diao1
-0x86c2:bie3
-0x86c3:bing3
-0x86c4:gu1
-0x86c5:ran2
-0x86c6:qu1
-0x86c7:she2
-0x86c8:tie4
-0x86c9:ling2
-0x86ca:gu3
-0x86cb:dan4
-0x86cc:gu3
-0x86cd:ying2
-0x86ce:li4
-0x86cf:cheng1
-0x86d0:qu1
-0x86d1:mou2
-0x86d2:ge2
-0x86d3:ci4
-0x86d4:hui2
-0x86d5:hui2
-0x86d6:mang2
-0x86d7:fu4
-0x86d8:yang2
-0x86d9:wa1
-0x86da:lie4
-0x86db:zhu1
-0x86dc:yi1
-0x86dd:xian2
-0x86de:kuo4
-0x86df:jiao1
-0x86e0:li4
-0x86e1:yi4
-0x86e2:ping2
-0x86e3:jie2
-0x86e4:ha2
-0x86e5:she2
-0x86e6:yi2
-0x86e7:wang3
-0x86e8:mo4
-0x86e9:qiong2
-0x86ea:qie4
-0x86eb:gui3
-0x86ec:gong3
-0x86ed:zhi4
-0x86ee:man2
-0x86f0:zhi2
-0x86f1:jia2
-0x86f2:rao2
-0x86f3:si1
-0x86f4:qi2
-0x86f5:xing1
-0x86f6:lie4
-0x86f7:qiu2
-0x86f8:shao1
-0x86f9:yong3
-0x86fa:jia2
-0x86fb:tui4
-0x86fc:che1
-0x86fd:bai4
-0x86fe:e2
-0x86ff:han4
-0x8700:shu3
-0x8701:xuan2
-0x8702:feng1
-0x8703:shen4
-0x8704:zhen4
-0x8705:fu3
-0x8706:xian4
-0x8707:zhe2
-0x8708:wu2
-0x8709:fu2
-0x870a:li2
-0x870b:lang2
-0x870c:bi4
-0x870d:chu2
-0x870e:yuan1
-0x870f:you3
-0x8710:jie2
-0x8711:dan4
-0x8712:yan2
-0x8713:ting2
-0x8714:dian4
-0x8715:shui4
-0x8716:hui2
-0x8717:gua1
-0x8718:zhi1
-0x8719:song1
-0x871a:fei1
-0x871b:ju1
-0x871c:mi4
-0x871d:qi2
-0x871e:qi2
-0x871f:yu4
-0x8720:jun3
-0x8721:la4
-0x8722:meng3
-0x8723:qiang1
-0x8724:si1
-0x8725:xi1
-0x8726:lun2
-0x8727:li4
-0x8728:die2
-0x8729:tiao2
-0x872a:tao1
-0x872b:kun1
-0x872c:gan1
-0x872d:han4
-0x872e:yu4
-0x872f:bang4
-0x8730:fei2
-0x8731:pi2
-0x8732:wei3
-0x8733:dun1
-0x8734:yi4
-0x8735:yuan1
-0x8736:su4
-0x8737:quan2
-0x8738:qian3
-0x8739:rui4
-0x873a:ni2
-0x873b:qing1
-0x873c:wei4
-0x873d:liang3
-0x873e:guo3
-0x873f:wan1
-0x8740:dong1
-0x8741:e4
-0x8742:ban3
-0x8743:di4
-0x8744:wang3
-0x8745:can2
-0x8746:yang3
-0x8747:ying2
-0x8748:guo1
-0x8749:chan2
-0x874b:la4
-0x874c:ke1
-0x874d:ji2
-0x874e:he2
-0x874f:ting2
-0x8750:mai4
-0x8751:xu1
-0x8752:mian2
-0x8753:yu2
-0x8754:jie1
-0x8755:shi2
-0x8756:xuan1
-0x8757:huang2
-0x8758:yan3
-0x8759:bian1
-0x875a:rou2
-0x875b:wei1
-0x875c:fu4
-0x875d:yuan2
-0x875e:mei4
-0x875f:wei4
-0x8760:fu2
-0x8761:ruan3
-0x8762:xie2
-0x8763:you2
-0x8764:qiu2
-0x8765:mao2
-0x8766:xia1
-0x8767:ying1
-0x8768:shi1
-0x8769:chong2
-0x876a:tang1
-0x876b:zhu1
-0x876c:zong1
-0x876d:ti2
-0x876e:fu4
-0x876f:yuan2
-0x8770:hui3
-0x8771:meng2
-0x8772:la4
-0x8773:du2
-0x8774:hu2
-0x8775:qiu1
-0x8776:die2
-0x8777:li4
-0x8778:gua1
-0x8779:yun1
-0x877a:ju3
-0x877b:nan3
-0x877c:lou2
-0x877d:qun3
-0x877e:rong2
-0x877f:ying2
-0x8780:jiang1
-0x8782:lang2
-0x8783:pang2
-0x8784:si1
-0x8785:xi1
-0x8786:ci4
-0x8787:xi1
-0x8788:yuan2
-0x8789:weng1
-0x878a:lian2
-0x878b:sou1
-0x878c:ban1
-0x878d:rong2
-0x878e:rong2
-0x878f:ji2
-0x8790:wu1
-0x8791:qiu4
-0x8792:han4
-0x8793:qin2
-0x8794:yi2
-0x8795:bi1
-0x8796:hua2
-0x8797:tang2
-0x8798:yi3
-0x8799:du4
-0x879a:nai4
-0x879b:he2
-0x879c:hu2
-0x879d:hui4
-0x879e:ma3
-0x879f:ming2
-0x87a0:yi4
-0x87a1:wen2
-0x87a2:ying2
-0x87a3:teng2
-0x87a4:yu3
-0x87a5:cang1
-0x87a8:man3
-0x87aa:shang1
-0x87ab:shi4
-0x87ac:cao2
-0x87ad:chi1
-0x87ae:di4
-0x87af:ao2
-0x87b0:lu4
-0x87b1:wei4
-0x87b2:zhi4
-0x87b3:tang2
-0x87b4:chen2
-0x87b5:piao1
-0x87b6:qu2
-0x87b7:pi2
-0x87b8:yu2
-0x87b9:jian4
-0x87ba:luo2
-0x87bb:lou2
-0x87bc:qin3
-0x87bd:zhong1
-0x87be:yin3
-0x87bf:jiang1
-0x87c0:shuai4
-0x87c1:wen2
-0x87c2:jiao1
-0x87c3:wan4
-0x87c4:zhe2
-0x87c5:zhe4
-0x87c6:ma2
-0x87c7:ma2
-0x87c8:guo1
-0x87c9:liu2
-0x87ca:mao2
-0x87cb:xi1
-0x87cc:cong1
-0x87cd:li2
-0x87ce:man3
-0x87cf:xiao1
-0x87d1:zhang1
-0x87d2:mang3
-0x87d3:xiang4
-0x87d4:mo4
-0x87d5:zui1
-0x87d6:si1
-0x87d7:qiu1
-0x87d8:te4
-0x87d9:zhi2
-0x87da:peng2
-0x87db:peng2
-0x87dc:jiao3
-0x87dd:qu2
-0x87de:bie2
-0x87df:liao2
-0x87e0:pan2
-0x87e1:gui3
-0x87e2:xi3
-0x87e3:ji3
-0x87e4:zhuan1
-0x87e5:huang2
-0x87e6:fei4
-0x87e7:lao2
-0x87e8:jue2
-0x87e9:jue2
-0x87ea:hui4
-0x87eb:yin2
-0x87ec:chan2
-0x87ed:jiao1
-0x87ee:shan4
-0x87ef:rao2
-0x87f0:xiao1
-0x87f1:mou2
-0x87f2:chong2
-0x87f3:xun2
-0x87f4:si1
-0x87f6:cheng1
-0x87f7:dang1
-0x87f8:li3
-0x87f9:xie4
-0x87fa:shan4
-0x87fb:yi3
-0x87fc:jing3
-0x87fd:da2
-0x87fe:chan2
-0x87ff:qi4
-0x8800:ci1
-0x8801:xiang4
-0x8802:she4
-0x8803:luo3
-0x8804:qin2
-0x8805:ying2
-0x8806:chai4
-0x8807:li4
-0x8808:ze2
-0x8809:xuan1
-0x880a:lian2
-0x880b:zhu2
-0x880c:ze2
-0x880d:xie1
-0x880e:mang3
-0x880f:xie4
-0x8810:qi2
-0x8811:rong2
-0x8812:jian3
-0x8813:meng3
-0x8814:hao2
-0x8815:ru2
-0x8816:huo4
-0x8817:zhuo2
-0x8818:jie2
-0x8819:bin1
-0x881a:he4
-0x881b:mie4
-0x881c:fan2
-0x881d:lei2
-0x881e:jie2
-0x881f:la4
-0x8820:mi4
-0x8821:li3
-0x8822:chun3
-0x8823:li4
-0x8824:qiu1
-0x8825:nie4
-0x8826:lu2
-0x8827:du4
-0x8828:xiao1
-0x8829:zhu1
-0x882a:long2
-0x882b:li4
-0x882c:long2
-0x882d:feng1
-0x882e:ye1
-0x882f:beng4
-0x8830:shang4
-0x8831:gu3
-0x8832:juan1
-0x8833:ying1
-0x8835:xi1
-0x8836:can2
-0x8837:qu2
-0x8838:quan2
-0x8839:du4
-0x883a:can2
-0x883b:man2
-0x883c:jue2
-0x883d:jie2
-0x883e:zhu2
-0x883f:zha2
-0x8840:xie3
-0x8841:huang1
-0x8842:niu4
-0x8843:pei1
-0x8844:nv4
-0x8845:xin4
-0x8846:zhong4
-0x8847:mo4
-0x8848:er4
-0x8849:ke4
-0x884a:mie4
-0x884b:xi4
-0x884c:xing2
-0x884d:yan3
-0x884e:kan4
-0x884f:yuan4
-0x8851:ling2
-0x8852:xuan4
-0x8853:shu4
-0x8854:xian2
-0x8855:tong4
-0x8856:long4
-0x8857:jie1
-0x8858:xian2
-0x8859:ya2
-0x885a:hu2
-0x885b:wei4
-0x885c:dao4
-0x885d:chong1
-0x885e:wei4
-0x885f:dao4
-0x8860:zhun1
-0x8861:heng2
-0x8862:qu2
-0x8863:yi1
-0x8865:bu3
-0x8866:gan3
-0x8867:yu2
-0x8868:biao3
-0x8869:cha4
-0x886a:yi3
-0x886b:shan1
-0x886c:chen4
-0x886d:fu1
-0x886e:gun3
-0x886f:fen1
-0x8870:shuai1
-0x8871:jie2
-0x8872:na4
-0x8873:zhong1
-0x8874:dan3
-0x8875:ri4
-0x8876:zhong4
-0x8877:zhong1
-0x8878:xie4
-0x8879:qi2
-0x887a:xie2
-0x887b:ran2
-0x887c:zhi1
-0x887d:ren4
-0x887e:qin1
-0x887f:jin1
-0x8880:jun1
-0x8881:yuan2
-0x8882:mei4
-0x8883:chai4
-0x8884:ao3
-0x8885:niao3
-0x8886:hui1
-0x8887:ran2
-0x8888:jia1
-0x8889:tuo2
-0x888a:ling3
-0x888b:dai4
-0x888c:bao4
-0x888d:pao2
-0x888e:yao4
-0x888f:zuo4
-0x8890:bi4
-0x8891:shao4
-0x8892:tan3
-0x8893:ju3
-0x8894:he4
-0x8895:shu4
-0x8896:xiu4
-0x8897:zhen3
-0x8898:yi2
-0x8899:pa4
-0x889a:bo1
-0x889b:di1
-0x889c:wa4
-0x889d:fu4
-0x889e:gun3
-0x889f:zhi4
-0x88a0:zhi4
-0x88a1:ran2
-0x88a2:pan4
-0x88a3:yi4
-0x88a4:mao4
-0x88a6:na4
-0x88a7:kou1
-0x88a8:xian4
-0x88a9:chan1
-0x88aa:qu1
-0x88ab:bei4
-0x88ac:gun3
-0x88ad:xi2
-0x88af:bo2
-0x88b1:fu2
-0x88b2:yi2
-0x88b3:chi3
-0x88b4:ku4
-0x88b5:ren4
-0x88b6:jiang4
-0x88b7:jia2
-0x88b8:cun2
-0x88b9:mo4
-0x88ba:jie2
-0x88bb:er2
-0x88bc:luo4
-0x88bd:ru2
-0x88be:zhu1
-0x88bf:gui1
-0x88c0:yin1
-0x88c1:cai2
-0x88c2:lie4
-0x88c5:zhuang1
-0x88c6:dang1
-0x88c8:kun1
-0x88c9:ken4
-0x88ca:niao3
-0x88cb:shu4
-0x88cc:jia2
-0x88cd:kun3
-0x88ce:cheng2
-0x88cf:li3
-0x88d0:juan1
-0x88d1:shen1
-0x88d2:pou2
-0x88d3:ge2
-0x88d4:yi4
-0x88d5:yu4
-0x88d6:zhen3
-0x88d7:liu2
-0x88d8:qiu2
-0x88d9:qun2
-0x88da:ji4
-0x88db:yi4
-0x88dc:bu3
-0x88dd:zhuang1
-0x88de:shui4
-0x88df:sha1
-0x88e0:qun2
-0x88e1:li3
-0x88e2:lian2
-0x88e3:lian4
-0x88e4:ku4
-0x88e5:jian3
-0x88e6:fou2
-0x88e7:chan1
-0x88e8:bi4
-0x88e9:gun1
-0x88ea:tao2
-0x88eb:yuan4
-0x88ec:ling2
-0x88ed:chi3
-0x88ee:chang1
-0x88ef:chou2
-0x88f0:duo2
-0x88f1:biao3
-0x88f2:liang3
-0x88f3:chang2
-0x88f4:pei2
-0x88f5:pei2
-0x88f6:fei1
-0x88f7:yuan1
-0x88f8:luo3
-0x88f9:guo3
-0x88fa:yan3
-0x88fb:du3
-0x88fc:xi2
-0x88fd:zhi4
-0x88fe:ju1
-0x88ff:qi3
-0x8900:ji4
-0x8901:zhi2
-0x8902:gua4
-0x8903:ken4
-0x8905:ti4
-0x8906:ti2
-0x8907:fu4
-0x8908:chong2
-0x8909:xie1
-0x890a:bian3
-0x890b:die2
-0x890c:kun1
-0x890d:duan1
-0x890e:xiu4
-0x890f:xiu4
-0x8910:he2
-0x8911:yuan4
-0x8912:bao1
-0x8913:bao3
-0x8914:fu4
-0x8915:yu2
-0x8916:tuan4
-0x8917:yan3
-0x8918:hui1
-0x8919:bei4
-0x891a:chu3
-0x891b:lv3
-0x891e:yun3
-0x891f:da2
-0x8920:gou1
-0x8921:da1
-0x8922:huai2
-0x8923:rong2
-0x8924:yuan4
-0x8925:ru4
-0x8926:nai4
-0x8927:jiong3
-0x8928:suo3
-0x8929:ban1
-0x892a:tun4
-0x892b:chi3
-0x892c:sang3
-0x892d:niao3
-0x892e:ying1
-0x892f:jie4
-0x8930:qian1
-0x8931:huai2
-0x8932:ku4
-0x8933:lian2
-0x8934:bao3
-0x8935:li2
-0x8936:zhe2
-0x8937:shi1
-0x8938:lv3
-0x8939:yi4
-0x893a:die2
-0x893b:xie4
-0x893c:xian1
-0x893d:wei4
-0x893e:biao3
-0x893f:cao2
-0x8940:ji1
-0x8941:jiang3
-0x8942:sen1
-0x8943:bao1
-0x8944:xiang1
-0x8946:pu2
-0x8947:jian3
-0x8948:zhuan4
-0x8949:jian4
-0x894a:zui4
-0x894b:ji2
-0x894c:dan1
-0x894d:za2
-0x894e:fan2
-0x894f:bo2
-0x8950:xiang4
-0x8951:xin2
-0x8952:bie2
-0x8953:rao2
-0x8954:man3
-0x8955:lan2
-0x8956:ao3
-0x8957:duo2
-0x8958:gui4
-0x8959:cao4
-0x895a:sui4
-0x895b:nong2
-0x895c:chan1
-0x895d:lian4
-0x895e:bi4
-0x895f:jin1
-0x8960:dang1
-0x8961:shu2
-0x8962:tan3
-0x8963:bi4
-0x8964:lan2
-0x8965:pu2
-0x8966:ru2
-0x8967:zhi3
-0x8969:shu3
-0x896a:wa4
-0x896b:shi4
-0x896c:bai3
-0x896d:xie2
-0x896e:bo2
-0x896f:chen4
-0x8970:lai4
-0x8971:long2
-0x8972:xi2
-0x8973:xian1
-0x8974:lan2
-0x8975:zhe2
-0x8976:dai4
-0x8978:zan4
-0x8979:shi1
-0x897a:jian3
-0x897b:pan4
-0x897c:yi4
-0x897e:ya4
-0x897f:xi1
-0x8980:xi1
-0x8981:yao4
-0x8982:feng3
-0x8983:tan2
-0x8985:biao4
-0x8986:fu4
-0x8987:ba4
-0x8988:he2
-0x8989:ji1
-0x898a:ji1
-0x898b:jian4
-0x898c:guan1
-0x898d:bian4
-0x898e:yan4
-0x898f:gui1
-0x8990:jue2
-0x8991:pian3
-0x8992:mao2
-0x8993:mi4
-0x8994:mi4
-0x8995:mie4
-0x8996:shi4
-0x8997:si1
-0x8998:zhan1
-0x8999:luo2
-0x899a:jue2
-0x899b:mi4
-0x899c:tiao4
-0x899d:lian2
-0x899e:yao4
-0x899f:zhi4
-0x89a0:jun1
-0x89a1:xi2
-0x89a2:shan3
-0x89a3:wei1
-0x89a4:xi4
-0x89a5:tian3
-0x89a6:yu2
-0x89a7:lan3
-0x89a8:e4
-0x89a9:du3
-0x89aa:qin1
-0x89ab:pang3
-0x89ac:ji4
-0x89ad:ming2
-0x89ae:ying2
-0x89af:gou4
-0x89b0:qu4
-0x89b1:zhan4
-0x89b2:jin3
-0x89b3:guan1
-0x89b4:deng1
-0x89b5:jian4
-0x89b6:luo2
-0x89b7:qu4
-0x89b8:jian4
-0x89b9:wei2
-0x89ba:jue2
-0x89bb:qu4
-0x89bc:luo2
-0x89bd:lan3
-0x89be:shen3
-0x89bf:di2
-0x89c0:guan1
-0x89c1:jian4
-0x89c2:guan1
-0x89c3:yan4
-0x89c4:gui1
-0x89c5:mi4
-0x89c6:shi4
-0x89c7:zhan1
-0x89c8:lan3
-0x89c9:jue2
-0x89ca:ji4
-0x89cb:xi2
-0x89cc:di2
-0x89cd:tian3
-0x89ce:yu2
-0x89cf:gou4
-0x89d0:jin3
-0x89d1:qu4
-0x89d2:jiao3
-0x89d3:jiu1
-0x89d4:jin1
-0x89d5:cu1
-0x89d6:jue2
-0x89d7:zhi4
-0x89d8:chao4
-0x89d9:ji2
-0x89da:gu1
-0x89db:dan4
-0x89dc:zi1
-0x89dd:di3
-0x89de:shang1
-0x89df:hua4
-0x89e0:quan2
-0x89e1:ge2
-0x89e2:chi4
-0x89e3:jie3
-0x89e4:gui3
-0x89e5:gong1
-0x89e6:chu4
-0x89e7:jie3
-0x89e8:hun4
-0x89e9:qiu2
-0x89ea:xing1
-0x89eb:su4
-0x89ec:ni2
-0x89ed:ji1
-0x89ee:lu4
-0x89ef:zhi4
-0x89f0:zha1
-0x89f1:bi4
-0x89f2:xing1
-0x89f3:hu2
-0x89f4:shang1
-0x89f5:gong1
-0x89f6:zhi4
-0x89f7:xue2
-0x89f8:chu4
-0x89f9:xi1
-0x89fa:yi2
-0x89fb:lu4
-0x89fc:jue2
-0x89fd:xi1
-0x89fe:yan4
-0x89ff:xi1
-0x8a00:yan2
-0x8a02:ding4
-0x8a03:fu4
-0x8a04:qiu2
-0x8a05:qiu2
-0x8a06:jiao4
-0x8a07:hong1
-0x8a08:ji4
-0x8a09:fan4
-0x8a0a:xun4
-0x8a0b:diao4
-0x8a0c:hong2
-0x8a0d:cha4
-0x8a0e:tao3
-0x8a0f:xu1
-0x8a10:jie2
-0x8a11:yi2
-0x8a12:ren4
-0x8a13:xun4
-0x8a14:yin2
-0x8a15:shan4
-0x8a16:qi4
-0x8a17:tuo1
-0x8a18:ji4
-0x8a19:xun4
-0x8a1a:yin2
-0x8a1b:e2
-0x8a1c:fen1
-0x8a1d:ya4
-0x8a1e:yao1
-0x8a1f:song4
-0x8a20:shen3
-0x8a21:yin2
-0x8a22:xin1
-0x8a23:jue2
-0x8a24:xiao2
-0x8a25:ne4
-0x8a26:chen2
-0x8a27:you2
-0x8a28:zhi3
-0x8a29:xiong1
-0x8a2a:fang3
-0x8a2b:xin4
-0x8a2c:chao1
-0x8a2d:she4
-0x8a2e:xian1
-0x8a2f:sha3
-0x8a30:tun2
-0x8a31:xu3
-0x8a32:yi4
-0x8a33:yi4
-0x8a34:su4
-0x8a35:chi1
-0x8a36:he1
-0x8a37:shen1
-0x8a38:he2
-0x8a39:xu4
-0x8a3a:zhen3
-0x8a3b:zhu4
-0x8a3c:zheng4
-0x8a3d:gou4
-0x8a3e:zi3
-0x8a3f:zi3
-0x8a40:zhan1
-0x8a41:gu3
-0x8a42:fu4
-0x8a43:quan3
-0x8a44:die2
-0x8a45:ling2
-0x8a46:di3
-0x8a47:yang4
-0x8a48:li4
-0x8a49:nao2
-0x8a4a:pan4
-0x8a4b:zhou4
-0x8a4c:gan4
-0x8a4d:yi4
-0x8a4e:ju4
-0x8a4f:ao4
-0x8a50:zha4
-0x8a51:tuo2
-0x8a52:yi2
-0x8a53:qu3
-0x8a54:zhao4
-0x8a55:ping2
-0x8a56:bi4
-0x8a57:xiong4
-0x8a58:qu1
-0x8a59:ba2
-0x8a5a:da2
-0x8a5b:zu3
-0x8a5c:tao1
-0x8a5d:zhu3
-0x8a5e:ci2
-0x8a5f:zhe2
-0x8a60:yong3
-0x8a61:xu3
-0x8a62:xun2
-0x8a63:yi4
-0x8a64:huang3
-0x8a65:he2
-0x8a66:shi4
-0x8a67:cha2
-0x8a68:jiao1
-0x8a69:shi1
-0x8a6a:hen3
-0x8a6b:cha4
-0x8a6c:gou4
-0x8a6d:gui3
-0x8a6e:quan2
-0x8a6f:hui4
-0x8a70:jie2
-0x8a71:hua4
-0x8a72:gai1
-0x8a73:xiang2
-0x8a74:wei1
-0x8a75:shen1
-0x8a76:chou2
-0x8a77:tong2
-0x8a78:mi2
-0x8a79:zhan1
-0x8a7a:ming4
-0x8a7b:e4
-0x8a7c:hui1
-0x8a7d:yan2
-0x8a7e:xiong1
-0x8a7f:gua4
-0x8a80:er4
-0x8a81:beng3
-0x8a82:tiao3
-0x8a83:chi3
-0x8a84:lei3
-0x8a85:zhu1
-0x8a86:kuang1
-0x8a87:kua1
-0x8a88:wu2
-0x8a89:yu4
-0x8a8a:teng2
-0x8a8b:ji4
-0x8a8c:zhi4
-0x8a8d:ren4
-0x8a8e:su4
-0x8a8f:lang3
-0x8a90:e2
-0x8a91:kuang2
-0x8a92:e4
-0x8a93:shi4
-0x8a94:ting3
-0x8a95:dan4
-0x8a96:bo2
-0x8a97:chan2
-0x8a98:you4
-0x8a99:heng2
-0x8a9a:qiao4
-0x8a9b:qin1
-0x8a9c:shua4
-0x8a9d:an1
-0x8a9e:yu3
-0x8a9f:xiao4
-0x8aa0:cheng2
-0x8aa1:jie4
-0x8aa2:xian4
-0x8aa3:wu1
-0x8aa4:wu4
-0x8aa5:gao4
-0x8aa6:song4
-0x8aa7:pu3
-0x8aa8:hui4
-0x8aa9:jing4
-0x8aaa:shuo1
-0x8aab:zhen4
-0x8aac:shuo1
-0x8aad:du2
-0x8aaf:chang4
-0x8ab0:shui2
-0x8ab1:jie2
-0x8ab2:ke4
-0x8ab3:qu1
-0x8ab4:cong2
-0x8ab5:xiao2
-0x8ab6:sui4
-0x8ab7:wang3
-0x8ab8:xuan2
-0x8ab9:fei3
-0x8aba:chi1
-0x8abb:ta4
-0x8abc:yi4
-0x8abd:na2
-0x8abe:yin2
-0x8abf:diao4
-0x8ac0:pi3
-0x8ac1:chuo4
-0x8ac2:chan3
-0x8ac3:chen1
-0x8ac4:zhun1
-0x8ac5:ji1
-0x8ac6:qi1
-0x8ac7:tan2
-0x8ac8:zhui4
-0x8ac9:wei3
-0x8aca:ju2
-0x8acb:qing3
-0x8acc:jian4
-0x8acd:zheng1
-0x8ace:ze2
-0x8acf:zou1
-0x8ad0:qian1
-0x8ad1:zhuo2
-0x8ad2:liang4
-0x8ad3:jian4
-0x8ad4:zhu4
-0x8ad5:hao2
-0x8ad6:lun4
-0x8ad7:shen3
-0x8ad8:biao3
-0x8ad9:huai4
-0x8ada:pian2
-0x8adb:yu2
-0x8adc:die2
-0x8add:xu3
-0x8ade:pian3
-0x8adf:shi4
-0x8ae0:xuan1
-0x8ae1:shi4
-0x8ae2:hun4
-0x8ae3:hua4
-0x8ae4:e4
-0x8ae5:zhong4
-0x8ae6:di4
-0x8ae7:xie2
-0x8ae8:fu2
-0x8ae9:pu3
-0x8aea:ting2
-0x8aeb:jian4
-0x8aec:qi3
-0x8aed:yu4
-0x8aee:zi1
-0x8aef:chuan2
-0x8af0:xi3
-0x8af1:hui4
-0x8af2:yin1
-0x8af3:an1
-0x8af4:xian2
-0x8af5:nan2
-0x8af6:chen2
-0x8af7:feng3
-0x8af8:zhu1
-0x8af9:yang2
-0x8afa:yan4
-0x8afb:heng1
-0x8afc:xuan1
-0x8afd:ge2
-0x8afe:nuo4
-0x8aff:qi4
-0x8b00:mou2
-0x8b01:ye4
-0x8b02:wei4
-0x8b04:teng2
-0x8b05:zou1
-0x8b06:shan4
-0x8b07:jian3
-0x8b08:bo2
-0x8b0a:huang3
-0x8b0b:huo4
-0x8b0c:ge1
-0x8b0d:ying2
-0x8b0e:mi2
-0x8b0f:xiao3
-0x8b10:mi4
-0x8b11:xi4
-0x8b12:qiang1
-0x8b13:chen1
-0x8b14:nve4
-0x8b15:ti2
-0x8b16:su4
-0x8b17:bang4
-0x8b18:chi2
-0x8b19:qian1
-0x8b1a:shi4
-0x8b1b:jiang3
-0x8b1c:yuan4
-0x8b1d:xie4
-0x8b1e:xue4
-0x8b1f:tao1
-0x8b20:yao2
-0x8b21:yao2
-0x8b23:yu2
-0x8b24:biao1
-0x8b25:cong4
-0x8b26:qing4
-0x8b27:li2
-0x8b28:mo2
-0x8b29:mo4
-0x8b2a:shang1
-0x8b2b:zhe2
-0x8b2c:miu4
-0x8b2d:jian3
-0x8b2e:ze2
-0x8b2f:jie1
-0x8b30:lian2
-0x8b31:lou2
-0x8b32:can1
-0x8b33:ou1
-0x8b34:guan4
-0x8b35:xi2
-0x8b36:zhuo2
-0x8b37:ao2
-0x8b38:ao2
-0x8b39:jin3
-0x8b3a:zhe2
-0x8b3b:yi2
-0x8b3c:hu4
-0x8b3d:jiang4
-0x8b3e:man2
-0x8b3f:chao2
-0x8b40:han4
-0x8b41:hua2
-0x8b42:chan3
-0x8b43:xu1
-0x8b44:zeng1
-0x8b45:se4
-0x8b46:xi1
-0x8b47:she1
-0x8b48:dui4
-0x8b49:zheng4
-0x8b4a:nao2
-0x8b4b:lan2
-0x8b4c:e2
-0x8b4d:ying4
-0x8b4e:jue2
-0x8b4f:ji1
-0x8b50:zun3
-0x8b51:jiao3
-0x8b52:bo4
-0x8b53:hui4
-0x8b54:zhuan4
-0x8b55:mu2
-0x8b56:zen4
-0x8b57:zha2
-0x8b58:shi5
-0x8b59:qiao2
-0x8b5a:tan2
-0x8b5b:zen4
-0x8b5c:pu3
-0x8b5d:sheng2
-0x8b5e:xuan1
-0x8b5f:zao4
-0x8b60:tan1
-0x8b61:dang3
-0x8b62:sui4
-0x8b63:qian1
-0x8b64:ji1
-0x8b65:jiao4
-0x8b66:jing3
-0x8b67:lian2
-0x8b68:nou2
-0x8b69:yi1
-0x8b6a:ai4
-0x8b6b:zhan1
-0x8b6c:pi4
-0x8b6d:hui3
-0x8b6e:hua4
-0x8b6f:yi4
-0x8b70:yi4
-0x8b71:shan4
-0x8b72:rang4
-0x8b73:nou4
-0x8b74:qian3
-0x8b75:zhui4
-0x8b76:ta4
-0x8b77:hu4
-0x8b78:zhou1
-0x8b79:hao2
-0x8b7a:ye4
-0x8b7b:ying1
-0x8b7c:jian4
-0x8b7d:yu4
-0x8b7e:jian3
-0x8b7f:hui4
-0x8b80:du2
-0x8b81:zhe2
-0x8b82:xuan4
-0x8b83:zan4
-0x8b84:lei3
-0x8b85:shen3
-0x8b86:wei4
-0x8b87:chan3
-0x8b88:li4
-0x8b89:yi2
-0x8b8a:bian4
-0x8b8b:zhe2
-0x8b8c:yan4
-0x8b8d:e4
-0x8b8e:chou2
-0x8b8f:wei4
-0x8b90:chou2
-0x8b91:yao4
-0x8b92:chan2
-0x8b93:rang4
-0x8b94:yin3
-0x8b95:lan2
-0x8b96:chen4
-0x8b97:huo4
-0x8b98:zhe2
-0x8b99:huan1
-0x8b9a:zan4
-0x8b9b:yi4
-0x8b9c:dang3
-0x8b9d:zhan1
-0x8b9e:yan4
-0x8b9f:du2
-0x8ba0:yan2
-0x8ba1:ji4
-0x8ba2:ding4
-0x8ba3:fu4
-0x8ba4:ren4
-0x8ba5:ji1
-0x8ba6:jie2
-0x8ba7:hong2
-0x8ba8:tao3
-0x8ba9:rang4
-0x8baa:shan4
-0x8bab:qi4
-0x8bac:tuo1
-0x8bad:xun4
-0x8bae:yi4
-0x8baf:xun4
-0x8bb0:ji4
-0x8bb1:ren4
-0x8bb2:jiang3
-0x8bb3:hui4
-0x8bb4:ou1
-0x8bb5:ju4
-0x8bb6:ya4
-0x8bb7:ne4
-0x8bb8:xu3
-0x8bb9:e2
-0x8bba:lun4
-0x8bbb:xiong1
-0x8bbc:song4
-0x8bbd:feng1
-0x8bbe:she4
-0x8bbf:fang3
-0x8bc0:jue2
-0x8bc1:zheng4
-0x8bc2:gu3
-0x8bc3:he1
-0x8bc4:ping2
-0x8bc5:zu3
-0x8bc6:shi4
-0x8bc7:xiong4
-0x8bc8:zha4
-0x8bc9:su4
-0x8bca:zhen3
-0x8bcb:di3
-0x8bcc:zou1
-0x8bcd:ci2
-0x8bce:qu4
-0x8bcf:zhao4
-0x8bd0:bi4
-0x8bd1:yi4
-0x8bd2:yi2
-0x8bd3:kuang1
-0x8bd4:lei3
-0x8bd5:shi4
-0x8bd6:gua4
-0x8bd7:shi1
-0x8bd8:jie2
-0x8bd9:hui1
-0x8bda:cheng2
-0x8bdb:zhu1
-0x8bdc:shen1
-0x8bdd:hua4
-0x8bde:dan4
-0x8bdf:gou4
-0x8be0:quan2
-0x8be1:gui3
-0x8be2:xun2
-0x8be3:yi4
-0x8be4:zheng1
-0x8be5:gai1
-0x8be6:xiang2
-0x8be7:cha4
-0x8be8:hun4
-0x8be9:xu3
-0x8bea:zhou1
-0x8beb:jie4
-0x8bec:wu2
-0x8bed:yu3
-0x8bee:qiao4
-0x8bef:wu4
-0x8bf0:gao4
-0x8bf1:you4
-0x8bf2:hui4
-0x8bf3:kuang2
-0x8bf4:shuo1
-0x8bf5:song4
-0x8bf6:ai1
-0x8bf7:qing3
-0x8bf8:zhu1
-0x8bf9:zou1
-0x8bfa:nuo4
-0x8bfb:du2
-0x8bfc:zhuo2
-0x8bfd:fei3
-0x8bfe:ke4
-0x8bff:wei3
-0x8c00:yu2
-0x8c01:shui2
-0x8c02:shen3
-0x8c03:diao4
-0x8c04:chan3
-0x8c05:liang4
-0x8c06:zhun1
-0x8c07:sui4
-0x8c08:tan2
-0x8c09:shen3
-0x8c0a:yi2
-0x8c0b:mou2
-0x8c0c:chen2
-0x8c0d:die2
-0x8c0e:huang3
-0x8c0f:jian4
-0x8c10:xie2
-0x8c11:nve4
-0x8c12:ye4
-0x8c13:wei4
-0x8c14:e4
-0x8c15:yu4
-0x8c16:xuan1
-0x8c17:chan2
-0x8c18:zi1
-0x8c19:an1
-0x8c1a:yan4
-0x8c1b:di4
-0x8c1c:mi2
-0x8c1d:pian2
-0x8c1e:xu3
-0x8c1f:mo2
-0x8c20:dang3
-0x8c21:su4
-0x8c22:xie4
-0x8c23:yao2
-0x8c24:bang4
-0x8c25:shi4
-0x8c26:qian1
-0x8c27:mi4
-0x8c28:jin3
-0x8c29:man2
-0x8c2a:zhe2
-0x8c2b:jian3
-0x8c2c:miu4
-0x8c2d:tan2
-0x8c2e:zen4
-0x8c2f:qiao2
-0x8c30:lan2
-0x8c31:pu3
-0x8c32:jue2
-0x8c33:yan4
-0x8c34:qian3
-0x8c35:zhan1
-0x8c36:chen4
-0x8c37:gu3
-0x8c38:qian1
-0x8c39:hong2
-0x8c3a:xia1
-0x8c3b:jue2
-0x8c3c:hong2
-0x8c3d:han1
-0x8c3e:hong1
-0x8c3f:xi1
-0x8c40:xi1
-0x8c41:huo1
-0x8c42:liao2
-0x8c43:han3
-0x8c44:du2
-0x8c45:long2
-0x8c46:dou4
-0x8c47:jiang1
-0x8c48:qi3
-0x8c49:chi3
-0x8c4a:li3
-0x8c4b:deng1
-0x8c4c:wan1
-0x8c4d:bi1
-0x8c4e:shu4
-0x8c4f:xian4
-0x8c50:feng1
-0x8c51:zhi4
-0x8c52:zhi4
-0x8c53:yan4
-0x8c54:yan4
-0x8c55:shi3
-0x8c56:chu4
-0x8c57:hui1
-0x8c58:tun2
-0x8c59:yi4
-0x8c5a:tun2
-0x8c5b:yi4
-0x8c5c:jian1
-0x8c5d:ba1
-0x8c5e:hou4
-0x8c5f:e4
-0x8c60:cu2
-0x8c61:xiang4
-0x8c62:huan4
-0x8c63:jian1
-0x8c64:ken3
-0x8c65:gai1
-0x8c66:qu2
-0x8c67:fu1
-0x8c68:xi1
-0x8c69:bin1
-0x8c6a:hao2
-0x8c6b:yu4
-0x8c6c:zhu1
-0x8c6d:jia1
-0x8c6e:fen2
-0x8c6f:xi1
-0x8c70:bo2
-0x8c71:wen1
-0x8c72:huan2
-0x8c73:bin1
-0x8c74:di2
-0x8c75:zong1
-0x8c76:fen2
-0x8c77:yi4
-0x8c78:zhi4
-0x8c79:bao4
-0x8c7a:chai2
-0x8c7b:an4
-0x8c7c:pi2
-0x8c7d:na4
-0x8c7e:pi1
-0x8c7f:gou3
-0x8c80:na4
-0x8c81:you4
-0x8c82:diao1
-0x8c83:mo4
-0x8c84:si4
-0x8c85:xiu1
-0x8c86:huan2
-0x8c87:kun1
-0x8c88:he2
-0x8c89:he2
-0x8c8a:mo4
-0x8c8b:han4
-0x8c8c:mao4
-0x8c8d:li2
-0x8c8e:ni2
-0x8c8f:bi3
-0x8c90:yu3
-0x8c91:jia1
-0x8c92:tuan1
-0x8c93:mao1
-0x8c94:pi2
-0x8c95:xi1
-0x8c96:e4
-0x8c97:ju4
-0x8c98:mo4
-0x8c99:chu1
-0x8c9a:tan2
-0x8c9b:huan1
-0x8c9c:jue2
-0x8c9d:bei4
-0x8c9e:zhen1
-0x8c9f:yuan2
-0x8ca0:fu4
-0x8ca1:cai2
-0x8ca2:gong4
-0x8ca3:te4
-0x8ca4:yi2
-0x8ca5:hang2
-0x8ca6:wan4
-0x8ca7:pin2
-0x8ca8:huo4
-0x8ca9:fan4
-0x8caa:tan1
-0x8cab:guan4
-0x8cac:ze2
-0x8cad:zhi2
-0x8cae:er4
-0x8caf:zhu3
-0x8cb0:shi4
-0x8cb1:bi4
-0x8cb2:zi1
-0x8cb3:er4
-0x8cb4:gui4
-0x8cb5:pian3
-0x8cb6:bian3
-0x8cb7:mai3
-0x8cb8:dai4
-0x8cb9:sheng4
-0x8cba:kuang4
-0x8cbb:fei4
-0x8cbc:tie1
-0x8cbd:yi2
-0x8cbe:chi2
-0x8cbf:mao4
-0x8cc0:he4
-0x8cc1:bi4
-0x8cc2:lu4
-0x8cc3:lin4
-0x8cc4:hui4
-0x8cc5:gai1
-0x8cc6:pian2
-0x8cc7:zi1
-0x8cc8:jia3
-0x8cc9:xu4
-0x8cca:zei2
-0x8ccb:jiao3
-0x8ccc:gai4
-0x8ccd:zang1
-0x8cce:jian4
-0x8ccf:ying4
-0x8cd0:xun4
-0x8cd1:zhen4
-0x8cd2:she1
-0x8cd3:bin1
-0x8cd4:bin1
-0x8cd5:qiu2
-0x8cd6:she1
-0x8cd7:chuan4
-0x8cd8:zang1
-0x8cd9:zhou1
-0x8cda:lai4
-0x8cdb:zan4
-0x8cdc:ci4
-0x8cdd:chen1
-0x8cde:shang3
-0x8cdf:tian3
-0x8ce0:pei2
-0x8ce1:geng1
-0x8ce2:xian2
-0x8ce3:mai4
-0x8ce4:jian4
-0x8ce5:sui4
-0x8ce6:fu4
-0x8ce7:tan4
-0x8ce8:cong2
-0x8ce9:cong2
-0x8cea:zhi4
-0x8ceb:ji1
-0x8cec:zhang4
-0x8ced:du3
-0x8cee:jin4
-0x8cef:xiong1
-0x8cf0:shun3
-0x8cf1:yun3
-0x8cf2:bao3
-0x8cf3:zai1
-0x8cf4:lai4
-0x8cf5:feng4
-0x8cf6:cang4
-0x8cf7:ji1
-0x8cf8:sheng4
-0x8cf9:ai4
-0x8cfa:zhuan4
-0x8cfb:fu4
-0x8cfc:gou4
-0x8cfd:sai4
-0x8cfe:ze2
-0x8cff:liao2
-0x8d00:wei4
-0x8d01:bai4
-0x8d02:chen3
-0x8d03:zhuan4
-0x8d04:zhi4
-0x8d05:zhui4
-0x8d06:biao1
-0x8d07:yun1
-0x8d08:zeng4
-0x8d09:tan3
-0x8d0a:zan4
-0x8d0b:yan4
-0x8d0d:shan4
-0x8d0e:wan4
-0x8d0f:ying2
-0x8d10:jin4
-0x8d11:gan3
-0x8d12:xian2
-0x8d13:zang1
-0x8d14:bi4
-0x8d15:du2
-0x8d16:shu2
-0x8d17:yan4
-0x8d19:xuan4
-0x8d1a:long4
-0x8d1b:gan4
-0x8d1c:zang1
-0x8d1d:bei4
-0x8d1e:zhen1
-0x8d1f:fu4
-0x8d20:yuan2
-0x8d21:gong4
-0x8d22:cai2
-0x8d23:ze2
-0x8d24:xian2
-0x8d25:bai4
-0x8d26:zhang4
-0x8d27:huo4
-0x8d28:zhi2
-0x8d29:fan4
-0x8d2a:tan1
-0x8d2b:pin2
-0x8d2c:bian3
-0x8d2d:gou4
-0x8d2e:zhu3
-0x8d2f:guan4
-0x8d30:er4
-0x8d31:jian4
-0x8d32:bi4
-0x8d33:shi4
-0x8d34:tie1
-0x8d35:gui4
-0x8d36:kuang4
-0x8d37:dai4
-0x8d38:mao4
-0x8d39:fei4
-0x8d3a:he4
-0x8d3b:yi2
-0x8d3c:zei2
-0x8d3d:zhi4
-0x8d3e:jia3
-0x8d3f:hui4
-0x8d40:zi1
-0x8d41:ren4
-0x8d42:lu4
-0x8d43:zang1
-0x8d44:zi1
-0x8d45:gai1
-0x8d46:jin4
-0x8d47:qiu2
-0x8d48:zhen4
-0x8d49:lai4
-0x8d4a:she1
-0x8d4b:fu4
-0x8d4c:du3
-0x8d4d:ji1
-0x8d4e:shu2
-0x8d4f:shang3
-0x8d50:si4
-0x8d51:bi4
-0x8d52:zhou1
-0x8d53:geng1
-0x8d54:pei2
-0x8d55:tan4
-0x8d56:lai4
-0x8d57:feng4
-0x8d58:zhui4
-0x8d59:fu4
-0x8d5a:zhuan4
-0x8d5b:sai4
-0x8d5c:ze2
-0x8d5d:yan4
-0x8d5e:zan4
-0x8d5f:yun1
-0x8d60:zeng4
-0x8d61:shan4
-0x8d62:ying2
-0x8d63:gan4
-0x8d64:chi4
-0x8d65:xi4
-0x8d66:she4
-0x8d67:nan3
-0x8d68:xiong2
-0x8d69:xi4
-0x8d6a:cheng1
-0x8d6b:he4
-0x8d6c:cheng1
-0x8d6d:zhe3
-0x8d6e:xia2
-0x8d6f:tang2
-0x8d70:zou3
-0x8d71:zou3
-0x8d72:li4
-0x8d73:jiu3
-0x8d74:fu4
-0x8d75:zhao4
-0x8d76:gan3
-0x8d77:qi3
-0x8d78:shan4
-0x8d79:qiong2
-0x8d7a:qin2
-0x8d7b:xian3
-0x8d7c:ci1
-0x8d7d:jue2
-0x8d7e:qin3
-0x8d7f:chi2
-0x8d80:ci1
-0x8d81:chen4
-0x8d82:chen4
-0x8d83:die2
-0x8d84:ju1
-0x8d85:chao1
-0x8d86:di1
-0x8d87:se4
-0x8d88:zhan1
-0x8d89:zhu2
-0x8d8a:yue4
-0x8d8b:qu1
-0x8d8c:jie2
-0x8d8d:chi2
-0x8d8e:chu2
-0x8d8f:gua1
-0x8d90:xue4
-0x8d91:ci1
-0x8d92:tiao2
-0x8d93:duo3
-0x8d94:lie4
-0x8d95:gan3
-0x8d96:suo1
-0x8d97:cu4
-0x8d98:xi2
-0x8d99:zhao4
-0x8d9a:su4
-0x8d9b:yin3
-0x8d9c:ju2
-0x8d9d:jian4
-0x8d9e:que4
-0x8d9f:tang4
-0x8da0:chuo4
-0x8da1:cui3
-0x8da2:lu4
-0x8da3:qu4
-0x8da4:dang4
-0x8da5:qiu1
-0x8da6:zi1
-0x8da7:ti2
-0x8da8:qu1
-0x8da9:chi4
-0x8daa:huang2
-0x8dab:qiao2
-0x8dac:qiao2
-0x8dad:yao4
-0x8dae:zao4
-0x8daf:ti4
-0x8db1:zan3
-0x8db2:zan3
-0x8db3:zu2
-0x8db4:pa1
-0x8db5:bao4
-0x8db6:ku4
-0x8db7:ke1
-0x8db8:dun3
-0x8db9:jue2
-0x8dba:fu1
-0x8dbb:chen3
-0x8dbc:jian3
-0x8dbd:fang4
-0x8dbe:zhi3
-0x8dbf:sa4
-0x8dc0:yue4
-0x8dc1:pa2
-0x8dc2:qi2
-0x8dc3:yue4
-0x8dc4:qiang1
-0x8dc5:tuo4
-0x8dc6:tai2
-0x8dc7:yi4
-0x8dc8:nian3
-0x8dc9:ling2
-0x8dca:mei4
-0x8dcb:ba2
-0x8dcc:die1
-0x8dcd:ku1
-0x8dce:tuo2
-0x8dcf:jia1
-0x8dd0:ci3
-0x8dd1:pao3
-0x8dd2:qia3
-0x8dd3:zhu4
-0x8dd4:ju1
-0x8dd5:die2
-0x8dd6:zhi2
-0x8dd7:fu1
-0x8dd8:pan2
-0x8dd9:ju3
-0x8dda:shan1
-0x8ddb:bo3
-0x8ddc:ni2
-0x8ddd:ju4
-0x8dde:li4
-0x8ddf:gen1
-0x8de0:yi2
-0x8de1:ji1
-0x8de2:dai4
-0x8de3:xian3
-0x8de4:jiao1
-0x8de5:duo4
-0x8de6:zhu1
-0x8de7:quan2
-0x8de8:kua4
-0x8de9:zhuai3
-0x8dea:gui4
-0x8deb:qiong2
-0x8dec:kui3
-0x8ded:xiang2
-0x8dee:chi4
-0x8def:lu4
-0x8df0:beng4
-0x8df1:zhi4
-0x8df2:jia2
-0x8df3:tiao4
-0x8df4:cai3
-0x8df5:jian4
-0x8df6:ta4
-0x8df7:qiao1
-0x8df8:bi4
-0x8df9:xian1
-0x8dfa:duo4
-0x8dfb:ji1
-0x8dfc:ju2
-0x8dfd:ji4
-0x8dfe:shu2
-0x8dff:tu2
-0x8e00:chu4
-0x8e01:jing4
-0x8e02:nie4
-0x8e03:xiao1
-0x8e04:bo2
-0x8e05:chi4
-0x8e06:qun1
-0x8e07:mou3
-0x8e08:shu1
-0x8e09:lang2
-0x8e0a:yong3
-0x8e0b:jiao3
-0x8e0c:chou2
-0x8e0d:qiao1
-0x8e0f:ta4
-0x8e10:jian4
-0x8e11:qi2
-0x8e12:wo1
-0x8e13:wei3
-0x8e14:zhuo2
-0x8e15:jie2
-0x8e16:ji2
-0x8e17:nie1
-0x8e18:ju2
-0x8e19:ju1
-0x8e1a:lun2
-0x8e1b:lu4
-0x8e1c:leng4
-0x8e1d:huai2
-0x8e1e:ju4
-0x8e1f:chi2
-0x8e20:wan3
-0x8e21:quan2
-0x8e22:ti1
-0x8e23:bo2
-0x8e24:zu2
-0x8e25:qie4
-0x8e26:ji3
-0x8e27:cu4
-0x8e28:zong1
-0x8e29:cai3
-0x8e2a:zong1
-0x8e2b:peng4
-0x8e2c:zhi4
-0x8e2d:zheng1
-0x8e2e:dian3
-0x8e2f:zhi2
-0x8e30:yu2
-0x8e31:duo4
-0x8e32:dun4
-0x8e33:chun3
-0x8e34:yong3
-0x8e35:zhong3
-0x8e36:di4
-0x8e37:zhe3
-0x8e38:chen3
-0x8e39:chuai4
-0x8e3a:jian4
-0x8e3b:gua1
-0x8e3c:tang2
-0x8e3d:ju3
-0x8e3e:fu2
-0x8e3f:zu2
-0x8e40:die2
-0x8e41:pian2
-0x8e42:rou2
-0x8e43:nuo4
-0x8e44:ti2
-0x8e45:cha3
-0x8e46:tui3
-0x8e47:jian3
-0x8e48:dao3
-0x8e49:cuo1
-0x8e4a:xi1
-0x8e4b:ta4
-0x8e4c:qiang1
-0x8e4d:zhan3
-0x8e4e:dian1
-0x8e4f:ti2
-0x8e50:ji2
-0x8e51:nie4
-0x8e52:man2
-0x8e53:liu1
-0x8e54:zhan4
-0x8e55:bi4
-0x8e56:chong1
-0x8e57:lu4
-0x8e58:liao2
-0x8e59:cu4
-0x8e5a:tang1
-0x8e5b:dai4
-0x8e5c:suo1
-0x8e5d:xi3
-0x8e5e:kui3
-0x8e5f:ji1
-0x8e60:zhi2
-0x8e61:qiang1
-0x8e62:di2
-0x8e63:pan2
-0x8e64:zong1
-0x8e65:lian2
-0x8e66:beng4
-0x8e67:zao1
-0x8e68:nian3
-0x8e69:bie2
-0x8e6a:tui2
-0x8e6b:ju2
-0x8e6c:deng4
-0x8e6d:ceng4
-0x8e6e:xian1
-0x8e6f:fan2
-0x8e70:chu2
-0x8e71:zhong1
-0x8e72:dun1
-0x8e73:bo1
-0x8e74:cu4
-0x8e75:zu2
-0x8e76:jue2
-0x8e77:jue2
-0x8e78:lin4
-0x8e79:ta4
-0x8e7a:qiao1
-0x8e7b:qiao1
-0x8e7c:pu2
-0x8e7d:liao1
-0x8e7e:dun1
-0x8e7f:cuan1
-0x8e80:kuang4
-0x8e81:zao4
-0x8e82:ta4
-0x8e83:bi4
-0x8e84:bi4
-0x8e85:zhu2
-0x8e86:ju4
-0x8e87:chu2
-0x8e88:qiao4
-0x8e89:dun3
-0x8e8a:chou2
-0x8e8b:ji1
-0x8e8c:wu3
-0x8e8d:yue4
-0x8e8e:nian3
-0x8e8f:lin4
-0x8e90:lie4
-0x8e91:zhi2
-0x8e92:li4
-0x8e93:zhi4
-0x8e94:chan2
-0x8e95:chu2
-0x8e96:duan4
-0x8e97:wei4
-0x8e98:long2
-0x8e99:lin4
-0x8e9a:xian1
-0x8e9b:wei4
-0x8e9c:zuan1
-0x8e9d:lan2
-0x8e9e:xie4
-0x8e9f:rang2
-0x8ea0:xie3
-0x8ea1:nie4
-0x8ea2:ta4
-0x8ea3:qu2
-0x8ea4:jie4
-0x8ea5:cuan1
-0x8ea6:zuan1
-0x8ea7:xi3
-0x8ea8:kui2
-0x8ea9:jue2
-0x8eaa:lin4
-0x8eab:shen1
-0x8eac:gong1
-0x8ead:dan1
-0x8eaf:qu1
-0x8eb0:ti3
-0x8eb1:duo3
-0x8eb2:duo3
-0x8eb3:gong1
-0x8eb4:lang2
-0x8eb6:luo3
-0x8eb7:ai3
-0x8eb8:ji1
-0x8eb9:ju2
-0x8eba:tang3
-0x8ebd:yan3
-0x8ebf:kang1
-0x8ec0:qu1
-0x8ec1:lou2
-0x8ec2:lao4
-0x8ec3:tuo3
-0x8ec4:zhi2
-0x8ec6:ti3
-0x8ec7:dao4
-0x8ec9:yu4
-0x8eca:che1
-0x8ecb:ya4
-0x8ecc:gui3
-0x8ecd:jun1
-0x8ece:wei4
-0x8ecf:yue4
-0x8ed0:xin4
-0x8ed1:di4
-0x8ed2:xuan1
-0x8ed3:fan4
-0x8ed4:ren4
-0x8ed5:shan1
-0x8ed6:qiang2
-0x8ed7:shu1
-0x8ed8:tun2
-0x8ed9:chen2
-0x8eda:dai4
-0x8edb:e4
-0x8edc:na4
-0x8edd:qi2
-0x8ede:mao2
-0x8edf:ruan3
-0x8ee0:ren4
-0x8ee1:fan3
-0x8ee2:zhuan3
-0x8ee3:hong1
-0x8ee4:hu1
-0x8ee5:qu2
-0x8ee6:huang4
-0x8ee7:di3
-0x8ee8:ling2
-0x8ee9:dai4
-0x8eea:ao1
-0x8eeb:zhen3
-0x8eec:fan4
-0x8eed:kuang1
-0x8eee:ang3
-0x8eef:peng1
-0x8ef0:bei4
-0x8ef1:gu1
-0x8ef2:ku1
-0x8ef3:pao2
-0x8ef4:zhu4
-0x8ef5:rong3
-0x8ef6:e4
-0x8ef7:ba2
-0x8ef8:zhou2
-0x8ef9:zhi3
-0x8efa:yao2
-0x8efb:ke1
-0x8efc:yi4
-0x8efd:qing1
-0x8efe:shi4
-0x8eff:ping2
-0x8f00:er2
-0x8f01:qiong2
-0x8f02:ju2
-0x8f03:jiao4
-0x8f04:guang1
-0x8f05:lu4
-0x8f06:kai3
-0x8f07:quan2
-0x8f08:zhou1
-0x8f09:zai4
-0x8f0a:zhi4
-0x8f0b:she1
-0x8f0c:liang4
-0x8f0d:yu4
-0x8f0e:shao1
-0x8f0f:you2
-0x8f10:huan3
-0x8f11:yun3
-0x8f12:zhe2
-0x8f13:wan3
-0x8f14:fu3
-0x8f15:qing1
-0x8f16:zhou1
-0x8f17:ni2
-0x8f18:ling2
-0x8f19:zhe2
-0x8f1a:zhan4
-0x8f1b:liang4
-0x8f1c:zi1
-0x8f1d:hui1
-0x8f1e:wang3
-0x8f1f:chuo4
-0x8f20:guo3
-0x8f21:kan3
-0x8f22:yi3
-0x8f23:peng2
-0x8f24:qian4
-0x8f25:gun3
-0x8f26:nian3
-0x8f27:pian2
-0x8f28:guan3
-0x8f29:bei4
-0x8f2a:lun2
-0x8f2b:pai2
-0x8f2c:liang2
-0x8f2d:ruan3
-0x8f2e:rou2
-0x8f2f:ji2
-0x8f30:yang2
-0x8f31:xian2
-0x8f32:chuan2
-0x8f33:cou4
-0x8f34:chun1
-0x8f35:ge2
-0x8f36:you2
-0x8f37:hong1
-0x8f38:shu1
-0x8f39:fu4
-0x8f3a:zi1
-0x8f3b:fu2
-0x8f3c:wen1
-0x8f3d:ben4
-0x8f3e:zhan3
-0x8f3f:yu2
-0x8f40:wen1
-0x8f41:tao1
-0x8f42:gu3
-0x8f43:zhen1
-0x8f44:xia2
-0x8f45:yuan2
-0x8f46:lu4
-0x8f47:jiu1
-0x8f48:chao2
-0x8f49:zhuan3
-0x8f4a:wei4
-0x8f4b:hun2
-0x8f4d:che4
-0x8f4e:jiao4
-0x8f4f:zhan4
-0x8f50:pu2
-0x8f51:lao3
-0x8f52:fen2
-0x8f53:fan1
-0x8f54:lin2
-0x8f55:ge2
-0x8f56:se4
-0x8f57:kan3
-0x8f58:huan4
-0x8f59:yi3
-0x8f5a:ji2
-0x8f5b:dui4
-0x8f5c:er2
-0x8f5d:yu2
-0x8f5e:xian4
-0x8f5f:hong1
-0x8f60:lei3
-0x8f61:pei4
-0x8f62:li4
-0x8f63:li4
-0x8f64:lu2
-0x8f65:lin4
-0x8f66:che1
-0x8f67:ya4
-0x8f68:gui3
-0x8f69:xuan1
-0x8f6a:di4
-0x8f6b:ren4
-0x8f6c:zhuan3
-0x8f6d:e4
-0x8f6e:lun2
-0x8f6f:ruan3
-0x8f70:hong1
-0x8f71:ku1
-0x8f72:ke1
-0x8f73:lu2
-0x8f74:zhou2
-0x8f75:zhi3
-0x8f76:yi4
-0x8f77:hu1
-0x8f78:zhen3
-0x8f79:li4
-0x8f7a:yao2
-0x8f7b:qing1
-0x8f7c:shi4
-0x8f7d:zai4
-0x8f7e:zhi4
-0x8f7f:jiao4
-0x8f80:zhou1
-0x8f81:quan2
-0x8f82:lu4
-0x8f83:jiao4
-0x8f84:zhe2
-0x8f85:fu3
-0x8f86:liang4
-0x8f87:nian3
-0x8f88:bei4
-0x8f89:hui1
-0x8f8a:gun3
-0x8f8b:wang3
-0x8f8c:liang2
-0x8f8d:chuo4
-0x8f8e:zi1
-0x8f8f:cou4
-0x8f90:fu2
-0x8f91:ji2
-0x8f92:wen1
-0x8f93:shu1
-0x8f94:pei4
-0x8f95:yuan2
-0x8f96:xia2
-0x8f97:zhan3
-0x8f98:lu4
-0x8f99:che4
-0x8f9a:lin2
-0x8f9b:xin1
-0x8f9c:gu1
-0x8f9d:ci2
-0x8f9e:ci2
-0x8f9f:pi4
-0x8fa0:zui4
-0x8fa1:bian4
-0x8fa2:la4
-0x8fa3:la4
-0x8fa4:ci2
-0x8fa5:xue1
-0x8fa6:ban4
-0x8fa7:bian4
-0x8fa8:bian4
-0x8fa9:bian4
-0x8fab:bian4
-0x8fac:ban1
-0x8fad:ci2
-0x8fae:bian4
-0x8faf:bian4
-0x8fb0:chen2
-0x8fb1:ru3
-0x8fb2:nong2
-0x8fb3:nong2
-0x8fb4:zhen3
-0x8fb5:chuo4
-0x8fb6:chuo4
-0x8fb8:reng2
-0x8fb9:bian1
-0x8fba:bian1
-0x8fbd:liao2
-0x8fbe:da2
-0x8fbf:chan1
-0x8fc0:gan1
-0x8fc1:qian1
-0x8fc2:yu1
-0x8fc3:yu1
-0x8fc4:qi4
-0x8fc5:xun4
-0x8fc6:yi3
-0x8fc7:guo4
-0x8fc8:mai4
-0x8fc9:qi2
-0x8fca:za1
-0x8fcb:wang4
-0x8fcd:zhun1
-0x8fce:ying2
-0x8fcf:ti4
-0x8fd0:yun4
-0x8fd1:jin4
-0x8fd2:hang2
-0x8fd3:ya4
-0x8fd4:fan3
-0x8fd5:wu4
-0x8fd6:da2
-0x8fd7:e2
-0x8fd8:huan2
-0x8fd9:zhe4
-0x8fdb:jin4
-0x8fdc:yuan3
-0x8fdd:wei2
-0x8fde:lian2
-0x8fdf:chi2
-0x8fe0:che4
-0x8fe1:ni4
-0x8fe2:tiao2
-0x8fe3:zhi4
-0x8fe4:yi3
-0x8fe5:jiong3
-0x8fe6:jia1
-0x8fe7:chen2
-0x8fe8:dai4
-0x8fe9:er3
-0x8fea:di2
-0x8feb:po4
-0x8fec:wang3
-0x8fed:die2
-0x8fee:ze2
-0x8fef:tao2
-0x8ff0:shu4
-0x8ff1:tuo2
-0x8ff3:jing4
-0x8ff4:hui2
-0x8ff5:tong2
-0x8ff6:you4
-0x8ff7:mi2
-0x8ff8:beng4
-0x8ff9:ji1
-0x8ffa:nai3
-0x8ffb:yi2
-0x8ffc:jie2
-0x8ffd:zhui1
-0x8ffe:lie4
-0x8fff:xun4
-0x9000:tui4
-0x9001:song4
-0x9002:shi4
-0x9003:tao2
-0x9004:pang2
-0x9005:hou4
-0x9006:ni4
-0x9007:dun4
-0x9008:jiong3
-0x9009:xuan3
-0x900a:xun4
-0x900b:bu1
-0x900c:you2
-0x900d:xiao1
-0x900e:qiu2
-0x900f:tou4
-0x9010:zhu2
-0x9011:qiu2
-0x9012:di4
-0x9013:di4
-0x9014:tu2
-0x9015:jing4
-0x9016:ti4
-0x9017:dou4
-0x9018:yi3
-0x9019:zhe4
-0x901a:tong1
-0x901b:guang4
-0x901c:wu4
-0x901d:shi4
-0x901e:cheng3
-0x901f:su4
-0x9020:zao4
-0x9021:qun1
-0x9022:feng2
-0x9023:lian2
-0x9024:suo4
-0x9025:hui2
-0x9026:li3
-0x9028:lai2
-0x9029:ben4
-0x902a:cuo4
-0x902b:jue2
-0x902c:beng4
-0x902d:huan4
-0x902e:dai4
-0x902f:lu4
-0x9030:you2
-0x9031:zhou1
-0x9032:jin4
-0x9033:yu4
-0x9034:chuo4
-0x9035:kui2
-0x9036:wei1
-0x9037:ti4
-0x9038:yi4
-0x9039:da2
-0x903a:yuan3
-0x903b:luo2
-0x903c:bi1
-0x903d:nuo4
-0x903e:yu2
-0x903f:dang4
-0x9040:sui2
-0x9041:dun4
-0x9042:sui4
-0x9043:yan3
-0x9044:chuan2
-0x9045:chi2
-0x9046:ti2
-0x9047:yu4
-0x9048:shi2
-0x9049:zhen1
-0x904a:you2
-0x904b:yun4
-0x904c:e4
-0x904d:bian4
-0x904e:guo4
-0x904f:e4
-0x9050:xia2
-0x9051:huang2
-0x9052:qiu2
-0x9053:dao4
-0x9054:da2
-0x9055:wei2
-0x9057:yi2
-0x9058:gou4
-0x9059:yao2
-0x905a:chu4
-0x905b:liu2
-0x905c:xun4
-0x905d:ta4
-0x905e:di4
-0x905f:chi2
-0x9060:yuan3
-0x9061:su4
-0x9062:ta4
-0x9063:qian3
-0x9065:yao2
-0x9066:guan4
-0x9067:zhang1
-0x9068:ao2
-0x9069:shi4
-0x906a:ce4
-0x906b:chi4
-0x906c:su4
-0x906d:zao1
-0x906e:zhe1
-0x906f:dun4
-0x9070:di4
-0x9071:lou2
-0x9072:chi2
-0x9073:cuo1
-0x9074:lin2
-0x9075:zun1
-0x9076:rao4
-0x9077:qian1
-0x9078:xuan3
-0x9079:yu4
-0x907a:yi2
-0x907b:wu4
-0x907c:liao2
-0x907d:ju4
-0x907e:shi4
-0x907f:bi4
-0x9080:yao1
-0x9081:mai4
-0x9082:xie4
-0x9083:sui4
-0x9084:huan2
-0x9085:zhan1
-0x9086:teng2
-0x9087:er3
-0x9088:miao3
-0x9089:bian1
-0x908a:bian1
-0x908b:la2
-0x908c:li2
-0x908d:yuan2
-0x908e:yao2
-0x908f:luo2
-0x9090:li3
-0x9091:yi4
-0x9092:ting2
-0x9093:deng4
-0x9094:qi3
-0x9095:yong1
-0x9096:shan1
-0x9097:han2
-0x9098:yu2
-0x9099:mang2
-0x909a:ru2
-0x909b:qiong2
-0x909d:kuang4
-0x909e:fu1
-0x909f:kang4
-0x90a0:bin1
-0x90a1:fang1
-0x90a2:xing2
-0x90a3:na4
-0x90a5:shen3
-0x90a6:bang1
-0x90a7:yuan2
-0x90a8:cun1
-0x90a9:huo3
-0x90aa:xie2
-0x90ab:bang1
-0x90ac:wu1
-0x90ad:ju4
-0x90ae:you2
-0x90af:han2
-0x90b0:tai2
-0x90b1:qiu1
-0x90b2:bi4
-0x90b3:pei2
-0x90b4:bing3
-0x90b5:shao4
-0x90b6:bei4
-0x90b7:wa3
-0x90b8:di3
-0x90b9:zou1
-0x90ba:ye4
-0x90bb:lin2
-0x90bc:kuang1
-0x90bd:gui1
-0x90be:zhu1
-0x90bf:shi1
-0x90c0:ku1
-0x90c1:yu4
-0x90c2:gai1
-0x90c3:he2
-0x90c4:xi4
-0x90c5:zhi4
-0x90c6:ji2
-0x90c7:xun2
-0x90c8:hou4
-0x90c9:xing2
-0x90ca:jiao1
-0x90cb:xi2
-0x90cc:gui1
-0x90cd:nuo2
-0x90ce:lang2
-0x90cf:jia2
-0x90d0:kuai4
-0x90d1:zheng4
-0x90d3:yun4
-0x90d4:yan2
-0x90d5:cheng2
-0x90d6:dou1
-0x90d7:chi1
-0x90d8:lv3
-0x90d9:fu3
-0x90da:wu2
-0x90db:fu2
-0x90dc:gao4
-0x90dd:hao3
-0x90de:lang2
-0x90df:jia2
-0x90e0:geng3
-0x90e1:jun4
-0x90e2:ying3
-0x90e3:bo2
-0x90e4:xi4
-0x90e5:bei4
-0x90e6:li4
-0x90e7:yun2
-0x90e8:bu4
-0x90e9:xiao2
-0x90ea:qi1
-0x90eb:pi2
-0x90ec:qing1
-0x90ed:guo1
-0x90ef:tan2
-0x90f0:zou1
-0x90f1:ping2
-0x90f2:lai2
-0x90f3:ni2
-0x90f4:chen1
-0x90f5:you2
-0x90f6:bu4
-0x90f7:xiang1
-0x90f8:dan1
-0x90f9:ju2
-0x90fa:yong1
-0x90fb:qiao1
-0x90fc:yi1
-0x90fd:du1
-0x90fe:yan3
-0x90ff:mei2
-0x9100:ruo4
-0x9101:bei4
-0x9102:e4
-0x9103:yu2
-0x9104:juan4
-0x9105:yu3
-0x9106:yun4
-0x9107:hou4
-0x9108:kui2
-0x9109:xiang1
-0x910a:xiang1
-0x910b:sou1
-0x910c:tang2
-0x910d:ming2
-0x910e:xi4
-0x910f:ru4
-0x9110:chu4
-0x9111:zi1
-0x9112:zou1
-0x9113:ju2
-0x9114:wu1
-0x9115:xiang1
-0x9116:yun2
-0x9117:hao4
-0x9118:yong1
-0x9119:bi3
-0x911a:mo4
-0x911b:chao2
-0x911c:fu1
-0x911d:liao3
-0x911e:yin2
-0x911f:zhuan1
-0x9120:hu4
-0x9121:qiao1
-0x9122:yan1
-0x9123:zhang1
-0x9124:man4
-0x9125:qiao1
-0x9126:xu3
-0x9127:deng4
-0x9128:bi4
-0x9129:xin2
-0x912a:bi4
-0x912b:ceng2
-0x912c:wei2
-0x912d:zheng4
-0x912e:mao4
-0x912f:shan4
-0x9130:lin2
-0x9131:po2
-0x9132:dan1
-0x9133:meng2
-0x9134:ye4
-0x9135:cao1
-0x9136:kuai4
-0x9137:feng1
-0x9138:meng2
-0x9139:zou1
-0x913a:kuang4
-0x913b:lian3
-0x913c:zan4
-0x913d:chan2
-0x913e:you1
-0x913f:qi2
-0x9140:yan1
-0x9141:chan2
-0x9142:zan4
-0x9143:ling2
-0x9144:huan1
-0x9145:xi1
-0x9146:feng1
-0x9147:zan4
-0x9148:li4
-0x9149:you3
-0x914a:ding3
-0x914b:qiu2
-0x914c:zhuo2
-0x914d:pei4
-0x914e:zhou4
-0x914f:yi2
-0x9150:hang4
-0x9151:yu3
-0x9152:jiu3
-0x9153:yan3
-0x9154:zui4
-0x9155:mao2
-0x9156:dan1
-0x9157:xu4
-0x9158:tou2
-0x9159:zhen1
-0x915a:fen1
-0x915d:yun4
-0x915e:tai4
-0x915f:tian1
-0x9160:qia3
-0x9161:tuo2
-0x9162:zuo4
-0x9163:han1
-0x9164:gu1
-0x9165:su1
-0x9166:po4
-0x9167:chou2
-0x9168:zai4
-0x9169:ming2
-0x916a:lao4
-0x916b:chuo4
-0x916c:chou2
-0x916d:you4
-0x916e:tong2
-0x916f:zhi3
-0x9170:xian1
-0x9171:jiang4
-0x9172:cheng2
-0x9173:yin4
-0x9174:tu2
-0x9175:jiao4
-0x9176:mei2
-0x9177:ku4
-0x9178:suan1
-0x9179:lei4
-0x917a:pu2
-0x917b:zui4
-0x917c:hai3
-0x917d:yan4
-0x917e:xi3
-0x917f:niang4
-0x9180:wei2
-0x9181:lu4
-0x9182:lan3
-0x9183:yan1
-0x9184:tao2
-0x9185:pei1
-0x9186:zhan3
-0x9187:chun2
-0x9188:tan2
-0x9189:zui4
-0x918a:chuo4
-0x918b:cu4
-0x918c:kun1
-0x918d:ti2
-0x918e:mian2
-0x918f:du1
-0x9190:hu2
-0x9191:xu3
-0x9192:xing3
-0x9193:tan3
-0x9194:jiu1
-0x9195:chun2
-0x9196:yun4
-0x9197:po4
-0x9198:ke4
-0x9199:sou1
-0x919a:mi2
-0x919b:quan2
-0x919c:chou3
-0x919d:cuo2
-0x919e:yun4
-0x919f:yong4
-0x91a0:ang4
-0x91a1:zha4
-0x91a2:hai3
-0x91a3:tang2
-0x91a4:jiang4
-0x91a5:piao3
-0x91a6:shan3
-0x91a7:yu4
-0x91a8:li2
-0x91a9:zao2
-0x91aa:lao2
-0x91ab:yi1
-0x91ac:jiang4
-0x91ad:bu2
-0x91ae:jiao4
-0x91af:xi1
-0x91b0:tan2
-0x91b1:po4
-0x91b2:nong2
-0x91b3:yi4
-0x91b4:li3
-0x91b5:ju4
-0x91b6:jiao4
-0x91b7:yi4
-0x91b8:niang4
-0x91b9:ru2
-0x91ba:xun1
-0x91bb:chou2
-0x91bc:yan4
-0x91bd:ling2
-0x91be:mi2
-0x91bf:mi2
-0x91c0:niang4
-0x91c1:xin4
-0x91c2:jiao4
-0x91c3:xi3
-0x91c4:mi2
-0x91c5:yan4
-0x91c6:bian4
-0x91c7:cai3
-0x91c8:shi4
-0x91c9:you4
-0x91ca:shi4
-0x91cb:shi4
-0x91cc:li3
-0x91cd:zhong4
-0x91ce:ye3
-0x91cf:liang4
-0x91d0:li2
-0x91d1:jin1
-0x91d3:ga2
-0x91d4:yi3
-0x91d5:liao3
-0x91d6:dao1
-0x91d7:zhao1
-0x91d8:ding1
-0x91d9:po4
-0x91da:qiu2
-0x91db:he2
-0x91dc:fu3
-0x91dd:zhen1
-0x91de:zhi2
-0x91df:ba1
-0x91e0:luan4
-0x91e1:fu3
-0x91e2:nai2
-0x91e3:diao4
-0x91e4:shan4
-0x91e5:qiao3
-0x91e6:kou4
-0x91e7:chuan4
-0x91e8:zi3
-0x91e9:fan2
-0x91ea:yu2
-0x91eb:hua2
-0x91ec:han4
-0x91ed:gang1
-0x91ee:qi2
-0x91ef:mang2
-0x91f0:ri4
-0x91f1:di4
-0x91f2:si4
-0x91f3:xi4
-0x91f4:yi4
-0x91f5:chai1
-0x91f6:shi1
-0x91f7:tu3
-0x91f8:xi4
-0x91f9:nv3
-0x91fa:qian1
-0x91fc:jian4
-0x91fd:pi1
-0x91fe:ye2
-0x91ff:yin2
-0x9200:ba3
-0x9201:fang1
-0x9202:chen2
-0x9203:xing2
-0x9204:dou3
-0x9205:yue4
-0x9206:yan2
-0x9207:fu1
-0x9208:pi1
-0x9209:na4
-0x920a:xin1
-0x920b:e2
-0x920c:jue2
-0x920d:dun4
-0x920e:gou1
-0x920f:yin3
-0x9210:qian2
-0x9211:ban3
-0x9212:ji2
-0x9213:ren2
-0x9214:chao1
-0x9215:niu3
-0x9216:fen1
-0x9217:yun3
-0x9218:ji3
-0x9219:qin2
-0x921a:pi2
-0x921b:guo1
-0x921c:hong2
-0x921d:yin2
-0x921e:jun1
-0x921f:shi1
-0x9220:yi4
-0x9221:zhong1
-0x9222:nie1
-0x9223:gai4
-0x9224:ri4
-0x9225:huo3
-0x9226:tai4
-0x9227:kang4
-0x922c:duo2
-0x922d:zi1
-0x922e:ni2
-0x922f:tu2
-0x9230:shi4
-0x9231:min2
-0x9232:gu1
-0x9233:ke1
-0x9234:ling2
-0x9235:bing4
-0x9236:yi2
-0x9237:gu3
-0x9238:bo2
-0x9239:pi1
-0x923a:yu4
-0x923b:si4
-0x923c:zuo2
-0x923d:bu4
-0x923e:you2
-0x923f:dian4
-0x9240:jia3
-0x9241:zhen1
-0x9242:shi3
-0x9243:shi4
-0x9244:tie3
-0x9245:ju4
-0x9246:chan1
-0x9247:shi1
-0x9248:shi1
-0x9249:xuan4
-0x924a:zhao1
-0x924b:bao4
-0x924c:he2
-0x924d:bi4
-0x924e:sheng1
-0x924f:chu2
-0x9250:shi2
-0x9251:bo2
-0x9252:zhu4
-0x9253:chi4
-0x9254:za1
-0x9255:po1
-0x9256:tong2
-0x9257:qian2
-0x9258:fu2
-0x9259:zhai3
-0x925a:liu3
-0x925b:qian1
-0x925c:fu2
-0x925d:li4
-0x925e:yue4
-0x925f:pi1
-0x9260:yang1
-0x9261:ban4
-0x9262:bo1
-0x9263:jie2
-0x9264:gou1
-0x9265:shu4
-0x9266:zheng1
-0x9267:mu3
-0x9268:ni3
-0x9269:nie1
-0x926a:di4
-0x926b:jia1
-0x926c:mu4
-0x926d:dan4
-0x926e:shen1
-0x926f:yi3
-0x9270:si1
-0x9271:kuang4
-0x9272:ka3
-0x9273:bei3
-0x9274:jian4
-0x9275:tong2
-0x9276:xing2
-0x9277:hong2
-0x9278:jiao3
-0x9279:chi3
-0x927a:er3
-0x927b:ge4
-0x927c:bing3
-0x927d:shi4
-0x927e:mou2
-0x927f:ha1
-0x9280:yin2
-0x9281:jun1
-0x9282:zhou1
-0x9283:chong4
-0x9284:shang4
-0x9285:tong2
-0x9286:mo4
-0x9287:lei4
-0x9288:ji1
-0x9289:yu4
-0x928a:xu4
-0x928b:ren2
-0x928c:zun4
-0x928d:zhi4
-0x928e:qiong1
-0x928f:shan4
-0x9290:chi4
-0x9291:xian3
-0x9292:xing2
-0x9293:quan2
-0x9294:pi1
-0x9295:tie3
-0x9296:zhu1
-0x9297:hou2
-0x9298:ming2
-0x9299:kua3
-0x929a:yao2
-0x929b:xian1
-0x929c:xian2
-0x929d:xiu1
-0x929e:jun1
-0x929f:cha1
-0x92a0:lao3
-0x92a1:ji2
-0x92a2:pi3
-0x92a3:ru2
-0x92a4:mi3
-0x92a5:yi1
-0x92a6:yin1
-0x92a7:guang1
-0x92a8:an3
-0x92a9:diu1
-0x92aa:you3
-0x92ab:se4
-0x92ac:kao4
-0x92ad:qian2
-0x92ae:luan2
-0x92b0:ai1
-0x92b1:diao4
-0x92b2:han4
-0x92b3:rui4
-0x92b4:shi4
-0x92b5:keng1
-0x92b6:qiu2
-0x92b7:xiao1
-0x92b8:zhe2
-0x92b9:xiu4
-0x92ba:zang4
-0x92bb:ti1
-0x92bc:cuo4
-0x92bd:gua1
-0x92be:gong3
-0x92bf:zhong1
-0x92c0:dou4
-0x92c1:lv3
-0x92c2:mei2
-0x92c3:lang2
-0x92c4:wan3
-0x92c5:xin1
-0x92c6:yun2
-0x92c7:bei4
-0x92c8:wu4
-0x92c9:su4
-0x92ca:yu4
-0x92cb:chan2
-0x92cc:ting3
-0x92cd:bo2
-0x92ce:han4
-0x92cf:jia2
-0x92d0:hong2
-0x92d1:cuan1
-0x92d2:feng1
-0x92d3:chan1
-0x92d4:wan3
-0x92d5:zhi4
-0x92d6:si1
-0x92d7:xuan1
-0x92d8:wu2
-0x92d9:wu2
-0x92da:tiao2
-0x92db:gong3
-0x92dc:zhuo2
-0x92dd:lve4
-0x92de:xing2
-0x92df:qian1
-0x92e0:shen4
-0x92e1:han2
-0x92e2:lve4
-0x92e3:xie2
-0x92e4:chu2
-0x92e5:zheng4
-0x92e6:ju1
-0x92e7:xian4
-0x92e8:tie3
-0x92e9:mang2
-0x92ea:pu1
-0x92eb:li2
-0x92ec:pan4
-0x92ed:rui4
-0x92ee:cheng2
-0x92ef:gao4
-0x92f0:li3
-0x92f1:te4
-0x92f3:zhu4
-0x92f5:tu1
-0x92f6:liu3
-0x92f7:zui4
-0x92f8:ju4
-0x92f9:chang3
-0x92fa:yuan1
-0x92fb:jian4
-0x92fc:gang1
-0x92fd:diao4
-0x92fe:tao2
-0x92ff:chang2
-0x9300:lun2
-0x9301:guo3
-0x9302:ling2
-0x9303:bei1
-0x9304:lu4
-0x9305:li2
-0x9306:qiang1
-0x9307:pou2
-0x9308:juan4
-0x9309:min2
-0x930a:zui4
-0x930b:peng2
-0x930c:an4
-0x930d:pi2
-0x930e:xian4
-0x930f:ya4
-0x9310:zhui1
-0x9311:lei4
-0x9312:a1
-0x9313:kong1
-0x9314:ta4
-0x9315:kun1
-0x9316:du3
-0x9317:wei4
-0x9318:chui2
-0x9319:zi1
-0x931a:zheng1
-0x931b:ben1
-0x931c:nie1
-0x931d:cong2
-0x931e:dui4
-0x931f:tan2
-0x9320:ding4
-0x9321:qi2
-0x9322:qian2
-0x9323:zhuo2
-0x9324:qi2
-0x9325:yu4
-0x9326:jin3
-0x9327:guan3
-0x9328:mao2
-0x9329:chang1
-0x932a:tian3
-0x932b:xi2
-0x932c:lian4
-0x932d:tao2
-0x932e:gu4
-0x932f:cuo4
-0x9330:shu4
-0x9331:zhen1
-0x9332:lu4
-0x9333:meng3
-0x9334:lu4
-0x9335:hua1
-0x9336:biao3
-0x9337:ga2
-0x9338:lai2
-0x9339:ken3
-0x933c:nai4
-0x933d:wan3
-0x933e:zan4
-0x9340:de2
-0x9341:xian1
-0x9343:huo1
-0x9344:liang4
-0x9346:men2
-0x9347:kai3
-0x9348:ying1
-0x9349:di1
-0x934a:lian4
-0x934b:guo1
-0x934c:xian3
-0x934d:du4
-0x934e:tu2
-0x934f:wei2
-0x9350:cong1
-0x9351:fu4
-0x9352:rou2
-0x9353:ji2
-0x9354:e4
-0x9355:rou2
-0x9356:chen3
-0x9357:ti2
-0x9358:zha2
-0x9359:hong4
-0x935a:yang2
-0x935b:duan4
-0x935c:xia1
-0x935d:yu2
-0x935e:keng1
-0x935f:xing1
-0x9360:huang2
-0x9361:wei3
-0x9362:fu4
-0x9363:zhao1
-0x9364:cha2
-0x9365:qie4
-0x9366:she2
-0x9367:hong1
-0x9368:kui2
-0x9369:tian3
-0x936a:mou2
-0x936b:qiao1
-0x936c:qiao1
-0x936d:hou2
-0x936e:tou1
-0x936f:cong1
-0x9370:huan2
-0x9371:ye4
-0x9372:min2
-0x9373:jian4
-0x9374:duan1
-0x9375:jian4
-0x9376:si1
-0x9377:kui1
-0x9378:hu2
-0x9379:xuan1
-0x937a:zhe3
-0x937b:jie2
-0x937c:zhen1
-0x937d:bian1
-0x937e:zhong1
-0x937f:zi1
-0x9380:xiu1
-0x9381:ye2
-0x9382:mei3
-0x9383:pai4
-0x9384:ai1
-0x9385:jie4
-0x9387:mei2
-0x9388:chuo1
-0x9389:ta4
-0x938a:bang4
-0x938b:xia2
-0x938c:lian2
-0x938d:suo3
-0x938e:xi4
-0x938f:liu2
-0x9390:zu2
-0x9391:ye4
-0x9392:nou4
-0x9393:weng1
-0x9394:rong2
-0x9395:tang2
-0x9396:suo3
-0x9397:qiang1
-0x9398:ge2
-0x9399:shuo4
-0x939a:chui2
-0x939b:bo2
-0x939c:pan2
-0x939d:sa4
-0x939e:bi4
-0x939f:sang3
-0x93a0:gang1
-0x93a1:zi1
-0x93a2:wu1
-0x93a3:ying4
-0x93a4:huang3
-0x93a5:tiao2
-0x93a6:liu2
-0x93a7:kai3
-0x93a8:sun3
-0x93a9:sha1
-0x93aa:sou1
-0x93ab:wan4
-0x93ac:hao4
-0x93ad:zhen4
-0x93ae:zhen4
-0x93af:luo3
-0x93b0:yi4
-0x93b1:yuan2
-0x93b2:tang3
-0x93b3:nie4
-0x93b4:xi2
-0x93b5:jia1
-0x93b6:ge1
-0x93b7:ma3
-0x93b8:juan1
-0x93bb:suo3
-0x93bf:na2
-0x93c0:lu3
-0x93c1:suo3
-0x93c2:ou1
-0x93c3:zu2
-0x93c4:tuan2
-0x93c5:xiu1
-0x93c6:guan4
-0x93c7:xuan4
-0x93c8:lian4
-0x93c9:shou4
-0x93ca:ao2
-0x93cb:man3
-0x93cc:mo4
-0x93cd:luo2
-0x93ce:bi4
-0x93cf:wei4
-0x93d0:liu2
-0x93d1:di2
-0x93d2:qiao1
-0x93d3:cong1
-0x93d4:yi2
-0x93d5:lu4
-0x93d6:ao2
-0x93d7:keng1
-0x93d8:qiang1
-0x93d9:cui1
-0x93da:qi4
-0x93db:chang2
-0x93dc:tang1
-0x93dd:man4
-0x93de:yong1
-0x93df:chan3
-0x93e0:feng1
-0x93e1:jing4
-0x93e2:biao1
-0x93e3:shu4
-0x93e4:lou4
-0x93e5:xiu4
-0x93e6:cong1
-0x93e7:long2
-0x93e8:zan4
-0x93e9:jian4
-0x93ea:cao2
-0x93eb:li2
-0x93ec:xia4
-0x93ed:xi1
-0x93ee:kang1
-0x93f0:beng4
-0x93f3:zheng1
-0x93f4:lu4
-0x93f5:hua2
-0x93f6:ji2
-0x93f7:pu2
-0x93f8:hui4
-0x93f9:qiang1
-0x93fa:po1
-0x93fb:lin2
-0x93fc:suo3
-0x93fd:xiu4
-0x93fe:san3
-0x93ff:cheng1
-0x9400:kui4
-0x9401:si1
-0x9402:liu4
-0x9403:nao2
-0x9404:heng2
-0x9405:pie3
-0x9406:sui4
-0x9407:fan2
-0x9408:qiao2
-0x9409:quan1
-0x940a:yang2
-0x940b:tang4
-0x940c:xiang4
-0x940d:jue2
-0x940e:jiao1
-0x940f:zun1
-0x9410:liao2
-0x9411:jie2
-0x9412:lao2
-0x9413:dui4
-0x9414:tan2
-0x9415:zan1
-0x9416:ji1
-0x9417:jian3
-0x9418:zhong1
-0x9419:deng4
-0x941a:ya4
-0x941b:ying4
-0x941c:dui4
-0x941d:jue2
-0x941e:nou4
-0x941f:ti4
-0x9420:pu3
-0x9421:tie3
-0x9424:ding3
-0x9425:shan4
-0x9426:kai1
-0x9427:jian3
-0x9428:fei4
-0x9429:sui4
-0x942a:lu3
-0x942b:juan1
-0x942c:hui4
-0x942d:yu4
-0x942e:lian2
-0x942f:zhuo2
-0x9430:qiao1
-0x9431:qian1
-0x9432:zhuo2
-0x9433:lei2
-0x9434:bi4
-0x9435:tie3
-0x9436:huan2
-0x9437:ye4
-0x9438:duo2
-0x9439:guo3
-0x943a:dang1
-0x943b:ju4
-0x943c:fen2
-0x943d:da2
-0x943e:bei4
-0x943f:yi4
-0x9440:ai4
-0x9441:zong1
-0x9442:xun4
-0x9443:diao4
-0x9444:zhu4
-0x9445:heng2
-0x9446:zhui4
-0x9447:ji1
-0x9448:nie1
-0x9449:ta4
-0x944a:huo4
-0x944b:qing4
-0x944c:bin1
-0x944d:ying1
-0x944e:kui4
-0x944f:ning2
-0x9450:xu1
-0x9451:jian4
-0x9452:jian4
-0x9454:cha3
-0x9455:zhi4
-0x9456:mie4
-0x9457:li2
-0x9458:lei2
-0x9459:ji1
-0x945a:zuan4
-0x945b:kuang4
-0x945c:shang4
-0x945d:peng2
-0x945e:la4
-0x945f:du2
-0x9460:shuo4
-0x9461:chuo4
-0x9462:lv4
-0x9463:biao1
-0x9464:bao4
-0x9465:lu3
-0x9468:long2
-0x9469:e4
-0x946a:lu2
-0x946b:xin1
-0x946c:jian4
-0x946d:lan2
-0x946e:bo2
-0x946f:jian1
-0x9470:yao4
-0x9471:chan2
-0x9472:xiang1
-0x9473:jian4
-0x9474:xi1
-0x9475:guan4
-0x9476:cang2
-0x9477:nie4
-0x9478:lei3
-0x9479:cuan4
-0x947a:qu2
-0x947b:pan4
-0x947c:luo2
-0x947d:zuan1
-0x947e:luan2
-0x947f:zao2
-0x9480:nie4
-0x9481:jue2
-0x9482:tang3
-0x9483:shu3
-0x9484:lan2
-0x9485:jin1
-0x9486:qiu2
-0x9487:yi3
-0x9488:zhen1
-0x9489:ding1
-0x948a:zhao1
-0x948b:po4
-0x948c:diao3
-0x948d:tu3
-0x948e:qian1
-0x948f:chuan4
-0x9490:shan4
-0x9491:ji2
-0x9492:fan2
-0x9493:diao4
-0x9494:men2
-0x9495:nv3
-0x9496:xi2
-0x9497:chai1
-0x9498:xing2
-0x9499:gai4
-0x949a:bu4
-0x949b:tai4
-0x949c:ju4
-0x949d:dun4
-0x949e:chao1
-0x949f:zhong1
-0x94a0:na4
-0x94a1:bei4
-0x94a2:gang1
-0x94a3:ban3
-0x94a4:qian2
-0x94a5:yao4
-0x94a6:qin1
-0x94a7:jun1
-0x94a8:wu4
-0x94a9:gou1
-0x94aa:kang4
-0x94ab:fang1
-0x94ac:huo2
-0x94ad:dou3
-0x94ae:niu3
-0x94af:ba3
-0x94b0:yu4
-0x94b1:qian2
-0x94b2:zheng1
-0x94b3:qian2
-0x94b4:gu1
-0x94b5:bo1
-0x94b6:e1
-0x94b7:po1
-0x94b8:bu4
-0x94b9:ba2
-0x94ba:yue4
-0x94bb:zuan4
-0x94bc:mu4
-0x94bd:dan4
-0x94be:jia3
-0x94bf:dian4
-0x94c0:you2
-0x94c1:tie3
-0x94c2:bo2
-0x94c3:ling2
-0x94c4:shuo4
-0x94c5:qian1
-0x94c6:liu3
-0x94c7:bao4
-0x94c8:shi4
-0x94c9:xuan4
-0x94ca:she2
-0x94cb:bi4
-0x94cc:ni3
-0x94cd:pi1
-0x94ce:duo2
-0x94cf:xing2
-0x94d0:kao4
-0x94d1:lao3
-0x94d2:er4
-0x94d3:mang2
-0x94d4:ya4
-0x94d5:you3
-0x94d6:cheng2
-0x94d7:jia2
-0x94d8:ye2
-0x94d9:nao2
-0x94da:zhi4
-0x94db:dang1
-0x94dc:tong2
-0x94dd:lv3
-0x94de:diao4
-0x94df:yin1
-0x94e0:kai3
-0x94e1:zha2
-0x94e2:zhu1
-0x94e3:xian3
-0x94e4:ting3
-0x94e5:diu1
-0x94e6:xian1
-0x94e7:hua2
-0x94e8:quan2
-0x94e9:sha1
-0x94ea:jia2
-0x94eb:yao2
-0x94ec:ge4
-0x94ed:ming2
-0x94ee:zheng1
-0x94ef:se4
-0x94f0:jiao3
-0x94f1:yi3
-0x94f2:chan3
-0x94f3:chong4
-0x94f4:tang4
-0x94f5:an1
-0x94f6:yin2
-0x94f7:ru3
-0x94f8:zhu4
-0x94f9:lao2
-0x94fa:pu1
-0x94fb:wu2
-0x94fc:lai2
-0x94fd:te4
-0x94fe:lian4
-0x94ff:keng1
-0x9500:xiao1
-0x9501:suo3
-0x9502:li3
-0x9503:zheng4
-0x9504:chu2
-0x9505:guo1
-0x9506:gao4
-0x9507:tie3
-0x9508:xiu4
-0x9509:cuo4
-0x950a:lve4
-0x950b:feng1
-0x950c:xin1
-0x950d:liu3
-0x950e:kai1
-0x950f:jian3
-0x9510:rui4
-0x9511:ti4
-0x9512:lang2
-0x9513:qian1
-0x9514:ju2
-0x9515:a1
-0x9516:qiang1
-0x9517:duo3
-0x9518:tian3
-0x9519:cuo4
-0x951a:mao2
-0x951b:ben1
-0x951c:qi2
-0x951d:de2
-0x951e:kua3
-0x951f:kun1
-0x9520:chang1
-0x9521:xi2
-0x9522:gu4
-0x9523:luo2
-0x9524:chui2
-0x9525:zhui1
-0x9526:jin3
-0x9527:zhi4
-0x9528:xian1
-0x9529:juan4
-0x952a:huo1
-0x952b:pou2
-0x952c:tan2
-0x952d:ding4
-0x952e:jian4
-0x952f:ju4
-0x9530:meng3
-0x9531:zi1
-0x9532:qie4
-0x9533:ying1
-0x9534:kai3
-0x9535:qiang1
-0x9536:song1
-0x9537:e4
-0x9538:cha2
-0x9539:qiao1
-0x953a:zhong1
-0x953b:duan4
-0x953c:sou1
-0x953d:huang2
-0x953e:huan2
-0x953f:ai1
-0x9540:du4
-0x9541:mei3
-0x9542:lou4
-0x9543:zi1
-0x9544:fei4
-0x9545:mei2
-0x9546:mo4
-0x9547:zhen4
-0x9548:bo2
-0x9549:ge2
-0x954a:nie4
-0x954b:tang3
-0x954c:juan1
-0x954d:nie4
-0x954e:na2
-0x954f:liu2
-0x9550:hao4
-0x9551:bang4
-0x9552:yi4
-0x9553:jia1
-0x9554:bin1
-0x9555:rong2
-0x9556:biao1
-0x9557:tang1
-0x9558:man4
-0x9559:luo2
-0x955a:beng4
-0x955b:yong1
-0x955c:jing4
-0x955d:di2
-0x955e:zu2
-0x955f:xuan4
-0x9560:liu2
-0x9561:tan2
-0x9562:jue2
-0x9563:liao2
-0x9564:pu2
-0x9565:lu3
-0x9566:dui4
-0x9567:lan4
-0x9568:pu3
-0x9569:cuan4
-0x956a:qiang1
-0x956b:deng1
-0x956c:huo4
-0x956d:lei2
-0x956e:huan2
-0x956f:zhuo2
-0x9570:lian2
-0x9571:yi4
-0x9572:cha3
-0x9573:biao1
-0x9574:la4
-0x9575:chan2
-0x9576:xiang1
-0x9577:chang2
-0x9578:chang2
-0x9579:jiu3
-0x957a:ao3
-0x957b:die2
-0x957c:qu1
-0x957d:liao3
-0x957e:mi2
-0x957f:chang2
-0x9580:men2
-0x9581:ma4
-0x9582:shuan1
-0x9583:shan3
-0x9584:huo4
-0x9585:men2
-0x9586:yan2
-0x9587:bi4
-0x9588:han4
-0x9589:bi4
-0x958b:kai1
-0x958c:kang4
-0x958d:beng1
-0x958e:hong2
-0x958f:run4
-0x9590:san4
-0x9591:xian2
-0x9592:xian2
-0x9593:jian1
-0x9594:min3
-0x9595:xia1
-0x9597:dou4
-0x9598:zha2
-0x9599:nao4
-0x959b:peng1
-0x959c:xia3
-0x959d:ling2
-0x959e:bian4
-0x959f:bi4
-0x95a0:run4
-0x95a1:he2
-0x95a2:guan1
-0x95a3:ge2
-0x95a4:ge2
-0x95a5:fa2
-0x95a6:chu4
-0x95a7:hong4
-0x95a8:gui1
-0x95a9:min3
-0x95ab:kun3
-0x95ac:lang3
-0x95ad:lv2
-0x95ae:ting2
-0x95af:sha4
-0x95b0:ju2
-0x95b1:yue4
-0x95b2:yue4
-0x95b3:chan3
-0x95b4:qu4
-0x95b5:lin4
-0x95b6:chang1
-0x95b7:shai4
-0x95b8:kun3
-0x95b9:yan1
-0x95ba:wen2
-0x95bb:yan2
-0x95bc:e4
-0x95bd:hun1
-0x95be:yu4
-0x95bf:wen2
-0x95c0:xiang4
-0x95c1:bao1
-0x95c2:xiang4
-0x95c3:qu4
-0x95c4:yao3
-0x95c5:wen2
-0x95c6:ban3
-0x95c7:an4
-0x95c8:wei2
-0x95c9:yin1
-0x95ca:kuo4
-0x95cb:que4
-0x95cc:lan2
-0x95cd:du1
-0x95d0:tian2
-0x95d1:nie4
-0x95d2:ta4
-0x95d3:kai3
-0x95d4:he2
-0x95d5:que4
-0x95d6:chuang3
-0x95d7:guan1
-0x95d8:dou4
-0x95d9:qi3
-0x95da:kui1
-0x95db:tang2
-0x95dc:guan1
-0x95dd:piao2
-0x95de:kan4
-0x95df:xi4
-0x95e0:hui4
-0x95e1:chan3
-0x95e2:pi4
-0x95e3:dang4
-0x95e4:huan2
-0x95e5:ta4
-0x95e6:wen2
-0x95e8:men2
-0x95e9:shuan1
-0x95ea:shan3
-0x95eb:yan4
-0x95ec:han4
-0x95ed:bi4
-0x95ee:wen4
-0x95ef:chuang3
-0x95f0:run4
-0x95f1:wei2
-0x95f2:xian2
-0x95f3:hong2
-0x95f4:jian1
-0x95f5:min3
-0x95f6:kang4
-0x95f7:men4
-0x95f8:zha2
-0x95f9:nao4
-0x95fa:gui1
-0x95fb:wen2
-0x95fc:ta4
-0x95fd:min3
-0x95fe:lv2
-0x95ff:kai3
-0x9600:fa2
-0x9601:ge2
-0x9602:he2
-0x9603:kun3
-0x9604:jiu1
-0x9605:yue4
-0x9606:lang3
-0x9607:du1
-0x9608:yu4
-0x9609:yan1
-0x960a:chang1
-0x960b:xi4
-0x960c:wen2
-0x960d:hun1
-0x960e:yan2
-0x960f:e4
-0x9610:chan3
-0x9611:lan2
-0x9612:qu4
-0x9613:hui4
-0x9614:kuo4
-0x9615:que4
-0x9616:ge2
-0x9617:tian2
-0x9618:ta4
-0x9619:que4
-0x961a:kan4
-0x961b:huan2
-0x961c:fu4
-0x961d:fu4
-0x961e:le4
-0x961f:dui4
-0x9620:xin4
-0x9621:qian1
-0x9622:wu4
-0x9623:yi4
-0x9624:tuo2
-0x9625:yin1
-0x9626:yang2
-0x9627:dou3
-0x9628:e4
-0x9629:sheng1
-0x962a:ban3
-0x962b:pei2
-0x962c:keng1
-0x962d:yun3
-0x962e:ruan3
-0x962f:zhi3
-0x9630:pi2
-0x9631:jing3
-0x9632:fang2
-0x9633:yang2
-0x9634:yin1
-0x9635:zhen4
-0x9636:jie1
-0x9637:cheng1
-0x9638:e4
-0x9639:qu1
-0x963a:di3
-0x963b:zu3
-0x963c:zuo4
-0x963d:dian4
-0x963e:ling3
-0x963f:a1
-0x9640:tuo2
-0x9641:tuo2
-0x9642:bei1
-0x9643:bing3
-0x9644:fu4
-0x9645:ji4
-0x9646:lu4
-0x9647:long3
-0x9648:chen2
-0x9649:xing2
-0x964a:duo4
-0x964b:lou4
-0x964c:mo4
-0x964d:jiang4
-0x964e:shu1
-0x964f:duo4
-0x9650:xian4
-0x9651:er2
-0x9652:gui3
-0x9653:yu1
-0x9654:gai1
-0x9655:shan3
-0x9656:xun4
-0x9657:qiao4
-0x9658:xing2
-0x9659:chun2
-0x965a:fu4
-0x965b:bi4
-0x965c:xia2
-0x965d:shan3
-0x965e:sheng1
-0x965f:zhi4
-0x9660:pu1
-0x9661:dou3
-0x9662:yuan4
-0x9663:zhen4
-0x9664:chu2
-0x9665:xian4
-0x9667:nie4
-0x9668:yun3
-0x9669:xian3
-0x966a:pei2
-0x966b:pei2
-0x966c:zou1
-0x966d:yi1
-0x966e:dui3
-0x966f:lun2
-0x9670:yin1
-0x9671:ju1
-0x9672:chui2
-0x9673:chen2
-0x9674:pi2
-0x9675:ling2
-0x9676:tao2
-0x9677:xian4
-0x9678:lu4
-0x967a:xian3
-0x967b:yin1
-0x967c:zhu3
-0x967d:yang2
-0x967e:reng2
-0x967f:shan3
-0x9680:chong2
-0x9681:yan4
-0x9682:yin1
-0x9683:yu2
-0x9684:di1
-0x9685:yu2
-0x9686:long2
-0x9687:wei1
-0x9688:wei1
-0x9689:nie4
-0x968a:dui4
-0x968b:sui2
-0x968c:an3
-0x968d:huang2
-0x968e:jie1
-0x968f:sui2
-0x9690:yin3
-0x9691:gai1
-0x9692:yan3
-0x9693:hui1
-0x9694:ge2
-0x9695:yun3
-0x9696:wu4
-0x9697:wei3
-0x9698:ai4
-0x9699:xi4
-0x969a:tang2
-0x969b:ji4
-0x969c:zhang4
-0x969d:dao3
-0x969e:ao2
-0x969f:xi4
-0x96a0:yin3
-0x96a2:rao4
-0x96a3:lin2
-0x96a4:tui2
-0x96a5:deng4
-0x96a6:pi3
-0x96a7:sui4
-0x96a8:sui2
-0x96a9:yu4
-0x96aa:xian3
-0x96ab:fen1
-0x96ac:ni3
-0x96ad:er2
-0x96ae:ji1
-0x96af:dao3
-0x96b0:xi2
-0x96b1:yin3
-0x96b2:e2
-0x96b3:hui1
-0x96b4:long3
-0x96b5:xi1
-0x96b6:li4
-0x96b7:li4
-0x96b8:li4
-0x96b9:zhui1
-0x96ba:he4
-0x96bb:zhi1
-0x96bc:zhun3
-0x96bd:jun4
-0x96be:nan2
-0x96bf:yi4
-0x96c0:que4
-0x96c1:yan4
-0x96c2:qin2
-0x96c3:ya3
-0x96c4:xiong2
-0x96c5:ya3
-0x96c6:ji2
-0x96c7:gu4
-0x96c8:huan2
-0x96c9:zhi4
-0x96ca:gou4
-0x96cb:jun4
-0x96cc:ci2
-0x96cd:yong1
-0x96ce:ju1
-0x96cf:chu2
-0x96d0:hu1
-0x96d1:za2
-0x96d2:luo4
-0x96d3:yu2
-0x96d4:chou2
-0x96d5:diao1
-0x96d6:sui1
-0x96d7:han4
-0x96d8:huo4
-0x96d9:shuang1
-0x96da:guan4
-0x96db:chu2
-0x96dc:za2
-0x96dd:yong1
-0x96de:ji1
-0x96df:xi1
-0x96e0:chou2
-0x96e1:liu4
-0x96e2:li2
-0x96e3:nan2
-0x96e4:xue2
-0x96e5:za2
-0x96e6:ji2
-0x96e7:ji2
-0x96e8:yu3
-0x96e9:yu2
-0x96ea:xue3
-0x96eb:na3
-0x96ec:fou3
-0x96ed:se4
-0x96ee:mu4
-0x96ef:wen2
-0x96f0:fen1
-0x96f1:pang2
-0x96f2:yun2
-0x96f3:li4
-0x96f4:li4
-0x96f5:ang3
-0x96f6:ling2
-0x96f7:lei2
-0x96f8:an2
-0x96f9:bao2
-0x96fa:meng2
-0x96fb:dian4
-0x96fc:dang4
-0x96fd:xing2
-0x96fe:wu4
-0x96ff:zhao4
-0x9700:xu1
-0x9701:ji4
-0x9702:mu4
-0x9703:chen2
-0x9704:xiao1
-0x9705:zha2
-0x9706:ting2
-0x9707:zhen4
-0x9708:pei4
-0x9709:mei2
-0x970a:ling2
-0x970b:qi1
-0x970c:chou1
-0x970d:huo4
-0x970e:sha4
-0x970f:fei1
-0x9710:weng1
-0x9711:zhan1
-0x9712:yin1
-0x9713:ni2
-0x9714:zhu4
-0x9715:tun2
-0x9716:lin2
-0x9718:dong4
-0x9719:ying1
-0x971a:wu4
-0x971b:ling2
-0x971c:shuang1
-0x971d:ling2
-0x971e:xia2
-0x971f:hong2
-0x9720:yin1
-0x9721:mo4
-0x9722:mai4
-0x9723:yun3
-0x9724:liu4
-0x9725:meng4
-0x9726:bin1
-0x9727:wu4
-0x9728:wei4
-0x9729:huo4
-0x972a:yin2
-0x972b:xi2
-0x972c:yi4
-0x972d:ai3
-0x972e:dan4
-0x972f:deng4
-0x9730:xian4
-0x9731:yu4
-0x9732:lu4
-0x9733:long2
-0x9734:dai4
-0x9735:ji2
-0x9736:pang2
-0x9737:yang2
-0x9738:ba4
-0x9739:pi1
-0x973a:wei2
-0x973c:xi3
-0x973d:ji4
-0x973e:mai2
-0x973f:meng4
-0x9740:meng2
-0x9741:lei2
-0x9742:li4
-0x9743:huo4
-0x9744:ai3
-0x9745:fei4
-0x9746:dai4
-0x9747:long2
-0x9748:ling2
-0x9749:ai4
-0x974a:feng1
-0x974b:li4
-0x974c:bao3
-0x974e:he4
-0x974f:he4
-0x9750:bing4
-0x9751:qing1
-0x9752:qing1
-0x9753:jing4
-0x9754:tian1
-0x9755:zhen1
-0x9756:jing4
-0x9757:cheng4
-0x9758:qing4
-0x9759:jing4
-0x975a:jing4
-0x975b:dian4
-0x975c:jing4
-0x975d:tian1
-0x975e:fei1
-0x975f:fei1
-0x9760:kao4
-0x9761:mi3
-0x9762:mian4
-0x9763:mian4
-0x9764:pao4
-0x9765:ye4
-0x9766:tian3
-0x9767:hui4
-0x9768:ye4
-0x9769:ge2
-0x976a:ding1
-0x976b:cha1
-0x976c:jian1
-0x976d:ren4
-0x976e:di2
-0x976f:du4
-0x9770:wu4
-0x9771:ren4
-0x9772:qin2
-0x9773:jin4
-0x9774:xue1
-0x9775:niu3
-0x9776:ba3
-0x9777:yin3
-0x9778:sa3
-0x9779:na4
-0x977a:mo4
-0x977b:zu3
-0x977c:da2
-0x977d:ban4
-0x977e:yi4
-0x977f:yao4
-0x9780:tao2
-0x9781:tuo2
-0x9782:jia2
-0x9783:hong2
-0x9784:pao2
-0x9785:yang3
-0x9787:yin1
-0x9788:jia2
-0x9789:tao2
-0x978a:ji2
-0x978b:xie2
-0x978c:an1
-0x978d:an1
-0x978e:hen2
-0x978f:gong3
-0x9791:da2
-0x9792:qiao1
-0x9793:ting1
-0x9794:wan3
-0x9795:ying4
-0x9796:sui1
-0x9797:tiao2
-0x9798:qiao4
-0x9799:xuan4
-0x979a:kong4
-0x979b:beng3
-0x979c:ta4
-0x979d:zhang3
-0x979e:bing3
-0x979f:kuo4
-0x97a0:ju1
-0x97a1:la5
-0x97a2:xie4
-0x97a3:rou2
-0x97a4:bang1
-0x97a5:yi4
-0x97a6:qiu1
-0x97a7:qiu1
-0x97a8:he2
-0x97a9:xiao4
-0x97aa:mu4
-0x97ab:ju2
-0x97ac:jian1
-0x97ad:bian1
-0x97ae:di1
-0x97af:jian1
-0x97b1:tao1
-0x97b2:gou1
-0x97b3:ta4
-0x97b4:bei4
-0x97b5:xie2
-0x97b6:pan2
-0x97b7:ge2
-0x97b8:bi4
-0x97b9:kuo4
-0x97bb:lou2
-0x97bc:gui4
-0x97bd:qiao2
-0x97be:xue1
-0x97bf:ji1
-0x97c0:jian1
-0x97c1:jiang1
-0x97c2:chan4
-0x97c3:da2
-0x97c4:huo4
-0x97c5:xian3
-0x97c6:qian1
-0x97c7:du2
-0x97c8:wa4
-0x97c9:jian1
-0x97ca:lan2
-0x97cb:wei2
-0x97cc:ren4
-0x97cd:fu2
-0x97ce:mei4
-0x97cf:juan4
-0x97d0:ge2
-0x97d1:wei3
-0x97d2:qiao4
-0x97d3:han2
-0x97d4:chang4
-0x97d6:rou2
-0x97d7:xun4
-0x97d8:she4
-0x97d9:wei3
-0x97da:ge2
-0x97db:bei4
-0x97dc:tao1
-0x97dd:gou1
-0x97de:yun4
-0x97e0:bi4
-0x97e1:wei3
-0x97e2:hui4
-0x97e3:du2
-0x97e4:wa4
-0x97e5:du2
-0x97e6:wei2
-0x97e7:ren4
-0x97e8:fu2
-0x97e9:han2
-0x97ea:wei3
-0x97eb:yun4
-0x97ec:tao1
-0x97ed:jiu3
-0x97ee:jiu3
-0x97ef:xian1
-0x97f0:xie4
-0x97f1:xian1
-0x97f2:ji1
-0x97f3:yin1
-0x97f4:za2
-0x97f5:yun4
-0x97f6:shao2
-0x97f7:le4
-0x97f8:peng2
-0x97f9:heng2
-0x97fa:ying1
-0x97fb:yun4
-0x97fc:peng2
-0x97fd:yin1
-0x97fe:yin1
-0x97ff:xiang3
-0x9800:hu4
-0x9801:ye4
-0x9802:ding3
-0x9803:qing3
-0x9804:kui2
-0x9805:xiang4
-0x9806:shun4
-0x9807:han1
-0x9808:xu1
-0x9809:yi2
-0x980a:xu4
-0x980b:gu4
-0x980c:song4
-0x980d:kui3
-0x980e:qi2
-0x980f:hang2
-0x9810:yu4
-0x9811:wan2
-0x9812:ban1
-0x9813:dun4
-0x9814:di2
-0x9815:dan1
-0x9816:pan4
-0x9817:po1
-0x9818:ling3
-0x9819:ce4
-0x981a:jing3
-0x981b:lei3
-0x981c:he2
-0x981d:qiao1
-0x981e:e4
-0x981f:e2
-0x9820:wei3
-0x9821:jie2
-0x9822:gua1
-0x9823:shen3
-0x9824:yi2
-0x9825:shen3
-0x9826:hai2
-0x9827:dui1
-0x9828:pian1
-0x9829:ping1
-0x982a:lei4
-0x982b:fu3
-0x982c:jia2
-0x982d:tou2
-0x982e:hui4
-0x982f:kui2
-0x9830:jia2
-0x9831:le4
-0x9832:ting3
-0x9833:cheng1
-0x9834:ying3
-0x9835:jun1
-0x9836:hu2
-0x9837:han4
-0x9838:jing3
-0x9839:tui2
-0x983a:tui2
-0x983b:pin2
-0x983c:lai4
-0x983d:tui2
-0x983e:zi1
-0x983f:zi1
-0x9840:chui2
-0x9841:ding4
-0x9842:lai4
-0x9843:yan2
-0x9844:han4
-0x9845:jian1
-0x9846:ke1
-0x9847:cui4
-0x9848:jiong3
-0x9849:qin1
-0x984a:yi2
-0x984b:sai1
-0x984c:ti2
-0x984d:e2
-0x984e:e4
-0x984f:yan2
-0x9850:hun2
-0x9851:kan3
-0x9852:yong2
-0x9853:zhuan1
-0x9854:yan2
-0x9855:xian3
-0x9856:xin4
-0x9857:yi3
-0x9858:yuan4
-0x9859:sang3
-0x985a:dian1
-0x985b:dian1
-0x985c:jiang3
-0x985d:ku1
-0x985e:lei4
-0x985f:liao2
-0x9860:piao4
-0x9861:yi4
-0x9862:man2
-0x9863:qi1
-0x9864:rao4
-0x9865:hao4
-0x9866:qiao2
-0x9867:gu4
-0x9868:xun4
-0x9869:qian1
-0x986a:hui1
-0x986b:zhan4
-0x986c:ru2
-0x986d:hong1
-0x986e:bin1
-0x986f:xian3
-0x9870:pin2
-0x9871:lu2
-0x9872:lan3
-0x9873:nie4
-0x9874:quan2
-0x9875:ye4
-0x9876:ding3
-0x9877:qing3
-0x9878:han1
-0x9879:xiang4
-0x987a:shun4
-0x987b:xu1
-0x987c:xu4
-0x987d:wan2
-0x987e:gu4
-0x987f:dun4
-0x9880:qi2
-0x9881:ban1
-0x9882:song4
-0x9883:hang2
-0x9884:yu4
-0x9885:lu2
-0x9886:ling3
-0x9887:po3
-0x9888:jing3
-0x9889:jie2
-0x988a:jia2
-0x988b:tian5
-0x988c:han4
-0x988d:ying3
-0x988e:jiong3
-0x988f:hai2
-0x9890:yi2
-0x9891:pin2
-0x9892:hui4
-0x9893:tui2
-0x9894:han4
-0x9895:ying3
-0x9896:ying3
-0x9897:ke1
-0x9898:ti2
-0x9899:yong2
-0x989a:e4
-0x989b:zhuan1
-0x989c:yan2
-0x989d:e2
-0x989e:nie4
-0x989f:man2
-0x98a0:dian1
-0x98a1:sang3
-0x98a2:hao4
-0x98a3:lei4
-0x98a4:zhan4
-0x98a5:ru2
-0x98a6:pin2
-0x98a7:quan2
-0x98a8:feng1
-0x98a9:biao1
-0x98ab:fu2
-0x98ac:xia1
-0x98ad:zhan3
-0x98ae:biao1
-0x98af:sa4
-0x98b0:ba2
-0x98b1:tai2
-0x98b2:lie4
-0x98b3:gua1
-0x98b4:xuan4
-0x98b5:shao4
-0x98b6:ju4
-0x98b7:bi1
-0x98b8:si1
-0x98b9:wei3
-0x98ba:yang2
-0x98bb:yao2
-0x98bc:sou1
-0x98bd:kai3
-0x98be:sao1
-0x98bf:fan2
-0x98c0:liu2
-0x98c1:xi2
-0x98c2:liao2
-0x98c3:piao1
-0x98c4:piao1
-0x98c5:liu2
-0x98c6:biao1
-0x98c7:biao1
-0x98c8:biao3
-0x98c9:liao2
-0x98cb:se4
-0x98cc:feng1
-0x98cd:biao1
-0x98ce:feng1
-0x98cf:yang2
-0x98d0:zhan3
-0x98d1:biao1
-0x98d2:sa4
-0x98d3:ju4
-0x98d4:si1
-0x98d5:sou1
-0x98d6:yao2
-0x98d7:liu2
-0x98d8:piao1
-0x98d9:biao1
-0x98da:biao1
-0x98db:fei1
-0x98dc:fan1
-0x98dd:fei1
-0x98de:fei1
-0x98df:shi2
-0x98e0:shi2
-0x98e1:can1
-0x98e2:ji1
-0x98e3:ding4
-0x98e4:si4
-0x98e5:tuo1
-0x98e6:zhan1
-0x98e7:sun1
-0x98e8:xiang3
-0x98e9:tun2
-0x98ea:ren4
-0x98eb:yu4
-0x98ec:juan4
-0x98ed:chi4
-0x98ee:yin3
-0x98ef:fan4
-0x98f0:fan4
-0x98f1:sun1
-0x98f2:yin3
-0x98f3:zhu4
-0x98f4:yi2
-0x98f5:zhai3
-0x98f6:bi4
-0x98f7:jie3
-0x98f8:tao1
-0x98f9:liu3
-0x98fa:ci2
-0x98fb:tie4
-0x98fc:si4
-0x98fd:bao3
-0x98fe:shi4
-0x98ff:duo4
-0x9900:hai4
-0x9901:ren4
-0x9902:tian3
-0x9903:jiao3
-0x9904:jia2
-0x9905:bing3
-0x9906:yao2
-0x9907:tong2
-0x9908:ci2
-0x9909:xiang3
-0x990a:yang3
-0x990b:yang3
-0x990c:er3
-0x990d:yan4
-0x990e:le5
-0x990f:yi1
-0x9910:can1
-0x9911:bo1
-0x9912:nei3
-0x9913:e4
-0x9914:bu1
-0x9915:jun4
-0x9916:dou4
-0x9917:su4
-0x9918:yu2
-0x9919:shi4
-0x991a:yao2
-0x991b:hun2
-0x991c:guo3
-0x991d:shi4
-0x991e:jian4
-0x991f:zhui4
-0x9920:bing3
-0x9921:xian4
-0x9922:bu4
-0x9923:ye4
-0x9924:tan2
-0x9925:fei3
-0x9926:zhang1
-0x9927:wei4
-0x9928:guan3
-0x9929:e4
-0x992a:nuan3
-0x992b:hun2
-0x992c:hu2
-0x992d:huang2
-0x992e:tie4
-0x992f:hui4
-0x9930:jian1
-0x9931:hou2
-0x9932:he2
-0x9933:xing2
-0x9934:fen1
-0x9935:wei4
-0x9936:gu3
-0x9937:cha1
-0x9938:song4
-0x9939:tang2
-0x993a:bo2
-0x993b:gao1
-0x993c:xi4
-0x993d:kui4
-0x993e:liu4
-0x993f:sou1
-0x9940:tao2
-0x9941:ye4
-0x9942:yun2
-0x9943:mo2
-0x9944:tang2
-0x9945:man2
-0x9946:bi4
-0x9947:yu4
-0x9948:xiu1
-0x9949:jin3
-0x994a:san3
-0x994b:kui4
-0x994c:zhuan4
-0x994d:shan4
-0x994e:chi4
-0x994f:dan4
-0x9950:yi4
-0x9951:ji1
-0x9952:rao2
-0x9953:cheng1
-0x9954:yong1
-0x9955:tao1
-0x9956:hui4
-0x9957:xiang3
-0x9958:zhan1
-0x9959:fen1
-0x995a:hai4
-0x995b:meng2
-0x995c:yan4
-0x995d:mo2
-0x995e:chan2
-0x995f:xiang3
-0x9960:luo2
-0x9961:zuan4
-0x9962:nang3
-0x9963:shi2
-0x9964:ding4
-0x9965:ji1
-0x9966:tuo1
-0x9967:xing2
-0x9968:tun2
-0x9969:xi4
-0x996a:ren4
-0x996b:yu4
-0x996c:chi4
-0x996d:fan4
-0x996e:yin3
-0x996f:jian4
-0x9970:shi4
-0x9971:bao3
-0x9972:si4
-0x9973:duo4
-0x9974:yi2
-0x9975:er3
-0x9976:rao2
-0x9977:xiang3
-0x9978:jia2
-0x9979:le5
-0x997a:jiao3
-0x997b:yi1
-0x997c:bing3
-0x997d:bo2
-0x997e:dou4
-0x997f:e4
-0x9980:yu2
-0x9981:nei3
-0x9982:jun4
-0x9983:guo3
-0x9984:hun2
-0x9985:xian4
-0x9986:guan3
-0x9987:cha1
-0x9988:kui4
-0x9989:gu3
-0x998a:sou1
-0x998b:chan2
-0x998c:ye4
-0x998d:mo2
-0x998e:bo2
-0x998f:liu4
-0x9990:xiu1
-0x9991:jin3
-0x9992:man2
-0x9993:san3
-0x9994:zhuan4
-0x9995:nang3
-0x9996:shou3
-0x9997:kui2
-0x9998:guo2
-0x9999:xiang1
-0x999a:fen2
-0x999b:ba2
-0x999c:ni3
-0x999d:bi4
-0x999e:bo2
-0x999f:tu2
-0x99a0:han1
-0x99a1:fei1
-0x99a2:jian1
-0x99a3:an1
-0x99a4:ai3
-0x99a5:fu4
-0x99a6:xian1
-0x99a7:wen1
-0x99a8:xin1
-0x99a9:fen2
-0x99aa:bin1
-0x99ab:xing1
-0x99ac:ma3
-0x99ad:yu4
-0x99ae:feng2
-0x99af:han4
-0x99b0:di4
-0x99b1:tuo2
-0x99b2:tuo1
-0x99b3:chi2
-0x99b4:xun2
-0x99b5:zhu4
-0x99b6:zhi1
-0x99b7:pei4
-0x99b8:xin4
-0x99b9:ri4
-0x99ba:sa4
-0x99bb:yin3
-0x99bc:wen2
-0x99bd:zhi2
-0x99be:dan4
-0x99bf:lv2
-0x99c0:you2
-0x99c1:bo2
-0x99c2:bao3
-0x99c3:kuai4
-0x99c4:tuo2
-0x99c5:yi4
-0x99c6:qu1
-0x99c8:qu1
-0x99c9:jiong1
-0x99ca:bo3
-0x99cb:zhao1
-0x99cc:yuan1
-0x99cd:peng1
-0x99ce:zhou4
-0x99cf:ju4
-0x99d0:zhu4
-0x99d1:nu2
-0x99d2:ju1
-0x99d3:pi1
-0x99d4:zang3
-0x99d5:jia4
-0x99d6:ling2
-0x99d7:zhen1
-0x99d8:tai2
-0x99d9:fu4
-0x99da:yang3
-0x99db:shi3
-0x99dc:bi4
-0x99dd:tuo2
-0x99de:tuo2
-0x99df:si4
-0x99e0:liu2
-0x99e1:ma4
-0x99e2:pian2
-0x99e3:tao2
-0x99e4:zhi4
-0x99e5:rong2
-0x99e6:teng2
-0x99e7:dong4
-0x99e8:xun2
-0x99e9:quan2
-0x99ea:shen1
-0x99eb:jiong1
-0x99ec:er3
-0x99ed:hai4
-0x99ee:bo2
-0x99f0:yin1
-0x99f1:luo4
-0x99f3:dan4
-0x99f4:xie4
-0x99f5:liu2
-0x99f6:ju2
-0x99f7:song3
-0x99f8:qin1
-0x99f9:mang2
-0x99fa:liang2
-0x99fb:han4
-0x99fc:tu2
-0x99fd:xuan4
-0x99fe:tui4
-0x99ff:jun4
-0x9a00:e2
-0x9a01:cheng3
-0x9a02:xing1
-0x9a03:ai2
-0x9a04:lu4
-0x9a05:zhui1
-0x9a06:zhou1
-0x9a07:she3
-0x9a08:pian2
-0x9a09:kun1
-0x9a0a:tao2
-0x9a0b:lai2
-0x9a0c:zong1
-0x9a0d:ke4
-0x9a0e:qi2
-0x9a0f:qi2
-0x9a10:yan4
-0x9a11:fei1
-0x9a12:sao1
-0x9a13:yan3
-0x9a14:jie2
-0x9a15:yao3
-0x9a16:wu4
-0x9a17:pian4
-0x9a18:cong1
-0x9a19:pian4
-0x9a1a:qian2
-0x9a1b:fei1
-0x9a1c:huang2
-0x9a1d:jian1
-0x9a1e:huo4
-0x9a1f:yu4
-0x9a20:ti2
-0x9a21:quan2
-0x9a22:xia2
-0x9a23:zong1
-0x9a24:kui2
-0x9a25:rou2
-0x9a26:si1
-0x9a27:gua1
-0x9a28:tuo2
-0x9a29:kui4
-0x9a2a:sou1
-0x9a2b:qian1
-0x9a2c:cheng2
-0x9a2d:zhi4
-0x9a2e:liu2
-0x9a2f:pang2
-0x9a30:teng2
-0x9a31:xi1
-0x9a32:cao3
-0x9a33:du2
-0x9a34:yan4
-0x9a35:yuan2
-0x9a36:zou1
-0x9a37:sao1
-0x9a38:shan4
-0x9a39:li2
-0x9a3a:zhi4
-0x9a3b:shuang3
-0x9a3c:lu4
-0x9a3d:xi2
-0x9a3e:luo2
-0x9a3f:zhang1
-0x9a40:mo4
-0x9a41:ao4
-0x9a42:can1
-0x9a43:piao4
-0x9a44:cong1
-0x9a45:qu1
-0x9a46:bi4
-0x9a47:zhi4
-0x9a48:yu4
-0x9a49:xu1
-0x9a4a:hua2
-0x9a4b:bo1
-0x9a4c:su4
-0x9a4d:xiao1
-0x9a4e:lin2
-0x9a4f:chan3
-0x9a50:dun1
-0x9a51:liu2
-0x9a52:tuo2
-0x9a53:zeng1
-0x9a54:tan2
-0x9a55:jiao1
-0x9a56:tie3
-0x9a57:yan4
-0x9a58:luo2
-0x9a59:zhan1
-0x9a5a:jing1
-0x9a5b:yi4
-0x9a5c:ye4
-0x9a5d:tuo1
-0x9a5e:bin1
-0x9a5f:zou4
-0x9a60:yan4
-0x9a61:peng2
-0x9a62:lv2
-0x9a63:teng2
-0x9a64:xiang1
-0x9a65:ji4
-0x9a66:shuang1
-0x9a67:ju2
-0x9a68:xi1
-0x9a69:huan1
-0x9a6a:li2
-0x9a6b:biao1
-0x9a6c:ma3
-0x9a6d:yu4
-0x9a6e:tuo2
-0x9a6f:xun2
-0x9a70:chi2
-0x9a71:qu1
-0x9a72:ri4
-0x9a73:bo2
-0x9a74:lv2
-0x9a75:zang3
-0x9a76:shi3
-0x9a77:si4
-0x9a78:fu4
-0x9a79:ju1
-0x9a7a:zou1
-0x9a7b:zhu4
-0x9a7c:tuo2
-0x9a7d:nu2
-0x9a7e:jia4
-0x9a7f:yi4
-0x9a80:tai2
-0x9a81:xiao1
-0x9a82:ma4
-0x9a83:yin1
-0x9a84:jiao1
-0x9a85:hua2
-0x9a86:luo4
-0x9a87:hai4
-0x9a88:pian2
-0x9a89:biao1
-0x9a8a:li2
-0x9a8b:cheng3
-0x9a8c:yan4
-0x9a8d:xin1
-0x9a8e:qin1
-0x9a8f:jun4
-0x9a90:qi2
-0x9a91:qi2
-0x9a92:ke4
-0x9a93:zhui1
-0x9a94:zong1
-0x9a95:su4
-0x9a96:can1
-0x9a97:pian4
-0x9a98:zhi4
-0x9a99:kui2
-0x9a9a:sao1
-0x9a9b:wu4
-0x9a9c:ao2
-0x9a9d:liu2
-0x9a9e:qian1
-0x9a9f:shan4
-0x9aa0:piao4
-0x9aa1:luo2
-0x9aa2:cong1
-0x9aa3:chan3
-0x9aa4:zou4
-0x9aa5:ji4
-0x9aa6:shuang1
-0x9aa7:xiang1
-0x9aa8:gu3
-0x9aa9:wei3
-0x9aaa:wei3
-0x9aab:wei3
-0x9aac:yu2
-0x9aad:gan4
-0x9aae:yi4
-0x9aaf:ang1
-0x9ab0:tou2
-0x9ab1:xie4
-0x9ab2:bao1
-0x9ab3:bi4
-0x9ab4:chi1
-0x9ab5:ti3
-0x9ab6:di3
-0x9ab7:ku1
-0x9ab8:hai2
-0x9ab9:qiao1
-0x9aba:gou4
-0x9abb:kua4
-0x9abc:ge2
-0x9abd:tui3
-0x9abe:geng3
-0x9abf:pian2
-0x9ac0:bi4
-0x9ac1:ke1
-0x9ac2:ka4
-0x9ac3:yu2
-0x9ac4:sui3
-0x9ac5:lou2
-0x9ac6:bo2
-0x9ac7:xiao1
-0x9ac8:pang2
-0x9ac9:bo1
-0x9aca:ci1
-0x9acb:kuan1
-0x9acc:bin4
-0x9acd:mo2
-0x9ace:liao2
-0x9acf:lou2
-0x9ad0:nao2
-0x9ad1:du2
-0x9ad2:zang1
-0x9ad3:sui3
-0x9ad4:ti3
-0x9ad5:bin4
-0x9ad6:kuan1
-0x9ad7:lu2
-0x9ad8:gao1
-0x9ad9:gao1
-0x9ada:qiao4
-0x9adb:kao1
-0x9adc:qiao1
-0x9add:lao4
-0x9ade:zao4
-0x9adf:biao1
-0x9ae0:kun1
-0x9ae1:kun1
-0x9ae2:ti4
-0x9ae3:fang3
-0x9ae4:xiu1
-0x9ae5:ran2
-0x9ae6:mao2
-0x9ae7:dan4
-0x9ae8:kun1
-0x9ae9:bin4
-0x9aea:fa4
-0x9aeb:tiao2
-0x9aec:pi1
-0x9aed:zi1
-0x9aee:fa4
-0x9aef:ran2
-0x9af0:ti4
-0x9af1:pao4
-0x9af2:pi1
-0x9af3:mao2
-0x9af4:fu2
-0x9af5:er2
-0x9af6:rong2
-0x9af7:qu1
-0x9af9:xiu1
-0x9afa:gua4
-0x9afb:ji4
-0x9afc:peng2
-0x9afd:zhua1
-0x9afe:shao1
-0x9aff:sha1
-0x9b00:ti4
-0x9b01:li4
-0x9b02:bin4
-0x9b03:zong1
-0x9b04:ti4
-0x9b05:peng2
-0x9b06:song1
-0x9b07:zheng1
-0x9b08:quan2
-0x9b09:zong1
-0x9b0a:shun4
-0x9b0b:jian1
-0x9b0c:duo3
-0x9b0d:hu2
-0x9b0e:la4
-0x9b0f:jiu1
-0x9b10:qi2
-0x9b11:lian2
-0x9b12:zhen3
-0x9b13:bin4
-0x9b14:peng2
-0x9b15:mo4
-0x9b16:san1
-0x9b17:man4
-0x9b18:man2
-0x9b19:seng1
-0x9b1a:xu1
-0x9b1b:lie4
-0x9b1c:qian1
-0x9b1d:qian1
-0x9b1e:nong2
-0x9b1f:huan2
-0x9b20:kuai4
-0x9b21:ning2
-0x9b22:bin4
-0x9b23:lie4
-0x9b24:rang2
-0x9b25:dou4
-0x9b26:dou4
-0x9b27:nao4
-0x9b28:hong4
-0x9b29:xi4
-0x9b2a:dou4
-0x9b2b:han3
-0x9b2c:dou4
-0x9b2d:dou4
-0x9b2e:jiu1
-0x9b2f:chang4
-0x9b30:yu4
-0x9b31:yu4
-0x9b32:li4
-0x9b33:juan4
-0x9b34:fu3
-0x9b35:qian2
-0x9b36:gui1
-0x9b37:zong1
-0x9b38:liu4
-0x9b39:gui1
-0x9b3a:shang1
-0x9b3b:yu4
-0x9b3c:gui3
-0x9b3d:mei4
-0x9b3e:ji4
-0x9b3f:qi2
-0x9b40:jie4
-0x9b41:kui2
-0x9b42:hun2
-0x9b43:ba2
-0x9b44:po4
-0x9b45:mei4
-0x9b46:xu4
-0x9b47:yan3
-0x9b48:xiao1
-0x9b49:liang3
-0x9b4a:yu4
-0x9b4b:tui2
-0x9b4c:qi1
-0x9b4d:wang3
-0x9b4e:liang3
-0x9b4f:wei4
-0x9b50:jian1
-0x9b51:chi1
-0x9b52:piao1
-0x9b53:bi4
-0x9b54:mo2
-0x9b55:ji3
-0x9b56:xu1
-0x9b57:chou3
-0x9b58:yan3
-0x9b59:zhan3
-0x9b5a:yu2
-0x9b5b:dao1
-0x9b5c:ren2
-0x9b5d:ji4
-0x9b5f:gong1
-0x9b60:tuo2
-0x9b61:diao4
-0x9b62:ji3
-0x9b63:xu4
-0x9b64:e2
-0x9b65:e4
-0x9b66:sha1
-0x9b67:hang2
-0x9b68:tun2
-0x9b69:mo4
-0x9b6a:jie4
-0x9b6b:shen3
-0x9b6c:fan3
-0x9b6d:yuan2
-0x9b6e:bi2
-0x9b6f:lu3
-0x9b70:wen2
-0x9b71:hu2
-0x9b72:lu2
-0x9b73:za2
-0x9b74:fang2
-0x9b75:fen2
-0x9b76:na4
-0x9b77:you2
-0x9b7a:he2
-0x9b7b:xia2
-0x9b7c:qu1
-0x9b7d:han1
-0x9b7e:pi2
-0x9b7f:ling2
-0x9b80:tuo2
-0x9b81:bo1
-0x9b82:qiu2
-0x9b83:ping2
-0x9b84:fu2
-0x9b85:bi4
-0x9b86:ji4
-0x9b87:wei4
-0x9b88:ju1
-0x9b89:diao1
-0x9b8a:bo2
-0x9b8b:you2
-0x9b8c:gun3
-0x9b8d:pi1
-0x9b8e:nian2
-0x9b8f:xing1
-0x9b90:tai2
-0x9b91:bao4
-0x9b92:fu4
-0x9b93:zha3
-0x9b94:ju4
-0x9b95:gu1
-0x9b99:ta4
-0x9b9a:jie2
-0x9b9b:shu4
-0x9b9c:hou4
-0x9b9d:xiang3
-0x9b9e:er2
-0x9b9f:an4
-0x9ba0:wei2
-0x9ba1:tiao1
-0x9ba2:zhu1
-0x9ba3:yin4
-0x9ba4:lie4
-0x9ba5:luo4
-0x9ba6:tong2
-0x9ba7:yi2
-0x9ba8:qi2
-0x9ba9:bing4
-0x9baa:wei3
-0x9bab:jiao1
-0x9bac:bu4
-0x9bad:gui1
-0x9bae:xian1
-0x9baf:ge2
-0x9bb0:hui2
-0x9bb3:kao3
-0x9bb5:duo2
-0x9bb6:jun1
-0x9bb7:ti2
-0x9bb8:mian3
-0x9bb9:xiao1
-0x9bba:za3
-0x9bbb:sha1
-0x9bbc:qin1
-0x9bbd:yu2
-0x9bbe:nei3
-0x9bbf:zhe2
-0x9bc0:gun3
-0x9bc1:geng3
-0x9bc3:wu2
-0x9bc4:qiu2
-0x9bc5:ting2
-0x9bc6:fu3
-0x9bc7:wan3
-0x9bc8:tiao2
-0x9bc9:li3
-0x9bca:sha1
-0x9bcb:sha1
-0x9bcc:gao4
-0x9bcd:meng2
-0x9bd2:yong3
-0x9bd3:ni2
-0x9bd4:zi1
-0x9bd5:qi2
-0x9bd6:qing1
-0x9bd7:xiang3
-0x9bd8:nei3
-0x9bd9:chun2
-0x9bda:ji4
-0x9bdb:diao1
-0x9bdc:qie4
-0x9bdd:gu4
-0x9bde:zhou3
-0x9bdf:dong1
-0x9be0:lai2
-0x9be1:fei1
-0x9be2:ni2
-0x9be3:yi4
-0x9be4:kun1
-0x9be5:lu4
-0x9be6:jiu4
-0x9be7:chang1
-0x9be8:jing1
-0x9be9:lun2
-0x9bea:ling2
-0x9beb:zou1
-0x9bec:li2
-0x9bed:meng3
-0x9bee:zong1
-0x9bef:zhi4
-0x9bf0:nian2
-0x9bf4:shi1
-0x9bf5:shen1
-0x9bf6:hun3
-0x9bf7:shi4
-0x9bf8:hou2
-0x9bf9:xing1
-0x9bfa:zhu1
-0x9bfb:la4
-0x9bfc:zong1
-0x9bfd:ji4
-0x9bfe:bian1
-0x9bff:bian1
-0x9c00:huan4
-0x9c01:quan2
-0x9c02:ze2
-0x9c03:wei1
-0x9c04:wei1
-0x9c05:yu2
-0x9c06:qun1
-0x9c07:rou2
-0x9c08:die2
-0x9c09:huang2
-0x9c0a:lian4
-0x9c0b:yan3
-0x9c0c:qiu2
-0x9c0d:qiu1
-0x9c0e:jian4
-0x9c0f:bi4
-0x9c10:e4
-0x9c11:yang2
-0x9c12:fu4
-0x9c13:sai1
-0x9c14:jian3
-0x9c15:xia2
-0x9c16:tuo3
-0x9c17:hu2
-0x9c19:ruo4
-0x9c1b:wen1
-0x9c1c:jian1
-0x9c1d:hao4
-0x9c1e:wu1
-0x9c1f:fang2
-0x9c20:sao1
-0x9c21:liu2
-0x9c22:ma3
-0x9c23:shi2
-0x9c24:shi1
-0x9c25:guan1
-0x9c27:teng2
-0x9c28:ta4
-0x9c29:yao2
-0x9c2a:ge2
-0x9c2b:rong2
-0x9c2c:qian2
-0x9c2d:qi2
-0x9c2e:wen1
-0x9c2f:ruo4
-0x9c31:lian2
-0x9c32:ao2
-0x9c33:le4
-0x9c34:hui1
-0x9c35:min3
-0x9c36:ji4
-0x9c37:tiao2
-0x9c38:qu1
-0x9c39:jian1
-0x9c3a:sao1
-0x9c3b:man2
-0x9c3c:xi2
-0x9c3d:qiu2
-0x9c3e:biao4
-0x9c3f:ji1
-0x9c40:ji4
-0x9c41:zhu2
-0x9c42:jiang1
-0x9c43:qiu1
-0x9c44:zhuan1
-0x9c45:yong2
-0x9c46:zhang1
-0x9c47:kang1
-0x9c48:xue3
-0x9c49:bie1
-0x9c4a:jue2
-0x9c4b:qu1
-0x9c4c:xiang4
-0x9c4d:bo1
-0x9c4e:jiao3
-0x9c4f:xun2
-0x9c50:su4
-0x9c51:huang2
-0x9c52:zun4
-0x9c53:shan4
-0x9c54:shan4
-0x9c55:fan1
-0x9c56:gui4
-0x9c57:lin2
-0x9c58:xun2
-0x9c59:miao2
-0x9c5a:xi3
-0x9c5d:fen4
-0x9c5e:guan1
-0x9c5f:hou4
-0x9c60:kuai4
-0x9c61:zei2
-0x9c62:sao1
-0x9c63:zhan1
-0x9c64:gan3
-0x9c65:gui4
-0x9c66:sheng2
-0x9c67:li3
-0x9c68:chang2
-0x9c6c:ru2
-0x9c6d:ji4
-0x9c6e:xu4
-0x9c6f:huo4
-0x9c71:li4
-0x9c72:lie4
-0x9c73:li4
-0x9c74:mie4
-0x9c75:zhen1
-0x9c76:xiang3
-0x9c77:e4
-0x9c78:lu2
-0x9c79:guan4
-0x9c7a:li2
-0x9c7b:xian1
-0x9c7c:yu2
-0x9c7d:dao1
-0x9c7e:ji3
-0x9c7f:you2
-0x9c80:tun2
-0x9c81:lu3
-0x9c82:fang2
-0x9c83:ba1
-0x9c84:he2
-0x9c85:bo1
-0x9c86:ping2
-0x9c87:nian2
-0x9c88:lu2
-0x9c89:you2
-0x9c8a:zha3
-0x9c8b:fu4
-0x9c8c:bo2
-0x9c8d:bao4
-0x9c8e:hou4
-0x9c8f:pi1
-0x9c90:tai2
-0x9c91:gui1
-0x9c92:jie2
-0x9c93:kao3
-0x9c94:wei3
-0x9c95:er2
-0x9c96:tong2
-0x9c97:ze2
-0x9c98:hou4
-0x9c99:kuai4
-0x9c9a:ji4
-0x9c9b:jiao3
-0x9c9c:xian1
-0x9c9d:za3
-0x9c9e:xiang3
-0x9c9f:xun2
-0x9ca0:geng3
-0x9ca1:li2
-0x9ca2:lian2
-0x9ca3:jian1
-0x9ca4:li3
-0x9ca5:shi2
-0x9ca6:tiao2
-0x9ca7:gun3
-0x9ca8:sha1
-0x9ca9:wan3
-0x9caa:jun1
-0x9cab:ji4
-0x9cac:yong3
-0x9cad:qing1
-0x9cae:ling2
-0x9caf:qi2
-0x9cb0:zou1
-0x9cb1:fei1
-0x9cb2:kun1
-0x9cb3:chang1
-0x9cb4:gu4
-0x9cb5:ni2
-0x9cb6:nian2
-0x9cb7:diao1
-0x9cb8:jing1
-0x9cb9:shen1
-0x9cba:shi1
-0x9cbb:zi1
-0x9cbc:fen4
-0x9cbd:die2
-0x9cbe:bi4
-0x9cbf:chang2
-0x9cc0:shi4
-0x9cc1:wen1
-0x9cc2:wei1
-0x9cc3:sai1
-0x9cc4:e4
-0x9cc5:qiu1
-0x9cc6:fu4
-0x9cc7:huang2
-0x9cc8:quan2
-0x9cc9:jiang1
-0x9cca:bian1
-0x9ccb:sao1
-0x9ccc:ao2
-0x9ccd:qi2
-0x9cce:ta4
-0x9ccf:yin2
-0x9cd0:yao2
-0x9cd1:fang2
-0x9cd2:jian1
-0x9cd3:le4
-0x9cd4:biao4
-0x9cd5:xue3
-0x9cd6:bie1
-0x9cd7:man2
-0x9cd8:min3
-0x9cd9:yong2
-0x9cda:wei4
-0x9cdb:xi2
-0x9cdc:jue2
-0x9cdd:shan4
-0x9cde:lin2
-0x9cdf:zun4
-0x9ce0:huo4
-0x9ce1:gan3
-0x9ce2:li3
-0x9ce3:zhan1
-0x9ce4:guan3
-0x9ce5:niao3
-0x9ce6:yi3
-0x9ce7:fu2
-0x9ce8:li4
-0x9ce9:jiu1
-0x9cea:bu3
-0x9ceb:yan4
-0x9cec:fu2
-0x9ced:diao1
-0x9cee:ji1
-0x9cef:feng4
-0x9cf1:gan1
-0x9cf2:shi1
-0x9cf3:feng4
-0x9cf4:ming2
-0x9cf5:bao3
-0x9cf6:yuan1
-0x9cf7:zhi1
-0x9cf8:hu4
-0x9cf9:qin2
-0x9cfa:fu1
-0x9cfb:fen1
-0x9cfc:wen2
-0x9cfd:jian1
-0x9cfe:shi1
-0x9cff:yu4
-0x9d00:fou3
-0x9d01:yao1
-0x9d02:jue4
-0x9d03:jue2
-0x9d04:pi1
-0x9d05:huan1
-0x9d06:zhen4
-0x9d07:bao3
-0x9d08:yan4
-0x9d09:ya1
-0x9d0a:zheng4
-0x9d0b:fang1
-0x9d0c:feng4
-0x9d0d:wen2
-0x9d0e:ou1
-0x9d0f:te4
-0x9d10:jia1
-0x9d11:nu2
-0x9d12:ling2
-0x9d13:mie4
-0x9d14:fu2
-0x9d15:tuo2
-0x9d16:wen2
-0x9d17:li4
-0x9d18:bian4
-0x9d19:zhi4
-0x9d1a:ge1
-0x9d1b:yuan1
-0x9d1c:zi1
-0x9d1d:qu2
-0x9d1e:xiao1
-0x9d1f:chi1
-0x9d20:dan4
-0x9d21:ju1
-0x9d22:you4
-0x9d23:gu1
-0x9d24:zhong1
-0x9d25:yu4
-0x9d26:yang1
-0x9d27:rong4
-0x9d28:ya1
-0x9d29:tie3
-0x9d2a:yu4
-0x9d2c:ying1
-0x9d2d:zhui1
-0x9d2e:wu1
-0x9d2f:er2
-0x9d30:gua1
-0x9d31:ai4
-0x9d32:zhi1
-0x9d33:yan4
-0x9d34:heng2
-0x9d35:jiao1
-0x9d36:ji2
-0x9d37:lie4
-0x9d38:zhu1
-0x9d39:ren2
-0x9d3a:yi2
-0x9d3b:hong2
-0x9d3c:luo4
-0x9d3d:ru2
-0x9d3e:mou2
-0x9d3f:ge1
-0x9d40:ren4
-0x9d41:jiao1
-0x9d42:xiu1
-0x9d43:zhou1
-0x9d44:zhi1
-0x9d45:luo4
-0x9d49:luan2
-0x9d4a:jia2
-0x9d4b:ji4
-0x9d4c:yu2
-0x9d4d:huan1
-0x9d4e:tuo3
-0x9d4f:bu1
-0x9d50:wu2
-0x9d51:juan1
-0x9d52:yu4
-0x9d53:bo2
-0x9d54:xun4
-0x9d55:xun4
-0x9d56:bi4
-0x9d57:xi1
-0x9d58:jun4
-0x9d59:ju2
-0x9d5a:tu2
-0x9d5b:jing1
-0x9d5c:ti2
-0x9d5d:e2
-0x9d5e:e2
-0x9d5f:kuang2
-0x9d60:hu2
-0x9d61:wu3
-0x9d62:shen1
-0x9d63:lai4
-0x9d66:lu4
-0x9d67:ping2
-0x9d68:shu1
-0x9d69:fu2
-0x9d6a:an1
-0x9d6b:zhao4
-0x9d6c:peng2
-0x9d6d:qin2
-0x9d6e:qian1
-0x9d6f:bei1
-0x9d70:diao1
-0x9d71:lu4
-0x9d72:que4
-0x9d73:jian1
-0x9d74:ju2
-0x9d75:tu4
-0x9d76:ya1
-0x9d77:yuan1
-0x9d78:qi2
-0x9d79:li2
-0x9d7a:ye4
-0x9d7b:zhui1
-0x9d7c:kong1
-0x9d7d:zhui4
-0x9d7e:kun1
-0x9d7f:sheng1
-0x9d80:qi2
-0x9d81:jing1
-0x9d82:yi4
-0x9d83:yi4
-0x9d84:jing1
-0x9d85:zi1
-0x9d86:lai2
-0x9d87:dong1
-0x9d88:qi1
-0x9d89:chun2
-0x9d8a:geng1
-0x9d8b:ju1
-0x9d8c:qu1
-0x9d8f:ji1
-0x9d90:shu4
-0x9d92:chi4
-0x9d93:miao2
-0x9d94:rou2
-0x9d95:an1
-0x9d96:qiu1
-0x9d97:ti2
-0x9d98:hu2
-0x9d99:ti2
-0x9d9a:e4
-0x9d9b:jie1
-0x9d9c:mao2
-0x9d9d:fu2
-0x9d9e:chun1
-0x9d9f:tu2
-0x9da0:yan3
-0x9da1:he2
-0x9da2:yuan2
-0x9da3:pian1
-0x9da4:yun4
-0x9da5:mei2
-0x9da6:hu2
-0x9da7:ying1
-0x9da8:dun4
-0x9da9:wu4
-0x9daa:ju2
-0x9dac:cang1
-0x9dad:fang3
-0x9dae:gu4
-0x9daf:ying1
-0x9db0:yuan2
-0x9db1:xuan1
-0x9db2:weng1
-0x9db3:shi1
-0x9db4:he4
-0x9db5:chu2
-0x9db6:tang2
-0x9db7:xia4
-0x9db8:ruo4
-0x9db9:liu2
-0x9dba:ji2
-0x9dbb:gu2
-0x9dbc:jian1
-0x9dbd:zhun3
-0x9dbe:han4
-0x9dbf:zi1
-0x9dc0:zi1
-0x9dc1:ni4
-0x9dc2:yao4
-0x9dc3:yan4
-0x9dc4:ji1
-0x9dc5:li4
-0x9dc6:tian2
-0x9dc7:kou4
-0x9dc8:ti1
-0x9dc9:ti1
-0x9dca:ni4
-0x9dcb:tu2
-0x9dcc:ma3
-0x9dcd:jiao1
-0x9dce:gao1
-0x9dcf:tian2
-0x9dd0:chen2
-0x9dd1:li4
-0x9dd2:zhuan1
-0x9dd3:zhe4
-0x9dd4:ao2
-0x9dd5:yao3
-0x9dd6:yi1
-0x9dd7:ou1
-0x9dd8:chi4
-0x9dd9:zhi4
-0x9dda:liao2
-0x9ddb:rong2
-0x9ddc:lou2
-0x9ddd:bi4
-0x9dde:shuang1
-0x9ddf:zhuo2
-0x9de0:yu2
-0x9de1:wu2
-0x9de2:jue2
-0x9de3:yin2
-0x9de4:quan2
-0x9de5:si1
-0x9de6:jiao1
-0x9de7:yi4
-0x9de8:hua1
-0x9de9:bi4
-0x9dea:ying1
-0x9deb:su4
-0x9dec:huang2
-0x9ded:fan2
-0x9dee:jiao1
-0x9def:liao2
-0x9df0:yan4
-0x9df1:kao1
-0x9df2:jiu4
-0x9df3:xian2
-0x9df4:xian2
-0x9df5:tu2
-0x9df6:mai3
-0x9df7:zun1
-0x9df8:yu4
-0x9df9:ying1
-0x9dfa:lu4
-0x9dfb:tuan2
-0x9dfc:xian2
-0x9dfd:xue2
-0x9dfe:yi4
-0x9dff:pi4
-0x9e00:shu2
-0x9e01:luo2
-0x9e02:qi1
-0x9e03:yi2
-0x9e04:ji2
-0x9e05:zhe2
-0x9e06:yu2
-0x9e07:zhan1
-0x9e08:ye4
-0x9e09:yang2
-0x9e0a:pi4
-0x9e0b:ning2
-0x9e0c:huo4
-0x9e0d:mi2
-0x9e0e:ying1
-0x9e0f:meng2
-0x9e10:di2
-0x9e11:yue4
-0x9e12:yu2
-0x9e13:lei3
-0x9e14:bao4
-0x9e15:lu2
-0x9e16:he4
-0x9e17:long2
-0x9e18:shuang1
-0x9e19:yue4
-0x9e1a:ying1
-0x9e1b:guan4
-0x9e1c:qu2
-0x9e1d:li2
-0x9e1e:luan2
-0x9e1f:niao3
-0x9e20:jiu1
-0x9e21:ji1
-0x9e22:yuan1
-0x9e23:ming2
-0x9e24:shi1
-0x9e25:ou1
-0x9e26:ya1
-0x9e27:cang1
-0x9e28:bao3
-0x9e29:zhen4
-0x9e2a:gu1
-0x9e2b:dong1
-0x9e2c:lu2
-0x9e2d:ya1
-0x9e2e:xiao1
-0x9e2f:yang1
-0x9e30:ling2
-0x9e31:zhi1
-0x9e32:qu2
-0x9e33:yuan1
-0x9e34:xue2
-0x9e35:tuo2
-0x9e36:si1
-0x9e37:zhi4
-0x9e38:er2
-0x9e39:gua1
-0x9e3a:xiu1
-0x9e3b:heng2
-0x9e3c:zhou1
-0x9e3d:ge1
-0x9e3e:luan2
-0x9e3f:hong2
-0x9e40:wu2
-0x9e41:bo2
-0x9e42:li2
-0x9e43:juan1
-0x9e44:hu2
-0x9e45:e2
-0x9e46:yu4
-0x9e47:xian2
-0x9e48:ti2
-0x9e49:wu3
-0x9e4a:que4
-0x9e4b:miao2
-0x9e4c:an1
-0x9e4d:kun1
-0x9e4e:bei1
-0x9e4f:peng2
-0x9e50:qian1
-0x9e51:chun2
-0x9e52:geng1
-0x9e53:yuan1
-0x9e54:su4
-0x9e55:hu2
-0x9e56:he2
-0x9e57:e4
-0x9e58:gu2
-0x9e59:qiu1
-0x9e5a:zi1
-0x9e5b:mei2
-0x9e5c:mu4
-0x9e5d:ni4
-0x9e5e:yao4
-0x9e5f:weng1
-0x9e60:liu2
-0x9e61:ji2
-0x9e62:ni4
-0x9e63:jian1
-0x9e64:he4
-0x9e65:yi1
-0x9e66:ying1
-0x9e67:zhe4
-0x9e68:liao2
-0x9e69:liao2
-0x9e6a:jiao1
-0x9e6b:jiu4
-0x9e6c:yu4
-0x9e6d:lu4
-0x9e6e:xuan2
-0x9e6f:zhan1
-0x9e70:ying1
-0x9e71:huo4
-0x9e72:meng2
-0x9e73:guan4
-0x9e74:shuang1
-0x9e75:lu3
-0x9e76:jin1
-0x9e77:ling2
-0x9e78:jian3
-0x9e79:xian2
-0x9e7a:cuo2
-0x9e7b:jian3
-0x9e7c:jian3
-0x9e7d:yan2
-0x9e7e:cuo2
-0x9e7f:lu4
-0x9e80:you1
-0x9e81:cu1
-0x9e82:ji3
-0x9e83:biao1
-0x9e84:cu1
-0x9e85:biao1
-0x9e86:zhu4
-0x9e87:jun1
-0x9e88:zhu3
-0x9e89:jian1
-0x9e8a:mi2
-0x9e8b:mi2
-0x9e8c:wu2
-0x9e8d:liu2
-0x9e8e:chen2
-0x9e8f:jun1
-0x9e90:lin2
-0x9e91:ni2
-0x9e92:qi2
-0x9e93:lu4
-0x9e94:jiu4
-0x9e95:jun1
-0x9e96:jing1
-0x9e97:li4
-0x9e98:xiang1
-0x9e99:yan2
-0x9e9a:jia1
-0x9e9b:mi2
-0x9e9c:li4
-0x9e9d:she4
-0x9e9e:zhang1
-0x9e9f:lin2
-0x9ea0:jing1
-0x9ea1:ji1
-0x9ea2:ling2
-0x9ea3:yan2
-0x9ea4:cu1
-0x9ea5:mai4
-0x9ea6:mai4
-0x9ea7:ge1
-0x9ea8:chao3
-0x9ea9:fu1
-0x9eaa:mian3
-0x9eab:mian3
-0x9eac:fu1
-0x9ead:pao4
-0x9eae:qu4
-0x9eaf:qu2
-0x9eb0:mou2
-0x9eb1:fu1
-0x9eb2:xian4
-0x9eb3:lai2
-0x9eb4:qu2
-0x9eb5:mian4
-0x9eb7:feng1
-0x9eb8:fu1
-0x9eb9:qu2
-0x9eba:mian4
-0x9ebb:ma2
-0x9ebc:me5
-0x9ebd:mo5
-0x9ebe:hui1
-0x9ec0:zou1
-0x9ec1:nen1
-0x9ec2:fen2
-0x9ec3:huang2
-0x9ec4:huang2
-0x9ec5:jin1
-0x9ec6:guang1
-0x9ec7:tian1
-0x9ec8:tou3
-0x9ec9:heng2
-0x9eca:xi1
-0x9ecb:kuang3
-0x9ecc:heng2
-0x9ecd:shu3
-0x9ece:li2
-0x9ecf:nian2
-0x9ed0:chi1
-0x9ed1:hei1
-0x9ed2:hei1
-0x9ed3:yi4
-0x9ed4:qian2
-0x9ed5:dan1
-0x9ed6:xi4
-0x9ed7:tuan3
-0x9ed8:mo4
-0x9ed9:mo4
-0x9eda:qian2
-0x9edb:dai4
-0x9edc:chu4
-0x9edd:you3
-0x9ede:dian3
-0x9edf:yi1
-0x9ee0:xia2
-0x9ee1:yan3
-0x9ee2:qu1
-0x9ee3:mei3
-0x9ee4:yan3
-0x9ee5:qing2
-0x9ee6:yu4
-0x9ee7:li2
-0x9ee8:dang3
-0x9ee9:du2
-0x9eea:can3
-0x9eeb:yin1
-0x9eec:an4
-0x9eed:yan1
-0x9eee:tan3
-0x9eef:an4
-0x9ef0:zhen3
-0x9ef1:dai4
-0x9ef2:can3
-0x9ef3:yi1
-0x9ef4:mei2
-0x9ef5:dan3
-0x9ef6:yan3
-0x9ef7:du2
-0x9ef8:lu2
-0x9ef9:zhi3
-0x9efa:fen3
-0x9efb:fu2
-0x9efc:fu3
-0x9efd:min3
-0x9efe:min3
-0x9eff:yuan2
-0x9f00:cu4
-0x9f01:qu4
-0x9f02:chao2
-0x9f03:wa1
-0x9f04:zhu1
-0x9f05:zhi1
-0x9f06:mang2
-0x9f07:ao2
-0x9f08:bie1
-0x9f09:tuo2
-0x9f0a:bi4
-0x9f0b:yuan2
-0x9f0c:chao2
-0x9f0d:tuo2
-0x9f0e:ding3
-0x9f0f:mi4
-0x9f10:nai4
-0x9f11:ding3
-0x9f12:zi1
-0x9f13:gu3
-0x9f14:gu3
-0x9f15:dong1
-0x9f16:fen2
-0x9f17:tao2
-0x9f18:yuan1
-0x9f19:pi2
-0x9f1a:chang1
-0x9f1b:gao1
-0x9f1c:qi4
-0x9f1d:yuan1
-0x9f1e:tang1
-0x9f1f:teng1
-0x9f20:shu3
-0x9f21:shu3
-0x9f22:fen2
-0x9f23:fei4
-0x9f24:wen2
-0x9f25:ba2
-0x9f26:diao1
-0x9f27:tuo2
-0x9f28:tong2
-0x9f29:qu2
-0x9f2a:sheng1
-0x9f2b:shi2
-0x9f2c:you4
-0x9f2d:shi2
-0x9f2e:ting2
-0x9f2f:wu2
-0x9f30:nian4
-0x9f31:jing1
-0x9f32:hun2
-0x9f33:ju2
-0x9f34:yan3
-0x9f35:tu2
-0x9f36:ti2
-0x9f37:xi1
-0x9f38:xian3
-0x9f39:yan3
-0x9f3a:lei2
-0x9f3b:bi2
-0x9f3c:yao3
-0x9f3d:qiu2
-0x9f3e:han1
-0x9f3f:wu1
-0x9f40:wu4
-0x9f41:hou1
-0x9f42:xi4
-0x9f43:ge2
-0x9f44:zha1
-0x9f45:xiu4
-0x9f46:weng4
-0x9f47:zha1
-0x9f48:nong2
-0x9f49:nang4
-0x9f4a:qi2
-0x9f4b:zhai1
-0x9f4c:ji4
-0x9f4d:zi1
-0x9f4e:ji1
-0x9f4f:ji1
-0x9f50:qi2
-0x9f51:ji1
-0x9f52:chi3
-0x9f53:chen4
-0x9f54:chen4
-0x9f55:he2
-0x9f56:ya2
-0x9f57:ken3
-0x9f58:xie4
-0x9f59:pao2
-0x9f5a:cuo4
-0x9f5b:shi4
-0x9f5c:zi1
-0x9f5d:chi1
-0x9f5e:nian4
-0x9f5f:ju3
-0x9f60:tiao2
-0x9f61:ling2
-0x9f62:ling2
-0x9f63:chu1
-0x9f64:quan2
-0x9f65:xie4
-0x9f66:ken3
-0x9f67:nie4
-0x9f68:jiu4
-0x9f69:yao3
-0x9f6a:chuo4
-0x9f6b:kun3
-0x9f6c:yu3
-0x9f6d:chu3
-0x9f6e:yi3
-0x9f6f:ni2
-0x9f70:cuo4
-0x9f71:zou1
-0x9f72:qu3
-0x9f73:nen3
-0x9f74:xian3
-0x9f75:ou2
-0x9f76:e4
-0x9f77:wo4
-0x9f78:yi4
-0x9f79:chuo1
-0x9f7a:zou1
-0x9f7b:dian1
-0x9f7c:chu3
-0x9f7d:jin4
-0x9f7e:ya4
-0x9f7f:chi3
-0x9f80:chen4
-0x9f81:he2
-0x9f82:ken3
-0x9f83:ju3
-0x9f84:ling2
-0x9f85:pao2
-0x9f86:tiao2
-0x9f87:zi1
-0x9f88:ken3
-0x9f89:yu3
-0x9f8a:chuo4
-0x9f8b:qu3
-0x9f8c:wo4
-0x9f8d:long2
-0x9f8e:pang2
-0x9f8f:gong1
-0x9f90:pang2
-0x9f91:yan3
-0x9f92:long2
-0x9f93:long2
-0x9f94:gong1
-0x9f95:kan1
-0x9f96:ta4
-0x9f97:ling2
-0x9f98:ta4
-0x9f99:long2
-0x9f9a:gong1
-0x9f9b:kan1
-0x9f9c:gui1
-0x9f9d:qiu1
-0x9f9e:bie1
-0x9f9f:gui1
-0x9fa0:yue4
-0x9fa1:chui4
-0x9fa2:he2
-0x9fa3:jue2
-0x9fa4:xie2
-0x9fa5:yu4
-0x9fc3:shan3
-0xf90e:la4
-0xfa0c:wu4
-0xfa0d:huo4
-0xfa10:zhong3
-0xfa12:qing2
-0xfa15:xi1
-0xfa16:zhu1
-0xfa17:yi4
-0xfa18:li3
-0xfa19:shen2
-0xfa1a:xiang2
-0xfa1b:fu2
-0xfa1c:jing4
-0xfa1d:jing1
-0xfa1e:yu3
-0xfa22:zhu1
-0xfa25:yi4
-0xfa26:du1
-0xfa2a:fan4
-0xfa2b:si4
-0xfa2c:guan3
-0xfa2d:he4
+0x3400:qiū # 㐀
+0x3401:tiǎn,tiàn # 㐁
+0x3404:kuà # 㐄
+0x3405:wǔ # 㐅
+0x3406:yǐn,yī # 㐆
+0x340c:sì,yí # 㐌
+0x3416:yè # 㐖
+0x341c:chóu # 㐜
+0x3421:nuò # 㐡
+0x3424:qiú # 㐤
+0x3428:xù # 㐨
+0x3429:xíng # 㐩
+0x342b:xiōng # 㐫
+0x342c:liú # 㐬
+0x342d:lǐn # 㐭
+0x342e:xiāng # 㐮
+0x342f:yōng # 㐯
+0x3430:xìn # 㐰
+0x3431:zhěn # 㐱
+0x3432:dài,fú # 㐲
+0x3433:wù # 㐳
+0x3434:pān # 㐴
+0x3437:mǎ,mà,mián # 㐷
+0x3438:qiàn # 㐸
+0x3439:yì # 㐹
+0x343a:zhòng,yín # 㐺
+0x343b:nèi # 㐻
+0x343c:chèng,zhěng # 㐼
+0x3441:zhuō # 㑁
+0x3442:fǎng,páng # 㑂
+0x3443:ǎo # 㑃
+0x3444:wǔ # 㑄
+0x3445:zuò # 㑅
+0x3447:zhòu # 㑇
+0x3448:dòng # 㑈
+0x3449:sù # 㑉
+0x344a:yì # 㑊
+0x344b:jiòng,kǒng,qióng # 㑋
+0x344c:wāng,kuāng # 㑌
+0x344d:lěi,lèi # 㑍
+0x344e:nǎo # 㑎
+0x344f:zhù # 㑏
+0x3454:xǔ # 㑔
+0x3458:jiè # 㑘
+0x3459:dié,yǒng # 㑙
+0x345a:nuó # 㑚
+0x345b:sù # 㑛
+0x345c:yì,chì # 㑜
+0x345d:lòng # 㑝
+0x345e:yìng # 㑞
+0x345f:běng,bó,pěng # 㑟
+0x3463:lán # 㑣
+0x3464:miáo # 㑤
+0x3465:yì # 㑥
+0x3466:lì # 㑦
+0x3467:jì # 㑧
+0x3468:yǔ # 㑨
+0x3469:luó # 㑩
+0x346a:chái # 㑪
+0x346e:hún,wén # 㑮
+0x346f:xǔ # 㑯
+0x3470:huì # 㑰
+0x3471:rǎo # 㑱
+0x3473:zhòu # 㑳
+0x3475:hàn,jí,jié,zhǎ,zí # 㑵
+0x3476:xì # 㑶
+0x3477:tài # 㑷
+0x3478:ǎi,yáo,yóu # 㑸
+0x3479:huì # 㑹
+0x347a:jùn # 㑺
+0x347b:mà # 㑻
+0x347c:lüè # 㑼
+0x347d:táng # 㑽
+0x347e:xiáo,yáo # 㑾
+0x347f:zhào # 㑿
+0x3480:zhǎ # 㒀
+0x3481:yǔ,yùn # 㒁
+0x3482:kù,zhuó # 㒂
+0x3483:èr # 㒃
+0x3484:nàng,nèn,rǎn # 㒄
+0x3485:qǐ # 㒅
+0x3486:chì,kè,xì,xiào,yàn # 㒆
+0x3487:mù,wǔ # 㒇
+0x3488:hàn # 㒈
+0x3489:tǎng # 㒉
+0x348a:sè # 㒊
+0x348c:qióng # 㒌
+0x348d:léi,lěi # 㒍
+0x348e:sǎ,sà,tàn # 㒎
+0x3491:huì,kuǐ # 㒑
+0x3492:pú # 㒒
+0x3493:tà # 㒓
+0x3494:shǔ # 㒔
+0x3496:ǒu # 㒖
+0x3497:tái # 㒗
+0x3499:mián # 㒙
+0x349a:wěn # 㒚
+0x349b:diào # 㒛
+0x349c:yú,yǔ # 㒜
+0x349d:miè,wà # 㒝
+0x349e:jùn,kě # 㒞
+0x349f:niǎo # 㒟
+0x34a0:xiè # 㒠
+0x34a1:yóu # 㒡
+0x34a4:shè,chè # 㒤
+0x34a6:lěi # 㒦
+0x34a7:lì # 㒧
+0x34a9:luǒ # 㒩
+0x34ab:jì # 㒫
+0x34b0:quán # 㒰
+0x34b2:cái # 㒲
+0x34b3:liǎng # 㒳
+0x34b4:gǔ # 㒴
+0x34b5:mào # 㒵
+0x34b7:guǎ,xìng,xǔ # 㒷
+0x34b8:suì,xuán # 㒸
+0x34bb:mào # 㒻
+0x34bc:mán # 㒼
+0x34be:shì # 㒾
+0x34bf:lí # 㒿
+0x34c1:wǎng # 㓁
+0x34c2:kòu # 㓂
+0x34c3:chuí,dù,zhà # 㓃
+0x34c4:zhèn # 㓄
+0x34c8:bèi,bìng,fèi,yè # 㓈
+0x34c9:huàn,huó,huò # 㓉
+0x34ca:dòng # 㓊
+0x34cb:gòng # 㓋
+0x34ce:qīn,qǐn,qìn # 㓎
+0x34cf:jiǒng # 㓏
+0x34d0:lù # 㓐
+0x34d1:xìng # 㓑
+0x34d3:nán # 㓓
+0x34d4:xiè # 㓔
+0x34d6:bì,bié # 㓖
+0x34d7:jié,qǐ # 㓗
+0x34d8:sù # 㓘
+0x34dc:yòu # 㓜
+0x34dd:xíng # 㓝
+0x34de:qì,qià,yáo # 㓞
+0x34e0:diàn # 㓠
+0x34e1:fǔ,fǒu # 㓡
+0x34e2:luò # 㓢
+0x34e3:qià # 㓣
+0x34e4:jié,qià # 㓤
+0x34e7:yǎn # 㓧
+0x34e8:cí,cì # 㓨
+0x34ea:lǎng # 㓪
+0x34ed:hé # 㓭
+0x34ef:lí # 㓯
+0x34f0:huà # 㓰
+0x34f1:tóu # 㓱
+0x34f2:piàn # 㓲
+0x34f4:jùn,ruǎn # 㓴
+0x34f5:è # 㓵
+0x34f6:qiè # 㓶
+0x34f7:yì # 㓷
+0x34f8:jué,zhuó # 㓸
+0x34f9:ruì # 㓹
+0x34fa:jiàn # 㓺
+0x34fc:chì,chòng # 㓼
+0x34fd:chóng # 㓽
+0x34fe:chí # 㓾
+0x3500:lüè,qíng # 㔀
+0x3502:lín # 㔂
+0x3503:jué,pì # 㔃
+0x3504:sù # 㔄
+0x3505:xiào # 㔅
+0x3506:zàn # 㔆
+0x3509:zhú # 㔉
+0x350a:dǎn # 㔊
+0x350b:jiàn,lán,làn # 㔋
+0x350c:zhòu # 㔌
+0x350d:duǒ,zhá # 㔍
+0x350e:xiè,yì # 㔎
+0x350f:lì # 㔏
+0x3511:chì,dào,qì,shuì # 㔑
+0x3512:xí # 㔒
+0x3513:jiǎn,xiàn # 㔓
+0x3515:jí,yì # 㔕
+0x3517:fèi # 㔗
+0x3518:chù # 㔘
+0x3519:bǎng,péng # 㔙
+0x351a:kǒu # 㔚
+0x351c:bá,bó # 㔜
+0x351d:liǎng # 㔝
+0x351e:kuài,kuàng,wàng # 㔞
+0x3520:hé,jiá # 㔠
+0x3522:jué # 㔢
+0x3523:léi,lèi # 㔣
+0x3524:shěn # 㔤
+0x3525:pí # 㔥
+0x3526:yǎng # 㔦
+0x3527:xuè # 㔧
+0x3528:bèi # 㔨
+0x3529:è # 㔩
+0x352a:lǔ # 㔪
+0x352d:chè,chí,yí # 㔭
+0x352e:nuó # 㔮
+0x352f:suǎn,xuán # 㔯
+0x3530:héng # 㔰
+0x3531:yǔ # 㔱
+0x3533:guǐ,gùn,huán,jué # 㔳
+0x3534:yì # 㔴
+0x3535:xiàn,xuǎn # 㔵
+0x3536:gòng # 㔶
+0x3537:lòu # 㔷
+0x3539:lè # 㔹
+0x353a:shì # 㔺
+0x353c:sǔn # 㔼
+0x353d:yào,yǒu # 㔽
+0x353e:jié # 㔾
+0x353f:zòu # 㔿
+0x3541:què # 㕁
+0x3542:yín # 㕂
+0x3544:zhì # 㕄
+0x3545:jiǎ # 㕅
+0x3546:hù # 㕆
+0x3547:lá,lā # 㕇
+0x3548:hòu,yǐ # 㕈
+0x3549:kè # 㕉
+0x354b:jìng,qín # 㕋
+0x354c:ài # 㕌
+0x354e:è,kè,kǔn # 㕎
+0x354f:chú # 㕏
+0x3550:xiě # 㕐
+0x3551:chú # 㕑
+0x3552:wéi,wěi,wēi # 㕒
+0x3555:huàn # 㕕
+0x3556:sù # 㕖
+0x3557:yòu # 㕗
+0x3559:jùn,ruì # 㕙
+0x355a:zhǎo # 㕚
+0x355b:xù,yǒu,yòu # 㕛
+0x355c:shǐ # 㕜
+0x355f:kuì # 㕟
+0x3561:hé,hè,huò # 㕡
+0x3562:gài,hài,jù,lǔn,nǒu # 㕢
+0x3563:yǎn,yàn # 㕣
+0x3564:qiú # 㕤
+0x3565:yǐ # 㕥
+0x3566:huà # 㕦
+0x3568:fàn # 㕨
+0x3569:zhàng # 㕩
+0x356a:dǎn # 㕪
+0x356b:fǎng # 㕫
+0x356c:sòng # 㕬
+0x356d:ào,bì # 㕭
+0x356e:fǔ,tiào # 㕮
+0x356f:nè # 㕯
+0x3570:hè # 㕰
+0x3571:yóu # 㕱
+0x3572:huá,yíng # 㕲
+0x3574:chén # 㕴
+0x3575:guó,hún,luǒ # 㕵
+0x3576:ň,ňg # 㕶
+0x3577:huà # 㕷
+0x3578:lì # 㕸
+0x3579:fá # 㕹
+0x357a:háo # 㕺
+0x357b:tòu # 㕻
+0x357d:sì # 㕽
+0x3580:lè,luò # 㖀
+0x3581:lìn # 㖁
+0x3582:yì # 㖂
+0x3583:hǒu,hòu # 㖃
+0x3585:xù # 㖅
+0x3586:qú,qǔ # 㖆
+0x3587:ér # 㖇
+0x358f:nèi # 㖏
+0x3590:wěi # 㖐
+0x3591:xiè # 㖑
+0x3592:tí # 㖒
+0x3593:hóng # 㖓
+0x3594:tǔn # 㖔
+0x3595:bò,niè # 㖕
+0x3596:niè # 㖖
+0x3597:yín # 㖗
+0x359e:wāi # 㖞
+0x359f:shòu # 㖟
+0x35a0:bà,nuò # 㖠
+0x35a1:yè # 㖡
+0x35a2:jí,qí # 㖢
+0x35a3:tòu # 㖣
+0x35a4:hán # 㖤
+0x35a5:jiǒng # 㖥
+0x35a6:dǒng # 㖦
+0x35a7:wěn # 㖧
+0x35a8:lù # 㖨
+0x35a9:sǒu # 㖩
+0x35aa:guó # 㖪
+0x35ab:líng # 㖫
+0x35ad:tiǎn # 㖭
+0x35ae:lún # 㖮
+0x35b6:yè # 㖶
+0x35b7:shí,tí # 㖷
+0x35b8:xué # 㖸
+0x35b9:fèn # 㖹
+0x35ba:chǔn # 㖺
+0x35bb:róu # 㖻
+0x35bc:duǒ,lín,móu # 㖼
+0x35bd:zé,zéi # 㖽
+0x35be:è # 㖾
+0x35bf:xié # 㖿
+0x35c1:è # 㗁
+0x35c2:shěng # 㗂
+0x35c3:wěn,yìn # 㗃
+0x35c4:mán,màn # 㗄
+0x35c5:hú # 㗅
+0x35c6:gé,kài # 㗆
+0x35c7:xiá,ya # 㗇
+0x35c8:màn # 㗈
+0x35c9:bì,è,lüè # 㗉
+0x35ca:jí,qì,bī,léi # 㗊
+0x35cb:hóu # 㗋
+0x35cc:zhì # 㗌
+0x35d1:bài # 㗑
+0x35d2:ài # 㗒
+0x35d5:gòu # 㗕
+0x35d6:dàn # 㗖
+0x35d7:bǎi # 㗗
+0x35d8:bó,fù # 㗘
+0x35d9:nà,chú,zhōu # 㗙
+0x35da:lì # 㗚
+0x35db:xiào # 㗛
+0x35dc:xiù # 㗜
+0x35e2:dòng,hóng # 㗢
+0x35e3:tì # 㗣
+0x35e4:cù # 㗤
+0x35e5:kuò # 㗥
+0x35e6:láo # 㗦
+0x35e7:zhì # 㗧
+0x35e8:ǎi # 㗨
+0x35e9:xī # 㗩
+0x35eb:qiè # 㗫
+0x35f0:chù,cóng # 㗰
+0x35f1:jí # 㗱
+0x35f2:huò,xì # 㗲
+0x35f3:tǎ # 㗳
+0x35f4:yán # 㗴
+0x35f5:xù # 㗵
+0x35f7:sǎi # 㗷
+0x35fc:yè # 㗼
+0x35fd:xiǎng # 㗽
+0x35ff:hé,xià,xiā # 㗿
+0x3600:zuò # 㘀
+0x3601:yì # 㘁
+0x3602:cí # 㘂
+0x3605:xián # 㘅
+0x3606:tái # 㘆
+0x3607:róng # 㘇
+0x3608:yī,yì # 㘈
+0x3609:zhì # 㘉
+0x360a:yì # 㘊
+0x360b:xián # 㘋
+0x360c:jù # 㘌
+0x360d:jí,qì # 㘍
+0x360e:hǎn,hàn # 㘎
+0x3610:pào,pěng # 㘐
+0x3611:lì # 㘑
+0x3613:lán # 㘓
+0x3614:cǎn,sǎi # 㘔
+0x3615:hǎn,lán # 㘕
+0x3616:yán # 㘖
+0x3619:yán,yǎn # 㘙
+0x361a:hǎn # 㘚
+0x361c:chǐ,chóu,chù # 㘜
+0x361d:niǎn,niè,nà,lǎn # 㘝
+0x361e:huò # 㘞
+0x3620:bì,mì # 㘠
+0x3621:xiá # 㘡
+0x3622:wěng # 㘢
+0x3623:xuán,yuán # 㘣
+0x3625:yóu # 㘥
+0x3626:qín # 㘦
+0x3627:xù # 㘧
+0x3628:nèi # 㘨
+0x3629:bì # 㘩
+0x362a:hào # 㘪
+0x362b:jǐng # 㘫
+0x362c:ào # 㘬
+0x362d:ào # 㘭
+0x3632:jú # 㘲
+0x3634:zuò # 㘴
+0x3635:bù # 㘵
+0x3636:jié # 㘶
+0x3637:ài # 㘷
+0x3638:zàng # 㘸
+0x3639:cí # 㘹
+0x363a:fá # 㘺
+0x363f:niè # 㘿
+0x3640:liù # 㙀
+0x3641:mǎng,méi,mèi,mù,nà # 㙁
+0x3642:duì # 㙂
+0x3644:bì # 㙄
+0x3645:bǎo # 㙅
+0x3647:chù # 㙇
+0x3648:hán,xià # 㙈
+0x3649:tiǎn # 㙉
+0x364a:cháng,zhàng # 㙊
+0x364f:fù # 㙏
+0x3650:duǒ # 㙐
+0x3651:yǔ # 㙑
+0x3652:yě # 㙒
+0x3653:kuí # 㙓
+0x3654:hán # 㙔
+0x3655:kuài # 㙕
+0x3657:kuài # 㙗
+0x3659:lǒng # 㙙
+0x365b:bǔ # 㙛
+0x365c:chí,tái # 㙜
+0x365d:xié # 㙝
+0x365e:niè # 㙞
+0x365f:lǎng # 㙟
+0x3660:yì,yī # 㙠
+0x3662:mán,mén # 㙢
+0x3663:zhàng # 㙣
+0x3664:xià # 㙤
+0x3665:gǔn # 㙥
+0x3668:jì,qí # 㙨
+0x3669:liáo # 㙩
+0x366a:yè,yì # 㙪
+0x366b:jí # 㙫
+0x366c:yín # 㙬
+0x366e:dā,da # 㙮
+0x366f:yì # 㙯
+0x3670:xiè # 㙰
+0x3671:hào # 㙱
+0x3672:yǒng # 㙲
+0x3673:hǎn,hé,kǎn # 㙳
+0x3674:chàn,zhàn # 㙴
+0x3675:tái # 㙵
+0x3676:táng # 㙶
+0x3677:zhí # 㙷
+0x3678:bào,bó,pú # 㙸
+0x3679:méng # 㙹
+0x367a:guì,kuí # 㙺
+0x367b:chán,qiè,zàn # 㙻
+0x367c:lěi # 㙼
+0x367e:xì,xué # 㙾
+0x3681:qiáo,qiào,qù # 㚁
+0x3682:ráng # 㚂
+0x3683:yún,yùn,yūn # 㚃
+0x3685:lóng # 㚅
+0x3686:fù # 㚆
+0x3689:gǔ # 㚉
+0x368c:huà,huǒ # 㚌
+0x368d:guó,kuǐ,kuì # 㚍
+0x368f:gǎo # 㚏
+0x3690:tào # 㚐
+0x3692:shǎn # 㚒
+0x3693:lái,lǎi # 㚓
+0x3694:niè # 㚔
+0x3695:fú,bì # 㚕
+0x3696:gǎo # 㚖
+0x3697:qié,xié # 㚗
+0x3698:bàn # 㚘
+0x369b:xì # 㚛
+0x369c:xù,yù # 㚜
+0x369d:kuí # 㚝
+0x369e:měng,shěn,yìng,yùn # 㚞
+0x369f:chuò # 㚟
+0x36a1:jǐ # 㚡
+0x36a2:nú # 㚢
+0x36a3:jiāo,xiáo # 㚣
+0x36a4:yì # 㚤
+0x36a5:yú # 㚥
+0x36a6:yí # 㚦
+0x36a7:yǎn # 㚧
+0x36a9:rǎn # 㚩
+0x36aa:hào # 㚪
+0x36ab:shà,zhà # 㚫
+0x36ad:yóu # 㚭
+0x36af:xín,xún # 㚯
+0x36b0:bǐ # 㚰
+0x36b2:diǎn,shàn,chān # 㚲
+0x36b4:bù # 㚴
+0x36b6:sì # 㚶
+0x36b7:ěr,nǎi # 㚷
+0x36b9:mǎo # 㚹
+0x36ba:yùn # 㚺
+0x36bd:qiǎo # 㚽
+0x36bf:páo # 㚿
+0x36c2:nuǒ # 㛂
+0x36c3:jié # 㛃
+0x36c5:èr # 㛅
+0x36c6:duǒ,duò # 㛆
+0x36ca:duǒ # 㛊
+0x36cd:qiè # 㛍
+0x36cf:òu,qiú # 㛏
+0x36d0:sǎo # 㛐
+0x36d1:càn # 㛑
+0x36d2:dòu # 㛒
+0x36d4:péng # 㛔
+0x36d5:yì # 㛕
+0x36d7:zuò,qiē # 㛗
+0x36d8:pò # 㛘
+0x36d9:qiè,qín,shěn,shèn # 㛙
+0x36da:tǒng # 㛚
+0x36db:xìn,zhèn # 㛛
+0x36dc:yóu # 㛜
+0x36dd:bèi,bèng # 㛝
+0x36de:lòng # 㛞
+0x36e5:tà # 㛥
+0x36e6:lǎn # 㛦
+0x36e7:mǎn # 㛧
+0x36e8:qiǎng # 㛨
+0x36e9:zhóu # 㛩
+0x36ea:yàn,yuán # 㛪
+0x36ec:lù # 㛬
+0x36ee:sǎo # 㛮
+0x36ef:miǎn # 㛯
+0x36f1:ruì,wěi # 㛱
+0x36f2:fà # 㛲
+0x36f3:chà,yì # 㛳
+0x36f4:nǎo # 㛴
+0x36f6:chóu,tán,tàn # 㛶
+0x36f8:shù # 㛸
+0x36f9:pián # 㛹
+0x36fb:kuǐ # 㛻
+0x36fc:shà,chā # 㛼
+0x36fe:xián # 㛾
+0x36ff:zhì # 㛿
+0x3703:liàn,liáo,máng # 㜃
+0x3704:xún # 㜄
+0x3705:xù # 㜅
+0x3706:mì # 㜆
+0x3707:huì,yè # 㜇
+0x3708:mù # 㜈
+0x370a:pàng,zhǎn # 㜊
+0x370b:yì # 㜋
+0x370c:gòu # 㜌
+0x370d:táng # 㜍
+0x370e:xī,xì # 㜎
+0x370f:yún # 㜏
+0x3710:shù # 㜐
+0x3711:fú,pó # 㜑
+0x3712:yì # 㜒
+0x3713:dá # 㜓
+0x3715:lián # 㜕
+0x3716:cáo # 㜖
+0x3717:cǎn,chú,xuàn # 㜗
+0x3718:jù # 㜘
+0x3719:lù # 㜙
+0x371a:sù # 㜚
+0x371b:nèn,ruǎn # 㜛
+0x371c:ào # 㜜
+0x371d:ǎn,àn # 㜝
+0x371e:qiàn # 㜞
+0x3723:rán,niàn # 㜣
+0x3724:shěn,niǎn # 㜤
+0x3725:mái,mó # 㜥
+0x3726:hàn,niè,sì,xié,xín # 㜦
+0x3727:yuè # 㜧
+0x3728:ér,nái # 㜨
+0x3729:ào # 㜩
+0x372a:xiǎn # 㜪
+0x372b:mà,méi,měi # 㜫
+0x372e:làn # 㜮
+0x3730:yuè # 㜰
+0x3731:dòng,zhì # 㜱
+0x3732:wěng,yíng # 㜲
+0x3733:huái # 㜳
+0x3734:mèng # 㜴
+0x3735:niǎo # 㜵
+0x3736:fàn # 㜶
+0x3737:mí,nǎi,xiǎn # 㜷
+0x3738:niè # 㜸
+0x3739:qú # 㜹
+0x373a:zàn # 㜺
+0x373b:liàn # 㜻
+0x373c:zhí,zhì # 㜼
+0x373d:zǐ # 㜽
+0x373e:hái # 㜾
+0x373f:xù # 㜿
+0x3740:hào # 㝀
+0x3741:xún # 㝁
+0x3742:zhì # 㝂
+0x3743:fàn,miǎn,wǎn # 㝃
+0x3744:chún,qì,rùn # 㝄
+0x3745:gòu # 㝅
+0x3747:chún # 㝇
+0x3748:luán # 㝈
+0x3749:zhù # 㝉
+0x374a:shǒu # 㝊
+0x374b:liáo,liǎo,liú # 㝋
+0x374c:jié,jiù,zhòu # 㝌
+0x374d:xiě # 㝍
+0x374e:dìng # 㝎
+0x374f:jiè # 㝏
+0x3750:róng # 㝐
+0x3751:máng,páng # 㝑
+0x3753:gé,kè # 㝓
+0x3754:yào # 㝔
+0x3755:níng # 㝕
+0x3756:yí,yín # 㝖
+0x3757:láng # 㝗
+0x3758:yóng # 㝘
+0x3759:yín # 㝙
+0x375b:sù # 㝛
+0x375d:lín # 㝝
+0x375e:yā # 㝞
+0x375f:máo,mào,kuān # 㝟
+0x3760:míng # 㝠
+0x3761:zuì # 㝡
+0x3762:yǔ # 㝢
+0x3763:yè,yì # 㝣
+0x3764:gòu # 㝤
+0x3765:mǐ # 㝥
+0x3766:jùn,yá # 㝦
+0x3767:wěn # 㝧
+0x376a:diàn,dǐng # 㝪
+0x376b:lóng # 㝫
+0x376d:xǐng # 㝭
+0x376e:cuì # 㝮
+0x376f:qiáo # 㝯
+0x3770:mián # 㝰
+0x3771:mèng # 㝱
+0x3772:qǐn # 㝲
+0x3774:wán # 㝴
+0x3775:dé # 㝵
+0x3776:ài,dé # 㝶
+0x3778:biàn # 㝸
+0x3779:nóu # 㝹
+0x377a:lián,lín # 㝺
+0x377b:jǐn # 㝻
+0x377d:chuí,shuǐ,zhuǐ # 㝽
+0x377e:zuǒ # 㝾
+0x377f:bó,bǒ,fù,qiàn # 㝿
+0x3781:yào # 㞁
+0x3782:tuǐ # 㞂
+0x3783:jí # 㞃
+0x3785:guǒ # 㞅
+0x3786:jǐ # 㞆
+0x3787:wěi # 㞇
+0x378a:xù # 㞊
+0x378b:niǎn # 㞋
+0x378c:yùn # 㞌
+0x378e:bǎ,fú,pá # 㞎
+0x378f:zhé # 㞏
+0x3790:jū # 㞐
+0x3791:wěi # 㞑
+0x3792:xì,xiè # 㞒
+0x3793:qǐ,qì # 㞓
+0x3794:yí # 㞔
+0x3795:xiè # 㞕
+0x3796:cì # 㞖
+0x3797:qiú # 㞗
+0x3798:tún # 㞘
+0x3799:niào # 㞙
+0x379a:qì,zhǎ # 㞚
+0x379b:jǐ # 㞛
+0x379f:diàn # 㞟
+0x37a0:láo,liáo # 㞠
+0x37a1:zhǎn # 㞡
+0x37a4:yín # 㞤
+0x37a5:cén # 㞥
+0x37a6:jǐ # 㞦
+0x37a7:huì # 㞧
+0x37a8:zǎi,zǐ # 㞨
+0x37a9:lán # 㞩
+0x37aa:náo # 㞪
+0x37ab:jù,zǒu # 㞫
+0x37ac:qìn # 㞬
+0x37ad:dài # 㞭
+0x37af:jié # 㞯
+0x37b0:xǔ # 㞰
+0x37b2:yòng # 㞲
+0x37b3:dǒu # 㞳
+0x37b4:chí # 㞴
+0x37b6:mǐn # 㞶
+0x37b7:huáng # 㞷
+0x37b8:suì # 㞸
+0x37b9:kě # 㞹
+0x37ba:zú # 㞺
+0x37bb:hào # 㞻
+0x37bc:chéng,shèng,zhé # 㞼
+0x37bd:xuè # 㞽
+0x37be:ní,yì # 㞾
+0x37bf:chì,qí # 㞿
+0x37c0:lián # 㟀
+0x37c1:àn # 㟁
+0x37c2:chǐ,mǔ # 㟂
+0x37c4:xiáng # 㟄
+0x37c5:yáng # 㟅
+0x37c6:huá # 㟆
+0x37c7:cuó,cuǒ # 㟇
+0x37c8:qiú # 㟈
+0x37c9:láo # 㟉
+0x37ca:fú # 㟊
+0x37cb:duì # 㟋
+0x37cc:máng # 㟌
+0x37cd:láng # 㟍
+0x37ce:tuǒ # 㟎
+0x37cf:hán # 㟏
+0x37d0:mǎng # 㟐
+0x37d1:bó # 㟑
+0x37d3:qí # 㟓
+0x37d4:hán # 㟔
+0x37d6:lòng # 㟖
+0x37d8:tiáo # 㟘
+0x37d9:lǎo,zé,zhái # 㟙
+0x37da:qí # 㟚
+0x37db:zàn # 㟛
+0x37dc:mí # 㟜
+0x37dd:péi,pǒu # 㟝
+0x37de:zhàn # 㟞
+0x37df:xiàng # 㟟
+0x37e0:gǎng # 㟠
+0x37e2:qí # 㟢
+0x37e4:lù # 㟤
+0x37e6:yùn # 㟦
+0x37e7:è,niè,xùn # 㟧
+0x37e8:quán # 㟨
+0x37e9:mín,mǐn,wěn # 㟩
+0x37ea:wěi # 㟪
+0x37eb:quán # 㟫
+0x37ec:shǔ,sǒu # 㟬
+0x37ed:mín # 㟭
+0x37f0:mǐng # 㟰
+0x37f1:yǎo # 㟱
+0x37f2:jué,yuán # 㟲
+0x37f3:lì # 㟳
+0x37f4:kuài,kuǐ,wěi # 㟴
+0x37f5:gǎng # 㟵
+0x37f6:yuán # 㟶
+0x37f7:da # 㟷
+0x37f9:láo # 㟹
+0x37fa:lóu # 㟺
+0x37fb:qiàn # 㟻
+0x37fc:áo # 㟼
+0x37fd:biǎo # 㟽
+0x37ff:máng,mǎng # 㟿
+0x3800:dǎo # 㠀
+0x3802:áo # 㠂
+0x3804:xí # 㠄
+0x3805:fú,fù # 㠅
+0x3807:jiù # 㠇
+0x3808:rùn # 㠈
+0x3809:tóng # 㠉
+0x380a:qū # 㠊
+0x380b:è # 㠋
+0x380d:jí,jié,qì # 㠍
+0x380e:qì # 㠎
+0x380f:huá # 㠏
+0x3810:jiào # 㠐
+0x3811:zuì # 㠑
+0x3812:biǎo # 㠒
+0x3813:méng # 㠓
+0x3814:bài # 㠔
+0x3815:wěi # 㠕
+0x3816:jì,yǐ # 㠖
+0x3817:ào,wò # 㠗
+0x3818:yǔ # 㠘
+0x3819:háo # 㠙
+0x381a:duì,zhuó # 㠚
+0x381b:wò # 㠛
+0x381c:nì # 㠜
+0x381d:cuán # 㠝
+0x381f:lí # 㠟
+0x3820:lú # 㠠
+0x3821:niǎo # 㠡
+0x3822:huái # 㠢
+0x3823:lài,lì # 㠣
+0x3825:lǜ # 㠥
+0x3827:mí,mǐ # 㠧
+0x3828:yù # 㠨
+0x382a:jù # 㠪
+0x382d:zhǎn,zhàn # 㠭
+0x382f:yǐ # 㠯
+0x3831:jì,qǐ # 㠱
+0x3832:bǐ # 㠲
+0x3834:rèn # 㠴
+0x3836:fán # 㠶
+0x3837:gé # 㠷
+0x3838:kù # 㠸
+0x3839:jiè # 㠹
+0x383a:miáo # 㠺
+0x383d:tóng # 㠽
+0x383f:cǐ # 㠿
+0x3840:bì # 㡀
+0x3841:kǎi,kuà # 㡁
+0x3842:lì # 㡂
+0x3844:sǔn,xún # 㡄
+0x3845:nuǒ # 㡅
+0x3847:jí,zhé # 㡇
+0x3848:mén,wèn # 㡈
+0x3849:xián,yán # 㡉
+0x384a:qià,qiǎn # 㡊
+0x384b:è,yé # 㡋
+0x384c:mào,mèi # 㡌
+0x384f:tóu,shū # 㡏
+0x3851:qiǎo # 㡑
+0x3854:wù,mù # 㡔
+0x3856:chuáng # 㡖
+0x3857:tí # 㡗
+0x3858:lián # 㡘
+0x3859:bī,pí # 㡙
+0x385b:máng # 㡛
+0x385c:xuě # 㡜
+0x385d:fèng,fú # 㡝
+0x385e:lěi,lóu # 㡞
+0x3860:zhèng # 㡠
+0x3861:chú # 㡡
+0x3862:màn # 㡢
+0x3863:lóng # 㡣
+0x3865:yǐn # 㡥
+0x3867:zhèng # 㡧
+0x3868:qiān,jiān # 㡨
+0x3869:luán # 㡩
+0x386a:nié # 㡪
+0x386b:yì # 㡫
+0x386d:jì # 㡭
+0x386e:jí # 㡮
+0x386f:zhái,dù # 㡯
+0x3870:yǔ # 㡰
+0x3871:jiǔ # 㡱
+0x3872:huán # 㡲
+0x3873:dǐ,zhé,zhǐ # 㡳
+0x3875:líng # 㡵
+0x3876:zhǐ # 㡶
+0x3877:běn # 㡷
+0x3878:zhǎ,zhà # 㡸
+0x3879:cì,jū # 㡹
+0x387a:dàn # 㡺
+0x387b:liào # 㡻
+0x387c:yì # 㡼
+0x387d:zhào # 㡽
+0x387e:xiàn # 㡾
+0x387f:chì # 㡿
+0x3880:cì,zì # 㢀
+0x3881:chǐ # 㢁
+0x3882:yǎn # 㢂
+0x3883:láng # 㢃
+0x3884:dòu # 㢄
+0x3885:lòng # 㢅
+0x3886:chán # 㢆
+0x3888:tuí # 㢈
+0x3889:chá # 㢉
+0x388a:ǎi # 㢊
+0x388b:chǐ # 㢋
+0x388d:yíng,yǐng # 㢍
+0x388e:chà,zé,zhái,zhé # 㢎
+0x388f:tóu # 㢏
+0x3891:tuí # 㢑
+0x3892:chá # 㢒
+0x3893:yǎo,zhàng # 㢓
+0x3894:zǒng # 㢔
+0x3897:qiào # 㢗
+0x3898:lián # 㢘
+0x3899:qín # 㢙
+0x389a:lǔ # 㢚
+0x389b:yàn # 㢛
+0x389e:yì # 㢞
+0x389f:chǎn,chān # 㢟
+0x38a0:jiǒng,jùn # 㢠
+0x38a1:jiǎng # 㢡
+0x38a3:jìng,qíng # 㢣
+0x38a5:dòng # 㢥
+0x38a7:juàn # 㢧
+0x38a8:hàn # 㢨
+0x38a9:dì # 㢩
+0x38ac:hóng # 㢬
+0x38ae:chí # 㢮
+0x38af:mín # 㢯
+0x38b0:bì,huán # 㢰
+0x38b2:xùn # 㢲
+0x38b3:lú # 㢳
+0x38b5:shè,xié # 㢵
+0x38b6:bì # 㢶
+0x38b8:bì # 㢸
+0x38ba:xián # 㢺
+0x38bb:wěi # 㢻
+0x38bc:biè # 㢼
+0x38bd:ěr # 㢽
+0x38be:juàn # 㢾
+0x38c0:zhèn # 㣀
+0x38c1:bèi # 㣁
+0x38c2:yì # 㣂
+0x38c3:yǔ,yù # 㣃
+0x38c4:qú # 㣄
+0x38c5:zàn # 㣅
+0x38c6:mí,mí,pèi # 㣆
+0x38c7:nǐ,yì # 㣇
+0x38c8:sì # 㣈
+0x38cc:shàn # 㣌
+0x38cd:tái # 㣍
+0x38ce:mù # 㣎
+0x38cf:jìng # 㣏
+0x38d0:biàn # 㣐
+0x38d1:róng # 㣑
+0x38d2:cèng # 㣒
+0x38d3:càn # 㣓
+0x38d9:dí # 㣙
+0x38da:tóng,tǒng # 㣚
+0x38db:tà # 㣛
+0x38dc:xíng # 㣜
+0x38de:duó,duò # 㣞
+0x38df:xì # 㣟
+0x38e0:tóng # 㣠
+0x38e2:tí # 㣢
+0x38e3:shǎn,shàn # 㣣
+0x38e4:jiàn # 㣤
+0x38e5:zhì # 㣥
+0x38e7:yìn,yǒng # 㣧
+0x38ea:huǎn,kuò # 㣪
+0x38eb:zhǒng # 㣫
+0x38ec:qì # 㣬
+0x38ef:xiè # 㣯
+0x38f0:xiè # 㣰
+0x38f1:zé,zuò # 㣱
+0x38f2:wéi # 㣲
+0x38f5:tà # 㣵
+0x38f6:zhān # 㣶
+0x38f7:nìng # 㣷
+0x38fb:yì # 㣻
+0x38fc:rěn # 㣼
+0x38fd:shù # 㣽
+0x38fe:chà # 㣾
+0x38ff:zhuó # 㣿
+0x3901:miǎn,tiǎn # 㤁
+0x3902:jí # 㤂
+0x3903:fáng # 㤃
+0x3904:pèi # 㤄
+0x3905:ài # 㤅
+0x3906:fàn # 㤆
+0x3907:ǎo,fó,wù # 㤇
+0x3908:qìn # 㤈
+0x3909:qiā,yá # 㤉
+0x390a:xiào,yáo # 㤊
+0x390d:qiǎo # 㤍
+0x390f:tóng # 㤏
+0x3911:yōu # 㤑
+0x3913:bèn # 㤓
+0x3914:fú,fù # 㤔
+0x3915:chù # 㤕
+0x3916:zhù # 㤖
+0x3918:chù,cù,zhòu # 㤘
+0x391a:háng # 㤚
+0x391b:nín,rèn # 㤛
+0x391c:jué,yù # 㤜
+0x391e:chà # 㤞
+0x391f:kǒng,tòu # 㤟
+0x3920:liè # 㤠
+0x3921:lì # 㤡
+0x3922:xù,yù # 㤢
+0x3924:yú,yǔ # 㤤
+0x3925:hài # 㤥
+0x3926:lì # 㤦
+0x3927:hóu,hòu # 㤧
+0x3928:gǒng,qióng # 㤨
+0x3929:kè # 㤩
+0x392a:yuàn # 㤪
+0x392b:dé # 㤫
+0x392c:huì,kuì # 㤬
+0x392e:kuáng,guàng # 㤮
+0x392f:jiǒng,jùn # 㤯
+0x3930:zǎn,zuò # 㤰
+0x3931:fù # 㤱
+0x3932:qiè,qù # 㤲
+0x3933:běi # 㤳
+0x3934:xí # 㤴
+0x3935:cí # 㤵
+0x3936:páng # 㤶
+0x3938:xì # 㤸
+0x3939:qiú # 㤹
+0x393a:huǎng # 㤺
+0x393d:chóu # 㤽
+0x393e:sàn # 㤾
+0x3940:dé # 㥀
+0x3941:dé,zhí,zhòu # 㥁
+0x3942:tè # 㥂
+0x3943:mèn # 㥃
+0x3944:líng # 㥄
+0x3945:shòu # 㥅
+0x3946:diàn,tuì # 㥆
+0x3947:cán,càn # 㥇
+0x3948:dié # 㥈
+0x3949:chè,chì # 㥉
+0x394a:péng # 㥊
+0x394c:jú # 㥌
+0x394d:jì # 㥍
+0x394e:lái,lí # 㥎
+0x394f:tiǎn # 㥏
+0x3950:yuàn # 㥐
+0x3952:cǎi # 㥒
+0x3953:qǐ # 㥓
+0x3954:yú,yù # 㥔
+0x3955:lián # 㥕
+0x395a:yú # 㥚
+0x395b:jí,kè,sù # 㥛
+0x395c:wèi # 㥜
+0x395d:mǐ,miǎn # 㥝
+0x395e:cuì,qiàn,suì # 㥞
+0x395f:xié # 㥟
+0x3960:xǔ # 㥠
+0x3961:xì # 㥡
+0x3962:qiú # 㥢
+0x3963:huì # 㥣
+0x3965:yú # 㥥
+0x3966:qiè,xiá,xiǎn # 㥦
+0x3967:shùn # 㥧
+0x3968:chuí,shuì,wěi # 㥨
+0x3969:duǒ # 㥩
+0x396a:lóu # 㥪
+0x396c:páng # 㥬
+0x396d:tài # 㥭
+0x396e:zhòu # 㥮
+0x396f:yǐn # 㥯
+0x3971:fěi # 㥱
+0x3972:shèn,yín # 㥲
+0x3973:yuán # 㥳
+0x3974:yí,yǐ # 㥴
+0x3975:hùn # 㥵
+0x3976:sè # 㥶
+0x3977:yè,yì # 㥷
+0x3978:mǐn # 㥸
+0x3979:fěn # 㥹
+0x397a:hé,hè # 㥺
+0x397c:yǐn # 㥼
+0x397d:cè,zé # 㥽
+0x397e:nì # 㥾
+0x397f:ào # 㥿
+0x3980:féng # 㦀
+0x3981:lián # 㦁
+0x3982:cháng,tàng # 㦂
+0x3983:chǎn # 㦃
+0x3984:má,mì # 㦄
+0x3985:diē,dì # 㦅
+0x3987:lù # 㦇
+0x3989:yì # 㦉
+0x398a:huá # 㦊
+0x398c:tuì,xù,hū # 㦌
+0x398d:è # 㦍
+0x398e:huà # 㦎
+0x398f:sǔn,xuàn # 㦏
+0x3990:nì # 㦐
+0x3991:liǎn,xiàn # 㦑
+0x3992:lí # 㦒
+0x3993:xiàn # 㦓
+0x3994:yàn # 㦔
+0x3995:lóng # 㦕
+0x3996:mèn # 㦖
+0x3997:jiàn,jìn # 㦗
+0x399a:biǎn # 㦚
+0x399b:yú,yǔ # 㦛
+0x399c:huò,xuè # 㦜
+0x399d:miǎo # 㦝
+0x399e:chóu # 㦞
+0x399f:hài,mái # 㦟
+0x39a1:lè # 㦡
+0x39a2:jié,qì # 㦢
+0x39a3:wèi # 㦣
+0x39a4:yì # 㦤
+0x39a5:huán,xiǎn # 㦥
+0x39a6:hè # 㦦
+0x39a7:cǎn # 㦧
+0x39a8:lán,làn # 㦨
+0x39a9:yǐn # 㦩
+0x39aa:xiè # 㦪
+0x39ac:luǒ # 㦬
+0x39ad:líng # 㦭
+0x39ae:qián # 㦮
+0x39af:huò # 㦯
+0x39b1:wǒ # 㦱
+0x39b4:gé,qià # 㦴
+0x39b6:dié # 㦶
+0x39b7:yǒng # 㦷
+0x39b8:jǐ # 㦸
+0x39b9:àng,yáng,yǐng # 㦹
+0x39ba:rǔ,rù # 㦺
+0x39bb:xí,zhé # 㦻
+0x39bc:shuàng # 㦼
+0x39bd:xù,yù # 㦽
+0x39be:yí # 㦾
+0x39bf:hù # 㦿
+0x39c0:jí # 㧀
+0x39c1:qù # 㧁
+0x39c2:tián # 㧂
+0x39c4:qiǎn,qiú # 㧄
+0x39c5:mù,dāo # 㧅
+0x39c7:mǎo # 㧇
+0x39c8:yǐn,yìn # 㧈
+0x39c9:gài,kuì # 㧉
+0x39ca:bá,pō # 㧊
+0x39cb:xiǎn,xuǎn # 㧋
+0x39cc:mào # 㧌
+0x39cd:fǎng # 㧍
+0x39ce:yá,yà,qiā # 㧎
+0x39d0:sǒng # 㧐
+0x39d1:wéi,wěi # 㧑
+0x39d2:xué,yù,yuè # 㧒
+0x39d4:guài # 㧔
+0x39d5:jiù,liǔ,yú # 㧕
+0x39d6:è # 㧖
+0x39d7:zǐ,jǐ,zhǐ # 㧗
+0x39d8:cuì,nǎo,zì # 㧘
+0x39d9:bì # 㧙
+0x39da:wǎ # 㧚
+0x39dc:liè # 㧜
+0x39df:kuǎi # 㧟
+0x39e1:hài # 㧡
+0x39e3:zhù # 㧣
+0x39e4:chòng # 㧤
+0x39e5:xiǎn # 㧥
+0x39e6:xuàn # 㧦
+0x39e8:qiú # 㧨
+0x39e9:pèi # 㧩
+0x39ea:guǐ # 㧪
+0x39eb:ér # 㧫
+0x39ec:gǒng # 㧬
+0x39ed:qióng # 㧭
+0x39ef:lǎo # 㧯
+0x39f0:lì # 㧰
+0x39f1:chèn,ná,nì,nì,tiàn # 㧱
+0x39f2:sǎn # 㧲
+0x39f3:bǎi,bó,zhuò # 㧳
+0x39f4:wǒ # 㧴
+0x39f5:póu,pǒu # 㧵
+0x39f7:duò,tùn # 㧷
+0x39f9:tè # 㧹
+0x39fa:tà # 㧺
+0x39fb:zhǐ,zhuó,zú # 㧻
+0x39fc:biào # 㧼
+0x39fd:gù,hú # 㧽
+0x3a00:bǐng # 㨀
+0x3a01:zhí,zhì # 㨁
+0x3a02:dǒng # 㨂
+0x3a03:chéng,duǐ # 㨃
+0x3a04:zhào # 㨄
+0x3a05:nèi,ruì # 㨅
+0x3a06:lǐn # 㨆
+0x3a07:pó # 㨇
+0x3a08:jǐ # 㨈
+0x3a09:mǐn # 㨉
+0x3a0a:wěi # 㨊
+0x3a0b:chě,lè,zhèn # 㨋
+0x3a0c:gòu,rú,rǔ # 㨌
+0x3a0e:rú,ruán # 㨎
+0x3a10:bǔ,péi # 㨐
+0x3a12:kuí,wěi,xié # 㨒
+0x3a13:láo,liáo # 㨓
+0x3a14:hàn # 㨔
+0x3a15:yíng # 㨕
+0x3a16:zhì # 㨖
+0x3a17:jié # 㨗
+0x3a18:xǐng # 㨘
+0x3a19:xié # 㨙
+0x3a1a:xún # 㨚
+0x3a1b:shǎn # 㨛
+0x3a1c:qián # 㨜
+0x3a1d:xiè # 㨝
+0x3a1e:sù # 㨞
+0x3a1f:hái # 㨟
+0x3a20:mì # 㨠
+0x3a21:hún # 㨡
+0x3a24:huì,kuǎi,wài # 㨤
+0x3a25:nà # 㨥
+0x3a26:sǒng # 㨦
+0x3a27:bèn # 㨧
+0x3a28:liù # 㨨
+0x3a29:jié # 㨩
+0x3a2a:huàng # 㨪
+0x3a2b:lǎn # 㨫
+0x3a2d:hù # 㨭
+0x3a2e:dōu # 㨮
+0x3a2f:huò,kuò # 㨯
+0x3a30:gé,gǔn,hùn,huò,jié # 㨰
+0x3a31:yáo # 㨱
+0x3a32:cè # 㨲
+0x3a33:guǐ # 㨳
+0x3a34:jiàn # 㨴
+0x3a35:jiǎn # 㨵
+0x3a36:chóu,dǎo,zhǒu,zhòu # 㨶
+0x3a37:jìn # 㨷
+0x3a38:mà # 㨸
+0x3a39:huì # 㨹
+0x3a3a:mén,mì,miǎn # 㨺
+0x3a3b:cán,shǎn,zàn # 㨻
+0x3a3c:lüè # 㨼
+0x3a3d:pǐ,pì,qiǎo # 㨽
+0x3a3e:yàng # 㨾
+0x3a3f:jù # 㨿
+0x3a40:jù # 㩀
+0x3a41:què # 㩁
+0x3a44:shāi # 㩄
+0x3a46:jiù # 㩆
+0x3a47:huà,huò # 㩇
+0x3a48:xiàn,yǔn # 㩈
+0x3a49:xié # 㩉
+0x3a4b:sù,xiāo # 㩋
+0x3a4c:fèi # 㩌
+0x3a4d:cè # 㩍
+0x3a4e:yè # 㩎
+0x3a52:qín # 㩒
+0x3a53:huǐ # 㩓
+0x3a54:tún # 㩔
+0x3a56:qiáng,tiáo # 㩖
+0x3a57:xí,xié # 㩗
+0x3a58:yǐ # 㩘
+0x3a5a:méng # 㩚
+0x3a5b:tuán # 㩛
+0x3a5c:lǎn # 㩜
+0x3a5d:háo # 㩝
+0x3a5e:cì # 㩞
+0x3a5f:zhài # 㩟
+0x3a60:piǎo # 㩠
+0x3a61:luǒ # 㩡
+0x3a62:mí,miè # 㩢
+0x3a66:xié # 㩦
+0x3a67:bó # 㩧
+0x3a68:huì # 㩨
+0x3a69:qǐ,qǐng # 㩩
+0x3a6a:xié,xìn,yé # 㩪
+0x3a6d:bó,jiǎo,xiào # 㩭
+0x3a6e:qián,xián # 㩮
+0x3a6f:bǎn,pán,pó # 㩯
+0x3a70:jiǎo,qiáo,xiǔ # 㩰
+0x3a71:jué # 㩱
+0x3a72:kǔn,quán # 㩲
+0x3a73:sǒng # 㩳
+0x3a74:jú # 㩴
+0x3a75:è # 㩵
+0x3a76:niè,nǐng # 㩶
+0x3a78:dié # 㩸
+0x3a79:dié,zhá # 㩹
+0x3a7b:guǐ,qī # 㩻
+0x3a7d:qí # 㩽
+0x3a7e:chuí # 㩾
+0x3a80:yú # 㪀
+0x3a81:qín # 㪁
+0x3a83:hé # 㪃
+0x3a84:fú # 㪄
+0x3a86:dǐ # 㪆
+0x3a87:xiàn # 㪇
+0x3a88:guì # 㪈
+0x3a89:hé # 㪉
+0x3a8a:qún # 㪊
+0x3a8b:hàn # 㪋
+0x3a8c:tǒng,yú,yǔ # 㪌
+0x3a8d:bó # 㪍
+0x3a8e:shǎn # 㪎
+0x3a8f:bǐ # 㪏
+0x3a90:lù # 㪐
+0x3a91:yè # 㪑
+0x3a92:ní # 㪒
+0x3a93:chuái # 㪓
+0x3a94:sàn,tán # 㪔
+0x3a95:diào # 㪕
+0x3a96:lù # 㪖
+0x3a97:tǒu # 㪗
+0x3a98:liǎn # 㪘
+0x3a99:kě,kè,kuò # 㪙
+0x3a9a:sàn # 㪚
+0x3a9b:zhěn # 㪛
+0x3a9c:chuǎi # 㪜
+0x3a9d:liàn # 㪝
+0x3a9e:mào # 㪞
+0x3aa0:qiàn # 㪠
+0x3aa1:kě # 㪡
+0x3aa2:shǎo # 㪢
+0x3aa3:qiào # 㪣
+0x3aa4:bì # 㪤
+0x3aa6:yìn # 㪦
+0x3aa8:shàn # 㪨
+0x3aa9:sù # 㪩
+0x3aaa:sà,xǐ # 㪪
+0x3aab:ruì # 㪫
+0x3aac:zhuó # 㪬
+0x3aad:lú # 㪭
+0x3aae:líng # 㪮
+0x3aaf:chá,jǔ,qú # 㪯
+0x3ab1:huàn # 㪱
+0x3ab4:jiá # 㪴
+0x3ab5:bàn # 㪵
+0x3ab6:hú # 㪶
+0x3ab7:dǒu # 㪷
+0x3ab9:lǒu # 㪹
+0x3abb:juàn # 㪻
+0x3abc:kě # 㪼
+0x3abd:suǒ,suò # 㪽
+0x3abe:gé,luò # 㪾
+0x3abf:zhé,shé # 㪿
+0x3ac0:dǐng # 㫀
+0x3ac1:duàn # 㫁
+0x3ac2:zhù # 㫂
+0x3ac3:yǎn # 㫃
+0x3ac4:páng # 㫄
+0x3ac5:chá,qí,shí # 㫅
+0x3aca:yǐ # 㫊
+0x3acd:yóu # 㫍
+0x3ace:gǔn,kuài # 㫎
+0x3acf:yǎo # 㫏
+0x3ad0:yǎo # 㫐
+0x3ad1:shí,zhǐ # 㫑
+0x3ad2:gǒng # 㫒
+0x3ad3:qǐ,qì # 㫓
+0x3ad4:gèn # 㫔
+0x3ad7:hòu # 㫗
+0x3ad8:mì,miǎn # 㫘
+0x3ad9:fú # 㫙
+0x3ada:hū # 㫚
+0x3adb:guàng,kuáng,kuàng,mǔ # 㫛
+0x3adc:dàn,tǎn # 㫜
+0x3adf:yán # 㫟
+0x3ae2:qù # 㫢
+0x3ae4:chǎng,zhào # 㫤
+0x3ae5:mǐng # 㫥
+0x3ae7:bào # 㫧
+0x3aeb:xiǎn # 㫫
+0x3aef:mào # 㫯
+0x3af0:lǎng # 㫰
+0x3af1:nǎn # 㫱
+0x3af2:pèi # 㫲
+0x3af3:chén # 㫳
+0x3af6:cǒu,zhǒu # 㫶
+0x3af8:qiè # 㫸
+0x3af9:dài,shù,yú # 㫹
+0x3afb:kùn # 㫻
+0x3afc:dié,zhé,zhì # 㫼
+0x3afd:lù # 㫽
+0x3b02:yú # 㬂
+0x3b03:tái # 㬃
+0x3b04:chàn # 㬄
+0x3b05:màn # 㬅
+0x3b06:mián,miàn,mǐn # 㬆
+0x3b07:huàn # 㬇
+0x3b09:nuǎn,ruò # 㬉
+0x3b0a:huǎn # 㬊
+0x3b0b:hóu # 㬋
+0x3b0c:jìng # 㬌
+0x3b0d:bó # 㬍
+0x3b0e:xiǎn # 㬎
+0x3b0f:lì # 㬏
+0x3b10:jǐn,jìn,xíng,yǐng # 㬐
+0x3b12:mǎng,mào # 㬒
+0x3b13:piào # 㬓
+0x3b14:háo # 㬔
+0x3b15:yáng # 㬕
+0x3b17:xiàn # 㬗
+0x3b18:sù # 㬘
+0x3b19:wěi # 㬙
+0x3b1a:chè # 㬚
+0x3b1c:jìn # 㬜
+0x3b1d:céng # 㬝
+0x3b1e:hè # 㬞
+0x3b20:shài # 㬠
+0x3b21:líng # 㬡
+0x3b23:duì # 㬣
+0x3b25:pù # 㬥
+0x3b26:yuè # 㬦
+0x3b27:bó # 㬧
+0x3b29:huì # 㬩
+0x3b2a:dié,zhì # 㬪
+0x3b2b:yàn # 㬫
+0x3b2c:jù # 㬬
+0x3b2d:jiào,shǎn,yǎo # 㬭
+0x3b2e:kuài,nàn # 㬮
+0x3b2f:liè # 㬯
+0x3b30:yú # 㬰
+0x3b31:tì # 㬱
+0x3b33:wǔ # 㬳
+0x3b34:hǒng # 㬴
+0x3b35:xiáo,jiāo # 㬵
+0x3b36:hào # 㬶
+0x3b3b:huǎng # 㬻
+0x3b3c:fù # 㬼
+0x3b3f:dùn # 㬿
+0x3b41:réng # 㭁
+0x3b42:jiǎo # 㭂
+0x3b44:xìn # 㭄
+0x3b47:yuàn # 㭇
+0x3b48:jué,kuài # 㭈
+0x3b49:huá # 㭉
+0x3b4b:bàng # 㭋
+0x3b4c:móu,yú # 㭌
+0x3b4f:wěi # 㭏
+0x3b51:mèi # 㭑
+0x3b52:sì # 㭒
+0x3b53:biàn # 㭓
+0x3b54:lú # 㭔
+0x3b58:hé,gé # 㭘
+0x3b59:shé,zhé # 㭙
+0x3b5a:lǚ # 㭚
+0x3b5b:pài # 㭛
+0x3b5c:róng # 㭜
+0x3b5d:qiú # 㭝
+0x3b5e:liè # 㭞
+0x3b5f:gǒng # 㭟
+0x3b60:xiǎn # 㭠
+0x3b61:xì,xìn # 㭡
+0x3b64:niǎo # 㭤
+0x3b68:yé # 㭨
+0x3b69:lèi,líng,liè # 㭩
+0x3b6b:cuán,cuó,zhèn # 㭫
+0x3b6c:zhuó # 㭬
+0x3b6d:fèi # 㭭
+0x3b6e:zuò # 㭮
+0x3b6f:dié,nà,zhé # 㭯
+0x3b70:jì,jué,zuǐ # 㭰
+0x3b71:hé,xiá # 㭱
+0x3b72:jí # 㭲
+0x3b78:tú # 㭸
+0x3b79:xián # 㭹
+0x3b7a:yǎn # 㭺
+0x3b7b:táng # 㭻
+0x3b7c:tà # 㭼
+0x3b7d:dǐ # 㭽
+0x3b7e:jué,yuè # 㭾
+0x3b7f:áng # 㭿
+0x3b80:hán # 㮀
+0x3b81:yáo # 㮁
+0x3b82:jú # 㮂
+0x3b83:ruí # 㮃
+0x3b84:bǎng,bì,péng # 㮄
+0x3b86:niè # 㮆
+0x3b87:tiàn # 㮇
+0x3b88:nài # 㮈
+0x3b8b:yǒu,yù # 㮋
+0x3b8c:mián,mǐn # 㮌
+0x3b8f:nài # 㮏
+0x3b90:xǐng,shěng # 㮐
+0x3b91:qì # 㮑
+0x3b93:gèn # 㮓
+0x3b94:tóng # 㮔
+0x3b95:ér,ruǎn # 㮕
+0x3b96:jiá,jiá # 㮖
+0x3b97:qín # 㮗
+0x3b98:mào # 㮘
+0x3b99:è # 㮙
+0x3b9a:lì # 㮚
+0x3b9b:chí # 㮛
+0x3b9d:hé,luò # 㮝
+0x3b9e:jié,ní,yá # 㮞
+0x3b9f:jí,niǎn,pèng,ròu,kā # 㮟
+0x3ba1:guàn # 㮡
+0x3ba2:hóu # 㮢
+0x3ba3:gài,zé # 㮣
+0x3ba5:fèn # 㮥
+0x3ba6:sè,suǒ # 㮦
+0x3ba8:jí,jì # 㮨
+0x3baa:qióng # 㮪
+0x3bab:hé # 㮫
+0x3bad:xián # 㮭
+0x3bae:jié # 㮮
+0x3baf:huá,hún,kuǎn # 㮯
+0x3bb0:bí,pí # 㮰
+0x3bb3:zhèn # 㮳
+0x3bb6:shì,shuò # 㮶
+0x3bb8:sòng # 㮸
+0x3bb9:zhǐ # 㮹
+0x3bba:běn # 㮺
+0x3bbe:lǎng # 㮾
+0x3bbf:bì # 㮿
+0x3bc0:xiǎn,xuàn # 㯀
+0x3bc1:bàng # 㯁
+0x3bc2:dài # 㯂
+0x3bc5:pí # 㯅
+0x3bc6:chǎn # 㯆
+0x3bc7:bì # 㯇
+0x3bc8:sù # 㯈
+0x3bc9:huò,chū # 㯉
+0x3bca:hén # 㯊
+0x3bcb:yǐng # 㯋
+0x3bcc:chuán # 㯌
+0x3bcd:jiǎng # 㯍
+0x3bce:nèn # 㯎
+0x3bcf:gǔ # 㯏
+0x3bd0:fǎng,tuǒ # 㯐
+0x3bd3:tà # 㯓
+0x3bd4:cuì # 㯔
+0x3bd6:dé # 㯖
+0x3bd7:rǎn,shùn,xián,xiàn # 㯗
+0x3bd8:kuǎn # 㯘
+0x3bd9:chè # 㯙
+0x3bda:dá # 㯚
+0x3bdb:hú,huò # 㯛
+0x3bdc:cuì # 㯜
+0x3bdd:lù # 㯝
+0x3bde:juàn,yuè # 㯞
+0x3bdf:lù # 㯟
+0x3be0:qiàn,xiàn,xún # 㯠
+0x3be1:pào # 㯡
+0x3be2:zhèn # 㯢
+0x3be4:lì # 㯤
+0x3be5:cáo,zāo # 㯥
+0x3be6:qí # 㯦
+0x3be9:tì # 㯩
+0x3bea:líng # 㯪
+0x3beb:qú # 㯫
+0x3bec:liǎn # 㯬
+0x3bed:lǔ # 㯭
+0x3bee:shǔ # 㯮
+0x3bef:gòng # 㯯
+0x3bf0:zhé,zhí # 㯰
+0x3bf1:biǎo,piáo,pāo # 㯱
+0x3bf2:jìn # 㯲
+0x3bf3:qíng # 㯳
+0x3bf6:zōng # 㯶
+0x3bf7:pú # 㯷
+0x3bf8:jǐn # 㯸
+0x3bf9:biǎo # 㯹
+0x3bfa:jiàn # 㯺
+0x3bfb:gǔn,hùn # 㯻
+0x3bff:liè # 㯿
+0x3c00:lí # 㰀
+0x3c01:luǒ # 㰁
+0x3c02:shěn,sǔn # 㰂
+0x3c03:mián # 㰃
+0x3c04:jiàn # 㰄
+0x3c05:dí # 㰅
+0x3c06:bèi # 㰆
+0x3c08:liǎn # 㰈
+0x3c0a:xún # 㰊
+0x3c0b:pín # 㰋
+0x3c0c:què # 㰌
+0x3c0d:lóng # 㰍
+0x3c0e:zuì # 㰎
+0x3c10:jué,kuí,lěi,tuǐ,tuǒ # 㰐
+0x3c12:shé,xué # 㰒
+0x3c14:xiè # 㰔
+0x3c16:lǎn # 㰖
+0x3c17:cù # 㰗
+0x3c18:yí # 㰘
+0x3c19:nuó # 㰙
+0x3c1a:lí # 㰚
+0x3c1b:yuè # 㰛
+0x3c1d:yǐ # 㰝
+0x3c1f:jì,qì # 㰟
+0x3c20:kàng # 㰠
+0x3c21:xiè # 㰡
+0x3c23:zì # 㰣
+0x3c24:hē,qiè # 㰤
+0x3c25:huì # 㰥
+0x3c26:qù # 㰦
+0x3c2a:wá # 㰪
+0x3c2c:xún # 㰬
+0x3c2e:shèn # 㰮
+0x3c2f:tòu,tǒu,hòu # 㰯
+0x3c30:qiè # 㰰
+0x3c31:shà # 㰱
+0x3c32:xù,yù # 㰲
+0x3c33:yà # 㰳
+0x3c34:pó,pǒu # 㰴
+0x3c35:zú # 㰵
+0x3c36:yǒu # 㰶
+0x3c37:zì # 㰷
+0x3c38:liǎn,liàn,luǎn # 㰸
+0x3c39:jìn # 㰹
+0x3c3a:xiá,xià # 㰺
+0x3c3b:yǐ # 㰻
+0x3c3c:qiè # 㰼
+0x3c3d:mǐ,yàn # 㰽
+0x3c3e:jiào # 㰾
+0x3c40:chǐ,chuài # 㱀
+0x3c41:shì # 㱁
+0x3c43:yǐn # 㱃
+0x3c44:mò # 㱄
+0x3c45:yì # 㱅
+0x3c47:sè,xì # 㱇
+0x3c48:jìn # 㱈
+0x3c49:yè # 㱉
+0x3c4b:què # 㱋
+0x3c4c:chè,yǎn,yé # 㱌
+0x3c4d:luán # 㱍
+0x3c4f:zhèng # 㱏
+0x3c56:cuì # 㱖
+0x3c58:àn,yǎn # 㱘
+0x3c59:xiǔ # 㱙
+0x3c5a:cán,hài,shàn # 㱚
+0x3c5b:chuǎn # 㱛
+0x3c5c:zhá # 㱜
+0x3c5e:jí # 㱞
+0x3c5f:bó,pí,pǐ # 㱟
+0x3c62:láng # 㱢
+0x3c63:tuǐ # 㱣
+0x3c65:líng # 㱥
+0x3c66:è,guì,jǐ,qī # 㱦
+0x3c67:wò # 㱧
+0x3c68:liàn # 㱨
+0x3c69:dú # 㱩
+0x3c6a:mèn,hūn # 㱪
+0x3c6b:làn # 㱫
+0x3c6c:wěi # 㱬
+0x3c6d:duàn # 㱭
+0x3c6e:kuài,kuì # 㱮
+0x3c6f:ái # 㱯
+0x3c70:zǎi # 㱰
+0x3c71:huì,wù,xì # 㱱
+0x3c72:yì # 㱲
+0x3c73:mò # 㱳
+0x3c74:zì # 㱴
+0x3c75:bèn,fèn # 㱵
+0x3c76:bèng,jiào,péng,qiǎo,rù # 㱶
+0x3c78:bì,bié # 㱸
+0x3c79:lì,suàn,xiàn # 㱹
+0x3c7a:lú # 㱺
+0x3c7b:luǒ,luò # 㱻
+0x3c7d:dàn,qín,zhěn # 㱽
+0x3c7f:què # 㱿
+0x3c80:chén # 㲀
+0x3c82:chéng # 㲂
+0x3c83:jiù # 㲃
+0x3c84:kòu,kū # 㲄
+0x3c85:jì # 㲅
+0x3c86:líng # 㲆
+0x3c88:sháo # 㲈
+0x3c89:què # 㲉
+0x3c8a:ruì # 㲊
+0x3c8b:chuò,zhuó,zú # 㲋
+0x3c8c:nèng # 㲌
+0x3c8e:lóu # 㲎
+0x3c8f:bǎo,piǎo,pín,pìng # 㲏
+0x3c92:bào # 㲒
+0x3c93:róng # 㲓
+0x3c95:lèi # 㲕
+0x3c98:qú # 㲘
+0x3c9b:zhǐ # 㲛
+0x3c9c:tán,tǎn # 㲜
+0x3c9d:rǒng # 㲝
+0x3c9e:zú # 㲞
+0x3c9f:yǐng # 㲟
+0x3ca0:máo # 㲠
+0x3ca1:nài,nì # 㲡
+0x3ca2:biàn,bié # 㲢
+0x3ca5:táng # 㲥
+0x3ca6:hàn,hě # 㲦
+0x3ca7:zào # 㲧
+0x3ca8:róng # 㲨
+0x3cab:pú # 㲫
+0x3cad:tǎn # 㲭
+0x3caf:rán # 㲯
+0x3cb0:níng # 㲰
+0x3cb1:liè # 㲱
+0x3cb2:dié,yì # 㲲
+0x3cb3:dié # 㲳
+0x3cb4:zhòng,zhòu # 㲴
+0x3cb6:lǜ # 㲶
+0x3cb7:dàn # 㲷
+0x3cb9:guǐ,qiú # 㲹
+0x3cba:jí,kè,léi # 㲺
+0x3cbb:nì # 㲻
+0x3cbc:yì # 㲼
+0x3cbd:niàn,rěn,xiàn # 㲽
+0x3cbe:yǔ,yù # 㲾
+0x3cbf:wǎng # 㲿
+0x3cc0:guò,kǎi,xì # 㳀
+0x3cc1:zè # 㳁
+0x3cc2:yán # 㳂
+0x3cc3:cuì # 㳃
+0x3cc4:xián # 㳄
+0x3cc5:jiǎo,liú # 㳅
+0x3cc6:shǔ,tǒu # 㳆
+0x3cc7:fù # 㳇
+0x3cc8:pèi # 㳈
+0x3ccd:bù # 㳍
+0x3cce:biàn,fàn # 㳎
+0x3ccf:chǐ,shì # 㳏
+0x3cd0:sà,zhá,zhǎ # 㳐
+0x3cd1:yì # 㳑
+0x3cd2:fǎ # 㳒
+0x3cd4:duì # 㳔
+0x3cd5:lán # 㳕
+0x3cd7:chài # 㳗
+0x3cd9:xuàn # 㳙
+0x3cda:yù # 㳚
+0x3cdb:yú # 㳛
+0x3ce0:tà # 㳠
+0x3ce5:jù,lòng # 㳥
+0x3ce6:xiè # 㳦
+0x3ce7:xí # 㳧
+0x3ce8:jiǎn,zá,zǎn # 㳨
+0x3cea:pàn,pì # 㳪
+0x3ceb:tà # 㳫
+0x3cec:xuán # 㳬
+0x3ced:xián # 㳭
+0x3cee:niào # 㳮
+0x3cf4:mì # 㳴
+0x3cf5:jì # 㳵
+0x3cf6:gòu,nǒu # 㳶
+0x3cf7:wěn,hū # 㳷
+0x3cf9:wǎng # 㳹
+0x3cfa:yóu # 㳺
+0x3cfb:zé # 㳻
+0x3cfc:bì # 㳼
+0x3cfd:mǐ # 㳽
+0x3cff:xiè # 㳿
+0x3d00:fàn # 㴀
+0x3d01:yì # 㴁
+0x3d03:lèi,lì # 㴃
+0x3d04:yíng # 㴄
+0x3d06:jìn,xìng # 㴆
+0x3d07:shè # 㴇
+0x3d08:yìn # 㴈
+0x3d09:jǐ # 㴉
+0x3d0b:sù # 㴋
+0x3d0f:wǎng # 㴏
+0x3d10:miàn # 㴐
+0x3d11:sù # 㴑
+0x3d12:yì # 㴒
+0x3d13:zǎi # 㴓
+0x3d14:sè,yì # 㴔
+0x3d15:jí # 㴕
+0x3d16:luò # 㴖
+0x3d18:mào # 㴘
+0x3d19:zhá # 㴙
+0x3d1a:suì # 㴚
+0x3d1b:zhì # 㴛
+0x3d1c:biàn # 㴜
+0x3d1d:lí # 㴝
+0x3d25:qiào # 㴥
+0x3d26:guàn # 㴦
+0x3d28:zhèn # 㴨
+0x3d2a:niè # 㴪
+0x3d2b:jùn # 㴫
+0x3d2c:xiè # 㴬
+0x3d2d:yǎo # 㴭
+0x3d2e:xiè # 㴮
+0x3d30:néng # 㴰
+0x3d33:lǒng # 㴳
+0x3d34:chén # 㴴
+0x3d35:mì # 㴵
+0x3d36:què # 㴶
+0x3d38:nà,shǎn,yè # 㴸
+0x3d3c:sù # 㴼
+0x3d3d:xiè,yìn # 㴽
+0x3d3e:bó # 㴾
+0x3d3f:dǐng # 㴿
+0x3d40:cuàn,zú # 㵀
+0x3d42:chuǎng,shù # 㵂
+0x3d43:shé # 㵃
+0x3d44:hàn,qià,yù # 㵄
+0x3d45:dàn,tàn # 㵅
+0x3d46:hào # 㵆
+0x3d4a:shěn,zhé # 㵊
+0x3d4b:mì # 㵋
+0x3d4c:chàn,qióng,xún # 㵌
+0x3d4d:mèn # 㵍
+0x3d4e:hǎn,jiàn,kǎn # 㵎
+0x3d4f:cuǐ # 㵏
+0x3d50:jué # 㵐
+0x3d51:hè # 㵑
+0x3d52:fèi # 㵒
+0x3d53:shí # 㵓
+0x3d54:chě,chè # 㵔
+0x3d55:shèn # 㵕
+0x3d56:nǜ # 㵖
+0x3d57:fù,pán,píng # 㵗
+0x3d58:màn # 㵘
+0x3d5d:yì # 㵝
+0x3d5e:chóu # 㵞
+0x3d61:báo # 㵡
+0x3d62:léi,lěi # 㵢
+0x3d63:kě,luǒ # 㵣
+0x3d64:diàn,shà,xiá # 㵤
+0x3d65:bì,mì # 㵥
+0x3d66:suí # 㵦
+0x3d67:gé # 㵧
+0x3d68:bì,pì # 㵨
+0x3d69:yì # 㵩
+0x3d6a:xián # 㵪
+0x3d6b:nǐ,yì # 㵫
+0x3d6c:yíng # 㵬
+0x3d6d:zhǔ # 㵭
+0x3d6e:chún,wěn # 㵮
+0x3d6f:féng # 㵯
+0x3d70:xù # 㵰
+0x3d71:piǎo # 㵱
+0x3d72:wǔ # 㵲
+0x3d73:liáo,liú # 㵳
+0x3d74:cáng # 㵴
+0x3d75:zòu # 㵵
+0x3d77:biàn # 㵷
+0x3d78:yào,yuè # 㵸
+0x3d79:huán # 㵹
+0x3d7a:pái,pài # 㵺
+0x3d7b:sòu # 㵻
+0x3d7d:duì,lěi # 㵽
+0x3d7e:jìng,qìng # 㵾
+0x3d7f:xí # 㵿
+0x3d81:guó # 㶁
+0x3d84:yán # 㶄
+0x3d85:xué # 㶅
+0x3d86:chú,zhū # 㶆
+0x3d87:héng # 㶇
+0x3d88:yíng,yìng # 㶈
+0x3d8c:lián # 㶌
+0x3d8d:xiǎn # 㶍
+0x3d8e:huán # 㶎
+0x3d91:liàn # 㶑
+0x3d92:shǎn,shěn,tàn # 㶒
+0x3d93:cáng # 㶓
+0x3d94:bèi # 㶔
+0x3d95:jiǎn # 㶕
+0x3d96:shù # 㶖
+0x3d97:fàn # 㶗
+0x3d98:diàn # 㶘
+0x3d9a:bà # 㶚
+0x3d9b:yú # 㶛
+0x3d9e:nǎng # 㶞
+0x3d9f:lěi # 㶟
+0x3da0:yì # 㶠
+0x3da1:dài,huǒ,zuó # 㶡
+0x3da3:chán # 㶣
+0x3da4:chǎo # 㶤
+0x3da6:jìn # 㶦
+0x3da7:nèn # 㶧
+0x3dab:liǎo,liào # 㶫
+0x3dac:méi,mò # 㶬
+0x3dad:jiù,yǒu # 㶭
+0x3daf:liù # 㶯
+0x3db0:hán # 㶰
+0x3db2:yòng # 㶲
+0x3db3:jìn # 㶳
+0x3db4:chǐ,shǐ # 㶴
+0x3db5:rèn # 㶵
+0x3db6:nóng # 㶶
+0x3db9:hòng # 㶹
+0x3dba:tiàn # 㶺
+0x3dbf:bó # 㶿
+0x3dc0:qióng # 㷀
+0x3dc2:shù # 㷂
+0x3dc3:cuǐ # 㷃
+0x3dc4:huì # 㷄
+0x3dc5:chǎo,miǎo # 㷅
+0x3dc6:dòu,fù # 㷆
+0x3dc7:guài,kuí # 㷇
+0x3dc8:è # 㷈
+0x3dc9:wèi,yù,yùn # 㷉
+0x3dca:fén # 㷊
+0x3dcb:tán,tǎn # 㷋
+0x3dcd:lún # 㷍
+0x3dce:hè,hóng,xié # 㷎
+0x3dcf:yǒng # 㷏
+0x3dd0:huǐ # 㷐
+0x3dd2:yú # 㷒
+0x3dd3:zǒng # 㷓
+0x3dd4:yàn # 㷔
+0x3dd5:qiú # 㷕
+0x3dd6:zhào # 㷖
+0x3dd7:jiǒng # 㷗
+0x3dd8:tái # 㷘
+0x3ddf:tuì # 㷟
+0x3de0:lín # 㷠
+0x3de1:jiǒng # 㷡
+0x3de2:zhǎ # 㷢
+0x3de4:hè,hù,xuè # 㷤
+0x3de6:xù # 㷦
+0x3dea:cuì,zuǎn # 㷪
+0x3deb:qǐng # 㷫
+0x3dec:mò # 㷬
+0x3def:bèng # 㷯
+0x3df0:lí # 㷰
+0x3df3:yàn # 㷳
+0x3df4:gé,lì # 㷴
+0x3df5:mò # 㷵
+0x3df6:bèi,bì # 㷶
+0x3df7:juǎn # 㷷
+0x3df8:dié,yè # 㷸
+0x3df9:shào # 㷹
+0x3dfb:wú # 㷻
+0x3dfc:yàn # 㷼
+0x3dfe:jué # 㷾
+0x3e00:tái # 㸀
+0x3e01:hǎn,hàn # 㸁
+0x3e03:diǎn # 㸃
+0x3e04:jì,jié # 㸄
+0x3e05:jié # 㸅
+0x3e09:xiè # 㸉
+0x3e0a:là,lài,liè # 㸊
+0x3e0b:fán # 㸋
+0x3e0c:huò # 㸌
+0x3e0d:xì # 㸍
+0x3e0e:niè # 㸎
+0x3e0f:mí # 㸏
+0x3e10:rán # 㸐
+0x3e11:cuàn # 㸑
+0x3e12:yín # 㸒
+0x3e13:mì # 㸓
+0x3e15:jué # 㸕
+0x3e17:tóng # 㸗
+0x3e18:wàn # 㸘
+0x3e1a:lǐ # 㸚
+0x3e1b:sháo,shuò # 㸛
+0x3e1c:kòng # 㸜
+0x3e1d:kǎn # 㸝
+0x3e1e:bǎn # 㸞
+0x3e20:tiǎo # 㸠
+0x3e22:bèi # 㸢
+0x3e23:yè,yì # 㸣
+0x3e24:piàn # 㸤
+0x3e25:chán # 㸥
+0x3e26:hù # 㸦
+0x3e27:kèn,yín # 㸧
+0x3e29:àn # 㸩
+0x3e2a:chún # 㸪
+0x3e2b:qián # 㸫
+0x3e2c:bèi,fèi,pèi # 㸬
+0x3e2e:fén # 㸮
+0x3e30:tuó # 㸰
+0x3e31:tuó # 㸱
+0x3e32:zuó,zuò # 㸲
+0x3e33:líng # 㸳
+0x3e35:guǐ,wěi # 㸵
+0x3e37:shì # 㸷
+0x3e38:hǒu,ǒu,kǒu # 㸸
+0x3e39:liè # 㸹
+0x3e3b:sì # 㸻
+0x3e3d:bèi # 㸽
+0x3e3e:rèn # 㸾
+0x3e3f:dú # 㸿
+0x3e40:bó # 㹀
+0x3e41:liáng # 㹁
+0x3e42:cì,qiǎn # 㹂
+0x3e43:bì,fèi # 㹃
+0x3e44:jì,qì # 㹄
+0x3e45:zǒng # 㹅
+0x3e47:hé # 㹇
+0x3e48:lí,máo # 㹈
+0x3e49:yuán # 㹉
+0x3e4a:yuè # 㹊
+0x3e4c:chǎn,shèng # 㹌
+0x3e4d:dí,dú # 㹍
+0x3e4e:léi # 㹎
+0x3e4f:jǐn # 㹏
+0x3e50:chóng,zhòu # 㹐
+0x3e51:sì,yí # 㹑
+0x3e52:pǔ # 㹒
+0x3e53:yì # 㹓
+0x3e56:huàn # 㹖
+0x3e57:táo,tāo # 㹗
+0x3e58:rú,rù,ruí # 㹘
+0x3e59:wěng # 㹙
+0x3e5a:wěng # 㹚
+0x3e5b:ráo,rǎo # 㹛
+0x3e5c:yín # 㹜
+0x3e5d:shì # 㹝
+0x3e5e:yín,yǐn # 㹞
+0x3e5f:jué # 㹟
+0x3e60:tún # 㹠
+0x3e61:xuán,xuàn # 㹡
+0x3e64:qiè,què # 㹤
+0x3e65:zhù # 㹥
+0x3e68:yòu # 㹨
+0x3e6b:xì,yí # 㹫
+0x3e6c:shǐ # 㹬
+0x3e6d:yì # 㹭
+0x3e6e:mò # 㹮
+0x3e71:hú,què,rǎn # 㹱
+0x3e72:xiào # 㹲
+0x3e73:wú # 㹳
+0x3e75:jìng # 㹵
+0x3e76:tíng # 㹶
+0x3e77:shǐ,xìn # 㹷
+0x3e78:ní # 㹸
+0x3e7a:tà # 㹺
+0x3e7c:chǔ,jú,yù # 㹼
+0x3e7d:chǎn,shàn # 㹽
+0x3e7e:piǎo # 㹾
+0x3e7f:diǎo,zhào,zhuó # 㹿
+0x3e80:náo # 㺀
+0x3e81:nǎo # 㺁
+0x3e82:gǎn,jiàn,yán # 㺂
+0x3e83:gǒu # 㺃
+0x3e84:yǔ # 㺄
+0x3e85:hóu # 㺅
+0x3e89:hù # 㺉
+0x3e8a:yàng # 㺊
+0x3e8c:xiàn # 㺌
+0x3e8e:róng # 㺎
+0x3e8f:lóu # 㺏
+0x3e90:zhǎo # 㺐
+0x3e91:cán,shǎn # 㺑
+0x3e92:liào,yáo,xiāo # 㺒
+0x3e93:piào # 㺓
+0x3e94:hài,wèi # 㺔
+0x3e95:fán # 㺕
+0x3e96:hǎn # 㺖
+0x3e97:dàn,yán # 㺗
+0x3e98:zhàn # 㺘
+0x3e9a:tǎ # 㺚
+0x3e9b:zhù # 㺛
+0x3e9c:nóng # 㺜
+0x3e9d:jiàn # 㺝
+0x3e9e:yú # 㺞
+0x3e9f:zhuó # 㺟
+0x3ea0:yòu,yù # 㺠
+0x3ea1:lì # 㺡
+0x3ea5:chán,tán # 㺥
+0x3ea6:lián # 㺦
+0x3ea9:jiù,sè # 㺩
+0x3eaa:pú # 㺪
+0x3eab:qiú # 㺫
+0x3eac:gǒng # 㺬
+0x3ead:zǐ # 㺭
+0x3eae:yú # 㺮
+0x3eb1:réng # 㺱
+0x3eb2:niǔ # 㺲
+0x3eb3:méi # 㺳
+0x3eb5:jiú # 㺵
+0x3eb7:xù # 㺷
+0x3eb8:píng # 㺸
+0x3eb9:biàn # 㺹
+0x3eba:mào # 㺺
+0x3ebf:yí # 㺿
+0x3ec0:yóu,yú # 㻀
+0x3ec2:píng # 㻂
+0x3ec4:bǎo # 㻄
+0x3ec5:huì,kuài # 㻅
+0x3ec9:bù # 㻉
+0x3eca:máng,mén,mèng # 㻊
+0x3ecb:là,lèi # 㻋
+0x3ecc:tú # 㻌
+0x3ecd:wú # 㻍
+0x3ece:lì,sè # 㻎
+0x3ecf:líng,lǐng # 㻏
+0x3ed1:jì # 㻑
+0x3ed2:jùn # 㻒
+0x3ed4:duǒ,ruì # 㻔
+0x3ed5:jué # 㻕
+0x3ed6:dài # 㻖
+0x3ed7:bèi # 㻗
+0x3edd:là # 㻝
+0x3ede:bīn,bān # 㻞
+0x3edf:suí # 㻟
+0x3ee0:tú # 㻠
+0x3ee1:dié,jué # 㻡
+0x3ee7:duò,hé # 㻧
+0x3eea:suì # 㻪
+0x3eeb:bì # 㻫
+0x3eec:tú # 㻬
+0x3eed:sè,zé # 㻭
+0x3eee:càn # 㻮
+0x3eef:tú # 㻯
+0x3ef0:miǎn,rè,wèi,yù # 㻰
+0x3ef2:lǚ # 㻲
+0x3ef5:zhàn # 㻵
+0x3ef6:bǐ,bì # 㻶
+0x3ef7:jí # 㻷
+0x3ef8:cén,jìn,xín,zēn # 㻸
+0x3efa:lì,liè # 㻺
+0x3efd:suì # 㻽
+0x3eff:shǔ # 㻿
+0x3f02:é,wèn,yuǎn # 㼂
+0x3f07:qióng # 㼇
+0x3f08:luó # 㼈
+0x3f09:yìn,zhèn # 㼉
+0x3f0a:tún # 㼊
+0x3f0b:gǔ,jiǔ,móu,rǔ # 㼋
+0x3f0c:yǔ # 㼌
+0x3f0d:lěi # 㼍
+0x3f0e:bèi,bó,kě # 㼎
+0x3f0f:něi # 㼏
+0x3f10:pián # 㼐
+0x3f11:liàn,luán # 㼑
+0x3f12:qiǔ,tǎng # 㼒
+0x3f13:lián,liǎn # 㼓
+0x3f16:lì # 㼖
+0x3f17:dǐng,tíng # 㼗
+0x3f18:wǎ # 㼘
+0x3f19:zhòu # 㼙
+0x3f1b:xíng # 㼛
+0x3f1c:àng,póu # 㼜
+0x3f1d:fàn,wǎn # 㼝
+0x3f1e:pèng # 㼞
+0x3f1f:bái # 㼟
+0x3f20:tuó # 㼠
+0x3f22:ě,yí # 㼢
+0x3f23:bǎi,bó # 㼣
+0x3f24:qì,qiè,yà # 㼤
+0x3f25:chú,kǎo,tǒu # 㼥
+0x3f26:gǒng # 㼦
+0x3f27:tóng # 㼧
+0x3f28:hán # 㼨
+0x3f29:chéng # 㼩
+0x3f2a:jiá # 㼪
+0x3f2b:huàn # 㼫
+0x3f2c:xìng # 㼬
+0x3f2d:diàn,niǎo # 㼭
+0x3f2e:chāi,qì # 㼮
+0x3f2f:dòng # 㼯
+0x3f30:é,pí # 㼰
+0x3f31:ruǎn # 㼱
+0x3f32:liè # 㼲
+0x3f33:shěng # 㼳
+0x3f34:ǒu # 㼴
+0x3f35:dì # 㼵
+0x3f36:yú # 㼶
+0x3f37:chuán # 㼷
+0x3f38:róng # 㼸
+0x3f3a:táng # 㼺
+0x3f3b:cóng # 㼻
+0x3f3c:piáo # 㼼
+0x3f3d:shuǎng,chuǎng # 㼽
+0x3f3e:lù # 㼾
+0x3f3f:tóng # 㼿
+0x3f40:zhèng # 㽀
+0x3f41:lì # 㽁
+0x3f42:sà # 㽂
+0x3f47:guài,hú,huí,méng,sè # 㽇
+0x3f48:yì # 㽈
+0x3f49:hǎn,jiàn,xiàn # 㽉
+0x3f4a:xiè # 㽊
+0x3f4b:luó,luò # 㽋
+0x3f4c:liù # 㽌
+0x3f4e:dǎn,tán # 㽎
+0x3f51:tán # 㽑
+0x3f55:yóu # 㽕
+0x3f56:nán # 㽖
+0x3f58:gǎng # 㽘
+0x3f59:jùn # 㽙
+0x3f5a:chì # 㽚
+0x3f5b:gōu,qú # 㽛
+0x3f5c:wǎn # 㽜
+0x3f5d:lì # 㽝
+0x3f5e:liú # 㽞
+0x3f5f:liè # 㽟
+0x3f60:xiá # 㽠
+0x3f62:ǎn,yè # 㽢
+0x3f63:yù # 㽣
+0x3f64:jú # 㽤
+0x3f65:róu # 㽥
+0x3f66:xún # 㽦
+0x3f68:cuó # 㽨
+0x3f69:càn,cào # 㽩
+0x3f6a:zěng,zhǎ # 㽪
+0x3f6b:yǒng # 㽫
+0x3f6c:fù # 㽬
+0x3f6d:ruǎn # 㽭
+0x3f6f:xí # 㽯
+0x3f70:shù # 㽰
+0x3f71:jiǎo,jiū,niú # 㽱
+0x3f72:jiǎo # 㽲
+0x3f73:hàn,xiè,xǔ,yú # 㽳
+0x3f74:zhàng # 㽴
+0x3f77:shuì # 㽷
+0x3f78:chén # 㽸
+0x3f79:fàn,wǎn # 㽹
+0x3f7a:jí # 㽺
+0x3f7d:gù # 㽽
+0x3f7e:wù # 㽾
+0x3f80:qiè # 㾀
+0x3f81:shù # 㾁
+0x3f83:tuó # 㾃
+0x3f84:dú # 㾄
+0x3f85:zǐ # 㾅
+0x3f86:rán,shǎn # 㾆
+0x3f87:mù # 㾇
+0x3f88:fù # 㾈
+0x3f89:líng # 㾉
+0x3f8a:jí # 㾊
+0x3f8b:xiù # 㾋
+0x3f8c:xuǎn # 㾌
+0x3f8d:nái # 㾍
+0x3f8f:jiè # 㾏
+0x3f90:lì # 㾐
+0x3f91:dá # 㾑
+0x3f92:jì,rú,rù # 㾒
+0x3f94:lǚ # 㾔
+0x3f95:shěn # 㾕
+0x3f96:lǐ,luó # 㾖
+0x3f97:lǎng,liàng # 㾗
+0x3f98:gěng # 㾘
+0x3f99:yǐn # 㾙
+0x3f9b:qǐn # 㾛
+0x3f9c:qiè # 㾜
+0x3f9d:chè # 㾝
+0x3f9e:yǒu # 㾞
+0x3f9f:bù # 㾟
+0x3fa0:huáng,kuáng,kuì # 㾠
+0x3fa1:què # 㾡
+0x3fa2:lài # 㾢
+0x3fa5:xù # 㾥
+0x3fa6:bàng,pèi,pén # 㾦
+0x3fa7:kè # 㾧
+0x3fa8:qǐ,yǐ # 㾨
+0x3faa:shěng # 㾪
+0x3fad:zhòu # 㾭
+0x3fae:huáng # 㾮
+0x3faf:tuí,wěi # 㾯
+0x3fb0:hú # 㾰
+0x3fb1:bèi,fàn,fèi,fú # 㾱
+0x3fb5:jì # 㾵
+0x3fb6:gǔ # 㾶
+0x3fb8:gǎo # 㾸
+0x3fb9:chái # 㾹
+0x3fba:mà,mò # 㾺
+0x3fbb:zhù # 㾻
+0x3fbc:tuǐ # 㾼
+0x3fbd:tuí,zhuì # 㾽
+0x3fbe:lián # 㾾
+0x3fbf:láng,lǎng # 㾿
+0x3fc3:dài,zhì # 㿃
+0x3fc4:ài # 㿄
+0x3fc5:xiǎn,xuǎn # 㿅
+0x3fc7:xí,xì # 㿇
+0x3fc9:tuí # 㿉
+0x3fca:cǎn # 㿊
+0x3fcb:sào # 㿋
+0x3fcd:jiè # 㿍
+0x3fce:fèn # 㿎
+0x3fcf:qún # 㿏
+0x3fd1:yào # 㿑
+0x3fd2:dǎo # 㿒
+0x3fd3:jiá # 㿓
+0x3fd4:lěi # 㿔
+0x3fd5:yán # 㿕
+0x3fd6:lú # 㿖
+0x3fd7:tuí # 㿗
+0x3fd8:yíng # 㿘
+0x3fd9:pì # 㿙
+0x3fda:luò # 㿚
+0x3fdb:lí,lì # 㿛
+0x3fdc:biě # 㿜
+0x3fde:mào # 㿞
+0x3fdf:bái,jiǎo # 㿟
+0x3fe2:yào,zhuì # 㿢
+0x3fe3:hé,xiá # 㿣
+0x3fe4:chǔn # 㿤
+0x3fe5:hú,hé # 㿥
+0x3fe6:nìng # 㿦
+0x3fe7:chóu # 㿧
+0x3fe8:lì # 㿨
+0x3fe9:tǎng # 㿩
+0x3fea:huán # 㿪
+0x3feb:bì # 㿫
+0x3fed:chè # 㿭
+0x3fee:yàng # 㿮
+0x3fef:dá # 㿯
+0x3ff0:áo # 㿰
+0x3ff1:xué # 㿱
+0x3ff5:rǎn # 㿵
+0x3ff7:cuó,cāo # 㿷
+0x3ff8:wǎn,mán # 㿸
+0x3ff9:tà # 㿹
+0x3ffa:báo # 㿺
+0x3ffc:yán # 㿼
+0x3ffe:zhù # 㿾
+0x3fff:yǎ # 㿿
+0x4000:fán # 䀀
+0x4001:yòu # 䀁
+0x4003:tuí # 䀃
+0x4004:méng # 䀄
+0x4005:shè,zhé # 䀅
+0x4006:jìn # 䀆
+0x4007:gǔ,què # 䀇
+0x4008:qì # 䀈
+0x4009:qiáo,shà # 䀉
+0x400a:jiǎo # 䀊
+0x400b:yán # 䀋
+0x400d:kàn # 䀍
+0x400e:miǎn # 䀎
+0x400f:xiàn,xuàn # 䀏
+0x4010:sǎn # 䀐
+0x4011:nà,nì,wò # 䀑
+0x4013:huàn # 䀓
+0x4014:niú,rèn # 䀔
+0x4015:chèng,zhèn # 䀕
+0x4017:jué # 䀗
+0x4018:xí,xié # 䀘
+0x4019:qì # 䀙
+0x401a:áng # 䀚
+0x401b:mèi,wù # 䀛
+0x401c:gǔ,mèi,xué # 䀜
+0x401f:fán,fèi,fèn # 䀟
+0x4020:qú,jù # 䀠
+0x4021:chàn,tàn # 䀡
+0x4022:shùn # 䀢
+0x4023:bì,mà # 䀣
+0x4024:mào # 䀤
+0x4025:shuò # 䀥
+0x4026:gǔ # 䀦
+0x4027:hǒng # 䀧
+0x4028:huàn # 䀨
+0x4029:luò # 䀩
+0x402a:háng # 䀪
+0x402b:jiá # 䀫
+0x402c:quán # 䀬
+0x402e:máng # 䀮
+0x402f:bǔ # 䀯
+0x4030:gǔ,yíng # 䀰
+0x4032:mù # 䀲
+0x4033:ài,là,lài # 䀳
+0x4034:yǐng # 䀴
+0x4035:shùn # 䀵
+0x4036:lǎng,liàng # 䀶
+0x4037:jié # 䀷
+0x4038:dì,zhì # 䀸
+0x4039:jiá,shè,jié # 䀹
+0x403b:pìn # 䀻
+0x403c:rèn,zhěn # 䀼
+0x403d:yán # 䀽
+0x403e:dǔ # 䀾
+0x403f:dì # 䀿
+0x4041:lǎng,liàng # 䁁
+0x4042:xiàn # 䁂
+0x4044:xìng # 䁄
+0x4045:bèi,bì,měng,mèng # 䁅
+0x4046:ǎn,yì # 䁆
+0x4047:mì # 䁇
+0x4048:qì # 䁈
+0x4049:qì # 䁉
+0x404a:wò # 䁊
+0x404b:shé # 䁋
+0x404c:yù # 䁌
+0x404d:jià,kè,qià # 䁍
+0x404e:chéng # 䁎
+0x404f:yǎo # 䁏
+0x4050:yìng # 䁐
+0x4051:yáng # 䁑
+0x4052:jí # 䁒
+0x4053:jiè,zǒng # 䁓
+0x4054:hàn,huǎn,xuān # 䁔
+0x4055:mín # 䁕
+0x4056:lōu # 䁖
+0x4057:kǎi # 䁗
+0x4058:yǎo # 䁘
+0x4059:yǎn,yàn # 䁙
+0x405a:sǔn # 䁚
+0x405b:guǐ,guì,kuì # 䁛
+0x405c:huǎng,huàng # 䁜
+0x405d:yíng # 䁝
+0x405e:shěng # 䁞
+0x405f:chá,duó # 䁟
+0x4060:lián # 䁠
+0x4062:xuán # 䁢
+0x4063:chuán # 䁣
+0x4064:chè,chèng # 䁤
+0x4065:nì # 䁥
+0x4066:qù # 䁦
+0x4067:miáo # 䁧
+0x4068:huò # 䁨
+0x4069:yú # 䁩
+0x406a:nǎn,zhǎn # 䁪
+0x406b:hú # 䁫
+0x406c:céng # 䁬
+0x406e:qián # 䁮
+0x406f:shè,xié # 䁯
+0x4070:jiǎng # 䁰
+0x4071:kōu # 䁱
+0x4072:mái # 䁲
+0x4073:mǎng # 䁳
+0x4074:zhǎn # 䁴
+0x4075:biǎn # 䁵
+0x4076:jiǎo # 䁶
+0x4077:jué,wò # 䁷
+0x4078:nóng # 䁸
+0x4079:bì # 䁹
+0x407a:shì # 䁺
+0x407b:lì,shuò # 䁻
+0x407c:mò,mù # 䁼
+0x407d:liè # 䁽
+0x407e:miè # 䁾
+0x407f:mò # 䁿
+0x4080:xī # 䂀
+0x4081:chán # 䂁
+0x4082:qú # 䂂
+0x4083:jiào,jié # 䂃
+0x4084:huò,kuàng # 䂄
+0x4086:xù # 䂆
+0x4087:náng,niǔ,nǒng,páng # 䂇
+0x4088:tóng # 䂈
+0x4089:hóu # 䂉
+0x408a:yù # 䂊
+0x408d:bó # 䂍
+0x408e:zuǎn # 䂎
+0x4090:chuò # 䂐
+0x4092:jié,qià,yà # 䂒
+0x4094:xìng # 䂔
+0x4095:huì # 䂕
+0x4096:shí,sì # 䂖
+0x409a:yáo,yóu # 䂚
+0x409b:yú # 䂛
+0x409c:bàng,péi # 䂜
+0x409d:jié,zé,zhé # 䂝
+0x409e:zhè # 䂞
+0x40a0:shé,shǐ # 䂠
+0x40a1:dǐ,zhǐ # 䂡
+0x40a2:dǒng # 䂢
+0x40a3:cí # 䂣
+0x40a4:fù,hái # 䂤
+0x40a5:mín # 䂥
+0x40a6:zhěn # 䂦
+0x40a7:zhěn # 䂧
+0x40a9:yàn # 䂩
+0x40aa:diào,tiǎo # 䂪
+0x40ab:hóng # 䂫
+0x40ac:gǒng # 䂬
+0x40ae:lüè # 䂮
+0x40af:guài,guàn # 䂯
+0x40b0:là # 䂰
+0x40b1:cuì,ruì # 䂱
+0x40b2:fǎ # 䂲
+0x40b3:cuǒ # 䂳
+0x40b4:yán # 䂴
+0x40b6:jié # 䂶
+0x40b8:guó,xù # 䂸
+0x40b9:suǒ # 䂹
+0x40ba:wǎn,wǒ # 䂺
+0x40bb:zhèng # 䂻
+0x40bc:niè # 䂼
+0x40bd:diào,yì # 䂽
+0x40be:lǎi # 䂾
+0x40bf:tà,tiè # 䂿
+0x40c0:cuì,xùn # 䃀
+0x40c2:gǔn,gùn # 䃂
+0x40c7:mián # 䃇
+0x40c9:mín # 䃉
+0x40ca:jǔ # 䃊
+0x40cb:yú # 䃋
+0x40cd:zhào,zhuì # 䃍
+0x40ce:zhǎ # 䃎
+0x40d1:pán # 䃑
+0x40d2:hé # 䃒
+0x40d3:gòu # 䃓
+0x40d4:hóng # 䃔
+0x40d5:láo,luò # 䃕
+0x40d6:wù # 䃖
+0x40d7:chuò # 䃗
+0x40d9:lù # 䃙
+0x40da:cù # 䃚
+0x40db:lián,qiàn # 䃛
+0x40dd:qiào # 䃝
+0x40de:shú,yì # 䃞
+0x40e1:cén # 䃡
+0x40e3:huǐ # 䃣
+0x40e4:sù # 䃤
+0x40e5:chuáng # 䃥
+0x40e7:lóng # 䃧
+0x40e9:náo # 䃩
+0x40ea:tán # 䃪
+0x40eb:dǎn # 䃫
+0x40ec:wěi # 䃬
+0x40ed:gǎn # 䃭
+0x40ee:dá # 䃮
+0x40ef:lì # 䃯
+0x40f1:xiàn # 䃱
+0x40f2:pán,pàn # 䃲
+0x40f3:là # 䃳
+0x40f5:niǎo # 䃵
+0x40f6:huái # 䃶
+0x40f7:yíng # 䃷
+0x40f8:xiàn # 䃸
+0x40f9:làn,lǎng # 䃹
+0x40fa:mó,mò # 䃺
+0x40fb:bà,pái # 䃻
+0x40fd:fú,guǐ,sì # 䃽
+0x40fe:bǐ # 䃾
+0x4100:huò # 䄀
+0x4101:yì # 䄁
+0x4102:liù # 䄂
+0x4105:juàn # 䄅
+0x4106:huó,kuò # 䄆
+0x4107:chéng # 䄇
+0x4108:dòu # 䄈
+0x4109:é # 䄉
+0x410b:yǎn # 䄋
+0x410c:zhuì # 䄌
+0x410d:dù,duó,zhà # 䄍
+0x410e:qǐ # 䄎
+0x410f:yú,yāo # 䄏
+0x4110:quàn # 䄐
+0x4111:huó,kuò # 䄑
+0x4112:niè,rěn # 䄒
+0x4113:héng,huáng # 䄓
+0x4114:jǔ # 䄔
+0x4115:shè,shèn,tiǎn # 䄕
+0x4118:péng # 䄘
+0x4119:míng # 䄙
+0x411a:cáo # 䄚
+0x411b:lóu # 䄛
+0x411c:lí,chī # 䄜
+0x411d:chǔn # 䄝
+0x411f:cuì # 䄟
+0x4120:shàn # 䄠
+0x4122:qí # 䄢
+0x4124:lài,lán # 䄤
+0x4125:líng # 䄥
+0x4126:liǎo # 䄦
+0x4127:réng,rǒng # 䄧
+0x4128:yú,yǔ # 䄨
+0x4129:náo,yì # 䄩
+0x412a:chuò,diǎo # 䄪
+0x412b:qǐ # 䄫
+0x412c:yí # 䄬
+0x412d:nián # 䄭
+0x412f:jiǎn,xiàn # 䄯
+0x4130:yá,zhá # 䄰
+0x4132:chuí # 䄲
+0x4136:bì # 䄶
+0x4137:dàn,diǎo,shí # 䄷
+0x4138:pò # 䄸
+0x4139:nián,tiǎn # 䄹
+0x413a:zhì # 䄺
+0x413b:cháo,táo,zhào # 䄻
+0x413c:tiǎn # 䄼
+0x413d:tiǎn # 䄽
+0x413e:ròu # 䄾
+0x413f:yì # 䄿
+0x4140:liè # 䅀
+0x4141:àn # 䅁
+0x4142:hé # 䅂
+0x4143:qióng # 䅃
+0x4144:lì # 䅄
+0x4146:zì # 䅆
+0x4147:sù # 䅇
+0x4148:yuàn # 䅈
+0x4149:yà # 䅉
+0x414a:dù # 䅊
+0x414b:wǎn # 䅋
+0x414d:dòng,tǐng # 䅍
+0x414e:yǒu # 䅎
+0x414f:huì,wèi # 䅏
+0x4150:jiǎn,qián # 䅐
+0x4151:ruí,suí # 䅑
+0x4152:máng # 䅒
+0x4153:jǔ,qù # 䅓
+0x4156:ǎn # 䅖
+0x4157:suì # 䅗
+0x4158:lái # 䅘
+0x4159:hùn # 䅙
+0x415a:qiǎng,quǎn,zé # 䅚
+0x415c:duò # 䅜
+0x415e:nà,nài,nè # 䅞
+0x415f:cǎn # 䅟
+0x4160:tí # 䅠
+0x4161:xǔ # 䅡
+0x4162:jiù # 䅢
+0x4163:huáng # 䅣
+0x4164:qì # 䅤
+0x4165:jié # 䅥
+0x4166:máo # 䅦
+0x4167:yàn # 䅧
+0x4169:zhǐ # 䅩
+0x416a:tuí # 䅪
+0x416c:ài,yǎn,yè # 䅬
+0x416d:páng # 䅭
+0x416e:càng # 䅮
+0x416f:táng # 䅯
+0x4170:ěn # 䅰
+0x4171:hùn # 䅱
+0x4172:qí # 䅲
+0x4173:chú # 䅳
+0x4174:suǒ # 䅴
+0x4175:zhuó # 䅵
+0x4176:nòu,wǔ # 䅶
+0x4177:tú # 䅷
+0x4178:zú # 䅸
+0x4179:lóu,lǒu # 䅹
+0x417a:miǎo # 䅺
+0x417b:lí # 䅻
+0x417c:mán # 䅼
+0x417d:gǔ # 䅽
+0x417e:cén,qián,qín # 䅾
+0x417f:huá # 䅿
+0x4180:měi # 䆀
+0x4182:lián,qiàn # 䆂
+0x4183:dǎo,dào # 䆃
+0x4184:shàn # 䆄
+0x4185:cí,jǐ,zī # 䆅
+0x4188:zhì # 䆈
+0x4189:bà # 䆉
+0x418a:cuì # 䆊
+0x418b:qiū # 䆋
+0x418d:lóng # 䆍
+0x418f:fèi # 䆏
+0x4190:guó # 䆐
+0x4191:chéng # 䆑
+0x4192:jiù # 䆒
+0x4193:è,ruǎn # 䆓
+0x4195:jué,yuè # 䆕
+0x4196:hóng # 䆖
+0x4197:jiào # 䆗
+0x4198:cuán,yā # 䆘
+0x4199:yáo # 䆙
+0x419a:tóng # 䆚
+0x419b:chá,zhà,zhé # 䆛
+0x419c:yòu # 䆜
+0x419d:shù # 䆝
+0x419e:yǎo # 䆞
+0x419f:gé # 䆟
+0x41a0:huàn # 䆠
+0x41a1:láng,làng # 䆡
+0x41a2:jué,yuè # 䆢
+0x41a3:chén # 䆣
+0x41a6:shèn # 䆦
+0x41a8:míng # 䆨
+0x41a9:míng # 䆩
+0x41ab:chuāng # 䆫
+0x41ac:yǔn # 䆬
+0x41ae:jìn # 䆮
+0x41af:chuò,zhuó # 䆯
+0x41b1:tǎn # 䆱
+0x41b3:qióng,suì # 䆳
+0x41b5:chéng # 䆵
+0x41b7:yù,xuè # 䆷
+0x41b8:chéng # 䆸
+0x41b9:tǒng # 䆹
+0x41bb:qiào # 䆻
+0x41bd:jù,qú,qún # 䆽
+0x41be:lán # 䆾
+0x41bf:yì # 䆿
+0x41c0:róng,rǒng # 䇀
+0x41c3:sì,xiào # 䇃
+0x41c5:fá # 䇅
+0x41c7:méng # 䇇
+0x41c8:guì,huà # 䇈
+0x41cb:hài,rǎn,xiè # 䇋
+0x41cc:qiào # 䇌
+0x41cd:chuò # 䇍
+0x41ce:què # 䇎
+0x41cf:duì # 䇏
+0x41d0:lì # 䇐
+0x41d1:bà # 䇑
+0x41d2:jiè,qín,xiàn # 䇒
+0x41d4:luò,nuò # 䇔
+0x41d6:yǔn # 䇖
+0x41d8:hù # 䇘
+0x41d9:yǐn # 䇙
+0x41db:zhǐ # 䇛
+0x41dc:liǎn # 䇜
+0x41de:gǎn # 䇞
+0x41df:jiàn # 䇟
+0x41e0:zhòu,zhù # 䇠
+0x41e1:zhù # 䇡
+0x41e2:kǔ # 䇢
+0x41e3:nà,nèi,yǐ # 䇣
+0x41e4:duì,ruì,sù # 䇤
+0x41e5:zé,zuó # 䇥
+0x41e6:yǎng # 䇦
+0x41e7:zhù # 䇧
+0x41e8:gòng,xiáng # 䇨
+0x41e9:yì # 䇩
+0x41ec:chuǎng,zhū # 䇬
+0x41ed:lǎo # 䇭
+0x41ee:rèn # 䇮
+0x41ef:róng # 䇯
+0x41f1:nà # 䇱
+0x41f2:cè,jiā # 䇲
+0x41f5:yí # 䇵
+0x41f6:jué # 䇶
+0x41f7:bǐ,bié # 䇷
+0x41f8:chéng,shèng,zèng # 䇸
+0x41f9:jùn # 䇹
+0x41fa:chóu,dòu # 䇺
+0x41fb:huì,kuì,wěi # 䇻
+0x41fc:chì,yì # 䇼
+0x41fd:zhì # 䇽
+0x41fe:yán # 䇾
+0x4201:lún,luò # 䈁
+0x4202:bìng,píng # 䈂
+0x4203:zhǎo # 䈃
+0x4204:hán # 䈄
+0x4205:yù # 䈅
+0x4206:dài # 䈆
+0x4207:zhào # 䈇
+0x4208:féi # 䈈
+0x4209:shà # 䈉
+0x420a:líng # 䈊
+0x420b:tà # 䈋
+0x420d:máng # 䈍
+0x420e:yè # 䈎
+0x420f:báo # 䈏
+0x4210:kuì # 䈐
+0x4211:guǎ,jué # 䈑
+0x4212:nǎn # 䈒
+0x4213:gé # 䈓
+0x4215:chí,shi,tí,shí # 䈕
+0x4217:suǒ # 䈗
+0x4218:cí # 䈘
+0x4219:zhòu # 䈙
+0x421a:tái # 䈚
+0x421b:kuài # 䈛
+0x421c:qìn # 䈜
+0x421e:dǔ # 䈞
+0x421f:cè # 䈟
+0x4220:huǎn # 䈠
+0x4222:sǎi # 䈢
+0x4223:zhèng # 䈣
+0x4224:qián # 䈤
+0x4227:wěi # 䈧
+0x422a:xì # 䈪
+0x422b:nà # 䈫
+0x422c:pú # 䈬
+0x422d:huái # 䈭
+0x422e:jǔ,jù,wǎn # 䈮
+0x4232:pán # 䈲
+0x4233:tà # 䈳
+0x4234:qiàn,zhǎn # 䈴
+0x4236:róng # 䈶
+0x4237:luò # 䈷
+0x4238:hú # 䈸
+0x4239:sǒu # 䈹
+0x423b:pú # 䈻
+0x423c:miè,mì # 䈼
+0x423e:shāo,shuò # 䈾
+0x423f:mài,mì # 䈿
+0x4240:shù # 䉀
+0x4241:líng # 䉁
+0x4242:lěi # 䉂
+0x4243:jiǎng # 䉃
+0x4244:léng # 䉄
+0x4245:zhì # 䉅
+0x4246:diǎo # 䉆
+0x4248:sǎn # 䉈
+0x4249:hú # 䉉
+0x424a:fàn,fáng # 䉊
+0x424b:mèi # 䉋
+0x424c:suì # 䉌
+0x424d:jiǎn # 䉍
+0x424e:táng # 䉎
+0x424f:xiè # 䉏
+0x4251:mó,wú # 䉑
+0x4252:fán # 䉒
+0x4253:léi,luò # 䉓
+0x4255:céng # 䉕
+0x4256:líng # 䉖
+0x4258:cóng # 䉘
+0x4259:yún # 䉙
+0x425a:méng # 䉚
+0x425b:yù # 䉛
+0x425c:zhì # 䉜
+0x425d:qǐ # 䉝
+0x425e:dǎn # 䉞
+0x425f:huò # 䉟
+0x4260:wéi # 䉠
+0x4261:tán # 䉡
+0x4262:sè # 䉢
+0x4263:xiè # 䉣
+0x4264:sǒu # 䉤
+0x4265:sǒng # 䉥
+0x4267:liú,liǔ # 䉧
+0x4268:yì # 䉨
+0x426a:lèi # 䉪
+0x426b:lí # 䉫
+0x426c:fèi # 䉬
+0x426d:liè # 䉭
+0x426e:lìn # 䉮
+0x426f:xiàn # 䉯
+0x4270:yáo # 䉰
+0x4272:biè,mí # 䉲
+0x4273:xiǎn # 䉳
+0x4274:ráng,rǎng # 䉴
+0x4275:zhuàn # 䉵
+0x4277:dàn,jìn,yán # 䉷
+0x4278:biàn # 䉸
+0x4279:líng,liǔ # 䉹
+0x427a:hóng # 䉺
+0x427b:qí # 䉻
+0x427c:liào # 䉼
+0x427d:bǎn # 䉽
+0x427e:mì,bì # 䉾
+0x427f:hú,luò # 䉿
+0x4280:hú # 䊀
+0x4282:cè,sè # 䊂
+0x4283:pèi # 䊃
+0x4284:qióng # 䊄
+0x4285:míng # 䊅
+0x4286:jiù,qiǔ # 䊆
+0x4287:bù # 䊇
+0x4288:méi # 䊈
+0x4289:sǎn # 䊉
+0x428a:mèi # 䊊
+0x428d:lí # 䊍
+0x428e:quǎn # 䊎
+0x4290:èn,huá,huàn,hún # 䊐
+0x4291:xiǎng # 䊑
+0x4293:shì # 䊓
+0x4296:lǎn,nǎn # 䊖
+0x4297:huáng,huǎng # 䊗
+0x4298:jiù # 䊘
+0x4299:yán # 䊙
+0x429b:sǎ # 䊛
+0x429c:tuán # 䊜
+0x429d:xiè # 䊝
+0x429e:zhé # 䊞
+0x429f:mén # 䊟
+0x42a0:xì # 䊠
+0x42a1:mán # 䊡
+0x42a3:huáng # 䊣
+0x42a4:tán # 䊤
+0x42a5:xiào # 䊥
+0x42a6:yá,yè # 䊦
+0x42a7:bì # 䊧
+0x42a8:luó # 䊨
+0x42a9:fán,fàn # 䊩
+0x42aa:lì # 䊪
+0x42ab:cuǐ,mí # 䊫
+0x42ac:chà # 䊬
+0x42ad:chóu,dào # 䊭
+0x42ae:dí,zhé,zhè # 䊮
+0x42af:kuàng # 䊯
+0x42b0:chǔ # 䊰
+0x42b2:chǎn # 䊲
+0x42b3:mí # 䊳
+0x42b4:qiàn # 䊴
+0x42b5:qiú # 䊵
+0x42b6:zhèn # 䊶
+0x42ba:gǔ,hù # 䊺
+0x42bb:yǎn # 䊻
+0x42bc:chǐ # 䊼
+0x42bd:guài # 䊽
+0x42be:mù # 䊾
+0x42bf:bó,kù # 䊿
+0x42c0:kuà,huà # 䋀
+0x42c1:gěng # 䋁
+0x42c2:yáo # 䋂
+0x42c3:mào # 䋃
+0x42c4:wǎng # 䋄
+0x42c8:rú # 䋈
+0x42c9:jué,kě,xué # 䋉
+0x42cb:mín # 䋋
+0x42cc:jiǎng # 䋌
+0x42ce:zhàn # 䋎
+0x42cf:zuò # 䋏
+0x42d0:yuè # 䋐
+0x42d1:bǐng # 䋑
+0x42d3:zhòu # 䋓
+0x42d4:bì # 䋔
+0x42d5:rèn # 䋕
+0x42d6:yù # 䋖
+0x42d8:chuò,zhuì # 䋘
+0x42d9:ěr # 䋙
+0x42da:yì # 䋚
+0x42db:mí,mǐ # 䋛
+0x42dc:qìng # 䋜
+0x42de:wǎng # 䋞
+0x42df:jì # 䋟
+0x42e0:bǔ # 䋠
+0x42e2:biè,biē # 䋢
+0x42e3:fán,pán # 䋣
+0x42e4:yào,yuè # 䋤
+0x42e5:lí # 䋥
+0x42e6:fán # 䋦
+0x42e7:qú # 䋧
+0x42e8:fǔ # 䋨
+0x42e9:ér # 䋩
+0x42ed:huò,yù # 䋭
+0x42ee:jìn,qián # 䋮
+0x42ef:qǐ,qìng # 䋯
+0x42f0:jú # 䋰
+0x42f1:lái # 䋱
+0x42f2:chě,shéng,xǐng,zhè # 䋲
+0x42f3:bèi,mì # 䋳
+0x42f4:niù,rǒng,róu,rǔ # 䋴
+0x42f5:yì # 䋵
+0x42f6:xù # 䋶
+0x42f7:liú,móu # 䋷
+0x42f8:xún # 䋸
+0x42f9:fú,fù # 䋹
+0x42fb:nín # 䋻
+0x42fc:tǐng,yíng,tīng # 䋼
+0x42fd:běng,pěng # 䋽
+0x42fe:zhǎ # 䋾
+0x4302:òu # 䌂
+0x4303:shuò # 䌃
+0x4304:gěng # 䌄
+0x4305:táng # 䌅
+0x4306:guì # 䌆
+0x4307:suǒ # 䌇
+0x4308:tà # 䌈
+0x430a:yáo,yóu # 䌊
+0x430c:qì,qiè,qǔ # 䌌
+0x430d:hàn,jǐn # 䌍
+0x430e:lüè # 䌎
+0x430f:mì,miàn # 䌏
+0x4310:mì # 䌐
+0x4312:lù # 䌒
+0x4313:fán # 䌓
+0x4314:òu # 䌔
+0x4315:mí,mó # 䌕
+0x4316:jié # 䌖
+0x4317:fǔ # 䌗
+0x4318:mí # 䌘
+0x4319:huǎng # 䌙
+0x431a:sù # 䌚
+0x431b:yáo # 䌛
+0x431c:niè # 䌜
+0x431d:jìn # 䌝
+0x431e:liǎn # 䌞
+0x431f:bì # 䌟
+0x4320:qìng,yǎn,yìn # 䌠
+0x4321:tǐ # 䌡
+0x4322:líng # 䌢
+0x4323:zuǎn # 䌣
+0x4324:zhǐ # 䌤
+0x4325:yǐn # 䌥
+0x4326:dǎo # 䌦
+0x4327:chóu # 䌧
+0x4328:cài # 䌨
+0x4329:mì,miè # 䌩
+0x432a:yán # 䌪
+0x432b:lǎn # 䌫
+0x432c:chóng # 䌬
+0x432f:guàn,quán # 䌯
+0x4330:shè # 䌰
+0x4331:luò # 䌱
+0x4334:luò # 䌴
+0x4335:zhú,zhǔ # 䌵
+0x4337:chōu,chóu # 䌷
+0x4338:juàn # 䌸
+0x4339:jiǒng # 䌹
+0x433a:ěr # 䌺
+0x433b:yì # 䌻
+0x433c:ruì # 䌼
+0x433d:cǎi # 䌽
+0x433e:rén # 䌾
+0x433f:fú # 䌿
+0x4340:lán # 䍀
+0x4341:suì # 䍁
+0x4342:yú # 䍂
+0x4343:yáo,yóu # 䍃
+0x4344:diǎn # 䍄
+0x4345:líng # 䍅
+0x4346:zhù # 䍆
+0x4347:tà # 䍇
+0x4348:píng # 䍈
+0x4349:qián,zhǎi # 䍉
+0x434a:jué # 䍊
+0x434b:chuí # 䍋
+0x434c:bù,fú # 䍌
+0x434d:gǔ,gù,guàng,kòu # 䍍
+0x434e:cùn # 䍎
+0x4350:hǎn,hàn # 䍐
+0x4351:hǎn # 䍑
+0x4352:mǒu # 䍒
+0x4353:hù,yá # 䍓
+0x4354:hóng # 䍔
+0x4355:dǐ # 䍕
+0x4356:fú,fù,hài,xiè # 䍖
+0x4357:xuàn # 䍗
+0x4358:mí # 䍘
+0x4359:méi # 䍙
+0x435a:làng # 䍚
+0x435b:gù # 䍛
+0x435c:zhào # 䍜
+0x435d:tà,zǎn # 䍝
+0x435e:yù # 䍞
+0x435f:zòng # 䍟
+0x4360:lí # 䍠
+0x4361:liào,lù # 䍡
+0x4362:wú,wǔ # 䍢
+0x4363:léi # 䍣
+0x4364:jǐ # 䍤
+0x4365:lèi,lì # 䍥
+0x4366:lí # 䍦
+0x4368:bó,fèi # 䍨
+0x4369:ǎng,yǎng # 䍩
+0x436a:kuì,wà # 䍪
+0x436b:tuó # 䍫
+0x436e:zhào # 䍮
+0x436f:guǐ,jì # 䍯
+0x4371:xú # 䍱
+0x4372:nái,ní,nì # 䍲
+0x4373:chuò,jué,què # 䍳
+0x4374:duò,ruí,wěi,wèi # 䍴
+0x4376:dòng # 䍶
+0x4377:guì,huì,wěi # 䍷
+0x4378:bó # 䍸
+0x437a:huán # 䍺
+0x437b:xuǎn # 䍻
+0x437c:cán # 䍼
+0x437d:lì # 䍽
+0x437e:tuí,yǎn # 䍾
+0x437f:huáng # 䍿
+0x4380:xuè,yuè # 䎀
+0x4381:hú # 䎁
+0x4382:bǎo # 䎂
+0x4383:rǎn # 䎃
+0x4384:tiáo # 䎄
+0x4385:fù,luò,pò # 䎅
+0x4386:liào # 䎆
+0x4388:yì # 䎈
+0x4389:shù,yù # 䎉
+0x438a:pò # 䎊
+0x438b:hè,kào # 䎋
+0x438c:cù # 䎌
+0x438e:nà # 䎎
+0x438f:àn,hán # 䎏
+0x4390:chǎo # 䎐
+0x4391:lù # 䎑
+0x4392:zhǎn # 䎒
+0x4393:tà # 䎓
+0x4397:qiáo # 䎗
+0x4398:sù # 䎘
+0x439a:guàn,huì # 䎚
+0x439d:chú,zhù # 䎝
+0x439f:ér,nuò # 䎟
+0x43a0:ér,nuó # 䎠
+0x43a1:nuǎn,ruǎn # 䎡
+0x43a2:qǐ # 䎢
+0x43a3:sì,xìn # 䎣
+0x43a4:chú,jú # 䎤
+0x43a6:yǎn # 䎦
+0x43a7:bàng,póu # 䎧
+0x43a8:àn,yè # 䎨
+0x43aa:nè # 䎪
+0x43ab:chuàng,zǒng # 䎫
+0x43ac:bēi,bà # 䎬
+0x43ae:tì # 䎮
+0x43af:hàn # 䎯
+0x43b0:zuó # 䎰
+0x43b1:bēi,bà # 䎱
+0x43b2:zhé # 䎲
+0x43b3:wà,yuè # 䎳
+0x43b4:shèng # 䎴
+0x43b5:bì # 䎵
+0x43b6:èr # 䎶
+0x43b7:zhù # 䎷
+0x43b8:wù # 䎸
+0x43b9:wén # 䎹
+0x43ba:zhǐ,zhì # 䎺
+0x43bb:zhǒu # 䎻
+0x43bc:lù # 䎼
+0x43bd:wén,wèn # 䎽
+0x43be:gǔn # 䎾
+0x43bf:qiú,xiòng # 䎿
+0x43c0:là # 䏀
+0x43c1:zǎi # 䏁
+0x43c2:sǒu # 䏂
+0x43c3:mián # 䏃
+0x43c4:zhì # 䏄
+0x43c5:qì # 䏅
+0x43c6:cáo # 䏆
+0x43c7:piào # 䏇
+0x43c8:lián # 䏈
+0x43ca:lóng # 䏊
+0x43cb:sù # 䏋
+0x43cc:qì,yì # 䏌
+0x43cd:yuàn # 䏍
+0x43ce:féng,hàn # 䏎
+0x43d0:jué,zhuò # 䏐
+0x43d1:dì,zhì # 䏑
+0x43d2:piàn # 䏒
+0x43d3:guǎn # 䏓
+0x43d4:niǔ # 䏔
+0x43d5:rěn,rùn # 䏕
+0x43d6:zhèn # 䏖
+0x43d7:gài,kuì # 䏗
+0x43d8:pǐ,pì # 䏘
+0x43d9:tǎn # 䏙
+0x43da:chǎo,miǎo # 䏚
+0x43db:chǔn # 䏛
+0x43dd:chún,zhuǎn # 䏝
+0x43de:mò # 䏞
+0x43df:biè,bié # 䏟
+0x43e0:qì # 䏠
+0x43e1:shì # 䏡
+0x43e2:bǐ # 䏢
+0x43e3:jué,qù,qū # 䏣
+0x43e4:sì # 䏤
+0x43e6:huá,tián,wǎn # 䏦
+0x43e7:ná # 䏧
+0x43e8:huǐ # 䏨
+0x43ea:èr # 䏪
+0x43ec:móu # 䏬
+0x43ee:xí,xié # 䏮
+0x43ef:zhì # 䏯
+0x43f0:rěn,chǔn # 䏰
+0x43f1:jú # 䏱
+0x43f2:dié # 䏲
+0x43f3:zhè # 䏳
+0x43f4:shào,shè # 䏴
+0x43f5:měng # 䏵
+0x43f6:bì # 䏶
+0x43f7:hàn # 䏷
+0x43f8:yú # 䏸
+0x43f9:xiàn # 䏹
+0x43fb:néng # 䏻
+0x43fc:cán # 䏼
+0x43fd:bù # 䏽
+0x43ff:qǐ # 䏿
+0x4400:jì # 䐀
+0x4401:niǎo,zhuó # 䐁
+0x4402:lù # 䐂
+0x4403:jiǒng # 䐃
+0x4404:hàn,liǎn,xiàn # 䐄
+0x4405:yí # 䐅
+0x4406:cǎi,cài # 䐆
+0x4407:chún # 䐇
+0x4408:zhí # 䐈
+0x4409:zì # 䐉
+0x440a:dá,hún,hùn # 䐊
+0x440c:tiǎn,zhòu # 䐌
+0x440d:zhòu # 䐍
+0x440f:chǔn # 䐏
+0x4411:zhé # 䐑
+0x4413:róu,rù # 䐓
+0x4414:bìn # 䐔
+0x4415:jí # 䐕
+0x4416:yí # 䐖
+0x4417:dǔ # 䐗
+0x4418:jué # 䐘
+0x4419:gé,yì # 䐙
+0x441a:jí,jì # 䐚
+0x441d:suǒ,suò # 䐝
+0x441e:ruò # 䐞
+0x441f:xiàng # 䐟
+0x4420:huǎng # 䐠
+0x4421:qí # 䐡
+0x4422:zhù # 䐢
+0x4423:cuò,sǔn # 䐣
+0x4424:chí,cuó,qì,zhàn # 䐤
+0x4425:wěng # 䐥
+0x4427:kào # 䐧
+0x4428:gǔ # 䐨
+0x4429:kǎi # 䐩
+0x442a:fàn,juǎn # 䐪
+0x442c:cáo # 䐬
+0x442d:zhì # 䐭
+0x442e:chǎn # 䐮
+0x442f:léi # 䐯
+0x4432:zhé # 䐲
+0x4433:yú # 䐳
+0x4434:guì # 䐴
+0x4435:huáng # 䐵
+0x4436:jǐn # 䐶
+0x4438:guó,huò # 䐸
+0x4439:sào,sōu # 䐹
+0x443a:tàn # 䐺
+0x443c:xì # 䐼
+0x443d:mán # 䐽
+0x443e:duó # 䐾
+0x443f:áo,ǎo # 䐿
+0x4440:pì # 䑀
+0x4441:wù # 䑁
+0x4442:ǎi,xì # 䑂
+0x4443:méng # 䑃
+0x4444:pì,yì # 䑄
+0x4445:méng # 䑅
+0x4446:yǎng # 䑆
+0x4447:zhì # 䑇
+0x4448:bó # 䑈
+0x4449:yíng # 䑉
+0x444a:wéi,wèi # 䑊
+0x444b:náo,rǎng # 䑋
+0x444c:lán # 䑌
+0x444d:yàn,yǐng # 䑍
+0x444e:chǎn # 䑎
+0x444f:quán # 䑏
+0x4450:zhěn # 䑐
+0x4451:pú # 䑑
+0x4453:tái,tǎi # 䑓
+0x4454:fèi # 䑔
+0x4455:shǔ # 䑕
+0x4457:dàng # 䑗
+0x4458:chá,cuó # 䑘
+0x4459:rán # 䑙
+0x445a:tián # 䑚
+0x445b:chǐ,shì,yì # 䑛
+0x445c:tà # 䑜
+0x445d:jiǎ # 䑝
+0x445e:shùn # 䑞
+0x445f:huáng # 䑟
+0x4460:liǎo # 䑠
+0x4464:jìn,jìng # 䑤
+0x4465:è,sà # 䑥
+0x4467:fú # 䑧
+0x4468:duò # 䑨
+0x446a:è # 䑪
+0x446c:yào # 䑬
+0x446d:dì,zhì # 䑭
+0x446f:dì # 䑯
+0x4470:bù # 䑰
+0x4471:mán,wǎn # 䑱
+0x4472:chè,zhái,zhào # 䑲
+0x4473:lún # 䑳
+0x4474:qí # 䑴
+0x4475:mù # 䑵
+0x4476:cán,qiàn # 䑶
+0x447b:yóu # 䑻
+0x447d:dá,tà # 䑽
+0x447f:sù # 䑿
+0x4480:fú # 䒀
+0x4481:jì,xí,xiào,yà # 䒁
+0x4482:jiǎng,xiǎng # 䒂
+0x4483:zào # 䒃
+0x4484:bó,fù # 䒄
+0x4485:téng # 䒅
+0x4486:chè # 䒆
+0x4487:fù # 䒇
+0x4488:bǔ,fèi # 䒈
+0x4489:wǔ # 䒉
+0x448b:yǎng # 䒋
+0x448c:mìng # 䒌
+0x448d:pǎng # 䒍
+0x448e:mǎng # 䒎
+0x4490:méng # 䒐
+0x4491:cǎo # 䒑
+0x4492:tiáo,yǎo,yóu # 䒒
+0x4493:kǎi # 䒓
+0x4494:bài # 䒔
+0x4495:xiǎo # 䒕
+0x4496:xìn # 䒖
+0x4497:qì # 䒗
+0x449a:shǎo # 䒚
+0x449b:héng,huàn # 䒛
+0x449c:niú # 䒜
+0x449d:xiáo # 䒝
+0x449e:chén # 䒞
+0x44a0:fēng,xiá # 䒠
+0x44a1:yǐn # 䒡
+0x44a2:áng,yìng # 䒢
+0x44a3:rǎn # 䒣
+0x44a4:rì # 䒤
+0x44a5:fà,liǔ,mán # 䒥
+0x44a6:fàn # 䒦
+0x44a7:qù # 䒧
+0x44a8:shǐ # 䒨
+0x44a9:hé,xiá # 䒩
+0x44aa:biàn # 䒪
+0x44ab:dài # 䒫
+0x44ac:mò # 䒬
+0x44ad:děng # 䒭
+0x44b2:chà # 䒲
+0x44b3:duǒ # 䒳
+0x44b4:yǒu # 䒴
+0x44b5:hào # 䒵
+0x44b8:xián,xuè,yuè # 䒸
+0x44b9:lèi # 䒹
+0x44ba:jǐn # 䒺
+0x44bb:qǐ # 䒻
+0x44bd:méi,wǎng # 䒽
+0x44c2:yán # 䓂
+0x44c3:yì # 䓃
+0x44c4:yín # 䓄
+0x44c5:qí # 䓅
+0x44c6:zhé # 䓆
+0x44c7:xì # 䓇
+0x44c8:yì # 䓈
+0x44c9:yé # 䓉
+0x44ca:è,wú,yú # 䓊
+0x44cc:zhì # 䓌
+0x44cd:hǎn # 䓍
+0x44ce:chuò # 䓎
+0x44d0:chún # 䓐
+0x44d1:bǐng,píng # 䓑
+0x44d2:kuǎi # 䓒
+0x44d3:chóu # 䓓
+0x44d5:tuǒ,wěi # 䓕
+0x44d6:qióng # 䓖
+0x44d8:jiù # 䓘
+0x44da:cú # 䓚
+0x44db:fǔ,gǔ,qū # 䓛
+0x44dd:méng,mèng # 䓝
+0x44de:lì # 䓞
+0x44df:liè # 䓟
+0x44e0:tà # 䓠
+0x44e2:gù # 䓢
+0x44e3:liǎng # 䓣
+0x44e5:là # 䓥
+0x44e6:diǎn # 䓦
+0x44e7:cì,jí # 䓧
+0x44eb:jì,qí # 䓫
+0x44ed:chà # 䓭
+0x44ee:mào # 䓮
+0x44ef:dú # 䓯
+0x44f1:chái,zhài # 䓱
+0x44f2:ruì,sà # 䓲
+0x44f3:hěn # 䓳
+0x44f4:ruán,ruǎn # 䓴
+0x44f6:lài # 䓶
+0x44f7:xìng # 䓷
+0x44f9:yì # 䓹
+0x44fa:měi,wèi # 䓺
+0x44fc:hè,máng # 䓼
+0x44fd:jì # 䓽
+0x44ff:hǎn,hàn # 䓿
+0x4501:lì # 䔁
+0x4502:zǐ # 䔂
+0x4503:zǔ # 䔃
+0x4504:yáo # 䔄
+0x4506:lí # 䔆
+0x4507:qǐ,yǐ # 䔇
+0x4508:gǎn,gòng,nǒu # 䔈
+0x4509:lì # 䔉
+0x450e:sù # 䔎
+0x450f:chòu # 䔏
+0x4511:xié,yé # 䔑
+0x4512:bèi # 䔒
+0x4513:xǔ # 䔓
+0x4514:jìng,qiǎn,qiú,yǐng # 䔔
+0x4515:pú # 䔕
+0x4516:líng # 䔖
+0x4517:xiáng # 䔗
+0x4518:zuò # 䔘
+0x4519:diào # 䔙
+0x451a:chún # 䔚
+0x451b:qǐng # 䔛
+0x451c:nán # 䔜
+0x451e:lǜ # 䔞
+0x451f:chí,chǐ,yí # 䔟
+0x4520:shǎo # 䔠
+0x4521:yú # 䔡
+0x4522:huá,huà # 䔢
+0x4523:lí # 䔣
+0x4527:lí,lì # 䔧
+0x452a:duì,shuǎng # 䔪
+0x452c:yì # 䔬
+0x452d:nìng,zhǒu # 䔭
+0x452f:hú,huà,kù # 䔯
+0x4530:fú,fù # 䔰
+0x4532:chéng,zhuó # 䔲
+0x4533:nǎn,rán # 䔳
+0x4534:cè,cuì # 䔴
+0x4536:tí # 䔶
+0x4537:qín # 䔷
+0x4538:biǎo # 䔸
+0x4539:suì # 䔹
+0x453a:wéi # 䔺
+0x453c:sè # 䔼
+0x453d:ài # 䔽
+0x453e:è,qì,zè # 䔾
+0x453f:jiè,zǔn # 䔿
+0x4540:kuǎn # 䕀
+0x4541:fěi # 䕁
+0x4543:yìn # 䕃
+0x4545:sǎo # 䕅
+0x4546:dòu # 䕆
+0x4547:huì # 䕇
+0x4548:xiè # 䕈
+0x4549:zé # 䕉
+0x454a:tán # 䕊
+0x454b:chǎng,táng # 䕋
+0x454c:zhì # 䕌
+0x454d:yì # 䕍
+0x454e:fú # 䕎
+0x454f:é # 䕏
+0x4551:jùn # 䕑
+0x4553:chá,chuì # 䕓
+0x4554:xián # 䕔
+0x4555:màn # 䕕
+0x4557:bì,pèi # 䕗
+0x4558:líng # 䕘
+0x4559:jié # 䕙
+0x455a:kuì # 䕚
+0x455b:jiá # 䕛
+0x455e:làng,liáo # 䕞
+0x4560:fèi # 䕠
+0x4561:lǘ # 䕡
+0x4562:zhǎ # 䕢
+0x4563:hé,kě,shé # 䕣
+0x4565:nǐ,yí # 䕥
+0x4566:yíng # 䕦
+0x4567:xiào # 䕧
+0x4568:téng # 䕨
+0x4569:lǎo # 䕩
+0x456a:zé # 䕪
+0x456b:kuí # 䕫
+0x456d:qián # 䕭
+0x456e:jú # 䕮
+0x456f:piáo # 䕯
+0x4570:bàn,fán,fàn # 䕰
+0x4571:dǒu,dòu,tóu # 䕱
+0x4572:lǐn # 䕲
+0x4573:mí # 䕳
+0x4574:zhuó # 䕴
+0x4575:xié,xiè # 䕵
+0x4576:hù # 䕶
+0x4577:mí # 䕷
+0x4579:zá # 䕹
+0x457a:cóng # 䕺
+0x457b:gé,lì,lí # 䕻
+0x457c:nán,nàn,rán # 䕼
+0x457d:zhú # 䕽
+0x457e:yán,yín # 䕾
+0x457f:hàn # 䕿
+0x4581:yì # 䖁
+0x4582:luán # 䖂
+0x4583:yuè # 䖃
+0x4584:rán # 䖄
+0x4585:líng # 䖅
+0x4586:niàng # 䖆
+0x4587:yù # 䖇
+0x4588:nüè # 䖈
+0x458a:yí,yì # 䖊
+0x458b:nüè # 䖋
+0x458c:qín,yá,yì # 䖌
+0x458d:qián # 䖍
+0x458e:xiá # 䖎
+0x458f:chǔ # 䖏
+0x4590:jìn,yín # 䖐
+0x4591:mì # 䖑
+0x4593:nà # 䖓
+0x4594:hàn,kǎn # 䖔
+0x4595:zǔ # 䖕
+0x4596:xiá # 䖖
+0x4597:yán,yàn # 䖗
+0x4598:tú # 䖘
+0x459b:suǒ # 䖛
+0x459c:yín,yìn # 䖜
+0x459d:chóng # 䖝
+0x459e:zhǒu # 䖞
+0x459f:mǎng,méng # 䖟
+0x45a0:yuán # 䖠
+0x45a1:nǜ # 䖡
+0x45a2:miáo # 䖢
+0x45a3:zǎo # 䖣
+0x45a4:wǎn,yuán # 䖤
+0x45a5:máo # 䖥
+0x45a7:nà # 䖧
+0x45a8:shí # 䖨
+0x45a9:bì,pì # 䖩
+0x45aa:cí # 䖪
+0x45ab:bàng # 䖫
+0x45ad:juàn # 䖭
+0x45ae:xiǎng # 䖮
+0x45af:kuí,wā # 䖯
+0x45b0:pài # 䖰
+0x45b2:xún # 䖲
+0x45b3:zhà # 䖳
+0x45b4:yáo # 䖴
+0x45b8:é # 䖸
+0x45b9:yáng # 䖹
+0x45ba:tiáo,zhào # 䖺
+0x45bb:yóu # 䖻
+0x45bc:jué,xuè # 䖼
+0x45bd:lí # 䖽
+0x45bf:lí # 䖿
+0x45c1:jì,qī # 䗁
+0x45c2:hǔ # 䗂
+0x45c3:zhàn # 䗃
+0x45c4:fǔ,pì # 䗄
+0x45c5:cháng # 䗅
+0x45c6:guǎn,wěi # 䗆
+0x45c7:jú,qú # 䗇
+0x45c8:méng # 䗈
+0x45ca:chéng,tàn # 䗊
+0x45cb:móu # 䗋
+0x45cd:lǐ # 䗍
+0x45d1:yì # 䗑
+0x45d2:bìng # 䗒
+0x45d4:hóu # 䗔
+0x45d5:wǎn # 䗕
+0x45d6:dì # 䗖
+0x45d8:gé,kè # 䗘
+0x45d9:hán # 䗙
+0x45da:bó # 䗚
+0x45dc:liú # 䗜
+0x45dd:cán # 䗝
+0x45de:cán,chěn,shǎn,yǐn,zàn,zhàn # 䗞
+0x45df:yì # 䗟
+0x45e0:xuán # 䗠
+0x45e1:yán # 䗡
+0x45e2:zǎo # 䗢
+0x45e3:gǎo,hàn # 䗣
+0x45e4:yóng # 䗤
+0x45e8:yú # 䗨
+0x45ea:zhè # 䗪
+0x45eb:má # 䗫
+0x45ee:shuǎng # 䗮
+0x45ef:jìn # 䗯
+0x45f0:guàn # 䗰
+0x45f1:pú # 䗱
+0x45f2:lìn # 䗲
+0x45f4:tíng # 䗴
+0x45f6:là,lì # 䗶
+0x45f7:yì # 䗷
+0x45f9:cì # 䗹
+0x45fa:yǎn # 䗺
+0x45fb:jié # 䗻
+0x45fd:wèi # 䗽
+0x45fe:xiǎn # 䗾
+0x45ff:níng # 䗿
+0x4600:fù # 䘀
+0x4601:gé,jié,kě # 䘁
+0x4603:mò # 䘃
+0x4604:fù,zhù # 䘄
+0x4605:nái,nài,něng # 䘅
+0x4606:xiǎn # 䘆
+0x4607:wén,wèn # 䘇
+0x4608:lì # 䘈
+0x4609:cán # 䘉
+0x460a:miè # 䘊
+0x460c:nì # 䘌
+0x460d:chài # 䘍
+0x460f:xù # 䘏
+0x4610:nǜ # 䘐
+0x4611:mài,mò # 䘑
+0x4613:kàn,kào # 䘓
+0x4615:háng # 䘕
+0x4618:yù # 䘘
+0x4619:wèi # 䘙
+0x461a:zú # 䘚
+0x461d:yì # 䘝
+0x4620:fú,pò # 䘠
+0x4621:bǐ # 䘡
+0x4622:zhǔ # 䘢
+0x4623:zǐ # 䘣
+0x4624:shù # 䘤
+0x4625:xiá,jiá # 䘥
+0x4626:ní,nǐ # 䘦
+0x4628:jiǎo # 䘨
+0x4629:xuàn,xún # 䘩
+0x462b:nòu,rú # 䘫
+0x462c:róng # 䘬
+0x462d:dié,zhì # 䘭
+0x462e:sà,sàng,xì # 䘮
+0x4631:yù # 䘱
+0x4635:lù # 䘵
+0x4636:hàn,yǎn # 䘶
+0x4638:yì # 䘸
+0x4639:zuì # 䘹
+0x463a:zhàn # 䘺
+0x463b:sù,yù # 䘻
+0x463c:wǎn # 䘼
+0x463d:ní,nǐ,nì # 䘽
+0x463e:guǎn # 䘾
+0x463f:jué # 䘿
+0x4640:běng # 䙀
+0x4641:cán # 䙁
+0x4643:duò,kuò,pán,ruán # 䙃
+0x4644:qì,zhǎ # 䙄
+0x4645:yào # 䙅
+0x4646:guì,kuì # 䙆
+0x4647:nuǎn,ruán # 䙇
+0x4648:hóu # 䙈
+0x4649:xún,zǎn # 䙉
+0x464a:xiè # 䙊
+0x464c:huì,kuì # 䙌
+0x464e:xié # 䙎
+0x464f:bó # 䙏
+0x4650:kè # 䙐
+0x4652:xù # 䙒
+0x4653:bǎi # 䙓
+0x4655:chù,zǒng # 䙕
+0x4657:tì # 䙗
+0x4658:chǔ,zú # 䙘
+0x4659:chí # 䙙
+0x465a:niǎo # 䙚
+0x465b:guàn,gǔn # 䙛
+0x465c:féng # 䙜
+0x465d:xiè,dié # 䙝
+0x465f:duò,wéi # 䙟
+0x4660:jué,wò # 䙠
+0x4661:huì,kuì # 䙡
+0x4662:zèng # 䙢
+0x4663:sà # 䙣
+0x4664:duǒ,duò # 䙤
+0x4665:líng # 䙥
+0x4666:méng # 䙦
+0x4668:guǒ,luǒ # 䙨
+0x4669:méng # 䙩
+0x466a:lóng,màng,pàn # 䙪
+0x466c:yìng # 䙬
+0x466e:guàn # 䙮
+0x466f:cù,zhuó # 䙯
+0x4670:lí # 䙰
+0x4671:dú,shǔ # 䙱
+0x4673:è # 䙳
+0x4677:dé,zhé # 䙷
+0x4678:dé,de # 䙸
+0x4679:jiǎng,nǎo,xiàn,xiǎng # 䙹
+0x467a:lián,liǎn,qiǎn # 䙺
+0x467c:shào # 䙼
+0x467d:xì,xié # 䙽
+0x467f:wèi # 䙿
+0x4682:hè,xì # 䚂
+0x4683:yóu # 䚃
+0x4684:lù # 䚄
+0x4685:lái,lài # 䚅
+0x4686:ǒu,yǎo,yǐng # 䚆
+0x4687:shěng,zhì # 䚇
+0x4688:juàn,wù,zhuàn # 䚈
+0x4689:qì,xì # 䚉
+0x468b:yùn # 䚋
+0x468d:qì # 䚍
+0x468f:lèng,lì,lìn # 䚏
+0x4690:jí # 䚐
+0x4691:mái # 䚑
+0x4692:chuáng,zhuàng # 䚒
+0x4693:niǎn,shěn # 䚓
+0x4695:lì,luán # 䚕
+0x4696:líng # 䚖
+0x4698:chén,chéng # 䚘
+0x469a:xiǎn # 䚚
+0x469b:hú # 䚛
+0x469d:zú # 䚝
+0x469e:dǎi # 䚞
+0x469f:dǎi # 䚟
+0x46a0:hùn # 䚠
+0x46a2:chè # 䚢
+0x46a3:tí,tì # 䚣
+0x46a5:nuò # 䚥
+0x46a6:zhì # 䚦
+0x46a7:liú # 䚧
+0x46a8:fèi # 䚨
+0x46a9:jiǎo,jiào # 䚩
+0x46ab:áo,xí # 䚫
+0x46ac:lín # 䚬
+0x46ae:réng # 䚮
+0x46af:tǎo,zhèn # 䚯
+0x46b0:pǐ # 䚰
+0x46b1:xìn # 䚱
+0x46b2:shàn # 䚲
+0x46b3:xiè,zhì # 䚳
+0x46b4:wà # 䚴
+0x46b5:tǒu # 䚵
+0x46b7:xì,yǐ,yì # 䚷
+0x46b8:xiè # 䚸
+0x46b9:pǐ # 䚹
+0x46ba:yáo # 䚺
+0x46bb:yáo,yóu # 䚻
+0x46bc:nǜ # 䚼
+0x46bd:hào # 䚽
+0x46be:nín,rén # 䚾
+0x46bf:yìn # 䚿
+0x46c0:fǎn # 䛀
+0x46c1:nán # 䛁
+0x46c2:chí,chǐ # 䛂
+0x46c3:wàng # 䛃
+0x46c4:yuǎn # 䛄
+0x46c5:xiá # 䛅
+0x46c6:zhòu # 䛆
+0x46c7:yuǎn # 䛇
+0x46c8:shì # 䛈
+0x46c9:mì,miàn # 䛉
+0x46cb:gé,jì # 䛋
+0x46cc:páo,táo # 䛌
+0x46cd:fèi # 䛍
+0x46ce:hù,xuè,yù # 䛎
+0x46cf:ní # 䛏
+0x46d0:cí # 䛐
+0x46d1:mì # 䛑
+0x46d2:biàn # 䛒
+0x46d4:ná # 䛔
+0x46d5:yù # 䛕
+0x46d6:è,yì # 䛖
+0x46d7:zhǐ # 䛗
+0x46d8:nín,rén # 䛘
+0x46d9:xù # 䛙
+0x46da:lüè # 䛚
+0x46db:huì,qì # 䛛
+0x46dc:xùn # 䛜
+0x46dd:náo # 䛝
+0x46de:hǎn,hàn # 䛞
+0x46df:jiá # 䛟
+0x46e0:dòu,xiáng # 䛠
+0x46e1:huà # 䛡
+0x46e4:cù # 䛤
+0x46e5:xì # 䛥
+0x46e6:sòng # 䛦
+0x46e7:mí # 䛧
+0x46e8:xìn # 䛨
+0x46e9:wù # 䛩
+0x46ea:qióng,wěi # 䛪
+0x46eb:zhèng # 䛫
+0x46ec:táo # 䛬
+0x46ed:xìng # 䛭
+0x46ee:jiù # 䛮
+0x46ef:jù # 䛯
+0x46f0:hún,hùn # 䛰
+0x46f1:tí # 䛱
+0x46f2:mán,màn # 䛲
+0x46f3:jiǎn,yàn # 䛳
+0x46f4:qǐ # 䛴
+0x46f5:shòu # 䛵
+0x46f6:lěi # 䛶
+0x46f7:wǎn # 䛷
+0x46f8:chè,shǎn # 䛸
+0x46f9:càn # 䛹
+0x46fa:jiè # 䛺
+0x46fb:yòu # 䛻
+0x46fc:huǐ # 䛼
+0x46fd:zhǎ # 䛽
+0x46fe:sù # 䛾
+0x46ff:gé # 䛿
+0x4700:nǎo # 䜀
+0x4701:xì # 䜁
+0x4704:chí # 䜄
+0x4705:wéi # 䜅
+0x4706:mò,nèi,shé,suì,zhé # 䜆
+0x4707:gǔn,gùn # 䜇
+0x470a:zāo,zào # 䜊
+0x470b:huì # 䜋
+0x470c:luán # 䜌
+0x470d:liáo # 䜍
+0x470e:láo,lào # 䜎
+0x4711:qià,wù # 䜑
+0x4712:ào # 䜒
+0x4713:niè,shè # 䜓
+0x4714:suí # 䜔
+0x4715:mài # 䜕
+0x4716:tàn # 䜖
+0x4717:xìn # 䜗
+0x4718:jǐng # 䜘
+0x4719:án # 䜙
+0x471a:tà # 䜚
+0x471b:chán,chàn # 䜛
+0x471c:wèi # 䜜
+0x471d:tuǎn # 䜝
+0x471e:jì # 䜞
+0x471f:chén,chèn # 䜟
+0x4720:chè,zhì # 䜠
+0x4721:xù,xuè,yù # 䜡
+0x4722:xiǎn # 䜢
+0x4723:xī,xīn,yín # 䜣
+0x4727:nǎo # 䜧
+0x4729:yàn # 䜩
+0x472a:qiú # 䜪
+0x472b:hóng # 䜫
+0x472c:sǒng,xiù # 䜬
+0x472d:jùn # 䜭
+0x472e:liáo # 䜮
+0x472f:jú # 䜯
+0x4731:mǎn # 䜱
+0x4732:liè # 䜲
+0x4734:chù,shì # 䜴
+0x4735:chǐ,shì # 䜵
+0x4736:xiáng # 䜶
+0x4738:měi # 䜸
+0x4739:shù # 䜹
+0x473a:cè # 䜺
+0x473b:chǐ,shì # 䜻
+0x473c:gú # 䜼
+0x473d:yú # 䜽
+0x4740:liáo,liú # 䝀
+0x4741:láo # 䝁
+0x4742:shù # 䝂
+0x4743:zhé # 䝃
+0x4748:è # 䝈
+0x474a:shà # 䝊
+0x474b:zòng # 䝋
+0x474c:jué,jùn # 䝌
+0x474d:jùn # 䝍
+0x474f:lóu,lǒu # 䝏
+0x4750:wéi # 䝐
+0x4752:zhù # 䝒
+0x4753:là,liè # 䝓
+0x4755:zhé # 䝕
+0x4756:zhǎo # 䝖
+0x4758:yì # 䝘
+0x475a:ní # 䝚
+0x475d:yǐ # 䝝
+0x475e:hào # 䝞
+0x475f:yà,yè # 䝟
+0x4760:huán,yuán # 䝠
+0x4761:màn # 䝡
+0x4762:màn,méng # 䝢
+0x4763:qú # 䝣
+0x4764:lǎo,liáo # 䝤
+0x4765:háo # 䝥
+0x4767:mén,mín # 䝧
+0x4768:xián # 䝨
+0x4769:zhèn # 䝩
+0x476a:shú,shǔ # 䝪
+0x476b:zuó # 䝫
+0x476c:zhù # 䝬
+0x476d:gòu # 䝭
+0x476e:xuàn # 䝮
+0x476f:yì # 䝯
+0x4770:tí,zhì # 䝰
+0x4772:jìn # 䝲
+0x4773:cán # 䝳
+0x4775:bù # 䝵
+0x4776:liáng # 䝶
+0x4777:zhì # 䝷
+0x4778:jì # 䝸
+0x4779:wǎn,yuàn # 䝹
+0x477a:guàn # 䝺
+0x477c:qíng # 䝼
+0x477d:ài # 䝽
+0x477e:fù # 䝾
+0x477f:guì # 䝿
+0x4780:gòu,hòu,mǐn # 䞀
+0x4781:xiàn,yàn,yǎng,yàng # 䞁
+0x4782:ruǎn # 䞂
+0x4783:zhì # 䞃
+0x4784:biào # 䞄
+0x4785:yí # 䞅
+0x4786:suǒ # 䞆
+0x4787:dié,zhì # 䞇
+0x4788:guǐ,guì # 䞈
+0x4789:shèng # 䞉
+0x478a:xùn # 䞊
+0x478b:chèn # 䞋
+0x478c:shé # 䞌
+0x478d:qíng # 䞍
+0x4790:chǔn,shǔn # 䞐
+0x4791:hóng # 䞑
+0x4792:dòng # 䞒
+0x4793:chēng # 䞓
+0x4794:wěi # 䞔
+0x4795:dié,nǎ,niè,rú,xiè,yú # 䞕
+0x4796:shǔ # 䞖
+0x4798:jí # 䞘
+0x4799:zá # 䞙
+0x479a:qí # 䞚
+0x479c:fù # 䞜
+0x479d:ǎo,yù # 䞝
+0x479e:fú # 䞞
+0x479f:pò # 䞟
+0x47a1:tǎn # 䞡
+0x47a2:zhà,zuó # 䞢
+0x47a3:chě,chè,qiè # 䞣
+0x47a4:qú # 䞤
+0x47a5:yòu # 䞥
+0x47a6:hé,jié # 䞦
+0x47a7:hòu # 䞧
+0x47a8:guǐ,kuǐ # 䞨
+0x47a9:è,ruí # 䞩
+0x47aa:jiàng # 䞪
+0x47ab:yǔn # 䞫
+0x47ac:tòu # 䞬
+0x47ad:qiǔ,qūn # 䞭
+0x47af:fù # 䞯
+0x47b0:zuó # 䞰
+0x47b1:hú # 䞱
+0x47b3:bó,fèi # 䞳
+0x47b5:juě # 䞵
+0x47b6:dì,tì # 䞶
+0x47b7:jué # 䞷
+0x47b8:fù # 䞸
+0x47b9:huáng # 䞹
+0x47bb:yǒng # 䞻
+0x47bc:chuǐ,cuàn,jiàn,mèi # 䞼
+0x47bd:suǒ # 䞽
+0x47be:chí # 䞾
+0x47c2:mán # 䟂
+0x47c3:cà,zàn # 䟃
+0x47c4:qì,zuó # 䟄
+0x47c5:jiàn,zàn # 䟅
+0x47c6:bì,bó # 䟆
+0x47c8:zhí # 䟈
+0x47c9:zhú # 䟉
+0x47ca:qú # 䟊
+0x47cb:zhǎn,zhàn # 䟋
+0x47cc:jí,jié # 䟌
+0x47cd:dián # 䟍
+0x47cf:lì # 䟏
+0x47d0:lì # 䟐
+0x47d1:lǎ,yuè # 䟑
+0x47d2:quán # 䟒
+0x47d4:fù # 䟔
+0x47d5:chà # 䟕
+0x47d6:tàng # 䟖
+0x47d7:shì # 䟗
+0x47d8:hàng # 䟘
+0x47d9:qiè # 䟙
+0x47da:qí # 䟚
+0x47db:bó # 䟛
+0x47dc:nà # 䟜
+0x47dd:tòu # 䟝
+0x47de:chú # 䟞
+0x47df:cù # 䟟
+0x47e0:yuè # 䟠
+0x47e1:dì # 䟡
+0x47e2:chén,jiàn,niǎn # 䟢
+0x47e3:chù # 䟣
+0x47e4:bì # 䟤
+0x47e5:máng,méng # 䟥
+0x47e6:bá,bó,yuán # 䟦
+0x47e7:tián # 䟧
+0x47e8:mín # 䟨
+0x47e9:liě # 䟩
+0x47ea:fěng # 䟪
+0x47ec:qiù # 䟬
+0x47ed:tiáo # 䟭
+0x47ee:fú # 䟮
+0x47ef:kuò # 䟯
+0x47f0:jiǎn # 䟰
+0x47f4:zhèn # 䟴
+0x47f5:qiú # 䟵
+0x47f6:cuò,zuò # 䟶
+0x47f7:chì,qì # 䟷
+0x47f8:kuí # 䟸
+0x47f9:liè,lìn # 䟹
+0x47fa:bǎng,bèi,pèi # 䟺
+0x47fb:dù # 䟻
+0x47fc:wǔ # 䟼
+0x47fe:juě,zhuó # 䟾
+0x47ff:lù # 䟿
+0x4800:chǎng # 䠀
+0x4802:chú,chǔ # 䠂
+0x4803:liǎng # 䠃
+0x4804:tiǎn # 䠄
+0x4805:kǔn,tà # 䠅
+0x4806:cháng # 䠆
+0x4807:jué # 䠇
+0x4808:tú # 䠈
+0x4809:huà,huàn,huǐ # 䠉
+0x480a:fèi # 䠊
+0x480b:bǐ,bì,mà # 䠋
+0x480d:qiá,xiā # 䠍
+0x480e:wò # 䠎
+0x480f:jì # 䠏
+0x4810:qù # 䠐
+0x4811:kuǐ # 䠑
+0x4812:hú # 䠒
+0x4813:cù,jiù,qù # 䠓
+0x4814:suì # 䠔
+0x4817:qiù # 䠗
+0x4818:pì # 䠘
+0x4819:bèi,páng,páo # 䠙
+0x481a:wà # 䠚
+0x481b:jiǎo,xiào,yáo # 䠛
+0x481c:róng # 䠜
+0x481e:cù,qí # 䠞
+0x481f:dié,shè # 䠟
+0x4820:chì # 䠠
+0x4821:cuó # 䠡
+0x4822:mèng # 䠢
+0x4823:xuǎn,xuàn # 䠣
+0x4824:duǒ,duò # 䠤
+0x4825:bié # 䠥
+0x4826:zhè,zhì # 䠦
+0x4827:chú # 䠧
+0x4828:chàn,mà # 䠨
+0x4829:guì # 䠩
+0x482a:duàn # 䠪
+0x482b:zòu # 䠫
+0x482c:dèng # 䠬
+0x482d:lái,lài # 䠭
+0x482e:téng # 䠮
+0x482f:yuè # 䠯
+0x4830:quán # 䠰
+0x4831:shǔ,zhú # 䠱
+0x4832:líng # 䠲
+0x4834:qǐn,yǐn,zhěn # 䠴
+0x4835:fù # 䠵
+0x4836:shè # 䠶
+0x4837:tiǎo # 䠷
+0x4839:hái # 䠹
+0x483b:qióng # 䠻
+0x483c:diào,shù,xuè,zhú # 䠼
+0x483d:hái # 䠽
+0x483e:shǎn,shàn # 䠾
+0x483f:wài # 䠿
+0x4840:zhǎn # 䡀
+0x4841:lǒng # 䡁
+0x4842:jiù # 䡂
+0x4843:lì # 䡃
+0x4845:mǐn,xiǎn,xún,zhèn,zuǎn,chūn # 䡅
+0x4846:róng,rǒng # 䡆
+0x4847:yuè # 䡇
+0x4848:jué # 䡈
+0x4849:kǎng # 䡉
+0x484a:fán,fǎn,pèi # 䡊
+0x484b:qí # 䡋
+0x484c:hóng # 䡌
+0x484d:fú,fǔ # 䡍
+0x484e:lú # 䡎
+0x484f:hóng # 䡏
+0x4850:tuó # 䡐
+0x4851:mín # 䡑
+0x4852:tián # 䡒
+0x4853:juàn # 䡓
+0x4854:qǐ # 䡔
+0x4855:zhěng # 䡕
+0x4856:jìng # 䡖
+0x4857:gǒng # 䡗
+0x4858:tián # 䡘
+0x4859:láng # 䡙
+0x485a:mào # 䡚
+0x485b:yìn # 䡛
+0x485c:lù # 䡜
+0x485d:yǔn,yuān # 䡝
+0x485e:jú # 䡞
+0x485f:pì # 䡟
+0x4861:xié # 䡡
+0x4862:biàn # 䡢
+0x4865:róng # 䡥
+0x4866:sǎng # 䡦
+0x4867:wǔ # 䡧
+0x4868:chà,chái,yín # 䡨
+0x4869:gǔ,hòu,tǒu,zhěn,kēng # 䡩
+0x486a:chán,shàn # 䡪
+0x486b:péng # 䡫
+0x486c:màn # 䡬
+0x486f:shuàng,zǒng # 䡯
+0x4870:kěng,kēng # 䡰
+0x4871:zhuǎn # 䡱
+0x4872:chán # 䡲
+0x4874:chuáng,chōng # 䡴
+0x4875:suì # 䡵
+0x4876:bèi,pì # 䡶
+0x4877:kài # 䡷
+0x4879:zhì # 䡹
+0x487a:wèi # 䡺
+0x487b:mín # 䡻
+0x487c:líng # 䡼
+0x487e:nèi,niè # 䡾
+0x487f:líng # 䡿
+0x4880:qì # 䢀
+0x4881:yuè # 䢁
+0x4883:yì # 䢃
+0x4884:xǐ,xǐ # 䢄
+0x4885:chén # 䢅
+0x4887:rǒng,rǒu # 䢇
+0x4888:chén,qín # 䢈
+0x4889:nóng # 䢉
+0x488a:yóu # 䢊
+0x488b:jì # 䢋
+0x488c:bó # 䢌
+0x488d:fǎng,fèn # 䢍
+0x4890:cú # 䢐
+0x4891:dǐ # 䢑
+0x4893:yú # 䢓
+0x4894:gé,hé,jiá # 䢔
+0x4895:xù # 䢕
+0x4896:yù # 䢖
+0x4897:hé,qǔ # 䢗
+0x4899:bài # 䢙
+0x489a:gòng,háng # 䢚
+0x489b:jiǒng # 䢛
+0x489d:yà # 䢝
+0x489e:nù,shù # 䢞
+0x489f:yóu # 䢟
+0x48a0:sòng # 䢠
+0x48a1:xiè # 䢡
+0x48a2:càng # 䢢
+0x48a3:yáo # 䢣
+0x48a4:shù # 䢤
+0x48a5:yán,yàn # 䢥
+0x48a6:shuài # 䢦
+0x48a7:liào,lǐn,què # 䢧
+0x48a9:yù # 䢩
+0x48aa:bó,cuì,jiǎo,nǔ,qián # 䢪
+0x48ab:suí # 䢫
+0x48ad:yàn # 䢭
+0x48ae:lèi # 䢮
+0x48af:lín # 䢯
+0x48b0:tái,tì # 䢰
+0x48b1:dú,zhà # 䢱
+0x48b2:yuè # 䢲
+0x48b3:jǐ,jì # 䢳
+0x48b5:yún # 䢵
+0x48b9:jǔ # 䢹
+0x48bb:chén,jìn,tán # 䢻
+0x48bd:xiàng # 䢽
+0x48be:xiǎn # 䢾
+0x48c0:guǐ,wéi # 䣀
+0x48c1:yǔ # 䣁
+0x48c2:lěi,lèi # 䣂
+0x48c4:tú # 䣄
+0x48c5:chén # 䣅
+0x48c6:xíng # 䣆
+0x48c7:qiú # 䣇
+0x48c8:hàng,liáo,xiàng # 䣈
+0x48ca:dǎng # 䣊
+0x48cb:cǎi # 䣋
+0x48cc:dǐ # 䣌
+0x48cd:yǎn # 䣍
+0x48d1:chán # 䣑
+0x48d3:lí # 䣓
+0x48d4:suǒ,suò # 䣔
+0x48d5:mǎ,mà # 䣕
+0x48d6:mǎ # 䣖
+0x48d8:táng # 䣘
+0x48d9:péi # 䣙
+0x48da:lóu,lú # 䣚
+0x48dc:cuó # 䣜
+0x48dd:tú # 䣝
+0x48de:è # 䣞
+0x48df:cán # 䣟
+0x48e0:jié,tì # 䣠
+0x48e1:tí,yí # 䣡
+0x48e2:jí # 䣢
+0x48e3:dǎng,dào # 䣣
+0x48e4:jiào,jué # 䣤
+0x48e5:bǐ,mì # 䣥
+0x48e6:lèi # 䣦
+0x48e7:yì # 䣧
+0x48e8:chún # 䣨
+0x48e9:chún # 䣩
+0x48ea:pò # 䣪
+0x48eb:lí # 䣫
+0x48ec:zǎi # 䣬
+0x48ed:tài # 䣭
+0x48ee:pò # 䣮
+0x48ef:tiǎn # 䣯
+0x48f0:jù,yuàn # 䣰
+0x48f1:xù,yì # 䣱
+0x48f2:fàn # 䣲
+0x48f4:xù # 䣴
+0x48f5:èr # 䣵
+0x48f6:huó,tián # 䣶
+0x48f8:rǎn # 䣸
+0x48f9:fá # 䣹
+0x48fc:liáng # 䣼
+0x48fd:tǐ # 䣽
+0x48fe:mì # 䣾
+0x4901:cén,chè,shè,yín # 䤁
+0x4902:méi # 䤂
+0x4903:yìn # 䤃
+0x4904:miǎn,zhuàn # 䤄
+0x4905:tú # 䤅
+0x4906:kuí # 䤆
+0x4909:mì,míng,mò,rú # 䤉
+0x490a:róng # 䤊
+0x490b:guó,yù # 䤋
+0x490d:mí # 䤍
+0x490e:jú # 䤎
+0x490f:pǐ # 䤏
+0x4910:jǐn # 䤐
+0x4911:wàng # 䤑
+0x4912:jǐ,jì # 䤒
+0x4913:méng # 䤓
+0x4914:jiàn,niú,xiàng # 䤔
+0x4915:xuè # 䤕
+0x4916:bào # 䤖
+0x4917:gǎn # 䤗
+0x4918:chǎn,qiǎn # 䤘
+0x4919:lì # 䤙
+0x491a:lǐ,lüè # 䤚
+0x491b:qiú # 䤛
+0x491c:dùn # 䤜
+0x491d:yìng # 䤝
+0x491e:yǔn # 䤞
+0x491f:chén # 䤟
+0x4920:jī,zhǐ # 䤠
+0x4921:rǎn # 䤡
+0x4923:lüè # 䤣
+0x4925:guǐ # 䤥
+0x4926:yuè # 䤦
+0x4927:huì # 䤧
+0x4928:pì # 䤨
+0x4929:chá # 䤩
+0x492a:duǒ # 䤪
+0x492b:chán # 䤫
+0x492d:kuàn,shì,suì,yí # 䤭
+0x492e:shè # 䤮
+0x492f:xíng # 䤯
+0x4930:wěng,yíng # 䤰
+0x4931:shì # 䤱
+0x4932:chì # 䤲
+0x4933:yè # 䤳
+0x4934:hán # 䤴
+0x4935:fèi # 䤵
+0x4936:yè # 䤶
+0x4937:yán,yǎn # 䤷
+0x4938:zuàn # 䤸
+0x493a:yǐn # 䤺
+0x493b:duò # 䤻
+0x493c:xiàn # 䤼
+0x493f:qiè # 䤿
+0x4940:chǎn # 䥀
+0x4941:hán # 䥁
+0x4942:mèng # 䥂
+0x4943:yuè # 䥃
+0x4944:cù,zǎn,zàn # 䥄
+0x4945:qiàn,qín # 䥅
+0x4946:jǐn,qín,ròu,wèi # 䥆
+0x4947:shàn # 䥇
+0x4948:mǔ # 䥈
+0x494c:zhèng # 䥌
+0x494d:zhì # 䥍
+0x494e:chún # 䥎
+0x494f:yǔ # 䥏
+0x4950:móu # 䥐
+0x4951:wàn # 䥑
+0x4952:jiàng # 䥒
+0x4954:sù # 䥔
+0x4955:piě # 䥕
+0x4956:tián # 䥖
+0x4957:kuǎn # 䥗
+0x4958:cù,cuò # 䥘
+0x4959:suì # 䥙
+0x495b:jié # 䥛
+0x495c:jiàn # 䥜
+0x495d:áo,āo # 䥝
+0x495e:jiǎo # 䥞
+0x495f:yè # 䥟
+0x4961:yè # 䥡
+0x4962:lóng # 䥢
+0x4963:záo # 䥣
+0x4964:báo,fú # 䥤
+0x4965:lián # 䥥
+0x4967:huán,xuán # 䥧
+0x4968:lǜ,lú # 䥨
+0x4969:wéi # 䥩
+0x496a:xiǎn # 䥪
+0x496b:tiě # 䥫
+0x496c:bó # 䥬
+0x496d:zhèng # 䥭
+0x496e:zhú # 䥮
+0x496f:bà,bài,bēi # 䥯
+0x4970:mèng # 䥰
+0x4971:xiě # 䥱
+0x4975:xiǎo # 䥵
+0x4976:lì # 䥶
+0x4977:zhá # 䥷
+0x4978:mí # 䥸
+0x497a:yé # 䥺
+0x497e:xiě # 䥾
+0x4982:shàn # 䦂
+0x4985:shàn,zhǎn # 䦅
+0x4986:jué # 䦆
+0x4987:jì # 䦇
+0x4988:fǎng,hǎn,jí,mǒu,zá,zuǒ # 䦈
+0x498a:niǎo # 䦊
+0x498b:áo # 䦋
+0x498c:chù,pò,ruì # 䦌
+0x498d:wù # 䦍
+0x498e:guǎn # 䦎
+0x498f:xiè # 䦏
+0x4990:tǐng # 䦐
+0x4991:xiè # 䦑
+0x4992:dàng # 䦒
+0x4994:tǎn # 䦔
+0x4996:xiá,xié # 䦖
+0x4997:xù # 䦗
+0x4998:bì,xiǎn,xiàn # 䦘
+0x4999:sì # 䦙
+0x499a:huò,kuǎ,kuà # 䦚
+0x499b:zhèng,zhì # 䦛
+0x499c:wú,wù # 䦜
+0x499e:rùn # 䦞
+0x499f:chuài # 䦟
+0x49a0:shǐ # 䦠
+0x49a1:huán # 䦡
+0x49a2:kuò # 䦢
+0x49a3:fù # 䦣
+0x49a4:chuài,wěn # 䦤
+0x49a5:xián # 䦥
+0x49a6:qín # 䦦
+0x49a7:qié,xì,yǎn # 䦧
+0x49a8:lán # 䦨
+0x49aa:yà # 䦪
+0x49ac:què # 䦬
+0x49ae:chǔn # 䦮
+0x49af:zhì # 䦯
+0x49b1:kuǐ,wěi # 䦱
+0x49b2:qiàn,yán # 䦲
+0x49b3:hàng,xiàng # 䦳
+0x49b4:yì # 䦴
+0x49b5:nǐ # 䦵
+0x49b6:zhèng # 䦶
+0x49b7:chuài,wěn # 䦷
+0x49b9:shí # 䦹
+0x49bb:cì,zǐ # 䦻
+0x49bc:jué # 䦼
+0x49bd:xù # 䦽
+0x49be:yǔn # 䦾
+0x49c1:chù,xǔ # 䧁
+0x49c2:dào,tiǎo,zhào # 䧂
+0x49c3:diàn,tián # 䧃
+0x49c4:gè # 䧄
+0x49c5:tì,yà,yí # 䧅
+0x49c6:hóng,kǒu,qióng # 䧆
+0x49c7:nǐ,yǐ,yī # 䧇
+0x49c9:lǐ # 䧉
+0x49cb:xiǎn # 䧋
+0x49cd:xì # 䧍
+0x49ce:xuàn # 䧎
+0x49d2:lái,lǎn # 䧒
+0x49d4:mù,niàn # 䧔
+0x49d5:chéng,yù # 䧕
+0x49d6:jiàn # 䧖
+0x49d7:bì # 䧗
+0x49d8:qí,zhuàn # 䧘
+0x49d9:líng # 䧙
+0x49da:hào # 䧚
+0x49db:bàng # 䧛
+0x49dc:táng # 䧜
+0x49dd:chī,zhì # 䧝
+0x49de:fù,mà # 䧞
+0x49df:xiàn,xuàn # 䧟
+0x49e0:shuàn # 䧠
+0x49e4:pú # 䧤
+0x49e5:huì # 䧥
+0x49e6:wéi,huī # 䧦
+0x49e7:yǐ # 䧧
+0x49e8:yè # 䧨
+0x49ea:chè,zhé # 䧪
+0x49eb:háo # 䧫
+0x49ee:xiǎn,xiàn # 䧮
+0x49ef:chán,zhàn # 䧯
+0x49f0:hùn # 䧰
+0x49f2:hàn # 䧲
+0x49f3:cí,cǐ # 䧳
+0x49f5:qí,shěn,zhèn # 䧵
+0x49f6:kuí # 䧶
+0x49f7:róu # 䧷
+0x49fa:xióng # 䧺
+0x49fc:hú # 䧼
+0x49fd:cuǐ # 䧽
+0x49ff:què # 䧿
+0x4a00:dí,dì # 䨀
+0x4a01:chè,wù,yù # 䨁
+0x4a04:yàn,ān # 䨄
+0x4a05:liáo # 䨅
+0x4a06:bí,bì,xù # 䨆
+0x4a0b:nüè # 䨋
+0x4a0c:báo,bó # 䨌
+0x4a0d:yǐng # 䨍
+0x4a0e:hóng # 䨎
+0x4a0f:cí # 䨏
+0x4a10:qià,xiá # 䨐
+0x4a11:tí # 䨑
+0x4a12:yù # 䨒
+0x4a13:léi,lèi # 䨓
+0x4a14:báo # 䨔
+0x4a16:jì # 䨖
+0x4a17:fú # 䨗
+0x4a18:xiàn # 䨘
+0x4a19:cén,yà,yín # 䨙
+0x4a1b:sè # 䨛
+0x4a1e:yǔ,yù # 䨞
+0x4a20:ǎi # 䨠
+0x4a21:hán # 䨡
+0x4a22:dàn,dí,gào,tán # 䨢
+0x4a23:gé,gèng # 䨣
+0x4a24:dí # 䨤
+0x4a25:hù,huò # 䨥
+0x4a26:páng # 䨦
+0x4a29:líng # 䨩
+0x4a2a:mái # 䨪
+0x4a2b:mài,màn # 䨫
+0x4a2c:lián # 䨬
+0x4a2e:xuě # 䨮
+0x4a2f:zhèn # 䨯
+0x4a30:pò # 䨰
+0x4a31:fù # 䨱
+0x4a32:nóu # 䨲
+0x4a33:xì # 䨳
+0x4a34:duì,wèng # 䨴
+0x4a35:dàn # 䨵
+0x4a36:yǔn # 䨶
+0x4a37:xiàn # 䨷
+0x4a38:yǐn # 䨸
+0x4a3a:duì # 䨺
+0x4a3b:bèng # 䨻
+0x4a3c:hù # 䨼
+0x4a3d:fěi # 䨽
+0x4a3e:fěi # 䨾
+0x4a3f:qián,zá # 䨿
+0x4a40:bèi # 䩀
+0x4a43:shì # 䩃
+0x4a44:tiǎn # 䩄
+0x4a45:zhǎn # 䩅
+0x4a46:jiǎn,zhǎn # 䩆
+0x4a48:huì,wèi,xuě # 䩈
+0x4a49:fǔ # 䩉
+0x4a4a:wǎn,wò # 䩊
+0x4a4b:mǒ # 䩋
+0x4a4c:qiáo,jiāo # 䩌
+0x4a4d:liǎo # 䩍
+0x4a4f:miè # 䩏
+0x4a50:gé,jí # 䩐
+0x4a51:hóng # 䩑
+0x4a52:yú # 䩒
+0x4a53:qí # 䩓
+0x4a54:duò # 䩔
+0x4a55:áng # 䩕
+0x4a57:bà # 䩗
+0x4a58:dì # 䩘
+0x4a59:xuàn # 䩙
+0x4a5a:dì,diàn # 䩚
+0x4a5b:bì # 䩛
+0x4a5c:zhòu # 䩜
+0x4a5d:páo # 䩝
+0x4a5e:nián,tiǎn,tié,wěi # 䩞
+0x4a5f:yí,tì # 䩟
+0x4a61:jiá # 䩡
+0x4a62:dá,zhì # 䩢
+0x4a63:duǒ,tú,tuì # 䩣
+0x4a64:xì,xié # 䩤
+0x4a65:dàn # 䩥
+0x4a66:tiáo,zuò # 䩦
+0x4a67:xiè # 䩧
+0x4a68:chàng # 䩨
+0x4a69:yuǎn # 䩩
+0x4a6a:guǎn # 䩪
+0x4a6b:liǎng # 䩫
+0x4a6c:běng,fěng # 䩬
+0x4a6e:lù # 䩮
+0x4a6f:jí # 䩯
+0x4a70:xuàn # 䩰
+0x4a71:shù # 䩱
+0x4a73:shǔ,sù # 䩳
+0x4a74:hú # 䩴
+0x4a75:yùn # 䩵
+0x4a76:chǎn,chěng # 䩶
+0x4a78:róng,rǒng # 䩸
+0x4a79:é # 䩹
+0x4a7b:bà # 䩻
+0x4a7c:féng # 䩼
+0x4a7e:zhè # 䩾
+0x4a7f:fén # 䩿
+0x4a80:guǎn,ruǎn # 䪀
+0x4a81:bǔ # 䪁
+0x4a82:gé # 䪂
+0x4a84:huáng # 䪄
+0x4a85:dú # 䪅
+0x4a86:tǐ # 䪆
+0x4a87:bó # 䪇
+0x4a88:qiǎn,qiàn # 䪈
+0x4a89:là,liè # 䪉
+0x4a8a:lóng # 䪊
+0x4a8b:wèi # 䪋
+0x4a8c:zhàn # 䪌
+0x4a8d:lán,làn # 䪍
+0x4a8f:nà,dā # 䪏
+0x4a90:bì,pì # 䪐
+0x4a91:tuó # 䪑
+0x4a92:jiào,zhì,zhù # 䪒
+0x4a94:bǔ # 䪔
+0x4a95:jú # 䪕
+0x4a96:pò # 䪖
+0x4a97:xiá # 䪗
+0x4a98:wěi # 䪘
+0x4a99:fú,pò # 䪙
+0x4a9a:hè,tà # 䪚
+0x4a9b:fán # 䪛
+0x4a9c:chàn # 䪜
+0x4a9d:hù # 䪝
+0x4a9e:zá # 䪞
+0x4aa4:fán # 䪤
+0x4aa5:xiè # 䪥
+0x4aa6:hóng # 䪦
+0x4aa7:chí # 䪧
+0x4aa8:báo,qú # 䪨
+0x4aa9:yín # 䪩
+0x4aac:bó,pú # 䪬
+0x4aad:ruǎn # 䪭
+0x4aae:chǒu # 䪮
+0x4aaf:yíng # 䪯
+0x4ab1:gǎi # 䪱
+0x4ab3:yǔn # 䪳
+0x4ab4:zhěn # 䪴
+0x4ab5:yǎ # 䪵
+0x4ab7:hòu # 䪷
+0x4ab8:mín # 䪸
+0x4ab9:péi # 䪹
+0x4aba:gé # 䪺
+0x4abb:biàn # 䪻
+0x4abd:hào # 䪽
+0x4abe:mí,zhěn # 䪾
+0x4abf:shěng,xìn # 䪿
+0x4ac0:gěn # 䫀
+0x4ac1:bì # 䫁
+0x4ac2:duǒ # 䫂
+0x4ac3:chún # 䫃
+0x4ac4:chuà # 䫄
+0x4ac5:sàn # 䫅
+0x4ac6:chéng,zhèng # 䫆
+0x4ac7:rán # 䫇
+0x4ac8:zèn,cén # 䫈
+0x4ac9:mào # 䫉
+0x4aca:bó,péi # 䫊
+0x4acb:tuí # 䫋
+0x4acc:pǐ # 䫌
+0x4acd:fǔ # 䫍
+0x4ad0:lín # 䫐
+0x4ad2:mén # 䫒
+0x4ad3:wú # 䫓
+0x4ad4:qì,qiè,xì # 䫔
+0x4ad5:zhì # 䫕
+0x4ad6:chěn,huǐ,nòu,shèn,tíng,yà,zhù # 䫖
+0x4ad7:xiá,xià # 䫗
+0x4ad8:hé # 䫘
+0x4ad9:sǎng # 䫙
+0x4adb:hóu # 䫛
+0x4add:fǔ,fù # 䫝
+0x4ade:ráo,qiāo # 䫞
+0x4adf:hùn # 䫟
+0x4ae0:péi,pī # 䫠
+0x4ae1:qiàn,yán # 䫡
+0x4ae3:xí # 䫣
+0x4ae4:míng # 䫤
+0x4ae5:kuǐ,wěi # 䫥
+0x4ae6:gé,kài # 䫦
+0x4ae8:ào # 䫨
+0x4ae9:sǎn # 䫩
+0x4aea:shuǎng # 䫪
+0x4aeb:lóu,lòu # 䫫
+0x4aec:zhěn # 䫬
+0x4aed:huì # 䫭
+0x4aee:cán,cǎn,tì # 䫮
+0x4af0:lìn,lǐn # 䫰
+0x4af1:ná,rú # 䫱
+0x4af2:hàn,kǎn # 䫲
+0x4af3:dú # 䫳
+0x4af4:jìn # 䫴
+0x4af5:mián # 䫵
+0x4af6:fán # 䫶
+0x4af7:è # 䫷
+0x4af8:náo # 䫸
+0x4af9:hóng # 䫹
+0x4afa:hóng,hòu # 䫺
+0x4afb:xué,yù # 䫻
+0x4afc:xuè # 䫼
+0x4afe:bī,bì # 䫾
+0x4b00:yǒu # 䬀
+0x4b01:yí # 䬁
+0x4b02:xuè,yuè # 䬂
+0x4b03:sà # 䬃
+0x4b04:yù # 䬄
+0x4b05:lì,liè,xié # 䬅
+0x4b06:lì # 䬆
+0x4b07:yuàn # 䬇
+0x4b08:duì # 䬈
+0x4b09:hào # 䬉
+0x4b0a:qiè,shà # 䬊
+0x4b0b:léng # 䬋
+0x4b0e:guó # 䬎
+0x4b0f:bù,fǒu # 䬏
+0x4b10:wěi # 䬐
+0x4b11:wèi # 䬑
+0x4b13:àn,ǎng # 䬓
+0x4b14:xù,yú # 䬔
+0x4b15:shǎng # 䬕
+0x4b16:héng # 䬖
+0x4b17:yáng # 䬗
+0x4b19:yáo # 䬙
+0x4b1b:bì,yù # 䬛
+0x4b1d:héng,hòng # 䬝
+0x4b1e:táo # 䬞
+0x4b1f:liú # 䬟
+0x4b21:zhù # 䬡
+0x4b23:qì # 䬣
+0x4b24:cháo,zàn,zuò # 䬤
+0x4b25:yì # 䬥
+0x4b26:dòu # 䬦
+0x4b27:yuán # 䬧
+0x4b28:cù,jiù,zú # 䬨
+0x4b2a:bó,fù # 䬪
+0x4b2b:cǎn,tí # 䬫
+0x4b2c:yǎng # 䬬
+0x4b2e:yí # 䬮
+0x4b2f:nián # 䬯
+0x4b30:shào # 䬰
+0x4b31:bèn # 䬱
+0x4b33:bǎn # 䬳
+0x4b34:mò # 䬴
+0x4b35:ài # 䬵
+0x4b36:èn # 䬶
+0x4b37:shě # 䬷
+0x4b39:zhì # 䬹
+0x4b3a:yàng # 䬺
+0x4b3b:jiàn,kǎn # 䬻
+0x4b3c:yuàn # 䬼
+0x4b3d:duì,shuì # 䬽
+0x4b3e:tí # 䬾
+0x4b3f:wěi,wèi # 䬿
+0x4b40:xùn # 䭀
+0x4b41:zhì # 䭁
+0x4b42:yì # 䭂
+0x4b43:rěn # 䭃
+0x4b44:shì # 䭄
+0x4b45:hú # 䭅
+0x4b46:nè # 䭆
+0x4b47:yì # 䭇
+0x4b48:jiàn # 䭈
+0x4b49:suǐ # 䭉
+0x4b4a:yǐng # 䭊
+0x4b4b:bǎo # 䭋
+0x4b4c:hú # 䭌
+0x4b4d:hú # 䭍
+0x4b4e:xié,yè # 䭎
+0x4b50:yàng # 䭐
+0x4b51:lián,qiàn,xiàn # 䭑
+0x4b53:èn,wèn # 䭓
+0x4b55:jiàn,zǎn # 䭕
+0x4b56:zhù # 䭖
+0x4b57:yǐng # 䭗
+0x4b58:yàn,yǐng # 䭘
+0x4b59:jǐn # 䭙
+0x4b5a:chuáng,nè # 䭚
+0x4b5b:dàn # 䭛
+0x4b5d:kuài # 䭝
+0x4b5e:yì # 䭞
+0x4b5f:yè # 䭟
+0x4b60:jiǎn,qiàn # 䭠
+0x4b61:èn,wèn # 䭡
+0x4b62:níng # 䭢
+0x4b63:cí # 䭣
+0x4b64:qiǎn # 䭤
+0x4b65:xuè,yàng,yào,zhòu # 䭥
+0x4b66:bó # 䭦
+0x4b67:mǐ # 䭧
+0x4b68:shuì # 䭨
+0x4b69:mì,mó # 䭩
+0x4b6a:liáng # 䭪
+0x4b6b:qǐ # 䭫
+0x4b6c:qǐ # 䭬
+0x4b6d:shǒu,shú,shù,tù # 䭭
+0x4b6e:bì,fú # 䭮
+0x4b6f:bó # 䭯
+0x4b70:běng,bèng # 䭰
+0x4b71:bié # 䭱
+0x4b72:nǐ,yǐ # 䭲
+0x4b73:wèi # 䭳
+0x4b74:huán,yuàn # 䭴
+0x4b75:fán # 䭵
+0x4b76:qí # 䭶
+0x4b77:liú,máo # 䭷
+0x4b78:fù # 䭸
+0x4b79:áng,àng # 䭹
+0x4b7a:áng # 䭺
+0x4b7c:qí # 䭼
+0x4b7d:qún # 䭽
+0x4b7e:tuó # 䭾
+0x4b7f:yì # 䭿
+0x4b80:bó # 䮀
+0x4b81:pián # 䮁
+0x4b82:bó # 䮂
+0x4b84:xuán # 䮄
+0x4b87:yù # 䮇
+0x4b88:chí # 䮈
+0x4b89:lú # 䮉
+0x4b8a:yí # 䮊
+0x4b8b:lì,liè # 䮋
+0x4b8d:niǎo,xìng # 䮍
+0x4b8e:xì # 䮎
+0x4b8f:wú # 䮏
+0x4b91:lèi # 䮑
+0x4b93:zhào # 䮓
+0x4b94:zuǐ,zuī # 䮔
+0x4b95:chuò # 䮕
+0x4b97:àn,niù,yàn # 䮗
+0x4b98:ér,ní,pài,pó # 䮘
+0x4b99:yù # 䮙
+0x4b9a:lèng # 䮚
+0x4b9b:fù # 䮛
+0x4b9c:shà,zhá # 䮜
+0x4b9d:huán,huǎn,hún # 䮝
+0x4b9e:chù,chǔn # 䮞
+0x4b9f:sǒu # 䮟
+0x4ba1:bì # 䮡
+0x4ba2:dié # 䮢
+0x4ba4:dí,hè,hé # 䮤
+0x4ba5:lì # 䮥
+0x4ba7:hán,hàn # 䮧
+0x4ba8:zǎi # 䮨
+0x4ba9:gú,gǔ # 䮩
+0x4baa:chéng # 䮪
+0x4bab:lóu # 䮫
+0x4bac:mò # 䮬
+0x4bad:mì # 䮭
+0x4bae:mài # 䮮
+0x4baf:ào # 䮯
+0x4bb0:zhé # 䮰
+0x4bb1:zhú # 䮱
+0x4bb2:huáng # 䮲
+0x4bb3:fán # 䮳
+0x4bb4:dèng # 䮴
+0x4bb5:tóng,yǒng # 䮵
+0x4bb7:dú # 䮷
+0x4bb8:hú,mú,wò # 䮸
+0x4bb9:wèi # 䮹
+0x4bba:jì # 䮺
+0x4bbb:chì,dǎo,dào,děi # 䮻
+0x4bbc:lín # 䮼
+0x4bbe:páng # 䮾
+0x4bbf:jiǎn # 䮿
+0x4bc0:niè # 䯀
+0x4bc1:luó # 䯁
+0x4bc2:jí,shēn # 䯂
+0x4bc5:niè # 䯅
+0x4bc6:yì # 䯆
+0x4bc8:wán # 䯈
+0x4bc9:yà,wā # 䯉
+0x4bca:qià # 䯊
+0x4bcb:bó # 䯋
+0x4bcd:líng # 䯍
+0x4bce:gàn # 䯎
+0x4bcf:huó,guā # 䯏
+0x4bd0:hái # 䯐
+0x4bd2:héng # 䯒
+0x4bd3:kuí # 䯓
+0x4bd4:cén,zé # 䯔
+0x4bd6:láng # 䯖
+0x4bd7:bì # 䯗
+0x4bd8:huàn # 䯘
+0x4bd9:pò # 䯙
+0x4bda:ǒu,yǎo # 䯚
+0x4bdb:jiǎn,wàn # 䯛
+0x4bdc:tì # 䯜
+0x4bdd:suǐ # 䯝
+0x4bdf:duì,xiá # 䯟
+0x4be0:ǎo,ào # 䯠
+0x4be1:jiǎn,jiàn,qiàn # 䯡
+0x4be2:mó,mǒ # 䯢
+0x4be3:guì,kuì # 䯣
+0x4be4:kuài # 䯤
+0x4be5:àn,qì # 䯥
+0x4be6:mà # 䯦
+0x4be7:qǐng # 䯧
+0x4be8:fén,hè # 䯨
+0x4bea:kǎo # 䯪
+0x4beb:hào,shà # 䯫
+0x4bec:duǒ # 䯬
+0x4bee:nái # 䯮
+0x4bf0:jiè # 䯰
+0x4bf1:fù,pēi,pī # 䯱
+0x4bf2:pá # 䯲
+0x4bf4:cháng # 䯴
+0x4bf5:niè # 䯵
+0x4bf6:mán # 䯶
+0x4bf8:cì # 䯸
+0x4bfa:kuò # 䯺
+0x4bfc:dí # 䯼
+0x4bfd:fǔ,póu # 䯽
+0x4bfe:tiáo # 䯾
+0x4bff:zú,zuó # 䯿
+0x4c00:wǒ # 䰀
+0x4c01:fèi # 䰁
+0x4c02:cài # 䰂
+0x4c03:péng # 䰃
+0x4c04:shì # 䰄
+0x4c06:róu # 䰆
+0x4c07:qí # 䰇
+0x4c08:chǎ,cuó,cuǒ # 䰈
+0x4c09:pán,pàn # 䰉
+0x4c0a:bó # 䰊
+0x4c0b:mán # 䰋
+0x4c0c:zǒng # 䰌
+0x4c0d:cì,qī,xiū # 䰍
+0x4c0e:guì,huǐ,kuì # 䰎
+0x4c0f:jì # 䰏
+0x4c10:lán # 䰐
+0x4c12:méng # 䰒
+0x4c13:mián # 䰓
+0x4c14:pán # 䰔
+0x4c15:lú # 䰕
+0x4c16:cuán # 䰖
+0x4c18:liú # 䰘
+0x4c19:yǐ # 䰙
+0x4c1a:wén # 䰚
+0x4c1b:lì # 䰛
+0x4c1c:lì # 䰜
+0x4c1d:zèng # 䰝
+0x4c1e:zhǔ # 䰞
+0x4c1f:hún # 䰟
+0x4c20:shén,shēn # 䰠
+0x4c21:chì # 䰡
+0x4c22:xìng # 䰢
+0x4c23:wǎng # 䰣
+0x4c25:huò,jì,shè,yù # 䰥
+0x4c26:pǐ,pì # 䰦
+0x4c28:mèi # 䰨
+0x4c29:chě,chǐ # 䰩
+0x4c2a:mèi # 䰪
+0x4c2b:cháo # 䰫
+0x4c2c:jú # 䰬
+0x4c2d:nòu,rú # 䰭
+0x4c2f:nǐ,rán,yì # 䰯
+0x4c30:rú # 䰰
+0x4c31:líng # 䰱
+0x4c32:yà # 䰲
+0x4c34:qì,zhì # 䰴
+0x4c37:bàng,bó # 䰷
+0x4c39:zé # 䰹
+0x4c3a:jiè # 䰺
+0x4c3b:yú # 䰻
+0x4c3c:xín,qín # 䰼
+0x4c3d:bèi # 䰽
+0x4c3e:bā # 䰾
+0x4c3f:tuó # 䰿
+0x4c41:qiáo # 䱁
+0x4c42:yǒu # 䱂
+0x4c43:dǐ,zhì # 䱃
+0x4c44:jiè # 䱄
+0x4c45:mò # 䱅
+0x4c46:shéng # 䱆
+0x4c47:shàn,táo # 䱇
+0x4c48:qí,yì # 䱈
+0x4c49:shàn # 䱉
+0x4c4a:mǐ # 䱊
+0x4c4b:dǎn,gǒng # 䱋
+0x4c4c:yí # 䱌
+0x4c4d:gèng # 䱍
+0x4c4e:gèng # 䱎
+0x4c4f:tǒu # 䱏
+0x4c51:xué # 䱑
+0x4c52:yì # 䱒
+0x4c53:tíng # 䱓
+0x4c54:tiáo # 䱔
+0x4c55:móu # 䱕
+0x4c56:liú,liǔ # 䱖
+0x4c58:lí # 䱘
+0x4c5a:lù # 䱚
+0x4c5b:huò # 䱛
+0x4c5c:cuò,què # 䱜
+0x4c5d:bà,pái # 䱝
+0x4c5e:liú,nài,wěi # 䱞
+0x4c5f:jù # 䱟
+0x4c60:zhàn # 䱠
+0x4c61:jú # 䱡
+0x4c63:zú # 䱣
+0x4c64:xiàn # 䱤
+0x4c65:zhì,jì # 䱥
+0x4c68:zhì # 䱨
+0x4c6b:là # 䱫
+0x4c6d:gèng # 䱭
+0x4c6e:é # 䱮
+0x4c6f:mú # 䱯
+0x4c70:zhòng # 䱰
+0x4c71:dì,tí # 䱱
+0x4c72:yán # 䱲
+0x4c74:gèng # 䱴
+0x4c76:láng # 䱶
+0x4c77:yú # 䱷
+0x4c79:nà,zhǎ # 䱹
+0x4c7a:hái # 䱺
+0x4c7b:huá # 䱻
+0x4c7c:zhǎn # 䱼
+0x4c7e:lóu,yú # 䱾
+0x4c7f:chàn # 䱿
+0x4c80:dié,suì,zhì,zòu # 䲀
+0x4c81:wèi # 䲁
+0x4c82:xuán # 䲂
+0x4c83:zǎo # 䲃
+0x4c84:mín,mǐn # 䲄
+0x4c8a:tuǒ,duò # 䲊
+0x4c8b:cén # 䲋
+0x4c8c:kuǎn # 䲌
+0x4c8d:téng # 䲍
+0x4c8e:něi # 䲎
+0x4c8f:láo # 䲏
+0x4c90:lǔ # 䲐
+0x4c91:yí # 䲑
+0x4c92:xiè # 䲒
+0x4c93:yǎn # 䲓
+0x4c94:qíng,qìng,jīng # 䲔
+0x4c95:pǔ,pù # 䲕
+0x4c96:chóu # 䲖
+0x4c97:xián # 䲗
+0x4c98:guǎn,kàng,wéi # 䲘
+0x4c99:jié # 䲙
+0x4c9a:lài,làn # 䲚
+0x4c9b:méng # 䲛
+0x4c9c:yè # 䲜
+0x4c9e:lì,luǒ # 䲞
+0x4c9f:yìn # 䲟
+0x4ca2:téng # 䲢
+0x4ca3:yú # 䲣
+0x4ca6:chá,dài,dì,tuǒ # 䲦
+0x4ca7:dù,shuì # 䲧
+0x4ca8:hóng # 䲨
+0x4caa:xì # 䲪
+0x4cac:qí # 䲬
+0x4cae:yuán # 䲮
+0x4caf:jí # 䲯
+0x4cb0:yùn # 䲰
+0x4cb1:fǎng # 䲱
+0x4cb3:háng # 䲳
+0x4cb4:zhèn # 䲴
+0x4cb5:hù,què # 䲵
+0x4cb8:jiè # 䲸
+0x4cb9:péi # 䲹
+0x4cba:gàn # 䲺
+0x4cbb:xuán,yuán # 䲻
+0x4cbd:dǎo,shí # 䲽
+0x4cbe:qiǎo # 䲾
+0x4cbf:cí # 䲿
+0x4cc0:dié # 䳀
+0x4cc1:bá,bǐn,bó,yuán # 䳁
+0x4cc2:tiáo # 䳂
+0x4cc3:wǎn # 䳃
+0x4cc4:cí # 䳄
+0x4cc5:zhǐ # 䳅
+0x4cc6:bái # 䳆
+0x4cc7:wǔ # 䳇
+0x4cc8:bǎo # 䳈
+0x4cc9:dōng,dàn # 䳉
+0x4cca:bá # 䳊
+0x4ccb:tóng,zhòng # 䳋
+0x4cce:jiù # 䳎
+0x4ccf:guì # 䳏
+0x4cd0:cì # 䳐
+0x4cd1:yǒu,yù # 䳑
+0x4cd2:yuán # 䳒
+0x4cd3:lǎo # 䳓
+0x4cd4:jiù,jú # 䳔
+0x4cd5:fóu # 䳕
+0x4cd6:nèi,yè # 䳖
+0x4cd7:é # 䳗
+0x4cd8:é # 䳘
+0x4cd9:xǐng # 䳙
+0x4cda:hé,kǎn # 䳚
+0x4cdb:yàn # 䳛
+0x4cdc:tú # 䳜
+0x4cdd:bù,diào,fǔ,pǒu # 䳝
+0x4cde:běng # 䳞
+0x4cdf:kòu,míng,mǒ # 䳟
+0x4ce0:chuí,ruì,zhù # 䳠
+0x4ce2:qí # 䳢
+0x4ce3:yuán # 䳣
+0x4ce7:hóu # 䳧
+0x4ce8:huáng # 䳨
+0x4cea:juàn,tuán # 䳪
+0x4ceb:kuí # 䳫
+0x4cec:è,yǎo,yì # 䳬
+0x4ced:jí # 䳭
+0x4cee:mò # 䳮
+0x4cef:chóng,chǒng # 䳯
+0x4cf0:bǎo # 䳰
+0x4cf1:wù # 䳱
+0x4cf2:zhèn # 䳲
+0x4cf3:xù # 䳳
+0x4cf4:dá,tà # 䳴
+0x4cf5:chì # 䳵
+0x4cf7:cóng # 䳷
+0x4cf8:má,mái # 䳸
+0x4cf9:kòu # 䳹
+0x4cfa:yàn # 䳺
+0x4cfb:cán,chán,dié,zhàn # 䳻
+0x4cfd:hè # 䳽
+0x4cff:lán,rán # 䳿
+0x4d00:tóng # 䴀
+0x4d01:yù # 䴁
+0x4d02:hàng,xiàng # 䴂
+0x4d03:náo # 䴃
+0x4d04:lì,shùn # 䴄
+0x4d05:fén # 䴅
+0x4d06:pú # 䴆
+0x4d07:líng # 䴇
+0x4d08:ǎo # 䴈
+0x4d09:xuán # 䴉
+0x4d0a:yí # 䴊
+0x4d0b:xuán # 䴋
+0x4d0c:méng # 䴌
+0x4d0e:lěi # 䴎
+0x4d0f:yàn # 䴏
+0x4d10:bǎo # 䴐
+0x4d11:dié # 䴑
+0x4d12:líng # 䴒
+0x4d13:shī # 䴓
+0x4d14:jiāo # 䴔
+0x4d15:liè # 䴕
+0x4d16:jīng # 䴖
+0x4d17:jú # 䴗
+0x4d18:tī # 䴘
+0x4d19:pì # 䴙
+0x4d1a:gǎng # 䴚
+0x4d1b:jiǎo,tú,xì,xiào,yín # 䴛
+0x4d1c:huái # 䴜
+0x4d1d:bù,chuài # 䴝
+0x4d1e:dí # 䴞
+0x4d1f:huán,huàn # 䴟
+0x4d20:yǎo # 䴠
+0x4d21:lì # 䴡
+0x4d22:mí # 䴢
+0x4d26:rén,yín # 䴦
+0x4d29:piáo # 䴩
+0x4d2a:lù # 䴪
+0x4d2b:líng # 䴫
+0x4d2c:yì # 䴬
+0x4d2d:cái # 䴭
+0x4d2e:shàn # 䴮
+0x4d30:shú # 䴰
+0x4d31:tuō # 䴱
+0x4d32:mò # 䴲
+0x4d33:hè,huá # 䴳
+0x4d34:tiè,nián # 䴴
+0x4d35:bǐng,zhuó # 䴵
+0x4d36:péng # 䴶
+0x4d37:hún # 䴷
+0x4d39:guǒ # 䴹
+0x4d3a:bù,cǎi,chàn # 䴺
+0x4d3b:lí # 䴻
+0x4d3c:chǎn,chàn # 䴼
+0x4d3d:bài,pí # 䴽
+0x4d3e:cuó,cuò,yè,zhěn,zǐ # 䴾
+0x4d3f:méng # 䴿
+0x4d40:suǒ # 䵀
+0x4d41:qiàng # 䵁
+0x4d42:zhí # 䵂
+0x4d43:kuàng # 䵃
+0x4d44:bí,bó,fèng,pěng # 䵄
+0x4d45:áo # 䵅
+0x4d46:méng # 䵆
+0x4d47:xiàn # 䵇
+0x4d49:tóu # 䵉
+0x4d4b:wěi # 䵋
+0x4d4f:lǎo # 䵏
+0x4d50:chǎn,chàn # 䵐
+0x4d51:nì # 䵑
+0x4d52:nì # 䵒
+0x4d53:lí # 䵓
+0x4d54:dǒng # 䵔
+0x4d55:jù # 䵕
+0x4d56:jiàn,qiàn,xiàn # 䵖
+0x4d57:fú,bó # 䵗
+0x4d58:shà,shài # 䵘
+0x4d59:zhǎ # 䵙
+0x4d5a:tǎo # 䵚
+0x4d5b:jiàn,xiàn # 䵛
+0x4d5c:nǒng # 䵜
+0x4d5d:yà,yì # 䵝
+0x4d5e:jìng,qíng # 䵞
+0x4d5f:gǎn # 䵟
+0x4d60:dí # 䵠
+0x4d61:jiǎn # 䵡
+0x4d62:mèi,wèi # 䵢
+0x4d63:dá,zhǎn # 䵣
+0x4d64:jiǎn # 䵤
+0x4d65:shè,wán,yìng,yù # 䵥
+0x4d66:xiè # 䵦
+0x4d67:zài # 䵧
+0x4d68:máng # 䵨
+0x4d69:lí # 䵩
+0x4d6a:gùn # 䵪
+0x4d6b:yù # 䵫
+0x4d6c:tà # 䵬
+0x4d6d:zhè # 䵭
+0x4d6e:yàng # 䵮
+0x4d6f:tuǎn # 䵯
+0x4d71:hè,xì # 䵱
+0x4d72:diào # 䵲
+0x4d73:wèi # 䵳
+0x4d74:yùn,zèng # 䵴
+0x4d75:zhá,zhuó,chuā # 䵵
+0x4d76:qú # 䵶
+0x4d7a:tǐng # 䵺
+0x4d7b:gǔ,hú,huì # 䵻
+0x4d7d:cà # 䵽
+0x4d7e:fú # 䵾
+0x4d7f:tiè # 䵿
+0x4d80:tà # 䶀
+0x4d81:tà # 䶁
+0x4d82:zhuó # 䶂
+0x4d83:hán # 䶃
+0x4d84:píng # 䶄
+0x4d85:hé # 䶅
+0x4d87:zhòu # 䶇
+0x4d88:bó # 䶈
+0x4d89:liú # 䶉
+0x4d8a:nǜ # 䶊
+0x4d8c:pào # 䶌
+0x4d8d:dì,tì # 䶍
+0x4d8e:shà # 䶎
+0x4d8f:tǐ,tì # 䶏
+0x4d90:wài,huì # 䶐
+0x4d91:tì # 䶑
+0x4d92:qí # 䶒
+0x4d93:jì,qì # 䶓
+0x4d94:chí,mín # 䶔
+0x4d95:pá # 䶕
+0x4d96:jìn,qín # 䶖
+0x4d97:qiā,qiǎ,kè # 䶗
+0x4d98:lì # 䶘
+0x4d99:jù # 䶙
+0x4d9a:qǔ # 䶚
+0x4d9b:là,liè # 䶛
+0x4d9c:gù # 䶜
+0x4d9d:qià,xiá # 䶝
+0x4d9e:qí # 䶞
+0x4d9f:xiàn # 䶟
+0x4da0:jiǎn,xián # 䶠
+0x4da1:shí,zé,zhì # 䶡
+0x4da2:xián,jiān # 䶢
+0x4da3:ái # 䶣
+0x4da4:huá # 䶤
+0x4da5:jǔ,zhā # 䶥
+0x4da6:zé # 䶦
+0x4da7:yǎo # 䶧
+0x4da9:jì # 䶩
+0x4daa:chá # 䶪
+0x4dab:kǎn,yán,yàn # 䶫
+0x4dae:yǎn # 䶮
+0x4db1:tóng # 䶱
+0x4db2:nán,nàn,rán # 䶲
+0x4db3:yuè # 䶳
+0x4db5:chí,shǐ # 䶵
+0x4e00:yī # 一
+0x4e01:dīng,zhēng # 丁
+0x4e02:kǎo,qiǎo,yú # 丂
+0x4e03:qī # 七
+0x4e04:shàng # 丄
+0x4e05:xià # 丅
+0x4e07:wàn,mò # 万
+0x4e08:zhàng # 丈
+0x4e09:sān # 三
+0x4e0a:shàng,shǎng # 上
+0x4e0b:xià # 下
+0x4e0c:qí,jī # 丌
+0x4e0d:bù,fǒu # 不
+0x4e0e:yǔ,yù,yú # 与
+0x4e0f:miǎn # 丏
+0x4e10:gài # 丐
+0x4e11:chǒu # 丑
+0x4e12:chǒu # 丒
+0x4e13:zhuān # 专
+0x4e14:qiě,jū # 且
+0x4e15:pī # 丕
+0x4e16:shì # 世
+0x4e17:shì # 丗
+0x4e18:qiū # 丘
+0x4e19:bǐng # 丙
+0x4e1a:yè # 业
+0x4e1b:cóng # 丛
+0x4e1c:dōng # 东
+0x4e1d:sī # 丝
+0x4e1e:chéng # 丞
+0x4e1f:diū # 丟
+0x4e20:qiū # 丠
+0x4e21:liǎng # 両
+0x4e22:diū # 丢
+0x4e23:yǒu # 丣
+0x4e24:liǎng # 两
+0x4e25:yán # 严
+0x4e26:bìng # 並
+0x4e27:sāng,sàng # 丧
+0x4e28:gǔn # 丨
+0x4e29:jiū # 丩
+0x4e2a:gè,gě # 个
+0x4e2b:yā # 丫
+0x4e2c:pán # 丬
+0x4e2d:zhōng,zhòng # 中
+0x4e2e:jǐ # 丮
+0x4e2f:jiè # 丯
+0x4e30:fēng # 丰
+0x4e31:guàn,kuàng # 丱
+0x4e32:chuàn # 串
+0x4e33:chǎn # 丳
+0x4e34:lín # 临
+0x4e35:zhuó # 丵
+0x4e36:zhǔ # 丶
+0x4e38:wán # 丸
+0x4e39:dān # 丹
+0x4e3a:wéi,wèi # 为
+0x4e3b:zhǔ # 主
+0x4e3c:jǐng # 丼
+0x4e3d:lì,lí # 丽
+0x4e3e:jǔ # 举
+0x4e3f:piě # 丿
+0x4e40:fú # 乀
+0x4e41:yí,jí # 乁
+0x4e42:yì # 乂
+0x4e43:nǎi # 乃
+0x4e45:jiǔ # 久
+0x4e46:jiǔ # 乆
+0x4e47:tuō,zhé # 乇
+0x4e48:me,mó,ma,yāo # 么
+0x4e49:yì # 义
+0x4e4b:zhī # 之
+0x4e4c:wū # 乌
+0x4e4d:zhà # 乍
+0x4e4e:hū # 乎
+0x4e4f:fá # 乏
+0x4e50:lè,yuè,yào,lào # 乐
+0x4e51:yín # 乑
+0x4e52:pīng # 乒
+0x4e53:pāng # 乓
+0x4e54:qiáo # 乔
+0x4e55:hǔ # 乕
+0x4e56:guāi # 乖
+0x4e57:chéng,shèng # 乗
+0x4e58:chéng,shèng # 乘
+0x4e59:yǐ # 乙
+0x4e5a:háo,yǐ # 乚
+0x4e5c:miē,niè # 乜
+0x4e5d:jiǔ # 九
+0x4e5e:qǐ # 乞
+0x4e5f:yě # 也
+0x4e60:xí # 习
+0x4e61:xiāng # 乡
+0x4e62:gài # 乢
+0x4e63:jiǔ # 乣
+0x4e66:shū # 书
+0x4e68:shǐ # 乨
+0x4e69:jī # 乩
+0x4e6a:náng # 乪
+0x4e6b:jiā # 乫
+0x4e6d:shí # 乭
+0x4e70:mǎi # 买
+0x4e71:luàn # 乱
+0x4e73:rǔ # 乳
+0x4e74:xué # 乴
+0x4e75:yǎn # 乵
+0x4e76:fǔ # 乶
+0x4e77:shā # 乷
+0x4e78:nǎ # 乸
+0x4e79:qián # 乹
+0x4e7e:qián,gān # 乾
+0x4e7f:zhì,luàn # 乿
+0x4e80:guī # 亀
+0x4e81:qián,gān # 亁
+0x4e82:luàn # 亂
+0x4e83:lǐn,lìn # 亃
+0x4e84:yì # 亄
+0x4e85:jué # 亅
+0x4e86:le,liǎo # 了
+0x4e88:yú,yǔ # 予
+0x4e89:zhēng # 争
+0x4e8a:shì # 亊
+0x4e8b:shì # 事
+0x4e8c:èr # 二
+0x4e8d:chù # 亍
+0x4e8e:yú # 于
+0x4e8f:kuī # 亏
+0x4e90:yú # 亐
+0x4e91:yún # 云
+0x4e92:hù # 互
+0x4e93:qí # 亓
+0x4e94:wǔ # 五
+0x4e95:jǐng # 井
+0x4e96:sì # 亖
+0x4e97:suì # 亗
+0x4e98:gèn # 亘
+0x4e99:gèn # 亙
+0x4e9a:yà # 亚
+0x4e9b:xiē,suò # 些
+0x4e9c:yà # 亜
+0x4e9d:qí,zhāi # 亝
+0x4e9e:yā,yà # 亞
+0x4e9f:jí,qì # 亟
+0x4ea0:tóu # 亠
+0x4ea1:wáng,wú # 亡
+0x4ea2:kàng # 亢
+0x4ea3:dà # 亣
+0x4ea4:jiāo # 交
+0x4ea5:hài # 亥
+0x4ea6:yì # 亦
+0x4ea7:chǎn # 产
+0x4ea8:hēng,pēng # 亨
+0x4ea9:mǔ # 亩
+0x4eab:xiǎng # 享
+0x4eac:jīng # 京
+0x4ead:tíng # 亭
+0x4eae:liàng # 亮
+0x4eaf:xiǎng # 亯
+0x4eb0:jīng # 亰
+0x4eb1:yè # 亱
+0x4eb2:qīn,qìng # 亲
+0x4eb3:bó # 亳
+0x4eb4:yòu # 亴
+0x4eb5:xiè # 亵
+0x4eb6:dǎn,dàn # 亶
+0x4eb7:lián # 亷
+0x4eb8:duǒ # 亸
+0x4eb9:wěi,mén # 亹
+0x4eba:rén # 人
+0x4ebb:rén # 亻
+0x4ebc:jí # 亼
+0x4ebe:wáng # 亾
+0x4ebf:yì # 亿
+0x4ec0:shí,shén # 什
+0x4ec1:rén # 仁
+0x4ec2:lè # 仂
+0x4ec3:dīng # 仃
+0x4ec4:zè # 仄
+0x4ec5:jǐn,jìn # 仅
+0x4ec6:pū,pú # 仆
+0x4ec7:chóu,qiú # 仇
+0x4ec8:bā # 仈
+0x4ec9:zhǎng # 仉
+0x4eca:jīn # 今
+0x4ecb:jiè # 介
+0x4ecc:bīng # 仌
+0x4ecd:réng # 仍
+0x4ece:cóng,zòng # 从
+0x4ecf:fó # 仏
+0x4ed0:jīn,sǎn # 仐
+0x4ed1:lún # 仑
+0x4ed3:cāng # 仓
+0x4ed4:zī,zǐ,zǎi # 仔
+0x4ed5:shì # 仕
+0x4ed6:tā # 他
+0x4ed7:zhàng # 仗
+0x4ed8:fù # 付
+0x4ed9:xiān # 仙
+0x4eda:xiān # 仚
+0x4edb:tuō,chà,duó # 仛
+0x4edc:hóng # 仜
+0x4edd:tóng # 仝
+0x4ede:rèn # 仞
+0x4edf:qiān # 仟
+0x4ee0:gǎn,hàn # 仠
+0x4ee1:yì,gē # 仡
+0x4ee2:bó # 仢
+0x4ee3:dài # 代
+0x4ee4:líng,lǐng,lìng # 令
+0x4ee5:yǐ # 以
+0x4ee6:chào # 仦
+0x4ee7:cháng,zhǎng # 仧
+0x4ee8:sā # 仨
+0x4eea:yí # 仪
+0x4eeb:mù # 仫
+0x4eec:mén # 们
+0x4eed:rèn # 仭
+0x4eee:fǎn # 仮
+0x4eef:chào,miǎo # 仯
+0x4ef0:yǎng,áng # 仰
+0x4ef1:qián # 仱
+0x4ef2:zhòng # 仲
+0x4ef3:pǐ,pí # 仳
+0x4ef4:wò # 仴
+0x4ef5:wǔ # 仵
+0x4ef6:jiàn # 件
+0x4ef7:jià,jiè,jie # 价
+0x4ef8:yǎo,fó # 仸
+0x4ef9:fēng # 仹
+0x4efa:cāng # 仺
+0x4efb:rèn,rén # 任
+0x4efc:wáng # 仼
+0x4efd:fèn,bīn # 份
+0x4efe:dī # 仾
+0x4eff:fǎng # 仿
+0x4f00:zhōng # 伀
+0x4f01:qǐ # 企
+0x4f02:pèi # 伂
+0x4f03:yú # 伃
+0x4f04:diào # 伄
+0x4f05:dùn # 伅
+0x4f06:wěn # 伆
+0x4f07:yì # 伇
+0x4f08:xǐn # 伈
+0x4f09:kàng # 伉
+0x4f0a:yī # 伊
+0x4f0b:jí # 伋
+0x4f0c:ài # 伌
+0x4f0d:wǔ # 伍
+0x4f0e:jì,qí # 伎
+0x4f0f:fú # 伏
+0x4f10:fá # 伐
+0x4f11:xiū,xǔ # 休
+0x4f12:jìn,yín # 伒
+0x4f13:pī # 伓
+0x4f14:dǎn # 伔
+0x4f15:fū # 伕
+0x4f16:tǎng # 伖
+0x4f17:zhòng # 众
+0x4f18:yōu # 优
+0x4f19:huǒ # 伙
+0x4f1a:huì,kuài # 会
+0x4f1b:yǔ # 伛
+0x4f1c:cuì # 伜
+0x4f1d:yún # 伝
+0x4f1e:sǎn # 伞
+0x4f1f:wěi # 伟
+0x4f20:chuán,zhuàn # 传
+0x4f21:chē,jū # 伡
+0x4f22:yá # 伢
+0x4f23:qiàn # 伣
+0x4f24:shāng # 伤
+0x4f25:chāng # 伥
+0x4f26:lún # 伦
+0x4f27:cāng,chen # 伧
+0x4f28:xùn # 伨
+0x4f29:xìn # 伩
+0x4f2a:wěi # 伪
+0x4f2b:zhù # 伫
+0x4f2d:xián,xuán # 伭
+0x4f2e:nú,nǔ # 伮
+0x4f2f:bó,bǎi,bà # 伯
+0x4f30:gū,gù # 估
+0x4f31:nǐ # 伱
+0x4f32:nǐ,nì # 伲
+0x4f33:xiè # 伳
+0x4f34:bàn # 伴
+0x4f35:xù # 伵
+0x4f36:líng # 伶
+0x4f37:zhòu # 伷
+0x4f38:shēn # 伸
+0x4f39:qū # 伹
+0x4f3a:sì,cì # 伺
+0x4f3b:bēng # 伻
+0x4f3c:sì,shì # 似
+0x4f3d:qié,jiā,gā # 伽
+0x4f3e:pī # 伾
+0x4f3f:yì # 伿
+0x4f40:sì # 佀
+0x4f41:yǐ,chì # 佁
+0x4f42:zhēng # 佂
+0x4f43:diàn,tián # 佃
+0x4f44:hān,gàn # 佄
+0x4f45:mài # 佅
+0x4f46:dàn # 但
+0x4f47:zhù # 佇
+0x4f48:bù # 佈
+0x4f49:qū # 佉
+0x4f4a:bǐ # 佊
+0x4f4b:zhāo,shào # 佋
+0x4f4c:cǐ # 佌
+0x4f4d:wèi # 位
+0x4f4e:dī # 低
+0x4f4f:zhù # 住
+0x4f50:zuǒ # 佐
+0x4f51:yòu # 佑
+0x4f52:yǎng # 佒
+0x4f53:tǐ,tī # 体
+0x4f54:zhàn,diān # 佔
+0x4f55:hé,hē,hè # 何
+0x4f56:bì # 佖
+0x4f57:tuó # 佗
+0x4f58:shé # 佘
+0x4f59:yú # 余
+0x4f5a:yì,dié # 佚
+0x4f5b:fó,fú,bì,bó # 佛
+0x4f5c:zuò # 作
+0x4f5d:gōu,kòu # 佝
+0x4f5e:nìng # 佞
+0x4f5f:tóng # 佟
+0x4f60:nǐ # 你
+0x4f61:xiān # 佡
+0x4f62:qú # 佢
+0x4f63:yōng,yòng # 佣
+0x4f64:wǎ # 佤
+0x4f65:qiān # 佥
+0x4f67:kǎ # 佧
+0x4f69:pèi # 佩
+0x4f6a:huí,huái # 佪
+0x4f6b:gé,hè # 佫
+0x4f6c:lǎo # 佬
+0x4f6d:xiáng # 佭
+0x4f6e:gé # 佮
+0x4f6f:yáng # 佯
+0x4f70:bǎi # 佰
+0x4f71:fǎ # 佱
+0x4f72:mǐng # 佲
+0x4f73:jiā # 佳
+0x4f74:èr,nài # 佴
+0x4f75:bìng # 併
+0x4f76:jí # 佶
+0x4f77:hěn # 佷
+0x4f78:huó # 佸
+0x4f79:guǐ # 佹
+0x4f7a:quán # 佺
+0x4f7b:tiāo # 佻
+0x4f7c:jiǎo # 佼
+0x4f7d:cì # 佽
+0x4f7e:yì # 佾
+0x4f7f:shǐ # 使
+0x4f80:xíng # 侀
+0x4f81:shēn # 侁
+0x4f82:tuō # 侂
+0x4f83:kǎn # 侃
+0x4f84:zhí # 侄
+0x4f85:gāi # 侅
+0x4f86:lái # 來
+0x4f87:yí # 侇
+0x4f88:chǐ # 侈
+0x4f89:kuǎ # 侉
+0x4f8a:gōng # 侊
+0x4f8b:lì # 例
+0x4f8c:yīn # 侌
+0x4f8d:shì # 侍
+0x4f8e:mǐ # 侎
+0x4f8f:zhū # 侏
+0x4f90:xù # 侐
+0x4f91:yòu # 侑
+0x4f92:ān # 侒
+0x4f93:lù # 侓
+0x4f94:móu # 侔
+0x4f95:ér # 侕
+0x4f96:lún # 侖
+0x4f97:dòng,tóng,tǒng # 侗
+0x4f98:chà # 侘
+0x4f99:chì # 侙
+0x4f9a:xùn # 侚
+0x4f9b:gōng,gòng # 供
+0x4f9c:zhōu # 侜
+0x4f9d:yī # 依
+0x4f9e:rú # 侞
+0x4f9f:cún,jiàn # 侟
+0x4fa0:xiá # 侠
+0x4fa1:sì # 価
+0x4fa2:dài # 侢
+0x4fa3:lǚ # 侣
+0x4fa5:jiǎo,yáo # 侥
+0x4fa6:zhēn # 侦
+0x4fa7:cè,zè,zhāi # 侧
+0x4fa8:qiáo # 侨
+0x4fa9:kuài # 侩
+0x4faa:chái # 侪
+0x4fab:nìng # 侫
+0x4fac:nóng # 侬
+0x4fad:jǐn # 侭
+0x4fae:wǔ # 侮
+0x4faf:hóu,hòu # 侯
+0x4fb0:jiǒng # 侰
+0x4fb1:chěng,tǐng # 侱
+0x4fb2:zhèn,zhēn # 侲
+0x4fb3:zuò # 侳
+0x4fb4:hào # 侴
+0x4fb5:qīn # 侵
+0x4fb6:lǚ # 侶
+0x4fb7:jú # 侷
+0x4fb8:shù,dōu # 侸
+0x4fb9:tǐng # 侹
+0x4fba:shèn # 侺
+0x4fbb:tuó,tuì # 侻
+0x4fbc:bó # 侼
+0x4fbd:nán # 侽
+0x4fbe:xiāo # 侾
+0x4fbf:biàn,pián # 便
+0x4fc0:tuǐ # 俀
+0x4fc1:yǔ # 俁
+0x4fc2:xì # 係
+0x4fc3:cù # 促
+0x4fc4:é # 俄
+0x4fc5:qiú # 俅
+0x4fc6:xú # 俆
+0x4fc7:guàng # 俇
+0x4fc8:kù # 俈
+0x4fc9:wù # 俉
+0x4fca:jùn # 俊
+0x4fcb:yì # 俋
+0x4fcc:fǔ # 俌
+0x4fcd:liáng # 俍
+0x4fce:zǔ # 俎
+0x4fcf:qiào,xiào # 俏
+0x4fd0:lì # 俐
+0x4fd1:yǒng # 俑
+0x4fd2:hùn # 俒
+0x4fd3:jìng # 俓
+0x4fd4:qiàn # 俔
+0x4fd5:sàn # 俕
+0x4fd6:pěi # 俖
+0x4fd7:sú # 俗
+0x4fd8:fú # 俘
+0x4fd9:xī # 俙
+0x4fda:lǐ # 俚
+0x4fdb:fǔ,miǎn # 俛
+0x4fdc:pīng # 俜
+0x4fdd:bǎo # 保
+0x4fde:yú,yù,shù # 俞
+0x4fdf:sì,qí # 俟
+0x4fe0:xiá # 俠
+0x4fe1:xìn,shēn # 信
+0x4fe2:xiū # 俢
+0x4fe3:yǔ # 俣
+0x4fe4:dì # 俤
+0x4fe5:chē,jū # 俥
+0x4fe6:chóu # 俦
+0x4fe8:yǎn # 俨
+0x4fe9:liǎng,liǎ # 俩
+0x4fea:lì # 俪
+0x4feb:lái # 俫
+0x4fed:jiǎn # 俭
+0x4fee:xiū # 修
+0x4fef:fǔ # 俯
+0x4ff0:huò # 俰
+0x4ff1:jù # 俱
+0x4ff2:xiào # 俲
+0x4ff3:pái # 俳
+0x4ff4:jiàn # 俴
+0x4ff5:biào # 俵
+0x4ff6:chù,tì # 俶
+0x4ff7:fèi # 俷
+0x4ff8:fèng # 俸
+0x4ff9:yà # 俹
+0x4ffa:ǎn # 俺
+0x4ffb:bèi # 俻
+0x4ffc:yù # 俼
+0x4ffd:xīn # 俽
+0x4ffe:bǐ # 俾
+0x4fff:hǔ,chí # 俿
+0x5000:chāng # 倀
+0x5001:zhī # 倁
+0x5002:bìng # 倂
+0x5003:jiù # 倃
+0x5004:yáo # 倄
+0x5005:cuì,zú # 倅
+0x5006:liǎng,liǎ # 倆
+0x5007:wǎn # 倇
+0x5008:lái # 倈
+0x5009:cāng # 倉
+0x500a:zǒng # 倊
+0x500b:gè,gě # 個
+0x500c:guān # 倌
+0x500d:bèi # 倍
+0x500e:tiǎn # 倎
+0x500f:shū # 倏
+0x5010:shū # 倐
+0x5011:mén # 們
+0x5012:dǎo,dào # 倒
+0x5013:tán,tàn # 倓
+0x5014:jué,juè # 倔
+0x5015:chuí # 倕
+0x5016:xìng # 倖
+0x5017:péng # 倗
+0x5018:tǎng,cháng # 倘
+0x5019:hòu # 候
+0x501a:yǐ # 倚
+0x501b:qī # 倛
+0x501c:tì # 倜
+0x501d:gàn # 倝
+0x501e:liàng,jìng # 倞
+0x501f:jiè # 借
+0x5020:suī # 倠
+0x5021:chàng,chāng # 倡
+0x5022:jié # 倢
+0x5023:fǎng # 倣
+0x5024:zhí # 値
+0x5025:kōng,kǒng # 倥
+0x5026:juàn # 倦
+0x5027:zōng # 倧
+0x5028:jù # 倨
+0x5029:qiàn # 倩
+0x502a:ní # 倪
+0x502b:lún # 倫
+0x502c:zhuō # 倬
+0x502d:wō,wēi # 倭
+0x502e:luǒ # 倮
+0x502f:sōng # 倯
+0x5030:lèng # 倰
+0x5031:hùn # 倱
+0x5032:dōng # 倲
+0x5033:zì # 倳
+0x5034:bèn # 倴
+0x5035:wǔ # 倵
+0x5036:jù # 倶
+0x5037:nǎi # 倷
+0x5038:cǎi # 倸
+0x5039:jiǎn # 倹
+0x503a:zhài # 债
+0x503b:yē # 倻
+0x503c:zhí # 值
+0x503d:shà # 倽
+0x503e:qīng # 倾
+0x5040:yīng # 偀
+0x5041:chēng,chèn # 偁
+0x5042:qián # 偂
+0x5043:yǎn # 偃
+0x5044:ruǎn # 偄
+0x5045:zhòng,tóng # 偅
+0x5046:chǔn # 偆
+0x5047:jiǎ,jià # 假
+0x5048:jì,jié # 偈
+0x5049:wěi # 偉
+0x504a:yǔ # 偊
+0x504b:bǐng,bìng # 偋
+0x504c:ruò # 偌
+0x504d:tí # 偍
+0x504e:wēi # 偎
+0x504f:piān # 偏
+0x5050:yàn # 偐
+0x5051:fēng # 偑
+0x5052:tǎng,dàng # 偒
+0x5053:wò # 偓
+0x5054:è # 偔
+0x5055:xié # 偕
+0x5056:chě # 偖
+0x5057:shěng # 偗
+0x5058:kǎn # 偘
+0x5059:dì # 偙
+0x505a:zuò # 做
+0x505b:chā # 偛
+0x505c:tíng # 停
+0x505d:bèi # 偝
+0x505e:xiè # 偞
+0x505f:huáng # 偟
+0x5060:yǎo # 偠
+0x5061:zhàn # 偡
+0x5062:chǒu,qiào # 偢
+0x5063:ān # 偣
+0x5064:yóu # 偤
+0x5065:jiàn # 健
+0x5066:xū # 偦
+0x5067:zhā # 偧
+0x5068:cī # 偨
+0x5069:fù # 偩
+0x506a:bī # 偪
+0x506b:zhì # 偫
+0x506c:zǒng # 偬
+0x506d:miǎn # 偭
+0x506e:jí # 偮
+0x506f:yǐ # 偯
+0x5070:xiè # 偰
+0x5071:xún # 偱
+0x5072:cāi,sī # 偲
+0x5073:duān # 偳
+0x5074:cè,zè,zhāi # 側
+0x5075:zhēn # 偵
+0x5076:ǒu # 偶
+0x5077:tōu # 偷
+0x5078:tōu # 偸
+0x5079:bèi # 偹
+0x507a:zán,zá,zǎ # 偺
+0x507b:lǚ,lóu # 偻
+0x507c:jié # 偼
+0x507d:wěi # 偽
+0x507e:fèn # 偾
+0x507f:cháng # 偿
+0x5080:kuǐ,guī # 傀
+0x5081:sǒu # 傁
+0x5082:zhì,sī # 傂
+0x5083:sù # 傃
+0x5084:xiā # 傄
+0x5085:fù # 傅
+0x5086:yuàn,yuán # 傆
+0x5087:rǒng # 傇
+0x5088:lì # 傈
+0x5089:nù # 傉
+0x508a:yùn # 傊
+0x508b:jiǎng,gòu # 傋
+0x508c:mà # 傌
+0x508d:bàng # 傍
+0x508e:diān # 傎
+0x508f:táng # 傏
+0x5090:hào # 傐
+0x5091:jié # 傑
+0x5092:xī,xì # 傒
+0x5093:shān # 傓
+0x5094:qiàn,jiān # 傔
+0x5095:què,jué # 傕
+0x5096:cāng,chen # 傖
+0x5097:chù # 傗
+0x5098:sǎn # 傘
+0x5099:bèi # 備
+0x509a:xiào # 傚
+0x509b:róng # 傛
+0x509c:yáo # 傜
+0x509d:tà,tàn # 傝
+0x509e:suō # 傞
+0x509f:yǎng # 傟
+0x50a0:fá # 傠
+0x50a1:bìng # 傡
+0x50a2:jiā # 傢
+0x50a3:dǎi # 傣
+0x50a4:zài # 傤
+0x50a5:tǎng # 傥
+0x50a7:bīn # 傧
+0x50a8:chǔ # 储
+0x50a9:nuó # 傩
+0x50aa:cān,càn # 傪
+0x50ab:lěi # 傫
+0x50ac:cuī # 催
+0x50ad:yōng # 傭
+0x50ae:zāo,cáo # 傮
+0x50af:zǒng # 傯
+0x50b0:péng # 傰
+0x50b1:sǒng # 傱
+0x50b2:ào # 傲
+0x50b3:chuán,zhuàn # 傳
+0x50b4:yǔ # 傴
+0x50b5:zhài # 債
+0x50b6:qī,còu # 傶
+0x50b7:shāng # 傷
+0x50b8:chuǎng # 傸
+0x50b9:jìng # 傹
+0x50ba:chì # 傺
+0x50bb:shǎ # 傻
+0x50bc:hàn # 傼
+0x50bd:zhāng # 傽
+0x50be:qīng # 傾
+0x50bf:yān,yàn # 傿
+0x50c0:dì # 僀
+0x50c1:xiè # 僁
+0x50c2:lǚ,lóu # 僂
+0x50c3:bèi # 僃
+0x50c4:piào,biāo # 僄
+0x50c5:jǐn,jìn # 僅
+0x50c6:liàn # 僆
+0x50c7:lù # 僇
+0x50c8:màn # 僈
+0x50c9:qiān # 僉
+0x50ca:xiān # 僊
+0x50cb:tǎn,tàn # 僋
+0x50cc:yíng # 僌
+0x50cd:dòng # 働
+0x50ce:zhuàn # 僎
+0x50cf:xiàng # 像
+0x50d0:shàn # 僐
+0x50d1:qiáo # 僑
+0x50d2:jiǒng # 僒
+0x50d3:tuǐ,tuí # 僓
+0x50d4:zǔn # 僔
+0x50d5:pú # 僕
+0x50d6:xī # 僖
+0x50d7:láo # 僗
+0x50d8:chǎng # 僘
+0x50d9:guāng # 僙
+0x50da:liáo # 僚
+0x50db:qī # 僛
+0x50dc:chēng,dēng # 僜
+0x50dd:zhàn,zhuàn,chán # 僝
+0x50de:wěi # 僞
+0x50df:jī # 僟
+0x50e0:bō # 僠
+0x50e1:huì # 僡
+0x50e2:chuǎn # 僢
+0x50e3:tiě,jiàn # 僣
+0x50e4:dàn # 僤
+0x50e5:jiǎo,yáo # 僥
+0x50e6:jiù # 僦
+0x50e7:sēng # 僧
+0x50e8:fèn # 僨
+0x50e9:xiàn # 僩
+0x50ea:yù,jú # 僪
+0x50eb:è,wù,wū # 僫
+0x50ec:jiāo # 僬
+0x50ed:jiàn # 僭
+0x50ee:tóng,zhuàng # 僮
+0x50ef:lǐn # 僯
+0x50f0:bó # 僰
+0x50f1:gù # 僱
+0x50f3:sù # 僳
+0x50f4:xiàn # 僴
+0x50f5:jiāng # 僵
+0x50f6:mǐn # 僶
+0x50f7:yè # 僷
+0x50f8:jìn # 僸
+0x50f9:jià,jie # 價
+0x50fa:qiào # 僺
+0x50fb:pì # 僻
+0x50fc:fēng # 僼
+0x50fd:zhòu # 僽
+0x50fe:ài # 僾
+0x50ff:sài # 僿
+0x5100:yí # 儀
+0x5101:jùn # 儁
+0x5102:nóng # 儂
+0x5103:chán,tǎn,shàn # 儃
+0x5104:yì # 億
+0x5105:dāng,dàng # 儅
+0x5106:jǐng # 儆
+0x5107:xuān # 儇
+0x5108:kuài # 儈
+0x5109:jiǎn # 儉
+0x510a:chù # 儊
+0x510b:dān,dàn # 儋
+0x510c:jiǎo # 儌
+0x510d:shǎ # 儍
+0x510e:zài # 儎
+0x5110:bīn,bìn # 儐
+0x5111:án,àn # 儑
+0x5112:rú # 儒
+0x5113:tái # 儓
+0x5114:chóu # 儔
+0x5115:chái # 儕
+0x5116:lán # 儖
+0x5117:nǐ,yì # 儗
+0x5118:jǐn # 儘
+0x5119:qiàn # 儙
+0x511a:méng # 儚
+0x511b:wǔ # 儛
+0x511c:níng # 儜
+0x511d:qióng # 儝
+0x511e:nǐ # 儞
+0x511f:cháng # 償
+0x5120:liè # 儠
+0x5121:lěi # 儡
+0x5122:lǚ # 儢
+0x5123:kuǎng # 儣
+0x5124:bào # 儤
+0x5125:yù # 儥
+0x5126:biāo # 儦
+0x5127:zǎn # 儧
+0x5128:zhì # 儨
+0x5129:sì # 儩
+0x512a:yōu # 優
+0x512b:háo # 儫
+0x512c:qìng # 儬
+0x512d:chèn # 儭
+0x512e:lì # 儮
+0x512f:téng # 儯
+0x5130:wěi # 儰
+0x5131:lǒng,lóng,lòng # 儱
+0x5132:chǔ # 儲
+0x5133:chán,chàn # 儳
+0x5134:ráng,xiāng # 儴
+0x5135:shū # 儵
+0x5136:huì,xié # 儶
+0x5137:lì # 儷
+0x5138:luó # 儸
+0x5139:zǎn # 儹
+0x513a:nuó # 儺
+0x513b:tǎng # 儻
+0x513c:yǎn # 儼
+0x513d:léi # 儽
+0x513e:nàng,nāng # 儾
+0x513f:ér # 儿
+0x5140:wù # 兀
+0x5141:yǔn # 允
+0x5142:zān # 兂
+0x5143:yuán # 元
+0x5144:xiōng # 兄
+0x5145:chōng # 充
+0x5146:zhào # 兆
+0x5147:xiōng # 兇
+0x5148:xiān # 先
+0x5149:guāng # 光
+0x514a:duì,ruì,yuè # 兊
+0x514b:kè # 克
+0x514c:duì,ruì,yuè # 兌
+0x514d:miǎn # 免
+0x514e:tù # 兎
+0x514f:cháng,zhǎng # 兏
+0x5150:ér # 児
+0x5151:duì,ruì,yuè # 兑
+0x5152:ér # 兒
+0x5153:qīn,jīn,zàn # 兓
+0x5154:tù # 兔
+0x5155:sì # 兕
+0x5156:yǎn # 兖
+0x5157:yǎn # 兗
+0x5158:shǐ # 兘
+0x515a:dǎng # 党
+0x515b:qiānkè # 兛
+0x515c:dōu # 兜
+0x515d:gōngfēn # 兝
+0x515e:háokè # 兞
+0x515f:shēn # 兟
+0x5160:dōu # 兠
+0x5162:jīng # 兢
+0x5163:gōnglǐ # 兣
+0x5164:huǎng # 兤
+0x5165:rù # 入
+0x5166:wáng # 兦
+0x5167:nèi # 內
+0x5168:quán # 全
+0x5169:liǎng # 兩
+0x516a:yú,shù # 兪
+0x516b:bā # 八
+0x516c:gōng # 公
+0x516d:liù,lù # 六
+0x516e:xī # 兮
+0x5170:lán # 兰
+0x5171:gòng,gōng # 共
+0x5172:tiān # 兲
+0x5173:guān # 关
+0x5174:xīng,xìng # 兴
+0x5175:bīng # 兵
+0x5176:qí,jī # 其
+0x5177:jù # 具
+0x5178:diǎn # 典
+0x5179:zī,cí # 兹
+0x517b:yǎng # 养
+0x517c:jiān # 兼
+0x517d:shòu # 兽
+0x517e:jì # 兾
+0x517f:yì # 兿
+0x5180:jì # 冀
+0x5181:chǎn # 冁
+0x5182:jiōng # 冂
+0x5184:rǎn # 冄
+0x5185:nèi,nà # 内
+0x5187:mǎo # 冇
+0x5188:gāng # 冈
+0x5189:rǎn # 冉
+0x518a:cè # 冊
+0x518b:jiōng # 冋
+0x518c:cè # 册
+0x518d:zài # 再
+0x518e:guǎ # 冎
+0x518f:jiǒng # 冏
+0x5190:mào # 冐
+0x5191:zhòu # 冑
+0x5192:mào,mò # 冒
+0x5193:gòu # 冓
+0x5194:xú # 冔
+0x5195:miǎn # 冕
+0x5196:mì # 冖
+0x5197:rǒng # 冗
+0x5198:yín,yóu # 冘
+0x5199:xiě # 写
+0x519a:kǎn # 冚
+0x519b:jūn # 军
+0x519c:nóng # 农
+0x519d:yí # 冝
+0x519e:mí # 冞
+0x519f:shì # 冟
+0x51a0:guān,guàn # 冠
+0x51a1:měng # 冡
+0x51a2:zhǒng # 冢
+0x51a3:zuì # 冣
+0x51a4:yuān # 冤
+0x51a5:míng # 冥
+0x51a6:kòu # 冦
+0x51a8:fù # 冨
+0x51a9:xiě # 冩
+0x51aa:mì # 冪
+0x51ab:bīng # 冫
+0x51ac:dōng # 冬
+0x51ad:tài # 冭
+0x51ae:gāng # 冮
+0x51af:féng,píng # 冯
+0x51b0:bīng # 冰
+0x51b1:hù # 冱
+0x51b2:chōng,chòng # 冲
+0x51b3:jué # 决
+0x51b4:yà # 冴
+0x51b5:kuàng # 况
+0x51b6:yě # 冶
+0x51b7:lěng # 冷
+0x51b8:pàn # 冸
+0x51b9:fā # 冹
+0x51ba:mǐn # 冺
+0x51bb:dòng # 冻
+0x51bc:xiǎn # 冼
+0x51bd:liè # 冽
+0x51be:qià # 冾
+0x51bf:jiān # 冿
+0x51c0:jìng,chēng # 净
+0x51c1:sōu # 凁
+0x51c2:měi # 凂
+0x51c3:tú # 凃
+0x51c4:qī # 凄
+0x51c5:gù # 凅
+0x51c6:zhǔn # 准
+0x51c7:sōng # 凇
+0x51c8:jìng,chēng # 凈
+0x51c9:liáng,liàng # 凉
+0x51ca:qìng # 凊
+0x51cb:diāo # 凋
+0x51cc:líng # 凌
+0x51cd:dòng # 凍
+0x51ce:gàn # 凎
+0x51cf:jiǎn # 减
+0x51d0:yīn # 凐
+0x51d1:còu # 凑
+0x51d2:ái # 凒
+0x51d3:lì # 凓
+0x51d4:cāng # 凔
+0x51d5:mǐng # 凕
+0x51d7:cuī # 凗
+0x51d8:sī # 凘
+0x51d9:duó # 凙
+0x51da:jìn # 凚
+0x51db:lǐn # 凛
+0x51dc:lǐn # 凜
+0x51dd:níng # 凝
+0x51de:xī # 凞
+0x51df:dú # 凟
+0x51e0:jī,jǐ # 几
+0x51e1:fán # 凡
+0x51e2:fán # 凢
+0x51e3:fán # 凣
+0x51e4:fèng # 凤
+0x51e5:jū # 凥
+0x51e6:chù,chǔ # 処
+0x51e8:fēng # 凨
+0x51eb:fú # 凫
+0x51ec:fēng # 凬
+0x51ed:píng # 凭
+0x51ee:fēng # 凮
+0x51ef:kǎi # 凯
+0x51f0:huáng # 凰
+0x51f1:kǎi # 凱
+0x51f2:gān # 凲
+0x51f3:dèng # 凳
+0x51f4:píng # 凴
+0x51f5:kǎn,qiǎn # 凵
+0x51f6:xiōng # 凶
+0x51f7:kuài # 凷
+0x51f8:tū # 凸
+0x51f9:āo,wā # 凹
+0x51fa:chū # 出
+0x51fb:jī # 击
+0x51fc:dàng # 凼
+0x51fd:hán # 函
+0x51fe:hán # 凾
+0x51ff:záo # 凿
+0x5200:dāo # 刀
+0x5201:diāo # 刁
+0x5202:dāo # 刂
+0x5203:rèn # 刃
+0x5204:rèn # 刄
+0x5205:chuāng # 刅
+0x5206:fēn,fèn # 分
+0x5207:qiē,qiè # 切
+0x5208:yì # 刈
+0x5209:jī # 刉
+0x520a:kān # 刊
+0x520b:qiàn # 刋
+0x520c:cǔn # 刌
+0x520d:chú # 刍
+0x520e:wěn # 刎
+0x520f:jī # 刏
+0x5210:dǎn # 刐
+0x5211:xíng # 刑
+0x5212:huá,huà,huai,guò,guǒ # 划
+0x5213:wán # 刓
+0x5214:jué # 刔
+0x5215:lí # 刕
+0x5216:yuè # 刖
+0x5217:liè # 列
+0x5218:liú # 刘
+0x5219:zé # 则
+0x521a:gāng # 刚
+0x521b:chuàng,chuāng # 创
+0x521c:fú # 刜
+0x521d:chū # 初
+0x521e:qù # 刞
+0x521f:diāo # 刟
+0x5220:shān # 删
+0x5221:mǐn # 刡
+0x5222:líng # 刢
+0x5223:zhōng # 刣
+0x5224:pàn # 判
+0x5225:bié,biè # 別
+0x5226:jié # 刦
+0x5227:jié # 刧
+0x5228:páo,bào # 刨
+0x5229:lì # 利
+0x522a:shān # 刪
+0x522b:bié,biè # 别
+0x522c:chǎn,chàn # 刬
+0x522d:jǐng # 刭
+0x522e:guā # 刮
+0x522f:gēng # 刯
+0x5230:dào # 到
+0x5231:chuàng # 刱
+0x5232:kuī # 刲
+0x5233:kū # 刳
+0x5234:duò # 刴
+0x5235:èr # 刵
+0x5236:zhì # 制
+0x5237:shuā,shuà # 刷
+0x5238:quàn,xuàn # 券
+0x5239:chà,shā # 刹
+0x523a:cì,cī # 刺
+0x523b:kè # 刻
+0x523c:jié # 刼
+0x523d:guì # 刽
+0x523e:cì # 刾
+0x523f:guì # 刿
+0x5240:kǎi # 剀
+0x5241:duò # 剁
+0x5242:jì # 剂
+0x5243:tì # 剃
+0x5244:jǐng # 剄
+0x5245:lóu # 剅
+0x5246:luǒ # 剆
+0x5247:zé # 則
+0x5248:yuān # 剈
+0x5249:cuò # 剉
+0x524a:xiāo,xuē # 削
+0x524b:kēi,kè # 剋
+0x524c:là,lá # 剌
+0x524d:qián # 前
+0x524e:chà,shā # 剎
+0x524f:chuàng # 剏
+0x5250:guǎ # 剐
+0x5251:jiàn # 剑
+0x5252:cuò # 剒
+0x5253:lí # 剓
+0x5254:tī # 剔
+0x5255:fèi # 剕
+0x5256:pōu # 剖
+0x5257:chǎn,chàn # 剗
+0x5258:qí # 剘
+0x5259:chuàng # 剙
+0x525a:zì # 剚
+0x525b:gāng # 剛
+0x525c:wān # 剜
+0x525d:bāo,bō # 剝
+0x525e:jī # 剞
+0x525f:duō # 剟
+0x5260:qíng # 剠
+0x5261:yǎn,shàn # 剡
+0x5262:dū,zhuó # 剢
+0x5263:jiàn # 剣
+0x5264:jì # 剤
+0x5265:bāo,bō # 剥
+0x5266:yān # 剦
+0x5267:jù # 剧
+0x5268:huò # 剨
+0x5269:shèng # 剩
+0x526a:jiǎn # 剪
+0x526b:duó # 剫
+0x526c:zhì,duān # 剬
+0x526d:wū # 剭
+0x526e:guǎ # 剮
+0x526f:fù,pì # 副
+0x5270:shèng # 剰
+0x5271:jiàn # 剱
+0x5272:gē # 割
+0x5273:dá,zhá # 剳
+0x5274:kǎi # 剴
+0x5275:chuàng,chuāng # 創
+0x5276:chuán # 剶
+0x5277:chǎn # 剷
+0x5278:tuán,zhuān # 剸
+0x5279:lù,jiū # 剹
+0x527a:lí # 剺
+0x527b:pēng # 剻
+0x527c:shān # 剼
+0x527d:piāo # 剽
+0x527e:kōu # 剾
+0x527f:jiǎo,chāo # 剿
+0x5280:guā # 劀
+0x5281:qiāo # 劁
+0x5282:jué # 劂
+0x5283:huá,huà # 劃
+0x5284:zhā,zhá # 劄
+0x5285:zhuó # 劅
+0x5286:lián # 劆
+0x5287:jù # 劇
+0x5288:pī,pǐ # 劈
+0x5289:liú # 劉
+0x528a:guì # 劊
+0x528b:jiǎo,chāo # 劋
+0x528c:guì # 劌
+0x528d:jiàn # 劍
+0x528e:jiàn # 劎
+0x528f:tāng # 劏
+0x5290:huō # 劐
+0x5291:jì # 劑
+0x5292:jiàn # 劒
+0x5293:yì # 劓
+0x5294:jiàn # 劔
+0x5295:zhì # 劕
+0x5296:chán # 劖
+0x5297:zuān # 劗
+0x5298:mó # 劘
+0x5299:lí # 劙
+0x529a:zhú # 劚
+0x529b:lì # 力
+0x529c:yà # 劜
+0x529d:quàn # 劝
+0x529e:bàn # 办
+0x529f:gōng # 功
+0x52a0:jiā # 加
+0x52a1:wù # 务
+0x52a2:mài # 劢
+0x52a3:liè # 劣
+0x52a4:jìn,jìng # 劤
+0x52a5:kēng # 劥
+0x52a6:xié,liè # 劦
+0x52a7:zhǐ # 劧
+0x52a8:dòng # 动
+0x52a9:zhù,chú # 助
+0x52aa:nǔ # 努
+0x52ab:jié # 劫
+0x52ac:qú # 劬
+0x52ad:shào # 劭
+0x52ae:yì # 劮
+0x52af:zhǔ # 劯
+0x52b0:miǎo # 劰
+0x52b1:lì # 励
+0x52b2:jìn,jìng # 劲
+0x52b3:láo # 劳
+0x52b4:láo # 労
+0x52b5:juàn # 劵
+0x52b6:kǒu # 劶
+0x52b7:yáng # 劷
+0x52b8:wā # 劸
+0x52b9:xiào # 効
+0x52ba:móu # 劺
+0x52bb:kuāng # 劻
+0x52bc:jié # 劼
+0x52bd:liè # 劽
+0x52be:hé # 劾
+0x52bf:shì # 势
+0x52c0:kè # 勀
+0x52c1:jìn,jìng # 勁
+0x52c2:gào # 勂
+0x52c3:bó,bèi # 勃
+0x52c4:mǐn # 勄
+0x52c5:chì # 勅
+0x52c6:láng # 勆
+0x52c7:yǒng # 勇
+0x52c8:yǒng # 勈
+0x52c9:miǎn # 勉
+0x52ca:kè # 勊
+0x52cb:xūn # 勋
+0x52cc:juàn,juān # 勌
+0x52cd:qíng # 勍
+0x52ce:lù # 勎
+0x52cf:bù # 勏
+0x52d0:měng # 勐
+0x52d1:chì # 勑
+0x52d2:lè,lēi # 勒
+0x52d3:kài # 勓
+0x52d4:miǎn # 勔
+0x52d5:dòng # 動
+0x52d6:xù # 勖
+0x52d7:xù # 勗
+0x52d8:kān # 勘
+0x52d9:wù # 務
+0x52da:yì # 勚
+0x52db:xūn # 勛
+0x52dc:wěng,yǎng # 勜
+0x52dd:shèng # 勝
+0x52de:láo # 勞
+0x52df:mù # 募
+0x52e0:lù # 勠
+0x52e1:piāo # 勡
+0x52e2:shì # 勢
+0x52e3:jì # 勣
+0x52e4:qín # 勤
+0x52e5:jiàng # 勥
+0x52e6:jiǎo,chāo # 勦
+0x52e7:quàn # 勧
+0x52e8:xiàng # 勨
+0x52e9:yì # 勩
+0x52ea:qiāo # 勪
+0x52eb:fān # 勫
+0x52ec:juān # 勬
+0x52ed:tóng,dòng # 勭
+0x52ee:jù # 勮
+0x52ef:dān # 勯
+0x52f0:xié # 勰
+0x52f1:mài # 勱
+0x52f2:xūn # 勲
+0x52f3:xūn # 勳
+0x52f4:lǜ # 勴
+0x52f5:lì # 勵
+0x52f6:chè # 勶
+0x52f7:ráng,xiāng # 勷
+0x52f8:quàn # 勸
+0x52f9:bāo # 勹
+0x52fa:sháo # 勺
+0x52fb:yún # 勻
+0x52fc:jiū # 勼
+0x52fd:bào # 勽
+0x52fe:gōu,gòu # 勾
+0x52ff:wù # 勿
+0x5300:yún # 匀
+0x5303:gài # 匃
+0x5304:gài # 匄
+0x5305:bāo # 包
+0x5306:cōng # 匆
+0x5308:xiōng # 匈
+0x5309:pēng # 匉
+0x530a:jū # 匊
+0x530b:táo,yáo # 匋
+0x530c:gé # 匌
+0x530d:pú # 匍
+0x530e:è # 匎
+0x530f:páo # 匏
+0x5310:fú # 匐
+0x5311:gōng # 匑
+0x5312:dá # 匒
+0x5313:jiù # 匓
+0x5314:gōng # 匔
+0x5315:bǐ # 匕
+0x5316:huà,huā # 化
+0x5317:běi,bèi # 北
+0x5318:nǎo # 匘
+0x5319:chí,shi # 匙
+0x531a:fāng # 匚
+0x531b:jiù # 匛
+0x531c:yí # 匜
+0x531d:zā # 匝
+0x531e:jiàng # 匞
+0x531f:kàng # 匟
+0x5320:jiàng # 匠
+0x5321:kuāng # 匡
+0x5322:hū # 匢
+0x5323:xiá # 匣
+0x5324:qū # 匤
+0x5325:fán # 匥
+0x5326:guǐ # 匦
+0x5327:qiè # 匧
+0x5328:zāng,cáng # 匨
+0x5329:kuāng # 匩
+0x532a:fěi # 匪
+0x532b:hū # 匫
+0x532c:yǔ # 匬
+0x532d:guǐ # 匭
+0x532e:kuì,guì # 匮
+0x532f:huì # 匯
+0x5330:dān # 匰
+0x5331:kuì,guì # 匱
+0x5332:lián # 匲
+0x5333:lián # 匳
+0x5334:suǎn # 匴
+0x5335:dú # 匵
+0x5336:jiù # 匶
+0x5337:jué # 匷
+0x5338:xì # 匸
+0x5339:pǐ # 匹
+0x533a:qū,ōu # 区
+0x533b:yī # 医
+0x533c:kē,qià # 匼
+0x533d:yǎn,yàn # 匽
+0x533e:biǎn # 匾
+0x533f:nì # 匿
+0x5340:qū,ōu # 區
+0x5341:shí # 十
+0x5342:xùn # 卂
+0x5343:qiān # 千
+0x5344:niàn # 卄
+0x5345:sà # 卅
+0x5346:zú # 卆
+0x5347:shēng # 升
+0x5348:wǔ # 午
+0x5349:huì # 卉
+0x534a:bàn # 半
+0x534b:shì # 卋
+0x534c:xì # 卌
+0x534d:wàn # 卍
+0x534e:huá,huà,huā # 华
+0x534f:xié # 协
+0x5350:wàn # 卐
+0x5351:bēi # 卑
+0x5352:zú,cù # 卒
+0x5353:zhuó # 卓
+0x5354:xié # 協
+0x5355:dān,shàn,chán # 单
+0x5356:mài # 卖
+0x5357:nán,nā # 南
+0x5358:dān # 単
+0x5359:jí # 卙
+0x535a:bó # 博
+0x535b:shuài,lǜ # 卛
+0x535c:bǔ,bo # 卜
+0x535d:guàn,kuàng # 卝
+0x535e:biàn # 卞
+0x535f:bǔ # 卟
+0x5360:zhān,zhàn # 占
+0x5361:kǎ,qiǎ # 卡
+0x5362:lú # 卢
+0x5363:yǒu # 卣
+0x5364:lǔ # 卤
+0x5365:xī # 卥
+0x5366:guà # 卦
+0x5367:wò # 卧
+0x5368:xiè # 卨
+0x5369:jié # 卩
+0x536a:jié # 卪
+0x536b:wèi # 卫
+0x536c:yǎng,áng # 卬
+0x536d:qióng # 卭
+0x536e:zhī # 卮
+0x536f:mǎo # 卯
+0x5370:yìn # 印
+0x5371:wēi # 危
+0x5372:shào # 卲
+0x5373:jí # 即
+0x5374:què # 却
+0x5375:luǎn # 卵
+0x5376:chǐ # 卶
+0x5377:juàn,juǎn # 卷
+0x5378:xiè # 卸
+0x5379:xù # 卹
+0x537a:jǐn # 卺
+0x537b:què # 卻
+0x537c:wù # 卼
+0x537d:jí # 卽
+0x537e:è # 卾
+0x537f:qīng # 卿
+0x5380:xī # 厀
+0x5382:chǎng,ān,hàn # 厂
+0x5383:wēi,yán # 厃
+0x5384:è # 厄
+0x5385:tīng # 厅
+0x5386:lì # 历
+0x5387:zhé,zhái # 厇
+0x5388:hàn,àn # 厈
+0x5389:lì # 厉
+0x538a:yǎ # 厊
+0x538b:yā,yà # 压
+0x538c:yàn # 厌
+0x538d:shè # 厍
+0x538e:dǐ # 厎
+0x538f:zhǎ,zhǎi # 厏
+0x5390:páng # 厐
+0x5392:qiè # 厒
+0x5393:yá # 厓
+0x5394:zhì,shī # 厔
+0x5395:cè # 厕
+0x5396:máng # 厖
+0x5397:tí # 厗
+0x5398:lí # 厘
+0x5399:shè # 厙
+0x539a:hòu # 厚
+0x539b:tīng # 厛
+0x539c:zuī # 厜
+0x539d:cuò # 厝
+0x539e:fèi # 厞
+0x539f:yuán # 原
+0x53a0:cè # 厠
+0x53a1:yuán # 厡
+0x53a2:xiāng # 厢
+0x53a3:yǎn # 厣
+0x53a4:lì # 厤
+0x53a5:jué # 厥
+0x53a6:shà,xià # 厦
+0x53a7:diān # 厧
+0x53a8:chú # 厨
+0x53a9:jiù # 厩
+0x53aa:jǐn # 厪
+0x53ab:áo # 厫
+0x53ac:guǐ # 厬
+0x53ad:yàn # 厭
+0x53ae:sī # 厮
+0x53af:lì # 厯
+0x53b0:chǎng # 厰
+0x53b1:qiān,lán # 厱
+0x53b2:lì # 厲
+0x53b3:yán # 厳
+0x53b4:yǎn # 厴
+0x53b5:yuán # 厵
+0x53b6:sī,mǒu # 厶
+0x53b7:gōng,hóng # 厷
+0x53b8:lín,miǎo # 厸
+0x53b9:róu,qiú # 厹
+0x53ba:qù # 厺
+0x53bb:qù # 去
+0x53bd:lěi # 厽
+0x53be:dū # 厾
+0x53bf:xiàn,xuán # 县
+0x53c0:zhuān # 叀
+0x53c1:sān # 叁
+0x53c2:cān,shēn,cēn,sān # 参
+0x53c3:cān,shēn,cēn,sān # 參
+0x53c4:cān,shēn,cēn,sān # 叄
+0x53c5:cān,shēn,cēn,sān # 叅
+0x53c6:ài # 叆
+0x53c7:dài # 叇
+0x53c8:yòu # 又
+0x53c9:chā,chá,chǎ # 叉
+0x53ca:jí # 及
+0x53cb:yǒu # 友
+0x53cc:shuāng # 双
+0x53cd:fǎn # 反
+0x53ce:shōu # 収
+0x53cf:guái # 叏
+0x53d0:bá # 叐
+0x53d1:fā,fà # 发
+0x53d2:ruò # 叒
+0x53d3:lì # 叓
+0x53d4:shū # 叔
+0x53d5:zhuó,yǐ,lì,jué # 叕
+0x53d6:qǔ # 取
+0x53d7:shòu # 受
+0x53d8:biàn # 变
+0x53d9:xù # 叙
+0x53da:jiǎ # 叚
+0x53db:pàn # 叛
+0x53dc:sǒu # 叜
+0x53dd:jí # 叝
+0x53de:wèi,yù # 叞
+0x53df:sǒu # 叟
+0x53e0:dié # 叠
+0x53e1:ruì # 叡
+0x53e2:cóng # 叢
+0x53e3:kǒu # 口
+0x53e4:gǔ # 古
+0x53e5:jù,gōu # 句
+0x53e6:lìng # 另
+0x53e7:guǎ # 叧
+0x53e8:tāo,dāo # 叨
+0x53e9:kòu # 叩
+0x53ea:zhī,zhǐ # 只
+0x53eb:jiào # 叫
+0x53ec:zhào,shào # 召
+0x53ed:bā # 叭
+0x53ee:dīng # 叮
+0x53ef:kě,kè # 可
+0x53f0:tái,tāi # 台
+0x53f1:chì # 叱
+0x53f2:shǐ # 史
+0x53f3:yòu # 右
+0x53f4:qiú # 叴
+0x53f5:pǒ # 叵
+0x53f6:yè,xié # 叶
+0x53f7:hào,háo # 号
+0x53f8:sī # 司
+0x53f9:tàn # 叹
+0x53fa:chǐ # 叺
+0x53fb:lè # 叻
+0x53fc:diāo # 叼
+0x53fd:jī # 叽
+0x53ff:hōng,hóng # 叿
+0x5400:miē # 吀
+0x5401:xū,yù # 吁
+0x5402:máng # 吂
+0x5403:chī # 吃
+0x5404:gè,gě # 各
+0x5405:xuān,sòng # 吅
+0x5406:yāo # 吆
+0x5407:zǐ # 吇
+0x5408:hé,gě # 合
+0x5409:jí # 吉
+0x540a:diào # 吊
+0x540b:dòu,cùn # 吋
+0x540c:tóng,tòng # 同
+0x540d:míng # 名
+0x540e:hòu # 后
+0x540f:lì # 吏
+0x5410:tǔ,tù # 吐
+0x5411:xiàng # 向
+0x5412:zhà,zhā # 吒
+0x5413:xià,hè # 吓
+0x5414:yē # 吔
+0x5415:lǚ # 吕
+0x5416:yā,ā # 吖
+0x5417:má,mǎ,ma # 吗
+0x5418:ǒu # 吘
+0x5419:huō # 吙
+0x541a:yī # 吚
+0x541b:jūn # 君
+0x541c:chǒu # 吜
+0x541d:lìn # 吝
+0x541e:tūn # 吞
+0x541f:yín # 吟
+0x5420:fèi # 吠
+0x5421:pǐ,bǐ # 吡
+0x5422:qìn # 吢
+0x5423:qìn # 吣
+0x5424:jiè,gè # 吤
+0x5425:bù # 吥
+0x5426:fǒu,pǐ # 否
+0x5427:bā,ba # 吧
+0x5428:dūn # 吨
+0x5429:fēn # 吩
+0x542a:é,huā # 吪
+0x542b:hán # 含
+0x542c:tīng # 听
+0x542d:háng,kēng # 吭
+0x542e:shǔn # 吮
+0x542f:qǐ # 启
+0x5430:hóng # 吰
+0x5431:zhī,zī # 吱
+0x5432:yǐn,shěn # 吲
+0x5433:wú # 吳
+0x5434:wú # 吴
+0x5435:chǎo,chāo # 吵
+0x5436:nà,nè # 吶
+0x5437:xuè,chuò,jué # 吷
+0x5438:xī # 吸
+0x5439:chuī # 吹
+0x543a:dōu,rú # 吺
+0x543b:wěn # 吻
+0x543c:hǒu # 吼
+0x543d:hǒu,hōng,ōu # 吽
+0x543e:wú,yù # 吾
+0x543f:gào # 吿
+0x5440:yā,ya # 呀
+0x5441:jùn # 呁
+0x5442:lǚ # 呂
+0x5443:è # 呃
+0x5444:gé # 呄
+0x5445:wěn # 呅
+0x5446:dāi # 呆
+0x5447:qǐ # 呇
+0x5448:chéng # 呈
+0x5449:wú # 呉
+0x544a:gào # 告
+0x544b:fū # 呋
+0x544c:jiào # 呌
+0x544d:hōng # 呍
+0x544e:chǐ # 呎
+0x544f:shēng # 呏
+0x5450:nà,nè # 呐
+0x5451:tūn,tiān # 呑
+0x5452:fǔ,ḿ # 呒
+0x5453:yì # 呓
+0x5454:dāi,tǎi # 呔
+0x5455:ǒu,ōu,òu # 呕
+0x5456:lì # 呖
+0x5457:bei,bài # 呗
+0x5458:yuán,yún,yùn # 员
+0x5459:wāi,hé,wǒ,wā,guǎ,guō # 呙
+0x545b:qiāng,qiàng # 呛
+0x545c:wū # 呜
+0x545d:è # 呝
+0x545e:shī # 呞
+0x545f:juǎn # 呟
+0x5460:pěn # 呠
+0x5461:mǐn,wěn # 呡
+0x5462:ne,ní # 呢
+0x5464:líng # 呤
+0x5465:rán # 呥
+0x5466:yōu # 呦
+0x5467:dǐ # 呧
+0x5468:zhōu # 周
+0x5469:shì # 呩
+0x546a:zhòu # 呪
+0x546b:tiè,chè # 呫
+0x546c:xì # 呬
+0x546d:yì # 呭
+0x546e:qì,zhī # 呮
+0x546f:píng # 呯
+0x5470:zǐ,cī # 呰
+0x5471:guā,gū,guǎ # 呱
+0x5472:zī,cī # 呲
+0x5473:wèi # 味
+0x5474:xǔ,hǒu,gòu # 呴
+0x5475:hē,a,kē # 呵
+0x5476:náo # 呶
+0x5477:xiā,gā # 呷
+0x5478:pēi # 呸
+0x5479:yì # 呹
+0x547a:xiāo,háo # 呺
+0x547b:shēn # 呻
+0x547c:hū # 呼
+0x547d:mìng # 命
+0x547e:dá,dàn # 呾
+0x547f:qū # 呿
+0x5480:jǔ,zuǐ # 咀
+0x5482:zā # 咂
+0x5483:tuō # 咃
+0x5484:duō # 咄
+0x5485:pǒu # 咅
+0x5486:páo # 咆
+0x5487:bì # 咇
+0x5488:fú # 咈
+0x5489:yǎng # 咉
+0x548a:hé,hè # 咊
+0x548b:zǎ,zé,zhā # 咋
+0x548c:hé,hè,huó,huò,hú # 和
+0x548d:hāi # 咍
+0x548e:jiù # 咎
+0x548f:yǒng # 咏
+0x5490:fù # 咐
+0x5491:dā # 咑
+0x5492:zhòu # 咒
+0x5493:wǎ # 咓
+0x5494:kǎ # 咔
+0x5495:gū # 咕
+0x5496:kā,gā # 咖
+0x5497:zuo # 咗
+0x5498:bù # 咘
+0x5499:lóng # 咙
+0x549a:dōng # 咚
+0x549b:níng # 咛
+0x549d:sī # 咝
+0x549e:xiàn,xián # 咞
+0x549f:huò # 咟
+0x54a0:qì # 咠
+0x54a1:èr # 咡
+0x54a2:è # 咢
+0x54a3:guāng # 咣
+0x54a4:zhà # 咤
+0x54a5:dié,xī # 咥
+0x54a6:yí # 咦
+0x54a7:liě,liē,lié,lie # 咧
+0x54a8:zī # 咨
+0x54a9:miē # 咩
+0x54aa:mī # 咪
+0x54ab:zhǐ # 咫
+0x54ac:yǎo # 咬
+0x54ad:jī,xī,qià # 咭
+0x54ae:zhòu # 咮
+0x54af:lo,kǎ,luò,gē # 咯
+0x54b0:shù,xún # 咰
+0x54b1:zán,zá,zǎ # 咱
+0x54b2:xiào # 咲
+0x54b3:ké,hāi # 咳
+0x54b4:huī # 咴
+0x54b5:kuā # 咵
+0x54b6:huài,shì # 咶
+0x54b7:táo # 咷
+0x54b8:xián # 咸
+0x54b9:è,àn # 咹
+0x54ba:xuǎn,xuān # 咺
+0x54bb:xiū # 咻
+0x54bc:wāi,hé,wǒ,wā,guǎ,guō # 咼
+0x54bd:yān,yàn,yè # 咽
+0x54be:lǎo # 咾
+0x54bf:yī # 咿
+0x54c0:āi # 哀
+0x54c1:pǐn # 品
+0x54c2:shěn # 哂
+0x54c3:tóng # 哃
+0x54c4:hōng,hǒng,hòng # 哄
+0x54c5:xiōng # 哅
+0x54c6:duō # 哆
+0x54c7:wā,wa # 哇
+0x54c8:hā,hǎ,hà # 哈
+0x54c9:zāi # 哉
+0x54ca:yòu # 哊
+0x54cb:diè,dì # 哋
+0x54cc:pài # 哌
+0x54cd:xiǎng # 响
+0x54ce:āi # 哎
+0x54cf:gén,hěn # 哏
+0x54d0:kuāng # 哐
+0x54d1:yǎ,yā # 哑
+0x54d2:dā # 哒
+0x54d3:xiāo # 哓
+0x54d4:bì # 哔
+0x54d5:yuě,huì # 哕
+0x54d7:huá,huā # 哗
+0x54d9:kuài # 哙
+0x54da:duǒ # 哚
+0x54dc:jì,jiē,zhāi # 哜
+0x54dd:nóng # 哝
+0x54de:mōu # 哞
+0x54df:yō,yo # 哟
+0x54e0:hào # 哠
+0x54e1:yuán,yún,yùn # 員
+0x54e2:lòng # 哢
+0x54e3:pǒu # 哣
+0x54e4:máng # 哤
+0x54e5:gē # 哥
+0x54e6:ó,ò,é # 哦
+0x54e7:chī # 哧
+0x54e8:shào # 哨
+0x54e9:li,lǐ,lī # 哩
+0x54ea:nǎ,něi,na,né # 哪
+0x54eb:zú # 哫
+0x54ec:hè # 哬
+0x54ed:kū # 哭
+0x54ee:xiào # 哮
+0x54ef:xiàn # 哯
+0x54f0:láo # 哰
+0x54f1:pò,bā,bō # 哱
+0x54f2:zhé # 哲
+0x54f3:zhā # 哳
+0x54f4:liàng,láng # 哴
+0x54f5:bā # 哵
+0x54f6:miē # 哶
+0x54f7:liè,lǜ # 哷
+0x54f8:suī # 哸
+0x54f9:fú # 哹
+0x54fa:bǔ # 哺
+0x54fb:hān # 哻
+0x54fc:hēng,hng # 哼
+0x54fd:gěng # 哽
+0x54fe:chuò,yuè # 哾
+0x54ff:gě,jiā # 哿
+0x5500:yòu # 唀
+0x5501:yàn # 唁
+0x5502:gū # 唂
+0x5503:gū # 唃
+0x5504:bei,bài # 唄
+0x5505:hán,hàn # 唅
+0x5506:suō # 唆
+0x5507:chún # 唇
+0x5508:yì # 唈
+0x5509:āi,ài # 唉
+0x550a:jiá,qiǎn # 唊
+0x550b:tǔ,tù # 唋
+0x550c:dàn,xián,yán # 唌
+0x550d:wǎn # 唍
+0x550e:lì # 唎
+0x550f:xī # 唏
+0x5510:táng # 唐
+0x5511:zuò # 唑
+0x5512:qiú # 唒
+0x5513:chē # 唓
+0x5514:wù,wú,ńg,ń # 唔
+0x5515:zào # 唕
+0x5516:yǎ # 唖
+0x5517:dōu # 唗
+0x5518:qǐ # 唘
+0x5519:dí # 唙
+0x551a:qìn # 唚
+0x551b:mà # 唛
+0x551d:gòng,hǒng,gǒng # 唝
+0x551e:dóu # 唞
+0x5520:lào,láo # 唠
+0x5521:liǎng # 唡
+0x5522:suǒ # 唢
+0x5523:zào # 唣
+0x5524:huàn # 唤
+0x5526:shā # 唦
+0x5527:jī # 唧
+0x5528:zǔ # 唨
+0x5529:wō,wěi # 唩
+0x552a:fěng # 唪
+0x552b:jìn,yín # 唫
+0x552c:hǔ,xià # 唬
+0x552d:qì # 唭
+0x552e:shòu # 售
+0x552f:wéi # 唯
+0x5530:shuā # 唰
+0x5531:chàng # 唱
+0x5532:ér,wā # 唲
+0x5533:lì # 唳
+0x5534:qiàng # 唴
+0x5535:ǎn # 唵
+0x5536:jiè,zé,jí # 唶
+0x5537:yō # 唷
+0x5538:niàn # 唸
+0x5539:yū # 唹
+0x553a:tiǎn # 唺
+0x553b:lài # 唻
+0x553c:shà # 唼
+0x553d:xī # 唽
+0x553e:tuò # 唾
+0x553f:hū # 唿
+0x5540:ái # 啀
+0x5541:zhōu,zhāo,tiào # 啁
+0x5542:gòu # 啂
+0x5543:kěn # 啃
+0x5544:zhuó # 啄
+0x5545:zhuó,zhào # 啅
+0x5546:shāng # 商
+0x5547:dí # 啇
+0x5548:hèng # 啈
+0x5549:lán,lín # 啉
+0x554a:ā,á,ǎ,à,a # 啊
+0x554b:cǎi # 啋
+0x554c:qiāng # 啌
+0x554d:zhūn,tūn,xiāng,duǐ # 啍
+0x554e:wǔ # 啎
+0x554f:wèn # 問
+0x5550:cuì,qi # 啐
+0x5551:shà,jié,dié,tì # 啑
+0x5552:gǔ # 啒
+0x5553:qǐ # 啓
+0x5554:qǐ # 啔
+0x5555:táo # 啕
+0x5556:dàn # 啖
+0x5557:dàn # 啗
+0x5558:yuē,wā # 啘
+0x5559:zǐ,cǐ # 啙
+0x555a:bǐ,tú # 啚
+0x555b:cuì # 啛
+0x555c:chuò,chuài # 啜
+0x555d:hé # 啝
+0x555e:yǎ,yā # 啞
+0x555f:qǐ # 啟
+0x5560:zhé # 啠
+0x5561:fēi # 啡
+0x5562:liǎng # 啢
+0x5563:xián # 啣
+0x5564:pí # 啤
+0x5565:shá # 啥
+0x5566:lā,la # 啦
+0x5567:zé # 啧
+0x5568:qíng,yīng # 啨
+0x5569:guà # 啩
+0x556a:pā # 啪
+0x556b:zhě,shì # 啫
+0x556c:sè # 啬
+0x556d:zhuàn # 啭
+0x556e:niè # 啮
+0x556f:guō # 啯
+0x5570:luō,luó,luo # 啰
+0x5571:yán # 啱
+0x5572:dī # 啲
+0x5573:quán # 啳
+0x5574:tān,chǎn,tuō # 啴
+0x5575:bo # 啵
+0x5576:dìng # 啶
+0x5577:lāng # 啷
+0x5578:xiào # 啸
+0x557a:táng # 啺
+0x557b:chì # 啻
+0x557c:tí # 啼
+0x557d:ān,án # 啽
+0x557e:jiū # 啾
+0x557f:dàn # 啿
+0x5580:kā # 喀
+0x5581:yóng,yú # 喁
+0x5582:wèi # 喂
+0x5583:nán # 喃
+0x5584:shàn # 善
+0x5585:yù # 喅
+0x5586:zhé # 喆
+0x5587:lǎ # 喇
+0x5588:jiē # 喈
+0x5589:hóu # 喉
+0x558a:hǎn # 喊
+0x558b:dié,zhá # 喋
+0x558c:zhōu # 喌
+0x558d:chái # 喍
+0x558e:wāi # 喎
+0x558f:nuò,rě # 喏
+0x5590:huò,guó,xù # 喐
+0x5591:yīn # 喑
+0x5592:zán,zá,zǎ # 喒
+0x5593:yāo # 喓
+0x5594:ō,wō # 喔
+0x5595:miǎn # 喕
+0x5596:hú # 喖
+0x5597:yǔn # 喗
+0x5598:chuǎn # 喘
+0x5599:huì # 喙
+0x559a:huàn # 喚
+0x559b:huàn,yuán,xuǎn,hé # 喛
+0x559c:xǐ # 喜
+0x559d:hē,hè,yè # 喝
+0x559e:jī # 喞
+0x559f:kuì # 喟
+0x55a0:zhǒng,chuáng # 喠
+0x55a1:wéi,wèi # 喡
+0x55a2:shà # 喢
+0x55a3:xǔ # 喣
+0x55a4:huáng # 喤
+0x55a5:duó,zhà # 喥
+0x55a6:yán # 喦
+0x55a7:xuān # 喧
+0x55a8:liàng # 喨
+0x55a9:yù # 喩
+0x55aa:sāng,sàng # 喪
+0x55ab:chī # 喫
+0x55ac:qiáo,jiāo # 喬
+0x55ad:yàn # 喭
+0x55ae:dān,shàn,chán # 單
+0x55af:pèn,bēn # 喯
+0x55b0:cān,sūn,qī # 喰
+0x55b1:lí # 喱
+0x55b2:yō,yo # 喲
+0x55b3:zhā,chā # 喳
+0x55b4:wēi # 喴
+0x55b5:miāo # 喵
+0x55b6:yíng # 営
+0x55b7:pēn,pèn # 喷
+0x55b9:kuí # 喹
+0x55ba:xí # 喺
+0x55bb:yù # 喻
+0x55bc:jiē # 喼
+0x55bd:lóu,lou # 喽
+0x55be:kù # 喾
+0x55bf:zào,qiāo # 喿
+0x55c0:hù # 嗀
+0x55c1:tí # 嗁
+0x55c2:yáo # 嗂
+0x55c3:hè,xiāo,xiào,hù # 嗃
+0x55c4:shà,á # 嗄
+0x55c5:xiù # 嗅
+0x55c6:qiāng,qiàng # 嗆
+0x55c7:sè # 嗇
+0x55c8:yōng # 嗈
+0x55c9:sù # 嗉
+0x55ca:gòng,hǒng,gǒng # 嗊
+0x55cb:xié # 嗋
+0x55cc:yì,ài # 嗌
+0x55cd:suō # 嗍
+0x55ce:má,mǎ,ma # 嗎
+0x55cf:chā # 嗏
+0x55d0:hài # 嗐
+0x55d1:kē,kè # 嗑
+0x55d2:tà,dā # 嗒
+0x55d3:sǎng # 嗓
+0x55d4:chēn # 嗔
+0x55d5:rù # 嗕
+0x55d6:sōu # 嗖
+0x55d7:wā,gǔ # 嗗
+0x55d8:jī # 嗘
+0x55d9:bēng,pǎng # 嗙
+0x55da:wū # 嗚
+0x55db:xián,qiàn,qiè # 嗛
+0x55dc:shì # 嗜
+0x55dd:gé # 嗝
+0x55de:zī # 嗞
+0x55df:jiē # 嗟
+0x55e0:lào # 嗠
+0x55e1:wēng # 嗡
+0x55e2:wà # 嗢
+0x55e3:sì # 嗣
+0x55e4:chī # 嗤
+0x55e5:háo # 嗥
+0x55e6:suō # 嗦
+0x55e8:hāi,hēi # 嗨
+0x55e9:suǒ # 嗩
+0x55ea:qín # 嗪
+0x55eb:niè # 嗫
+0x55ec:hē # 嗬
+0x55ee:sǎi # 嗮
+0x55f0:gě # 嗰
+0x55f1:ná # 嗱
+0x55f2:diǎ # 嗲
+0x55f3:ǎi,ài,āi # 嗳
+0x55f5:tōng # 嗵
+0x55f6:bì # 嗶
+0x55f7:áo # 嗷
+0x55f8:áo # 嗸
+0x55f9:lián # 嗹
+0x55fa:zuī,suī # 嗺
+0x55fb:zhē,zhè,zhù,zhe # 嗻
+0x55fc:mò # 嗼
+0x55fd:sòu # 嗽
+0x55fe:sǒu # 嗾
+0x55ff:tǎn # 嗿
+0x5600:dí # 嘀
+0x5601:qī # 嘁
+0x5602:jiào # 嘂
+0x5603:chōng # 嘃
+0x5604:jiào,dǎo # 嘄
+0x5605:kǎi,gě # 嘅
+0x5606:tàn # 嘆
+0x5607:shān,càn # 嘇
+0x5608:cáo # 嘈
+0x5609:jiā # 嘉
+0x560a:ái # 嘊
+0x560b:xiào # 嘋
+0x560c:piāo # 嘌
+0x560d:lóu,lou # 嘍
+0x560e:gā,gá,gǎ # 嘎
+0x560f:gǔ,jiǎ # 嘏
+0x5610:xiāo,jiāo # 嘐
+0x5611:hū # 嘑
+0x5612:huì # 嘒
+0x5613:guō # 嘓
+0x5614:ǒu,ōu,òu # 嘔
+0x5615:xiān # 嘕
+0x5616:zé # 嘖
+0x5617:cháng # 嘗
+0x5618:xū,shī # 嘘
+0x5619:pó # 嘙
+0x561a:dē,dēi # 嘚
+0x561b:má,ma # 嘛
+0x561c:mà # 嘜
+0x561d:hú # 嘝
+0x561e:lei,lē # 嘞
+0x561f:dū # 嘟
+0x5620:gā,gá,gǎ # 嘠
+0x5621:tāng # 嘡
+0x5622:yě # 嘢
+0x5623:bēng # 嘣
+0x5624:yīng # 嘤
+0x5626:jiào # 嘦
+0x5627:mì # 嘧
+0x5628:xiào # 嘨
+0x5629:huá,huā # 嘩
+0x562a:mǎi # 嘪
+0x562b:rán # 嘫
+0x562c:zuō,chuài # 嘬
+0x562d:pēng # 嘭
+0x562e:lào,láo # 嘮
+0x562f:xiào # 嘯
+0x5630:jī # 嘰
+0x5631:zhǔ # 嘱
+0x5632:cháo,zhāo # 嘲
+0x5633:kuì # 嘳
+0x5634:zuǐ # 嘴
+0x5635:xiāo # 嘵
+0x5636:sī # 嘶
+0x5637:háo # 嘷
+0x5638:fǔ,ḿ # 嘸
+0x5639:liáo # 嘹
+0x563a:qiáo,qiào # 嘺
+0x563b:xī # 嘻
+0x563c:chù,xù,shòu # 嘼
+0x563d:tān,chǎn # 嘽
+0x563e:dàn,tán # 嘾
+0x563f:hēi,mò # 嘿
+0x5640:xùn # 噀
+0x5641:ě # 噁
+0x5642:zūn # 噂
+0x5643:fān,bo # 噃
+0x5644:chī # 噄
+0x5645:huī # 噅
+0x5646:zǎn # 噆
+0x5647:chuáng # 噇
+0x5648:cù,zā,hé # 噈
+0x5649:dàn # 噉
+0x564a:jué # 噊
+0x564b:tūn,kuò # 噋
+0x564c:cēng,chēng # 噌
+0x564d:jiào # 噍
+0x564e:yē # 噎
+0x564f:xī # 噏
+0x5650:qì # 噐
+0x5651:háo # 噑
+0x5652:lián # 噒
+0x5653:xū,shī # 噓
+0x5654:dēng # 噔
+0x5655:huī # 噕
+0x5656:yín # 噖
+0x5657:pū # 噗
+0x5658:juē # 噘
+0x5659:qín # 噙
+0x565a:xún # 噚
+0x565b:niè # 噛
+0x565c:lū # 噜
+0x565d:sī # 噝
+0x565e:yǎn # 噞
+0x565f:yīng # 噟
+0x5660:dā # 噠
+0x5661:zhān,dān # 噡
+0x5662:ō # 噢
+0x5663:zhòu,zhuó # 噣
+0x5664:jìn # 噤
+0x5665:nóng # 噥
+0x5666:yuě,huì # 噦
+0x5667:xiè # 噧
+0x5668:qì # 器
+0x5669:è # 噩
+0x566a:zào # 噪
+0x566b:yī # 噫
+0x566c:shì # 噬
+0x566d:jiào,qiào,chī # 噭
+0x566e:yuàn # 噮
+0x566f:ǎi,ài,āi # 噯
+0x5670:yōng,yǒng # 噰
+0x5671:jué,xué # 噱
+0x5672:kuài # 噲
+0x5673:yǔ # 噳
+0x5674:pēn,pèn # 噴
+0x5675:dào # 噵
+0x5676:gá # 噶
+0x5677:xīn,hěn,hèn # 噷
+0x5678:dūn # 噸
+0x5679:dāng # 噹
+0x567b:sāi # 噻
+0x567c:pī # 噼
+0x567d:pǐ # 噽
+0x567e:yīn # 噾
+0x567f:zuǐ # 噿
+0x5680:níng # 嚀
+0x5681:dí # 嚁
+0x5682:làn # 嚂
+0x5683:tà # 嚃
+0x5684:huò,ǒ # 嚄
+0x5685:rú # 嚅
+0x5686:hāo # 嚆
+0x5687:hè,xià # 嚇
+0x5688:yàn # 嚈
+0x5689:duō # 嚉
+0x568a:xiù,pì # 嚊
+0x568b:zhōu,chóu # 嚋
+0x568c:jì,jiē,zhāi # 嚌
+0x568d:jìn # 嚍
+0x568e:háo # 嚎
+0x568f:tì # 嚏
+0x5690:cháng # 嚐
+0x5693:cā,chā # 嚓
+0x5694:tì # 嚔
+0x5695:lū # 嚕
+0x5696:huì # 嚖
+0x5697:bó,pào,bào # 嚗
+0x5698:yōu # 嚘
+0x5699:niè # 嚙
+0x569a:yín # 嚚
+0x569b:hù # 嚛
+0x569c:mèi,me,mò # 嚜
+0x569d:hōng # 嚝
+0x569e:zhé # 嚞
+0x569f:lí # 嚟
+0x56a0:liú # 嚠
+0x56a2:náng # 嚢
+0x56a3:xiāo,áo # 嚣
+0x56a4:mō # 嚤
+0x56a5:yàn # 嚥
+0x56a6:lì # 嚦
+0x56a7:lú # 嚧
+0x56a8:lóng # 嚨
+0x56a9:pó # 嚩
+0x56aa:dàn # 嚪
+0x56ab:chèn # 嚫
+0x56ac:pín # 嚬
+0x56ad:pǐ # 嚭
+0x56ae:xiàng # 嚮
+0x56af:huò # 嚯
+0x56b0:mè # 嚰
+0x56b1:xī # 嚱
+0x56b2:duǒ # 嚲
+0x56b3:kù # 嚳
+0x56b4:yán # 嚴
+0x56b5:chán # 嚵
+0x56b6:yīng # 嚶
+0x56b7:rǎng,rāng # 嚷
+0x56b8:diǎn,dím # 嚸
+0x56b9:lá # 嚹
+0x56ba:tà # 嚺
+0x56bb:xiāo # 嚻
+0x56bc:jiáo,jué,jiào # 嚼
+0x56bd:chuò # 嚽
+0x56be:huàn,huān # 嚾
+0x56bf:huò # 嚿
+0x56c0:zhuàn # 囀
+0x56c1:niè # 囁
+0x56c2:xiāo # 囂
+0x56c3:zá,cà # 囃
+0x56c4:lí # 囄
+0x56c5:chǎn # 囅
+0x56c6:chài # 囆
+0x56c7:lì # 囇
+0x56c8:yì # 囈
+0x56c9:luō,luó,luo # 囉
+0x56ca:náng,nāng # 囊
+0x56cb:zá,zàn,cān # 囋
+0x56cc:sū # 囌
+0x56cd:xǐ # 囍
+0x56cf:jiān # 囏
+0x56d0:yàn,zá,niè # 囐
+0x56d1:zhǔ # 囑
+0x56d2:lán # 囒
+0x56d3:niè # 囓
+0x56d4:nāng # 囔
+0x56d7:wéi,guó # 囗
+0x56d8:huí # 囘
+0x56d9:yīn # 囙
+0x56da:qiú # 囚
+0x56db:sì # 四
+0x56dc:nín # 囜
+0x56dd:jiǎn,nān # 囝
+0x56de:huí # 回
+0x56df:xìn # 囟
+0x56e0:yīn # 因
+0x56e1:nān # 囡
+0x56e2:tuán # 团
+0x56e3:tuán # 団
+0x56e4:dùn,tún # 囤
+0x56e5:kàng # 囥
+0x56e6:yuān # 囦
+0x56e7:jiǒng # 囧
+0x56e8:piān # 囨
+0x56e9:yún # 囩
+0x56ea:cōng # 囪
+0x56eb:hú # 囫
+0x56ec:huí # 囬
+0x56ed:yuán # 园
+0x56ee:é # 囮
+0x56ef:guó # 囯
+0x56f0:kùn # 困
+0x56f1:cōng # 囱
+0x56f2:wéi,tōng # 囲
+0x56f3:tú # 図
+0x56f4:wéi # 围
+0x56f5:lún # 囵
+0x56f6:guó # 囶
+0x56f7:qūn # 囷
+0x56f8:rì # 囸
+0x56f9:líng # 囹
+0x56fa:gù # 固
+0x56fb:guó # 囻
+0x56fc:tāi # 囼
+0x56fd:guó # 国
+0x56fe:tú # 图
+0x56ff:yòu # 囿
+0x5700:guó # 圀
+0x5701:yín # 圁
+0x5702:hùn # 圂
+0x5703:pǔ # 圃
+0x5704:yǔ # 圄
+0x5705:hán # 圅
+0x5706:yuán # 圆
+0x5707:lún # 圇
+0x5708:quān,juàn,juān # 圈
+0x5709:yǔ # 圉
+0x570a:qīng # 圊
+0x570b:guó # 國
+0x570c:chuán,chuí # 圌
+0x570d:wéi # 圍
+0x570e:yuán # 圎
+0x570f:quān,juàn,juān # 圏
+0x5710:kū # 圐
+0x5711:pǔ # 圑
+0x5712:yuán # 園
+0x5713:yuán # 圓
+0x5714:yà # 圔
+0x5716:tú # 圖
+0x5717:tú # 圗
+0x5718:tuán # 團
+0x5719:lüè # 圙
+0x571a:huì # 圚
+0x571b:yì # 圛
+0x571c:huán,yuán # 圜
+0x571d:luán # 圝
+0x571e:luán # 圞
+0x571f:tǔ # 土
+0x5720:yà # 圠
+0x5721:tǔ # 圡
+0x5722:tǐng # 圢
+0x5723:shèng # 圣
+0x5724:pú # 圤
+0x5725:lù # 圥
+0x5727:yā # 圧
+0x5728:zài # 在
+0x5729:wéi,xū # 圩
+0x572a:gē # 圪
+0x572b:yù,zhūn # 圫
+0x572c:wū # 圬
+0x572d:guī # 圭
+0x572e:pǐ # 圮
+0x572f:yí # 圯
+0x5730:dì,de # 地
+0x5731:qiān,sú # 圱
+0x5732:qiān # 圲
+0x5733:zhèn # 圳
+0x5734:zhuó # 圴
+0x5735:dàng # 圵
+0x5736:qià # 圶
+0x5739:kuàng # 圹
+0x573a:cháng,chǎng # 场
+0x573b:qí,yín # 圻
+0x573c:niè # 圼
+0x573d:mò # 圽
+0x573e:jī # 圾
+0x573f:jiá # 圿
+0x5740:zhǐ # 址
+0x5741:zhǐ,zhì # 坁
+0x5742:bǎn # 坂
+0x5743:xūn # 坃
+0x5744:yì # 坄
+0x5745:qǐn # 坅
+0x5746:méi,fén # 坆
+0x5747:jūn # 均
+0x5748:rǒng,kēng # 坈
+0x5749:tún,dùn # 坉
+0x574a:fāng,fáng # 坊
+0x574b:bèn,fèn # 坋
+0x574c:bèn # 坌
+0x574d:tān # 坍
+0x574e:kǎn # 坎
+0x574f:huài,pēi,pī,péi # 坏
+0x5750:zuò # 坐
+0x5751:kēng # 坑
+0x5752:bì # 坒
+0x5753:jǐng # 坓
+0x5754:dì,làn # 坔
+0x5755:jīng # 坕
+0x5756:jì # 坖
+0x5757:kuài # 块
+0x5758:dǐ # 坘
+0x5759:jīng # 坙
+0x575a:jiān # 坚
+0x575b:tán # 坛
+0x575c:lì # 坜
+0x575d:bà # 坝
+0x575e:wù # 坞
+0x575f:fén # 坟
+0x5760:zhuì # 坠
+0x5761:pō # 坡
+0x5762:pǎn,bàn # 坢
+0x5763:táng # 坣
+0x5764:kūn # 坤
+0x5765:qū # 坥
+0x5766:tǎn # 坦
+0x5767:zhǐ # 坧
+0x5768:tuó # 坨
+0x5769:gān # 坩
+0x576a:píng # 坪
+0x576b:diàn # 坫
+0x576c:guà # 坬
+0x576d:ní # 坭
+0x576e:tái # 坮
+0x576f:pī # 坯
+0x5770:jiōng # 坰
+0x5771:yǎng # 坱
+0x5772:fó # 坲
+0x5773:ào # 坳
+0x5774:lù # 坴
+0x5775:qiū # 坵
+0x5776:mù,mǔ # 坶
+0x5777:kē,kě # 坷
+0x5778:gòu # 坸
+0x5779:xuè # 坹
+0x577a:fá # 坺
+0x577b:dǐ,chí # 坻
+0x577c:chè # 坼
+0x577d:líng # 坽
+0x577e:zhù # 坾
+0x577f:fù # 坿
+0x5780:hū # 垀
+0x5781:zhì # 垁
+0x5782:chuí # 垂
+0x5783:lā # 垃
+0x5784:lǒng # 垄
+0x5785:lǒng # 垅
+0x5786:lú # 垆
+0x5787:ào # 垇
+0x5789:páo # 垉
+0x578b:xíng # 型
+0x578c:dòng,tóng # 垌
+0x578d:jì # 垍
+0x578e:hè # 垎
+0x578f:lǜ # 垏
+0x5790:cí # 垐
+0x5791:chǐ # 垑
+0x5792:lěi # 垒
+0x5793:gāi # 垓
+0x5794:yīn # 垔
+0x5795:hòu # 垕
+0x5796:duī # 垖
+0x5797:zhào # 垗
+0x5798:fú # 垘
+0x5799:guāng # 垙
+0x579a:yáo # 垚
+0x579b:duǒ,duò # 垛
+0x579c:duǒ,duò # 垜
+0x579d:guǐ # 垝
+0x579e:chá # 垞
+0x579f:yáng # 垟
+0x57a0:yín # 垠
+0x57a1:fá # 垡
+0x57a2:gòu # 垢
+0x57a3:yuán # 垣
+0x57a4:dié # 垤
+0x57a5:xié # 垥
+0x57a6:kěn # 垦
+0x57a7:shǎng # 垧
+0x57a8:shǒu # 垨
+0x57a9:è # 垩
+0x57ab:diàn # 垫
+0x57ac:hóng # 垬
+0x57ad:yā # 垭
+0x57ae:kuǎ # 垮
+0x57b1:dàng # 垱
+0x57b2:kǎi # 垲
+0x57b4:nǎo # 垴
+0x57b5:ǎn # 垵
+0x57b6:xīng # 垶
+0x57b7:xiàn # 垷
+0x57b8:yuàn,huán # 垸
+0x57b9:bāng # 垹
+0x57ba:póu,fú # 垺
+0x57bb:bà # 垻
+0x57bc:yì # 垼
+0x57bd:yìn # 垽
+0x57be:hàn # 垾
+0x57bf:xù # 垿
+0x57c0:chuí # 埀
+0x57c1:cén # 埁
+0x57c2:gěng # 埂
+0x57c3:āi # 埃
+0x57c4:běng,fēng # 埄
+0x57c5:dì,fáng # 埅
+0x57c6:què,jué # 埆
+0x57c7:yǒng # 埇
+0x57c8:jùn # 埈
+0x57c9:xiá,jiā # 埉
+0x57ca:dì # 埊
+0x57cb:mái,mán # 埋
+0x57cc:làng # 埌
+0x57cd:juǎn # 埍
+0x57ce:chéng # 城
+0x57cf:yán,shān # 埏
+0x57d0:qín,jīn # 埐
+0x57d1:zhé # 埑
+0x57d2:liè # 埒
+0x57d3:liè # 埓
+0x57d4:pǔ,bù # 埔
+0x57d5:chéng # 埕
+0x57d7:bù # 埗
+0x57d8:shí # 埘
+0x57d9:xūn # 埙
+0x57da:guō # 埚
+0x57db:jiōng # 埛
+0x57dc:yě # 埜
+0x57dd:niàn # 埝
+0x57de:dī # 埞
+0x57df:yù # 域
+0x57e0:bù # 埠
+0x57e1:yà # 埡
+0x57e2:quán # 埢
+0x57e3:suì,sù # 埣
+0x57e4:pí,pì # 埤
+0x57e5:qīng,zhēng # 埥
+0x57e6:wǎn,wān # 埦
+0x57e7:jù # 埧
+0x57e8:lǔn # 埨
+0x57e9:zhēng,chéng # 埩
+0x57ea:kōng # 埪
+0x57eb:chǒng,shǎng # 埫
+0x57ec:dōng # 埬
+0x57ed:dài # 埭
+0x57ee:tán,tàn # 埮
+0x57ef:ǎn # 埯
+0x57f0:cǎi,cài # 埰
+0x57f1:chù,tòu # 埱
+0x57f2:běng # 埲
+0x57f3:xiàn,kǎn # 埳
+0x57f4:zhí # 埴
+0x57f5:duǒ # 埵
+0x57f6:yì,shì # 埶
+0x57f7:zhí # 執
+0x57f8:yì # 埸
+0x57f9:péi # 培
+0x57fa:jī # 基
+0x57fb:zhǔn # 埻
+0x57fc:qí # 埼
+0x57fd:sào,sǎo # 埽
+0x57fe:jù # 埾
+0x57ff:ní # 埿
+0x5800:kū # 堀
+0x5801:kè # 堁
+0x5802:táng # 堂
+0x5803:kūn # 堃
+0x5804:nì # 堄
+0x5805:jiān # 堅
+0x5806:duī # 堆
+0x5807:jīn # 堇
+0x5808:gāng # 堈
+0x5809:yù # 堉
+0x580a:è # 堊
+0x580b:péng,bèng # 堋
+0x580c:gù # 堌
+0x580d:tù # 堍
+0x580e:lèng # 堎
+0x5810:yá # 堐
+0x5811:qiàn,zàn,jiàn # 堑
+0x5813:àn # 堓
+0x5815:duò,huī # 堕
+0x5816:nǎo # 堖
+0x5817:tū # 堗
+0x5818:chéng # 堘
+0x5819:yīn # 堙
+0x581a:huán # 堚
+0x581b:bì # 堛
+0x581c:liàn # 堜
+0x581d:guō # 堝
+0x581e:dié # 堞
+0x581f:zhuàn # 堟
+0x5820:hòu # 堠
+0x5821:bǎo,bǔ,pù # 堡
+0x5822:bǎo # 堢
+0x5823:yú # 堣
+0x5824:dī # 堤
+0x5825:máo,móu,wǔ # 堥
+0x5826:jiē # 堦
+0x5827:ruán # 堧
+0x5828:è,ài,yè # 堨
+0x5829:gèng # 堩
+0x582a:kān # 堪
+0x582b:zōng # 堫
+0x582c:yú # 堬
+0x582d:huáng # 堭
+0x582e:è # 堮
+0x582f:yáo # 堯
+0x5830:yàn # 堰
+0x5831:bào # 報
+0x5832:jí # 堲
+0x5833:méi # 堳
+0x5834:cháng,chǎng # 場
+0x5835:dǔ # 堵
+0x5836:tuó # 堶
+0x5837:yìn # 堷
+0x5838:féng # 堸
+0x5839:zhòng # 堹
+0x583a:jiè # 堺
+0x583b:jīn # 堻
+0x583c:fēng # 堼
+0x583d:gāng # 堽
+0x583e:chuǎn,chūn # 堾
+0x583f:jiǎn # 堿
+0x5842:jiǎng # 塂
+0x5843:huāng # 塃
+0x5844:léng # 塄
+0x5845:duàn # 塅
+0x5847:xuān # 塇
+0x5848:jì,xì # 塈
+0x5849:jí # 塉
+0x584a:kuài # 塊
+0x584b:yíng # 塋
+0x584c:tā # 塌
+0x584d:chéng # 塍
+0x584e:yǒng # 塎
+0x584f:kǎi # 塏
+0x5850:sù # 塐
+0x5851:sù # 塑
+0x5852:shí # 塒
+0x5853:mì # 塓
+0x5854:tǎ # 塔
+0x5855:wěng # 塕
+0x5856:chéng # 塖
+0x5857:tú # 塗
+0x5858:táng # 塘
+0x5859:què # 塙
+0x585a:zhǒng # 塚
+0x585b:lì # 塛
+0x585c:péng # 塜
+0x585d:bàng # 塝
+0x585e:sāi,sài,sè # 塞
+0x585f:zàng # 塟
+0x5860:duī # 塠
+0x5861:tián # 塡
+0x5862:wù # 塢
+0x5863:zhèng # 塣
+0x5864:xūn # 塤
+0x5865:gé # 塥
+0x5866:zhèn # 塦
+0x5867:ài # 塧
+0x5868:gōng # 塨
+0x5869:yán # 塩
+0x586a:xiàn # 塪
+0x586b:tián,zhèn # 填
+0x586c:yuán # 塬
+0x586d:wēn # 塭
+0x586e:xiè # 塮
+0x586f:liù # 塯
+0x5871:lǎng # 塱
+0x5872:cháng,chǎng # 塲
+0x5873:péng # 塳
+0x5874:bèng # 塴
+0x5875:chén # 塵
+0x5876:lù # 塶
+0x5877:lǔ # 塷
+0x5878:ōu,qiū # 塸
+0x5879:qiàn,zàn,jiàn # 塹
+0x587a:méi # 塺
+0x587b:mò # 塻
+0x587c:zhuān,tuán # 塼
+0x587d:shuǎng # 塽
+0x587e:shú # 塾
+0x587f:lǒu # 塿
+0x5880:chí # 墀
+0x5881:màn # 墁
+0x5882:biāo # 墂
+0x5883:jìng # 境
+0x5884:qī # 墄
+0x5885:shù # 墅
+0x5886:zhì,dì # 墆
+0x5887:zhàng # 墇
+0x5888:kàn # 墈
+0x5889:yōng # 墉
+0x588a:diàn # 墊
+0x588b:chěn # 墋
+0x588c:zhǐ,zhuó # 墌
+0x588d:xì # 墍
+0x588e:guō # 墎
+0x588f:qiǎng # 墏
+0x5890:jìn # 墐
+0x5891:dì # 墑
+0x5892:shāng # 墒
+0x5893:mù # 墓
+0x5894:cuī # 墔
+0x5895:yàn # 墕
+0x5896:tǎ # 墖
+0x5897:zēng # 増
+0x5898:qián # 墘
+0x5899:qiáng # 墙
+0x589a:liáng # 墚
+0x589c:zhuì # 墜
+0x589d:qiāo # 墝
+0x589e:zēng # 增
+0x589f:xū # 墟
+0x58a0:shàn # 墠
+0x58a1:shàn # 墡
+0x58a2:fá # 墢
+0x58a3:pú # 墣
+0x58a4:kuài,tuí # 墤
+0x58a5:tuǎn,dǒng # 墥
+0x58a6:fán # 墦
+0x58a7:qiáo,què # 墧
+0x58a8:mò # 墨
+0x58a9:dūn # 墩
+0x58aa:dūn # 墪
+0x58ab:zūn,dūn # 墫
+0x58ac:dì # 墬
+0x58ad:shèng # 墭
+0x58ae:duò,huī # 墮
+0x58af:duò # 墯
+0x58b0:tán # 墰
+0x58b1:dèng # 墱
+0x58b2:wú # 墲
+0x58b3:fén # 墳
+0x58b4:huáng # 墴
+0x58b5:tán # 墵
+0x58b6:dā # 墶
+0x58b7:yè # 墷
+0x58ba:ào # 墺
+0x58bb:qiáng # 墻
+0x58bc:jī # 墼
+0x58bd:qiāo,áo # 墽
+0x58be:kěn # 墾
+0x58bf:yì,tú # 墿
+0x58c0:pí # 壀
+0x58c1:bì # 壁
+0x58c2:diàn # 壂
+0x58c3:jiāng # 壃
+0x58c4:yě # 壄
+0x58c5:yōng # 壅
+0x58c6:xué,bó,jué # 壆
+0x58c7:tán # 壇
+0x58c8:lǎn # 壈
+0x58c9:jù # 壉
+0x58ca:huài # 壊
+0x58cb:dàng # 壋
+0x58cc:rǎng # 壌
+0x58cd:qiàn # 壍
+0x58ce:xūn # 壎
+0x58cf:xiàn,làn # 壏
+0x58d0:xǐ # 壐
+0x58d1:hè # 壑
+0x58d2:ài # 壒
+0x58d3:yā,yà # 壓
+0x58d4:dǎo # 壔
+0x58d5:háo # 壕
+0x58d6:ruán # 壖
+0x58d8:lěi # 壘
+0x58d9:kuàng # 壙
+0x58da:lú # 壚
+0x58db:yán # 壛
+0x58dc:tán # 壜
+0x58dd:wéi # 壝
+0x58de:huài # 壞
+0x58df:lǒng # 壟
+0x58e0:lǒng # 壠
+0x58e1:ruǐ # 壡
+0x58e2:lì # 壢
+0x58e3:lín # 壣
+0x58e4:rǎng # 壤
+0x58e6:xūn # 壦
+0x58e7:yán # 壧
+0x58e8:lěi # 壨
+0x58e9:bà # 壩
+0x58eb:shì # 士
+0x58ec:rén # 壬
+0x58ee:zhuàng # 壮
+0x58ef:zhuàng # 壯
+0x58f0:shēng # 声
+0x58f1:yī # 壱
+0x58f2:mài # 売
+0x58f3:ké,qiào # 壳
+0x58f4:zhù # 壴
+0x58f5:zhuàng # 壵
+0x58f6:hú # 壶
+0x58f7:hú # 壷
+0x58f8:kǔn # 壸
+0x58f9:yī # 壹
+0x58fa:hú # 壺
+0x58fb:xù # 壻
+0x58fc:kǔn # 壼
+0x58fd:shòu # 壽
+0x58fe:mǎng # 壾
+0x58ff:cún,dun # 壿
+0x5900:shòu # 夀
+0x5901:yī # 夁
+0x5902:zhǐ,zhōng # 夂
+0x5903:gǔ,yíng # 夃
+0x5904:chǔ,chù # 处
+0x5905:jiàng,xiáng # 夅
+0x5906:féng,fēng,páng # 夆
+0x5907:bèi # 备
+0x5909:biàn # 変
+0x590a:suī # 夊
+0x590b:qūn # 夋
+0x590c:líng # 夌
+0x590d:fù # 复
+0x590e:cuò # 夎
+0x590f:xià # 夏
+0x5910:xiòng,xuàn # 夐
+0x5912:náo # 夒
+0x5913:xià # 夓
+0x5914:kuí # 夔
+0x5915:xī # 夕
+0x5916:wài # 外
+0x5917:yuàn,wǎn,wān,yuān # 夗
+0x5918:mǎo,wǎn # 夘
+0x5919:sù # 夙
+0x591a:duō # 多
+0x591b:duō # 夛
+0x591c:yè # 夜
+0x591d:qíng # 夝
+0x591f:gòu # 够
+0x5920:gòu # 夠
+0x5921:qì # 夡
+0x5922:mèng # 夢
+0x5923:mèng # 夣
+0x5924:yín # 夤
+0x5925:huǒ # 夥
+0x5926:chěn # 夦
+0x5927:dà,dài,tài # 大
+0x5928:cè # 夨
+0x5929:tiān # 天
+0x592a:tài # 太
+0x592b:fū,fú # 夫
+0x592c:guài # 夬
+0x592d:yāo # 夭
+0x592e:yāng # 央
+0x592f:hāng,bèn # 夯
+0x5930:gǎo # 夰
+0x5931:shī # 失
+0x5932:tāo,běn # 夲
+0x5933:tài # 夳
+0x5934:tóu,tou # 头
+0x5935:yǎn,tāo # 夵
+0x5936:bǐ # 夶
+0x5937:yí # 夷
+0x5938:kuā,kuà # 夸
+0x5939:jiā,jiá,gā # 夹
+0x593a:duó # 夺
+0x593c:kuǎng # 夼
+0x593d:yǔn # 夽
+0x593e:jiā,jiá,gā,xiá # 夾
+0x593f:bā # 夿
+0x5940:ēn # 奀
+0x5941:lián # 奁
+0x5942:huàn # 奂
+0x5943:dī,tì # 奃
+0x5944:yǎn,yān # 奄
+0x5945:pào # 奅
+0x5946:juàn # 奆
+0x5947:qí,jī # 奇
+0x5948:nài # 奈
+0x5949:fèng # 奉
+0x594a:xié # 奊
+0x594b:fèn # 奋
+0x594c:diǎn # 奌
+0x594e:kuí # 奎
+0x594f:zòu # 奏
+0x5950:huàn # 奐
+0x5951:qì,qiè,xiè # 契
+0x5952:kāi # 奒
+0x5953:shē,chǐ,zhà # 奓
+0x5954:bēn,bèn # 奔
+0x5955:yì # 奕
+0x5956:jiǎng # 奖
+0x5957:tào # 套
+0x5958:zàng,zhuǎng # 奘
+0x5959:běn # 奙
+0x595a:xī # 奚
+0x595b:huǎng # 奛
+0x595c:fěi # 奜
+0x595d:diāo # 奝
+0x595e:xùn,zhuì # 奞
+0x595f:bēng # 奟
+0x5960:diàn # 奠
+0x5961:ào # 奡
+0x5962:shē # 奢
+0x5963:wěng # 奣
+0x5964:pò,hǎ,tǎi # 奤
+0x5965:ào,yù # 奥
+0x5966:wù # 奦
+0x5967:ào,yù # 奧
+0x5968:jiǎng # 奨
+0x5969:lián # 奩
+0x596a:duó # 奪
+0x596b:yūn # 奫
+0x596c:jiǎng # 奬
+0x596d:shì # 奭
+0x596e:fèn # 奮
+0x596f:huò # 奯
+0x5970:bì # 奰
+0x5971:luán # 奱
+0x5972:duǒ,chě # 奲
+0x5973:nǚ,rǔ # 女
+0x5974:nú # 奴
+0x5975:dǐng,dīng,tiǎn # 奵
+0x5976:nǎi # 奶
+0x5977:qiān # 奷
+0x5978:jiān # 奸
+0x5979:tā,jiě # 她
+0x597a:jiǔ # 奺
+0x597b:nuán # 奻
+0x597c:chà # 奼
+0x597d:hǎo,hào # 好
+0x597e:xiān # 奾
+0x597f:fàn # 奿
+0x5980:jǐ # 妀
+0x5981:shuò # 妁
+0x5982:rú # 如
+0x5983:fēi,pèi # 妃
+0x5984:wàng # 妄
+0x5985:hóng # 妅
+0x5986:zhuāng # 妆
+0x5987:fù # 妇
+0x5988:mā # 妈
+0x5989:dān # 妉
+0x598a:rèn # 妊
+0x598b:fū,yōu # 妋
+0x598c:jìng # 妌
+0x598d:yán # 妍
+0x598e:hài,jiè # 妎
+0x598f:wèn # 妏
+0x5990:zhōng # 妐
+0x5991:pā # 妑
+0x5992:dù # 妒
+0x5993:jì # 妓
+0x5994:kēng,háng # 妔
+0x5995:zhòng # 妕
+0x5996:yāo # 妖
+0x5997:jìn # 妗
+0x5998:yún # 妘
+0x5999:miào # 妙
+0x599a:fǒu,pēi,pī # 妚
+0x599c:yuè,jué # 妜
+0x599d:zhuāng # 妝
+0x599e:niū,hào # 妞
+0x599f:yàn # 妟
+0x59a0:nà,nàn # 妠
+0x59a1:xīn # 妡
+0x59a2:fén # 妢
+0x59a3:bǐ # 妣
+0x59a4:yú # 妤
+0x59a5:tuǒ # 妥
+0x59a6:fēng # 妦
+0x59a7:wàn,yuán # 妧
+0x59a8:fáng # 妨
+0x59a9:wǔ # 妩
+0x59aa:yù # 妪
+0x59ab:guī # 妫
+0x59ac:dù # 妬
+0x59ad:bá # 妭
+0x59ae:nī # 妮
+0x59af:zhóu # 妯
+0x59b0:zhuó # 妰
+0x59b1:zhāo # 妱
+0x59b2:dá # 妲
+0x59b3:nǐ,nǎi # 妳
+0x59b4:yuàn # 妴
+0x59b5:tǒu # 妵
+0x59b6:xián,xuán,xù # 妶
+0x59b7:zhí,yì # 妷
+0x59b8:ē # 妸
+0x59b9:mèi # 妹
+0x59ba:mò # 妺
+0x59bb:qī,qì # 妻
+0x59bc:bì # 妼
+0x59bd:shēn # 妽
+0x59be:qiè # 妾
+0x59bf:ē # 妿
+0x59c0:hé # 姀
+0x59c1:xǔ,xū # 姁
+0x59c2:fá # 姂
+0x59c3:zhēng # 姃
+0x59c4:mín # 姄
+0x59c5:bàn # 姅
+0x59c6:mǔ # 姆
+0x59c7:fū,fú # 姇
+0x59c8:líng # 姈
+0x59c9:zǐ # 姉
+0x59ca:zǐ # 姊
+0x59cb:shǐ # 始
+0x59cc:rǎn # 姌
+0x59cd:shān,shàn # 姍
+0x59ce:yāng # 姎
+0x59cf:mán # 姏
+0x59d0:jiě # 姐
+0x59d1:gū # 姑
+0x59d2:sì # 姒
+0x59d3:xìng # 姓
+0x59d4:wěi,wēi # 委
+0x59d5:zī # 姕
+0x59d6:jù # 姖
+0x59d7:shān,shàn # 姗
+0x59d8:pīn # 姘
+0x59d9:rèn # 姙
+0x59da:yáo # 姚
+0x59db:dòng # 姛
+0x59dc:jiāng # 姜
+0x59dd:shū # 姝
+0x59de:jí # 姞
+0x59df:gāi # 姟
+0x59e0:xiàng # 姠
+0x59e1:huá,huó # 姡
+0x59e2:juān # 姢
+0x59e3:jiāo,xiáo # 姣
+0x59e4:gòu,dù # 姤
+0x59e5:mǔ,lǎo # 姥
+0x59e6:jiān # 姦
+0x59e7:jiān # 姧
+0x59e8:yí # 姨
+0x59e9:nián,niàn # 姩
+0x59ea:zhí # 姪
+0x59eb:zhěn # 姫
+0x59ec:jī # 姬
+0x59ed:xiàn # 姭
+0x59ee:héng # 姮
+0x59ef:guāng # 姯
+0x59f0:jūn,xún # 姰
+0x59f1:kuā,hù # 姱
+0x59f2:yàn # 姲
+0x59f3:mǐng # 姳
+0x59f4:liè # 姴
+0x59f5:pèi # 姵
+0x59f6:è,yà # 姶
+0x59f7:yòu # 姷
+0x59f8:yán # 姸
+0x59f9:chà # 姹
+0x59fa:shēn,xiān # 姺
+0x59fb:yīn # 姻
+0x59fc:shí # 姼
+0x59fd:guǐ # 姽
+0x59fe:quán # 姾
+0x59ff:zī # 姿
+0x5a00:sōng # 娀
+0x5a01:wēi # 威
+0x5a02:hóng # 娂
+0x5a03:wá # 娃
+0x5a04:lóu # 娄
+0x5a05:yà # 娅
+0x5a06:ráo,rǎo # 娆
+0x5a07:jiāo # 娇
+0x5a08:luán # 娈
+0x5a09:pīng # 娉
+0x5a0a:xiàn # 娊
+0x5a0b:shào,shāo # 娋
+0x5a0c:lǐ # 娌
+0x5a0d:chéng,shèng # 娍
+0x5a0e:xiē # 娎
+0x5a0f:máng # 娏
+0x5a11:suō # 娑
+0x5a12:wǔ,mǔ # 娒
+0x5a13:wěi # 娓
+0x5a14:kè # 娔
+0x5a15:chuò,lài # 娕
+0x5a16:chuò # 娖
+0x5a17:tǐng # 娗
+0x5a18:niáng # 娘
+0x5a19:xíng # 娙
+0x5a1a:nán # 娚
+0x5a1b:yú # 娛
+0x5a1c:nà,nuó # 娜
+0x5a1d:pōu,bǐ # 娝
+0x5a1e:něi,suī # 娞
+0x5a1f:juān # 娟
+0x5a20:shēn # 娠
+0x5a21:zhì # 娡
+0x5a22:hán # 娢
+0x5a23:dì # 娣
+0x5a24:zhuāng # 娤
+0x5a25:é # 娥
+0x5a26:pín # 娦
+0x5a27:tuì # 娧
+0x5a28:mǎn,xiàn # 娨
+0x5a29:miǎn # 娩
+0x5a2a:wú,wù,yú # 娪
+0x5a2b:yán # 娫
+0x5a2c:wǔ # 娬
+0x5a2d:xī,āi # 娭
+0x5a2e:yán # 娮
+0x5a2f:yú # 娯
+0x5a30:sì # 娰
+0x5a31:yú # 娱
+0x5a32:wā # 娲
+0x5a34:xián # 娴
+0x5a35:jū # 娵
+0x5a36:qǔ # 娶
+0x5a37:zhuì,shuì # 娷
+0x5a38:qī # 娸
+0x5a39:xián # 娹
+0x5a3a:zhuó # 娺
+0x5a3b:dōng,dòng # 娻
+0x5a3c:chāng # 娼
+0x5a3d:lù # 娽
+0x5a3e:ǎi,ái,è # 娾
+0x5a3f:ē,ě # 娿
+0x5a40:ē # 婀
+0x5a41:lóu # 婁
+0x5a42:mián # 婂
+0x5a43:cóng # 婃
+0x5a44:pǒu,péi,bù # 婄
+0x5a45:jú # 婅
+0x5a46:pó # 婆
+0x5a47:cǎi # 婇
+0x5a48:líng # 婈
+0x5a49:wǎn # 婉
+0x5a4a:biǎo # 婊
+0x5a4b:xiāo # 婋
+0x5a4c:shū # 婌
+0x5a4d:qǐ # 婍
+0x5a4e:huī # 婎
+0x5a4f:fù,fàn # 婏
+0x5a50:wǒ # 婐
+0x5a51:wǒ # 婑
+0x5a52:tán # 婒
+0x5a53:fēi # 婓
+0x5a55:jié # 婕
+0x5a56:tiān # 婖
+0x5a57:ní,nǐ # 婗
+0x5a58:quán,juàn # 婘
+0x5a59:jìng # 婙
+0x5a5a:hūn # 婚
+0x5a5b:jīng # 婛
+0x5a5c:qiān,jǐn # 婜
+0x5a5d:diàn # 婝
+0x5a5e:xìng # 婞
+0x5a5f:hù # 婟
+0x5a60:wān,wà # 婠
+0x5a61:lái,lài # 婡
+0x5a62:bì # 婢
+0x5a63:yīn # 婣
+0x5a64:zhōu,chōu # 婤
+0x5a65:chuò,nào # 婥
+0x5a66:fù # 婦
+0x5a67:jìng # 婧
+0x5a68:lún # 婨
+0x5a69:nüè # 婩
+0x5a6a:lán # 婪
+0x5a6b:hùn,kūn # 婫
+0x5a6c:yín # 婬
+0x5a6d:yà # 婭
+0x5a6f:lì # 婯
+0x5a70:diǎn # 婰
+0x5a71:xián # 婱
+0x5a73:huà # 婳
+0x5a74:yīng # 婴
+0x5a75:chán # 婵
+0x5a76:shěn # 婶
+0x5a77:tíng # 婷
+0x5a78:dàng,yáng # 婸
+0x5a79:yǎo # 婹
+0x5a7a:wù # 婺
+0x5a7b:nàn # 婻
+0x5a7c:ruò,chuò # 婼
+0x5a7d:jiǎ # 婽
+0x5a7e:tōu,yú # 婾
+0x5a7f:xù # 婿
+0x5a80:yù,yú # 媀
+0x5a81:wéi,wěi # 媁
+0x5a82:dì,tí # 媂
+0x5a83:róu # 媃
+0x5a84:měi # 媄
+0x5a85:dān # 媅
+0x5a86:ruǎn,nèn # 媆
+0x5a87:qīn # 媇
+0x5a89:wò # 媉
+0x5a8a:qián # 媊
+0x5a8b:chūn # 媋
+0x5a8c:miáo # 媌
+0x5a8d:fù # 媍
+0x5a8e:jiě # 媎
+0x5a8f:duān # 媏
+0x5a90:yí,pèi # 媐
+0x5a91:zhòng # 媑
+0x5a92:méi # 媒
+0x5a93:huáng # 媓
+0x5a94:mián,miǎn # 媔
+0x5a95:ān # 媕
+0x5a96:yīng # 媖
+0x5a97:xuān # 媗
+0x5a99:wēi # 媙
+0x5a9a:mèi # 媚
+0x5a9b:yuàn,yuán # 媛
+0x5a9c:zhēng # 媜
+0x5a9d:qiū # 媝
+0x5a9e:tí # 媞
+0x5a9f:xiè # 媟
+0x5aa0:tuó,duò # 媠
+0x5aa1:liàn # 媡
+0x5aa2:mào # 媢
+0x5aa3:rǎn # 媣
+0x5aa4:sī # 媤
+0x5aa5:piān # 媥
+0x5aa6:wèi # 媦
+0x5aa7:wā # 媧
+0x5aa8:cù # 媨
+0x5aa9:hú # 媩
+0x5aaa:ǎo # 媪
+0x5aad:xū # 媭
+0x5aae:tōu,yú # 媮
+0x5aaf:guī # 媯
+0x5ab0:chú,zòu # 媰
+0x5ab1:yáo # 媱
+0x5ab2:pì # 媲
+0x5ab3:xí # 媳
+0x5ab4:yuán # 媴
+0x5ab5:yìng # 媵
+0x5ab6:róng # 媶
+0x5ab7:rù # 媷
+0x5ab8:chī # 媸
+0x5ab9:liú # 媹
+0x5aba:měi # 媺
+0x5abb:pán # 媻
+0x5abc:ǎo # 媼
+0x5abd:mā # 媽
+0x5abe:gòu # 媾
+0x5abf:kuì # 媿
+0x5ac0:qín,shēn # 嫀
+0x5ac1:jià # 嫁
+0x5ac2:sǎo # 嫂
+0x5ac3:zhēn,zhěn # 嫃
+0x5ac4:yuán # 嫄
+0x5ac5:jiē,suǒ # 嫅
+0x5ac6:róng # 嫆
+0x5ac7:míng,mǐng # 嫇
+0x5ac8:yīng # 嫈
+0x5ac9:jí # 嫉
+0x5aca:sù # 嫊
+0x5acb:niǎo # 嫋
+0x5acc:xián # 嫌
+0x5acd:tāo # 嫍
+0x5ace:páng # 嫎
+0x5acf:láng # 嫏
+0x5ad0:nǎo # 嫐
+0x5ad1:biáo # 嫑
+0x5ad2:ài # 嫒
+0x5ad3:pì # 嫓
+0x5ad4:pín # 嫔
+0x5ad5:yì # 嫕
+0x5ad6:piáo,piāo # 嫖
+0x5ad7:yù # 嫗
+0x5ad8:léi # 嫘
+0x5ad9:xuán # 嫙
+0x5ada:màn # 嫚
+0x5adb:yī # 嫛
+0x5adc:zhāng # 嫜
+0x5add:kāng # 嫝
+0x5ade:yōng # 嫞
+0x5adf:nì # 嫟
+0x5ae0:lí # 嫠
+0x5ae1:dí # 嫡
+0x5ae2:guī # 嫢
+0x5ae3:yān # 嫣
+0x5ae4:jǐn,jìn # 嫤
+0x5ae5:zhuān # 嫥
+0x5ae6:cháng # 嫦
+0x5ae7:zé # 嫧
+0x5ae8:hān,nǎn # 嫨
+0x5ae9:nèn # 嫩
+0x5aea:lào # 嫪
+0x5aeb:mó # 嫫
+0x5aec:zhē # 嫬
+0x5aed:hù # 嫭
+0x5aee:hù # 嫮
+0x5aef:ào # 嫯
+0x5af0:nèn # 嫰
+0x5af1:qiáng # 嫱
+0x5af3:piè # 嫳
+0x5af4:gū # 嫴
+0x5af5:wǔ # 嫵
+0x5af6:qiáo # 嫶
+0x5af7:tuǒ # 嫷
+0x5af8:zhǎn # 嫸
+0x5af9:miáo # 嫹
+0x5afa:xián # 嫺
+0x5afb:xián # 嫻
+0x5afc:mò # 嫼
+0x5afd:liáo # 嫽
+0x5afe:lián # 嫾
+0x5aff:huà # 嫿
+0x5b00:guī # 嬀
+0x5b01:dēng # 嬁
+0x5b02:zhí # 嬂
+0x5b03:xū # 嬃
+0x5b05:huà # 嬅
+0x5b06:xī # 嬆
+0x5b07:kuì # 嬇
+0x5b08:ráo,rǎo # 嬈
+0x5b09:xī # 嬉
+0x5b0a:yàn # 嬊
+0x5b0b:chán # 嬋
+0x5b0c:jiāo # 嬌
+0x5b0d:měi # 嬍
+0x5b0e:fàn # 嬎
+0x5b0f:fān # 嬏
+0x5b10:xiān,yǎn,jìn # 嬐
+0x5b11:yì # 嬑
+0x5b12:huì # 嬒
+0x5b13:jiào # 嬓
+0x5b14:fù # 嬔
+0x5b15:shì # 嬕
+0x5b16:bì # 嬖
+0x5b17:shàn # 嬗
+0x5b18:suì # 嬘
+0x5b19:qiáng # 嬙
+0x5b1a:liǎn # 嬚
+0x5b1b:huán,xuān,qióng # 嬛
+0x5b1d:niǎo # 嬝
+0x5b1e:dǒng # 嬞
+0x5b1f:yǐ # 嬟
+0x5b20:cān # 嬠
+0x5b21:ài # 嬡
+0x5b22:niáng # 嬢
+0x5b23:níng # 嬣
+0x5b24:mó # 嬤
+0x5b25:tiǎo # 嬥
+0x5b26:chóu # 嬦
+0x5b27:jìn # 嬧
+0x5b28:cí # 嬨
+0x5b29:yú # 嬩
+0x5b2a:pín # 嬪
+0x5b2c:rú # 嬬
+0x5b2d:nǎi # 嬭
+0x5b2e:yān,yàn # 嬮
+0x5b2f:tái # 嬯
+0x5b30:yīng # 嬰
+0x5b31:qiàn # 嬱
+0x5b32:niǎo # 嬲
+0x5b34:yíng # 嬴
+0x5b35:mián # 嬵
+0x5b37:mó # 嬷
+0x5b38:shěn # 嬸
+0x5b39:xìng # 嬹
+0x5b3a:nì # 嬺
+0x5b3b:dú # 嬻
+0x5b3c:liǔ # 嬼
+0x5b3d:yuān # 嬽
+0x5b3e:lǎn # 嬾
+0x5b3f:yàn # 嬿
+0x5b40:shuāng # 孀
+0x5b41:líng # 孁
+0x5b42:jiǎo # 孂
+0x5b43:niáng # 孃
+0x5b44:lǎn # 孄
+0x5b45:xiān,qiān # 孅
+0x5b46:yīng # 孆
+0x5b47:shuāng # 孇
+0x5b48:xié,huī # 孈
+0x5b49:huān,quán # 孉
+0x5b4a:mǐ # 孊
+0x5b4b:lí,lì # 孋
+0x5b4c:luán # 孌
+0x5b4d:yǎn # 孍
+0x5b4e:zhú,chuò # 孎
+0x5b4f:lǎn # 孏
+0x5b50:zǐ # 子
+0x5b51:jié # 孑
+0x5b52:jué # 孒
+0x5b53:jué # 孓
+0x5b54:kǒng # 孔
+0x5b55:yùn # 孕
+0x5b56:zī,mā # 孖
+0x5b57:zì # 字
+0x5b58:cún # 存
+0x5b59:sūn,xùn # 孙
+0x5b5a:fú # 孚
+0x5b5b:bèi,bó # 孛
+0x5b5c:zī # 孜
+0x5b5d:xiào # 孝
+0x5b5e:xìn # 孞
+0x5b5f:mèng # 孟
+0x5b60:sì # 孠
+0x5b61:tāi # 孡
+0x5b62:bāo # 孢
+0x5b63:jì # 季
+0x5b64:gū # 孤
+0x5b65:nú # 孥
+0x5b66:xué # 学
+0x5b68:zhuǎn # 孨
+0x5b69:hái # 孩
+0x5b6a:luán # 孪
+0x5b6b:sūn,xùn # 孫
+0x5b6c:nāo # 孬
+0x5b6d:miē # 孭
+0x5b6e:cóng # 孮
+0x5b6f:qiān # 孯
+0x5b70:shú # 孰
+0x5b71:chán,càn # 孱
+0x5b72:yā # 孲
+0x5b73:zī # 孳
+0x5b74:nǐ # 孴
+0x5b75:fū # 孵
+0x5b76:zī # 孶
+0x5b77:lí # 孷
+0x5b78:xué # 學
+0x5b79:bò # 孹
+0x5b7a:rú # 孺
+0x5b7b:nái # 孻
+0x5b7c:niè # 孼
+0x5b7d:niè # 孽
+0x5b7e:yīng # 孾
+0x5b7f:luán # 孿
+0x5b80:mián # 宀
+0x5b81:níng,nìng,zhù # 宁
+0x5b82:rǒng # 宂
+0x5b83:tā # 它
+0x5b84:guǐ # 宄
+0x5b85:zhái # 宅
+0x5b86:qióng # 宆
+0x5b87:yǔ # 宇
+0x5b88:shǒu # 守
+0x5b89:ān # 安
+0x5b8a:tū,jiā # 宊
+0x5b8b:sòng # 宋
+0x5b8c:wán # 完
+0x5b8d:ròu # 宍
+0x5b8e:yǎo # 宎
+0x5b8f:hóng # 宏
+0x5b90:yí # 宐
+0x5b91:jǐng # 宑
+0x5b92:zhūn # 宒
+0x5b93:mì,fú # 宓
+0x5b94:zhǔ # 宔
+0x5b95:dàng # 宕
+0x5b96:hóng # 宖
+0x5b97:zōng # 宗
+0x5b98:guān # 官
+0x5b99:zhòu # 宙
+0x5b9a:dìng # 定
+0x5b9b:wǎn,yuān # 宛
+0x5b9c:yí # 宜
+0x5b9d:bǎo # 宝
+0x5b9e:shí # 实
+0x5b9f:shí # 実
+0x5ba0:chǒng # 宠
+0x5ba1:shěn # 审
+0x5ba2:kè # 客
+0x5ba3:xuān # 宣
+0x5ba4:shì # 室
+0x5ba5:yòu # 宥
+0x5ba6:huàn # 宦
+0x5ba7:yí # 宧
+0x5ba8:tiǎo # 宨
+0x5ba9:shǐ # 宩
+0x5baa:xiàn # 宪
+0x5bab:gōng # 宫
+0x5bac:chéng # 宬
+0x5bad:qún # 宭
+0x5bae:gōng # 宮
+0x5baf:xiāo # 宯
+0x5bb0:zǎi # 宰
+0x5bb1:zhà # 宱
+0x5bb2:bǎo,shí # 宲
+0x5bb3:hài # 害
+0x5bb4:yàn # 宴
+0x5bb5:xiāo # 宵
+0x5bb6:jiā,jia,jie # 家
+0x5bb7:shěn # 宷
+0x5bb8:chén # 宸
+0x5bb9:róng # 容
+0x5bba:huāng,huǎng # 宺
+0x5bbb:mì # 宻
+0x5bbc:kòu # 宼
+0x5bbd:kuān # 宽
+0x5bbe:bīn # 宾
+0x5bbf:sù,xiǔ,xiù # 宿
+0x5bc0:cǎi,cài # 寀
+0x5bc1:zǎn # 寁
+0x5bc2:jì # 寂
+0x5bc3:yuān # 寃
+0x5bc4:jì # 寄
+0x5bc5:yín # 寅
+0x5bc6:mì # 密
+0x5bc7:kòu # 寇
+0x5bc8:qīng # 寈
+0x5bc9:hè # 寉
+0x5bca:zhēn # 寊
+0x5bcb:jiàn # 寋
+0x5bcc:fù # 富
+0x5bcd:níng,nìng # 寍
+0x5bce:bǐng,bìng # 寎
+0x5bcf:huán # 寏
+0x5bd0:mèi # 寐
+0x5bd1:qǐn # 寑
+0x5bd2:hán # 寒
+0x5bd3:yù # 寓
+0x5bd4:shí # 寔
+0x5bd5:níng,nìng # 寕
+0x5bd6:jìn,qǐn # 寖
+0x5bd7:níng,nìng # 寗
+0x5bd8:zhì # 寘
+0x5bd9:yǔ # 寙
+0x5bda:bǎo # 寚
+0x5bdb:kuān # 寛
+0x5bdc:níng,nìng # 寜
+0x5bdd:qǐn # 寝
+0x5bde:mò # 寞
+0x5bdf:chá # 察
+0x5be0:jù,lóu # 寠
+0x5be1:guǎ # 寡
+0x5be2:qǐn # 寢
+0x5be3:hū # 寣
+0x5be4:wù # 寤
+0x5be5:liáo # 寥
+0x5be6:shí # 實
+0x5be7:níng,nìng # 寧
+0x5be8:zhài # 寨
+0x5be9:shěn # 審
+0x5bea:wěi # 寪
+0x5beb:xiě,xiè # 寫
+0x5bec:kuān # 寬
+0x5bed:huì # 寭
+0x5bee:liáo # 寮
+0x5bef:jùn # 寯
+0x5bf0:huán # 寰
+0x5bf1:yì # 寱
+0x5bf2:yí # 寲
+0x5bf3:bǎo # 寳
+0x5bf4:qīn,qìn # 寴
+0x5bf5:chǒng # 寵
+0x5bf6:bǎo # 寶
+0x5bf7:fēng # 寷
+0x5bf8:cùn # 寸
+0x5bf9:duì # 对
+0x5bfa:sì # 寺
+0x5bfb:xún # 寻
+0x5bfc:dǎo # 导
+0x5bfd:lüè,luó # 寽
+0x5bfe:duì # 対
+0x5bff:shòu # 寿
+0x5c00:pǒ # 尀
+0x5c01:fēng # 封
+0x5c02:zhuān # 専
+0x5c03:fū # 尃
+0x5c04:shè,yè,yì # 射
+0x5c05:kēi,kè # 尅
+0x5c06:jiāng,jiàng # 将
+0x5c07:jiāng,jiàng # 將
+0x5c08:zhuān # 專
+0x5c09:wèi,yù # 尉
+0x5c0a:zūn # 尊
+0x5c0b:xún # 尋
+0x5c0c:shù,zhù # 尌
+0x5c0d:duì # 對
+0x5c0e:dǎo # 導
+0x5c0f:xiǎo # 小
+0x5c10:jié,jí # 尐
+0x5c11:shǎo,shào # 少
+0x5c12:ěr # 尒
+0x5c13:ěr # 尓
+0x5c14:ěr # 尔
+0x5c15:gǎ # 尕
+0x5c16:jiān # 尖
+0x5c17:shú # 尗
+0x5c18:chén # 尘
+0x5c19:shàng # 尙
+0x5c1a:shàng # 尚
+0x5c1c:gá # 尜
+0x5c1d:cháng # 尝
+0x5c1e:liáo # 尞
+0x5c1f:xiǎn # 尟
+0x5c20:xiǎn # 尠
+0x5c22:yóu # 尢
+0x5c23:wāng # 尣
+0x5c24:yóu # 尤
+0x5c25:liào # 尥
+0x5c26:liào # 尦
+0x5c27:yáo # 尧
+0x5c28:lóng,máng,méng,páng # 尨
+0x5c29:wāng # 尩
+0x5c2a:wāng # 尪
+0x5c2b:wāng # 尫
+0x5c2c:gà # 尬
+0x5c2d:yáo # 尭
+0x5c2e:duò # 尮
+0x5c2f:kuì,kuǐ # 尯
+0x5c30:zhǒng # 尰
+0x5c31:jiù # 就
+0x5c32:gān # 尲
+0x5c33:gǔ # 尳
+0x5c34:gān # 尴
+0x5c35:tuí # 尵
+0x5c36:gān # 尶
+0x5c37:gān # 尷
+0x5c38:shī # 尸
+0x5c39:yǐn # 尹
+0x5c3a:chǐ,chě # 尺
+0x5c3b:kāo # 尻
+0x5c3c:ní # 尼
+0x5c3d:jìn,jǐn # 尽
+0x5c3e:wěi,yǐ # 尾
+0x5c3f:niào,suī # 尿
+0x5c40:jú # 局
+0x5c41:pì # 屁
+0x5c42:céng # 层
+0x5c43:xì # 屃
+0x5c44:bī # 屄
+0x5c45:jū # 居
+0x5c46:jiè # 屆
+0x5c47:tián # 屇
+0x5c48:qū # 屈
+0x5c49:tì # 屉
+0x5c4a:jiè # 届
+0x5c4b:wū # 屋
+0x5c4c:diǎo # 屌
+0x5c4d:shī # 屍
+0x5c4e:shǐ # 屎
+0x5c4f:píng,bǐng # 屏
+0x5c50:jī # 屐
+0x5c51:xiè # 屑
+0x5c52:zhěn # 屒
+0x5c53:xì # 屓
+0x5c54:ní # 屔
+0x5c55:zhǎn # 展
+0x5c56:xī # 屖
+0x5c58:mǎn # 屘
+0x5c59:ē # 屙
+0x5c5a:lòu # 屚
+0x5c5b:pǐng,bǐng # 屛
+0x5c5c:tì # 屜
+0x5c5d:fèi # 屝
+0x5c5e:shǔ,zhǔ # 属
+0x5c5f:xiè,tì # 屟
+0x5c60:tú # 屠
+0x5c61:lǚ # 屡
+0x5c62:lǚ # 屢
+0x5c63:xǐ # 屣
+0x5c64:céng # 層
+0x5c65:lǚ # 履
+0x5c66:jù # 屦
+0x5c67:xiè # 屧
+0x5c68:jù # 屨
+0x5c69:juē # 屩
+0x5c6a:liáo # 屪
+0x5c6b:juē # 屫
+0x5c6c:shǔ,zhǔ # 屬
+0x5c6d:xì # 屭
+0x5c6e:chè,cǎo # 屮
+0x5c6f:tún,zhūn # 屯
+0x5c70:nì,jǐ # 屰
+0x5c71:shān # 山
+0x5c73:xiān # 屳
+0x5c74:lì # 屴
+0x5c75:àn # 屵
+0x5c78:hóng,lóng # 屸
+0x5c79:yì # 屹
+0x5c7a:qǐ # 屺
+0x5c7b:rèn # 屻
+0x5c7c:wù # 屼
+0x5c7d:hàn,àn # 屽
+0x5c7e:shēn # 屾
+0x5c7f:yǔ # 屿
+0x5c80:chū # 岀
+0x5c81:suì # 岁
+0x5c82:qǐ,kǎi # 岂
+0x5c84:yuè # 岄
+0x5c85:bǎn # 岅
+0x5c86:yǎo # 岆
+0x5c87:áng # 岇
+0x5c88:yá # 岈
+0x5c89:wù # 岉
+0x5c8a:jié # 岊
+0x5c8b:è # 岋
+0x5c8c:jí # 岌
+0x5c8d:qiān # 岍
+0x5c8e:fén # 岎
+0x5c8f:wán # 岏
+0x5c90:qí # 岐
+0x5c91:cén # 岑
+0x5c92:qián # 岒
+0x5c93:qí # 岓
+0x5c94:chà # 岔
+0x5c95:jiè # 岕
+0x5c96:qū # 岖
+0x5c97:gǎng # 岗
+0x5c98:xiàn # 岘
+0x5c99:ào # 岙
+0x5c9a:lán # 岚
+0x5c9b:dǎo # 岛
+0x5c9c:bā # 岜
+0x5c9d:zuò # 岝
+0x5c9e:zuò # 岞
+0x5c9f:yǎng # 岟
+0x5ca0:jù # 岠
+0x5ca1:gāng # 岡
+0x5ca2:kě # 岢
+0x5ca3:gǒu # 岣
+0x5ca4:xuè # 岤
+0x5ca5:pō # 岥
+0x5ca6:lì # 岦
+0x5ca7:tiáo # 岧
+0x5ca8:jū,jǔ # 岨
+0x5ca9:yán # 岩
+0x5caa:fú # 岪
+0x5cab:xiù # 岫
+0x5cac:jiǎ # 岬
+0x5cad:lǐng,líng # 岭
+0x5cae:tuó # 岮
+0x5caf:pī # 岯
+0x5cb0:ào # 岰
+0x5cb1:dài # 岱
+0x5cb2:kuàng # 岲
+0x5cb3:yuè # 岳
+0x5cb4:qū # 岴
+0x5cb5:hù # 岵
+0x5cb6:pò # 岶
+0x5cb7:mín # 岷
+0x5cb8:àn # 岸
+0x5cb9:tiáo # 岹
+0x5cba:lǐng,líng # 岺
+0x5cbb:dī # 岻
+0x5cbd:dōng # 岽
+0x5cbf:kuī # 岿
+0x5cc0:xiù # 峀
+0x5cc1:mǎo # 峁
+0x5cc2:tóng # 峂
+0x5cc3:xué # 峃
+0x5cc4:yì # 峄
+0x5cc6:hé # 峆
+0x5cc7:kè,bā # 峇
+0x5cc8:luò # 峈
+0x5cc9:é # 峉
+0x5cca:fù,niè # 峊
+0x5ccb:xún # 峋
+0x5ccc:dié # 峌
+0x5ccd:lù # 峍
+0x5cce:ěn # 峎
+0x5ccf:ér # 峏
+0x5cd0:gāi # 峐
+0x5cd1:quán # 峑
+0x5cd2:tóng,dòng # 峒
+0x5cd3:yí # 峓
+0x5cd4:mǔ # 峔
+0x5cd5:shí # 峕
+0x5cd6:ān # 峖
+0x5cd7:wéi # 峗
+0x5cd8:huán # 峘
+0x5cd9:zhì,shì # 峙
+0x5cda:mì # 峚
+0x5cdb:lǐ # 峛
+0x5cdc:fǎ,jī # 峜
+0x5cdd:tóng # 峝
+0x5cde:wéi # 峞
+0x5cdf:yòu # 峟
+0x5ce1:xiá # 峡
+0x5ce2:lǐ # 峢
+0x5ce3:yáo # 峣
+0x5ce4:jiào,qiáo # 峤
+0x5ce5:zhēng # 峥
+0x5ce6:luán # 峦
+0x5ce7:jiāo # 峧
+0x5ce8:é # 峨
+0x5ce9:é # 峩
+0x5cea:yù # 峪
+0x5ceb:xié,yé # 峫
+0x5cec:bū # 峬
+0x5ced:qiào # 峭
+0x5cee:qún # 峮
+0x5cef:fēng # 峯
+0x5cf0:fēng # 峰
+0x5cf1:náo # 峱
+0x5cf2:lǐ # 峲
+0x5cf3:yōu # 峳
+0x5cf4:xiàn # 峴
+0x5cf5:róng # 峵
+0x5cf6:dǎo # 島
+0x5cf7:shēn # 峷
+0x5cf8:chéng # 峸
+0x5cf9:tú # 峹
+0x5cfa:gěng # 峺
+0x5cfb:jùn # 峻
+0x5cfc:gào # 峼
+0x5cfd:xiá # 峽
+0x5cfe:yín # 峾
+0x5cff:wú # 峿
+0x5d00:lǎng # 崀
+0x5d01:kàn # 崁
+0x5d02:láo # 崂
+0x5d03:lái # 崃
+0x5d04:xiǎn # 崄
+0x5d05:què # 崅
+0x5d06:kōng # 崆
+0x5d07:chóng # 崇
+0x5d08:chóng # 崈
+0x5d09:tà # 崉
+0x5d0b:huà # 崋
+0x5d0c:jū # 崌
+0x5d0d:lái # 崍
+0x5d0e:qí # 崎
+0x5d0f:mín # 崏
+0x5d10:kūn # 崐
+0x5d11:kūn # 崑
+0x5d12:zú,cuì # 崒
+0x5d13:gù # 崓
+0x5d14:cuī # 崔
+0x5d15:yá # 崕
+0x5d16:yá # 崖
+0x5d17:gǎng,gāng # 崗
+0x5d18:lún # 崘
+0x5d19:lún # 崙
+0x5d1a:líng,léng # 崚
+0x5d1b:jué # 崛
+0x5d1c:duǒ # 崜
+0x5d1d:zhēng # 崝
+0x5d1e:guō # 崞
+0x5d1f:yín # 崟
+0x5d20:dōng,dòng # 崠
+0x5d21:hán # 崡
+0x5d22:zhēng # 崢
+0x5d23:wěi # 崣
+0x5d24:xiáo # 崤
+0x5d25:pí,bǐ # 崥
+0x5d26:yān # 崦
+0x5d27:sōng # 崧
+0x5d28:jié # 崨
+0x5d29:bēng # 崩
+0x5d2a:zú # 崪
+0x5d2b:jué # 崫
+0x5d2c:dōng # 崬
+0x5d2d:zhǎn,chán # 崭
+0x5d2e:gù # 崮
+0x5d2f:yín # 崯
+0x5d31:zè # 崱
+0x5d32:huáng # 崲
+0x5d33:yú # 崳
+0x5d34:wǎi,wēi # 崴
+0x5d35:yáng,dàng # 崵
+0x5d36:fēng # 崶
+0x5d37:qiú # 崷
+0x5d38:yáng # 崸
+0x5d39:tí # 崹
+0x5d3a:yǐ # 崺
+0x5d3b:zhì,shì # 崻
+0x5d3c:shì,dié # 崼
+0x5d3d:zǎi # 崽
+0x5d3e:yǎo # 崾
+0x5d3f:è # 崿
+0x5d40:zhù # 嵀
+0x5d41:kān,zhàn # 嵁
+0x5d42:lǜ # 嵂
+0x5d43:yǎn # 嵃
+0x5d44:měi # 嵄
+0x5d45:hán # 嵅
+0x5d46:jī # 嵆
+0x5d47:jī # 嵇
+0x5d48:huàn # 嵈
+0x5d49:tíng # 嵉
+0x5d4a:shèng # 嵊
+0x5d4b:méi # 嵋
+0x5d4c:qiàn,kàn # 嵌
+0x5d4d:wù,máo # 嵍
+0x5d4e:yú # 嵎
+0x5d4f:zōng # 嵏
+0x5d50:lán # 嵐
+0x5d51:kě,jié # 嵑
+0x5d52:yán # 嵒
+0x5d53:yán # 嵓
+0x5d54:wēi,wěi # 嵔
+0x5d55:zōng # 嵕
+0x5d56:chá # 嵖
+0x5d57:suì # 嵗
+0x5d58:róng # 嵘
+0x5d5a:qīn # 嵚
+0x5d5b:yú # 嵛
+0x5d5d:lǒu # 嵝
+0x5d5e:tú # 嵞
+0x5d5f:cuī # 嵟
+0x5d60:xī # 嵠
+0x5d61:wěng # 嵡
+0x5d62:cāng # 嵢
+0x5d63:dàng,táng # 嵣
+0x5d64:róng,yíng # 嵤
+0x5d65:jié # 嵥
+0x5d66:kǎi,ái # 嵦
+0x5d67:liú # 嵧
+0x5d68:wù # 嵨
+0x5d69:sōng # 嵩
+0x5d6a:kāo,qiāo # 嵪
+0x5d6b:zī # 嵫
+0x5d6c:wéi # 嵬
+0x5d6d:bēng # 嵭
+0x5d6e:diān # 嵮
+0x5d6f:cuó # 嵯
+0x5d70:qīn,qiǎn # 嵰
+0x5d71:yǒng # 嵱
+0x5d72:niè # 嵲
+0x5d73:cuó # 嵳
+0x5d74:jǐ # 嵴
+0x5d77:sǒng # 嵷
+0x5d78:zǒng # 嵸
+0x5d79:jiàng # 嵹
+0x5d7a:liáo # 嵺
+0x5d7c:chǎn # 嵼
+0x5d7d:dié,dì # 嵽
+0x5d7e:cēn # 嵾
+0x5d7f:dǐng # 嵿
+0x5d80:tū # 嶀
+0x5d81:lǒu # 嶁
+0x5d82:zhàng # 嶂
+0x5d83:zhǎn,chán # 嶃
+0x5d84:zhǎn,chán # 嶄
+0x5d85:áo,ào # 嶅
+0x5d86:cáo # 嶆
+0x5d87:qū # 嶇
+0x5d88:qiāng # 嶈
+0x5d89:wěi # 嶉
+0x5d8a:zuǐ # 嶊
+0x5d8b:dǎo # 嶋
+0x5d8c:dǎo # 嶌
+0x5d8d:xí # 嶍
+0x5d8e:yù # 嶎
+0x5d8f:pǐ,pèi # 嶏
+0x5d90:lóng # 嶐
+0x5d91:xiàng # 嶑
+0x5d92:céng # 嶒
+0x5d93:bō # 嶓
+0x5d94:qīn # 嶔
+0x5d95:jiāo # 嶕
+0x5d96:yān # 嶖
+0x5d97:láo # 嶗
+0x5d98:zhàn # 嶘
+0x5d99:lín # 嶙
+0x5d9a:liáo # 嶚
+0x5d9b:liáo # 嶛
+0x5d9c:qín # 嶜
+0x5d9d:dèng # 嶝
+0x5d9e:tuò # 嶞
+0x5d9f:zūn # 嶟
+0x5da0:jiào,qiáo # 嶠
+0x5da1:jué,guì # 嶡
+0x5da2:yáo # 嶢
+0x5da3:jiāo # 嶣
+0x5da4:yáo # 嶤
+0x5da5:jué # 嶥
+0x5da6:zhān,shàn # 嶦
+0x5da7:yì # 嶧
+0x5da8:xué # 嶨
+0x5da9:náo # 嶩
+0x5daa:yè # 嶪
+0x5dab:yè # 嶫
+0x5dac:yí # 嶬
+0x5dad:niè # 嶭
+0x5dae:xiǎn # 嶮
+0x5daf:jí # 嶯
+0x5db0:xiè,jiè # 嶰
+0x5db1:kě,jié # 嶱
+0x5db2:guī,xī,juàn # 嶲
+0x5db3:dì # 嶳
+0x5db4:ào # 嶴
+0x5db5:zuì # 嶵
+0x5db7:yí # 嶷
+0x5db8:róng # 嶸
+0x5db9:dǎo # 嶹
+0x5dba:lǐng # 嶺
+0x5dbb:jié # 嶻
+0x5dbc:yǔ # 嶼
+0x5dbd:yuè # 嶽
+0x5dbe:yǐn # 嶾
+0x5dc0:jié # 巀
+0x5dc1:lì,liè # 巁
+0x5dc2:guī,xī,juàn # 巂
+0x5dc3:lóng # 巃
+0x5dc4:lóng # 巄
+0x5dc5:diān # 巅
+0x5dc6:yíng,hōng # 巆
+0x5dc7:xī # 巇
+0x5dc8:jú # 巈
+0x5dc9:chán # 巉
+0x5dca:yǐng # 巊
+0x5dcb:kuī # 巋
+0x5dcc:yán # 巌
+0x5dcd:wēi # 巍
+0x5dce:náo # 巎
+0x5dcf:quán # 巏
+0x5dd0:chǎo # 巐
+0x5dd1:cuán # 巑
+0x5dd2:luán # 巒
+0x5dd3:diān # 巓
+0x5dd4:diān # 巔
+0x5dd6:yán # 巖
+0x5dd7:yán # 巗
+0x5dd8:yǎn # 巘
+0x5dd9:kuí # 巙
+0x5dda:yǎn # 巚
+0x5ddb:chuān # 巛
+0x5ddc:kuài # 巜
+0x5ddd:chuān # 川
+0x5dde:zhōu # 州
+0x5ddf:huāng # 巟
+0x5de0:jīng,xíng # 巠
+0x5de1:xún # 巡
+0x5de2:cháo # 巢
+0x5de3:cháo # 巣
+0x5de4:liè # 巤
+0x5de5:gōng # 工
+0x5de6:zuǒ # 左
+0x5de7:qiǎo # 巧
+0x5de8:jù # 巨
+0x5de9:gǒng # 巩
+0x5deb:wū # 巫
+0x5dee:chà,chā,chāi,cī # 差
+0x5def:qiú # 巯
+0x5df0:qiú # 巰
+0x5df1:jǐ # 己
+0x5df2:yǐ # 已
+0x5df3:sì # 巳
+0x5df4:bā # 巴
+0x5df5:zhī # 巵
+0x5df6:zhāo # 巶
+0x5df7:xiàng,hàng # 巷
+0x5df8:yí # 巸
+0x5df9:jǐn # 巹
+0x5dfa:xùn # 巺
+0x5dfb:juàn,juǎn # 巻
+0x5dfd:xùn # 巽
+0x5dfe:jīn # 巾
+0x5dff:fú # 巿
+0x5e00:zā # 帀
+0x5e01:bì # 币
+0x5e02:shì # 市
+0x5e03:bù # 布
+0x5e04:dīng # 帄
+0x5e05:shuài # 帅
+0x5e06:fān # 帆
+0x5e07:niè # 帇
+0x5e08:shī # 师
+0x5e09:fēn # 帉
+0x5e0a:pà # 帊
+0x5e0b:zhǐ # 帋
+0x5e0c:xī # 希
+0x5e0d:hù # 帍
+0x5e0e:dàn # 帎
+0x5e0f:wéi # 帏
+0x5e10:zhàng # 帐
+0x5e11:tǎng,nú # 帑
+0x5e12:dài # 帒
+0x5e13:mò,wà # 帓
+0x5e14:pèi # 帔
+0x5e15:pà # 帕
+0x5e16:tiè,tiě,tiē # 帖
+0x5e17:fú # 帗
+0x5e18:lián # 帘
+0x5e19:zhì # 帙
+0x5e1a:zhǒu # 帚
+0x5e1b:bó # 帛
+0x5e1c:zhì # 帜
+0x5e1d:dì # 帝
+0x5e1e:mò # 帞
+0x5e1f:yì # 帟
+0x5e20:yì # 帠
+0x5e21:píng # 帡
+0x5e22:qià # 帢
+0x5e23:juàn,juǎn # 帣
+0x5e24:rú # 帤
+0x5e25:shuài # 帥
+0x5e26:dài # 带
+0x5e27:zhēn # 帧
+0x5e28:shuì # 帨
+0x5e29:qiāo # 帩
+0x5e2a:zhēn # 帪
+0x5e2b:shī # 師
+0x5e2c:qún # 帬
+0x5e2d:xí # 席
+0x5e2e:bāng # 帮
+0x5e2f:dài # 帯
+0x5e30:guī # 帰
+0x5e31:chóu,dào # 帱
+0x5e32:píng # 帲
+0x5e33:zhàng # 帳
+0x5e34:jiǎn,jiān,sàn # 帴
+0x5e35:wān # 帵
+0x5e36:dài # 帶
+0x5e37:wéi # 帷
+0x5e38:cháng # 常
+0x5e39:shà,qiè # 帹
+0x5e3a:qí,jì # 帺
+0x5e3b:zé # 帻
+0x5e3c:guó # 帼
+0x5e3d:mào # 帽
+0x5e3e:zhǔ # 帾
+0x5e3f:hóu # 帿
+0x5e40:zhēn # 幀
+0x5e41:zhèng # 幁
+0x5e42:mì # 幂
+0x5e43:wéi # 幃
+0x5e44:wò # 幄
+0x5e45:fú # 幅
+0x5e46:yì # 幆
+0x5e47:bāng # 幇
+0x5e48:píng # 幈
+0x5e4a:gōng # 幊
+0x5e4b:pán # 幋
+0x5e4c:huǎng # 幌
+0x5e4d:tāo # 幍
+0x5e4e:mì # 幎
+0x5e4f:jià # 幏
+0x5e50:téng # 幐
+0x5e51:huī # 幑
+0x5e52:zhōng # 幒
+0x5e53:shān,qiāo,shēn # 幓
+0x5e54:màn # 幔
+0x5e55:mù # 幕
+0x5e56:biāo # 幖
+0x5e57:guó # 幗
+0x5e58:zé # 幘
+0x5e59:mù # 幙
+0x5e5a:bāng # 幚
+0x5e5b:zhàng # 幛
+0x5e5c:jǐng # 幜
+0x5e5d:chǎn,chàn # 幝
+0x5e5e:fú # 幞
+0x5e5f:zhì # 幟
+0x5e60:hū # 幠
+0x5e61:fān # 幡
+0x5e62:chuáng,zhuàng # 幢
+0x5e63:bì # 幣
+0x5e66:mì # 幦
+0x5e67:qiāo # 幧
+0x5e68:chān,chàn # 幨
+0x5e69:fén # 幩
+0x5e6a:méng # 幪
+0x5e6b:bāng # 幫
+0x5e6c:chóu,dào # 幬
+0x5e6d:miè # 幭
+0x5e6e:chú # 幮
+0x5e6f:jié # 幯
+0x5e70:xiǎn # 幰
+0x5e71:lán # 幱
+0x5e72:gān,gàn # 干
+0x5e73:píng # 平
+0x5e74:nián # 年
+0x5e75:jiān # 幵
+0x5e76:bìng,bīng # 并
+0x5e77:bìng,bīng # 幷
+0x5e78:xìng # 幸
+0x5e79:gàn # 幹
+0x5e7a:yāo # 幺
+0x5e7b:huàn # 幻
+0x5e7c:yòu # 幼
+0x5e7d:yōu # 幽
+0x5e7e:jī,jǐ # 幾
+0x5e7f:guǎng,ān # 广
+0x5e80:pǐ # 庀
+0x5e81:tīng # 庁
+0x5e82:zè # 庂
+0x5e83:guǎng # 広
+0x5e84:zhuāng # 庄
+0x5e85:mó,mā,me # 庅
+0x5e86:qìng # 庆
+0x5e87:bì # 庇
+0x5e88:qín # 庈
+0x5e89:dùn,tún # 庉
+0x5e8a:chuáng # 床
+0x5e8b:guǐ # 庋
+0x5e8c:yǎ # 庌
+0x5e8d:bài,tīng # 庍
+0x5e8e:jiè # 庎
+0x5e8f:xù # 序
+0x5e90:lú # 庐
+0x5e91:wǔ # 庑
+0x5e93:kù # 库
+0x5e94:yīng,yìng # 应
+0x5e95:dǐ,de # 底
+0x5e96:páo # 庖
+0x5e97:diàn # 店
+0x5e98:yā # 庘
+0x5e99:miào # 庙
+0x5e9a:gēng # 庚
+0x5e9b:cì # 庛
+0x5e9c:fǔ # 府
+0x5e9d:tóng # 庝
+0x5e9e:páng # 庞
+0x5e9f:fèi # 废
+0x5ea0:xiáng # 庠
+0x5ea1:yǐ # 庡
+0x5ea2:zhì # 庢
+0x5ea3:tiāo # 庣
+0x5ea4:zhì # 庤
+0x5ea5:xiū # 庥
+0x5ea6:dù,duó # 度
+0x5ea7:zuò # 座
+0x5ea8:xiāo # 庨
+0x5ea9:tú # 庩
+0x5eaa:guǐ # 庪
+0x5eab:kù # 庫
+0x5eac:máng,méng,páng # 庬
+0x5ead:tíng # 庭
+0x5eae:yóu # 庮
+0x5eaf:bū # 庯
+0x5eb0:bìng,píng # 庰
+0x5eb1:chěng # 庱
+0x5eb2:lái # 庲
+0x5eb3:bēi,bì,pí # 庳
+0x5eb4:jī,cuò # 庴
+0x5eb5:ān # 庵
+0x5eb6:shù # 庶
+0x5eb7:kāng # 康
+0x5eb8:yōng # 庸
+0x5eb9:tuǒ # 庹
+0x5eba:sōng # 庺
+0x5ebb:shù # 庻
+0x5ebc:qǐng # 庼
+0x5ebd:yù # 庽
+0x5ebe:yǔ # 庾
+0x5ebf:miào # 庿
+0x5ec0:sōu # 廀
+0x5ec1:cè # 廁
+0x5ec2:xiāng # 廂
+0x5ec3:fèi # 廃
+0x5ec4:jiù # 廄
+0x5ec5:è # 廅
+0x5ec6:guī,wěi,huì # 廆
+0x5ec7:liù # 廇
+0x5ec8:shà,xià # 廈
+0x5ec9:lián # 廉
+0x5eca:láng # 廊
+0x5ecb:sōu # 廋
+0x5ecc:zhì # 廌
+0x5ecd:bù # 廍
+0x5ece:qǐng # 廎
+0x5ecf:jiù # 廏
+0x5ed0:jiù # 廐
+0x5ed1:jǐn,qín # 廑
+0x5ed2:áo # 廒
+0x5ed3:kuò # 廓
+0x5ed4:lóu # 廔
+0x5ed5:yìn # 廕
+0x5ed6:liào # 廖
+0x5ed7:dài # 廗
+0x5ed8:lù # 廘
+0x5ed9:yì # 廙
+0x5eda:chú # 廚
+0x5edb:chán # 廛
+0x5edc:tú # 廜
+0x5edd:sī # 廝
+0x5ede:xīn # 廞
+0x5edf:miào # 廟
+0x5ee0:chǎng # 廠
+0x5ee1:wǔ # 廡
+0x5ee2:fèi # 廢
+0x5ee3:guǎng # 廣
+0x5ee5:kuài # 廥
+0x5ee6:bì # 廦
+0x5ee7:qiáng,sè # 廧
+0x5ee8:xiè # 廨
+0x5ee9:lǐn # 廩
+0x5eea:lǐn # 廪
+0x5eeb:liáo # 廫
+0x5eec:lú # 廬
+0x5eee:yǐng # 廮
+0x5eef:xiān # 廯
+0x5ef0:tīng # 廰
+0x5ef1:yōng # 廱
+0x5ef2:lí # 廲
+0x5ef3:tīng # 廳
+0x5ef4:yǐn,yìn # 廴
+0x5ef5:xún # 廵
+0x5ef6:yán # 延
+0x5ef7:tíng # 廷
+0x5ef8:dí # 廸
+0x5ef9:pò,pǎi # 廹
+0x5efa:jiàn # 建
+0x5efb:huí # 廻
+0x5efc:nǎi # 廼
+0x5efd:huí # 廽
+0x5efe:gǒng # 廾
+0x5eff:niàn # 廿
+0x5f00:kāi # 开
+0x5f01:biàn # 弁
+0x5f02:yì # 异
+0x5f03:qì # 弃
+0x5f04:nòng,lòng # 弄
+0x5f05:fèn # 弅
+0x5f06:jǔ # 弆
+0x5f07:yǎn # 弇
+0x5f08:yì # 弈
+0x5f09:zàng # 弉
+0x5f0a:bì # 弊
+0x5f0b:yì # 弋
+0x5f0c:yī # 弌
+0x5f0d:èr # 弍
+0x5f0e:sān # 弎
+0x5f0f:shì # 式
+0x5f10:èr # 弐
+0x5f11:shì # 弑
+0x5f12:shì # 弒
+0x5f13:gōng # 弓
+0x5f14:diào # 弔
+0x5f15:yǐn # 引
+0x5f16:hù # 弖
+0x5f17:fú # 弗
+0x5f18:hóng # 弘
+0x5f19:wū # 弙
+0x5f1a:tuí # 弚
+0x5f1b:chí # 弛
+0x5f1c:jiàng # 弜
+0x5f1d:bà # 弝
+0x5f1e:shěn # 弞
+0x5f1f:dì,tì,tuí # 弟
+0x5f20:zhāng # 张
+0x5f21:jué,zhāng # 弡
+0x5f22:tāo # 弢
+0x5f23:fǔ # 弣
+0x5f24:dǐ # 弤
+0x5f25:mí,mǐ # 弥
+0x5f26:xián # 弦
+0x5f27:hú # 弧
+0x5f28:chāo # 弨
+0x5f29:nǔ # 弩
+0x5f2a:jìng # 弪
+0x5f2b:zhěn # 弫
+0x5f2c:yi # 弬
+0x5f2d:mǐ # 弭
+0x5f2e:juàn,quān # 弮
+0x5f2f:wān # 弯
+0x5f30:shāo # 弰
+0x5f31:ruò # 弱
+0x5f32:xuān,yuān # 弲
+0x5f33:jìng # 弳
+0x5f34:diāo # 弴
+0x5f35:zhāng # 張
+0x5f36:jiàng # 弶
+0x5f37:qiáng,qiǎng,jiàng # 強
+0x5f38:péng # 弸
+0x5f39:dàn,tán # 弹
+0x5f3a:qiáng,qiǎng,jiàng # 强
+0x5f3b:bì # 弻
+0x5f3c:bì # 弼
+0x5f3d:shè # 弽
+0x5f3e:dàn,tán # 弾
+0x5f3f:jiǎn # 弿
+0x5f40:gòu # 彀
+0x5f42:fā # 彂
+0x5f43:bì # 彃
+0x5f44:kōu # 彄
+0x5f46:biè # 彆
+0x5f47:xiāo # 彇
+0x5f48:dàn,tán # 彈
+0x5f49:guō # 彉
+0x5f4a:qiáng,qiǎng,jiàng # 彊
+0x5f4b:hóng # 彋
+0x5f4c:mí,mǐ # 彌
+0x5f4d:guō # 彍
+0x5f4e:wān # 彎
+0x5f4f:jué # 彏
+0x5f50:jì,xuě # 彐
+0x5f51:jì # 彑
+0x5f52:guī # 归
+0x5f53:dāng,dàng # 当
+0x5f54:lù # 彔
+0x5f55:lù # 录
+0x5f56:tuàn # 彖
+0x5f57:huì # 彗
+0x5f58:zhì # 彘
+0x5f59:huì # 彙
+0x5f5a:huì # 彚
+0x5f5b:yí # 彛
+0x5f5c:yí # 彜
+0x5f5d:yí # 彝
+0x5f5e:yí # 彞
+0x5f5f:huò # 彟
+0x5f60:huò # 彠
+0x5f61:shān,xiǎn # 彡
+0x5f62:xíng # 形
+0x5f63:wén # 彣
+0x5f64:tóng # 彤
+0x5f65:yàn # 彥
+0x5f66:yàn # 彦
+0x5f67:yù # 彧
+0x5f68:chī # 彨
+0x5f69:cǎi # 彩
+0x5f6a:biāo # 彪
+0x5f6b:diāo # 彫
+0x5f6c:bīn # 彬
+0x5f6d:péng,bāng # 彭
+0x5f6e:yǒng # 彮
+0x5f6f:piāo,piào # 彯
+0x5f70:zhāng # 彰
+0x5f71:yǐng # 影
+0x5f72:chī # 彲
+0x5f73:chì # 彳
+0x5f74:zhuó,bó # 彴
+0x5f75:tuǒ,yí # 彵
+0x5f76:jí # 彶
+0x5f77:páng,fǎng # 彷
+0x5f78:zhōng # 彸
+0x5f79:yì # 役
+0x5f7a:wǎng # 彺
+0x5f7b:chè # 彻
+0x5f7c:bǐ # 彼
+0x5f7d:dī # 彽
+0x5f7e:líng # 彾
+0x5f7f:fù # 彿
+0x5f80:wǎng # 往
+0x5f81:zhēng # 征
+0x5f82:cú # 徂
+0x5f83:wǎng # 徃
+0x5f84:jìng # 径
+0x5f85:dài,dāi # 待
+0x5f86:xī # 徆
+0x5f87:xùn # 徇
+0x5f88:hěn # 很
+0x5f89:yáng # 徉
+0x5f8a:huái # 徊
+0x5f8b:lǜ # 律
+0x5f8c:hòu # 後
+0x5f8d:wàng,jiā,wā # 徍
+0x5f8e:chěng,zhèng # 徎
+0x5f8f:zhì # 徏
+0x5f90:xú # 徐
+0x5f91:jìng # 徑
+0x5f92:tú # 徒
+0x5f93:cóng # 従
+0x5f95:lài,lái # 徕
+0x5f96:cóng # 徖
+0x5f97:dé,děi,de # 得
+0x5f98:pái # 徘
+0x5f99:xǐ # 徙
+0x5f9b:jì # 徛
+0x5f9c:cháng # 徜
+0x5f9d:zhì # 徝
+0x5f9e:cóng,zòng # 從
+0x5f9f:zhōu # 徟
+0x5fa0:lái,lài # 徠
+0x5fa1:yù # 御
+0x5fa2:xiè # 徢
+0x5fa3:jiè # 徣
+0x5fa4:jiàn # 徤
+0x5fa5:shì,tǐ # 徥
+0x5fa6:jiǎ,xiá # 徦
+0x5fa7:biàn # 徧
+0x5fa8:huáng # 徨
+0x5fa9:fù # 復
+0x5faa:xún # 循
+0x5fab:wěi # 徫
+0x5fac:páng # 徬
+0x5fad:yáo # 徭
+0x5fae:wēi # 微
+0x5faf:xī # 徯
+0x5fb0:zhēng # 徰
+0x5fb1:piào # 徱
+0x5fb2:tí,chí # 徲
+0x5fb3:dé # 徳
+0x5fb4:zhǐ,zhēng # 徴
+0x5fb5:zhǐ,zhēng # 徵
+0x5fb6:bié # 徶
+0x5fb7:dé # 德
+0x5fb8:zhǒng,chōng # 徸
+0x5fb9:chè # 徹
+0x5fba:jiǎo,yáo # 徺
+0x5fbb:huì # 徻
+0x5fbc:jiǎo,jiào # 徼
+0x5fbd:huī # 徽
+0x5fbe:méi # 徾
+0x5fbf:lòng,lǒng # 徿
+0x5fc0:xiāng # 忀
+0x5fc1:bào # 忁
+0x5fc2:qú,jù # 忂
+0x5fc3:xīn # 心
+0x5fc5:bì # 必
+0x5fc6:yì # 忆
+0x5fc7:lè # 忇
+0x5fc8:rén # 忈
+0x5fc9:dāo # 忉
+0x5fca:dìng,tìng # 忊
+0x5fcb:gǎi # 忋
+0x5fcc:jì # 忌
+0x5fcd:rěn # 忍
+0x5fce:rén # 忎
+0x5fcf:chàn # 忏
+0x5fd0:tǎn # 忐
+0x5fd1:tè # 忑
+0x5fd2:tè,tuī,tēi # 忒
+0x5fd3:gān,hàn # 忓
+0x5fd4:yì,qì # 忔
+0x5fd5:shì,tài # 忕
+0x5fd6:cǔn # 忖
+0x5fd7:zhì # 志
+0x5fd8:wàng # 忘
+0x5fd9:máng # 忙
+0x5fda:xī,liě # 忚
+0x5fdb:fān # 忛
+0x5fdc:yīng,yìng # 応
+0x5fdd:tiǎn # 忝
+0x5fde:mǐn,wěn,mín # 忞
+0x5fdf:mǐn,wěn,mín # 忟
+0x5fe0:zhōng # 忠
+0x5fe1:chōng # 忡
+0x5fe2:wù # 忢
+0x5fe3:jí # 忣
+0x5fe4:wǔ # 忤
+0x5fe5:xì # 忥
+0x5fe6:jiá # 忦
+0x5fe7:yōu # 忧
+0x5fe8:wán # 忨
+0x5fe9:cōng # 忩
+0x5fea:sōng,zhōng # 忪
+0x5feb:kuài # 快
+0x5fec:yù,shū # 忬
+0x5fed:biàn # 忭
+0x5fee:zhì # 忮
+0x5fef:qí,shì # 忯
+0x5ff0:cuì # 忰
+0x5ff1:chén # 忱
+0x5ff2:tài # 忲
+0x5ff3:tún,zhūn,dùn # 忳
+0x5ff4:qián,qín # 忴
+0x5ff5:niàn # 念
+0x5ff6:hún # 忶
+0x5ff7:xiōng # 忷
+0x5ff8:niǔ # 忸
+0x5ff9:kuáng,wǎng # 忹
+0x5ffa:xiān # 忺
+0x5ffb:xīn # 忻
+0x5ffc:kāng,hàng # 忼
+0x5ffd:hū # 忽
+0x5ffe:kài,xì # 忾
+0x5fff:fèn # 忿
+0x6000:huái # 怀
+0x6001:tài # 态
+0x6002:sǒng # 怂
+0x6003:wǔ # 怃
+0x6004:òu # 怄
+0x6005:chàng # 怅
+0x6006:chuàng # 怆
+0x6007:jù # 怇
+0x6008:yì # 怈
+0x6009:bǎo,bào # 怉
+0x600a:chāo # 怊
+0x600b:mín,mén # 怋
+0x600c:pēi # 怌
+0x600d:zuò,zhà # 怍
+0x600e:zěn # 怎
+0x600f:yàng # 怏
+0x6010:kòu,jù # 怐
+0x6011:bàn # 怑
+0x6012:nù # 怒
+0x6013:náo,niú # 怓
+0x6014:zhēng # 怔
+0x6015:pà # 怕
+0x6016:bù # 怖
+0x6017:tiē,zhān # 怗
+0x6018:hù,gù # 怘
+0x6019:hù # 怙
+0x601a:cū,jù,zū # 怚
+0x601b:dá # 怛
+0x601c:lián # 怜
+0x601d:sī,sāi # 思
+0x601e:yóu,chóu # 怞
+0x601f:dì # 怟
+0x6020:dài # 怠
+0x6021:yí # 怡
+0x6022:tū,dié # 怢
+0x6023:yóu # 怣
+0x6024:fū # 怤
+0x6025:jí # 急
+0x6026:pēng # 怦
+0x6027:xìng # 性
+0x6028:yuàn # 怨
+0x6029:ní # 怩
+0x602a:guài # 怪
+0x602b:fú # 怫
+0x602c:xì # 怬
+0x602d:bì # 怭
+0x602e:yōu,yào # 怮
+0x602f:qiè # 怯
+0x6030:xuàn # 怰
+0x6031:cōng # 怱
+0x6032:bǐng # 怲
+0x6033:huǎng # 怳
+0x6034:xù,xuè # 怴
+0x6035:chù # 怵
+0x6036:bì,pī # 怶
+0x6037:shù # 怷
+0x6038:xī,shù # 怸
+0x6039:tān # 怹
+0x603b:zǒng # 总
+0x603c:duì # 怼
+0x603f:yì # 怿
+0x6040:shì # 恀
+0x6041:nèn,nín # 恁
+0x6042:xún # 恂
+0x6043:shì # 恃
+0x6044:xì # 恄
+0x6045:lǎo # 恅
+0x6046:héng # 恆
+0x6047:kuāng # 恇
+0x6048:móu # 恈
+0x6049:zhǐ # 恉
+0x604a:xié # 恊
+0x604b:liàn # 恋
+0x604c:tiāo,yáo # 恌
+0x604d:huǎng # 恍
+0x604e:dié # 恎
+0x604f:hào # 恏
+0x6050:kǒng # 恐
+0x6051:guǐ # 恑
+0x6052:héng # 恒
+0x6053:xī,qī,xù # 恓
+0x6054:xiào,jiǎo # 恔
+0x6055:shù # 恕
+0x6057:hū,kuā # 恗
+0x6058:qiū # 恘
+0x6059:yàng # 恙
+0x605a:huì # 恚
+0x605b:huí # 恛
+0x605c:chì # 恜
+0x605d:jiá # 恝
+0x605e:yí # 恞
+0x605f:xiōng # 恟
+0x6060:guài # 恠
+0x6061:lìn # 恡
+0x6062:huī # 恢
+0x6063:zì # 恣
+0x6064:xù # 恤
+0x6065:chǐ # 恥
+0x6066:shàng # 恦
+0x6067:nǜ # 恧
+0x6068:hèn # 恨
+0x6069:ēn # 恩
+0x606a:kè # 恪
+0x606b:dòng # 恫
+0x606c:tián # 恬
+0x606d:gōng # 恭
+0x606e:quán,zhuān # 恮
+0x606f:xī # 息
+0x6070:qià # 恰
+0x6071:yuè # 恱
+0x6072:pēng # 恲
+0x6073:kěn # 恳
+0x6074:dé # 恴
+0x6075:huì # 恵
+0x6076:è,wù,ě,wū # 恶
+0x6078:tòng # 恸
+0x6079:yān # 恹
+0x607a:kǎi # 恺
+0x607b:cè # 恻
+0x607c:nǎo # 恼
+0x607d:yùn # 恽
+0x607e:máng # 恾
+0x607f:yǒng # 恿
+0x6080:yǒng # 悀
+0x6081:yuān,juàn # 悁
+0x6082:pī,pǐ # 悂
+0x6083:kǔn # 悃
+0x6084:qiǎo,qiāo # 悄
+0x6085:yuè # 悅
+0x6086:yù,shū # 悆
+0x6087:tú # 悇
+0x6088:jiè,kè # 悈
+0x6089:xī # 悉
+0x608a:zhé # 悊
+0x608b:lìn # 悋
+0x608c:tì # 悌
+0x608d:hàn # 悍
+0x608e:hào,jiào # 悎
+0x608f:qiè # 悏
+0x6090:tì # 悐
+0x6091:bù # 悑
+0x6092:yì # 悒
+0x6093:qiàn # 悓
+0x6094:huǐ # 悔
+0x6095:xī # 悕
+0x6096:bèi # 悖
+0x6097:mán,mèn # 悗
+0x6098:yī,yì # 悘
+0x6099:hēng,hèng # 悙
+0x609a:sǒng # 悚
+0x609b:quān # 悛
+0x609c:chěng # 悜
+0x609d:kuī,lǐ # 悝
+0x609e:wù # 悞
+0x609f:wù # 悟
+0x60a0:yōu # 悠
+0x60a1:lí # 悡
+0x60a2:liàng # 悢
+0x60a3:huàn # 患
+0x60a4:cōng # 悤
+0x60a5:yì,niàn # 悥
+0x60a6:yuè # 悦
+0x60a7:lì # 悧
+0x60a8:nín # 您
+0x60a9:nǎo # 悩
+0x60aa:è # 悪
+0x60ab:què # 悫
+0x60ac:xuán # 悬
+0x60ad:qiān # 悭
+0x60ae:wù # 悮
+0x60af:mǐn # 悯
+0x60b0:cóng # 悰
+0x60b1:fěi # 悱
+0x60b2:bēi # 悲
+0x60b3:dé # 悳
+0x60b4:cuì # 悴
+0x60b5:chàng # 悵
+0x60b6:mèn,mēn # 悶
+0x60b7:lì # 悷
+0x60b8:jì # 悸
+0x60b9:guàn # 悹
+0x60ba:guàn # 悺
+0x60bb:xìng # 悻
+0x60bc:dào # 悼
+0x60bd:qī # 悽
+0x60be:kōng,kǒng # 悾
+0x60bf:tiǎn # 悿
+0x60c0:lǔn,lùn # 惀
+0x60c1:xī # 惁
+0x60c2:kǎn # 惂
+0x60c3:gǔn # 惃
+0x60c4:nì # 惄
+0x60c5:qíng # 情
+0x60c6:chóu # 惆
+0x60c7:dūn # 惇
+0x60c8:guǒ # 惈
+0x60c9:zhān # 惉
+0x60ca:jīng # 惊
+0x60cb:wǎn # 惋
+0x60cc:yuān,wǎn # 惌
+0x60cd:jīn # 惍
+0x60ce:jì # 惎
+0x60cf:lán,lín # 惏
+0x60d0:yù,xù # 惐
+0x60d1:huò # 惑
+0x60d2:hé,hè # 惒
+0x60d3:juàn,quán # 惓
+0x60d4:tán,dàn # 惔
+0x60d5:tì # 惕
+0x60d6:tì # 惖
+0x60d7:niàn # 惗
+0x60d8:wǎng # 惘
+0x60d9:chuò,chuì # 惙
+0x60da:hū # 惚
+0x60db:hūn,mèn # 惛
+0x60dc:xī # 惜
+0x60dd:chǎng,tǎng # 惝
+0x60de:xīn # 惞
+0x60df:wéi # 惟
+0x60e0:huì # 惠
+0x60e1:è,wù,ě,wū # 惡
+0x60e2:suǒ,ruǐ # 惢
+0x60e3:zǒng # 惣
+0x60e4:jiān # 惤
+0x60e5:yǒng # 惥
+0x60e6:diàn # 惦
+0x60e7:jù # 惧
+0x60e8:cǎn # 惨
+0x60e9:chéng # 惩
+0x60ea:dé # 惪
+0x60eb:bèi # 惫
+0x60ec:qiè # 惬
+0x60ed:cán # 惭
+0x60ee:dàn,dá # 惮
+0x60ef:guàn # 惯
+0x60f0:duò # 惰
+0x60f1:nǎo # 惱
+0x60f2:yùn # 惲
+0x60f3:xiǎng # 想
+0x60f4:zhuì # 惴
+0x60f5:dié # 惵
+0x60f6:huáng # 惶
+0x60f7:chǔn # 惷
+0x60f8:qióng # 惸
+0x60f9:rě # 惹
+0x60fa:xīng # 惺
+0x60fb:cè # 惻
+0x60fc:biǎn # 惼
+0x60fd:mǐn # 惽
+0x60fe:zōng # 惾
+0x60ff:tí,shì # 惿
+0x6100:qiǎo # 愀
+0x6101:chóu # 愁
+0x6102:bèi # 愂
+0x6103:xuān # 愃
+0x6104:wēi # 愄
+0x6105:gé # 愅
+0x6106:qiān # 愆
+0x6107:wěi # 愇
+0x6108:yù # 愈
+0x6109:yú,tōu # 愉
+0x610a:bì # 愊
+0x610b:xuān # 愋
+0x610c:huàn # 愌
+0x610d:mǐn # 愍
+0x610e:bì # 愎
+0x610f:yì # 意
+0x6110:miǎn # 愐
+0x6111:yǒng # 愑
+0x6112:qì,kài # 愒
+0x6113:dàng,shāng,táng,yáng # 愓
+0x6114:yīn # 愔
+0x6115:è # 愕
+0x6116:chén,xìn,dān # 愖
+0x6117:mào # 愗
+0x6118:kè,qià # 愘
+0x6119:kè # 愙
+0x611a:yú # 愚
+0x611b:ài # 愛
+0x611c:qiè # 愜
+0x611d:yǎn # 愝
+0x611e:nuò # 愞
+0x611f:gǎn # 感
+0x6120:yùn # 愠
+0x6121:còng,sōng # 愡
+0x6122:sāi,sī,sǐ # 愢
+0x6123:lèng # 愣
+0x6124:fèn # 愤
+0x6126:kuì # 愦
+0x6127:kuì # 愧
+0x6128:què # 愨
+0x6129:gōng,gòng,hǒng # 愩
+0x612a:yún # 愪
+0x612b:sù # 愫
+0x612c:sù,shuò # 愬
+0x612d:qí # 愭
+0x612e:yáo,yào # 愮
+0x612f:sǒng # 愯
+0x6130:huàng # 愰
+0x6131:jí # 愱
+0x6132:gǔ # 愲
+0x6133:jù # 愳
+0x6134:chuàng # 愴
+0x6135:nì # 愵
+0x6136:xié # 愶
+0x6137:kǎi # 愷
+0x6138:zhěng # 愸
+0x6139:yǒng # 愹
+0x613a:cǎo # 愺
+0x613b:xùn # 愻
+0x613c:shèn # 愼
+0x613d:bó # 愽
+0x613e:kài,xì # 愾
+0x613f:yuàn # 愿
+0x6140:xì,xié # 慀
+0x6141:hùn # 慁
+0x6142:yǒng # 慂
+0x6143:yǎng # 慃
+0x6144:lì # 慄
+0x6145:cǎo,sāo # 慅
+0x6146:tāo # 慆
+0x6147:yīn # 慇
+0x6148:cí # 慈
+0x6149:xù,chù # 慉
+0x614a:qiàn,qiè # 慊
+0x614b:tài # 態
+0x614c:huāng # 慌
+0x614d:yùn # 慍
+0x614e:shèn # 慎
+0x614f:mǐng # 慏
+0x6151:shè # 慑
+0x6152:cáo,cóng # 慒
+0x6153:piāo # 慓
+0x6154:mù # 慔
+0x6155:mù # 慕
+0x6156:guó # 慖
+0x6157:chì # 慗
+0x6158:cǎn # 慘
+0x6159:cán # 慙
+0x615a:cán # 慚
+0x615b:cuī # 慛
+0x615c:mín # 慜
+0x615d:tè # 慝
+0x615e:zhāng # 慞
+0x615f:tòng # 慟
+0x6160:ào,áo # 慠
+0x6161:shuǎng # 慡
+0x6162:màn # 慢
+0x6163:guàn # 慣
+0x6164:què # 慤
+0x6165:zào # 慥
+0x6166:jiù # 慦
+0x6167:huì # 慧
+0x6168:kǎi # 慨
+0x6169:lián,liǎn # 慩
+0x616a:òu # 慪
+0x616b:sǒng # 慫
+0x616c:qín,jìn,jǐn # 慬
+0x616d:yìn # 慭
+0x616e:lǜ # 慮
+0x616f:shāng # 慯
+0x6170:wèi # 慰
+0x6171:tuán # 慱
+0x6172:mán # 慲
+0x6173:qiān # 慳
+0x6174:shè # 慴
+0x6175:yōng # 慵
+0x6176:qìng # 慶
+0x6177:kāng # 慷
+0x6178:dì,chì # 慸
+0x6179:zhí,zhé # 慹
+0x617a:lóu,lǚ # 慺
+0x617b:juàn # 慻
+0x617c:qī # 慼
+0x617d:qī # 慽
+0x617e:yù # 慾
+0x617f:píng # 慿
+0x6180:liáo # 憀
+0x6181:còng # 憁
+0x6182:yōu # 憂
+0x6183:chōng # 憃
+0x6184:zhī,zhì # 憄
+0x6185:tòng # 憅
+0x6186:chēng # 憆
+0x6187:qì # 憇
+0x6188:qū # 憈
+0x6189:péng # 憉
+0x618a:bèi # 憊
+0x618b:biē # 憋
+0x618c:qióng # 憌
+0x618d:jiāo # 憍
+0x618e:zēng # 憎
+0x618f:chì # 憏
+0x6190:lián # 憐
+0x6191:píng # 憑
+0x6192:kuì # 憒
+0x6193:huì # 憓
+0x6194:qiáo # 憔
+0x6195:chéng,dèng,zhèng # 憕
+0x6196:yìn # 憖
+0x6197:yìn # 憗
+0x6198:xǐ,xī # 憘
+0x6199:xǐ # 憙
+0x619a:dàn,dá # 憚
+0x619b:tán # 憛
+0x619c:duò # 憜
+0x619d:duì # 憝
+0x619e:duì,dùn,tūn # 憞
+0x619f:sù # 憟
+0x61a0:jué # 憠
+0x61a1:cè # 憡
+0x61a2:xiāo,jiāo # 憢
+0x61a3:fān # 憣
+0x61a4:fèn # 憤
+0x61a5:láo # 憥
+0x61a6:lào,láo # 憦
+0x61a7:chōng # 憧
+0x61a8:hān # 憨
+0x61a9:qì # 憩
+0x61aa:xián,xiàn # 憪
+0x61ab:mǐn # 憫
+0x61ac:jǐng # 憬
+0x61ad:liǎo,liáo # 憭
+0x61ae:wǔ # 憮
+0x61af:cǎn # 憯
+0x61b0:jué # 憰
+0x61b1:cù # 憱
+0x61b2:xiàn # 憲
+0x61b3:tǎn # 憳
+0x61b4:shéng # 憴
+0x61b5:pī # 憵
+0x61b6:yì # 憶
+0x61b7:chù # 憷
+0x61b8:xiān # 憸
+0x61b9:náo,nǎo,náng # 憹
+0x61ba:dàn # 憺
+0x61bb:tǎn # 憻
+0x61bc:jǐng,jìng # 憼
+0x61bd:sōng # 憽
+0x61be:hàn # 憾
+0x61bf:jiǎo,jǐ # 憿
+0x61c0:wèi # 懀
+0x61c1:xuān,huān # 懁
+0x61c2:dǒng # 懂
+0x61c3:qín # 懃
+0x61c4:qín # 懄
+0x61c5:jù # 懅
+0x61c6:cǎo,sāo,sào # 懆
+0x61c7:kěn # 懇
+0x61c8:xiè # 懈
+0x61c9:yīng,yìng # 應
+0x61ca:ào # 懊
+0x61cb:mào # 懋
+0x61cc:yì # 懌
+0x61cd:lǐn # 懍
+0x61ce:sè # 懎
+0x61cf:jùn # 懏
+0x61d0:huái # 懐
+0x61d1:mèn # 懑
+0x61d2:lǎn # 懒
+0x61d3:ài # 懓
+0x61d4:lǐn # 懔
+0x61d5:yān # 懕
+0x61d6:guō # 懖
+0x61d7:xià # 懗
+0x61d8:chì # 懘
+0x61d9:yǔ,yú # 懙
+0x61da:yìn # 懚
+0x61db:dāi # 懛
+0x61dc:mèng,méng,měng # 懜
+0x61dd:ài,yì,nǐ # 懝
+0x61de:méng,měng # 懞
+0x61df:duì # 懟
+0x61e0:qí,jī,jì # 懠
+0x61e1:mǒ # 懡
+0x61e2:lán,xiàn # 懢
+0x61e3:mèn # 懣
+0x61e4:chóu # 懤
+0x61e5:zhì # 懥
+0x61e6:nuò # 懦
+0x61e7:nuò # 懧
+0x61e8:yān # 懨
+0x61e9:yǎng # 懩
+0x61ea:bó # 懪
+0x61eb:zhì # 懫
+0x61ec:kuàng # 懬
+0x61ed:kuǎng # 懭
+0x61ee:yōu,yǒu # 懮
+0x61ef:fū # 懯
+0x61f0:liú,liǔ # 懰
+0x61f1:miè # 懱
+0x61f2:chéng # 懲
+0x61f4:chàn # 懴
+0x61f5:měng # 懵
+0x61f6:lǎn # 懶
+0x61f7:huái # 懷
+0x61f8:xuán # 懸
+0x61f9:ràng # 懹
+0x61fa:chàn # 懺
+0x61fb:jì # 懻
+0x61fc:jù # 懼
+0x61fd:huān # 懽
+0x61fe:shè # 懾
+0x61ff:yì # 懿
+0x6200:liàn # 戀
+0x6201:nǎn # 戁
+0x6202:mí,mó # 戂
+0x6203:tǎng # 戃
+0x6204:jué # 戄
+0x6205:gàng,zhuàng # 戅
+0x6206:gàng,zhuàng # 戆
+0x6207:gàng,zhuàng # 戇
+0x6208:gē # 戈
+0x6209:yuè # 戉
+0x620a:wù # 戊
+0x620b:jiān # 戋
+0x620c:xū # 戌
+0x620d:shù # 戍
+0x620e:róng # 戎
+0x620f:xì,hū # 戏
+0x6210:chéng # 成
+0x6211:wǒ # 我
+0x6212:jiè # 戒
+0x6213:gē # 戓
+0x6214:jiān # 戔
+0x6215:qiāng # 戕
+0x6216:huò # 或
+0x6217:qiāng,qiàng # 戗
+0x6218:zhàn # 战
+0x6219:dòng # 戙
+0x621a:qī # 戚
+0x621b:jiá # 戛
+0x621c:dié # 戜
+0x621d:zéi # 戝
+0x621e:jiá # 戞
+0x621f:jǐ # 戟
+0x6220:zhí # 戠
+0x6221:kān # 戡
+0x6222:jí # 戢
+0x6223:kuí # 戣
+0x6224:gài # 戤
+0x6225:děng # 戥
+0x6226:zhàn # 戦
+0x6227:qiāng,qiàng # 戧
+0x6228:gē # 戨
+0x6229:jiǎn # 戩
+0x622a:jié # 截
+0x622b:yù # 戫
+0x622c:jiǎn # 戬
+0x622d:yǎn # 戭
+0x622e:lù # 戮
+0x622f:xì,hū # 戯
+0x6230:zhàn # 戰
+0x6231:xì,hū # 戱
+0x6232:xì,hū # 戲
+0x6233:chuō # 戳
+0x6234:dài # 戴
+0x6235:qú # 戵
+0x6236:hù # 戶
+0x6237:hù # 户
+0x6238:hù # 戸
+0x6239:è # 戹
+0x623a:shì # 戺
+0x623b:tì # 戻
+0x623c:mǎo # 戼
+0x623d:hù # 戽
+0x623e:lì # 戾
+0x623f:fáng,páng # 房
+0x6240:suǒ # 所
+0x6241:biǎn,piān # 扁
+0x6242:diàn # 扂
+0x6243:jiōng # 扃
+0x6244:shǎng,jiōng # 扄
+0x6245:yí # 扅
+0x6246:yǐ # 扆
+0x6247:shàn,shān # 扇
+0x6248:hù # 扈
+0x6249:fēi # 扉
+0x624a:yǎn # 扊
+0x624b:shǒu # 手
+0x624d:cái # 才
+0x624e:zā,zhā,zhá # 扎
+0x624f:qiú # 扏
+0x6250:lè,lì,cái # 扐
+0x6251:pū # 扑
+0x6252:bā,pá # 扒
+0x6253:dǎ,dá # 打
+0x6254:rēng # 扔
+0x6255:fǎn,fú # 払
+0x6257:zài # 扗
+0x6258:tuō # 托
+0x6259:zhàng # 扙
+0x625a:diǎo,dí,yuē,lì # 扚
+0x625b:káng,gāng # 扛
+0x625c:yū,wū # 扜
+0x625d:yū,wū,kū # 扝
+0x625e:hàn # 扞
+0x625f:shēn # 扟
+0x6260:chā # 扠
+0x6261:tuō,chǐ,yǐ # 扡
+0x6262:gǔ,xì,gē,jié # 扢
+0x6263:kòu # 扣
+0x6264:wù # 扤
+0x6265:dèn # 扥
+0x6266:qiān # 扦
+0x6267:zhí # 执
+0x6268:rèn # 扨
+0x6269:kuò # 扩
+0x626a:mén # 扪
+0x626b:sǎo,sào # 扫
+0x626c:yáng # 扬
+0x626d:niǔ # 扭
+0x626e:bàn # 扮
+0x626f:chě # 扯
+0x6270:rǎo # 扰
+0x6271:xī,chā,qì # 扱
+0x6272:qián,qín # 扲
+0x6273:bān # 扳
+0x6274:jiá # 扴
+0x6275:yú # 扵
+0x6276:fú # 扶
+0x6277:bā,ào # 扷
+0x6278:xī,zhé # 扸
+0x6279:pī # 批
+0x627a:zhǐ # 扺
+0x627b:zhì,sǔn,kǎn # 扻
+0x627c:è # 扼
+0x627d:dèn # 扽
+0x627e:zhǎo # 找
+0x627f:chéng # 承
+0x6280:jì # 技
+0x6281:yǎn # 抁
+0x6282:kuáng,wǎng,zài # 抂
+0x6283:biàn # 抃
+0x6284:chāo # 抄
+0x6285:jū # 抅
+0x6286:wěn # 抆
+0x6287:hú,gǔ # 抇
+0x6288:yuè # 抈
+0x6289:jué # 抉
+0x628a:bǎ,bà # 把
+0x628b:qìn # 抋
+0x628c:dǎn,shěn # 抌
+0x628d:zhěng # 抍
+0x628e:yǔn # 抎
+0x628f:wán # 抏
+0x6290:nè,nì,ruì,nà # 抐
+0x6291:yì # 抑
+0x6292:shū # 抒
+0x6293:zhuā # 抓
+0x6294:póu # 抔
+0x6295:tóu # 投
+0x6296:dǒu # 抖
+0x6297:kàng # 抗
+0x6298:zhē,zhé,shé # 折
+0x6299:póu,pōu,fū # 抙
+0x629a:fǔ # 抚
+0x629b:pāo # 抛
+0x629c:bá # 抜
+0x629d:ǎo,ào,niù # 抝
+0x629e:zé # 択
+0x629f:tuán # 抟
+0x62a0:kōu # 抠
+0x62a1:lūn,lún # 抡
+0x62a2:qiāng,qiǎng,chēng # 抢
+0x62a4:hù # 护
+0x62a5:bào # 报
+0x62a6:bǐng # 抦
+0x62a7:zhǐ,zhǎi # 抧
+0x62a8:pēng # 抨
+0x62a9:nán # 抩
+0x62aa:bù,pū # 抪
+0x62ab:pī # 披
+0x62ac:tái # 抬
+0x62ad:yǎo,tāo # 抭
+0x62ae:zhěn # 抮
+0x62af:zhā # 抯
+0x62b0:yāng # 抰
+0x62b1:bào # 抱
+0x62b2:hē,hè,qiā # 抲
+0x62b3:nǐ,ní # 抳
+0x62b4:yè # 抴
+0x62b5:dǐ # 抵
+0x62b6:chì # 抶
+0x62b7:pī,pēi # 抷
+0x62b8:jiā # 抸
+0x62b9:mǒ,mò,mā # 抹
+0x62ba:mèi # 抺
+0x62bb:chēn # 抻
+0x62bc:yā # 押
+0x62bd:chōu # 抽
+0x62be:qū # 抾
+0x62bf:mǐn # 抿
+0x62c0:zhù # 拀
+0x62c1:jiā,yá # 拁
+0x62c2:fú,bì # 拂
+0x62c3:zhǎ # 拃
+0x62c4:zhǔ # 拄
+0x62c5:dān,dàn,dǎn # 担
+0x62c6:chāi,cā # 拆
+0x62c7:mǔ # 拇
+0x62c8:niān # 拈
+0x62c9:lā,lá # 拉
+0x62ca:fǔ # 拊
+0x62cb:pāo # 拋
+0x62cc:bàn,pàn # 拌
+0x62cd:pāi # 拍
+0x62ce:līn # 拎
+0x62cf:ná # 拏
+0x62d0:guǎi # 拐
+0x62d1:qián # 拑
+0x62d2:jù # 拒
+0x62d3:tuò,tà,zhí # 拓
+0x62d4:bá # 拔
+0x62d5:tuō # 拕
+0x62d6:tuō # 拖
+0x62d7:ǎo,ào,niù # 拗
+0x62d8:jū,gōu # 拘
+0x62d9:zhuō # 拙
+0x62da:pàn,pīn,fān # 拚
+0x62db:zhāo # 招
+0x62dc:bài # 拜
+0x62dd:bài # 拝
+0x62de:dǐ # 拞
+0x62df:nǐ # 拟
+0x62e0:jù # 拠
+0x62e1:kuò # 拡
+0x62e2:lǒng # 拢
+0x62e3:jiǎn # 拣
+0x62e5:yōng # 拥
+0x62e6:lán # 拦
+0x62e7:níng,nǐng,nìng # 拧
+0x62e8:bō # 拨
+0x62e9:zé,zhái # 择
+0x62ea:qiān # 拪
+0x62eb:hén # 拫
+0x62ec:kuò,guā # 括
+0x62ed:shì # 拭
+0x62ee:jié,jiá # 拮
+0x62ef:zhěng # 拯
+0x62f0:nǐn # 拰
+0x62f1:gǒng # 拱
+0x62f2:gǒng # 拲
+0x62f3:quán # 拳
+0x62f4:shuān # 拴
+0x62f5:cún,zùn # 拵
+0x62f6:zā,zǎn # 拶
+0x62f7:kǎo # 拷
+0x62f8:yí,chǐ,hài # 拸
+0x62f9:xié # 拹
+0x62fa:cè,sè,chuò # 拺
+0x62fb:huī # 拻
+0x62fc:pīn # 拼
+0x62fd:zhuài,zhuāi,yè # 拽
+0x62fe:shí,shè # 拾
+0x62ff:ná # 拿
+0x6300:bāi # 挀
+0x6301:chí # 持
+0x6302:guà # 挂
+0x6303:zhì # 挃
+0x6304:kuò,guāng # 挄
+0x6305:duò # 挅
+0x6306:duǒ,duò # 挆
+0x6307:zhǐ # 指
+0x6308:qiè # 挈
+0x6309:àn # 按
+0x630a:nòng # 挊
+0x630b:zhèn # 挋
+0x630c:gé # 挌
+0x630d:jiào # 挍
+0x630e:kuà,kū # 挎
+0x630f:dòng # 挏
+0x6310:rú,ná # 挐
+0x6311:tiāo,tiǎo # 挑
+0x6312:liè # 挒
+0x6313:zhā # 挓
+0x6314:lǚ # 挔
+0x6315:dié,shè # 挕
+0x6316:wā # 挖
+0x6317:jué # 挗
+0x6319:jǔ # 挙
+0x631a:zhì # 挚
+0x631b:luán # 挛
+0x631c:yà,yǎ # 挜
+0x631d:zhuā,wō # 挝
+0x631e:tà # 挞
+0x631f:xié,jiā # 挟
+0x6320:náo # 挠
+0x6321:dǎng,dàng # 挡
+0x6322:jiǎo # 挢
+0x6323:zhèng,zhēng # 挣
+0x6324:jǐ # 挤
+0x6325:huī # 挥
+0x6326:xián # 挦
+0x6328:āi,ái # 挨
+0x6329:tuō,shuì # 挩
+0x632a:nuó # 挪
+0x632b:cuò # 挫
+0x632c:bó # 挬
+0x632d:gěng # 挭
+0x632e:tǐ,tì # 挮
+0x632f:zhèn # 振
+0x6330:chéng # 挰
+0x6331:suō,shā # 挱
+0x6332:suō,shā # 挲
+0x6333:kēng,qiān # 挳
+0x6334:měi # 挴
+0x6335:nòng # 挵
+0x6336:jú # 挶
+0x6337:bàng,péng # 挷
+0x6338:jiǎn # 挸
+0x6339:yì # 挹
+0x633a:tǐng # 挺
+0x633b:shān # 挻
+0x633c:ruó # 挼
+0x633d:wǎn # 挽
+0x633e:xié,jiā # 挾
+0x633f:chā # 挿
+0x6340:péng,féng # 捀
+0x6341:jiǎo,kù # 捁
+0x6342:wǔ # 捂
+0x6343:jùn # 捃
+0x6344:jiù,jū,qiú # 捄
+0x6345:tǒng # 捅
+0x6346:kǔn # 捆
+0x6347:huò,chì # 捇
+0x6348:tú,shū,chá # 捈
+0x6349:zhuō # 捉
+0x634a:póu,pōu,fū # 捊
+0x634b:luō,lǚ # 捋
+0x634c:bā # 捌
+0x634d:hàn # 捍
+0x634e:shāo,shào # 捎
+0x634f:niē # 捏
+0x6350:juān # 捐
+0x6351:zè # 捑
+0x6352:shù,sǒng,sōu # 捒
+0x6353:yé,yú # 捓
+0x6354:jué,zhuó # 捔
+0x6355:bǔ # 捕
+0x6356:wán # 捖
+0x6357:bù,pú,zhì # 捗
+0x6358:zùn # 捘
+0x6359:yè # 捙
+0x635a:zhāi # 捚
+0x635b:lǚ # 捛
+0x635c:sōu # 捜
+0x635d:tuō,shuì # 捝
+0x635e:lāo # 捞
+0x635f:sǔn # 损
+0x6360:bāng # 捠
+0x6361:jiǎn # 捡
+0x6362:huàn # 换
+0x6363:dǎo # 捣
+0x6365:wàn,wǎn,wān,yù # 捥
+0x6366:qín # 捦
+0x6367:pěng # 捧
+0x6368:shě # 捨
+0x6369:liè # 捩
+0x636a:mín # 捪
+0x636b:mén # 捫
+0x636c:fǔ,fù,bǔ # 捬
+0x636d:bǎi # 捭
+0x636e:jù,jū # 据
+0x636f:dáo # 捯
+0x6370:wǒ,luò,luǒ # 捰
+0x6371:ái # 捱
+0x6372:juǎn,quán # 捲
+0x6373:yuè # 捳
+0x6374:zǒng # 捴
+0x6375:chēn # 捵
+0x6376:chuí # 捶
+0x6377:jié # 捷
+0x6378:tū # 捸
+0x6379:bèn # 捹
+0x637a:nà # 捺
+0x637b:niǎn,niē # 捻
+0x637c:ruó,wěi,ré # 捼
+0x637d:zuó # 捽
+0x637e:wò,xiá # 捾
+0x637f:qī # 捿
+0x6380:xiān # 掀
+0x6381:chéng # 掁
+0x6382:diān # 掂
+0x6383:sǎo,sào # 掃
+0x6384:lūn,lún # 掄
+0x6385:qìng,qiàn # 掅
+0x6386:gāng # 掆
+0x6387:duō # 掇
+0x6388:shòu # 授
+0x6389:diào # 掉
+0x638a:pǒu,póu # 掊
+0x638b:dǐ # 掋
+0x638c:zhǎng # 掌
+0x638d:hùn # 掍
+0x638e:jǐ # 掎
+0x638f:tāo # 掏
+0x6390:qiā # 掐
+0x6391:qí # 掑
+0x6392:pái,pǎi # 排
+0x6393:shū # 掓
+0x6394:qiān,wàn # 掔
+0x6395:líng # 掕
+0x6396:yè,yē # 掖
+0x6397:yà,yǎ # 掗
+0x6398:jué # 掘
+0x6399:zhēng,zhèng # 掙
+0x639a:liǎng # 掚
+0x639b:guà # 掛
+0x639c:nǐ,niè,yì # 掜
+0x639d:huò,xù # 掝
+0x639e:shàn,yàn,yǎn # 掞
+0x639f:zhěng,dìng # 掟
+0x63a0:lüè # 掠
+0x63a1:cǎi # 採
+0x63a2:tàn # 探
+0x63a3:chè # 掣
+0x63a4:bīng # 掤
+0x63a5:jiē # 接
+0x63a6:tì # 掦
+0x63a7:kòng # 控
+0x63a8:tuī # 推
+0x63a9:yǎn # 掩
+0x63aa:cuò # 措
+0x63ab:zōu,zhōu,chōu # 掫
+0x63ac:jū # 掬
+0x63ad:tiàn # 掭
+0x63ae:qián # 掮
+0x63af:kèn # 掯
+0x63b0:bāi # 掰
+0x63b1:pá # 掱
+0x63b2:jiē # 掲
+0x63b3:lǔ # 掳
+0x63b4:guó # 掴
+0x63b7:zhì # 掷
+0x63b8:dǎn,shàn # 掸
+0x63ba:chān,xiān,càn,shǎn # 掺
+0x63bb:sāo # 掻
+0x63bc:guàn # 掼
+0x63bd:pèng # 掽
+0x63be:yuàn # 掾
+0x63bf:nuò # 掿
+0x63c0:jiǎn # 揀
+0x63c1:zhēng,kēng # 揁
+0x63c2:jiū,yóu # 揂
+0x63c3:jiǎn,jiān # 揃
+0x63c4:yú # 揄
+0x63c5:yán # 揅
+0x63c6:kuí # 揆
+0x63c7:nǎn # 揇
+0x63c8:hōng # 揈
+0x63c9:róu # 揉
+0x63ca:pì,chè # 揊
+0x63cb:wēi # 揋
+0x63cc:sāi,zǒng,cāi # 揌
+0x63cd:zòu # 揍
+0x63ce:xuān # 揎
+0x63cf:miáo # 描
+0x63d0:tí,dī,dǐ # 提
+0x63d1:niē # 揑
+0x63d2:chā # 插
+0x63d3:shì # 揓
+0x63d4:zǒng,sōng # 揔
+0x63d5:zhèn,zhēn # 揕
+0x63d6:yī # 揖
+0x63d7:xún # 揗
+0x63d8:huáng,yóng # 揘
+0x63d9:biǎn # 揙
+0x63da:yáng # 揚
+0x63db:huàn # 換
+0x63dc:yǎn # 揜
+0x63dd:zǎn,zuàn # 揝
+0x63de:ǎn # 揞
+0x63df:xū,jū # 揟
+0x63e0:yà # 揠
+0x63e1:wò # 握
+0x63e2:ké,qiā # 揢
+0x63e3:chuǎi,chuài,chuāi,tuán,zhuī # 揣
+0x63e4:jí # 揤
+0x63e5:tì,dì # 揥
+0x63e6:là,lá # 揦
+0x63e7:là # 揧
+0x63e8:chéng # 揨
+0x63e9:kāi # 揩
+0x63ea:jiū # 揪
+0x63eb:jiū # 揫
+0x63ec:tú # 揬
+0x63ed:jiē,qì # 揭
+0x63ee:huī # 揮
+0x63ef:gèn # 揯
+0x63f0:chòng,dǒng # 揰
+0x63f1:xiāo # 揱
+0x63f2:shé,dié,yè # 揲
+0x63f3:xiē # 揳
+0x63f4:yuán # 援
+0x63f5:qián,jiàn,jiǎn # 揵
+0x63f6:yé # 揶
+0x63f7:chā # 揷
+0x63f8:zhā # 揸
+0x63f9:bēi # 揹
+0x63fa:yáo # 揺
+0x63fd:lǎn # 揽
+0x63fe:wèn # 揾
+0x63ff:qìn # 揿
+0x6400:chān # 搀
+0x6401:gē,gé # 搁
+0x6402:lǒu,lōu # 搂
+0x6403:zǒng # 搃
+0x6404:gèn # 搄
+0x6405:jiǎo # 搅
+0x6406:gòu # 搆
+0x6407:qìn # 搇
+0x6408:róng # 搈
+0x6409:què # 搉
+0x640a:chōu,zǒu # 搊
+0x640b:chuāi # 搋
+0x640c:zhǎn # 搌
+0x640d:sǔn # 損
+0x640e:sūn # 搎
+0x640f:bó # 搏
+0x6410:chù # 搐
+0x6411:róng,náng,nǎng # 搑
+0x6412:bàng,péng # 搒
+0x6413:cuō # 搓
+0x6414:sāo # 搔
+0x6415:kē,è # 搕
+0x6416:yáo # 搖
+0x6417:dǎo # 搗
+0x6418:zhī # 搘
+0x6419:nù,nuò,nòu # 搙
+0x641a:lā,xié,xiàn # 搚
+0x641b:jiān # 搛
+0x641c:sōu # 搜
+0x641d:qiǔ # 搝
+0x641e:gǎo # 搞
+0x641f:xiǎn,xiān # 搟
+0x6420:shuò # 搠
+0x6421:sǎng # 搡
+0x6422:jìn # 搢
+0x6423:miè # 搣
+0x6424:è # 搤
+0x6425:chuí # 搥
+0x6426:nuò # 搦
+0x6427:shān # 搧
+0x6428:tà # 搨
+0x6429:jié,zhé # 搩
+0x642a:táng # 搪
+0x642b:pán,bān,pó # 搫
+0x642c:bān # 搬
+0x642d:dā # 搭
+0x642e:lì # 搮
+0x642f:tāo # 搯
+0x6430:hú # 搰
+0x6431:zhì,nái # 搱
+0x6432:wā,wǎ,wà # 搲
+0x6433:huá # 搳
+0x6434:qiān # 搴
+0x6435:wèn # 搵
+0x6436:qiāng,qiǎng,chēng # 搶
+0x6437:tián,shēn # 搷
+0x6438:zhēn # 搸
+0x6439:è # 搹
+0x643a:xié # 携
+0x643b:ná,nuò # 搻
+0x643c:quán # 搼
+0x643d:chá # 搽
+0x643e:zhà # 搾
+0x643f:gé # 搿
+0x6440:wǔ # 摀
+0x6441:èn # 摁
+0x6442:shè # 摂
+0x6443:gāng # 摃
+0x6444:shè,niè # 摄
+0x6445:shū # 摅
+0x6446:bǎi # 摆
+0x6447:yáo # 摇
+0x6448:bìn # 摈
+0x6449:sōu # 摉
+0x644a:tān # 摊
+0x644b:sà,shā,shǎi # 摋
+0x644c:chǎn,sùn # 摌
+0x644d:suō # 摍
+0x644e:jiū,liú,liáo,jiǎo,náo # 摎
+0x644f:chōng # 摏
+0x6450:chuāng # 摐
+0x6451:guó,guāi # 摑
+0x6452:bìng # 摒
+0x6453:féng,pěng # 摓
+0x6454:shuāi # 摔
+0x6455:dì,tú,zhí # 摕
+0x6456:qì,jì,chá # 摖
+0x6458:zhāi # 摘
+0x6459:liǎn,liàn # 摙
+0x645a:chēng # 摚
+0x645b:chī # 摛
+0x645c:guàn # 摜
+0x645d:lù # 摝
+0x645e:luò # 摞
+0x645f:lǒu,lōu # 摟
+0x6460:zǒng # 摠
+0x6461:gài,xì # 摡
+0x6462:hù,chū # 摢
+0x6463:zhā # 摣
+0x6464:qiāng # 摤
+0x6465:tàng # 摥
+0x6466:huà # 摦
+0x6467:cuī # 摧
+0x6468:zhì,nái # 摨
+0x6469:mó,mā # 摩
+0x646a:jiāng,qiàng # 摪
+0x646b:guī # 摫
+0x646c:yǐng # 摬
+0x646d:zhí # 摭
+0x646e:áo,qiáo # 摮
+0x646f:zhì # 摯
+0x6470:niè,chè # 摰
+0x6471:mán,màn # 摱
+0x6472:chàn,cán # 摲
+0x6473:kōu # 摳
+0x6474:chū # 摴
+0x6475:sè,mí,sù # 摵
+0x6476:tuán # 摶
+0x6477:jiǎo,chāo # 摷
+0x6478:mō # 摸
+0x6479:mó # 摹
+0x647a:zhé # 摺
+0x647b:chān,xiān,càn,shǎn # 摻
+0x647c:kēng,qiān # 摼
+0x647d:biào,biāo # 摽
+0x647e:jiàng # 摾
+0x647f:yáo # 摿
+0x6480:gòu # 撀
+0x6481:qiān # 撁
+0x6482:liào # 撂
+0x6483:jī # 撃
+0x6484:yīng # 撄
+0x6485:juē,jué # 撅
+0x6486:piē # 撆
+0x6487:piē,piě # 撇
+0x6488:lāo # 撈
+0x6489:dūn # 撉
+0x648a:xiàn # 撊
+0x648b:ruán # 撋
+0x648c:guì # 撌
+0x648d:zǎn,zān,zēn,qián # 撍
+0x648e:yī # 撎
+0x648f:xián # 撏
+0x6490:chēng # 撐
+0x6491:chēng # 撑
+0x6492:sā,sǎ # 撒
+0x6493:náo # 撓
+0x6494:hòng # 撔
+0x6495:sī # 撕
+0x6496:hàn # 撖
+0x6497:héng,guàng # 撗
+0x6498:dā # 撘
+0x6499:zǔn # 撙
+0x649a:niǎn # 撚
+0x649b:lǐn # 撛
+0x649c:zhěng,chéng # 撜
+0x649d:huī,wéi # 撝
+0x649e:zhuàng # 撞
+0x649f:jiǎo # 撟
+0x64a0:jǐ # 撠
+0x64a1:cāo # 撡
+0x64a2:dǎn # 撢
+0x64a3:dǎn,shàn # 撣
+0x64a4:chè # 撤
+0x64a5:bō # 撥
+0x64a6:chě # 撦
+0x64a7:juē # 撧
+0x64a8:xiāo,sōu # 撨
+0x64a9:liāo,liáo # 撩
+0x64aa:bèn # 撪
+0x64ab:fǔ # 撫
+0x64ac:qiào # 撬
+0x64ad:bō # 播
+0x64ae:cuō,zuǒ # 撮
+0x64af:zhuó # 撯
+0x64b0:zhuàn # 撰
+0x64b1:wěi,tuǒ # 撱
+0x64b2:pū # 撲
+0x64b3:qìn # 撳
+0x64b4:dūn # 撴
+0x64b5:niǎn # 撵
+0x64b7:xié # 撷
+0x64b8:lū # 撸
+0x64b9:jiǎo # 撹
+0x64ba:cuān # 撺
+0x64bb:tà # 撻
+0x64bc:hàn # 撼
+0x64bd:qiào,yāo,jī # 撽
+0x64be:zhuā,wō # 撾
+0x64bf:jiǎn # 撿
+0x64c0:gǎn # 擀
+0x64c1:yōng # 擁
+0x64c2:léi,lèi # 擂
+0x64c3:nǎng # 擃
+0x64c4:lǔ # 擄
+0x64c5:shàn # 擅
+0x64c6:zhuó # 擆
+0x64c7:zé,zhái # 擇
+0x64c8:pǔ # 擈
+0x64c9:chuò # 擉
+0x64ca:jī # 擊
+0x64cb:dǎng,dàng # 擋
+0x64cc:sè # 擌
+0x64cd:cāo # 操
+0x64ce:qíng # 擎
+0x64cf:qíng,jǐng # 擏
+0x64d0:huàn # 擐
+0x64d1:jiē # 擑
+0x64d2:qín # 擒
+0x64d3:kuǎi # 擓
+0x64d4:dān,dàn # 擔
+0x64d5:xié # 擕
+0x64d6:qiā,jiā,yè # 擖
+0x64d7:pǐ,bò # 擗
+0x64d8:bò,bāi # 擘
+0x64d9:ào # 擙
+0x64da:jù,jū # 據
+0x64db:yè # 擛
+0x64de:sòu,sǒu # 擞
+0x64df:mí # 擟
+0x64e0:jǐ # 擠
+0x64e1:tái # 擡
+0x64e2:zhuó # 擢
+0x64e3:dǎo # 擣
+0x64e4:xǐng # 擤
+0x64e5:lǎn # 擥
+0x64e6:cā # 擦
+0x64e7:jǔ # 擧
+0x64e8:yē # 擨
+0x64e9:rǔ # 擩
+0x64ea:yè # 擪
+0x64eb:yè # 擫
+0x64ec:nǐ # 擬
+0x64ed:huò # 擭
+0x64ee:jié # 擮
+0x64ef:bìn # 擯
+0x64f0:níng,nǐng,nìng # 擰
+0x64f1:gē,gé # 擱
+0x64f2:zhì # 擲
+0x64f3:zhì,jié # 擳
+0x64f4:kuò # 擴
+0x64f5:mó # 擵
+0x64f6:jiàn # 擶
+0x64f7:xié # 擷
+0x64f8:liè,là # 擸
+0x64f9:tān # 擹
+0x64fa:bǎi # 擺
+0x64fb:sòu,sǒu # 擻
+0x64fc:lū # 擼
+0x64fd:lì,luò,yuè # 擽
+0x64fe:rǎo # 擾
+0x64ff:tī,zhì,zhāi # 擿
+0x6500:pān # 攀
+0x6501:yǎng # 攁
+0x6502:léi,lèi # 攂
+0x6503:cā,sǎ # 攃
+0x6504:shū # 攄
+0x6505:zǎn # 攅
+0x6506:niǎn # 攆
+0x6507:xiǎn # 攇
+0x6508:jùn,pèi # 攈
+0x6509:huō # 攉
+0x650a:lì,luò # 攊
+0x650b:là,lài # 攋
+0x650c:huàn # 攌
+0x650d:yíng # 攍
+0x650e:lú,luó # 攎
+0x650f:lǒng # 攏
+0x6510:qiān # 攐
+0x6511:qiān # 攑
+0x6512:zǎn,cuán # 攒
+0x6513:qiān # 攓
+0x6514:lán # 攔
+0x6515:xiān,jiān # 攕
+0x6516:yīng # 攖
+0x6517:méi # 攗
+0x6518:rǎng # 攘
+0x6519:chān # 攙
+0x651b:cuān # 攛
+0x651c:xié # 攜
+0x651d:shè,niè # 攝
+0x651e:luó # 攞
+0x651f:jùn # 攟
+0x6520:mí,mǐ,mó # 攠
+0x6521:chī # 攡
+0x6522:zǎn,cuán # 攢
+0x6523:luán # 攣
+0x6524:tān # 攤
+0x6525:zuàn # 攥
+0x6526:lì,shài # 攦
+0x6527:diān # 攧
+0x6528:wā # 攨
+0x6529:dǎng # 攩
+0x652a:jiǎo # 攪
+0x652b:jué # 攫
+0x652c:lǎn # 攬
+0x652d:lì,luǒ # 攭
+0x652e:nǎng # 攮
+0x652f:zhī # 支
+0x6530:guì # 攰
+0x6531:guǐ,guì # 攱
+0x6532:qī,yǐ,jī # 攲
+0x6533:xún # 攳
+0x6534:pū # 攴
+0x6535:pū # 攵
+0x6536:shōu # 收
+0x6537:kǎo # 攷
+0x6538:yōu # 攸
+0x6539:gǎi # 改
+0x653a:yǐ # 攺
+0x653b:gōng # 攻
+0x653c:gān,hàn # 攼
+0x653d:bān # 攽
+0x653e:fàng # 放
+0x653f:zhèng # 政
+0x6540:pò # 敀
+0x6541:diān # 敁
+0x6542:kòu # 敂
+0x6543:mǐn # 敃
+0x6544:wù,móu # 敄
+0x6545:gù # 故
+0x6546:hé # 敆
+0x6547:cè # 敇
+0x6548:xiào # 效
+0x6549:mǐ # 敉
+0x654a:chù,shōu # 敊
+0x654b:gé,guó,è # 敋
+0x654c:dí # 敌
+0x654d:xù # 敍
+0x654e:jiào,jiāo # 敎
+0x654f:mǐn # 敏
+0x6550:chén # 敐
+0x6551:jiù # 救
+0x6552:shēn # 敒
+0x6553:duó,duì # 敓
+0x6554:yǔ # 敔
+0x6555:chì # 敕
+0x6556:áo # 敖
+0x6557:bài # 敗
+0x6558:xù # 敘
+0x6559:jiào,jiāo # 教
+0x655a:duó,duì # 敚
+0x655b:liǎn # 敛
+0x655c:niè # 敜
+0x655d:bì # 敝
+0x655e:chǎng # 敞
+0x655f:diǎn # 敟
+0x6560:duō,què # 敠
+0x6561:yì # 敡
+0x6562:gǎn # 敢
+0x6563:sàn,sǎn # 散
+0x6564:kě # 敤
+0x6565:yàn # 敥
+0x6566:dūn,duì # 敦
+0x6567:qī,yǐ,jī # 敧
+0x6568:tǒu # 敨
+0x6569:xiào,xué # 敩
+0x656a:duō,què # 敪
+0x656b:jiǎo # 敫
+0x656c:jìng # 敬
+0x656d:yáng # 敭
+0x656e:xiá # 敮
+0x656f:mǐn # 敯
+0x6570:shù,shǔ,shuò # 数
+0x6571:ái,zhú # 敱
+0x6572:qiāo # 敲
+0x6573:ái # 敳
+0x6574:zhěng # 整
+0x6575:dí # 敵
+0x6576:chén # 敶
+0x6577:fū # 敷
+0x6578:shù,shǔ,shuò # 數
+0x6579:liáo # 敹
+0x657a:qū # 敺
+0x657b:xiòng,xuàn # 敻
+0x657c:yǐ # 敼
+0x657d:jiǎo # 敽
+0x657f:jiǎo # 敿
+0x6580:zhuó,zhú # 斀
+0x6581:yì,dù # 斁
+0x6582:liǎn # 斂
+0x6583:bì # 斃
+0x6584:lí,tái # 斄
+0x6585:xiào # 斅
+0x6586:xiào # 斆
+0x6587:wén # 文
+0x6588:xué # 斈
+0x6589:qí # 斉
+0x658a:qí # 斊
+0x658b:zhāi # 斋
+0x658c:bīn # 斌
+0x658d:jué,jiào # 斍
+0x658e:zhāi # 斎
+0x6590:fěi,fēi # 斐
+0x6591:bān # 斑
+0x6592:bān # 斒
+0x6593:lán # 斓
+0x6594:yǔ,zhōng # 斔
+0x6595:lán # 斕
+0x6596:wěi,mén # 斖
+0x6597:dǒu,dòu # 斗
+0x6598:shēng # 斘
+0x6599:liào # 料
+0x659a:jiǎ # 斚
+0x659b:hú # 斛
+0x659c:xié # 斜
+0x659d:jiǎ # 斝
+0x659e:yǔ # 斞
+0x659f:zhēn # 斟
+0x65a0:jiào # 斠
+0x65a1:wò,guǎn # 斡
+0x65a2:tǒu,tiǎo # 斢
+0x65a3:dòu # 斣
+0x65a4:jīn # 斤
+0x65a5:chì # 斥
+0x65a6:yín,zhì # 斦
+0x65a7:fǔ # 斧
+0x65a8:qiāng # 斨
+0x65a9:zhǎn # 斩
+0x65aa:qú # 斪
+0x65ab:zhuó # 斫
+0x65ac:zhǎn # 斬
+0x65ad:duàn # 断
+0x65ae:zhuó # 斮
+0x65af:sī # 斯
+0x65b0:xīn # 新
+0x65b1:zhuó # 斱
+0x65b2:zhuó # 斲
+0x65b3:qín # 斳
+0x65b4:lín # 斴
+0x65b5:zhuó # 斵
+0x65b6:chù # 斶
+0x65b7:duàn # 斷
+0x65b8:zhú # 斸
+0x65b9:fāng # 方
+0x65ba:chǎn,jiè # 斺
+0x65bb:háng # 斻
+0x65bc:yú,wū # 於
+0x65bd:shī # 施
+0x65be:pèi # 斾
+0x65bf:liú,yóu # 斿
+0x65c1:páng,bàng # 旁
+0x65c2:qí # 旂
+0x65c3:zhān # 旃
+0x65c4:máo,mào # 旄
+0x65c5:lǚ # 旅
+0x65c6:pèi # 旆
+0x65c7:pī,bì # 旇
+0x65c8:liú # 旈
+0x65c9:fū # 旉
+0x65ca:fǎng # 旊
+0x65cb:xuán,xuàn # 旋
+0x65cc:jīng # 旌
+0x65cd:jīng # 旍
+0x65ce:nǐ # 旎
+0x65cf:zú # 族
+0x65d0:zhào # 旐
+0x65d1:yǐ # 旑
+0x65d2:liú # 旒
+0x65d3:shāo # 旓
+0x65d4:jiàn # 旔
+0x65d6:yǐ # 旖
+0x65d7:qí # 旗
+0x65d8:zhì # 旘
+0x65d9:fān # 旙
+0x65da:piāo # 旚
+0x65db:fān # 旛
+0x65dc:zhān # 旜
+0x65dd:kuài # 旝
+0x65de:suì # 旞
+0x65df:yú # 旟
+0x65e0:wú,mó # 无
+0x65e1:jì # 旡
+0x65e2:jì # 既
+0x65e3:jì # 旣
+0x65e4:huò # 旤
+0x65e5:rì # 日
+0x65e6:dàn # 旦
+0x65e7:jiù # 旧
+0x65e8:zhǐ # 旨
+0x65e9:zǎo # 早
+0x65ea:xié # 旪
+0x65eb:tiāo # 旫
+0x65ec:xún # 旬
+0x65ed:xù # 旭
+0x65ee:gā # 旮
+0x65ef:lá # 旯
+0x65f0:gàn,hàn # 旰
+0x65f1:hàn # 旱
+0x65f2:tái,yīng # 旲
+0x65f3:dì,dí,de # 旳
+0x65f4:xù,xū # 旴
+0x65f5:chǎn # 旵
+0x65f6:shí # 时
+0x65f7:kuàng # 旷
+0x65f8:yáng # 旸
+0x65f9:shí # 旹
+0x65fa:wàng # 旺
+0x65fb:mín # 旻
+0x65fc:mín # 旼
+0x65fd:tūn,zhùn # 旽
+0x65fe:chūn # 旾
+0x65ff:wù,wǔ # 旿
+0x6600:yún # 昀
+0x6601:bèi # 昁
+0x6602:áng # 昂
+0x6603:zè # 昃
+0x6604:bǎn # 昄
+0x6605:jié # 昅
+0x6606:kūn # 昆
+0x6607:shēng # 昇
+0x6608:hù # 昈
+0x6609:fǎng # 昉
+0x660a:hào # 昊
+0x660b:guì # 昋
+0x660c:chāng # 昌
+0x660d:xuān # 昍
+0x660e:míng # 明
+0x660f:hūn # 昏
+0x6610:fēn # 昐
+0x6611:qǐn # 昑
+0x6612:hū # 昒
+0x6613:yì # 易
+0x6614:xī # 昔
+0x6615:xīn # 昕
+0x6616:yán # 昖
+0x6617:zè # 昗
+0x6618:fǎng # 昘
+0x6619:tán # 昙
+0x661a:shèn # 昚
+0x661b:jù # 昛
+0x661c:yáng # 昜
+0x661d:zǎn # 昝
+0x661e:bǐng # 昞
+0x661f:xīng # 星
+0x6620:yìng # 映
+0x6621:xuàn # 昡
+0x6622:pò # 昢
+0x6623:zhěn # 昣
+0x6624:líng # 昤
+0x6625:chūn # 春
+0x6626:hào # 昦
+0x6627:mèi # 昧
+0x6628:zuó # 昨
+0x6629:mò # 昩
+0x662a:biàn # 昪
+0x662b:xù # 昫
+0x662c:hūn # 昬
+0x662d:zhāo # 昭
+0x662e:zòng # 昮
+0x662f:shì # 是
+0x6630:shì # 昰
+0x6631:yù # 昱
+0x6632:fèi # 昲
+0x6633:dié,yì # 昳
+0x6634:mǎo # 昴
+0x6635:nì # 昵
+0x6636:chǎng # 昶
+0x6637:wēn # 昷
+0x6638:dōng # 昸
+0x6639:ǎi # 昹
+0x663a:bǐng # 昺
+0x663b:áng # 昻
+0x663c:zhòu # 昼
+0x663d:lóng # 昽
+0x663e:xiǎn # 显
+0x663f:kuàng # 昿
+0x6640:tiǎo # 晀
+0x6641:cháo # 晁
+0x6642:shí # 時
+0x6643:huǎng,huàng # 晃
+0x6644:huǎng # 晄
+0x6645:xuān # 晅
+0x6646:kuí # 晆
+0x6647:xù,kuā # 晇
+0x6648:jiǎo # 晈
+0x6649:jìn # 晉
+0x664a:zhì # 晊
+0x664b:jìn # 晋
+0x664c:shǎng # 晌
+0x664d:tóng # 晍
+0x664e:hǒng # 晎
+0x664f:yàn # 晏
+0x6650:gāi # 晐
+0x6651:xiǎng # 晑
+0x6652:shài # 晒
+0x6653:xiǎo # 晓
+0x6654:yè # 晔
+0x6655:yùn,yūn # 晕
+0x6656:huī # 晖
+0x6657:hán # 晗
+0x6658:hàn # 晘
+0x6659:jùn # 晙
+0x665a:wǎn # 晚
+0x665b:xiàn # 晛
+0x665c:kūn # 晜
+0x665d:zhòu # 晝
+0x665e:xī # 晞
+0x665f:shèng,chéng # 晟
+0x6660:shèng # 晠
+0x6661:bū # 晡
+0x6662:zhé # 晢
+0x6663:zhé # 晣
+0x6664:wù # 晤
+0x6665:wǎn,hàn # 晥
+0x6666:huì # 晦
+0x6667:hào # 晧
+0x6668:chén # 晨
+0x6669:wǎn # 晩
+0x666a:tiǎn # 晪
+0x666b:zhuó # 晫
+0x666c:zuì # 晬
+0x666d:zhǒu # 晭
+0x666e:pǔ # 普
+0x666f:jǐng,yǐng # 景
+0x6670:xī # 晰
+0x6671:shǎn # 晱
+0x6672:nǐ # 晲
+0x6673:xī # 晳
+0x6674:qíng # 晴
+0x6675:qǐ,dù # 晵
+0x6676:jīng # 晶
+0x6677:guǐ # 晷
+0x6678:zhěng # 晸
+0x6679:yì # 晹
+0x667a:zhì # 智
+0x667b:àn,ǎn,yǎn # 晻
+0x667c:wǎn # 晼
+0x667d:lín # 晽
+0x667e:liàng # 晾
+0x667f:chēng # 晿
+0x6680:wǎng,wàng # 暀
+0x6681:xiǎo # 暁
+0x6682:zàn # 暂
+0x6684:xuān # 暄
+0x6685:xuǎn,gèng # 暅
+0x6686:yí # 暆
+0x6687:xiá # 暇
+0x6688:yùn,yūn # 暈
+0x6689:huī # 暉
+0x668a:xǔ # 暊
+0x668b:mǐn,mín # 暋
+0x668c:kuí # 暌
+0x668d:yē # 暍
+0x668e:yìng # 暎
+0x668f:shǔ,dǔ # 暏
+0x6690:wěi # 暐
+0x6691:shǔ # 暑
+0x6692:qíng # 暒
+0x6693:mào # 暓
+0x6694:nán # 暔
+0x6695:jiǎn,lán # 暕
+0x6696:nuǎn # 暖
+0x6697:àn # 暗
+0x6698:yáng # 暘
+0x6699:chūn # 暙
+0x669a:yáo # 暚
+0x669b:suǒ # 暛
+0x669c:pǔ # 暜
+0x669d:míng # 暝
+0x669e:jiǎo # 暞
+0x669f:kǎi # 暟
+0x66a0:hào,gǎo # 暠
+0x66a1:wěng # 暡
+0x66a2:chàng # 暢
+0x66a3:qì # 暣
+0x66a4:hào # 暤
+0x66a5:yàn # 暥
+0x66a6:lì # 暦
+0x66a7:ài # 暧
+0x66a8:jì # 暨
+0x66a9:jì # 暩
+0x66aa:mèn # 暪
+0x66ab:zàn # 暫
+0x66ac:xiè # 暬
+0x66ad:hào # 暭
+0x66ae:mù # 暮
+0x66af:mù # 暯
+0x66b0:cōng # 暰
+0x66b1:nì # 暱
+0x66b2:zhāng # 暲
+0x66b3:huì # 暳
+0x66b4:bào,pù # 暴
+0x66b5:hàn # 暵
+0x66b6:xuán # 暶
+0x66b7:chuán # 暷
+0x66b8:liáo # 暸
+0x66b9:xiān # 暹
+0x66ba:tǎn # 暺
+0x66bb:jǐng # 暻
+0x66bc:piē # 暼
+0x66bd:lín # 暽
+0x66be:tūn # 暾
+0x66bf:xī,xǐ # 暿
+0x66c0:yì # 曀
+0x66c1:jì # 曁
+0x66c2:huàng # 曂
+0x66c3:dài # 曃
+0x66c4:yè # 曄
+0x66c5:yè # 曅
+0x66c6:lì # 曆
+0x66c7:tán # 曇
+0x66c8:tóng # 曈
+0x66c9:xiǎo # 曉
+0x66ca:fèi # 曊
+0x66cb:shěn # 曋
+0x66cc:zhào # 曌
+0x66cd:hào # 曍
+0x66ce:yì # 曎
+0x66cf:xiàng # 曏
+0x66d0:xīng # 曐
+0x66d1:shēn # 曑
+0x66d2:jiǎo # 曒
+0x66d3:bào # 曓
+0x66d4:jìng # 曔
+0x66d5:yàn # 曕
+0x66d6:ài # 曖
+0x66d7:yè # 曗
+0x66d8:rú # 曘
+0x66d9:shǔ # 曙
+0x66da:méng # 曚
+0x66db:xūn # 曛
+0x66dc:yào # 曜
+0x66dd:pù,bào # 曝
+0x66de:lì # 曞
+0x66df:chén # 曟
+0x66e0:kuàng # 曠
+0x66e1:dié # 曡
+0x66e3:yàn # 曣
+0x66e4:huò # 曤
+0x66e5:lú # 曥
+0x66e6:xī # 曦
+0x66e7:róng # 曧
+0x66e8:lóng # 曨
+0x66e9:nǎng # 曩
+0x66ea:luǒ # 曪
+0x66eb:luán # 曫
+0x66ec:shài # 曬
+0x66ed:tǎng # 曭
+0x66ee:yǎn # 曮
+0x66ef:zhú # 曯
+0x66f0:yuē # 曰
+0x66f1:yuē # 曱
+0x66f2:qū,qǔ # 曲
+0x66f3:yè # 曳
+0x66f4:gēng,gèng # 更
+0x66f5:yè # 曵
+0x66f6:hū,hù # 曶
+0x66f7:hé # 曷
+0x66f8:shū # 書
+0x66f9:cáo # 曹
+0x66fa:cáo # 曺
+0x66fc:màn # 曼
+0x66fd:zēng,céng # 曽
+0x66fe:zēng,céng # 曾
+0x66ff:tì # 替
+0x6700:zuì # 最
+0x6701:cǎn,qián,jiàn # 朁
+0x6702:xù # 朂
+0x6703:huì,kuài # 會
+0x6704:yǐn # 朄
+0x6705:qiè,hé # 朅
+0x6706:fēn # 朆
+0x6707:bì,pí # 朇
+0x6708:yuè # 月
+0x6709:yǒu,yòu # 有
+0x670a:ruǎn # 朊
+0x670b:péng # 朋
+0x670c:fén,bān # 朌
+0x670d:fú,fù # 服
+0x670e:líng # 朎
+0x670f:fěi,kū # 朏
+0x6710:qú,xù,chǔn # 朐
+0x6712:nǜ,gǎ # 朒
+0x6713:tiǎo # 朓
+0x6714:shuò # 朔
+0x6715:zhèn # 朕
+0x6716:lǎng # 朖
+0x6717:lǎng # 朗
+0x6718:juān,zuī # 朘
+0x6719:míng # 朙
+0x671a:huāng,máng,wáng # 朚
+0x671b:wàng # 望
+0x671c:tūn # 朜
+0x671d:zhāo,cháo # 朝
+0x671e:jī # 朞
+0x671f:qī,jī # 期
+0x6720:yīng # 朠
+0x6721:zōng # 朡
+0x6722:wàng # 朢
+0x6723:tóng,chuáng # 朣
+0x6724:lǎng # 朤
+0x6726:méng # 朦
+0x6727:lóng # 朧
+0x6728:mù # 木
+0x6729:tin # 朩
+0x672a:wèi # 未
+0x672b:mò # 末
+0x672c:běn # 本
+0x672d:zhá # 札
+0x672e:shù,shú,zhú # 朮
+0x672f:shù,shú,zhú # 术
+0x6731:zhū,shú # 朱
+0x6732:rén # 朲
+0x6733:bā # 朳
+0x6734:pǔ,pò,pō,piáo # 朴
+0x6735:duǒ # 朵
+0x6736:duǒ # 朶
+0x6737:dāo,tiáo,mù # 朷
+0x6738:lì # 朸
+0x6739:qiú,guǐ # 朹
+0x673a:jī # 机
+0x673b:jiū # 朻
+0x673c:bǐ # 朼
+0x673d:xiǔ # 朽
+0x673e:chéng,chēng # 朾
+0x673f:cì # 朿
+0x6740:shā # 杀
+0x6742:zá # 杂
+0x6743:quán # 权
+0x6744:qiān # 杄
+0x6745:yú,wū # 杅
+0x6746:gān,gǎn # 杆
+0x6747:wū # 杇
+0x6748:chā,chà # 杈
+0x6749:shān,shā # 杉
+0x674a:xún # 杊
+0x674b:fán # 杋
+0x674c:wù # 杌
+0x674d:zǐ # 杍
+0x674e:lǐ # 李
+0x674f:xìng # 杏
+0x6750:cái # 材
+0x6751:cūn # 村
+0x6752:rèn,ér # 杒
+0x6753:sháo,biāo # 杓
+0x6754:tuō,zhé # 杔
+0x6755:dì,duò # 杕
+0x6756:zhàng # 杖
+0x6757:máng # 杗
+0x6758:chì # 杘
+0x6759:yì # 杙
+0x675a:gū,gài # 杚
+0x675b:gōng # 杛
+0x675c:dù # 杜
+0x675d:yí,lì,lí,duò,tuò # 杝
+0x675e:qǐ # 杞
+0x675f:shù # 束
+0x6760:gàng,gāng # 杠
+0x6761:tiáo,tiāo # 条
+0x6765:lái # 来
+0x6767:máng # 杧
+0x6768:yáng # 杨
+0x6769:mà,mǎ # 杩
+0x676a:miǎo # 杪
+0x676b:sì,zhǐ,xǐ # 杫
+0x676c:yuán,wán # 杬
+0x676d:háng # 杭
+0x676e:fèi,bèi # 杮
+0x676f:bēi # 杯
+0x6770:jié # 杰
+0x6771:dōng # 東
+0x6772:gǎo # 杲
+0x6773:yǎo # 杳
+0x6774:xiān # 杴
+0x6775:chǔ # 杵
+0x6776:chūn # 杶
+0x6777:pá # 杷
+0x6778:shū,duì # 杸
+0x6779:huà # 杹
+0x677a:xīn # 杺
+0x677b:niǔ,chǒu # 杻
+0x677c:zhù # 杼
+0x677d:chǒu # 杽
+0x677e:sōng # 松
+0x677f:bǎn # 板
+0x6780:sōng # 枀
+0x6781:jí # 极
+0x6782:wò,yuè # 枂
+0x6783:jìn # 枃
+0x6784:gòu # 构
+0x6785:jī # 枅
+0x6786:máo # 枆
+0x6787:pí # 枇
+0x6788:pī,mì # 枈
+0x6789:wǎng # 枉
+0x678a:àng # 枊
+0x678b:fāng,bìng # 枋
+0x678c:fén # 枌
+0x678d:yì # 枍
+0x678e:fú,fū # 枎
+0x678f:nán # 枏
+0x6790:xī # 析
+0x6791:hù,dǐ # 枑
+0x6792:yā # 枒
+0x6793:dōu # 枓
+0x6794:xín # 枔
+0x6795:zhěn # 枕
+0x6796:yǎo,yāo # 枖
+0x6797:lín # 林
+0x6798:ruì # 枘
+0x6799:ě,è # 枙
+0x679a:méi # 枚
+0x679b:zhào # 枛
+0x679c:guǒ # 果
+0x679d:zhī,qí # 枝
+0x679e:cōng,zōng # 枞
+0x679f:yùn # 枟
+0x67a1:shēng # 枡
+0x67a2:shū # 枢
+0x67a3:zǎo # 枣
+0x67a5:lì # 枥
+0x67a7:jiǎn # 枧
+0x67a8:chéng # 枨
+0x67aa:qiāng # 枪
+0x67ab:fēng # 枫
+0x67ac:zhān # 枬
+0x67ad:xiāo # 枭
+0x67ae:xiān,zhēn # 枮
+0x67af:kū # 枯
+0x67b0:píng # 枰
+0x67b1:sì,tái # 枱
+0x67b2:xǐ # 枲
+0x67b3:zhǐ # 枳
+0x67b4:guǎi # 枴
+0x67b5:xiāo # 枵
+0x67b6:jià # 架
+0x67b7:jiā # 枷
+0x67b8:jǔ,gǒu # 枸
+0x67b9:bāo,fú # 枹
+0x67ba:mò # 枺
+0x67bb:yì,xiè # 枻
+0x67bc:yè # 枼
+0x67bd:yè # 枽
+0x67be:shì # 枾
+0x67bf:niè # 枿
+0x67c0:bǐ # 柀
+0x67c1:tuó,duò # 柁
+0x67c2:yí,duò,lí # 柂
+0x67c3:líng # 柃
+0x67c4:bǐng # 柄
+0x67c5:nǐ,chì # 柅
+0x67c6:lā # 柆
+0x67c7:hé # 柇
+0x67c8:pán,bàn # 柈
+0x67c9:fán # 柉
+0x67ca:zhōng # 柊
+0x67cb:dài # 柋
+0x67cc:cí # 柌
+0x67cd:yǎng,yàng,yāng,yīng # 柍
+0x67ce:fū,fǔ,fù # 柎
+0x67cf:bǎi,bó,bò # 柏
+0x67d0:mǒu # 某
+0x67d1:gān # 柑
+0x67d2:qī # 柒
+0x67d3:rǎn # 染
+0x67d4:róu # 柔
+0x67d5:mào # 柕
+0x67d6:sháo,shào # 柖
+0x67d7:sōng # 柗
+0x67d8:zhè # 柘
+0x67d9:xiá # 柙
+0x67da:yòu,yóu # 柚
+0x67db:shēn # 柛
+0x67dc:guì,jǔ # 柜
+0x67dd:tuò # 柝
+0x67de:zuò,zhà # 柞
+0x67df:nán # 柟
+0x67e0:níng # 柠
+0x67e1:yǒng # 柡
+0x67e2:dǐ,chí # 柢
+0x67e3:zhì,dié # 柣
+0x67e4:zhā,zǔ,zū # 柤
+0x67e5:chá,zhā # 查
+0x67e6:dàn # 柦
+0x67e7:gū # 柧
+0x67e9:jiù # 柩
+0x67ea:āo,ào # 柪
+0x67eb:fú # 柫
+0x67ec:jiǎn # 柬
+0x67ed:bā,fú,pèi,bó,biē # 柭
+0x67ee:duò,zuó,wù # 柮
+0x67ef:kē # 柯
+0x67f0:nài # 柰
+0x67f1:zhù # 柱
+0x67f2:bì,bié # 柲
+0x67f3:liǔ # 柳
+0x67f4:chái # 柴
+0x67f5:shān # 柵
+0x67f6:sì # 柶
+0x67f7:zhù # 柷
+0x67f8:bēi,pēi # 柸
+0x67f9:shì,fèi # 柹
+0x67fa:guǎi # 柺
+0x67fb:chá,zhā # 査
+0x67fc:yǎo # 柼
+0x67fd:chēng # 柽
+0x67fe:jiù # 柾
+0x67ff:shì # 柿
+0x6800:zhī # 栀
+0x6801:liǔ # 栁
+0x6802:méi # 栂
+0x6804:róng # 栄
+0x6805:zhà,shān,shi,cè # 栅
+0x6807:biāo # 标
+0x6808:zhàn # 栈
+0x6809:zhì # 栉
+0x680a:lóng # 栊
+0x680b:dòng # 栋
+0x680c:lú # 栌
+0x680e:lì,yuè # 栎
+0x680f:lán # 栏
+0x6810:yǒng # 栐
+0x6811:shù # 树
+0x6812:xún # 栒
+0x6813:shuān # 栓
+0x6814:qì,qiè # 栔
+0x6815:chén # 栕
+0x6816:qī,xī # 栖
+0x6817:lì # 栗
+0x6818:yí # 栘
+0x6819:xiáng # 栙
+0x681a:zhèn # 栚
+0x681b:lì # 栛
+0x681c:sè # 栜
+0x681d:guā,tiǎn,kuò # 栝
+0x681e:kān # 栞
+0x681f:bēn,bīng # 栟
+0x6820:rěn # 栠
+0x6821:xiào,jiào # 校
+0x6822:bǎi # 栢
+0x6823:rěn # 栣
+0x6824:bìng # 栤
+0x6825:zī # 栥
+0x6826:chóu # 栦
+0x6827:yì,xiè # 栧
+0x6828:cì # 栨
+0x6829:xǔ # 栩
+0x682a:zhū # 株
+0x682b:jiàn,zùn # 栫
+0x682c:zuì # 栬
+0x682d:ér # 栭
+0x682e:ěr # 栮
+0x682f:yǒu,yù # 栯
+0x6830:fá # 栰
+0x6831:gǒng # 栱
+0x6832:kǎo # 栲
+0x6833:lǎo # 栳
+0x6834:zhān # 栴
+0x6835:liè # 栵
+0x6837:yàng # 样
+0x6838:hé,hú # 核
+0x6839:gēn # 根
+0x683a:zhī,yì # 栺
+0x683b:shì # 栻
+0x683c:gé # 格
+0x683d:zāi # 栽
+0x683e:luán # 栾
+0x683f:fú # 栿
+0x6840:jié # 桀
+0x6841:héng,háng # 桁
+0x6842:guì # 桂
+0x6843:táo # 桃
+0x6844:guāng,guàng # 桄
+0x6845:wéi # 桅
+0x6846:kuàng # 框
+0x6847:rú # 桇
+0x6848:àn # 案
+0x6849:ān # 桉
+0x684a:juàn # 桊
+0x684b:yí,tí # 桋
+0x684c:zhuō # 桌
+0x684d:kū # 桍
+0x684e:zhì # 桎
+0x684f:qióng # 桏
+0x6850:tóng # 桐
+0x6851:sāng # 桑
+0x6852:sāng # 桒
+0x6853:huán # 桓
+0x6854:jié,jú # 桔
+0x6855:jiù # 桕
+0x6856:xuè # 桖
+0x6857:duò # 桗
+0x6858:chuí # 桘
+0x6859:yú,móu # 桙
+0x685a:zā,zǎn # 桚
+0x685c:yīng # 桜
+0x685f:zhàn # 桟
+0x6860:yā # 桠
+0x6861:ráo,náo # 桡
+0x6862:zhēn # 桢
+0x6863:dàng # 档
+0x6864:qī # 桤
+0x6865:qiáo # 桥
+0x6866:huà # 桦
+0x6867:guì,huì # 桧
+0x6868:jiǎng # 桨
+0x6869:zhuāng # 桩
+0x686a:xún # 桪
+0x686b:suō # 桫
+0x686c:shā # 桬
+0x686d:chén,zhèn # 桭
+0x686e:bēi # 桮
+0x686f:tīng,yíng # 桯
+0x6870:guā # 桰
+0x6871:jìng # 桱
+0x6872:bó,po # 桲
+0x6873:bèn,fàn # 桳
+0x6874:fú # 桴
+0x6875:ruí # 桵
+0x6876:tǒng # 桶
+0x6877:jué # 桷
+0x6878:xī # 桸
+0x6879:láng # 桹
+0x687a:liǔ # 桺
+0x687b:fēng,fèng # 桻
+0x687c:qī # 桼
+0x687d:wěn # 桽
+0x687e:jūn # 桾
+0x687f:gǎn # 桿
+0x6880:sù,yìn # 梀
+0x6881:liáng # 梁
+0x6882:qiú # 梂
+0x6883:tǐng,tìng # 梃
+0x6884:yǒu # 梄
+0x6885:méi # 梅
+0x6886:bāng # 梆
+0x6887:lòng # 梇
+0x6888:pēng # 梈
+0x6889:zhuāng # 梉
+0x688a:dì # 梊
+0x688b:xuān,juān,xié # 梋
+0x688c:tú,chá # 梌
+0x688d:zào # 梍
+0x688e:āo,yòu # 梎
+0x688f:gù # 梏
+0x6890:bì # 梐
+0x6891:dí # 梑
+0x6892:hán # 梒
+0x6893:zǐ # 梓
+0x6894:zhī # 梔
+0x6895:rèn,ér # 梕
+0x6896:bèi # 梖
+0x6897:gěng # 梗
+0x6898:jiǎn # 梘
+0x6899:huàn # 梙
+0x689a:wǎn # 梚
+0x689b:nuó # 梛
+0x689c:jiā # 梜
+0x689d:tiáo,tiāo # 條
+0x689e:jì # 梞
+0x689f:xiāo # 梟
+0x68a0:lǚ # 梠
+0x68a1:kuǎn # 梡
+0x68a2:shāo,sào # 梢
+0x68a3:chén,cén # 梣
+0x68a4:fēn # 梤
+0x68a5:sōng # 梥
+0x68a6:mèng # 梦
+0x68a7:wú # 梧
+0x68a8:lí # 梨
+0x68a9:sì,qǐ # 梩
+0x68aa:dòu # 梪
+0x68ab:qǐn # 梫
+0x68ac:yǐng # 梬
+0x68ad:suō # 梭
+0x68ae:jū # 梮
+0x68af:tī # 梯
+0x68b0:xiè # 械
+0x68b1:kǔn # 梱
+0x68b2:zhuō # 梲
+0x68b3:shū # 梳
+0x68b4:chān,yán # 梴
+0x68b5:fàn # 梵
+0x68b6:wěi # 梶
+0x68b7:jìng # 梷
+0x68b8:lí # 梸
+0x68b9:bīn,bīng # 梹
+0x68bc:chóu,táo,dào # 梼
+0x68bd:zhì # 梽
+0x68be:lái # 梾
+0x68bf:lián,liǎn # 梿
+0x68c0:jiǎn # 检
+0x68c1:zhuō # 棁
+0x68c2:líng # 棂
+0x68c3:lí # 棃
+0x68c4:qì # 棄
+0x68c5:bǐng # 棅
+0x68c6:lún # 棆
+0x68c7:cōng,sōng # 棇
+0x68c8:qiàn # 棈
+0x68c9:mián # 棉
+0x68ca:qí # 棊
+0x68cb:qí # 棋
+0x68cc:cǎi # 棌
+0x68cd:gùn,hùn # 棍
+0x68ce:chán # 棎
+0x68cf:dé,zhé # 棏
+0x68d0:fěi # 棐
+0x68d1:pái,bèi,pèi # 棑
+0x68d2:bàng # 棒
+0x68d3:bàng,pǒu,bèi,bēi # 棓
+0x68d4:hūn # 棔
+0x68d5:zōng # 棕
+0x68d6:chéng # 棖
+0x68d7:zǎo # 棗
+0x68d8:jí # 棘
+0x68d9:lì,liè # 棙
+0x68da:péng # 棚
+0x68db:yù # 棛
+0x68dc:yù # 棜
+0x68dd:gù # 棝
+0x68de:jùn # 棞
+0x68df:dòng # 棟
+0x68e0:táng # 棠
+0x68e1:gāng # 棡
+0x68e2:wǎng # 棢
+0x68e3:dì,dài,tì # 棣
+0x68e4:què # 棤
+0x68e5:fán # 棥
+0x68e6:chēng # 棦
+0x68e7:zhàn # 棧
+0x68e8:qǐ # 棨
+0x68e9:yuān # 棩
+0x68ea:yǎn,yàn # 棪
+0x68eb:yù # 棫
+0x68ec:quān,juàn # 棬
+0x68ed:yì # 棭
+0x68ee:sēn # 森
+0x68ef:rěn,shěn # 棯
+0x68f0:chuí # 棰
+0x68f1:léng,lēng,líng # 棱
+0x68f2:qī # 棲
+0x68f3:zhuō # 棳
+0x68f4:fú,sù # 棴
+0x68f5:kē # 棵
+0x68f6:lái # 棶
+0x68f7:zōu,sǒu # 棷
+0x68f8:zōu # 棸
+0x68f9:zhào,zhuō # 棹
+0x68fa:guān # 棺
+0x68fb:fēn # 棻
+0x68fc:fén # 棼
+0x68fd:chēn,shēn # 棽
+0x68fe:qíng # 棾
+0x68ff:ní,nǐ # 棿
+0x6900:wǎn # 椀
+0x6901:guǒ # 椁
+0x6902:lù # 椂
+0x6903:háo # 椃
+0x6904:jiē,qiè # 椄
+0x6905:yǐ,yī # 椅
+0x6906:chóu,zhòu,diāo # 椆
+0x6907:jǔ # 椇
+0x6908:jú # 椈
+0x6909:chéng,shèng # 椉
+0x690a:zú,cuì # 椊
+0x690b:liáng # 椋
+0x690c:qiāng,kōng # 椌
+0x690d:zhí # 植
+0x690e:zhuī,chuí # 椎
+0x690f:yā # 椏
+0x6910:jū # 椐
+0x6911:bēi,pí # 椑
+0x6912:jiāo # 椒
+0x6913:zhuó # 椓
+0x6914:zī # 椔
+0x6915:bīn # 椕
+0x6916:péng # 椖
+0x6917:dìng # 椗
+0x6918:chǔ # 椘
+0x691c:jiǎn # 検
+0x691d:guī # 椝
+0x691e:xì # 椞
+0x691f:dú # 椟
+0x6920:qiàn # 椠
+0x6924:luó # 椤
+0x6925:zhī # 椥
+0x692a:pèng # 椪
+0x692b:shàn # 椫
+0x692d:tuǒ # 椭
+0x692e:sēn # 椮
+0x692f:duǒ,chuán # 椯
+0x6930:yē # 椰
+0x6931:fù # 椱
+0x6932:wěi,huī # 椲
+0x6933:wēi # 椳
+0x6934:duàn # 椴
+0x6935:jiǎ,jiā # 椵
+0x6936:zōng # 椶
+0x6937:jiān,hán # 椷
+0x6938:yí # 椸
+0x6939:zhēn,shèn # 椹
+0x693a:xí # 椺
+0x693b:yàn,yà # 椻
+0x693c:yǎn # 椼
+0x693d:chuán # 椽
+0x693e:jiān # 椾
+0x693f:chūn # 椿
+0x6940:yǔ # 楀
+0x6941:hé # 楁
+0x6942:zhā,chá # 楂
+0x6943:wò # 楃
+0x6944:piān # 楄
+0x6945:bī # 楅
+0x6946:yāo # 楆
+0x6947:guō,kuǎ # 楇
+0x6948:xū # 楈
+0x6949:ruò # 楉
+0x694a:yáng # 楊
+0x694b:là # 楋
+0x694c:yán # 楌
+0x694d:běn # 楍
+0x694e:huī # 楎
+0x694f:kuí # 楏
+0x6950:jiè # 楐
+0x6951:kuí # 楑
+0x6952:sī # 楒
+0x6953:fēng # 楓
+0x6954:xiē # 楔
+0x6955:tuǒ # 楕
+0x6956:jí,zhì # 楖
+0x6957:jiàn # 楗
+0x6958:mù # 楘
+0x6959:máo # 楙
+0x695a:chǔ # 楚
+0x695b:kǔ,hù # 楛
+0x695c:hú # 楜
+0x695d:liàn # 楝
+0x695e:léng # 楞
+0x695f:tíng # 楟
+0x6960:nán # 楠
+0x6961:yú # 楡
+0x6962:yóu,yǒu # 楢
+0x6963:méi # 楣
+0x6964:sǒng,cōng # 楤
+0x6965:xuàn,yuán # 楥
+0x6966:xuàn # 楦
+0x6967:yǎng,yàng,yīng # 楧
+0x6968:zhēn # 楨
+0x6969:pián # 楩
+0x696a:dié,yè # 楪
+0x696b:jí # 楫
+0x696c:jiē # 楬
+0x696d:yè # 業
+0x696e:chǔ # 楮
+0x696f:shǔn,dùn # 楯
+0x6970:yú # 楰
+0x6971:còu,zòu # 楱
+0x6972:wēi # 楲
+0x6973:méi # 楳
+0x6974:dì,dǐ,shì # 楴
+0x6975:jí # 極
+0x6976:jié # 楶
+0x6977:kǎi,jiē # 楷
+0x6978:qiū # 楸
+0x6979:yíng # 楹
+0x697a:róu,ròu # 楺
+0x697b:huáng # 楻
+0x697c:lóu # 楼
+0x697d:lè,yuè # 楽
+0x6980:pǐn # 榀
+0x6982:gài # 概
+0x6983:tán # 榃
+0x6984:lǎn # 榄
+0x6985:wēn,yùn # 榅
+0x6986:yú # 榆
+0x6987:chèn # 榇
+0x6988:lǘ # 榈
+0x6989:jǔ # 榉
+0x698d:xiè # 榍
+0x698e:jiǎ # 榎
+0x698f:yì # 榏
+0x6990:zhǎn,niǎn,zhèn # 榐
+0x6991:fú,fù,bó # 榑
+0x6992:nuò # 榒
+0x6993:mì # 榓
+0x6994:láng # 榔
+0x6995:róng # 榕
+0x6996:gǔ # 榖
+0x6997:jiàn,jìn # 榗
+0x6998:jǔ # 榘
+0x6999:tā # 榙
+0x699a:yǎo # 榚
+0x699b:zhēn # 榛
+0x699c:bǎng,bàng # 榜
+0x699d:shā,xiè # 榝
+0x699e:yuán # 榞
+0x699f:zǐ # 榟
+0x69a0:míng # 榠
+0x69a1:sù # 榡
+0x69a2:jià # 榢
+0x69a3:yáo # 榣
+0x69a4:jié # 榤
+0x69a5:huàng # 榥
+0x69a6:gàn # 榦
+0x69a7:fěi # 榧
+0x69a8:zhà # 榨
+0x69a9:qián # 榩
+0x69aa:mà,mā # 榪
+0x69ab:sǔn # 榫
+0x69ac:yuán # 榬
+0x69ad:xiè # 榭
+0x69ae:róng # 榮
+0x69af:shí # 榯
+0x69b0:zhī # 榰
+0x69b1:cuī # 榱
+0x69b2:wēn # 榲
+0x69b3:tíng # 榳
+0x69b4:liú # 榴
+0x69b5:róng # 榵
+0x69b6:táng # 榶
+0x69b7:què # 榷
+0x69b8:zhāi # 榸
+0x69b9:sì # 榹
+0x69ba:shèng # 榺
+0x69bb:tà # 榻
+0x69bc:kē # 榼
+0x69bd:xī # 榽
+0x69be:gù # 榾
+0x69bf:qī # 榿
+0x69c0:gǎo # 槀
+0x69c1:gǎo # 槁
+0x69c2:sūn # 槂
+0x69c3:pán # 槃
+0x69c4:tāo # 槄
+0x69c5:gé # 槅
+0x69c6:chūn # 槆
+0x69c7:diān # 槇
+0x69c8:nòu # 槈
+0x69c9:jí # 槉
+0x69ca:shuò # 槊
+0x69cb:gòu # 構
+0x69cc:chuí # 槌
+0x69cd:qiāng # 槍
+0x69ce:chá # 槎
+0x69cf:qiǎn,lián,xiàn # 槏
+0x69d0:huái # 槐
+0x69d1:méi # 槑
+0x69d2:xù # 槒
+0x69d3:gàng # 槓
+0x69d4:gāo # 槔
+0x69d5:zhuō # 槕
+0x69d6:tuó # 槖
+0x69d8:yàng # 様
+0x69d9:diān,zhěn,zhēn # 槙
+0x69da:jiǎ # 槚
+0x69db:jiàn,kǎn # 槛
+0x69dc:zuì # 槜
+0x69df:bīn,bīng # 槟
+0x69e0:zhū # 槠
+0x69e2:xí,dié # 槢
+0x69e3:jī,guī # 槣
+0x69e4:lián,liǎn # 槤
+0x69e5:huì # 槥
+0x69e6:róng,yōng # 槦
+0x69e7:qiàn # 槧
+0x69e8:guǒ # 槨
+0x69e9:gài # 槩
+0x69ea:gài # 槪
+0x69eb:tuán,shuàn,quán # 槫
+0x69ec:huà # 槬
+0x69ed:qì,sè # 槭
+0x69ee:sēn # 槮
+0x69ef:cuī,zhǐ # 槯
+0x69f0:pèng # 槰
+0x69f1:yǒu,chǎo # 槱
+0x69f2:hú # 槲
+0x69f3:jiǎng # 槳
+0x69f4:hù # 槴
+0x69f5:huàn # 槵
+0x69f6:guì # 槶
+0x69f7:niè # 槷
+0x69f8:yì # 槸
+0x69f9:gāo # 槹
+0x69fa:kāng # 槺
+0x69fb:guī # 槻
+0x69fc:guī # 槼
+0x69fd:cáo # 槽
+0x69fe:màn,wàn # 槾
+0x69ff:jǐn # 槿
+0x6a00:dī # 樀
+0x6a01:zhuāng # 樁
+0x6a02:lè,yuè,yào,lào # 樂
+0x6a03:láng # 樃
+0x6a04:chén # 樄
+0x6a05:cōng,zōng # 樅
+0x6a06:lí,chī # 樆
+0x6a07:xiū # 樇
+0x6a08:qíng # 樈
+0x6a09:shǎng,shuǎng # 樉
+0x6a0a:fán # 樊
+0x6a0b:tōng # 樋
+0x6a0c:guàn # 樌
+0x6a0d:zé # 樍
+0x6a0e:sù # 樎
+0x6a0f:léi,lěi # 樏
+0x6a10:lǔ # 樐
+0x6a11:liáng # 樑
+0x6a12:mì # 樒
+0x6a13:lóu # 樓
+0x6a14:cháo,jiǎo,chāo # 樔
+0x6a15:sù # 樕
+0x6a16:kē # 樖
+0x6a17:chū # 樗
+0x6a18:táng # 樘
+0x6a19:biāo # 標
+0x6a1a:lù # 樚
+0x6a1b:jiū,liáo # 樛
+0x6a1c:zhè # 樜
+0x6a1d:zhā # 樝
+0x6a1e:shū # 樞
+0x6a1f:zhāng # 樟
+0x6a20:mán # 樠
+0x6a21:mó,mú # 模
+0x6a22:niǎo,mù # 樢
+0x6a23:yàng # 樣
+0x6a24:tiáo # 樤
+0x6a25:péng # 樥
+0x6a26:zhù # 樦
+0x6a27:shā,xiè # 樧
+0x6a28:xī # 樨
+0x6a29:quán # 権
+0x6a2a:héng,hèng # 横
+0x6a2b:jiān # 樫
+0x6a2c:cōng # 樬
+0x6a2f:qiáng # 樯
+0x6a31:yīng # 樱
+0x6a32:èr # 樲
+0x6a33:xún # 樳
+0x6a34:zhí # 樴
+0x6a35:qiáo # 樵
+0x6a36:zuī # 樶
+0x6a37:cóng # 樷
+0x6a38:pǔ # 樸
+0x6a39:shù # 樹
+0x6a3a:huà # 樺
+0x6a3b:guì # 樻
+0x6a3c:zhēn # 樼
+0x6a3d:zūn # 樽
+0x6a3e:yuè # 樾
+0x6a3f:shàn # 樿
+0x6a40:xī # 橀
+0x6a41:chūn # 橁
+0x6a42:diàn # 橂
+0x6a43:fá,fèi # 橃
+0x6a44:gǎn # 橄
+0x6a45:mó # 橅
+0x6a46:wú # 橆
+0x6a47:qiāo # 橇
+0x6a48:ráo,náo # 橈
+0x6a49:lìn # 橉
+0x6a4a:liú # 橊
+0x6a4b:qiáo # 橋
+0x6a4c:xiàn # 橌
+0x6a4d:rùn # 橍
+0x6a4e:fǎn # 橎
+0x6a4f:zhǎn,jiǎn # 橏
+0x6a50:tuó # 橐
+0x6a51:liáo # 橑
+0x6a52:yún # 橒
+0x6a53:shùn # 橓
+0x6a54:tuí,dūn # 橔
+0x6a55:chēng # 橕
+0x6a56:táng,chēng # 橖
+0x6a57:méng # 橗
+0x6a58:jú # 橘
+0x6a59:chéng # 橙
+0x6a5a:sù,qiū # 橚
+0x6a5b:jué # 橛
+0x6a5c:jué # 橜
+0x6a5d:tán,diàn # 橝
+0x6a5e:huì # 橞
+0x6a5f:jī # 機
+0x6a60:nuó # 橠
+0x6a61:xiàng # 橡
+0x6a62:tuǒ # 橢
+0x6a63:níng # 橣
+0x6a64:ruǐ # 橤
+0x6a65:zhū # 橥
+0x6a66:tóng,chuáng # 橦
+0x6a67:zēng,céng # 橧
+0x6a68:fén,fèn,fèi # 橨
+0x6a69:qióng # 橩
+0x6a6a:rǎn,yān # 橪
+0x6a6b:héng,hèng # 橫
+0x6a6c:qián # 橬
+0x6a6d:gū # 橭
+0x6a6e:liǔ # 橮
+0x6a6f:lào # 橯
+0x6a70:gāo # 橰
+0x6a71:chú # 橱
+0x6a76:jǐ # 橶
+0x6a77:dōu # 橷
+0x6a79:lǔ # 橹
+0x6a7c:yuán # 橼
+0x6a7d:tà # 橽
+0x6a7e:shū,qiāo # 橾
+0x6a7f:jiāng # 橿
+0x6a80:tán # 檀
+0x6a81:lǐn # 檁
+0x6a82:nóng # 檂
+0x6a83:yǐn # 檃
+0x6a84:xí # 檄
+0x6a85:huì # 檅
+0x6a86:shān # 檆
+0x6a87:zuì # 檇
+0x6a88:xuán # 檈
+0x6a89:chēng # 檉
+0x6a8a:gàn # 檊
+0x6a8b:jū # 檋
+0x6a8c:zuì # 檌
+0x6a8d:yì # 檍
+0x6a8e:qín # 檎
+0x6a8f:pǔ # 檏
+0x6a90:yán # 檐
+0x6a91:léi # 檑
+0x6a92:fēng # 檒
+0x6a93:huǐ # 檓
+0x6a94:dàng # 檔
+0x6a95:jì # 檕
+0x6a96:suì # 檖
+0x6a97:bò # 檗
+0x6a98:píng,bò # 檘
+0x6a99:chéng # 檙
+0x6a9a:chǔ # 檚
+0x6a9b:zhuā # 檛
+0x6a9c:guì,huì # 檜
+0x6a9d:jí # 檝
+0x6a9e:jiě # 檞
+0x6a9f:jiǎ # 檟
+0x6aa0:qíng # 檠
+0x6aa1:zhái,shì,tú # 檡
+0x6aa2:jiǎn # 檢
+0x6aa3:qiáng # 檣
+0x6aa4:dào # 檤
+0x6aa5:yǐ # 檥
+0x6aa6:biāo,biǎo # 檦
+0x6aa7:sōng # 檧
+0x6aa8:shē # 檨
+0x6aa9:lǐn # 檩
+0x6aab:chá # 檫
+0x6aac:méng # 檬
+0x6aad:yín # 檭
+0x6aae:chóu,táo,dǎo # 檮
+0x6aaf:tái # 檯
+0x6ab0:mián # 檰
+0x6ab1:qí # 檱
+0x6ab3:bīn,bīng # 檳
+0x6ab4:huò # 檴
+0x6ab5:jì # 檵
+0x6ab6:qiān,lián # 檶
+0x6ab7:nǐ,mí # 檷
+0x6ab8:níng # 檸
+0x6ab9:yī # 檹
+0x6aba:gǎo # 檺
+0x6abb:jiàn,kǎn # 檻
+0x6abc:yǐn # 檼
+0x6abd:nòu,ruǎn,rú # 檽
+0x6abe:qǐng # 檾
+0x6abf:yǎn # 檿
+0x6ac0:qí # 櫀
+0x6ac1:mì # 櫁
+0x6ac2:zhào # 櫂
+0x6ac3:guì # 櫃
+0x6ac4:chūn # 櫄
+0x6ac5:jī,jì # 櫅
+0x6ac6:kuí # 櫆
+0x6ac7:pó # 櫇
+0x6ac8:dèng # 櫈
+0x6ac9:chú # 櫉
+0x6acb:mián # 櫋
+0x6acc:yōu # 櫌
+0x6acd:zhì # 櫍
+0x6ace:huǎng,guǒ,gǔ # 櫎
+0x6acf:qiān # 櫏
+0x6ad0:lěi # 櫐
+0x6ad1:léi,lěi # 櫑
+0x6ad2:sà # 櫒
+0x6ad3:lǔ # 櫓
+0x6ad4:lì # 櫔
+0x6ad5:cuán # 櫕
+0x6ad6:lǜ,chū # 櫖
+0x6ad7:miè,mèi # 櫗
+0x6ad8:huì # 櫘
+0x6ad9:ōu # 櫙
+0x6ada:lǘ # 櫚
+0x6adb:zhì # 櫛
+0x6adc:gāo # 櫜
+0x6add:dú # 櫝
+0x6ade:yuán # 櫞
+0x6adf:lì,yuè # 櫟
+0x6ae0:fèi # 櫠
+0x6ae1:zhuó,zhù # 櫡
+0x6ae2:sǒu # 櫢
+0x6ae3:lián,liǎn # 櫣
+0x6ae5:chú # 櫥
+0x6ae7:zhū # 櫧
+0x6ae8:lú # 櫨
+0x6ae9:yán # 櫩
+0x6aea:lì # 櫪
+0x6aeb:zhū # 櫫
+0x6aec:chèn # 櫬
+0x6aed:jué,jì # 櫭
+0x6aee:è # 櫮
+0x6aef:sū # 櫯
+0x6af0:huái,guī # 櫰
+0x6af1:niè # 櫱
+0x6af2:yù # 櫲
+0x6af3:lóng # 櫳
+0x6af4:là,lài # 櫴
+0x6af6:xiǎn # 櫶
+0x6af8:jǔ # 櫸
+0x6af9:xiāo # 櫹
+0x6afa:líng # 櫺
+0x6afb:yīng # 櫻
+0x6afc:jiān # 櫼
+0x6afd:yǐn # 櫽
+0x6afe:yòu,yóu # 櫾
+0x6aff:yíng # 櫿
+0x6b00:xiāng # 欀
+0x6b01:nóng # 欁
+0x6b02:bó # 欂
+0x6b03:chán,zhàn # 欃
+0x6b04:lán # 欄
+0x6b05:jǔ # 欅
+0x6b06:shuāng # 欆
+0x6b07:shè # 欇
+0x6b08:wéi,zuì # 欈
+0x6b09:cóng # 欉
+0x6b0a:quán # 權
+0x6b0b:qú # 欋
+0x6b0e:yù # 欎
+0x6b0f:luó # 欏
+0x6b10:lì # 欐
+0x6b11:cuán # 欑
+0x6b12:luán # 欒
+0x6b13:dǎng # 欓
+0x6b14:qú # 欔
+0x6b16:lǎn # 欖
+0x6b17:lán # 欗
+0x6b18:zhú # 欘
+0x6b19:léi # 欙
+0x6b1a:lǐ # 欚
+0x6b1b:bà # 欛
+0x6b1c:náng # 欜
+0x6b1d:yù # 欝
+0x6b1e:líng # 欞
+0x6b20:qiàn # 欠
+0x6b21:cì # 次
+0x6b22:huān # 欢
+0x6b23:xīn # 欣
+0x6b24:yú # 欤
+0x6b25:yù,yì # 欥
+0x6b26:qiān,xiān # 欦
+0x6b27:ōu # 欧
+0x6b28:xū # 欨
+0x6b29:chāo # 欩
+0x6b2a:chù,qù,xì # 欪
+0x6b2b:qì # 欫
+0x6b2c:kài,ài # 欬
+0x6b2d:yì,yīn # 欭
+0x6b2e:jué # 欮
+0x6b2f:xì,kài # 欯
+0x6b30:xù # 欰
+0x6b31:hē # 欱
+0x6b32:yù # 欲
+0x6b33:kuài # 欳
+0x6b34:láng # 欴
+0x6b35:kuǎn # 欵
+0x6b36:shuò,sòu # 欶
+0x6b37:xī # 欷
+0x6b38:ēi,éi,ěi,èi,ǎi # 欸
+0x6b39:qī # 欹
+0x6b3a:qī # 欺
+0x6b3b:xū,chuā # 欻
+0x6b3c:chǐ,chuài # 欼
+0x6b3d:qīn # 欽
+0x6b3e:kuǎn # 款
+0x6b3f:kǎn,qiàn # 欿
+0x6b40:kuǎn # 歀
+0x6b41:kǎn,kè # 歁
+0x6b42:chuǎn,chuán # 歂
+0x6b43:shà # 歃
+0x6b45:yān,yīn # 歅
+0x6b46:xīn # 歆
+0x6b47:xiē # 歇
+0x6b48:yú # 歈
+0x6b49:qiàn # 歉
+0x6b4a:xiāo # 歊
+0x6b4b:yē # 歋
+0x6b4c:gē # 歌
+0x6b4d:wū # 歍
+0x6b4e:tàn # 歎
+0x6b4f:jìn,qūn # 歏
+0x6b50:ōu # 歐
+0x6b51:hū # 歑
+0x6b52:tì # 歒
+0x6b53:huān # 歓
+0x6b54:xū # 歔
+0x6b55:pēn # 歕
+0x6b56:xǐ # 歖
+0x6b57:xiào # 歗
+0x6b58:xū # 歘
+0x6b59:xī,shè # 歙
+0x6b5b:liǎn,hān # 歛
+0x6b5c:chù # 歜
+0x6b5d:yì # 歝
+0x6b5e:è # 歞
+0x6b5f:yú # 歟
+0x6b60:chuò # 歠
+0x6b61:huān # 歡
+0x6b62:zhǐ # 止
+0x6b63:zhèng,zhēng # 正
+0x6b64:cǐ # 此
+0x6b65:bù # 步
+0x6b66:wǔ # 武
+0x6b67:qí # 歧
+0x6b68:bù # 歨
+0x6b69:bù # 歩
+0x6b6a:wāi # 歪
+0x6b6b:jù # 歫
+0x6b6c:qián # 歬
+0x6b6d:zhì,chí # 歭
+0x6b6e:sè # 歮
+0x6b6f:chǐ # 歯
+0x6b70:sè,shà # 歰
+0x6b71:zhǒng # 歱
+0x6b72:suì # 歲
+0x6b73:suì # 歳
+0x6b74:lì # 歴
+0x6b75:zé # 歵
+0x6b76:yú # 歶
+0x6b77:lì # 歷
+0x6b78:guī # 歸
+0x6b79:dǎi # 歹
+0x6b7a:è # 歺
+0x6b7b:sǐ # 死
+0x6b7c:jiān # 歼
+0x6b7d:zhé # 歽
+0x6b7e:mò,wěn # 歾
+0x6b7f:mò # 歿
+0x6b80:yāo # 殀
+0x6b81:mò # 殁
+0x6b82:cú # 殂
+0x6b83:yāng # 殃
+0x6b84:tiǎn # 殄
+0x6b85:shēng # 殅
+0x6b86:dài # 殆
+0x6b87:shāng # 殇
+0x6b88:xù # 殈
+0x6b89:xùn # 殉
+0x6b8a:shū # 殊
+0x6b8b:cán # 残
+0x6b8c:jǐng,jué # 殌
+0x6b8d:piǎo # 殍
+0x6b8e:qià # 殎
+0x6b8f:qiú # 殏
+0x6b90:sù # 殐
+0x6b91:qíng,jìng # 殑
+0x6b92:yǔn # 殒
+0x6b93:liàn # 殓
+0x6b94:yì # 殔
+0x6b95:fǒu,bó # 殕
+0x6b96:zhí,shi # 殖
+0x6b97:yè,yān,yàn # 殗
+0x6b98:cán # 殘
+0x6b99:hūn,mèi # 殙
+0x6b9a:dān # 殚
+0x6b9b:jí # 殛
+0x6b9c:dié # 殜
+0x6b9e:yǔn # 殞
+0x6b9f:wēn # 殟
+0x6ba0:chòu # 殠
+0x6ba1:bìn # 殡
+0x6ba2:tì # 殢
+0x6ba3:jìn # 殣
+0x6ba4:shāng # 殤
+0x6ba5:yín # 殥
+0x6ba6:chī # 殦
+0x6ba7:jiù # 殧
+0x6ba8:kuì,huì # 殨
+0x6ba9:cuàn # 殩
+0x6baa:yì # 殪
+0x6bab:dān # 殫
+0x6bac:dù # 殬
+0x6bad:jiāng # 殭
+0x6bae:liàn # 殮
+0x6baf:bìn # 殯
+0x6bb0:dú # 殰
+0x6bb2:jiān # 殲
+0x6bb3:shū # 殳
+0x6bb4:ōu # 殴
+0x6bb5:duàn # 段
+0x6bb6:zhù # 殶
+0x6bb7:yīn,yān,yǐn # 殷
+0x6bb8:qìng,kēng,shēng # 殸
+0x6bb9:yì # 殹
+0x6bba:shā # 殺
+0x6bbb:ké,qiào # 殻
+0x6bbc:ké,qiào # 殼
+0x6bbd:xiáo,yáo,xiào # 殽
+0x6bbe:xùn # 殾
+0x6bbf:diàn # 殿
+0x6bc0:huǐ # 毀
+0x6bc1:huǐ # 毁
+0x6bc2:gǔ # 毂
+0x6bc3:qiāo # 毃
+0x6bc4:jī # 毄
+0x6bc5:yì # 毅
+0x6bc6:ōu # 毆
+0x6bc7:huǐ # 毇
+0x6bc8:duàn # 毈
+0x6bc9:yī # 毉
+0x6bca:xiāo # 毊
+0x6bcb:wú # 毋
+0x6bcc:guàn,wān # 毌
+0x6bcd:mǔ # 母
+0x6bce:měi # 毎
+0x6bcf:měi # 每
+0x6bd0:ǎi # 毐
+0x6bd1:jiě # 毑
+0x6bd2:dú,dài # 毒
+0x6bd3:yù # 毓
+0x6bd4:bǐ # 比
+0x6bd5:bì # 毕
+0x6bd6:bì # 毖
+0x6bd7:pí # 毗
+0x6bd8:pí # 毘
+0x6bd9:bì # 毙
+0x6bda:chán # 毚
+0x6bdb:máo # 毛
+0x6bde:bǐ # 毞
+0x6be0:jiā # 毠
+0x6be1:zhān # 毡
+0x6be2:sāi # 毢
+0x6be3:mù # 毣
+0x6be4:tuò # 毤
+0x6be5:xún,xùn # 毥
+0x6be6:ěr # 毦
+0x6be7:róng # 毧
+0x6be8:xiǎn # 毨
+0x6be9:jū # 毩
+0x6bea:mú # 毪
+0x6beb:háo # 毫
+0x6bec:qiú # 毬
+0x6bed:dòu,nuò # 毭
+0x6bef:tǎn # 毯
+0x6bf0:péi # 毰
+0x6bf1:jū # 毱
+0x6bf2:duō # 毲
+0x6bf3:cuì # 毳
+0x6bf4:bī # 毴
+0x6bf5:sān # 毵
+0x6bf7:mào # 毷
+0x6bf8:sāi,suī # 毸
+0x6bf9:shū # 毹
+0x6bfa:shū # 毺
+0x6bfb:tuò # 毻
+0x6bfc:hé # 毼
+0x6bfd:jiàn # 毽
+0x6bfe:tà # 毾
+0x6bff:sān # 毿
+0x6c00:lǘ # 氀
+0x6c01:mú # 氁
+0x6c02:máo # 氂
+0x6c03:tóng # 氃
+0x6c04:rǒng # 氄
+0x6c05:chǎng # 氅
+0x6c06:pǔ # 氆
+0x6c07:lǔ # 氇
+0x6c08:zhān # 氈
+0x6c09:sào # 氉
+0x6c0a:zhān # 氊
+0x6c0b:méng # 氋
+0x6c0c:lǔ # 氌
+0x6c0d:qú # 氍
+0x6c0e:dié # 氎
+0x6c0f:shì,zhī # 氏
+0x6c10:dī,dǐ # 氐
+0x6c11:mín # 民
+0x6c12:jué # 氒
+0x6c13:méng,máng # 氓
+0x6c14:qì # 气
+0x6c15:piē # 氕
+0x6c16:nǎi # 氖
+0x6c17:qì # 気
+0x6c18:dāo # 氘
+0x6c19:xiān # 氙
+0x6c1a:chuān # 氚
+0x6c1b:fēn # 氛
+0x6c1c:yáng,rì # 氜
+0x6c1d:nèi # 氝
+0x6c1f:fú # 氟
+0x6c20:shēn # 氠
+0x6c21:dōng # 氡
+0x6c22:qīng # 氢
+0x6c23:qì # 氣
+0x6c24:yīn # 氤
+0x6c25:xī # 氥
+0x6c26:hài # 氦
+0x6c27:yǎng # 氧
+0x6c28:ān # 氨
+0x6c29:yà # 氩
+0x6c2a:kè # 氪
+0x6c2b:qīng # 氫
+0x6c2c:yà # 氬
+0x6c2d:dōng # 氭
+0x6c2e:dàn # 氮
+0x6c2f:lǜ # 氯
+0x6c30:qíng # 氰
+0x6c31:yǎng # 氱
+0x6c32:yūn # 氲
+0x6c33:yūn # 氳
+0x6c34:shuǐ # 水
+0x6c36:zhěng,chéng,zhèng # 氶
+0x6c37:bīng # 氷
+0x6c38:yǒng # 永
+0x6c39:dàng # 氹
+0x6c3b:lè # 氻
+0x6c3c:nì # 氼
+0x6c3d:tǔn # 氽
+0x6c3e:fàn # 氾
+0x6c3f:guǐ,jiǔ # 氿
+0x6c40:tīng # 汀
+0x6c41:zhī # 汁
+0x6c42:qiú # 求
+0x6c43:bīn,pà,pā # 汃
+0x6c44:zè # 汄
+0x6c45:miǎn # 汅
+0x6c46:cuān # 汆
+0x6c47:huì # 汇
+0x6c48:diāo # 汈
+0x6c49:hàn # 汉
+0x6c4a:chà # 汊
+0x6c4b:zhuó,què # 汋
+0x6c4c:chuàn # 汌
+0x6c4d:wán # 汍
+0x6c4e:fàn # 汎
+0x6c4f:tài,dà # 汏
+0x6c50:xī # 汐
+0x6c51:tuō # 汑
+0x6c52:máng # 汒
+0x6c53:qiú # 汓
+0x6c54:qì # 汔
+0x6c55:shàn # 汕
+0x6c56:pìn # 汖
+0x6c57:hàn,hán # 汗
+0x6c58:qiān # 汘
+0x6c59:wū # 汙
+0x6c5a:wū # 汚
+0x6c5b:xùn # 汛
+0x6c5c:sì # 汜
+0x6c5d:rǔ # 汝
+0x6c5e:gǒng # 汞
+0x6c5f:jiāng # 江
+0x6c60:chí # 池
+0x6c61:wū # 污
+0x6c64:tāng,shāng # 汤
+0x6c65:zhī,jì # 汥
+0x6c66:zhǐ # 汦
+0x6c67:qiān # 汧
+0x6c68:mì # 汨
+0x6c69:gǔ,yù # 汩
+0x6c6a:wāng # 汪
+0x6c6b:jǐng # 汫
+0x6c6c:jǐng # 汬
+0x6c6d:ruì # 汭
+0x6c6e:jūn # 汮
+0x6c6f:hóng # 汯
+0x6c70:tài # 汰
+0x6c71:tài # 汱
+0x6c72:jí # 汲
+0x6c73:biàn # 汳
+0x6c74:biàn # 汴
+0x6c75:gàn,hán,cén # 汵
+0x6c76:wèn,mén # 汶
+0x6c77:zhōng # 汷
+0x6c78:fāng,pāng # 汸
+0x6c79:xiōng # 汹
+0x6c7a:jué # 決
+0x6c7b:hǔ,huǎng # 汻
+0x6c7d:qì # 汽
+0x6c7e:fén # 汾
+0x6c7f:xù # 汿
+0x6c80:xù # 沀
+0x6c81:qìn # 沁
+0x6c82:yí # 沂
+0x6c83:wò # 沃
+0x6c84:yún # 沄
+0x6c85:yuán # 沅
+0x6c86:hàng # 沆
+0x6c87:yǎn # 沇
+0x6c88:shěn,chén # 沈
+0x6c89:chén # 沉
+0x6c8a:dàn # 沊
+0x6c8b:yóu # 沋
+0x6c8c:dùn,zhuàn # 沌
+0x6c8d:hù # 沍
+0x6c8e:huò # 沎
+0x6c8f:qī # 沏
+0x6c90:mù # 沐
+0x6c91:nǜ,niǔ # 沑
+0x6c92:méi,mò # 沒
+0x6c93:tà,dá # 沓
+0x6c94:miǎn # 沔
+0x6c95:mì,wù # 沕
+0x6c96:chōng # 沖
+0x6c97:hóng,pāng # 沗
+0x6c98:bǐ # 沘
+0x6c99:shā,shà # 沙
+0x6c9a:zhǐ # 沚
+0x6c9b:pèi # 沛
+0x6c9c:pàn # 沜
+0x6c9d:zhuǐ,zǐ # 沝
+0x6c9e:zā # 沞
+0x6c9f:gōu # 沟
+0x6ca0:pài # 沠
+0x6ca1:méi,mò # 没
+0x6ca2:zé # 沢
+0x6ca3:fēng # 沣
+0x6ca4:òu,ōu # 沤
+0x6ca5:lì # 沥
+0x6ca6:lún # 沦
+0x6ca7:cāng # 沧
+0x6ca8:fēng # 沨
+0x6ca9:wéi # 沩
+0x6caa:hù # 沪
+0x6cab:mò # 沫
+0x6cac:mèi # 沬
+0x6cad:shù # 沭
+0x6cae:jǔ,jù # 沮
+0x6caf:zá # 沯
+0x6cb0:tuō,duó # 沰
+0x6cb1:tuó # 沱
+0x6cb2:tuó,duò # 沲
+0x6cb3:hé # 河
+0x6cb4:lì # 沴
+0x6cb5:mǐ,lì # 沵
+0x6cb6:yí,chí # 沶
+0x6cb7:fā # 沷
+0x6cb8:fèi # 沸
+0x6cb9:yóu # 油
+0x6cba:tián # 沺
+0x6cbb:zhì # 治
+0x6cbc:zhǎo # 沼
+0x6cbd:gū # 沽
+0x6cbe:zhān # 沾
+0x6cbf:yán # 沿
+0x6cc0:sī # 泀
+0x6cc1:kuàng # 況
+0x6cc2:jiǒng # 泂
+0x6cc3:jū # 泃
+0x6cc4:xiè,yì # 泄
+0x6cc5:qiú # 泅
+0x6cc6:yì,dié # 泆
+0x6cc7:jiā # 泇
+0x6cc8:zhōng # 泈
+0x6cc9:quán # 泉
+0x6cca:bó,pō # 泊
+0x6ccb:huì # 泋
+0x6ccc:mì,bì # 泌
+0x6ccd:bēn,bèn # 泍
+0x6cce:zé # 泎
+0x6ccf:chù,shè # 泏
+0x6cd0:lè # 泐
+0x6cd1:yōu,yòu,āo # 泑
+0x6cd2:gū # 泒
+0x6cd3:hóng # 泓
+0x6cd4:gān # 泔
+0x6cd5:fǎ # 法
+0x6cd6:mǎo # 泖
+0x6cd7:sì # 泗
+0x6cd8:hū # 泘
+0x6cd9:pēng,píng # 泙
+0x6cda:cǐ # 泚
+0x6cdb:fàn # 泛
+0x6cdc:zhī # 泜
+0x6cdd:sù # 泝
+0x6cde:nìng # 泞
+0x6cdf:chēng # 泟
+0x6ce0:líng # 泠
+0x6ce1:pào,pāo # 泡
+0x6ce2:bō # 波
+0x6ce3:qì # 泣
+0x6ce4:sì # 泤
+0x6ce5:ní,nì # 泥
+0x6ce6:jú # 泦
+0x6ce7:yuè,sà # 泧
+0x6ce8:zhù # 注
+0x6ce9:shēng # 泩
+0x6cea:lèi # 泪
+0x6ceb:xuàn # 泫
+0x6cec:jué,xuè # 泬
+0x6ced:fú # 泭
+0x6cee:pàn # 泮
+0x6cef:mǐn # 泯
+0x6cf0:tài # 泰
+0x6cf1:yāng # 泱
+0x6cf2:jǐ # 泲
+0x6cf3:yǒng # 泳
+0x6cf4:guàn # 泴
+0x6cf5:bèng # 泵
+0x6cf6:xué # 泶
+0x6cf7:lóng,shuāng # 泷
+0x6cf8:lú # 泸
+0x6cfa:luò,pō # 泺
+0x6cfb:xiè # 泻
+0x6cfc:pō # 泼
+0x6cfd:zé,shì # 泽
+0x6cfe:jīng # 泾
+0x6cff:yín # 泿
+0x6d00:pán # 洀
+0x6d01:jié # 洁
+0x6d02:yè # 洂
+0x6d03:huī # 洃
+0x6d04:huí # 洄
+0x6d05:zài # 洅
+0x6d06:chéng # 洆
+0x6d07:yīn # 洇
+0x6d08:wéi # 洈
+0x6d09:hòu # 洉
+0x6d0a:jiàn # 洊
+0x6d0b:yáng # 洋
+0x6d0c:liè # 洌
+0x6d0d:sì # 洍
+0x6d0e:jì # 洎
+0x6d0f:ér # 洏
+0x6d10:xíng # 洐
+0x6d11:fú,fù # 洑
+0x6d12:sǎ,xǐ # 洒
+0x6d13:sè,qì,zì # 洓
+0x6d14:zhǐ # 洔
+0x6d15:yìn # 洕
+0x6d16:wú # 洖
+0x6d17:xǐ,xiǎn # 洗
+0x6d18:kǎo,kào # 洘
+0x6d19:zhū # 洙
+0x6d1a:jiàng # 洚
+0x6d1b:luò # 洛
+0x6d1d:àn,yàn,è # 洝
+0x6d1e:dòng # 洞
+0x6d1f:yí # 洟
+0x6d20:sì # 洠
+0x6d21:lěi,lèi # 洡
+0x6d22:yī # 洢
+0x6d23:mǐ # 洣
+0x6d24:quán # 洤
+0x6d25:jīn # 津
+0x6d26:pò # 洦
+0x6d27:wěi # 洧
+0x6d28:xiáo # 洨
+0x6d29:xiè # 洩
+0x6d2a:hóng # 洪
+0x6d2b:xù # 洫
+0x6d2c:sù,shuò # 洬
+0x6d2d:kuāng # 洭
+0x6d2e:táo # 洮
+0x6d2f:qiè,jié # 洯
+0x6d30:jù # 洰
+0x6d31:ěr # 洱
+0x6d32:zhōu # 洲
+0x6d33:rù # 洳
+0x6d34:píng # 洴
+0x6d35:xún # 洵
+0x6d36:xiōng # 洶
+0x6d37:zhì # 洷
+0x6d38:guāng # 洸
+0x6d39:huán # 洹
+0x6d3a:míng # 洺
+0x6d3b:huó # 活
+0x6d3c:wā # 洼
+0x6d3d:qià # 洽
+0x6d3e:pài,pā # 派
+0x6d3f:wū # 洿
+0x6d40:qū # 浀
+0x6d41:liú # 流
+0x6d42:yì # 浂
+0x6d43:jiā # 浃
+0x6d44:jìng # 浄
+0x6d45:qiǎn,jiān # 浅
+0x6d46:jiāng,jiàng # 浆
+0x6d47:jiāo # 浇
+0x6d48:zhēn # 浈
+0x6d49:shī # 浉
+0x6d4a:zhuó # 浊
+0x6d4b:cè # 测
+0x6d4d:kuài,huì # 浍
+0x6d4e:jì,jǐ # 济
+0x6d4f:liú # 浏
+0x6d50:chǎn # 浐
+0x6d51:hún # 浑
+0x6d52:hǔ,xǔ # 浒
+0x6d53:nóng # 浓
+0x6d54:xún # 浔
+0x6d55:jìn # 浕
+0x6d56:liè # 浖
+0x6d57:qiú # 浗
+0x6d58:wěi # 浘
+0x6d59:zhè # 浙
+0x6d5a:jùn,xùn # 浚
+0x6d5b:hán # 浛
+0x6d5c:bāng # 浜
+0x6d5d:máng # 浝
+0x6d5e:zhuó # 浞
+0x6d5f:yōu,dí # 浟
+0x6d60:xī # 浠
+0x6d61:bó # 浡
+0x6d62:dòu # 浢
+0x6d63:huàn # 浣
+0x6d64:hóng # 浤
+0x6d65:yì # 浥
+0x6d66:pǔ # 浦
+0x6d67:yǐng,chéng,yíng # 浧
+0x6d68:lǎn # 浨
+0x6d69:hào # 浩
+0x6d6a:làng # 浪
+0x6d6b:hǎn # 浫
+0x6d6c:lǐ # 浬
+0x6d6d:gēng # 浭
+0x6d6e:fú # 浮
+0x6d6f:wú # 浯
+0x6d70:lì # 浰
+0x6d71:chún # 浱
+0x6d72:féng,hóng # 浲
+0x6d73:yì # 浳
+0x6d74:yù # 浴
+0x6d75:tóng # 浵
+0x6d76:láo # 浶
+0x6d77:hǎi # 海
+0x6d78:jìn # 浸
+0x6d79:jiā # 浹
+0x6d7a:chōng # 浺
+0x6d7b:jiǒng,jiōng # 浻
+0x6d7c:měi # 浼
+0x6d7d:suī,něi # 浽
+0x6d7e:chēng # 浾
+0x6d7f:pèi # 浿
+0x6d80:xiàn # 涀
+0x6d81:shèn # 涁
+0x6d82:tú # 涂
+0x6d83:kùn # 涃
+0x6d84:pīng # 涄
+0x6d85:niè # 涅
+0x6d86:hàn # 涆
+0x6d87:jīng # 涇
+0x6d88:xiāo # 消
+0x6d89:shè # 涉
+0x6d8a:niǎn # 涊
+0x6d8b:tū # 涋
+0x6d8c:yǒng,chōng # 涌
+0x6d8d:xiào # 涍
+0x6d8e:xián # 涎
+0x6d8f:tǐng # 涏
+0x6d90:é # 涐
+0x6d91:sù # 涑
+0x6d92:tūn,yūn # 涒
+0x6d93:juān # 涓
+0x6d94:cén # 涔
+0x6d95:tì # 涕
+0x6d96:lì # 涖
+0x6d97:shuì # 涗
+0x6d98:sì # 涘
+0x6d99:lèi # 涙
+0x6d9a:shuì # 涚
+0x6d9b:tāo # 涛
+0x6d9c:dú # 涜
+0x6d9d:lào # 涝
+0x6d9e:lái # 涞
+0x6d9f:lián # 涟
+0x6da0:wéi # 涠
+0x6da1:wō,guō # 涡
+0x6da2:yún # 涢
+0x6da3:huàn # 涣
+0x6da4:dí # 涤
+0x6da6:rùn # 润
+0x6da7:jiàn # 涧
+0x6da8:zhǎng,zhàng # 涨
+0x6da9:sè # 涩
+0x6daa:fú # 涪
+0x6dab:guān # 涫
+0x6dac:xìng # 涬
+0x6dad:shòu,tāo # 涭
+0x6dae:shuàn # 涮
+0x6daf:yá # 涯
+0x6db0:chuò # 涰
+0x6db1:zhàng # 涱
+0x6db2:yè # 液
+0x6db3:kōng,náng # 涳
+0x6db4:wǎn,wò,yuān # 涴
+0x6db5:hán # 涵
+0x6db6:tuō,tuò # 涶
+0x6db7:dōng # 涷
+0x6db8:hé # 涸
+0x6db9:wō # 涹
+0x6dba:jū # 涺
+0x6dbb:shè # 涻
+0x6dbc:liáng,liàng # 涼
+0x6dbd:hūn # 涽
+0x6dbe:tà # 涾
+0x6dbf:zhuō # 涿
+0x6dc0:diàn # 淀
+0x6dc1:qiè,jí # 淁
+0x6dc2:dé # 淂
+0x6dc3:juàn # 淃
+0x6dc4:zī # 淄
+0x6dc5:xī # 淅
+0x6dc6:xiáo # 淆
+0x6dc7:qí # 淇
+0x6dc8:gǔ # 淈
+0x6dc9:guǒ,guàn # 淉
+0x6dca:yān # 淊
+0x6dcb:lín,lìn # 淋
+0x6dcc:tǎng,chǎng # 淌
+0x6dcd:zhōu # 淍
+0x6dce:pěng # 淎
+0x6dcf:hào # 淏
+0x6dd0:chāng # 淐
+0x6dd1:shū # 淑
+0x6dd2:qī # 淒
+0x6dd3:fāng # 淓
+0x6dd4:zhí # 淔
+0x6dd5:lù # 淕
+0x6dd6:nào,chuò,zhuō # 淖
+0x6dd7:jú # 淗
+0x6dd8:táo # 淘
+0x6dd9:cóng # 淙
+0x6dda:lèi # 淚
+0x6ddb:zhè # 淛
+0x6ddc:píng,péng # 淜
+0x6ddd:féi # 淝
+0x6dde:sōng # 淞
+0x6ddf:tiǎn # 淟
+0x6de0:pì,pèi # 淠
+0x6de1:dàn # 淡
+0x6de2:yù,xù # 淢
+0x6de3:ní # 淣
+0x6de4:yū # 淤
+0x6de5:lù # 淥
+0x6de6:gàn # 淦
+0x6de7:mì # 淧
+0x6de8:jìng,chēng # 淨
+0x6de9:líng # 淩
+0x6dea:lún # 淪
+0x6deb:yín # 淫
+0x6dec:cuì # 淬
+0x6ded:qú # 淭
+0x6dee:huái # 淮
+0x6def:yù # 淯
+0x6df0:niǎn,shěn # 淰
+0x6df1:shēn # 深
+0x6df2:biāo,hǔ # 淲
+0x6df3:chún,zhūn # 淳
+0x6df4:hū # 淴
+0x6df5:yuān # 淵
+0x6df6:lái # 淶
+0x6df7:hùn,hún # 混
+0x6df8:qīng # 淸
+0x6df9:yān # 淹
+0x6dfa:qiǎn # 淺
+0x6dfb:tiān # 添
+0x6dfc:miǎo # 淼
+0x6dfd:zhǐ # 淽
+0x6dfe:yǐn # 淾
+0x6dff:bó # 淿
+0x6e00:bèn # 渀
+0x6e01:yuān # 渁
+0x6e02:wèn,mín # 渂
+0x6e03:ruò,rè,luò # 渃
+0x6e04:fēi # 渄
+0x6e05:qīng # 清
+0x6e06:yuān # 渆
+0x6e07:kě # 渇
+0x6e08:jì,jǐ # 済
+0x6e09:shè # 渉
+0x6e0a:yuān # 渊
+0x6e0c:lù # 渌
+0x6e0d:zì # 渍
+0x6e0e:dú,dòu # 渎
+0x6e10:jiàn,jiān # 渐
+0x6e11:miǎn,shéng # 渑
+0x6e12:pài # 渒
+0x6e14:yú # 渔
+0x6e15:yuān # 渕
+0x6e16:shěn # 渖
+0x6e17:shèn # 渗
+0x6e18:róu # 渘
+0x6e19:huàn # 渙
+0x6e1a:zhǔ # 渚
+0x6e1b:jiǎn # 減
+0x6e1c:nuǎn,nuán # 渜
+0x6e1d:yú # 渝
+0x6e1e:qiú,wù # 渞
+0x6e1f:tíng,tīng # 渟
+0x6e20:qú,jù # 渠
+0x6e21:dù # 渡
+0x6e22:fēng # 渢
+0x6e23:zhā # 渣
+0x6e24:bó # 渤
+0x6e25:wò # 渥
+0x6e26:wō,guō # 渦
+0x6e27:tí,dī,dì # 渧
+0x6e28:wěi # 渨
+0x6e29:wēn # 温
+0x6e2a:rú # 渪
+0x6e2b:xiè # 渫
+0x6e2c:cè # 測
+0x6e2d:wèi # 渭
+0x6e2e:hé # 渮
+0x6e2f:gǎng,jiǎng # 港
+0x6e30:yān,yǎn # 渰
+0x6e31:hóng # 渱
+0x6e32:xuàn # 渲
+0x6e33:mǐ # 渳
+0x6e34:kě # 渴
+0x6e35:máo # 渵
+0x6e36:yīng # 渶
+0x6e37:yǎn # 渷
+0x6e38:yóu # 游
+0x6e39:hōng,qìng # 渹
+0x6e3a:miǎo # 渺
+0x6e3b:shěng # 渻
+0x6e3c:měi # 渼
+0x6e3d:zāi # 渽
+0x6e3e:hún # 渾
+0x6e3f:nài # 渿
+0x6e40:guǐ # 湀
+0x6e41:chì # 湁
+0x6e42:è # 湂
+0x6e43:pài # 湃
+0x6e44:méi # 湄
+0x6e45:liàn # 湅
+0x6e46:qì # 湆
+0x6e47:qì # 湇
+0x6e48:méi # 湈
+0x6e49:tián # 湉
+0x6e4a:còu # 湊
+0x6e4b:wéi # 湋
+0x6e4c:cān # 湌
+0x6e4d:tuān # 湍
+0x6e4e:miǎn # 湎
+0x6e4f:huì,mǐn,xū # 湏
+0x6e50:pò # 湐
+0x6e51:xǔ,xū # 湑
+0x6e52:jí # 湒
+0x6e53:pén # 湓
+0x6e54:jiān # 湔
+0x6e55:jiǎn # 湕
+0x6e56:hú # 湖
+0x6e57:fèng # 湗
+0x6e58:xiāng # 湘
+0x6e59:yì # 湙
+0x6e5a:yìn # 湚
+0x6e5b:zhàn # 湛
+0x6e5c:shí # 湜
+0x6e5d:jiē # 湝
+0x6e5e:zhēn # 湞
+0x6e5f:huáng # 湟
+0x6e60:tàn # 湠
+0x6e61:yú # 湡
+0x6e62:bì # 湢
+0x6e63:mǐn,hūn # 湣
+0x6e64:shī # 湤
+0x6e65:tū # 湥
+0x6e66:shēng # 湦
+0x6e67:yǒng # 湧
+0x6e68:jú # 湨
+0x6e69:dòng # 湩
+0x6e6b:qiū,jiǎo # 湫
+0x6e6c:qiū,jiǎo # 湬
+0x6e6e:yān,yīn # 湮
+0x6e6f:tāng,shāng # 湯
+0x6e70:lóng # 湰
+0x6e71:huò # 湱
+0x6e72:yuán # 湲
+0x6e73:nǎn # 湳
+0x6e74:bàn,pán # 湴
+0x6e75:yǒu # 湵
+0x6e76:quán # 湶
+0x6e77:zhuāng,hún # 湷
+0x6e78:liàng # 湸
+0x6e79:chán # 湹
+0x6e7a:xián # 湺
+0x6e7b:chún # 湻
+0x6e7c:niè # 湼
+0x6e7d:zī # 湽
+0x6e7e:wān # 湾
+0x6e7f:shī # 湿
+0x6e80:mǎn # 満
+0x6e81:yíng # 溁
+0x6e83:kuì,huì # 溃
+0x6e85:jiàn,jiān # 溅
+0x6e86:xù # 溆
+0x6e87:lóu # 溇
+0x6e88:wéi # 溈
+0x6e89:gài # 溉
+0x6e8c:pō # 溌
+0x6e8d:jìn # 溍
+0x6e8e:yàn,guì # 溎
+0x6e8f:táng # 溏
+0x6e90:yuán # 源
+0x6e91:suǒ # 溑
+0x6e92:yuán # 溒
+0x6e93:lián,liǎn,nián,xián,xiàn # 溓
+0x6e94:yǎo # 溔
+0x6e95:méng # 溕
+0x6e96:zhǔn # 準
+0x6e97:chéng # 溗
+0x6e98:kè # 溘
+0x6e99:tài # 溙
+0x6e9a:dá,tǎ # 溚
+0x6e9b:wā # 溛
+0x6e9c:liū,liù # 溜
+0x6e9d:gōu # 溝
+0x6e9e:sāo # 溞
+0x6e9f:míng # 溟
+0x6ea0:zhà # 溠
+0x6ea1:shí # 溡
+0x6ea2:yì # 溢
+0x6ea3:lùn # 溣
+0x6ea4:mǎ # 溤
+0x6ea5:pǔ # 溥
+0x6ea6:wēi # 溦
+0x6ea7:lì # 溧
+0x6ea8:zāi # 溨
+0x6ea9:wù # 溩
+0x6eaa:xī # 溪
+0x6eab:wēn # 溫
+0x6eac:qiāng # 溬
+0x6ead:zé # 溭
+0x6eae:shī # 溮
+0x6eaf:sù # 溯
+0x6eb0:ái # 溰
+0x6eb1:zhēn,qín # 溱
+0x6eb2:sōu # 溲
+0x6eb3:yún # 溳
+0x6eb4:xiù # 溴
+0x6eb5:yīn # 溵
+0x6eb6:róng # 溶
+0x6eb7:hùn # 溷
+0x6eb8:sù # 溸
+0x6eb9:suò # 溹
+0x6eba:nì,niào # 溺
+0x6ebb:tā # 溻
+0x6ebc:shī # 溼
+0x6ebd:rù # 溽
+0x6ebe:āi # 溾
+0x6ebf:pàn # 溿
+0x6ec0:chù,xù # 滀
+0x6ec1:chú # 滁
+0x6ec2:pāng # 滂
+0x6ec3:wěng,wēng # 滃
+0x6ec4:cāng # 滄
+0x6ec5:miè # 滅
+0x6ec6:gé # 滆
+0x6ec7:diān # 滇
+0x6ec8:hào,xuè # 滈
+0x6ec9:huàng # 滉
+0x6eca:qì,xì,xiē # 滊
+0x6ecb:zī # 滋
+0x6ecc:dí # 滌
+0x6ecd:zhì # 滍
+0x6ece:xíng,yíng # 滎
+0x6ecf:fǔ # 滏
+0x6ed0:jié # 滐
+0x6ed1:huá # 滑
+0x6ed2:gē # 滒
+0x6ed3:zǐ # 滓
+0x6ed4:tāo # 滔
+0x6ed5:téng # 滕
+0x6ed6:suī # 滖
+0x6ed7:bì # 滗
+0x6ed8:jiào # 滘
+0x6ed9:huì # 滙
+0x6eda:gǔn # 滚
+0x6edb:yín # 滛
+0x6edc:zé,hào # 滜
+0x6edd:lóng # 滝
+0x6ede:zhì # 滞
+0x6edf:yàn # 滟
+0x6ee0:shè # 滠
+0x6ee1:mǎn # 满
+0x6ee2:yíng # 滢
+0x6ee3:chún # 滣
+0x6ee4:lǜ # 滤
+0x6ee5:làn # 滥
+0x6ee6:luán # 滦
+0x6ee8:bīn # 滨
+0x6ee9:tān # 滩
+0x6eea:yù # 滪
+0x6eeb:xiǔ # 滫
+0x6eec:hù # 滬
+0x6eed:bì # 滭
+0x6eee:biāo # 滮
+0x6eef:zhì # 滯
+0x6ef0:jiàng # 滰
+0x6ef1:kòu # 滱
+0x6ef2:shèn # 滲
+0x6ef3:shāng # 滳
+0x6ef4:dī # 滴
+0x6ef5:mì # 滵
+0x6ef6:áo # 滶
+0x6ef7:lǔ # 滷
+0x6ef8:hǔ,xǔ # 滸
+0x6ef9:hū # 滹
+0x6efa:yōu # 滺
+0x6efb:chǎn # 滻
+0x6efc:fàn # 滼
+0x6efd:yōng # 滽
+0x6efe:gǔn # 滾
+0x6eff:mǎn # 滿
+0x6f00:qǐng # 漀
+0x6f01:yú # 漁
+0x6f02:piāo,piǎo,piào # 漂
+0x6f03:jì # 漃
+0x6f04:yá # 漄
+0x6f05:cháo # 漅
+0x6f06:qī # 漆
+0x6f07:xǐ # 漇
+0x6f08:jì # 漈
+0x6f09:lù # 漉
+0x6f0a:lóu # 漊
+0x6f0b:lóng # 漋
+0x6f0c:jǐn # 漌
+0x6f0d:guó # 漍
+0x6f0e:cóng,sǒng # 漎
+0x6f0f:lòu # 漏
+0x6f10:zhí # 漐
+0x6f11:gài # 漑
+0x6f12:qiáng # 漒
+0x6f13:lí # 漓
+0x6f14:yǎn # 演
+0x6f15:cáo # 漕
+0x6f16:jiào # 漖
+0x6f17:cōng # 漗
+0x6f18:chún # 漘
+0x6f19:tuán,zhuān # 漙
+0x6f1a:òu,ōu # 漚
+0x6f1b:téng # 漛
+0x6f1c:yě # 漜
+0x6f1d:xí # 漝
+0x6f1e:mì # 漞
+0x6f1f:táng # 漟
+0x6f20:mò # 漠
+0x6f21:shāng # 漡
+0x6f22:hàn # 漢
+0x6f23:lián # 漣
+0x6f24:lǎn # 漤
+0x6f25:wā # 漥
+0x6f26:chí # 漦
+0x6f27:gān # 漧
+0x6f28:féng,péng # 漨
+0x6f29:xuán # 漩
+0x6f2a:yī # 漪
+0x6f2b:màn # 漫
+0x6f2c:zì # 漬
+0x6f2d:mǎng # 漭
+0x6f2e:kāng # 漮
+0x6f2f:luò,tà # 漯
+0x6f30:bēn,pēng # 漰
+0x6f31:shù # 漱
+0x6f32:zhǎng,zhàng # 漲
+0x6f33:zhāng # 漳
+0x6f34:chóng,zhuàng # 漴
+0x6f35:xù # 漵
+0x6f36:huàn # 漶
+0x6f37:huǒ,huò,kuò # 漷
+0x6f38:jiàn,jiān # 漸
+0x6f39:yān # 漹
+0x6f3a:shuǎng # 漺
+0x6f3b:liáo,liú # 漻
+0x6f3c:cuǐ,cuī # 漼
+0x6f3d:tí # 漽
+0x6f3e:yàng # 漾
+0x6f3f:jiāng,jiàng # 漿
+0x6f40:cóng,zǒng # 潀
+0x6f41:yǐng # 潁
+0x6f42:hóng # 潂
+0x6f43:xiǔ # 潃
+0x6f44:shù # 潄
+0x6f45:guàn # 潅
+0x6f46:yíng # 潆
+0x6f47:xiāo # 潇
+0x6f4a:xù # 潊
+0x6f4b:liàn # 潋
+0x6f4c:zhì # 潌
+0x6f4d:wéi # 潍
+0x6f4e:pì,piē # 潎
+0x6f4f:yù # 潏
+0x6f50:jiào,qiáo # 潐
+0x6f51:pō # 潑
+0x6f52:dàng,xiàng # 潒
+0x6f53:huì # 潓
+0x6f54:jié # 潔
+0x6f55:wǔ # 潕
+0x6f56:pá # 潖
+0x6f57:jí # 潗
+0x6f58:pān # 潘
+0x6f59:wéi # 潙
+0x6f5a:sù # 潚
+0x6f5b:qián # 潛
+0x6f5c:qián # 潜
+0x6f5d:xī,yà # 潝
+0x6f5e:lù # 潞
+0x6f5f:xì # 潟
+0x6f60:xùn,sùn # 潠
+0x6f61:dùn # 潡
+0x6f62:huáng,guāng # 潢
+0x6f63:mǐn # 潣
+0x6f64:rùn # 潤
+0x6f65:sù # 潥
+0x6f66:lǎo,lào,liáo # 潦
+0x6f67:zhēn # 潧
+0x6f68:cōng,zòng # 潨
+0x6f69:yì # 潩
+0x6f6a:zhí,zhì # 潪
+0x6f6b:wān # 潫
+0x6f6c:tān,shàn # 潬
+0x6f6d:tán # 潭
+0x6f6e:cháo # 潮
+0x6f6f:xún # 潯
+0x6f70:kuì,huì # 潰
+0x6f72:shào # 潲
+0x6f73:tú,zhā # 潳
+0x6f74:zhū # 潴
+0x6f75:sàn,sǎ # 潵
+0x6f76:hēi # 潶
+0x6f77:bì # 潷
+0x6f78:shān # 潸
+0x6f79:chán # 潹
+0x6f7a:chán # 潺
+0x6f7b:shǔ # 潻
+0x6f7c:tóng # 潼
+0x6f7d:pū # 潽
+0x6f7e:lín # 潾
+0x6f7f:wéi # 潿
+0x6f80:sè # 澀
+0x6f81:sè # 澁
+0x6f82:chéng # 澂
+0x6f83:jiǒng # 澃
+0x6f84:chéng,dèng # 澄
+0x6f85:huà # 澅
+0x6f86:jiāo # 澆
+0x6f87:lào # 澇
+0x6f88:chè # 澈
+0x6f89:gǎn # 澉
+0x6f8a:cūn,cún # 澊
+0x6f8b:jǐng # 澋
+0x6f8c:sī # 澌
+0x6f8d:shù,zhù # 澍
+0x6f8e:péng # 澎
+0x6f8f:hán # 澏
+0x6f90:yún # 澐
+0x6f91:liū,liù # 澑
+0x6f92:hòng,gǒng # 澒
+0x6f93:fú # 澓
+0x6f94:hào # 澔
+0x6f95:hé # 澕
+0x6f96:xián # 澖
+0x6f97:jiàn # 澗
+0x6f98:shān # 澘
+0x6f99:xì # 澙
+0x6f9c:lán # 澜
+0x6f9e:yú # 澞
+0x6f9f:lǐn # 澟
+0x6fa0:miǎn,shéng # 澠
+0x6fa1:zǎo # 澡
+0x6fa2:dāng # 澢
+0x6fa3:huàn # 澣
+0x6fa4:zé,shì # 澤
+0x6fa5:xiè # 澥
+0x6fa6:yù # 澦
+0x6fa7:lǐ # 澧
+0x6fa8:shì # 澨
+0x6fa9:xué # 澩
+0x6faa:líng # 澪
+0x6fab:wàn,màn # 澫
+0x6fac:zī # 澬
+0x6fad:yōng,yǒng # 澭
+0x6fae:kuài,huì # 澮
+0x6faf:càn # 澯
+0x6fb0:liàn # 澰
+0x6fb1:diàn # 澱
+0x6fb2:yè # 澲
+0x6fb3:ào # 澳
+0x6fb4:huán # 澴
+0x6fb5:zhēn # 澵
+0x6fb6:chán # 澶
+0x6fb7:màn # 澷
+0x6fb8:gǎn # 澸
+0x6fb9:dàn,tán # 澹
+0x6fba:yì # 澺
+0x6fbb:suì # 澻
+0x6fbc:pì # 澼
+0x6fbd:jù # 澽
+0x6fbe:tà # 澾
+0x6fbf:qín # 澿
+0x6fc0:jī # 激
+0x6fc1:zhuó # 濁
+0x6fc2:lián # 濂
+0x6fc3:nóng # 濃
+0x6fc4:guō,wō # 濄
+0x6fc5:jìn # 濅
+0x6fc6:fén,pēn # 濆
+0x6fc7:sè # 濇
+0x6fc8:jí,shà # 濈
+0x6fc9:suī # 濉
+0x6fca:huì,huò # 濊
+0x6fcb:chǔ # 濋
+0x6fcc:tà # 濌
+0x6fcd:sōng # 濍
+0x6fce:dǐng,tìng # 濎
+0x6fd0:zhǔ # 濐
+0x6fd1:lài # 濑
+0x6fd2:bīn # 濒
+0x6fd3:lián # 濓
+0x6fd4:mǐ,nǐ # 濔
+0x6fd5:shī # 濕
+0x6fd6:shù # 濖
+0x6fd7:mì # 濗
+0x6fd8:nìng # 濘
+0x6fd9:yíng # 濙
+0x6fda:yíng # 濚
+0x6fdb:méng # 濛
+0x6fdc:jìn # 濜
+0x6fdd:qí # 濝
+0x6fde:bì,pì # 濞
+0x6fdf:jì,jǐ # 濟
+0x6fe0:háo # 濠
+0x6fe1:rú # 濡
+0x6fe2:cuì,zuǐ # 濢
+0x6fe3:wò # 濣
+0x6fe4:tāo # 濤
+0x6fe5:yǐn # 濥
+0x6fe6:yīn # 濦
+0x6fe7:duì # 濧
+0x6fe8:cí # 濨
+0x6fe9:huò,hù # 濩
+0x6fea:qìng # 濪
+0x6feb:làn # 濫
+0x6fec:jùn,xùn # 濬
+0x6fed:ǎi,kài,kè # 濭
+0x6fee:pú # 濮
+0x6fef:zhuó,zhào # 濯
+0x6ff0:wéi # 濰
+0x6ff1:bīn # 濱
+0x6ff2:gǔ # 濲
+0x6ff3:qián # 濳
+0x6ff4:yíng # 濴
+0x6ff6:kuò # 濶
+0x6ff7:fèi # 濷
+0x6ffa:jiàn,jiān # 濺
+0x6ffb:wěi,duì # 濻
+0x6ffc:luò,pō # 濼
+0x6ffd:zàn,cuán # 濽
+0x6ffe:lǜ # 濾
+0x6fff:lì # 濿
+0x7000:yōu # 瀀
+0x7001:yǎng,yàng # 瀁
+0x7002:lǔ # 瀂
+0x7003:sì # 瀃
+0x7004:zhì # 瀄
+0x7005:yíng # 瀅
+0x7006:dú,dòu # 瀆
+0x7007:wǎng,wāng # 瀇
+0x7008:huī # 瀈
+0x7009:xiè # 瀉
+0x700a:pán # 瀊
+0x700b:shěn # 瀋
+0x700c:biāo # 瀌
+0x700d:chán # 瀍
+0x700e:miè,mò # 瀎
+0x700f:liú # 瀏
+0x7010:jiān # 瀐
+0x7011:pù,bào # 瀑
+0x7012:sè # 瀒
+0x7013:chéng,dèng # 瀓
+0x7014:gǔ # 瀔
+0x7015:bīn # 瀕
+0x7016:huò # 瀖
+0x7017:xiàn # 瀗
+0x7018:lú # 瀘
+0x7019:qìn # 瀙
+0x701a:hàn # 瀚
+0x701b:yíng # 瀛
+0x701c:róng # 瀜
+0x701d:lì # 瀝
+0x701e:jìng # 瀞
+0x701f:xiāo # 瀟
+0x7020:yíng # 瀠
+0x7021:suǐ # 瀡
+0x7022:wěi,duì # 瀢
+0x7023:xiè # 瀣
+0x7024:huái,wāi # 瀤
+0x7025:xuè # 瀥
+0x7026:zhū # 瀦
+0x7027:lóng,shuāng # 瀧
+0x7028:lài # 瀨
+0x7029:duì # 瀩
+0x702a:fàn # 瀪
+0x702b:hú # 瀫
+0x702c:lài # 瀬
+0x702f:yíng # 瀯
+0x7030:mí # 瀰
+0x7031:jì # 瀱
+0x7032:liàn # 瀲
+0x7033:jiàn,zùn # 瀳
+0x7034:yīng,yǐng,yìng # 瀴
+0x7035:fèn # 瀵
+0x7036:lín # 瀶
+0x7037:yì # 瀷
+0x7038:jiān # 瀸
+0x7039:yuè # 瀹
+0x703a:chán # 瀺
+0x703b:dài # 瀻
+0x703c:ráng,nǎng # 瀼
+0x703d:jiǎn # 瀽
+0x703e:lán # 瀾
+0x703f:fán # 瀿
+0x7040:shuàng # 灀
+0x7041:yuān # 灁
+0x7042:zhuó,jiào,zé # 灂
+0x7043:fēng # 灃
+0x7044:shè # 灄
+0x7045:lěi # 灅
+0x7046:lán # 灆
+0x7047:cóng # 灇
+0x7048:qú # 灈
+0x7049:yōng # 灉
+0x704a:qián # 灊
+0x704b:fǎ # 灋
+0x704c:guàn # 灌
+0x704d:jué # 灍
+0x704e:yàn # 灎
+0x704f:hào # 灏
+0x7051:sǎ # 灑
+0x7052:zàn,cuán # 灒
+0x7053:luán,luàn # 灓
+0x7054:yàn # 灔
+0x7055:lí # 灕
+0x7056:mǐ # 灖
+0x7057:shàn # 灗
+0x7058:tān # 灘
+0x7059:dǎng,tǎng # 灙
+0x705a:jiǎo # 灚
+0x705b:chǎn # 灛
+0x705d:hào # 灝
+0x705e:bà # 灞
+0x705f:zhú # 灟
+0x7060:lǎn # 灠
+0x7061:lán # 灡
+0x7062:nǎng # 灢
+0x7063:wān # 灣
+0x7064:luán # 灤
+0x7065:xún,quán,quàn # 灥
+0x7066:xiǎn # 灦
+0x7067:yàn # 灧
+0x7068:gàn # 灨
+0x7069:yàn # 灩
+0x706a:yù # 灪
+0x706b:huǒ # 火
+0x706c:huǒ,biāo # 灬
+0x706d:miè # 灭
+0x706e:guāng # 灮
+0x706f:dēng # 灯
+0x7070:huī # 灰
+0x7071:xiāo # 灱
+0x7072:xiāo # 灲
+0x7074:hōng # 灴
+0x7075:líng # 灵
+0x7076:zào # 灶
+0x7077:zhuàn # 灷
+0x7078:jiǔ # 灸
+0x7079:zhà,yù # 灹
+0x707a:xiè # 灺
+0x707b:chì # 灻
+0x707c:zhuó # 灼
+0x707d:zāi # 災
+0x707e:zāi # 灾
+0x707f:càn # 灿
+0x7080:yáng # 炀
+0x7081:qì # 炁
+0x7082:zhōng # 炂
+0x7083:fén,bèn # 炃
+0x7084:niǔ # 炄
+0x7085:jiǒng,guì # 炅
+0x7086:wén # 炆
+0x7087:pū # 炇
+0x7088:yì # 炈
+0x7089:lú # 炉
+0x708a:chuī # 炊
+0x708b:pī # 炋
+0x708c:kài # 炌
+0x708d:pàn # 炍
+0x708e:yán # 炎
+0x708f:yán # 炏
+0x7090:pàng,fēng # 炐
+0x7091:mù # 炑
+0x7092:chǎo # 炒
+0x7093:liào # 炓
+0x7094:quē,guì # 炔
+0x7095:kàng # 炕
+0x7096:dùn # 炖
+0x7097:guāng # 炗
+0x7098:xìn # 炘
+0x7099:zhì # 炙
+0x709b:guāng # 炛
+0x709c:wěi # 炜
+0x709d:qiàng # 炝
+0x709f:dá # 炟
+0x70a0:xiá # 炠
+0x70a1:zhēng # 炡
+0x70a2:zhú # 炢
+0x70a3:kě # 炣
+0x70a4:zhào,zhāo # 炤
+0x70a5:fú # 炥
+0x70a6:bá # 炦
+0x70a7:xiè # 炧
+0x70a8:xiè # 炨
+0x70a9:lìng # 炩
+0x70aa:zhuō,chù # 炪
+0x70ab:xuàn # 炫
+0x70ac:jù # 炬
+0x70ad:tàn # 炭
+0x70ae:páo,bāo,pào # 炮
+0x70af:jiǒng # 炯
+0x70b0:páo,fǒu # 炰
+0x70b1:tái # 炱
+0x70b2:tái # 炲
+0x70b3:bǐng # 炳
+0x70b4:yǎng # 炴
+0x70b5:tōng # 炵
+0x70b6:shǎn,qián,shān # 炶
+0x70b7:zhù # 炷
+0x70b8:zhà,zhá # 炸
+0x70b9:diǎn # 点
+0x70ba:wéi,wèi # 為
+0x70bb:shí # 炻
+0x70bc:liàn # 炼
+0x70bd:chì # 炽
+0x70be:huǎng # 炾
+0x70c0:hū # 烀
+0x70c1:shuò # 烁
+0x70c2:làn # 烂
+0x70c3:tīng # 烃
+0x70c4:jiǎo,yào # 烄
+0x70c5:xù # 烅
+0x70c6:héng # 烆
+0x70c7:quǎn # 烇
+0x70c8:liè # 烈
+0x70c9:huàn # 烉
+0x70ca:yáng,yàng # 烊
+0x70cb:xiāo # 烋
+0x70cc:xiū # 烌
+0x70cd:xiǎn # 烍
+0x70ce:yín # 烎
+0x70cf:wū # 烏
+0x70d0:zhōu # 烐
+0x70d1:yáo # 烑
+0x70d2:shì # 烒
+0x70d3:wēi # 烓
+0x70d4:tóng,dòng # 烔
+0x70d5:miè # 烕
+0x70d6:zāi # 烖
+0x70d7:kài # 烗
+0x70d8:hōng # 烘
+0x70d9:lào,luò # 烙
+0x70da:xiá # 烚
+0x70db:zhú # 烛
+0x70dc:xuǎn # 烜
+0x70dd:zhēng # 烝
+0x70de:pò # 烞
+0x70df:yān # 烟
+0x70e0:huí,huǐ # 烠
+0x70e1:guāng # 烡
+0x70e2:chè # 烢
+0x70e3:huī # 烣
+0x70e4:kǎo # 烤
+0x70e6:fán # 烦
+0x70e7:shāo # 烧
+0x70e8:yè # 烨
+0x70e9:huì # 烩
+0x70eb:tàng # 烫
+0x70ec:jìn # 烬
+0x70ed:rè # 热
+0x70ef:xī # 烯
+0x70f0:fú,páo # 烰
+0x70f1:jiǒng # 烱
+0x70f2:xiè,chè # 烲
+0x70f3:pǔ # 烳
+0x70f4:tīng # 烴
+0x70f5:zhuó # 烵
+0x70f6:tǐng # 烶
+0x70f7:wán # 烷
+0x70f8:hǎi # 烸
+0x70f9:pēng # 烹
+0x70fa:lǎng # 烺
+0x70fb:yàn # 烻
+0x70fc:xù # 烼
+0x70fd:fēng # 烽
+0x70fe:chì # 烾
+0x70ff:róng # 烿
+0x7100:hú # 焀
+0x7102:shū # 焂
+0x7103:hè # 焃
+0x7104:xūn,hūn # 焄
+0x7105:kù # 焅
+0x7106:juān,yè # 焆
+0x7107:xiāo # 焇
+0x7108:xī # 焈
+0x7109:yān # 焉
+0x710a:hàn # 焊
+0x710b:zhuàng # 焋
+0x710c:qū,jùn # 焌
+0x710d:dì # 焍
+0x710e:xiè,chè # 焎
+0x710f:jí,qì # 焏
+0x7110:wù # 焐
+0x7113:hán # 焓
+0x7114:yàn # 焔
+0x7115:huàn # 焕
+0x7116:mèn # 焖
+0x7117:jú # 焗
+0x7118:dào,tāo # 焘
+0x7119:bèi # 焙
+0x711a:fén # 焚
+0x711b:lìn # 焛
+0x711c:kūn # 焜
+0x711d:hùn # 焝
+0x711e:tūn # 焞
+0x711f:xī # 焟
+0x7120:cuì # 焠
+0x7121:wú,mó # 無
+0x7122:hōng # 焢
+0x7123:chǎo,jù # 焣
+0x7124:fǔ # 焤
+0x7125:wò,ài # 焥
+0x7126:jiāo # 焦
+0x7127:zǒng,cōng # 焧
+0x7128:fèng # 焨
+0x7129:píng # 焩
+0x712a:qióng # 焪
+0x712b:ruò # 焫
+0x712c:xī,yì # 焬
+0x712d:qióng # 焭
+0x712e:xìn # 焮
+0x712f:zhuō,chāo # 焯
+0x7130:yàn # 焰
+0x7131:yàn # 焱
+0x7132:yì # 焲
+0x7133:jué # 焳
+0x7134:yù # 焴
+0x7135:gàng # 焵
+0x7136:rán # 然
+0x7137:pí # 焷
+0x7138:xiǒng,yīng # 焸
+0x713a:shēng # 焺
+0x713b:chàng # 焻
+0x713c:shāo # 焼
+0x713f:gēng # 焿
+0x7141:chén # 煁
+0x7142:hè # 煂
+0x7143:kuǐ # 煃
+0x7144:zhǒng # 煄
+0x7145:duàn # 煅
+0x7146:xiā # 煆
+0x7147:huī,yùn,xūn # 煇
+0x7148:fèng # 煈
+0x7149:liàn # 煉
+0x714a:xuān # 煊
+0x714b:xīng # 煋
+0x714c:huáng # 煌
+0x714d:jiǎo,qiāo # 煍
+0x714e:jiān # 煎
+0x714f:bì # 煏
+0x7150:yīng # 煐
+0x7151:zhǔ # 煑
+0x7152:wěi # 煒
+0x7153:tuān # 煓
+0x7154:shǎn,qián,shān # 煔
+0x7155:xī,yí # 煕
+0x7156:nuǎn,xuān # 煖
+0x7157:nuǎn # 煗
+0x7158:chán # 煘
+0x7159:yān # 煙
+0x715a:jiǒng # 煚
+0x715b:jiǒng # 煛
+0x715c:yù # 煜
+0x715d:mèi # 煝
+0x715e:shā,shà # 煞
+0x715f:wèi # 煟
+0x7160:yè,zhá # 煠
+0x7161:jìn # 煡
+0x7162:qióng # 煢
+0x7163:róu # 煣
+0x7164:méi # 煤
+0x7165:huàn # 煥
+0x7166:xù # 煦
+0x7167:zhào # 照
+0x7168:wēi # 煨
+0x7169:fán # 煩
+0x716a:qiú # 煪
+0x716b:suì # 煫
+0x716c:yáng,yàng # 煬
+0x716d:liè # 煭
+0x716e:zhǔ # 煮
+0x7170:zào # 煰
+0x7171:guā # 煱
+0x7172:bāo # 煲
+0x7173:hú # 煳
+0x7174:yūn,yǔn # 煴
+0x7175:nǎn # 煵
+0x7178:biān # 煸
+0x7179:gòu # 煹
+0x717a:tuì # 煺
+0x717b:táng # 煻
+0x717c:chǎo # 煼
+0x717d:shān # 煽
+0x717e:ēn,yūn # 煾
+0x717f:bó # 煿
+0x7180:huǎng # 熀
+0x7181:xié # 熁
+0x7182:xì # 熂
+0x7183:wù # 熃
+0x7184:xī # 熄
+0x7185:yūn,yǔn # 熅
+0x7186:hé # 熆
+0x7187:hè,xiāo # 熇
+0x7188:xī # 熈
+0x7189:yún # 熉
+0x718a:xióng # 熊
+0x718b:xióng # 熋
+0x718c:shǎn # 熌
+0x718e:yào # 熎
+0x718f:xūn,xùn # 熏
+0x7190:mì # 熐
+0x7191:lián # 熑
+0x7192:yíng # 熒
+0x7193:wǔ # 熓
+0x7194:róng # 熔
+0x7197:qiàng # 熗
+0x7198:liū # 熘
+0x7199:xī # 熙
+0x719a:bì # 熚
+0x719b:biāo # 熛
+0x719c:cōng,zǒng # 熜
+0x719d:lù,āo # 熝
+0x719e:jiān # 熞
+0x719f:shú,shóu # 熟
+0x71a0:yì # 熠
+0x71a1:lóu # 熡
+0x71a2:péng,fēng # 熢
+0x71a3:suī,cuǐ # 熣
+0x71a4:yì # 熤
+0x71a5:tēng,tōng # 熥
+0x71a6:jué # 熦
+0x71a7:zōng # 熧
+0x71a8:yùn,yù # 熨
+0x71a9:hù # 熩
+0x71aa:yí # 熪
+0x71ab:zhì # 熫
+0x71ac:āo,áo # 熬
+0x71ad:wèi # 熭
+0x71ae:liǔ # 熮
+0x71af:hàn,rǎn # 熯
+0x71b0:ōu,ǒu # 熰
+0x71b1:rè # 熱
+0x71b2:jiǒng # 熲
+0x71b3:màn # 熳
+0x71b5:shāng # 熵
+0x71b6:cuàn # 熶
+0x71b7:zèng # 熷
+0x71b8:jiān # 熸
+0x71b9:xī # 熹
+0x71ba:xī # 熺
+0x71bb:xī # 熻
+0x71bc:yì # 熼
+0x71bd:xiào # 熽
+0x71be:chì # 熾
+0x71bf:huáng,huǎng # 熿
+0x71c0:chǎn,dǎn,chàn # 燀
+0x71c1:yè # 燁
+0x71c2:tán # 燂
+0x71c3:rán # 燃
+0x71c4:yàn # 燄
+0x71c5:xún # 燅
+0x71c6:qiāo # 燆
+0x71c7:jùn # 燇
+0x71c8:dēng # 燈
+0x71c9:dùn # 燉
+0x71ca:shēn # 燊
+0x71cb:jiāo,qiáo,jué,zhuó # 燋
+0x71cc:fén # 燌
+0x71cd:sī # 燍
+0x71ce:liáo,liǎo # 燎
+0x71cf:yù # 燏
+0x71d0:lín # 燐
+0x71d1:tóng,dòng # 燑
+0x71d2:shāo # 燒
+0x71d3:fén # 燓
+0x71d4:fán # 燔
+0x71d5:yàn,yān # 燕
+0x71d6:xún # 燖
+0x71d7:làn # 燗
+0x71d8:měi # 燘
+0x71d9:tàng # 燙
+0x71da:yì # 燚
+0x71db:jiǒng # 燛
+0x71dc:mèn # 燜
+0x71df:yíng # 營
+0x71e0:yù # 燠
+0x71e1:yì # 燡
+0x71e2:xué # 燢
+0x71e3:lán # 燣
+0x71e4:tài,liè # 燤
+0x71e5:zào # 燥
+0x71e6:càn # 燦
+0x71e7:suì # 燧
+0x71e8:xī # 燨
+0x71e9:què # 燩
+0x71ea:zǒng # 燪
+0x71eb:lián # 燫
+0x71ec:huǐ # 燬
+0x71ed:zhú # 燭
+0x71ee:xiè # 燮
+0x71ef:líng # 燯
+0x71f0:wēi # 燰
+0x71f1:yì # 燱
+0x71f2:xié # 燲
+0x71f3:zhào # 燳
+0x71f4:huì # 燴
+0x71f7:lán # 燷
+0x71f8:xū # 燸
+0x71f9:xiǎn # 燹
+0x71fa:hè # 燺
+0x71fb:xūn # 燻
+0x71fc:jìn # 燼
+0x71fd:chóu # 燽
+0x71fe:dào,tāo # 燾
+0x71ff:yào # 燿
+0x7200:hè # 爀
+0x7201:làn # 爁
+0x7202:biāo # 爂
+0x7203:róng,yíng # 爃
+0x7204:lì,liè # 爄
+0x7205:mò # 爅
+0x7206:bào # 爆
+0x7207:ruò # 爇
+0x7208:lǜ # 爈
+0x7209:là,liè # 爉
+0x720a:āo # 爊
+0x720b:xūn,xùn # 爋
+0x720c:kuàng,huǎng # 爌
+0x720d:shuò # 爍
+0x720f:lì # 爏
+0x7210:lú # 爐
+0x7211:jué # 爑
+0x7212:liáo,liǎo # 爒
+0x7213:yàn,xún # 爓
+0x7214:xī # 爔
+0x7215:xiè # 爕
+0x7216:lóng # 爖
+0x7217:yè # 爗
+0x7219:rǎng # 爙
+0x721a:yuè # 爚
+0x721b:làn # 爛
+0x721c:cóng # 爜
+0x721d:jué # 爝
+0x721e:chóng # 爞
+0x721f:guàn # 爟
+0x7221:chè # 爡
+0x7222:mí # 爢
+0x7223:tǎng # 爣
+0x7224:làn # 爤
+0x7225:zhú # 爥
+0x7227:líng # 爧
+0x7228:cuàn # 爨
+0x7229:yù # 爩
+0x722a:zhǎo,zhuǎ # 爪
+0x722c:pá # 爬
+0x722d:zhēng # 爭
+0x722e:páo # 爮
+0x722f:chēng,chèn # 爯
+0x7230:yuán # 爰
+0x7231:ài # 爱
+0x7232:wéi,wèi # 爲
+0x7234:jué # 爴
+0x7235:jué # 爵
+0x7236:fù,fǔ # 父
+0x7237:yé # 爷
+0x7238:bà # 爸
+0x7239:diē # 爹
+0x723a:yé # 爺
+0x723b:yáo # 爻
+0x723c:zǔ # 爼
+0x723d:shuǎng # 爽
+0x723e:ěr # 爾
+0x723f:pán # 爿
+0x7240:chuáng # 牀
+0x7241:kē # 牁
+0x7242:zāng # 牂
+0x7243:dié # 牃
+0x7244:qiāng # 牄
+0x7245:yōng # 牅
+0x7246:qiáng # 牆
+0x7247:piàn,piān # 片
+0x7248:bǎn # 版
+0x7249:pàn # 牉
+0x724a:cháo # 牊
+0x724b:jiān # 牋
+0x724c:pái # 牌
+0x724d:dú # 牍
+0x724e:chuāng # 牎
+0x724f:yú # 牏
+0x7250:zhá # 牐
+0x7251:biān,miàn # 牑
+0x7252:dié # 牒
+0x7253:bǎng # 牓
+0x7254:bó # 牔
+0x7255:chuāng # 牕
+0x7256:yǒu # 牖
+0x7258:dú # 牘
+0x7259:yá # 牙
+0x725a:chēng,chèng # 牚
+0x725b:niú # 牛
+0x725d:pìn # 牝
+0x725e:jiū,lè # 牞
+0x725f:móu,mù # 牟
+0x7260:tā # 牠
+0x7261:mǔ # 牡
+0x7262:láo # 牢
+0x7263:rèn # 牣
+0x7264:māng # 牤
+0x7265:fāng # 牥
+0x7266:máo # 牦
+0x7267:mù # 牧
+0x7268:gāng # 牨
+0x7269:wù # 物
+0x726a:yàn # 牪
+0x726b:gē,qiú # 牫
+0x726c:bèi # 牬
+0x726d:sì # 牭
+0x726e:jiàn # 牮
+0x726f:gǔ # 牯
+0x7270:yòu,chōu # 牰
+0x7271:kē # 牱
+0x7272:shēng # 牲
+0x7273:mǔ # 牳
+0x7274:dǐ # 牴
+0x7275:qiān # 牵
+0x7276:quàn # 牶
+0x7277:quán # 牷
+0x7278:zì # 牸
+0x7279:tè # 特
+0x727a:xī # 牺
+0x727b:máng # 牻
+0x727c:kēng # 牼
+0x727d:qiān # 牽
+0x727e:wǔ # 牾
+0x727f:gù # 牿
+0x7280:xī # 犀
+0x7281:lí # 犁
+0x7282:lí # 犂
+0x7283:pǒu # 犃
+0x7284:jī # 犄
+0x7285:gāng # 犅
+0x7286:zhí,tè # 犆
+0x7287:bēn # 犇
+0x7288:quán # 犈
+0x7289:chún # 犉
+0x728a:dú # 犊
+0x728b:jù # 犋
+0x728c:jiā # 犌
+0x728d:jiān,qián # 犍
+0x728e:fēng # 犎
+0x728f:piān # 犏
+0x7290:kē # 犐
+0x7291:jú # 犑
+0x7292:kào # 犒
+0x7293:chú # 犓
+0x7294:xì # 犔
+0x7295:bèi # 犕
+0x7296:luò # 犖
+0x7297:jiè # 犗
+0x7298:má # 犘
+0x7299:sān # 犙
+0x729a:wèi # 犚
+0x729b:máo,lí # 犛
+0x729c:dūn # 犜
+0x729d:tóng # 犝
+0x729f:jiàng # 犟
+0x72a1:lì # 犡
+0x72a2:dú # 犢
+0x72a3:liè # 犣
+0x72a4:pái # 犤
+0x72a5:piāo # 犥
+0x72a6:bào # 犦
+0x72a7:xī # 犧
+0x72a8:chōu # 犨
+0x72a9:wéi # 犩
+0x72aa:kuí # 犪
+0x72ab:chōu # 犫
+0x72ac:quǎn # 犬
+0x72ae:quǎn,bá # 犮
+0x72af:fàn # 犯
+0x72b0:qiú # 犰
+0x72b1:jǐ # 犱
+0x72b2:chái # 犲
+0x72b3:zhuó,bào # 犳
+0x72b4:hān,àn # 犴
+0x72b5:gē # 犵
+0x72b6:zhuàng # 状
+0x72b7:guǎng # 犷
+0x72b8:mǎ # 犸
+0x72b9:yóu # 犹
+0x72ba:kàng,gǎng # 犺
+0x72bb:pèi,fèi # 犻
+0x72bc:hǒu # 犼
+0x72bd:yà # 犽
+0x72be:yín # 犾
+0x72bf:huān,fān # 犿
+0x72c0:zhuàng # 狀
+0x72c1:yǔn # 狁
+0x72c2:kuáng # 狂
+0x72c3:niǔ # 狃
+0x72c4:dí # 狄
+0x72c5:kuáng # 狅
+0x72c6:zhòng # 狆
+0x72c7:mù # 狇
+0x72c8:bèi # 狈
+0x72c9:pī # 狉
+0x72ca:jú # 狊
+0x72cb:yí,quán,chí # 狋
+0x72cc:shēng,xīng # 狌
+0x72cd:páo # 狍
+0x72ce:xiá # 狎
+0x72cf:tuó,yí # 狏
+0x72d0:hú # 狐
+0x72d1:líng # 狑
+0x72d2:fèi # 狒
+0x72d3:pī # 狓
+0x72d4:nǐ # 狔
+0x72d5:yǎo # 狕
+0x72d6:yòu # 狖
+0x72d7:gǒu # 狗
+0x72d8:xuè # 狘
+0x72d9:jū # 狙
+0x72da:dàn # 狚
+0x72db:bó # 狛
+0x72dc:kǔ # 狜
+0x72dd:xiǎn # 狝
+0x72de:níng # 狞
+0x72df:huán,huān # 狟
+0x72e0:hěn # 狠
+0x72e1:jiǎo # 狡
+0x72e2:hé,mò # 狢
+0x72e3:zhào # 狣
+0x72e4:jié # 狤
+0x72e5:xùn # 狥
+0x72e6:shān # 狦
+0x72e7:tà,shì # 狧
+0x72e8:róng # 狨
+0x72e9:shòu # 狩
+0x72ea:tóng,dòng # 狪
+0x72eb:lǎo # 狫
+0x72ec:dú # 独
+0x72ed:xiá # 狭
+0x72ee:shī # 狮
+0x72ef:kuài # 狯
+0x72f0:zhēng # 狰
+0x72f1:yù # 狱
+0x72f2:sūn # 狲
+0x72f3:yú # 狳
+0x72f4:bì # 狴
+0x72f5:máng,dòu # 狵
+0x72f6:xī,shǐ # 狶
+0x72f7:juàn # 狷
+0x72f8:lí # 狸
+0x72f9:xiá # 狹
+0x72fa:yín # 狺
+0x72fb:suān # 狻
+0x72fc:láng # 狼
+0x72fd:bèi # 狽
+0x72fe:zhì # 狾
+0x72ff:yán # 狿
+0x7300:shā # 猀
+0x7301:lì # 猁
+0x7302:hàn # 猂
+0x7303:xiǎn # 猃
+0x7304:jīng # 猄
+0x7305:pái # 猅
+0x7306:fēi # 猆
+0x7307:xiāo # 猇
+0x7308:bài,pí # 猈
+0x7309:qí # 猉
+0x730a:ní # 猊
+0x730b:biāo # 猋
+0x730c:yìn # 猌
+0x730d:lái # 猍
+0x730e:liè # 猎
+0x730f:jiān,yàn # 猏
+0x7310:qiāng # 猐
+0x7311:kūn # 猑
+0x7312:yàn # 猒
+0x7313:guō # 猓
+0x7314:zòng # 猔
+0x7315:mí # 猕
+0x7316:chāng # 猖
+0x7317:yī,yǐ # 猗
+0x7318:zhì # 猘
+0x7319:zhēng # 猙
+0x731a:yá,wèi # 猚
+0x731b:měng # 猛
+0x731c:cāi # 猜
+0x731d:cù # 猝
+0x731e:shē # 猞
+0x7321:luó # 猡
+0x7322:hú # 猢
+0x7323:zōng # 猣
+0x7324:guì # 猤
+0x7325:wěi # 猥
+0x7326:fēng # 猦
+0x7327:wō # 猧
+0x7328:yuán # 猨
+0x7329:xīng # 猩
+0x732a:zhū # 猪
+0x732b:māo,máo # 猫
+0x732c:wèi # 猬
+0x732d:chuàn,chuān # 猭
+0x732e:xiàn # 献
+0x732f:tuān,tuàn # 猯
+0x7330:yà,jiá,qiè # 猰
+0x7331:náo # 猱
+0x7332:xiē,hè,gé,hài # 猲
+0x7333:jiā # 猳
+0x7334:hóu # 猴
+0x7335:biān,piàn # 猵
+0x7336:yóu # 猶
+0x7337:yóu # 猷
+0x7338:méi # 猸
+0x7339:chá # 猹
+0x733a:yáo # 猺
+0x733b:sūn # 猻
+0x733c:bó,pò # 猼
+0x733d:míng # 猽
+0x733e:huá # 猾
+0x733f:yuán # 猿
+0x7340:sōu # 獀
+0x7341:mǎ # 獁
+0x7342:huán # 獂
+0x7343:dāi # 獃
+0x7344:yù # 獄
+0x7345:shī # 獅
+0x7346:háo # 獆
+0x7348:yì # 獈
+0x7349:zhēn # 獉
+0x734a:cāng # 獊
+0x734b:háo,gāo # 獋
+0x734c:màn # 獌
+0x734d:jìng # 獍
+0x734e:jiǎng # 獎
+0x734f:mò # 獏
+0x7350:zhāng # 獐
+0x7351:chán # 獑
+0x7352:áo # 獒
+0x7353:áo # 獓
+0x7354:háo # 獔
+0x7355:suǒ,cuī # 獕
+0x7356:fén,fèn # 獖
+0x7357:jué # 獗
+0x7358:bì # 獘
+0x7359:bì # 獙
+0x735a:huáng # 獚
+0x735b:pú # 獛
+0x735c:lín,lìn # 獜
+0x735d:xù # 獝
+0x735e:tóng # 獞
+0x735f:yào,xiāo # 獟
+0x7360:liáo # 獠
+0x7361:shuò,xī # 獡
+0x7362:xiāo # 獢
+0x7365:jiào # 獥
+0x7366:gé,liè,xiē # 獦
+0x7367:juàn # 獧
+0x7368:dú # 獨
+0x7369:huì # 獩
+0x736a:kuài # 獪
+0x736b:xiǎn # 獫
+0x736c:xiè # 獬
+0x736d:tǎ # 獭
+0x736e:xiǎn # 獮
+0x736f:xūn # 獯
+0x7370:níng # 獰
+0x7371:biān,piàn # 獱
+0x7372:huò # 獲
+0x7373:nòu,rú # 獳
+0x7374:méng # 獴
+0x7375:liè # 獵
+0x7376:náo,nǎo,yōu # 獶
+0x7377:guǎng # 獷
+0x7378:shòu # 獸
+0x7379:lú # 獹
+0x737a:tǎ # 獺
+0x737b:xiàn # 獻
+0x737c:mí # 獼
+0x737d:ráng # 獽
+0x737e:huān # 獾
+0x737f:náo,yōu # 獿
+0x7380:luó # 玀
+0x7381:xiǎn # 玁
+0x7382:qí # 玂
+0x7383:jué # 玃
+0x7384:xuán # 玄
+0x7385:miào # 玅
+0x7386:zī # 玆
+0x7387:shuài,lǜ # 率
+0x7388:lú # 玈
+0x7389:yù # 玉
+0x738a:sù # 玊
+0x738b:wáng,wàng # 王
+0x738c:qiú # 玌
+0x738d:gǎ # 玍
+0x738e:dīng # 玎
+0x738f:lè # 玏
+0x7390:bā # 玐
+0x7391:jī # 玑
+0x7392:hóng # 玒
+0x7393:dì # 玓
+0x7394:chuàn # 玔
+0x7395:gān # 玕
+0x7396:jiǔ # 玖
+0x7397:yú # 玗
+0x7398:qǐ # 玘
+0x7399:yú # 玙
+0x739a:chàng,yáng # 玚
+0x739b:mǎ # 玛
+0x739c:hóng # 玜
+0x739d:wǔ # 玝
+0x739e:fū # 玞
+0x739f:mín,wén # 玟
+0x73a0:jiè # 玠
+0x73a1:yà # 玡
+0x73a2:bīn,fēn # 玢
+0x73a3:biàn # 玣
+0x73a4:bàng # 玤
+0x73a5:yuè # 玥
+0x73a6:jué # 玦
+0x73a7:mén,yǔn # 玧
+0x73a8:jué # 玨
+0x73a9:wán # 玩
+0x73aa:jiān,qián # 玪
+0x73ab:méi # 玫
+0x73ac:dǎn # 玬
+0x73ad:pín # 玭
+0x73ae:wěi # 玮
+0x73af:huán # 环
+0x73b0:xiàn # 现
+0x73b1:qiāng,cāng # 玱
+0x73b2:líng # 玲
+0x73b3:dài # 玳
+0x73b4:yì # 玴
+0x73b5:án,gān # 玵
+0x73b6:píng # 玶
+0x73b7:diàn # 玷
+0x73b8:fú # 玸
+0x73b9:xuán,xián # 玹
+0x73ba:xǐ # 玺
+0x73bb:bō # 玻
+0x73bc:cī,cǐ # 玼
+0x73bd:gǒu # 玽
+0x73be:jiǎ # 玾
+0x73bf:sháo # 玿
+0x73c0:pò # 珀
+0x73c1:cí # 珁
+0x73c2:kē # 珂
+0x73c3:rǎn # 珃
+0x73c4:shēng # 珄
+0x73c5:shēn # 珅
+0x73c6:yí,tāi # 珆
+0x73c7:zǔ,jù # 珇
+0x73c8:jiā # 珈
+0x73c9:mín # 珉
+0x73ca:shān # 珊
+0x73cb:liǔ # 珋
+0x73cc:bì # 珌
+0x73cd:zhēn # 珍
+0x73ce:zhēn # 珎
+0x73cf:jué # 珏
+0x73d0:fà # 珐
+0x73d1:lóng # 珑
+0x73d2:jīn # 珒
+0x73d3:jiào # 珓
+0x73d4:jiàn # 珔
+0x73d5:lì # 珕
+0x73d6:guāng # 珖
+0x73d7:xiān # 珗
+0x73d8:zhōu # 珘
+0x73d9:gǒng # 珙
+0x73da:yān # 珚
+0x73db:xiù # 珛
+0x73dc:yáng # 珜
+0x73dd:xǔ # 珝
+0x73de:luò # 珞
+0x73df:sù # 珟
+0x73e0:zhū # 珠
+0x73e1:qín # 珡
+0x73e2:yín,kèn # 珢
+0x73e3:xún # 珣
+0x73e4:bǎo # 珤
+0x73e5:ěr # 珥
+0x73e6:xiàng # 珦
+0x73e7:yáo # 珧
+0x73e8:xiá # 珨
+0x73e9:héng # 珩
+0x73ea:guī # 珪
+0x73eb:chōng # 珫
+0x73ec:xù # 珬
+0x73ed:bān # 班
+0x73ee:pèi # 珮
+0x73f0:dāng # 珰
+0x73f2:hún,huī # 珲
+0x73f3:wén # 珳
+0x73f4:é # 珴
+0x73f5:chéng # 珵
+0x73f6:dì,tí # 珶
+0x73f7:wǔ # 珷
+0x73f8:wú # 珸
+0x73f9:chéng # 珹
+0x73fa:jùn # 珺
+0x73fb:méi # 珻
+0x73fc:bèi # 珼
+0x73fd:tǐng # 珽
+0x73fe:xiàn # 現
+0x73ff:chù # 珿
+0x7400:hán # 琀
+0x7401:xuán,qióng # 琁
+0x7402:yán # 琂
+0x7403:qiú # 球
+0x7404:xuàn # 琄
+0x7405:láng # 琅
+0x7406:lǐ # 理
+0x7407:xiù # 琇
+0x7408:fú,fū # 琈
+0x7409:liú # 琉
+0x740a:yá # 琊
+0x740b:xī # 琋
+0x740c:líng # 琌
+0x740d:lí # 琍
+0x740e:jīn # 琎
+0x740f:liǎn # 琏
+0x7410:suǒ # 琐
+0x7413:wán # 琓
+0x7414:diàn # 琔
+0x7415:pín,bǐng # 琕
+0x7416:zhǎn # 琖
+0x7417:cuì,sè # 琗
+0x7418:mín # 琘
+0x7419:yù # 琙
+0x741a:jū # 琚
+0x741b:chēn # 琛
+0x741c:lái # 琜
+0x741d:mín # 琝
+0x741e:shèng # 琞
+0x741f:wéi,yù # 琟
+0x7420:tiǎn,tiàn # 琠
+0x7421:shū # 琡
+0x7422:zhuó,zuó # 琢
+0x7423:běng,pěi # 琣
+0x7424:chēng # 琤
+0x7425:hǔ # 琥
+0x7426:qí # 琦
+0x7427:è # 琧
+0x7428:kūn # 琨
+0x7429:chāng # 琩
+0x742a:qí # 琪
+0x742b:běng # 琫
+0x742c:wǎn # 琬
+0x742d:lù # 琭
+0x742e:cóng # 琮
+0x742f:guǎn # 琯
+0x7430:yǎn # 琰
+0x7431:diāo # 琱
+0x7432:bèi # 琲
+0x7433:lín # 琳
+0x7434:qín # 琴
+0x7435:pí # 琵
+0x7436:pá # 琶
+0x7437:què # 琷
+0x7438:zhuó # 琸
+0x7439:qín # 琹
+0x743a:fà # 琺
+0x743c:qióng # 琼
+0x743d:dǔ # 琽
+0x743e:jiè # 琾
+0x743f:hún,huī # 琿
+0x7440:yǔ # 瑀
+0x7441:mào # 瑁
+0x7442:méi # 瑂
+0x7444:xuān # 瑄
+0x7445:tí # 瑅
+0x7446:xīng # 瑆
+0x7447:dài # 瑇
+0x7448:róu # 瑈
+0x7449:mín # 瑉
+0x744a:jiān # 瑊
+0x744b:wěi # 瑋
+0x744c:ruǎn # 瑌
+0x744d:huàn # 瑍
+0x744e:xié,jiē # 瑎
+0x744f:chuān # 瑏
+0x7450:jiǎn # 瑐
+0x7451:zhuàn # 瑑
+0x7452:chàng,yáng # 瑒
+0x7453:liàn # 瑓
+0x7454:quán # 瑔
+0x7455:xiá # 瑕
+0x7456:duàn # 瑖
+0x7457:yuàn # 瑗
+0x7458:yé # 瑘
+0x7459:nǎo # 瑙
+0x745a:hú # 瑚
+0x745b:yīng # 瑛
+0x745c:yú # 瑜
+0x745d:huáng # 瑝
+0x745e:ruì # 瑞
+0x745f:sè # 瑟
+0x7460:liú # 瑠
+0x7462:róng # 瑢
+0x7463:suǒ # 瑣
+0x7464:yáo # 瑤
+0x7465:wēn # 瑥
+0x7466:wǔ # 瑦
+0x7467:zhēn # 瑧
+0x7468:jìn # 瑨
+0x7469:yíng # 瑩
+0x746a:mǎ # 瑪
+0x746b:tāo # 瑫
+0x746c:liú # 瑬
+0x746d:táng # 瑭
+0x746e:lì # 瑮
+0x746f:láng # 瑯
+0x7470:guī # 瑰
+0x7471:tiàn,tián,zhèn # 瑱
+0x7472:qiāng,cāng # 瑲
+0x7473:cuō # 瑳
+0x7474:jué # 瑴
+0x7475:zhǎo # 瑵
+0x7476:yáo # 瑶
+0x7477:ài # 瑷
+0x7478:bīn,pián # 瑸
+0x7479:tú,shū # 瑹
+0x747a:cháng # 瑺
+0x747b:kūn # 瑻
+0x747c:zhuān # 瑼
+0x747d:cōng # 瑽
+0x747e:jǐn # 瑾
+0x747f:yī # 瑿
+0x7480:cuǐ # 璀
+0x7481:cōng # 璁
+0x7482:qí # 璂
+0x7483:lí # 璃
+0x7484:jǐng # 璄
+0x7485:zǎo,suǒ # 璅
+0x7486:qiú # 璆
+0x7487:xuán # 璇
+0x7488:áo # 璈
+0x7489:liǎn # 璉
+0x748a:mén # 璊
+0x748b:zhāng # 璋
+0x748c:yín # 璌
+0x748e:yīng # 璎
+0x748f:zhì # 璏
+0x7490:lù # 璐
+0x7491:wú # 璑
+0x7492:dēng # 璒
+0x7494:zēng # 璔
+0x7495:xún # 璕
+0x7496:qú # 璖
+0x7497:dàng # 璗
+0x7498:lín # 璘
+0x7499:liáo # 璙
+0x749a:qióng,jué # 璚
+0x749b:sù # 璛
+0x749c:huáng # 璜
+0x749d:guī # 璝
+0x749e:pú # 璞
+0x749f:jǐng # 璟
+0x74a0:fán # 璠
+0x74a1:jīn # 璡
+0x74a2:liú # 璢
+0x74a3:jī # 璣
+0x74a5:jǐng # 璥
+0x74a6:ài # 璦
+0x74a7:bì # 璧
+0x74a8:càn # 璨
+0x74a9:qú # 璩
+0x74aa:zǎo # 璪
+0x74ab:dāng # 璫
+0x74ac:jiǎo # 璬
+0x74ad:guǎn # 璭
+0x74ae:tǎn # 璮
+0x74af:huì,kuài # 璯
+0x74b0:huán # 環
+0x74b1:sè # 璱
+0x74b2:suì # 璲
+0x74b3:tián # 璳
+0x74b5:yú # 璵
+0x74b6:jìn # 璶
+0x74b7:lú,fū # 璷
+0x74b8:bīn,pián # 璸
+0x74b9:shú # 璹
+0x74ba:wèn # 璺
+0x74bb:zuǐ # 璻
+0x74bc:lán # 璼
+0x74bd:xǐ # 璽
+0x74be:jì,zī # 璾
+0x74bf:xuán # 璿
+0x74c0:ruǎn # 瓀
+0x74c1:wò # 瓁
+0x74c2:gài # 瓂
+0x74c3:léi # 瓃
+0x74c4:dú # 瓄
+0x74c5:lì # 瓅
+0x74c6:zhì # 瓆
+0x74c7:róu # 瓇
+0x74c8:lí # 瓈
+0x74c9:zàn # 瓉
+0x74ca:qióng # 瓊
+0x74cb:tì # 瓋
+0x74cc:guī # 瓌
+0x74cd:suí # 瓍
+0x74ce:là # 瓎
+0x74cf:lóng # 瓏
+0x74d0:lú # 瓐
+0x74d1:lì # 瓑
+0x74d2:zàn # 瓒
+0x74d3:làn # 瓓
+0x74d4:yīng # 瓔
+0x74d5:mí,xǐ # 瓕
+0x74d6:xiāng # 瓖
+0x74d7:qióng,wěi,wèi # 瓗
+0x74d8:guàn # 瓘
+0x74d9:dào # 瓙
+0x74da:zàn # 瓚
+0x74db:huán,yè,yà # 瓛
+0x74dc:guā # 瓜
+0x74dd:bó # 瓝
+0x74de:dié # 瓞
+0x74df:bó,páo # 瓟
+0x74e0:hù # 瓠
+0x74e1:zhí,hú # 瓡
+0x74e2:piáo # 瓢
+0x74e3:bàn # 瓣
+0x74e4:ráng # 瓤
+0x74e5:lì # 瓥
+0x74e6:wǎ,wà # 瓦
+0x74e8:xiáng,hóng # 瓨
+0x74ea:bǎn # 瓪
+0x74eb:pén # 瓫
+0x74ec:fǎng # 瓬
+0x74ed:dǎn # 瓭
+0x74ee:wèng # 瓮
+0x74ef:ōu # 瓯
+0x74f3:hú # 瓳
+0x74f4:líng # 瓴
+0x74f5:yí # 瓵
+0x74f6:píng # 瓶
+0x74f7:cí # 瓷
+0x74f9:juàn,juān # 瓹
+0x74fa:cháng # 瓺
+0x74fb:chī # 瓻
+0x74fd:dàng # 瓽
+0x74fe:wā # 瓾
+0x74ff:bù # 瓿
+0x7500:zhuì # 甀
+0x7501:píng # 甁
+0x7502:biān # 甂
+0x7503:zhòu # 甃
+0x7504:zhēn # 甄
+0x7506:cí # 甆
+0x7507:yīng # 甇
+0x7508:qì # 甈
+0x7509:xián # 甉
+0x750a:lǒu # 甊
+0x750b:dì # 甋
+0x750c:ōu # 甌
+0x750d:méng # 甍
+0x750e:zhuān # 甎
+0x750f:bèng # 甏
+0x7510:lìn # 甐
+0x7511:zèng # 甑
+0x7512:wǔ # 甒
+0x7513:pì # 甓
+0x7514:dān # 甔
+0x7515:wèng # 甕
+0x7516:yīng # 甖
+0x7517:yǎn # 甗
+0x7518:gān # 甘
+0x7519:dài # 甙
+0x751a:shèn,shén # 甚
+0x751b:tián # 甛
+0x751c:tián # 甜
+0x751d:hán # 甝
+0x751e:cháng # 甞
+0x751f:shēng # 生
+0x7520:qíng # 甠
+0x7521:shēn # 甡
+0x7522:chǎn # 產
+0x7523:chǎn # 産
+0x7524:ruí # 甤
+0x7525:shēng # 甥
+0x7526:sū # 甦
+0x7527:shēn # 甧
+0x7528:yòng # 用
+0x7529:shuǎi # 甩
+0x752a:lù # 甪
+0x752b:fǔ # 甫
+0x752c:yǒng # 甬
+0x752d:béng # 甭
+0x752e:béng,fèng # 甮
+0x752f:níng,nìng # 甯
+0x7530:tián # 田
+0x7531:yóu # 由
+0x7532:jiǎ # 甲
+0x7533:shēn # 申
+0x7534:yóu,zhá # 甴
+0x7535:diàn # 电
+0x7536:fú # 甶
+0x7537:nán # 男
+0x7538:diàn,tián,shèng # 甸
+0x7539:pīng # 甹
+0x753a:tǐng,dīng # 町
+0x753b:huà # 画
+0x753c:tǐng,dīng # 甼
+0x753d:zhèn # 甽
+0x753e:zāi,zī # 甾
+0x753f:méng # 甿
+0x7540:bì # 畀
+0x7541:bì,qí # 畁
+0x7542:mǔ # 畂
+0x7543:xún # 畃
+0x7544:liú # 畄
+0x7545:chàng # 畅
+0x7546:mǔ # 畆
+0x7547:yún # 畇
+0x7548:fàn # 畈
+0x7549:fú # 畉
+0x754a:gēng # 畊
+0x754b:tián # 畋
+0x754c:jiè # 界
+0x754d:jiè # 畍
+0x754e:quǎn # 畎
+0x754f:wèi # 畏
+0x7550:fú,bì # 畐
+0x7551:tián # 畑
+0x7552:mǔ # 畒
+0x7554:pàn # 畔
+0x7555:jiāng # 畕
+0x7556:wā # 畖
+0x7557:dá,fú # 畗
+0x7558:nán # 畘
+0x7559:liú # 留
+0x755a:běn # 畚
+0x755b:zhěn # 畛
+0x755c:xù,chù # 畜
+0x755d:mǔ # 畝
+0x755e:mǔ # 畞
+0x755f:cè,jì # 畟
+0x7561:gāi # 畡
+0x7562:bì # 畢
+0x7563:dá # 畣
+0x7564:zhì,chóu,shì # 畤
+0x7565:lüè # 略
+0x7566:qí # 畦
+0x7567:lüè # 畧
+0x7568:fān,pān # 畨
+0x756a:fān,pān # 番
+0x756b:huà # 畫
+0x756c:shē,yú # 畬
+0x756d:shē # 畭
+0x756e:mǔ # 畮
+0x756f:jùn # 畯
+0x7570:yì # 異
+0x7571:liú # 畱
+0x7572:shē # 畲
+0x7573:dié # 畳
+0x7574:chóu # 畴
+0x7575:huà # 畵
+0x7576:dāng,dàng,dǎng # 當
+0x7577:zhuì # 畷
+0x7578:jī # 畸
+0x7579:wǎn # 畹
+0x757a:jiāng,jiàng # 畺
+0x757b:chéng # 畻
+0x757c:chàng # 畼
+0x757d:tuǎn # 畽
+0x757e:léi # 畾
+0x757f:jī # 畿
+0x7580:chā # 疀
+0x7581:liú # 疁
+0x7583:tuǎn # 疃
+0x7584:lín,lìn # 疄
+0x7585:jiāng # 疅
+0x7586:jiāng,qiáng # 疆
+0x7587:chóu # 疇
+0x7588:pì # 疈
+0x7589:dié # 疉
+0x758a:dié # 疊
+0x758b:pǐ,yǎ,shū # 疋
+0x758c:jié,qiè # 疌
+0x758d:dàn # 疍
+0x758e:shū # 疎
+0x758f:shū # 疏
+0x7590:zhì,dì # 疐
+0x7591:yí,nǐ # 疑
+0x7592:nè # 疒
+0x7593:nǎi # 疓
+0x7594:dīng # 疔
+0x7595:bǐ # 疕
+0x7596:jiē # 疖
+0x7597:liáo # 疗
+0x7598:gāng # 疘
+0x7599:gē,yì # 疙
+0x759a:jiù # 疚
+0x759b:zhǒu # 疛
+0x759c:xià # 疜
+0x759d:shàn # 疝
+0x759e:xū # 疞
+0x759f:nüè,yào # 疟
+0x75a0:lì,lài # 疠
+0x75a1:yáng # 疡
+0x75a2:chèn # 疢
+0x75a3:yóu # 疣
+0x75a4:bā # 疤
+0x75a5:jiè # 疥
+0x75a6:jué,xuè # 疦
+0x75a7:qí # 疧
+0x75a8:yǎ,xiā # 疨
+0x75a9:cuì # 疩
+0x75aa:bì # 疪
+0x75ab:yì # 疫
+0x75ac:lì # 疬
+0x75ad:zòng # 疭
+0x75ae:chuāng # 疮
+0x75af:fēng # 疯
+0x75b0:zhù # 疰
+0x75b1:pào # 疱
+0x75b2:pí # 疲
+0x75b3:gān # 疳
+0x75b4:kē # 疴
+0x75b5:cī # 疵
+0x75b6:xuē # 疶
+0x75b7:zhī # 疷
+0x75b8:dǎn,da # 疸
+0x75b9:zhěn # 疹
+0x75ba:fá,biǎn # 疺
+0x75bb:zhǐ # 疻
+0x75bc:téng # 疼
+0x75bd:jū # 疽
+0x75be:jí # 疾
+0x75bf:fèi,féi # 疿
+0x75c0:gōu # 痀
+0x75c1:shān,diàn # 痁
+0x75c2:jiā # 痂
+0x75c3:xuán # 痃
+0x75c4:zhà # 痄
+0x75c5:bìng # 病
+0x75c6:niè # 痆
+0x75c7:zhèng,zhēng # 症
+0x75c8:yōng # 痈
+0x75c9:jìng # 痉
+0x75ca:quán # 痊
+0x75cb:téng,chóng # 痋
+0x75cc:tōng,tóng # 痌
+0x75cd:yí # 痍
+0x75ce:jiē # 痎
+0x75cf:wěi,yòu,yù # 痏
+0x75d0:huí # 痐
+0x75d1:tān,shǐ # 痑
+0x75d2:yǎng # 痒
+0x75d3:zhì,chì # 痓
+0x75d4:zhì # 痔
+0x75d5:hén # 痕
+0x75d6:yǎ # 痖
+0x75d7:mèi # 痗
+0x75d8:dòu # 痘
+0x75d9:jìng # 痙
+0x75da:xiāo # 痚
+0x75db:tòng # 痛
+0x75dc:tū # 痜
+0x75dd:máng # 痝
+0x75de:pǐ # 痞
+0x75df:xiāo # 痟
+0x75e0:suān # 痠
+0x75e1:pū,pù # 痡
+0x75e2:lì # 痢
+0x75e3:zhì # 痣
+0x75e4:cuó # 痤
+0x75e5:duó # 痥
+0x75e6:wù # 痦
+0x75e7:shā # 痧
+0x75e8:láo # 痨
+0x75e9:shòu # 痩
+0x75ea:huàn # 痪
+0x75eb:xián # 痫
+0x75ec:yì # 痬
+0x75ed:bēng,péng # 痭
+0x75ee:zhàng # 痮
+0x75ef:guǎn # 痯
+0x75f0:tán # 痰
+0x75f1:fèi,féi # 痱
+0x75f2:má # 痲
+0x75f3:má,lìn # 痳
+0x75f4:chī # 痴
+0x75f5:jì # 痵
+0x75f6:tiǎn,diàn # 痶
+0x75f7:ān,yè,è # 痷
+0x75f8:chì # 痸
+0x75f9:bì # 痹
+0x75fa:bì # 痺
+0x75fb:mín # 痻
+0x75fc:gù # 痼
+0x75fd:duī # 痽
+0x75fe:kē,ē # 痾
+0x75ff:wěi # 痿
+0x7600:yū # 瘀
+0x7601:cuì # 瘁
+0x7602:yǎ # 瘂
+0x7603:zhú # 瘃
+0x7604:cù # 瘄
+0x7605:dàn,dān # 瘅
+0x7606:shèn # 瘆
+0x7607:zhǒng # 瘇
+0x7608:zhì,chì # 瘈
+0x7609:yù # 瘉
+0x760a:hóu # 瘊
+0x760b:fēng # 瘋
+0x760c:là # 瘌
+0x760d:yáng # 瘍
+0x760e:chén # 瘎
+0x760f:tú # 瘏
+0x7610:yǔ # 瘐
+0x7611:guō # 瘑
+0x7612:wén # 瘒
+0x7613:huàn # 瘓
+0x7614:kù # 瘔
+0x7615:jiǎ,xiá,xiā # 瘕
+0x7616:yīn # 瘖
+0x7617:yì # 瘗
+0x7618:lòu # 瘘
+0x7619:sào # 瘙
+0x761a:jué # 瘚
+0x761b:chì # 瘛
+0x761c:xī # 瘜
+0x761d:guān # 瘝
+0x761e:yì # 瘞
+0x761f:wēn # 瘟
+0x7620:jí # 瘠
+0x7621:chuāng # 瘡
+0x7622:bān # 瘢
+0x7623:huì,lěi # 瘣
+0x7624:liú # 瘤
+0x7625:chài,cuó # 瘥
+0x7626:shòu # 瘦
+0x7627:nüè,yào # 瘧
+0x7628:diān,chēn # 瘨
+0x7629:dá,da # 瘩
+0x762a:biē,biě # 瘪
+0x762b:tān # 瘫
+0x762c:zhàng # 瘬
+0x762d:biāo # 瘭
+0x762e:shèn # 瘮
+0x762f:cù # 瘯
+0x7630:luǒ # 瘰
+0x7631:yì # 瘱
+0x7632:zòng # 瘲
+0x7633:chōu # 瘳
+0x7634:zhàng # 瘴
+0x7635:zhài # 瘵
+0x7636:sòu # 瘶
+0x7637:sè # 瘷
+0x7638:qué # 瘸
+0x7639:diào # 瘹
+0x763a:lòu # 瘺
+0x763b:lòu # 瘻
+0x763c:mò # 瘼
+0x763d:qín # 瘽
+0x763e:yǐn # 瘾
+0x763f:yǐng # 瘿
+0x7640:huáng # 癀
+0x7641:fú # 癁
+0x7642:liáo # 療
+0x7643:lóng # 癃
+0x7644:qiáo,jiào # 癄
+0x7645:liú # 癅
+0x7646:láo # 癆
+0x7647:xián # 癇
+0x7648:fèi # 癈
+0x7649:dàn,dān # 癉
+0x764a:yìn # 癊
+0x764b:hè # 癋
+0x764c:ái # 癌
+0x764d:bān # 癍
+0x764e:xián # 癎
+0x764f:guān # 癏
+0x7650:guì,wēi # 癐
+0x7651:nòng,nóng # 癑
+0x7652:yù # 癒
+0x7653:wēi # 癓
+0x7654:yì # 癔
+0x7655:yōng # 癕
+0x7656:pǐ # 癖
+0x7657:lěi # 癗
+0x7658:lì,lài # 癘
+0x7659:shǔ # 癙
+0x765a:dàn # 癚
+0x765b:lǐn # 癛
+0x765c:diàn # 癜
+0x765d:lǐn # 癝
+0x765e:lài,là # 癞
+0x765f:biē,biě # 癟
+0x7660:jì # 癠
+0x7661:chī # 癡
+0x7662:yǎng # 癢
+0x7663:xuǎn # 癣
+0x7664:jiē # 癤
+0x7665:zhēng # 癥
+0x7667:lì # 癧
+0x7668:huò # 癨
+0x7669:lài # 癩
+0x766b:diān # 癫
+0x766c:xuǎn # 癬
+0x766d:yǐng # 癭
+0x766e:yǐn # 癮
+0x766f:qú # 癯
+0x7670:yōng # 癰
+0x7671:tān # 癱
+0x7672:diān # 癲
+0x7673:luǒ # 癳
+0x7674:luán # 癴
+0x7675:luán # 癵
+0x7676:bō # 癶
+0x7678:guǐ # 癸
+0x7679:bá # 癹
+0x767a:fā # 発
+0x767b:dēng # 登
+0x767c:fā # 發
+0x767d:bái # 白
+0x767e:bǎi # 百
+0x767f:qié # 癿
+0x7680:jí,bī # 皀
+0x7681:zào # 皁
+0x7682:zào # 皂
+0x7683:mào # 皃
+0x7684:de,dí,dì # 的
+0x7685:pā,bà # 皅
+0x7686:jiē # 皆
+0x7687:huáng # 皇
+0x7688:guī # 皈
+0x7689:cǐ # 皉
+0x768a:líng # 皊
+0x768b:gāo,háo # 皋
+0x768c:mò # 皌
+0x768d:jí # 皍
+0x768e:jiǎo # 皎
+0x768f:pěng # 皏
+0x7690:gāo,yáo # 皐
+0x7691:ái # 皑
+0x7692:é # 皒
+0x7693:hào # 皓
+0x7694:hàn # 皔
+0x7695:bì # 皕
+0x7696:wǎn # 皖
+0x7697:chóu # 皗
+0x7698:qiàn # 皘
+0x7699:xī # 皙
+0x769a:ái # 皚
+0x769b:xiǎo # 皛
+0x769c:hào # 皜
+0x769d:huàng # 皝
+0x769e:hào # 皞
+0x769f:zé # 皟
+0x76a0:cuǐ # 皠
+0x76a1:hào # 皡
+0x76a2:xiǎo # 皢
+0x76a3:yè # 皣
+0x76a4:pó # 皤
+0x76a5:hào # 皥
+0x76a6:jiǎo # 皦
+0x76a7:ài # 皧
+0x76a8:xīng # 皨
+0x76a9:huàng # 皩
+0x76aa:lì,luò,bō # 皪
+0x76ab:piǎo # 皫
+0x76ac:hé # 皬
+0x76ad:jiào # 皭
+0x76ae:pí # 皮
+0x76af:gǎn # 皯
+0x76b0:pào # 皰
+0x76b1:zhòu # 皱
+0x76b2:jūn # 皲
+0x76b3:qiú # 皳
+0x76b4:cūn # 皴
+0x76b5:què # 皵
+0x76b6:zhā # 皶
+0x76b7:gǔ # 皷
+0x76b8:jūn # 皸
+0x76b9:jūn # 皹
+0x76ba:zhòu # 皺
+0x76bb:zhā,cǔ # 皻
+0x76bc:gǔ # 皼
+0x76bd:zhāo,zhǎn,dǎn # 皽
+0x76be:dú # 皾
+0x76bf:mǐn # 皿
+0x76c0:qǐ # 盀
+0x76c1:yíng # 盁
+0x76c2:yú # 盂
+0x76c3:bēi # 盃
+0x76c4:diào # 盄
+0x76c5:zhōng # 盅
+0x76c6:pén # 盆
+0x76c7:hé # 盇
+0x76c8:yíng # 盈
+0x76c9:hé # 盉
+0x76ca:yì # 益
+0x76cb:bō # 盋
+0x76cc:wǎn # 盌
+0x76cd:hé # 盍
+0x76ce:àng # 盎
+0x76cf:zhǎn # 盏
+0x76d0:yán # 盐
+0x76d1:jiān,jiàn # 监
+0x76d2:hé # 盒
+0x76d3:yū # 盓
+0x76d4:kuī # 盔
+0x76d5:fàn # 盕
+0x76d6:gài,gě,hé # 盖
+0x76d7:dào # 盗
+0x76d8:pán # 盘
+0x76d9:fǔ # 盙
+0x76da:qiú # 盚
+0x76db:shèng,chéng # 盛
+0x76dc:dào # 盜
+0x76dd:lù # 盝
+0x76de:zhǎn # 盞
+0x76df:méng # 盟
+0x76e0:lí # 盠
+0x76e1:jìn # 盡
+0x76e2:xù # 盢
+0x76e3:jiān,jiàn # 監
+0x76e4:pán # 盤
+0x76e5:guàn # 盥
+0x76e6:ān # 盦
+0x76e7:lú # 盧
+0x76e8:xǔ # 盨
+0x76e9:zhōu,chóu # 盩
+0x76ea:dàng # 盪
+0x76eb:ān # 盫
+0x76ec:gǔ # 盬
+0x76ed:lì # 盭
+0x76ee:mù # 目
+0x76ef:dīng # 盯
+0x76f0:gàn # 盰
+0x76f1:xū # 盱
+0x76f2:máng # 盲
+0x76f3:máng,wàng # 盳
+0x76f4:zhí # 直
+0x76f5:qì # 盵
+0x76f6:yuǎn # 盶
+0x76f7:xián,tián # 盷
+0x76f8:xiāng,xiàng # 相
+0x76f9:dǔn # 盹
+0x76fa:xīn # 盺
+0x76fb:xì,pǎn # 盻
+0x76fc:pàn # 盼
+0x76fd:fēng # 盽
+0x76fe:dùn # 盾
+0x76ff:mín # 盿
+0x7700:míng # 眀
+0x7701:shěng,xǐng # 省
+0x7702:shì # 眂
+0x7703:yún,hùn # 眃
+0x7704:miǎn # 眄
+0x7705:pān # 眅
+0x7706:fǎng # 眆
+0x7707:miǎo # 眇
+0x7708:dān # 眈
+0x7709:méi # 眉
+0x770a:mào # 眊
+0x770b:kàn,kān # 看
+0x770c:xiàn # 県
+0x770d:kōu # 眍
+0x770e:shì # 眎
+0x770f:yāng,yǎng,yìng # 眏
+0x7710:zhēng # 眐
+0x7711:yǎo,āo,ǎo # 眑
+0x7712:shēn # 眒
+0x7713:huò # 眓
+0x7714:dà # 眔
+0x7715:zhěn # 眕
+0x7716:kuàng # 眖
+0x7717:jū,xū,kōu # 眗
+0x7718:shèn # 眘
+0x7719:yí,chì # 眙
+0x771a:shěng # 眚
+0x771b:mèi # 眛
+0x771c:mò,miè # 眜
+0x771d:zhù # 眝
+0x771e:zhēn # 眞
+0x771f:zhēn # 真
+0x7720:mián # 眠
+0x7721:shì # 眡
+0x7722:yuān # 眢
+0x7723:dié,tì # 眣
+0x7724:nì # 眤
+0x7725:zì # 眥
+0x7726:zì # 眦
+0x7727:chǎo # 眧
+0x7728:zhǎ # 眨
+0x7729:xuàn # 眩
+0x772a:bǐng,fǎng # 眪
+0x772b:pàng,pán # 眫
+0x772c:lóng # 眬
+0x772d:guì,suī # 眭
+0x772e:tóng # 眮
+0x772f:mī,mí # 眯
+0x7730:dié,zhì # 眰
+0x7731:dì # 眱
+0x7732:nè # 眲
+0x7733:míng # 眳
+0x7734:xuàn,shùn,xún # 眴
+0x7735:chī # 眵
+0x7736:kuàng # 眶
+0x7737:juàn # 眷
+0x7738:móu # 眸
+0x7739:zhèn # 眹
+0x773a:tiào # 眺
+0x773b:yáng # 眻
+0x773c:yǎn # 眼
+0x773d:mò # 眽
+0x773e:zhòng # 眾
+0x773f:mò # 眿
+0x7740:zhe,zhuó,zháo,zhāo # 着
+0x7741:zhēng # 睁
+0x7742:méi # 睂
+0x7743:suō # 睃
+0x7744:qiáo,shào,xiāo # 睄
+0x7745:hàn # 睅
+0x7746:huǎn # 睆
+0x7747:dì # 睇
+0x7748:chěng # 睈
+0x7749:cuó,zhuài # 睉
+0x774a:juàn # 睊
+0x774b:é # 睋
+0x774c:miǎn # 睌
+0x774d:xiàn # 睍
+0x774e:xī # 睎
+0x774f:kùn # 睏
+0x7750:lài # 睐
+0x7751:jiǎn # 睑
+0x7752:shǎn # 睒
+0x7753:tiǎn # 睓
+0x7754:gùn # 睔
+0x7755:wān # 睕
+0x7756:lèng # 睖
+0x7757:shì # 睗
+0x7758:qióng # 睘
+0x7759:lì # 睙
+0x775a:yá # 睚
+0x775b:jīng # 睛
+0x775c:zhēng # 睜
+0x775d:lí # 睝
+0x775e:lài # 睞
+0x775f:suì,zuì # 睟
+0x7760:juàn # 睠
+0x7761:shuì # 睡
+0x7762:huī,suī # 睢
+0x7763:dū # 督
+0x7764:bì # 睤
+0x7765:bì,pì # 睥
+0x7766:mù # 睦
+0x7767:hūn # 睧
+0x7768:nì # 睨
+0x7769:lù # 睩
+0x776a:yì,zé,gāo # 睪
+0x776b:jié # 睫
+0x776c:cǎi # 睬
+0x776d:zhǒu # 睭
+0x776e:yú # 睮
+0x776f:hūn # 睯
+0x7770:mà # 睰
+0x7771:xià # 睱
+0x7772:xǐng,xìng # 睲
+0x7773:huī # 睳
+0x7774:hùn # 睴
+0x7776:chǔn # 睶
+0x7777:jiān # 睷
+0x7778:mèi # 睸
+0x7779:dǔ # 睹
+0x777a:hóu # 睺
+0x777b:xuān # 睻
+0x777c:tí # 睼
+0x777d:kuí # 睽
+0x777e:gāo # 睾
+0x777f:ruì # 睿
+0x7780:mào # 瞀
+0x7781:xù # 瞁
+0x7782:fá # 瞂
+0x7783:wò # 瞃
+0x7784:miáo # 瞄
+0x7785:chǒu # 瞅
+0x7786:guì,wèi,kuì # 瞆
+0x7787:mī,mí # 瞇
+0x7788:wěng # 瞈
+0x7789:kòu,jì # 瞉
+0x778a:dàng # 瞊
+0x778b:chēn # 瞋
+0x778c:kē # 瞌
+0x778d:sǒu # 瞍
+0x778e:xiā # 瞎
+0x778f:qióng,huán # 瞏
+0x7790:mò # 瞐
+0x7791:míng # 瞑
+0x7792:mán,mén # 瞒
+0x7793:fèn # 瞓
+0x7794:zé # 瞔
+0x7795:zhàng # 瞕
+0x7796:yì # 瞖
+0x7797:diāo,dōu # 瞗
+0x7798:kōu # 瞘
+0x7799:mò # 瞙
+0x779a:shùn # 瞚
+0x779b:cōng # 瞛
+0x779c:lóu,lǘ,lou # 瞜
+0x779d:chī # 瞝
+0x779e:mán,mén # 瞞
+0x779f:piǎo # 瞟
+0x77a0:chēng # 瞠
+0x77a1:guī # 瞡
+0x77a2:méng,měng # 瞢
+0x77a4:rún,shùn # 瞤
+0x77a5:piē # 瞥
+0x77a6:xī # 瞦
+0x77a7:qiáo # 瞧
+0x77a8:pú # 瞨
+0x77a9:zhǔ # 瞩
+0x77aa:dèng # 瞪
+0x77ab:shěn # 瞫
+0x77ac:shùn # 瞬
+0x77ad:liǎo,liào # 瞭
+0x77ae:chè # 瞮
+0x77af:xián,jiàn # 瞯
+0x77b0:kàn # 瞰
+0x77b1:yè # 瞱
+0x77b2:xuè # 瞲
+0x77b3:tóng # 瞳
+0x77b4:wǔ,mí # 瞴
+0x77b5:lín # 瞵
+0x77b6:guì,kuì # 瞶
+0x77b7:jiàn # 瞷
+0x77b8:yè # 瞸
+0x77b9:ài # 瞹
+0x77ba:huì # 瞺
+0x77bb:zhān # 瞻
+0x77bc:jiǎn # 瞼
+0x77bd:gǔ # 瞽
+0x77be:zhào # 瞾
+0x77bf:qú,jù # 瞿
+0x77c0:wéi # 矀
+0x77c1:chǒu # 矁
+0x77c2:sào # 矂
+0x77c3:nǐng,chēng # 矃
+0x77c4:xūn # 矄
+0x77c5:yào # 矅
+0x77c6:huò,yuè # 矆
+0x77c7:mēng # 矇
+0x77c8:mián # 矈
+0x77c9:pín # 矉
+0x77ca:mián # 矊
+0x77cb:lěi # 矋
+0x77cc:kuàng,guō # 矌
+0x77cd:jué # 矍
+0x77ce:xuān # 矎
+0x77cf:mián # 矏
+0x77d0:huò # 矐
+0x77d1:lú # 矑
+0x77d2:méng,měng # 矒
+0x77d3:lóng # 矓
+0x77d4:guàn,quán # 矔
+0x77d5:mǎn,mán # 矕
+0x77d6:xǐ # 矖
+0x77d7:chù # 矗
+0x77d8:tǎng # 矘
+0x77d9:kàn # 矙
+0x77da:zhǔ # 矚
+0x77db:máo # 矛
+0x77dc:jīn,qín,guān # 矜
+0x77dd:jīn,qín,guān # 矝
+0x77de:yù,xù,jué # 矞
+0x77df:shuò # 矟
+0x77e0:zé # 矠
+0x77e1:jué # 矡
+0x77e2:shǐ # 矢
+0x77e3:yǐ # 矣
+0x77e4:shěn # 矤
+0x77e5:zhī,zhì # 知
+0x77e6:hóu,hòu # 矦
+0x77e7:shěn # 矧
+0x77e8:yǐng # 矨
+0x77e9:jǔ # 矩
+0x77ea:zhōu # 矪
+0x77eb:jiǎo,jiáo # 矫
+0x77ec:cuó # 矬
+0x77ed:duǎn # 短
+0x77ee:ǎi # 矮
+0x77ef:jiǎo,jiáo # 矯
+0x77f0:zēng # 矰
+0x77f1:yuē # 矱
+0x77f2:bà # 矲
+0x77f3:shí,dàn # 石
+0x77f4:dìng # 矴
+0x77f5:qì # 矵
+0x77f6:jī # 矶
+0x77f7:zǐ # 矷
+0x77f8:gān # 矸
+0x77f9:wù # 矹
+0x77fa:zhé # 矺
+0x77fb:kū # 矻
+0x77fc:gāng,qiāng,kòng # 矼
+0x77fd:xī # 矽
+0x77fe:fán # 矾
+0x77ff:kuàng # 矿
+0x7800:dàng # 砀
+0x7801:mǎ # 码
+0x7802:shā # 砂
+0x7803:dān # 砃
+0x7804:jué # 砄
+0x7805:lì # 砅
+0x7806:fū # 砆
+0x7807:mín # 砇
+0x7808:è # 砈
+0x7809:xū,huā # 砉
+0x780a:kāng # 砊
+0x780b:zhǐ # 砋
+0x780c:qì,qiè # 砌
+0x780d:kǎn # 砍
+0x780e:jiè # 砎
+0x780f:pīn,bīn,fēn # 砏
+0x7810:è # 砐
+0x7811:yà # 砑
+0x7812:pī # 砒
+0x7813:zhé # 砓
+0x7814:yán,yàn # 研
+0x7815:suì # 砕
+0x7816:zhuān # 砖
+0x7817:chē # 砗
+0x7818:dùn # 砘
+0x7819:wǎ # 砙
+0x781a:yàn # 砚
+0x781c:fēng # 砜
+0x781d:fǎ # 砝
+0x781e:mò # 砞
+0x781f:zhǎ # 砟
+0x7820:jū # 砠
+0x7821:yù # 砡
+0x7822:kē,luǒ # 砢
+0x7823:tuó # 砣
+0x7824:tuó # 砤
+0x7825:dǐ # 砥
+0x7826:zhài # 砦
+0x7827:zhēn # 砧
+0x7828:ě # 砨
+0x7829:fú,fèi # 砩
+0x782a:mǔ # 砪
+0x782b:zhù,zhǔ # 砫
+0x782c:lì,lā,lá # 砬
+0x782d:biān # 砭
+0x782e:nǔ # 砮
+0x782f:pīng # 砯
+0x7830:pēng # 砰
+0x7831:líng # 砱
+0x7832:pào # 砲
+0x7833:lè # 砳
+0x7834:pò # 破
+0x7835:bō # 砵
+0x7836:pò # 砶
+0x7837:shēn # 砷
+0x7838:zá # 砸
+0x7839:ài # 砹
+0x783a:lì # 砺
+0x783b:lóng # 砻
+0x783c:tóng # 砼
+0x783e:lì # 砾
+0x7840:chǔ # 础
+0x7841:kēng # 硁
+0x7842:quán # 硂
+0x7843:zhū # 硃
+0x7844:kuāng,guāng # 硄
+0x7845:guī # 硅
+0x7846:è # 硆
+0x7847:náo # 硇
+0x7848:qià # 硈
+0x7849:lù # 硉
+0x784a:wěi,guì # 硊
+0x784b:ài # 硋
+0x784c:luò,gè # 硌
+0x784d:kèn,xiàn,gǔn,yǐn # 硍
+0x784e:xíng # 硎
+0x784f:yán,yàn # 硏
+0x7850:dòng # 硐
+0x7851:pēng,píng # 硑
+0x7852:xī # 硒
+0x7854:hóng # 硔
+0x7855:shuò,shí # 硕
+0x7856:xiá # 硖
+0x7857:qiāo # 硗
+0x7859:wéi,wèi,ái,gài # 硙
+0x785a:qiáo # 硚
+0x785c:kēng # 硜
+0x785d:xiāo # 硝
+0x785e:què,kè,kù # 硞
+0x785f:chàn # 硟
+0x7860:láng # 硠
+0x7861:hōng # 硡
+0x7862:yù # 硢
+0x7863:xiāo # 硣
+0x7864:xiá # 硤
+0x7865:mǎng,bàng # 硥
+0x7866:luò,lòng # 硦
+0x7867:yǒng,tóng # 硧
+0x7868:chē # 硨
+0x7869:chè # 硩
+0x786a:wò # 硪
+0x786b:liú # 硫
+0x786c:yìng # 硬
+0x786d:máng # 硭
+0x786e:què # 确
+0x786f:yàn # 硯
+0x7870:shā # 硰
+0x7871:kǔn # 硱
+0x7872:yù # 硲
+0x7875:lǔ # 硵
+0x7876:chěn # 硶
+0x7877:jiǎn # 硷
+0x7878:nüè # 硸
+0x7879:sōng # 硹
+0x787a:zhuó # 硺
+0x787b:kēng,kěng # 硻
+0x787c:péng # 硼
+0x787d:yān,yǎn # 硽
+0x787e:zhuì,chuí,duǒ # 硾
+0x787f:kōng # 硿
+0x7880:chēng # 碀
+0x7881:qí # 碁
+0x7882:zòng,cóng # 碂
+0x7883:qìng # 碃
+0x7884:lín # 碄
+0x7885:jūn # 碅
+0x7886:bō # 碆
+0x7887:dìng # 碇
+0x7888:mín # 碈
+0x7889:diāo # 碉
+0x788a:jiān,zhàn # 碊
+0x788b:hè # 碋
+0x788c:lù,liù # 碌
+0x788d:ài # 碍
+0x788e:suì # 碎
+0x788f:què,xī # 碏
+0x7890:léng # 碐
+0x7891:bēi # 碑
+0x7892:yín # 碒
+0x7893:duì # 碓
+0x7894:wǔ # 碔
+0x7895:qí # 碕
+0x7896:lún,lǔn,lùn # 碖
+0x7897:wǎn # 碗
+0x7898:diǎn # 碘
+0x7899:náo,gāng # 碙
+0x789a:bèi # 碚
+0x789b:qì # 碛
+0x789c:chěn # 碜
+0x789d:ruǎn # 碝
+0x789e:yán # 碞
+0x789f:dié # 碟
+0x78a0:dìng # 碠
+0x78a1:zhóu # 碡
+0x78a2:tuó # 碢
+0x78a3:jié,yà # 碣
+0x78a4:yīng # 碤
+0x78a5:biǎn # 碥
+0x78a6:kè # 碦
+0x78a7:bì # 碧
+0x78a8:wěi,wèi # 碨
+0x78a9:shuò,shí # 碩
+0x78aa:zhēn # 碪
+0x78ab:duàn # 碫
+0x78ac:xiá # 碬
+0x78ad:dàng # 碭
+0x78ae:tí,dī # 碮
+0x78af:nǎo # 碯
+0x78b0:pèng # 碰
+0x78b1:jiǎn # 碱
+0x78b2:dì # 碲
+0x78b3:tàn # 碳
+0x78b4:chá,chā # 碴
+0x78b6:qì # 碶
+0x78b8:fēng # 碸
+0x78b9:xuàn # 碹
+0x78ba:què # 確
+0x78bb:què,qiāo # 碻
+0x78bc:mǎ # 碼
+0x78bd:gōng # 碽
+0x78be:niǎn # 碾
+0x78bf:sù,xiè # 碿
+0x78c0:é # 磀
+0x78c1:cí # 磁
+0x78c2:liú,liù # 磂
+0x78c3:sī,tí # 磃
+0x78c4:táng # 磄
+0x78c5:bàng,páng # 磅
+0x78c6:huá,kě,gū # 磆
+0x78c7:pī # 磇
+0x78c8:kuǐ,wěi # 磈
+0x78c9:sǎng # 磉
+0x78ca:lěi # 磊
+0x78cb:cuō # 磋
+0x78cc:tián # 磌
+0x78cd:xiá,qià,yà # 磍
+0x78ce:xī # 磎
+0x78cf:lián,qiān # 磏
+0x78d0:pán # 磐
+0x78d1:ái,wèi # 磑
+0x78d2:yǔn # 磒
+0x78d3:duī # 磓
+0x78d4:zhé # 磔
+0x78d5:kē # 磕
+0x78d6:lá,lā # 磖
+0x78d8:yáo # 磘
+0x78d9:gǔn # 磙
+0x78da:zhuān # 磚
+0x78db:chán # 磛
+0x78dc:qì # 磜
+0x78dd:áo,qiāo # 磝
+0x78de:pēng,pèng # 磞
+0x78df:liù # 磟
+0x78e0:lǔ # 磠
+0x78e1:kàn # 磡
+0x78e2:chuǎng # 磢
+0x78e3:chěn # 磣
+0x78e4:yīn,yǐn # 磤
+0x78e5:lěi,léi # 磥
+0x78e6:biāo # 磦
+0x78e7:qì # 磧
+0x78e8:mó,mò # 磨
+0x78e9:qì,zhú # 磩
+0x78ea:cuī # 磪
+0x78eb:zōng # 磫
+0x78ec:qìng # 磬
+0x78ed:chuò # 磭
+0x78ef:jī # 磯
+0x78f0:shàn # 磰
+0x78f1:láo,luò # 磱
+0x78f2:qú # 磲
+0x78f3:zēng # 磳
+0x78f4:dèng # 磴
+0x78f5:jiàn # 磵
+0x78f6:xì # 磶
+0x78f7:lín # 磷
+0x78f8:dìng # 磸
+0x78f9:diàn # 磹
+0x78fa:huáng # 磺
+0x78fb:pán,bō # 磻
+0x78fc:jí,shé # 磼
+0x78fd:qiāo # 磽
+0x78fe:dī # 磾
+0x78ff:lì # 磿
+0x7901:jiāo # 礁
+0x7903:zhǎng # 礃
+0x7904:qiáo # 礄
+0x7905:dūn # 礅
+0x7906:jiǎn # 礆
+0x7907:yù # 礇
+0x7908:zhuì # 礈
+0x7909:hé,qiāo,qiào # 礉
+0x790a:kè,huò # 礊
+0x790b:zé # 礋
+0x790c:léi,lěi # 礌
+0x790d:jié # 礍
+0x790e:chǔ # 礎
+0x790f:yè # 礏
+0x7910:què,hú # 礐
+0x7911:dàng # 礑
+0x7912:yǐ # 礒
+0x7913:jiāng # 礓
+0x7914:pī # 礔
+0x7915:pī # 礕
+0x7916:yù # 礖
+0x7917:pīn # 礗
+0x7918:è,qì # 礘
+0x7919:ài # 礙
+0x791a:kē # 礚
+0x791b:jiān # 礛
+0x791c:yù # 礜
+0x791d:ruǎn # 礝
+0x791e:méng # 礞
+0x791f:pào # 礟
+0x7920:cí # 礠
+0x7921:bō # 礡
+0x7923:miè # 礣
+0x7924:cǎ # 礤
+0x7925:xián,xín # 礥
+0x7926:kuàng # 礦
+0x7927:léi,lěi,lèi # 礧
+0x7928:lěi # 礨
+0x7929:zhì # 礩
+0x792a:lì # 礪
+0x792b:lì # 礫
+0x792c:fán # 礬
+0x792d:què # 礭
+0x792e:pào # 礮
+0x792f:yīng # 礯
+0x7930:lì # 礰
+0x7931:lóng # 礱
+0x7932:lóng # 礲
+0x7933:mò # 礳
+0x7934:bó # 礴
+0x7935:shuāng # 礵
+0x7936:guàn # 礶
+0x7937:jiān # 礷
+0x7938:cǎ # 礸
+0x7939:yán,yǎn # 礹
+0x793a:shì # 示
+0x793b:shì # 礻
+0x793c:lǐ # 礼
+0x793d:réng # 礽
+0x793e:shè # 社
+0x793f:yuè # 礿
+0x7940:sì # 祀
+0x7941:qí # 祁
+0x7942:tā # 祂
+0x7943:mà # 祃
+0x7944:xiè # 祄
+0x7945:yāo # 祅
+0x7946:xiān # 祆
+0x7947:zhǐ,qí # 祇
+0x7948:qí # 祈
+0x7949:zhǐ # 祉
+0x794a:bēng,fāng # 祊
+0x794b:duì # 祋
+0x794c:zhòng # 祌
+0x794e:yī # 祎
+0x794f:shí # 祏
+0x7950:yòu # 祐
+0x7951:zhì # 祑
+0x7952:tiáo # 祒
+0x7953:fú # 祓
+0x7954:fù # 祔
+0x7955:mì,bì # 祕
+0x7956:zǔ # 祖
+0x7957:zhī # 祗
+0x7958:suàn # 祘
+0x7959:mèi # 祙
+0x795a:zuò # 祚
+0x795b:qū # 祛
+0x795c:hù # 祜
+0x795d:zhù # 祝
+0x795e:shén # 神
+0x795f:suì # 祟
+0x7960:cí # 祠
+0x7961:chái # 祡
+0x7962:mí # 祢
+0x7963:lǚ # 祣
+0x7964:yǔ # 祤
+0x7965:xiáng # 祥
+0x7966:wú # 祦
+0x7967:tiāo # 祧
+0x7968:piào,piāo # 票
+0x7969:zhù # 祩
+0x796a:guǐ # 祪
+0x796b:xiá # 祫
+0x796c:zhī # 祬
+0x796d:jì,zhài # 祭
+0x796e:gào # 祮
+0x796f:zhēn # 祯
+0x7970:gào # 祰
+0x7971:shuì,lèi # 祱
+0x7972:jìn # 祲
+0x7973:shèn # 祳
+0x7974:gāi # 祴
+0x7975:kǔn # 祵
+0x7976:dì # 祶
+0x7977:dǎo # 祷
+0x7978:huò # 祸
+0x7979:táo # 祹
+0x797a:qí # 祺
+0x797b:gù # 祻
+0x797c:guàn # 祼
+0x797d:zuì # 祽
+0x797e:líng # 祾
+0x797f:lù # 祿
+0x7980:bǐng # 禀
+0x7981:jīn,jìn # 禁
+0x7982:dǎo # 禂
+0x7983:zhí # 禃
+0x7984:lù # 禄
+0x7985:chán,shàn # 禅
+0x7986:bì,pí # 禆
+0x7987:chǔ # 禇
+0x7988:huī # 禈
+0x7989:yǒu # 禉
+0x798a:xì # 禊
+0x798b:yīn # 禋
+0x798c:zī # 禌
+0x798d:huò # 禍
+0x798e:zhēn # 禎
+0x798f:fú # 福
+0x7990:yuàn # 禐
+0x7991:xú # 禑
+0x7992:xiǎn # 禒
+0x7993:shāng,yáng # 禓
+0x7994:tí,zhǐ # 禔
+0x7995:yī # 禕
+0x7996:méi # 禖
+0x7997:sī # 禗
+0x7998:dì # 禘
+0x799a:zhuó # 禚
+0x799b:zhēn # 禛
+0x799c:yíng # 禜
+0x799d:jì # 禝
+0x799e:gào # 禞
+0x799f:táng # 禟
+0x79a0:sī # 禠
+0x79a1:mà # 禡
+0x79a2:tà # 禢
+0x79a4:xuān # 禤
+0x79a5:qí # 禥
+0x79a6:yù # 禦
+0x79a7:xǐ # 禧
+0x79a8:jī,jì # 禨
+0x79a9:sì # 禩
+0x79aa:shàn,chán # 禪
+0x79ab:dàn # 禫
+0x79ac:guì # 禬
+0x79ad:suì # 禭
+0x79ae:lǐ # 禮
+0x79af:nóng # 禯
+0x79b0:mí # 禰
+0x79b1:dǎo # 禱
+0x79b2:lì # 禲
+0x79b3:ráng # 禳
+0x79b4:yuè # 禴
+0x79b5:tí # 禵
+0x79b6:zàn # 禶
+0x79b7:lèi # 禷
+0x79b8:róu # 禸
+0x79b9:yǔ # 禹
+0x79ba:yú,yù,ǒu # 禺
+0x79bb:lí # 离
+0x79bc:xiè # 禼
+0x79bd:qín # 禽
+0x79be:hé # 禾
+0x79bf:tū # 禿
+0x79c0:xiù # 秀
+0x79c1:sī # 私
+0x79c2:rén # 秂
+0x79c3:tū # 秃
+0x79c4:zǐ,zì # 秄
+0x79c5:chá,ná # 秅
+0x79c6:gǎn # 秆
+0x79c7:yì,zhí # 秇
+0x79c8:xiān # 秈
+0x79c9:bǐng # 秉
+0x79ca:nián # 秊
+0x79cb:qiū # 秋
+0x79cc:qiū # 秌
+0x79cd:zhǒng,zhòng,chóng # 种
+0x79ce:fèn # 秎
+0x79cf:hào,mào # 秏
+0x79d0:yún # 秐
+0x79d1:kē # 科
+0x79d2:miǎo # 秒
+0x79d3:zhī # 秓
+0x79d4:jīng # 秔
+0x79d5:bǐ # 秕
+0x79d6:zhǐ # 秖
+0x79d7:yù # 秗
+0x79d8:mì,bì # 秘
+0x79d9:kù,kū # 秙
+0x79da:bàn # 秚
+0x79db:pī # 秛
+0x79dc:ní,nì # 秜
+0x79dd:lì # 秝
+0x79de:yóu # 秞
+0x79df:zū # 租
+0x79e0:pī # 秠
+0x79e1:bó # 秡
+0x79e2:líng # 秢
+0x79e3:mò # 秣
+0x79e4:chèng # 秤
+0x79e5:nián # 秥
+0x79e6:qín # 秦
+0x79e7:yāng # 秧
+0x79e8:zuó # 秨
+0x79e9:zhì # 秩
+0x79ea:dī # 秪
+0x79eb:shú # 秫
+0x79ec:jù # 秬
+0x79ed:zǐ # 秭
+0x79ee:huó,kuò # 秮
+0x79ef:jī # 积
+0x79f0:chēng,chèn,chèng # 称
+0x79f1:tóng # 秱
+0x79f2:shì,zhì # 秲
+0x79f3:huó,kuò # 秳
+0x79f4:huō # 秴
+0x79f5:yīn # 秵
+0x79f6:zī # 秶
+0x79f7:zhì # 秷
+0x79f8:jiē # 秸
+0x79f9:rěn # 秹
+0x79fa:dù # 秺
+0x79fb:yí # 移
+0x79fc:zhū # 秼
+0x79fd:huì # 秽
+0x79fe:nóng # 秾
+0x79ff:fù,pū # 秿
+0x7a00:xī # 稀
+0x7a01:gǎo # 稁
+0x7a02:láng # 稂
+0x7a03:fū # 稃
+0x7a04:xùn,zè # 稄
+0x7a05:shuì # 稅
+0x7a06:lǚ # 稆
+0x7a07:kǔn # 稇
+0x7a08:gǎn # 稈
+0x7a09:jīng # 稉
+0x7a0a:tí # 稊
+0x7a0b:chéng # 程
+0x7a0c:tú,shǔ # 稌
+0x7a0d:shāo,shào # 稍
+0x7a0e:shuì # 税
+0x7a0f:yà # 稏
+0x7a10:lǔn # 稐
+0x7a11:lù # 稑
+0x7a12:gū # 稒
+0x7a13:zuó # 稓
+0x7a14:rěn # 稔
+0x7a15:zhùn,zhǔn # 稕
+0x7a16:bàng # 稖
+0x7a17:bài # 稗
+0x7a18:jī,qí # 稘
+0x7a19:zhī # 稙
+0x7a1a:zhì # 稚
+0x7a1b:kǔn # 稛
+0x7a1c:léng,lēng,líng # 稜
+0x7a1d:péng # 稝
+0x7a1e:kē # 稞
+0x7a1f:bǐng # 稟
+0x7a20:chóu # 稠
+0x7a21:zuì,zú,sū # 稡
+0x7a22:yù # 稢
+0x7a23:sū # 稣
+0x7a24:lüè # 稤
+0x7a26:yī # 稦
+0x7a27:xì,qiè # 稧
+0x7a28:biǎn # 稨
+0x7a29:jì # 稩
+0x7a2a:fú # 稪
+0x7a2b:pì,bì # 稫
+0x7a2c:nuò # 稬
+0x7a2d:jiē # 稭
+0x7a2e:zhǒng,zhòng # 種
+0x7a2f:zōng,zǒng # 稯
+0x7a30:xǔ,xū # 稰
+0x7a31:chēng,chèn,chèng # 稱
+0x7a32:dào # 稲
+0x7a33:wěn # 稳
+0x7a34:xián,jiān,liàn # 稴
+0x7a35:zī,jiū # 稵
+0x7a36:yù # 稶
+0x7a37:jì # 稷
+0x7a38:xù # 稸
+0x7a39:zhěn # 稹
+0x7a3a:zhì # 稺
+0x7a3b:dào # 稻
+0x7a3c:jià # 稼
+0x7a3d:jī,qǐ # 稽
+0x7a3e:gǎo # 稾
+0x7a3f:gǎo # 稿
+0x7a40:gǔ # 穀
+0x7a41:róng # 穁
+0x7a42:suì # 穂
+0x7a44:jì # 穄
+0x7a45:kāng # 穅
+0x7a46:mù # 穆
+0x7a47:cǎn,shān,cēn # 穇
+0x7a48:mén,méi # 穈
+0x7a49:zhì # 穉
+0x7a4a:jì # 穊
+0x7a4b:lù # 穋
+0x7a4c:sū # 穌
+0x7a4d:jī # 積
+0x7a4e:yǐng # 穎
+0x7a4f:wěn # 穏
+0x7a50:qiū # 穐
+0x7a51:sè # 穑
+0x7a53:yì # 穓
+0x7a54:huáng # 穔
+0x7a55:qiè # 穕
+0x7a56:jǐ,jì # 穖
+0x7a57:suì # 穗
+0x7a58:xiāo,rào # 穘
+0x7a59:pú # 穙
+0x7a5a:jiāo # 穚
+0x7a5b:zhuō,bó # 穛
+0x7a5c:tóng,zhǒng # 穜
+0x7a5e:lǔ # 穞
+0x7a5f:suì # 穟
+0x7a60:nóng # 穠
+0x7a61:sè # 穡
+0x7a62:huì # 穢
+0x7a63:ráng # 穣
+0x7a64:nuò # 穤
+0x7a65:yǔ # 穥
+0x7a67:jì # 穧
+0x7a68:tuí # 穨
+0x7a69:wěn # 穩
+0x7a6a:chēng,chèn,chèng # 穪
+0x7a6b:huò # 穫
+0x7a6c:kuàng # 穬
+0x7a6d:lǚ # 穭
+0x7a6e:biāo,pāo # 穮
+0x7a70:ráng # 穰
+0x7a71:zhuō,jué # 穱
+0x7a72:lí # 穲
+0x7a73:cuán,zàn # 穳
+0x7a74:xué # 穴
+0x7a75:wā # 穵
+0x7a76:jiū # 究
+0x7a77:qióng # 穷
+0x7a78:xī # 穸
+0x7a79:qióng # 穹
+0x7a7a:kōng,kòng,kǒng # 空
+0x7a7b:yū,yǔ # 穻
+0x7a7c:shēn # 穼
+0x7a7d:jǐng # 穽
+0x7a7e:yào # 穾
+0x7a7f:chuān # 穿
+0x7a80:zhūn # 窀
+0x7a81:tū # 突
+0x7a82:láo # 窂
+0x7a83:qiè # 窃
+0x7a84:zhǎi # 窄
+0x7a85:yǎo # 窅
+0x7a86:biǎn # 窆
+0x7a87:báo # 窇
+0x7a88:yǎo # 窈
+0x7a89:bìng # 窉
+0x7a8a:wā # 窊
+0x7a8b:zhú,kū # 窋
+0x7a8c:jiào,liáo,liù # 窌
+0x7a8d:qiào # 窍
+0x7a8e:diào # 窎
+0x7a8f:wū # 窏
+0x7a90:wā,guī # 窐
+0x7a91:yáo # 窑
+0x7a92:zhì # 窒
+0x7a93:chuāng # 窓
+0x7a94:yào # 窔
+0x7a95:tiǎo,yáo # 窕
+0x7a96:jiào # 窖
+0x7a97:chuāng # 窗
+0x7a98:jiǒng # 窘
+0x7a99:xiāo # 窙
+0x7a9a:chéng # 窚
+0x7a9b:kòu # 窛
+0x7a9c:cuàn # 窜
+0x7a9d:wō # 窝
+0x7a9e:dàn # 窞
+0x7a9f:kū # 窟
+0x7aa0:kē # 窠
+0x7aa1:zhuó # 窡
+0x7aa2:huò # 窢
+0x7aa3:sū # 窣
+0x7aa5:kuī # 窥
+0x7aa6:dòu # 窦
+0x7aa8:yìn,xūn # 窨
+0x7aa9:wō # 窩
+0x7aaa:wā # 窪
+0x7aab:yà,yē # 窫
+0x7aac:yú # 窬
+0x7aad:jù # 窭
+0x7aae:qióng # 窮
+0x7aaf:yáo # 窯
+0x7ab0:yáo # 窰
+0x7ab1:tiǎo # 窱
+0x7ab2:cháo # 窲
+0x7ab3:yǔ # 窳
+0x7ab4:tián,diān,yǎn # 窴
+0x7ab5:diào # 窵
+0x7ab6:jù # 窶
+0x7ab7:liào # 窷
+0x7ab8:xī # 窸
+0x7ab9:wù # 窹
+0x7aba:kuī # 窺
+0x7abb:chuāng # 窻
+0x7abc:chāo,kē # 窼
+0x7abe:kuǎn,cuàn # 窾
+0x7abf:lóng # 窿
+0x7ac0:chēng,chèng # 竀
+0x7ac1:cuì # 竁
+0x7ac2:liáo # 竂
+0x7ac3:zào # 竃
+0x7ac4:cuàn # 竄
+0x7ac5:qiào # 竅
+0x7ac6:qióng # 竆
+0x7ac7:dòu # 竇
+0x7ac8:zào # 竈
+0x7ac9:lǒng # 竉
+0x7aca:qiè # 竊
+0x7acb:lì # 立
+0x7acc:chù # 竌
+0x7ace:fù # 竎
+0x7ad0:chù,qì # 竐
+0x7ad1:hóng # 竑
+0x7ad2:qí # 竒
+0x7ad6:shù # 竖
+0x7ad7:miào # 竗
+0x7ad8:qǔ,kǒu # 竘
+0x7ad9:zhàn # 站
+0x7ada:zhù # 竚
+0x7adb:líng # 竛
+0x7adc:lóng # 竜
+0x7add:bìng # 竝
+0x7ade:jìng # 竞
+0x7adf:jìng # 竟
+0x7ae0:zhāng # 章
+0x7ae2:sì # 竢
+0x7ae3:jùn # 竣
+0x7ae4:hóng # 竤
+0x7ae5:tóng # 童
+0x7ae6:sǒng # 竦
+0x7ae7:jìng,zhěn # 竧
+0x7ae8:diào # 竨
+0x7ae9:yì # 竩
+0x7aea:shù # 竪
+0x7aeb:jìng # 竫
+0x7aec:qǔ # 竬
+0x7aed:jié # 竭
+0x7aee:píng # 竮
+0x7aef:duān # 端
+0x7af0:lí # 竰
+0x7af1:zhuǎn # 竱
+0x7af2:céng,zēng # 竲
+0x7af3:dēng # 竳
+0x7af4:cūn # 竴
+0x7af5:wāi # 竵
+0x7af6:jìng # 競
+0x7af7:kǎn,kàn # 竷
+0x7af8:jìng # 竸
+0x7af9:zhú # 竹
+0x7afa:zhú,dǔ # 竺
+0x7afb:lè,jīn # 竻
+0x7afc:péng # 竼
+0x7afd:yú # 竽
+0x7afe:chí # 竾
+0x7aff:gān # 竿
+0x7b00:máng # 笀
+0x7b01:zhú # 笁
+0x7b03:dǔ # 笃
+0x7b04:jī # 笄
+0x7b05:jiǎo,jiào # 笅
+0x7b06:bā # 笆
+0x7b07:suàn # 笇
+0x7b08:jí # 笈
+0x7b09:qǐn # 笉
+0x7b0a:zhào # 笊
+0x7b0b:sǔn # 笋
+0x7b0c:yá # 笌
+0x7b0d:zhuì,ruì # 笍
+0x7b0e:yuán # 笎
+0x7b0f:hù # 笏
+0x7b10:háng,hàng # 笐
+0x7b11:xiào # 笑
+0x7b12:cén,jìn,hán # 笒
+0x7b13:pí,bì # 笓
+0x7b14:bǐ # 笔
+0x7b15:jiǎn # 笕
+0x7b16:yǐ # 笖
+0x7b17:dōng # 笗
+0x7b18:shān # 笘
+0x7b19:shēng # 笙
+0x7b1a:dā,xiá,nà # 笚
+0x7b1b:dí # 笛
+0x7b1c:zhú # 笜
+0x7b1d:nà # 笝
+0x7b1e:chī # 笞
+0x7b1f:gū # 笟
+0x7b20:lì # 笠
+0x7b21:qiè # 笡
+0x7b22:mǐn # 笢
+0x7b23:bāo # 笣
+0x7b24:tiáo # 笤
+0x7b25:sì # 笥
+0x7b26:fú # 符
+0x7b27:cè # 笧
+0x7b28:bèn # 笨
+0x7b29:fá # 笩
+0x7b2a:dá # 笪
+0x7b2b:zǐ # 笫
+0x7b2c:dì # 第
+0x7b2d:líng # 笭
+0x7b2e:zuó,zé # 笮
+0x7b2f:nú # 笯
+0x7b30:fú,fèi # 笰
+0x7b31:gǒu # 笱
+0x7b32:fán # 笲
+0x7b33:jiā # 笳
+0x7b34:gě,gǎn # 笴
+0x7b35:fàn # 笵
+0x7b36:shǐ # 笶
+0x7b37:mǎo # 笷
+0x7b38:pǒ # 笸
+0x7b3a:jiān # 笺
+0x7b3b:qióng # 笻
+0x7b3c:lóng,lǒng # 笼
+0x7b3e:biān # 笾
+0x7b3f:luò # 笿
+0x7b40:guì # 筀
+0x7b41:qū # 筁
+0x7b42:chí # 筂
+0x7b43:yīn # 筃
+0x7b44:yào # 筄
+0x7b45:xiǎn # 筅
+0x7b46:bǐ # 筆
+0x7b47:qióng # 筇
+0x7b48:kuò # 筈
+0x7b49:děng # 等
+0x7b4a:jiǎo,jiào # 筊
+0x7b4b:jīn # 筋
+0x7b4c:quán # 筌
+0x7b4d:sǔn # 筍
+0x7b4e:rú # 筎
+0x7b4f:fá # 筏
+0x7b50:kuāng # 筐
+0x7b51:zhù,zhú # 筑
+0x7b52:tǒng # 筒
+0x7b53:jī # 筓
+0x7b54:dá,dā # 答
+0x7b55:háng # 筕
+0x7b56:cè # 策
+0x7b57:zhòng # 筗
+0x7b58:kòu # 筘
+0x7b59:lái # 筙
+0x7b5a:bì # 筚
+0x7b5b:shāi # 筛
+0x7b5c:dāng # 筜
+0x7b5d:zhēng # 筝
+0x7b5e:cè # 筞
+0x7b5f:fū # 筟
+0x7b60:yún,jūn # 筠
+0x7b61:tú # 筡
+0x7b62:pá # 筢
+0x7b63:lí # 筣
+0x7b64:láng,làng # 筤
+0x7b65:jǔ # 筥
+0x7b66:guǎn # 筦
+0x7b67:jiǎn # 筧
+0x7b68:hán # 筨
+0x7b69:tǒng # 筩
+0x7b6a:xiá # 筪
+0x7b6b:zhì,zhǐ # 筫
+0x7b6c:chéng # 筬
+0x7b6d:suàn # 筭
+0x7b6e:shì # 筮
+0x7b6f:zhù # 筯
+0x7b70:zuó # 筰
+0x7b71:xiǎo # 筱
+0x7b72:shāo # 筲
+0x7b73:tíng # 筳
+0x7b74:cè,jiā # 筴
+0x7b75:yán # 筵
+0x7b76:gào # 筶
+0x7b77:kuài # 筷
+0x7b78:gān # 筸
+0x7b79:chóu # 筹
+0x7b7b:gàng # 筻
+0x7b7c:yún # 筼
+0x7b7e:qiān # 签
+0x7b7f:xiǎo # 筿
+0x7b80:jiǎn # 简
+0x7b81:póu,bù,fú,pú # 箁
+0x7b82:lái # 箂
+0x7b83:zōu # 箃
+0x7b84:pái,bēi # 箄
+0x7b85:bì # 箅
+0x7b86:bì # 箆
+0x7b87:gè # 箇
+0x7b88:tái,chí # 箈
+0x7b89:guǎi,dài # 箉
+0x7b8a:yū # 箊
+0x7b8b:jiān # 箋
+0x7b8c:zhào,dào # 箌
+0x7b8d:gū # 箍
+0x7b8e:chí # 箎
+0x7b8f:zhēng # 箏
+0x7b90:qìng,jīng # 箐
+0x7b91:shà # 箑
+0x7b92:zhǒu # 箒
+0x7b93:lù # 箓
+0x7b94:bó # 箔
+0x7b95:jī # 箕
+0x7b96:lín,lǐn # 箖
+0x7b97:suàn # 算
+0x7b98:jùn,qūn # 箘
+0x7b99:fú # 箙
+0x7b9a:zhá # 箚
+0x7b9b:gū # 箛
+0x7b9c:kōng # 箜
+0x7b9d:qián # 箝
+0x7b9e:quān # 箞
+0x7b9f:jùn # 箟
+0x7ba0:chuí # 箠
+0x7ba1:guǎn # 管
+0x7ba2:wǎn,yuān # 箢
+0x7ba3:cè # 箣
+0x7ba4:zú # 箤
+0x7ba5:pǒ # 箥
+0x7ba6:zé # 箦
+0x7ba7:qiè # 箧
+0x7ba8:tuò # 箨
+0x7ba9:luó # 箩
+0x7baa:dān # 箪
+0x7bab:xiāo # 箫
+0x7bac:ruò # 箬
+0x7bad:jiàn # 箭
+0x7baf:biān # 箯
+0x7bb0:sǔn # 箰
+0x7bb1:xiāng # 箱
+0x7bb2:xiǎn # 箲
+0x7bb3:píng # 箳
+0x7bb4:zhēn # 箴
+0x7bb5:xīng # 箵
+0x7bb6:hú # 箶
+0x7bb7:shī,yí # 箷
+0x7bb8:zhù # 箸
+0x7bb9:yuē,yào,chuò # 箹
+0x7bba:chūn # 箺
+0x7bbb:lǜ # 箻
+0x7bbc:wū # 箼
+0x7bbd:dǒng # 箽
+0x7bbe:shuò,xiāo,qiào # 箾
+0x7bbf:jí # 箿
+0x7bc0:jié # 節
+0x7bc1:huáng # 篁
+0x7bc2:xīng # 篂
+0x7bc3:mèi # 篃
+0x7bc4:fàn # 範
+0x7bc5:chuán # 篅
+0x7bc6:zhuàn # 篆
+0x7bc7:piān # 篇
+0x7bc8:fēng # 篈
+0x7bc9:zhù,zhú # 築
+0x7bca:hóng # 篊
+0x7bcb:qiè # 篋
+0x7bcc:hóu # 篌
+0x7bcd:qiū # 篍
+0x7bce:miǎo # 篎
+0x7bcf:qiàn # 篏
+0x7bd1:kuì # 篑
+0x7bd3:lǒu # 篓
+0x7bd4:yún # 篔
+0x7bd5:hé # 篕
+0x7bd6:táng # 篖
+0x7bd7:yuè # 篗
+0x7bd8:chōu # 篘
+0x7bd9:gāo # 篙
+0x7bda:fěi # 篚
+0x7bdb:ruò # 篛
+0x7bdc:zhēng # 篜
+0x7bdd:gōu # 篝
+0x7bde:niè # 篞
+0x7bdf:qiàn # 篟
+0x7be0:xiǎo # 篠
+0x7be1:cuàn # 篡
+0x7be2:gōng,gǎn,lǒng # 篢
+0x7be3:péng,páng # 篣
+0x7be4:dǔ # 篤
+0x7be5:lì # 篥
+0x7be6:bì # 篦
+0x7be7:zhuó,huò # 篧
+0x7be8:chú # 篨
+0x7be9:shāi # 篩
+0x7bea:chí # 篪
+0x7beb:zhù # 篫
+0x7bec:qiāng,cāng # 篬
+0x7bed:lóng,lǒng # 篭
+0x7bee:lán # 篮
+0x7bef:jiǎn,jiān # 篯
+0x7bf0:bù # 篰
+0x7bf1:lí # 篱
+0x7bf2:huì # 篲
+0x7bf3:bì # 篳
+0x7bf4:zhú,dí # 篴
+0x7bf5:cōng # 篵
+0x7bf6:yān # 篶
+0x7bf7:péng # 篷
+0x7bf8:cēn,zān,cǎn # 篸
+0x7bf9:zhuàn,zuàn,suǎn # 篹
+0x7bfa:pí # 篺
+0x7bfb:piǎo,biāo # 篻
+0x7bfc:dōu # 篼
+0x7bfd:yù # 篽
+0x7bfe:miè # 篾
+0x7bff:tuán,zhuān # 篿
+0x7c00:zé # 簀
+0x7c01:shāi # 簁
+0x7c02:guó,guì # 簂
+0x7c03:yí # 簃
+0x7c04:hù # 簄
+0x7c05:chǎn # 簅
+0x7c06:kòu # 簆
+0x7c07:cù # 簇
+0x7c08:píng # 簈
+0x7c09:zào # 簉
+0x7c0a:jī # 簊
+0x7c0b:guǐ # 簋
+0x7c0c:sù # 簌
+0x7c0d:lǒu # 簍
+0x7c0e:cè,jí # 簎
+0x7c0f:lù # 簏
+0x7c10:niǎn # 簐
+0x7c11:suō # 簑
+0x7c12:cuàn # 簒
+0x7c14:suō # 簔
+0x7c15:lè # 簕
+0x7c16:duàn # 簖
+0x7c18:xiāo # 簘
+0x7c19:bó # 簙
+0x7c1a:mì,miè # 簚
+0x7c1b:shāi,sī # 簛
+0x7c1c:dàng # 簜
+0x7c1d:liáo # 簝
+0x7c1e:dān # 簞
+0x7c1f:diàn # 簟
+0x7c20:fǔ # 簠
+0x7c21:jiǎn # 簡
+0x7c22:mǐn # 簢
+0x7c23:kuì # 簣
+0x7c24:dài # 簤
+0x7c25:jiāo # 簥
+0x7c26:dēng # 簦
+0x7c27:huáng # 簧
+0x7c28:sǔn,zhuàn # 簨
+0x7c29:láo # 簩
+0x7c2a:zān # 簪
+0x7c2b:xiāo # 簫
+0x7c2c:lù # 簬
+0x7c2d:shì # 簭
+0x7c2e:zān # 簮
+0x7c30:pái # 簰
+0x7c32:pái # 簲
+0x7c33:gǎn,gàn # 簳
+0x7c34:jù # 簴
+0x7c35:lù # 簵
+0x7c36:lù # 簶
+0x7c37:yán # 簷
+0x7c38:bò,bǒ # 簸
+0x7c39:dāng # 簹
+0x7c3a:sài # 簺
+0x7c3b:zhuā # 簻
+0x7c3c:gōu # 簼
+0x7c3d:qiān # 簽
+0x7c3e:lián # 簾
+0x7c3f:bù,bó # 簿
+0x7c40:zhòu # 籀
+0x7c41:lài # 籁
+0x7c43:lán # 籃
+0x7c44:kuì # 籄
+0x7c45:yú # 籅
+0x7c46:yuè # 籆
+0x7c47:háo # 籇
+0x7c48:zhēn,jiān # 籈
+0x7c49:tái # 籉
+0x7c4a:tì # 籊
+0x7c4b:niè # 籋
+0x7c4c:chóu # 籌
+0x7c4d:jí # 籍
+0x7c50:téng # 籐
+0x7c51:zhuàn # 籑
+0x7c52:zhòu # 籒
+0x7c53:fān,pān,biān # 籓
+0x7c54:sǒu,shǔ # 籔
+0x7c55:zhòu # 籕
+0x7c57:zhuó # 籗
+0x7c58:téng # 籘
+0x7c59:lù # 籙
+0x7c5a:lú # 籚
+0x7c5b:jiǎn,jiān # 籛
+0x7c5c:tuò # 籜
+0x7c5d:yíng # 籝
+0x7c5e:yù # 籞
+0x7c5f:lài # 籟
+0x7c60:lóng,lǒng # 籠
+0x7c62:lián # 籢
+0x7c63:lán # 籣
+0x7c64:qiān # 籤
+0x7c65:yuè # 籥
+0x7c66:zhōng # 籦
+0x7c67:qú # 籧
+0x7c68:lián # 籨
+0x7c69:biān # 籩
+0x7c6a:duàn # 籪
+0x7c6b:zuǎn # 籫
+0x7c6c:lí # 籬
+0x7c6d:shāi # 籭
+0x7c6e:luó # 籮
+0x7c6f:yíng # 籯
+0x7c70:yuè # 籰
+0x7c71:zhuó # 籱
+0x7c72:yù # 籲
+0x7c73:mǐ # 米
+0x7c74:dí # 籴
+0x7c75:fán # 籵
+0x7c76:shēn # 籶
+0x7c77:zhé # 籷
+0x7c78:shēn # 籸
+0x7c79:nǚ # 籹
+0x7c7a:hé # 籺
+0x7c7b:lèi # 类
+0x7c7c:xiān # 籼
+0x7c7d:zǐ # 籽
+0x7c7e:ní # 籾
+0x7c7f:cùn # 籿
+0x7c81:qiān # 粁
+0x7c83:bǐ # 粃
+0x7c84:bǎn # 粄
+0x7c85:wù # 粅
+0x7c86:shā,chǎo # 粆
+0x7c87:kāng,jīng # 粇
+0x7c88:róu # 粈
+0x7c89:fěn # 粉
+0x7c8a:bì # 粊
+0x7c8b:cuì # 粋
+0x7c8d:zhé # 粍
+0x7c8e:mǐ # 粎
+0x7c91:bā # 粑
+0x7c92:lì # 粒
+0x7c93:gān # 粓
+0x7c94:jù # 粔
+0x7c95:pò # 粕
+0x7c96:yù # 粖
+0x7c97:cū # 粗
+0x7c98:nián,zhān # 粘
+0x7c99:zhòu # 粙
+0x7c9a:chī # 粚
+0x7c9b:sù # 粛
+0x7c9c:tiào # 粜
+0x7c9d:lì # 粝
+0x7c9e:xī # 粞
+0x7c9f:sù # 粟
+0x7ca0:hóng # 粠
+0x7ca1:tóng # 粡
+0x7ca2:zī,cí # 粢
+0x7ca3:cè,sè # 粣
+0x7ca4:yuè # 粤
+0x7ca5:zhōu,yù # 粥
+0x7ca6:lín # 粦
+0x7ca7:zhuāng # 粧
+0x7ca8:bǎi # 粨
+0x7caa:fèn # 粪
+0x7cae:liáng # 粮
+0x7caf:xiàn # 粯
+0x7cb0:fū,fú # 粰
+0x7cb1:liáng # 粱
+0x7cb2:càn # 粲
+0x7cb3:jīng # 粳
+0x7cb4:lǐ # 粴
+0x7cb5:yuè # 粵
+0x7cb6:lù # 粶
+0x7cb7:jú # 粷
+0x7cb8:qí # 粸
+0x7cb9:cuì # 粹
+0x7cba:bài # 粺
+0x7cbb:zhāng # 粻
+0x7cbc:lín # 粼
+0x7cbd:zòng # 粽
+0x7cbe:jīng # 精
+0x7cbf:guǒ # 粿
+0x7cc1:sǎn,shēn # 糁
+0x7cc2:shēn # 糂
+0x7cc3:táng # 糃
+0x7cc4:biān,biǎn # 糄
+0x7cc5:róu # 糅
+0x7cc6:miàn # 糆
+0x7cc7:hóu # 糇
+0x7cc8:xǔ # 糈
+0x7cc9:zòng # 糉
+0x7cca:hū,hú,hù # 糊
+0x7ccb:jiàn # 糋
+0x7ccc:zān # 糌
+0x7ccd:cí # 糍
+0x7cce:lí # 糎
+0x7ccf:xiè # 糏
+0x7cd0:fū # 糐
+0x7cd1:nuò # 糑
+0x7cd2:bèi # 糒
+0x7cd3:gǔ,gòu # 糓
+0x7cd4:xiǔ # 糔
+0x7cd5:gāo # 糕
+0x7cd6:táng # 糖
+0x7cd7:qiǔ # 糗
+0x7cd9:cāo # 糙
+0x7cda:zhuāng # 糚
+0x7cdb:táng # 糛
+0x7cdc:mí,méi # 糜
+0x7cdd:sǎn,shēn # 糝
+0x7cde:fèn # 糞
+0x7cdf:zāo # 糟
+0x7ce0:kāng # 糠
+0x7ce1:jiàng # 糡
+0x7ce2:mó # 糢
+0x7ce3:sǎn,shēn # 糣
+0x7ce4:sǎn # 糤
+0x7ce5:nuò # 糥
+0x7ce6:xī # 糦
+0x7ce7:liáng # 糧
+0x7ce8:jiàng # 糨
+0x7ce9:kuài # 糩
+0x7cea:bó # 糪
+0x7ceb:huán # 糫
+0x7ced:zòng # 糭
+0x7cee:xiàn # 糮
+0x7cef:nuò # 糯
+0x7cf0:tuán # 糰
+0x7cf1:niè # 糱
+0x7cf2:lì # 糲
+0x7cf3:zuò # 糳
+0x7cf4:dí # 糴
+0x7cf5:niè # 糵
+0x7cf6:tiào # 糶
+0x7cf7:làn # 糷
+0x7cf8:mì,sī # 糸
+0x7cf9:sī # 糹
+0x7cfa:jiū,jiǔ # 糺
+0x7cfb:xì,jì # 系
+0x7cfc:gōng # 糼
+0x7cfd:zhēng,zhěng # 糽
+0x7cfe:jiū # 糾
+0x7cff:gōng # 糿
+0x7d00:jì # 紀
+0x7d01:chà,chǎ # 紁
+0x7d02:zhòu # 紂
+0x7d03:xún # 紃
+0x7d04:yuē,yāo # 約
+0x7d05:hóng,gōng # 紅
+0x7d06:yū # 紆
+0x7d07:hé,gē # 紇
+0x7d08:wán # 紈
+0x7d09:rèn # 紉
+0x7d0a:wěn # 紊
+0x7d0b:wén,wèn # 紋
+0x7d0c:qiú # 紌
+0x7d0d:nà # 納
+0x7d0e:zī # 紎
+0x7d0f:tǒu # 紏
+0x7d10:niǔ # 紐
+0x7d11:fóu # 紑
+0x7d12:jì,jié,jiè # 紒
+0x7d13:shū # 紓
+0x7d14:chún # 純
+0x7d15:pī,pí,bǐ # 紕
+0x7d16:zhèn # 紖
+0x7d17:shā # 紗
+0x7d18:hóng # 紘
+0x7d19:zhǐ # 紙
+0x7d1a:jí # 級
+0x7d1b:fēn # 紛
+0x7d1c:yún # 紜
+0x7d1d:rèn # 紝
+0x7d1e:dǎn # 紞
+0x7d1f:jīn,jìn # 紟
+0x7d20:sù # 素
+0x7d21:fǎng # 紡
+0x7d22:suǒ # 索
+0x7d23:cuì # 紣
+0x7d24:jiǔ # 紤
+0x7d25:zhā,zā # 紥
+0x7d27:jǐn # 紧
+0x7d28:fū,fù # 紨
+0x7d29:zhì # 紩
+0x7d2a:qī # 紪
+0x7d2b:zǐ # 紫
+0x7d2c:chōu,chóu # 紬
+0x7d2d:hóng # 紭
+0x7d2e:zhā,zā # 紮
+0x7d2f:léi,lěi,lèi # 累
+0x7d30:xì # 細
+0x7d31:fú # 紱
+0x7d32:xiè # 紲
+0x7d33:shēn # 紳
+0x7d34:bō,bì # 紴
+0x7d35:zhù # 紵
+0x7d36:qū,qǔ # 紶
+0x7d37:líng # 紷
+0x7d38:zhù # 紸
+0x7d39:shào # 紹
+0x7d3a:gàn # 紺
+0x7d3b:yǎng # 紻
+0x7d3c:fú # 紼
+0x7d3d:tuó # 紽
+0x7d3e:zhěn,tiǎn # 紾
+0x7d3f:dài # 紿
+0x7d40:chù # 絀
+0x7d41:shī # 絁
+0x7d42:zhōng # 終
+0x7d43:xián # 絃
+0x7d44:zǔ # 組
+0x7d45:jiōng,jiǒng # 絅
+0x7d46:bàn # 絆
+0x7d47:qú # 絇
+0x7d48:mò # 絈
+0x7d49:shù # 絉
+0x7d4a:zuì # 絊
+0x7d4c:jīng # 経
+0x7d4d:rèn # 絍
+0x7d4e:háng # 絎
+0x7d4f:xiè # 絏
+0x7d50:jié,jiē # 結
+0x7d51:zhū # 絑
+0x7d52:chóu # 絒
+0x7d53:guà,kuā # 絓
+0x7d54:bǎi,mò # 絔
+0x7d55:jué # 絕
+0x7d56:kuàng # 絖
+0x7d57:hú # 絗
+0x7d58:cì # 絘
+0x7d59:huán,gēng # 絙
+0x7d5a:gēng # 絚
+0x7d5b:tāo # 絛
+0x7d5c:xié,jié # 絜
+0x7d5d:kù # 絝
+0x7d5e:jiǎo # 絞
+0x7d5f:quán,shuān # 絟
+0x7d60:gǎi,ǎi # 絠
+0x7d61:luò,lào # 絡
+0x7d62:xuàn # 絢
+0x7d63:bēng,bīng,pēng # 絣
+0x7d64:xiàn # 絤
+0x7d65:fú # 絥
+0x7d66:gěi,jǐ # 給
+0x7d67:tōng,tóng,dòng # 絧
+0x7d68:róng # 絨
+0x7d69:tiào,diào,dào # 絩
+0x7d6a:yīn # 絪
+0x7d6b:lěi,lèi,léi # 絫
+0x7d6c:xiè # 絬
+0x7d6d:juàn # 絭
+0x7d6e:xù # 絮
+0x7d6f:gāi,hài # 絯
+0x7d70:dié # 絰
+0x7d71:tǒng # 統
+0x7d72:sī # 絲
+0x7d73:jiàng # 絳
+0x7d74:xiáng # 絴
+0x7d75:huì # 絵
+0x7d76:jué # 絶
+0x7d77:zhí # 絷
+0x7d78:jiǎn # 絸
+0x7d79:juàn # 絹
+0x7d7a:chī,zhǐ # 絺
+0x7d7b:miǎn,wèn,mán,wàn # 絻
+0x7d7c:zhèn # 絼
+0x7d7d:lǚ # 絽
+0x7d7e:chéng # 絾
+0x7d7f:qiú # 絿
+0x7d80:shū # 綀
+0x7d81:bǎng # 綁
+0x7d82:tǒng # 綂
+0x7d83:xiāo # 綃
+0x7d84:huán,huàn,wàn # 綄
+0x7d85:qīn,xiān # 綅
+0x7d86:gěng # 綆
+0x7d87:xū # 綇
+0x7d88:tí,tì # 綈
+0x7d89:xiù # 綉
+0x7d8a:xié # 綊
+0x7d8b:hóng # 綋
+0x7d8c:xì # 綌
+0x7d8d:fú # 綍
+0x7d8e:tīng # 綎
+0x7d8f:suí # 綏
+0x7d90:duì # 綐
+0x7d91:kǔn # 綑
+0x7d92:fū # 綒
+0x7d93:jīng # 經
+0x7d94:hù # 綔
+0x7d95:zhī # 綕
+0x7d96:yán,xiàn # 綖
+0x7d97:jiǒng # 綗
+0x7d98:féng # 綘
+0x7d99:jì # 継
+0x7d9c:zōng,zèng # 綜
+0x7d9d:lín,chēn # 綝
+0x7d9e:duǒ # 綞
+0x7d9f:lì,liè # 綟
+0x7da0:lǜ # 綠
+0x7da1:jīng # 綡
+0x7da2:chóu # 綢
+0x7da3:quǎn # 綣
+0x7da4:shào # 綤
+0x7da5:qí # 綥
+0x7da6:qí # 綦
+0x7da7:zhǔn,zhùn # 綧
+0x7da8:jī,qí # 綨
+0x7da9:wǎn # 綩
+0x7daa:qiàn,qīng,zhēng # 綪
+0x7dab:xiàn # 綫
+0x7dac:shòu # 綬
+0x7dad:wéi # 維
+0x7dae:qìng,qǐ # 綮
+0x7daf:táo # 綯
+0x7db0:wǎn # 綰
+0x7db1:gāng # 綱
+0x7db2:wǎng # 網
+0x7db3:bēng,běng,bèng # 綳
+0x7db4:zhuì # 綴
+0x7db5:cǎi # 綵
+0x7db6:guǒ # 綶
+0x7db7:cuì # 綷
+0x7db8:lún,guān # 綸
+0x7db9:liǔ # 綹
+0x7dba:qǐ # 綺
+0x7dbb:zhàn # 綻
+0x7dbc:bì # 綼
+0x7dbd:chuò,chāo # 綽
+0x7dbe:líng # 綾
+0x7dbf:mián # 綿
+0x7dc0:qī # 緀
+0x7dc1:jī # 緁
+0x7dc2:tián,tǎn,chān # 緂
+0x7dc3:zōng # 緃
+0x7dc4:gǔn # 緄
+0x7dc5:zōu # 緅
+0x7dc6:xī # 緆
+0x7dc7:zī # 緇
+0x7dc8:xìng # 緈
+0x7dc9:liǎng # 緉
+0x7dca:jǐn # 緊
+0x7dcb:fēi # 緋
+0x7dcc:ruí # 緌
+0x7dcd:mín # 緍
+0x7dce:yù # 緎
+0x7dcf:zǒng # 総
+0x7dd0:fán # 緐
+0x7dd1:lǜ,lù # 緑
+0x7dd2:xù # 緒
+0x7dd3:yīng # 緓
+0x7dd4:shàng # 緔
+0x7dd6:xù # 緖
+0x7dd7:xiāng # 緗
+0x7dd8:jiān # 緘
+0x7dd9:kè # 緙
+0x7dda:xiàn # 線
+0x7ddb:ruǎn,ruàn # 緛
+0x7ddc:mián # 緜
+0x7ddd:jī,qī # 緝
+0x7dde:duàn # 緞
+0x7ddf:chóng,zhòng # 緟
+0x7de0:dì # 締
+0x7de1:mín # 緡
+0x7de2:miáo,máo # 緢
+0x7de3:yuán # 緣
+0x7de4:xiè,yè # 緤
+0x7de5:bǎo # 緥
+0x7de6:sī # 緦
+0x7de7:qiū # 緧
+0x7de8:biān # 編
+0x7de9:huǎn # 緩
+0x7dea:gēng,gèng # 緪
+0x7deb:zǒng # 緫
+0x7dec:miǎn # 緬
+0x7ded:wèi # 緭
+0x7dee:fù # 緮
+0x7def:wěi # 緯
+0x7df0:tōu,xū,shū # 緰
+0x7df1:gōu # 緱
+0x7df2:miǎo # 緲
+0x7df3:xié # 緳
+0x7df4:liàn # 練
+0x7df5:zōng,zòng # 緵
+0x7df6:biàn,pián # 緶
+0x7df7:gǔn,yùn # 緷
+0x7df8:yīn # 緸
+0x7df9:tí # 緹
+0x7dfa:guā,wō # 緺
+0x7dfb:zhì # 緻
+0x7dfc:yùn,yūn,wēn # 緼
+0x7dfd:chēng # 緽
+0x7dfe:chán # 緾
+0x7dff:dài # 緿
+0x7e00:xié # 縀
+0x7e01:yuán # 縁
+0x7e02:zǒng # 縂
+0x7e03:xū # 縃
+0x7e06:gēng,gèng # 縆
+0x7e08:yíng # 縈
+0x7e09:jìn # 縉
+0x7e0a:yì # 縊
+0x7e0b:zhuì # 縋
+0x7e0c:nì # 縌
+0x7e0d:bāng,bàng # 縍
+0x7e0e:gǔ,hú # 縎
+0x7e0f:pán # 縏
+0x7e10:zhòu # 縐
+0x7e11:jiān # 縑
+0x7e12:cī,cuò,suǒ # 縒
+0x7e13:quán # 縓
+0x7e14:shuǎng # 縔
+0x7e15:yùn,yūn,wēn # 縕
+0x7e16:xiá # 縖
+0x7e17:cuī,suī,shuāi # 縗
+0x7e18:xì # 縘
+0x7e19:róng,rǒng,ròng # 縙
+0x7e1a:tāo # 縚
+0x7e1b:fù # 縛
+0x7e1c:yún # 縜
+0x7e1d:zhěn # 縝
+0x7e1e:gǎo # 縞
+0x7e1f:rù # 縟
+0x7e20:hú # 縠
+0x7e21:zài,zēng # 縡
+0x7e22:téng # 縢
+0x7e23:xiàn,xuán # 縣
+0x7e24:sù # 縤
+0x7e25:zhěn # 縥
+0x7e26:zòng # 縦
+0x7e27:tāo # 縧
+0x7e29:cài # 縩
+0x7e2a:bì # 縪
+0x7e2b:féng,fèng # 縫
+0x7e2c:cù # 縬
+0x7e2d:lí # 縭
+0x7e2e:suō,sù # 縮
+0x7e2f:yǎn,yǐn # 縯
+0x7e30:xǐ # 縰
+0x7e31:zòng,zǒng # 縱
+0x7e32:léi # 縲
+0x7e33:zhuàn,juàn # 縳
+0x7e34:qiàn # 縴
+0x7e35:màn # 縵
+0x7e36:zhí # 縶
+0x7e37:lǚ # 縷
+0x7e38:mù,mò # 縸
+0x7e39:piǎo,piāo # 縹
+0x7e3a:lián # 縺
+0x7e3b:mí # 縻
+0x7e3c:xuàn # 縼
+0x7e3d:zǒng # 總
+0x7e3e:jì # 績
+0x7e3f:shān # 縿
+0x7e40:suì # 繀
+0x7e41:fán,pó # 繁
+0x7e42:lǜ # 繂
+0x7e43:bēng,běng,bèng # 繃
+0x7e44:yī # 繄
+0x7e45:sāo # 繅
+0x7e46:móu,miù,miào,mù,liǎo # 繆
+0x7e47:yáo,yóu,zhòu # 繇
+0x7e48:qiǎng # 繈
+0x7e49:shéng,hún # 繉
+0x7e4b:jì # 繋
+0x7e4d:xiù # 繍
+0x7e4e:rán # 繎
+0x7e4f:xuàn # 繏
+0x7e50:suì # 繐
+0x7e51:qiāo # 繑
+0x7e52:zēng,zèng # 繒
+0x7e53:zuǒ # 繓
+0x7e54:zhī,zhì # 織
+0x7e55:shàn # 繕
+0x7e56:sǎn # 繖
+0x7e57:lín # 繗
+0x7e58:jú,jué # 繘
+0x7e59:fān # 繙
+0x7e5a:liáo # 繚
+0x7e5b:chuō,chuò # 繛
+0x7e5c:zūn,zǔn # 繜
+0x7e5d:jiàn # 繝
+0x7e5e:rào # 繞
+0x7e5f:chǎn,chán # 繟
+0x7e60:ruǐ # 繠
+0x7e61:xiù # 繡
+0x7e62:huì,huí # 繢
+0x7e63:huà # 繣
+0x7e64:zuǎn # 繤
+0x7e65:xī # 繥
+0x7e66:qiǎng # 繦
+0x7e68:da # 繨
+0x7e69:shéng # 繩
+0x7e6a:huì # 繪
+0x7e6b:xì,jì # 繫
+0x7e6c:sè # 繬
+0x7e6d:jiǎn # 繭
+0x7e6e:jiāng # 繮
+0x7e6f:huán # 繯
+0x7e70:qiāo,sāo # 繰
+0x7e71:cōng # 繱
+0x7e72:xiè # 繲
+0x7e73:jiǎo,zhuó # 繳
+0x7e74:bì # 繴
+0x7e75:dàn,tán,chán # 繵
+0x7e76:yì # 繶
+0x7e77:nǒng # 繷
+0x7e78:suì # 繸
+0x7e79:yì # 繹
+0x7e7a:shā # 繺
+0x7e7b:rú,xū # 繻
+0x7e7c:jì # 繼
+0x7e7d:bīn # 繽
+0x7e7e:qiǎn # 繾
+0x7e7f:lán # 繿
+0x7e80:pú,fú # 纀
+0x7e81:xūn # 纁
+0x7e82:zuǎn # 纂
+0x7e83:zī # 纃
+0x7e84:péng # 纄
+0x7e85:yào,lì # 纅
+0x7e86:mò # 纆
+0x7e87:lèi # 纇
+0x7e88:xiè # 纈
+0x7e89:zuǎn # 纉
+0x7e8a:kuàng # 纊
+0x7e8b:yōu # 纋
+0x7e8c:xù # 續
+0x7e8d:léi # 纍
+0x7e8e:xiān # 纎
+0x7e8f:chán # 纏
+0x7e91:lú # 纑
+0x7e92:chán # 纒
+0x7e93:yīng # 纓
+0x7e94:cái # 纔
+0x7e95:xiāng,rǎng # 纕
+0x7e96:xiān # 纖
+0x7e97:zuī # 纗
+0x7e98:zuǎn # 纘
+0x7e99:luò # 纙
+0x7e9a:lí,xǐ,lǐ,sǎ # 纚
+0x7e9b:dào # 纛
+0x7e9c:lǎn # 纜
+0x7e9d:léi # 纝
+0x7e9e:liàn # 纞
+0x7e9f:sī # 纟
+0x7ea0:jiū # 纠
+0x7ea1:yū # 纡
+0x7ea2:hóng,gōng # 红
+0x7ea3:zhòu # 纣
+0x7ea4:xiān,qiàn # 纤
+0x7ea5:hé,gē # 纥
+0x7ea6:yuē,yāo # 约
+0x7ea7:jí # 级
+0x7ea8:wán # 纨
+0x7ea9:kuàng # 纩
+0x7eaa:jì,jǐ # 纪
+0x7eab:rèn # 纫
+0x7eac:wěi # 纬
+0x7ead:yún # 纭
+0x7eae:hóng # 纮
+0x7eaf:chún # 纯
+0x7eb0:pī,pí,bǐ # 纰
+0x7eb1:shā # 纱
+0x7eb2:gāng # 纲
+0x7eb3:nà # 纳
+0x7eb4:rèn # 纴
+0x7eb5:zòng,zǒng # 纵
+0x7eb6:lún,guān # 纶
+0x7eb7:fēn # 纷
+0x7eb8:zhǐ # 纸
+0x7eb9:wén,wèn # 纹
+0x7eba:fǎng # 纺
+0x7ebb:zhù # 纻
+0x7ebc:zhèn # 纼
+0x7ebd:niǔ # 纽
+0x7ebe:shū # 纾
+0x7ebf:xiàn # 线
+0x7ec0:gàn # 绀
+0x7ec1:xiè # 绁
+0x7ec2:fú # 绂
+0x7ec3:liàn # 练
+0x7ec4:zǔ # 组
+0x7ec5:shēn # 绅
+0x7ec6:xì # 细
+0x7ec7:zhī,zhì # 织
+0x7ec8:zhōng # 终
+0x7ec9:zhòu # 绉
+0x7eca:bàn # 绊
+0x7ecb:fú # 绋
+0x7ecc:chù # 绌
+0x7ecd:shào # 绍
+0x7ece:yì # 绎
+0x7ecf:jīng # 经
+0x7ed0:dài # 绐
+0x7ed1:bǎng # 绑
+0x7ed2:róng # 绒
+0x7ed3:jié,jiē # 结
+0x7ed4:kù # 绔
+0x7ed5:rào # 绕
+0x7ed6:dié # 绖
+0x7ed7:háng # 绗
+0x7ed8:huì # 绘
+0x7ed9:gěi,jǐ # 给
+0x7eda:xuàn # 绚
+0x7edb:jiàng # 绛
+0x7edc:luò,lào # 络
+0x7edd:jué # 绝
+0x7ede:jiǎo # 绞
+0x7edf:tǒng # 统
+0x7ee0:gěng # 绠
+0x7ee1:xiāo # 绡
+0x7ee2:juàn # 绢
+0x7ee3:xiù # 绣
+0x7ee4:xì # 绤
+0x7ee5:suí # 绥
+0x7ee6:tāo # 绦
+0x7ee7:jì # 继
+0x7ee8:tí,tì # 绨
+0x7ee9:jì # 绩
+0x7eea:xù # 绪
+0x7eeb:líng # 绫
+0x7eec:yīng # 绬
+0x7eed:xù # 续
+0x7eee:qǐ # 绮
+0x7eef:fēi # 绯
+0x7ef0:chuò,chāo # 绰
+0x7ef1:shàng # 绱
+0x7ef2:gǔn # 绲
+0x7ef3:shéng # 绳
+0x7ef4:wéi # 维
+0x7ef5:mián # 绵
+0x7ef6:shòu # 绶
+0x7ef7:bēng,běng,bèng # 绷
+0x7ef8:chóu # 绸
+0x7ef9:táo # 绹
+0x7efa:liǔ # 绺
+0x7efb:quǎn # 绻
+0x7efc:zōng,zèng # 综
+0x7efd:zhàn # 绽
+0x7efe:wǎn # 绾
+0x7eff:lǜ,lù # 绿
+0x7f00:zhuì # 缀
+0x7f01:zī # 缁
+0x7f02:kè # 缂
+0x7f03:xiāng # 缃
+0x7f04:jiān # 缄
+0x7f05:miǎn # 缅
+0x7f06:lǎn # 缆
+0x7f07:tí # 缇
+0x7f08:miǎo # 缈
+0x7f09:jī,qī # 缉
+0x7f0a:yùn,yūn,wēn # 缊
+0x7f0b:huì,huí # 缋
+0x7f0c:sī # 缌
+0x7f0d:duǒ # 缍
+0x7f0e:duàn # 缎
+0x7f0f:biàn,pián # 缏
+0x7f10:xiàn # 缐
+0x7f11:gōu # 缑
+0x7f12:zhuì # 缒
+0x7f13:huǎn # 缓
+0x7f14:dì # 缔
+0x7f15:lǚ # 缕
+0x7f16:biān # 编
+0x7f17:mín # 缗
+0x7f18:yuán # 缘
+0x7f19:jìn # 缙
+0x7f1a:fù # 缚
+0x7f1b:rù # 缛
+0x7f1c:zhěn # 缜
+0x7f1d:féng,fèng # 缝
+0x7f1e:cuī,suī,shuāi # 缞
+0x7f1f:gǎo # 缟
+0x7f20:chán # 缠
+0x7f21:lí # 缡
+0x7f22:yì # 缢
+0x7f23:jiān # 缣
+0x7f24:bīn # 缤
+0x7f25:piǎo,piāo # 缥
+0x7f26:màn # 缦
+0x7f27:léi # 缧
+0x7f28:yīng # 缨
+0x7f29:suō,sù # 缩
+0x7f2a:móu,miù,miào,mù,liǎo # 缪
+0x7f2b:sāo # 缫
+0x7f2c:xié # 缬
+0x7f2d:liáo # 缭
+0x7f2e:shàn # 缮
+0x7f2f:zēng,zèng # 缯
+0x7f30:jiāng # 缰
+0x7f31:qiǎn # 缱
+0x7f32:qiāo,sāo # 缲
+0x7f33:huán # 缳
+0x7f34:jiǎo,zhuó # 缴
+0x7f35:zuǎn # 缵
+0x7f36:fǒu # 缶
+0x7f37:xiè # 缷
+0x7f38:gāng # 缸
+0x7f39:fǒu # 缹
+0x7f3a:quē # 缺
+0x7f3b:fǒu # 缻
+0x7f3d:bō # 缽
+0x7f3e:píng # 缾
+0x7f3f:xiàng # 缿
+0x7f41:gāng # 罁
+0x7f42:yīng # 罂
+0x7f43:yīng # 罃
+0x7f44:qìng # 罄
+0x7f45:xià # 罅
+0x7f46:guàn # 罆
+0x7f47:zūn # 罇
+0x7f48:tán # 罈
+0x7f4a:qì # 罊
+0x7f4b:wèng # 罋
+0x7f4c:yīng # 罌
+0x7f4d:léi # 罍
+0x7f4e:tán # 罎
+0x7f4f:lú # 罏
+0x7f50:guàn # 罐
+0x7f51:wǎng # 网
+0x7f52:wǎng # 罒
+0x7f53:wǎng # 罓
+0x7f54:wǎng # 罔
+0x7f55:hǎn # 罕
+0x7f57:luó # 罗
+0x7f58:fú # 罘
+0x7f59:shēn # 罙
+0x7f5a:fá # 罚
+0x7f5b:gū # 罛
+0x7f5c:zhǔ # 罜
+0x7f5d:jū # 罝
+0x7f5e:máo # 罞
+0x7f5f:gǔ # 罟
+0x7f60:mín # 罠
+0x7f61:gāng # 罡
+0x7f62:bà,ba,pí # 罢
+0x7f63:guà # 罣
+0x7f64:tí # 罤
+0x7f65:juàn # 罥
+0x7f66:fú # 罦
+0x7f67:shēn # 罧
+0x7f68:yǎn # 罨
+0x7f69:zhào # 罩
+0x7f6a:zuì # 罪
+0x7f6b:guǎi,guà # 罫
+0x7f6c:zhuó # 罬
+0x7f6d:yù # 罭
+0x7f6e:zhì # 置
+0x7f6f:ǎn # 罯
+0x7f70:fá # 罰
+0x7f71:lǎn # 罱
+0x7f72:shǔ # 署
+0x7f73:sī # 罳
+0x7f74:pí # 罴
+0x7f75:mà # 罵
+0x7f76:liǔ # 罶
+0x7f77:bà,ba,pí # 罷
+0x7f78:fá # 罸
+0x7f79:lí # 罹
+0x7f7a:cháo # 罺
+0x7f7b:wèi # 罻
+0x7f7c:bì # 罼
+0x7f7d:jì # 罽
+0x7f7e:zēng # 罾
+0x7f7f:chōng # 罿
+0x7f80:liǔ # 羀
+0x7f81:jī # 羁
+0x7f82:juàn # 羂
+0x7f83:mì # 羃
+0x7f84:zhào # 羄
+0x7f85:luó # 羅
+0x7f86:pí # 羆
+0x7f87:jī # 羇
+0x7f88:jī # 羈
+0x7f89:luán # 羉
+0x7f8a:yáng,xiáng # 羊
+0x7f8b:mǐ # 羋
+0x7f8c:qiāng # 羌
+0x7f8d:dá # 羍
+0x7f8e:měi # 美
+0x7f8f:yáng,xiáng # 羏
+0x7f90:líng # 羐
+0x7f91:yǒu # 羑
+0x7f92:fén # 羒
+0x7f93:bā # 羓
+0x7f94:gāo # 羔
+0x7f95:yàng # 羕
+0x7f96:gǔ # 羖
+0x7f97:qiāng # 羗
+0x7f98:zāng # 羘
+0x7f99:měi,gāo # 羙
+0x7f9a:líng # 羚
+0x7f9b:yì,xī # 羛
+0x7f9c:zhù # 羜
+0x7f9d:dī # 羝
+0x7f9e:xiū # 羞
+0x7f9f:qiǎng # 羟
+0x7fa0:yí # 羠
+0x7fa1:xiàn # 羡
+0x7fa2:róng # 羢
+0x7fa3:qún # 羣
+0x7fa4:qún # 群
+0x7fa5:qiǎng # 羥
+0x7fa6:huán # 羦
+0x7fa7:suō # 羧
+0x7fa8:xiàn # 羨
+0x7fa9:yì # 義
+0x7fab:qiāng,kòng # 羫
+0x7fac:qián,xián,yán # 羬
+0x7fad:yú # 羭
+0x7fae:gēng # 羮
+0x7faf:jié # 羯
+0x7fb0:tāng # 羰
+0x7fb1:yuán # 羱
+0x7fb2:xī # 羲
+0x7fb3:fán # 羳
+0x7fb4:shān # 羴
+0x7fb5:fén # 羵
+0x7fb6:shān # 羶
+0x7fb7:liǎn # 羷
+0x7fb8:léi # 羸
+0x7fb9:gēng # 羹
+0x7fba:nóu # 羺
+0x7fbb:qiàng # 羻
+0x7fbc:chàn # 羼
+0x7fbd:yǔ # 羽
+0x7fbe:hóng,gòng # 羾
+0x7fbf:yì # 羿
+0x7fc0:chōng # 翀
+0x7fc1:wēng # 翁
+0x7fc2:fēn # 翂
+0x7fc3:hóng # 翃
+0x7fc4:chì # 翄
+0x7fc5:chì # 翅
+0x7fc6:cuì # 翆
+0x7fc7:fú # 翇
+0x7fc8:xiá # 翈
+0x7fc9:běn # 翉
+0x7fca:yì # 翊
+0x7fcb:là # 翋
+0x7fcc:yì # 翌
+0x7fcd:pī,bì,pō # 翍
+0x7fce:líng # 翎
+0x7fcf:liù # 翏
+0x7fd0:zhì # 翐
+0x7fd1:qú,yù # 翑
+0x7fd2:xí # 習
+0x7fd3:xié # 翓
+0x7fd4:xiáng # 翔
+0x7fd5:xī # 翕
+0x7fd6:xī # 翖
+0x7fd7:ké # 翗
+0x7fd8:qiáo,qiào # 翘
+0x7fd9:huì # 翙
+0x7fda:huī # 翚
+0x7fdb:xiāo # 翛
+0x7fdc:shà # 翜
+0x7fdd:hóng # 翝
+0x7fde:jiāng # 翞
+0x7fdf:dí,zhái # 翟
+0x7fe0:cuì # 翠
+0x7fe1:fěi # 翡
+0x7fe2:dào,zhōu # 翢
+0x7fe3:shà # 翣
+0x7fe4:chì # 翤
+0x7fe5:zhù # 翥
+0x7fe6:jiǎn # 翦
+0x7fe7:xuān # 翧
+0x7fe8:chì # 翨
+0x7fe9:piān # 翩
+0x7fea:zōng # 翪
+0x7feb:wán # 翫
+0x7fec:huī # 翬
+0x7fed:hóu # 翭
+0x7fee:hé # 翮
+0x7fef:hè # 翯
+0x7ff0:hàn # 翰
+0x7ff1:áo # 翱
+0x7ff2:piāo # 翲
+0x7ff3:yì # 翳
+0x7ff4:lián # 翴
+0x7ff5:hóu,qú # 翵
+0x7ff7:lín # 翷
+0x7ff8:pěn # 翸
+0x7ff9:qiáo,qiào # 翹
+0x7ffa:áo # 翺
+0x7ffb:fān # 翻
+0x7ffc:yì # 翼
+0x7ffd:huì # 翽
+0x7ffe:xuān # 翾
+0x7fff:dào # 翿
+0x8000:yào # 耀
+0x8001:lǎo # 老
+0x8003:kǎo # 考
+0x8004:mào # 耄
+0x8005:zhě # 者
+0x8006:qí,shì # 耆
+0x8007:gǒu # 耇
+0x8008:gǒu # 耈
+0x8009:gǒu # 耉
+0x800a:dié # 耊
+0x800b:dié # 耋
+0x800c:ér # 而
+0x800d:shuǎ # 耍
+0x800e:ruǎn,nuò # 耎
+0x800f:ér,nài # 耏
+0x8010:nài # 耐
+0x8011:duān,zhuān # 耑
+0x8012:lěi # 耒
+0x8013:tīng # 耓
+0x8014:zǐ # 耔
+0x8015:gēng # 耕
+0x8016:chào # 耖
+0x8017:hào # 耗
+0x8018:yún # 耘
+0x8019:bà,pá # 耙
+0x801a:pī # 耚
+0x801b:sì,chí # 耛
+0x801c:sì # 耜
+0x801d:qù,chú # 耝
+0x801e:jiā # 耞
+0x801f:jù # 耟
+0x8020:huō # 耠
+0x8021:chú # 耡
+0x8022:lào # 耢
+0x8023:lún,lǔn # 耣
+0x8024:jí,jiè # 耤
+0x8025:tǎng # 耥
+0x8026:ǒu # 耦
+0x8027:lóu # 耧
+0x8028:nòu # 耨
+0x8029:jiǎng # 耩
+0x802a:pǎng # 耪
+0x802b:zhá,zé # 耫
+0x802c:lóu # 耬
+0x802d:jī # 耭
+0x802e:lào # 耮
+0x802f:huò # 耯
+0x8030:yōu # 耰
+0x8031:mò # 耱
+0x8032:huái # 耲
+0x8033:ěr # 耳
+0x8034:yì # 耴
+0x8035:dīng # 耵
+0x8036:yé,yē # 耶
+0x8037:dā # 耷
+0x8038:sǒng # 耸
+0x8039:qín # 耹
+0x803a:yún,yíng # 耺
+0x803b:chǐ # 耻
+0x803c:dān # 耼
+0x803d:dān # 耽
+0x803e:hóng # 耾
+0x803f:gěng # 耿
+0x8040:zhí # 聀
+0x8042:niè # 聂
+0x8043:dān # 聃
+0x8044:zhěn # 聄
+0x8045:chè # 聅
+0x8046:líng # 聆
+0x8047:zhēng # 聇
+0x8048:yǒu # 聈
+0x8049:wà,tuǐ,zhuó # 聉
+0x804a:liáo # 聊
+0x804b:lóng # 聋
+0x804c:zhí # 职
+0x804d:níng # 聍
+0x804e:tiāo # 聎
+0x804f:ér,nǜ # 聏
+0x8050:yà # 聐
+0x8051:tiē,zhé # 聑
+0x8052:guō # 聒
+0x8054:lián # 联
+0x8055:hào # 聕
+0x8056:shèng # 聖
+0x8057:liè # 聗
+0x8058:pìn # 聘
+0x8059:jīng # 聙
+0x805a:jù # 聚
+0x805b:bǐ # 聛
+0x805c:dǐ,zhì # 聜
+0x805d:guó # 聝
+0x805e:wén # 聞
+0x805f:xù # 聟
+0x8060:pīng # 聠
+0x8061:cōng # 聡
+0x8064:tíng # 聤
+0x8065:jǔ # 聥
+0x8066:cōng # 聦
+0x8067:kuī # 聧
+0x8069:kuì # 聩
+0x806a:cōng # 聪
+0x806b:lián # 聫
+0x806c:wēng # 聬
+0x806d:kuì # 聭
+0x806e:lián # 聮
+0x806f:lián # 聯
+0x8070:cōng # 聰
+0x8071:áo # 聱
+0x8072:shēng # 聲
+0x8073:sǒng # 聳
+0x8074:tīng # 聴
+0x8075:kuì # 聵
+0x8076:niè # 聶
+0x8077:zhí # 職
+0x8078:dān # 聸
+0x8079:níng # 聹
+0x807b:nǐ,jiàn # 聻
+0x807c:tīng # 聼
+0x807d:tīng # 聽
+0x807e:lóng # 聾
+0x807f:yù # 聿
+0x8080:yù # 肀
+0x8081:zhào # 肁
+0x8082:sì # 肂
+0x8083:sù # 肃
+0x8084:yì # 肄
+0x8085:sù # 肅
+0x8086:sì # 肆
+0x8087:zhào # 肇
+0x8088:zhào # 肈
+0x8089:ròu # 肉
+0x808a:yì # 肊
+0x808b:lèi,lē # 肋
+0x808c:jī # 肌
+0x808d:qiú # 肍
+0x808e:kěn # 肎
+0x808f:cào # 肏
+0x8090:gē # 肐
+0x8091:bó,dí # 肑
+0x8092:huàn # 肒
+0x8093:huāng # 肓
+0x8094:chǐ # 肔
+0x8095:rèn # 肕
+0x8096:xiāo,xiào # 肖
+0x8097:rǔ # 肗
+0x8098:zhǒu # 肘
+0x8099:yuān # 肙
+0x809a:dù,dǔ # 肚
+0x809b:gāng # 肛
+0x809c:róng,chēn # 肜
+0x809d:gān # 肝
+0x809e:chāi # 肞
+0x809f:wò # 肟
+0x80a0:cháng # 肠
+0x80a1:gǔ # 股
+0x80a2:zhī # 肢
+0x80a3:qín,hán,hàn # 肣
+0x80a4:fū # 肤
+0x80a5:féi # 肥
+0x80a6:bān # 肦
+0x80a7:pēi # 肧
+0x80a8:pàng,pán,pàn # 肨
+0x80a9:jiān # 肩
+0x80aa:fáng # 肪
+0x80ab:zhūn,chún # 肫
+0x80ac:yóu # 肬
+0x80ad:nà # 肭
+0x80ae:āng # 肮
+0x80af:kěn # 肯
+0x80b0:rán # 肰
+0x80b1:gōng # 肱
+0x80b2:yù,yō # 育
+0x80b3:wěn # 肳
+0x80b4:yáo # 肴
+0x80b5:qí # 肵
+0x80b6:pí,bǐ,bì # 肶
+0x80b7:qiǎn # 肷
+0x80b8:xī # 肸
+0x80b9:xī # 肹
+0x80ba:fèi # 肺
+0x80bb:kěn # 肻
+0x80bc:jǐng # 肼
+0x80bd:tài # 肽
+0x80be:shèn # 肾
+0x80bf:zhǒng # 肿
+0x80c0:zhàng # 胀
+0x80c1:xié # 胁
+0x80c2:shèn # 胂
+0x80c3:wèi # 胃
+0x80c4:zhòu # 胄
+0x80c5:dié # 胅
+0x80c6:dǎn # 胆
+0x80c7:fèi,bì # 胇
+0x80c8:bá # 胈
+0x80c9:bó # 胉
+0x80ca:qú # 胊
+0x80cb:tián # 胋
+0x80cc:bèi,bēi # 背
+0x80cd:guā # 胍
+0x80ce:tāi # 胎
+0x80cf:zǐ,fèi # 胏
+0x80d0:fěi,kū # 胐
+0x80d1:zhī # 胑
+0x80d2:nì # 胒
+0x80d3:píng,pēng # 胓
+0x80d4:zì # 胔
+0x80d5:fū,fú,zhǒu # 胕
+0x80d6:pàng,pán,pàn # 胖
+0x80d7:zhēn # 胗
+0x80d8:xián # 胘
+0x80d9:zuò # 胙
+0x80da:pēi # 胚
+0x80db:jiǎ # 胛
+0x80dc:shèng # 胜
+0x80dd:zhī # 胝
+0x80de:bāo # 胞
+0x80df:mǔ # 胟
+0x80e0:qū # 胠
+0x80e1:hú # 胡
+0x80e2:qià # 胢
+0x80e3:chǐ # 胣
+0x80e4:yìn # 胤
+0x80e5:xū # 胥
+0x80e6:yāng # 胦
+0x80e7:lóng # 胧
+0x80e8:dòng # 胨
+0x80e9:kǎ # 胩
+0x80ea:lú # 胪
+0x80eb:jìng # 胫
+0x80ec:nǔ # 胬
+0x80ed:yān # 胭
+0x80ee:pāng # 胮
+0x80ef:kuà # 胯
+0x80f0:yí # 胰
+0x80f1:guāng # 胱
+0x80f2:hǎi # 胲
+0x80f3:gē,gé # 胳
+0x80f4:dòng # 胴
+0x80f5:chī # 胵
+0x80f6:jiāo # 胶
+0x80f7:xiōng # 胷
+0x80f8:xiōng # 胸
+0x80f9:ér # 胹
+0x80fa:àn # 胺
+0x80fb:héng # 胻
+0x80fc:pián # 胼
+0x80fd:néng,nài # 能
+0x80fe:zì # 胾
+0x8100:zhēng # 脀
+0x8101:tiǎo # 脁
+0x8102:zhī # 脂
+0x8103:cuì # 脃
+0x8104:méi # 脄
+0x8105:xié # 脅
+0x8106:cuì # 脆
+0x8107:xié # 脇
+0x8108:mài,mò # 脈
+0x8109:mài,mò # 脉
+0x810a:jǐ # 脊
+0x810d:kuài # 脍
+0x810e:sà # 脎
+0x810f:zàng # 脏
+0x8110:qí # 脐
+0x8111:nǎo # 脑
+0x8112:mǐ # 脒
+0x8113:nóng # 脓
+0x8114:luán # 脔
+0x8115:wàn # 脕
+0x8116:bó # 脖
+0x8117:wěn # 脗
+0x8118:wǎn # 脘
+0x8119:xiū # 脙
+0x811a:jiǎo,jué # 脚
+0x811b:jìng # 脛
+0x811c:róu # 脜
+0x811d:hēng # 脝
+0x811e:cuǒ # 脞
+0x811f:liè # 脟
+0x8120:shān # 脠
+0x8121:tǐng # 脡
+0x8122:méi # 脢
+0x8123:chún # 脣
+0x8124:shèn # 脤
+0x8125:jiá # 脥
+0x8126:tè # 脦
+0x8127:juān # 脧
+0x8128:cù # 脨
+0x8129:xiū # 脩
+0x812a:xìn # 脪
+0x812b:tuō # 脫
+0x812c:pāo # 脬
+0x812d:chéng # 脭
+0x812e:něi # 脮
+0x812f:fǔ,pǔ # 脯
+0x8130:dòu # 脰
+0x8131:tuō # 脱
+0x8132:niào # 脲
+0x8134:pǐ # 脴
+0x8135:gǔ # 脵
+0x8136:luó # 脶
+0x8137:lì # 脷
+0x8138:liǎn # 脸
+0x8139:zhàng # 脹
+0x813a:cuī # 脺
+0x813b:jiē # 脻
+0x813c:liǎng # 脼
+0x813d:shuí # 脽
+0x813e:pí # 脾
+0x813f:biāo # 脿
+0x8140:lún # 腀
+0x8141:pián # 腁
+0x8142:guò # 腂
+0x8143:juàn # 腃
+0x8144:chuí # 腄
+0x8145:dàn # 腅
+0x8146:tiǎn # 腆
+0x8147:něi # 腇
+0x8148:jīng # 腈
+0x8149:nái # 腉
+0x814a:là,xī # 腊
+0x814b:yè # 腋
+0x814c:ā,yān # 腌
+0x814d:rèn # 腍
+0x814e:shèn # 腎
+0x814f:zhuì # 腏
+0x8150:fǔ # 腐
+0x8151:fǔ # 腑
+0x8152:jū # 腒
+0x8153:féi # 腓
+0x8154:qiāng # 腔
+0x8155:wàn # 腕
+0x8156:dòng # 腖
+0x8157:pí # 腗
+0x8158:guó # 腘
+0x8159:zōng # 腙
+0x815a:dìng # 腚
+0x815b:wò # 腛
+0x815c:méi # 腜
+0x815d:ruǎn # 腝
+0x815e:zhuàn # 腞
+0x815f:chì # 腟
+0x8160:còu # 腠
+0x8161:luó # 腡
+0x8162:ǒu # 腢
+0x8163:dì # 腣
+0x8164:ān # 腤
+0x8165:xīng # 腥
+0x8166:nǎo # 腦
+0x8167:shù # 腧
+0x8168:shuàn # 腨
+0x8169:nǎn # 腩
+0x816a:yùn # 腪
+0x816b:zhǒng # 腫
+0x816c:róu # 腬
+0x816d:è # 腭
+0x816e:sāi # 腮
+0x816f:tú # 腯
+0x8170:yāo # 腰
+0x8171:jiàn # 腱
+0x8172:wěi # 腲
+0x8173:jiǎo,jué # 腳
+0x8174:yú # 腴
+0x8175:jiā # 腵
+0x8176:duàn # 腶
+0x8177:bì # 腷
+0x8178:cháng # 腸
+0x8179:fù # 腹
+0x817a:xiàn # 腺
+0x817b:nì # 腻
+0x817c:miǎn # 腼
+0x817d:wà # 腽
+0x817e:téng # 腾
+0x817f:tuǐ # 腿
+0x8180:bǎng,páng # 膀
+0x8181:qiǎn # 膁
+0x8182:lǚ # 膂
+0x8183:wà # 膃
+0x8184:shòu # 膄
+0x8185:táng # 膅
+0x8186:sù # 膆
+0x8187:zhuì # 膇
+0x8188:gé # 膈
+0x8189:yì # 膉
+0x818a:bó # 膊
+0x818b:liáo # 膋
+0x818c:jí # 膌
+0x818d:pí # 膍
+0x818e:xié # 膎
+0x818f:gāo,gào # 膏
+0x8190:lǚ # 膐
+0x8191:bìn # 膑
+0x8193:cháng # 膓
+0x8194:lù,biāo # 膔
+0x8195:guó # 膕
+0x8196:pāng # 膖
+0x8197:chuái # 膗
+0x8198:biāo # 膘
+0x8199:jiǎng # 膙
+0x819a:fū # 膚
+0x819b:táng # 膛
+0x819c:mó # 膜
+0x819d:xī # 膝
+0x819e:zhuān,chuán,chún,zhuǎn # 膞
+0x819f:lǜ # 膟
+0x81a0:jiāo # 膠
+0x81a1:yìng # 膡
+0x81a2:lǘ # 膢
+0x81a3:zhì # 膣
+0x81a5:cūn # 膥
+0x81a6:lìn # 膦
+0x81a7:tóng # 膧
+0x81a8:péng # 膨
+0x81a9:nì # 膩
+0x81aa:chuài # 膪
+0x81ab:liáo # 膫
+0x81ac:cuì # 膬
+0x81ad:kuì # 膭
+0x81ae:xiāo # 膮
+0x81af:tēng # 膯
+0x81b0:fán,pán # 膰
+0x81b1:zhí # 膱
+0x81b2:jiāo # 膲
+0x81b3:shàn # 膳
+0x81b4:hū,wǔ # 膴
+0x81b5:cuì # 膵
+0x81b6:rùn # 膶
+0x81b7:xiāng # 膷
+0x81b8:suǐ # 膸
+0x81b9:fèn # 膹
+0x81ba:yīng # 膺
+0x81bb:shān,dàn # 膻
+0x81bc:zhuā # 膼
+0x81bd:dǎn # 膽
+0x81be:kuài # 膾
+0x81bf:nóng # 膿
+0x81c0:tún # 臀
+0x81c1:lián # 臁
+0x81c2:bì,bei # 臂
+0x81c3:yōng # 臃
+0x81c4:jué # 臄
+0x81c5:chù # 臅
+0x81c6:yì # 臆
+0x81c7:juǎn # 臇
+0x81c8:là,gé # 臈
+0x81c9:liǎn # 臉
+0x81ca:sāo,sào # 臊
+0x81cb:tún # 臋
+0x81cc:gǔ # 臌
+0x81cd:qí # 臍
+0x81ce:cuì # 臎
+0x81cf:bìn # 臏
+0x81d0:xūn # 臐
+0x81d1:nào # 臑
+0x81d2:wò,yuè # 臒
+0x81d3:zàng # 臓
+0x81d4:xiàn # 臔
+0x81d5:biāo # 臕
+0x81d6:xìng # 臖
+0x81d7:kuān # 臗
+0x81d8:là # 臘
+0x81d9:yān # 臙
+0x81da:lú # 臚
+0x81db:huò # 臛
+0x81dc:zā # 臜
+0x81dd:luǒ # 臝
+0x81de:qú # 臞
+0x81df:zàng # 臟
+0x81e0:luán # 臠
+0x81e1:ní,luán # 臡
+0x81e2:zā # 臢
+0x81e3:chén # 臣
+0x81e4:qiān,xián # 臤
+0x81e5:wò # 臥
+0x81e6:guàng,jiǒng # 臦
+0x81e7:zāng,zàng,cáng # 臧
+0x81e8:lín # 臨
+0x81e9:guǎng,jiǒng # 臩
+0x81ea:zì # 自
+0x81eb:jiǎo # 臫
+0x81ec:niè # 臬
+0x81ed:chòu,xiù # 臭
+0x81ee:jì # 臮
+0x81ef:gāo # 臯
+0x81f0:chòu # 臰
+0x81f1:mián,biān # 臱
+0x81f2:niè # 臲
+0x81f3:zhì # 至
+0x81f4:zhì # 致
+0x81f5:gé # 臵
+0x81f6:jiàn # 臶
+0x81f7:dié,zhí # 臷
+0x81f8:zhī,jìn # 臸
+0x81f9:xiū # 臹
+0x81fa:tái # 臺
+0x81fb:zhēn # 臻
+0x81fc:jiù # 臼
+0x81fd:xiàn # 臽
+0x81fe:yú # 臾
+0x81ff:chā # 臿
+0x8200:yǎo # 舀
+0x8201:yú # 舁
+0x8202:chōng # 舂
+0x8203:xì # 舃
+0x8204:xì # 舄
+0x8205:jiù # 舅
+0x8206:yú # 舆
+0x8207:yǔ # 與
+0x8208:xīng # 興
+0x8209:jǔ # 舉
+0x820a:jiù # 舊
+0x820b:xìn # 舋
+0x820c:shé # 舌
+0x820d:shě,shè # 舍
+0x820f:jiǔ # 舏
+0x8210:shì # 舐
+0x8211:tān # 舑
+0x8212:shū # 舒
+0x8213:shì # 舓
+0x8214:tiǎn # 舔
+0x8215:tàn # 舕
+0x8216:pù # 舖
+0x8217:pù # 舗
+0x8218:guǎn # 舘
+0x8219:huà # 舙
+0x821a:tiàn # 舚
+0x821b:chuǎn # 舛
+0x821c:shùn # 舜
+0x821d:xiá # 舝
+0x821e:wǔ # 舞
+0x821f:zhōu # 舟
+0x8220:dāo # 舠
+0x8221:chuán # 舡
+0x8222:shān # 舢
+0x8223:yǐ # 舣
+0x8225:pā # 舥
+0x8226:tài # 舦
+0x8227:fán # 舧
+0x8228:bǎn # 舨
+0x8229:chuán # 舩
+0x822a:háng # 航
+0x822b:fǎng # 舫
+0x822c:bān,bō,pán # 般
+0x822d:bǐ # 舭
+0x822f:zhōng # 舯
+0x8230:jiàn # 舰
+0x8231:cāng # 舱
+0x8232:líng # 舲
+0x8233:zhú # 舳
+0x8234:zé # 舴
+0x8235:duò # 舵
+0x8236:bó # 舶
+0x8237:xián # 舷
+0x8238:gě # 舸
+0x8239:chuán # 船
+0x823a:xiá # 舺
+0x823b:lú # 舻
+0x823c:qióng # 舼
+0x823d:páng # 舽
+0x823e:xī # 舾
+0x8240:fú # 艀
+0x8241:zào # 艁
+0x8242:féng # 艂
+0x8243:lí # 艃
+0x8244:shāo # 艄
+0x8245:yú # 艅
+0x8246:láng # 艆
+0x8247:tǐng # 艇
+0x8249:wěi # 艉
+0x824a:bó # 艊
+0x824b:měng # 艋
+0x824c:niàn # 艌
+0x824d:jū # 艍
+0x824e:huáng # 艎
+0x824f:shǒu # 艏
+0x8250:kè # 艐
+0x8251:biàn # 艑
+0x8252:mù # 艒
+0x8253:dié # 艓
+0x8255:bàng # 艕
+0x8256:chā # 艖
+0x8257:yì # 艗
+0x8258:sōu # 艘
+0x8259:cāng # 艙
+0x825a:cáo # 艚
+0x825b:lóu # 艛
+0x825c:dài # 艜
+0x825e:yào # 艞
+0x825f:chōng # 艟
+0x8261:dāng # 艡
+0x8262:qiáng # 艢
+0x8263:lǔ # 艣
+0x8264:yǐ # 艤
+0x8265:jí # 艥
+0x8266:jiàn # 艦
+0x8267:huò # 艧
+0x8268:méng # 艨
+0x8269:qí # 艩
+0x826a:lǔ # 艪
+0x826b:lú # 艫
+0x826c:chán # 艬
+0x826d:shuāng # 艭
+0x826e:gèn # 艮
+0x826f:liáng # 良
+0x8270:jiān # 艰
+0x8271:jiān # 艱
+0x8272:sè,shǎi # 色
+0x8273:yàn # 艳
+0x8274:fú # 艴
+0x8275:pīng # 艵
+0x8276:yàn # 艶
+0x8277:yàn # 艷
+0x8278:cǎo # 艸
+0x827a:yì # 艺
+0x827b:lè # 艻
+0x827c:dǐng # 艼
+0x827d:jiāo,qiú # 艽
+0x827e:ài,yì # 艾
+0x827f:nǎi # 艿
+0x8280:tiáo # 芀
+0x8281:qiú # 芁
+0x8282:jié,jiē # 节
+0x8283:péng # 芃
+0x8284:wán # 芄
+0x8285:yì # 芅
+0x8286:chāi,chā # 芆
+0x8287:mián # 芇
+0x8288:mǐ # 芈
+0x8289:gǎn # 芉
+0x828a:qiān # 芊
+0x828b:yù # 芋
+0x828c:yù # 芌
+0x828d:sháo # 芍
+0x828e:xiōng # 芎
+0x828f:dù # 芏
+0x8290:hù,xià # 芐
+0x8291:qǐ # 芑
+0x8292:máng # 芒
+0x8293:zì,zǐ # 芓
+0x8294:huì,hū # 芔
+0x8295:suī # 芕
+0x8296:zhì # 芖
+0x8297:xiāng # 芗
+0x8298:bì,pí # 芘
+0x8299:fú # 芙
+0x829a:tún,chūn # 芚
+0x829b:wěi # 芛
+0x829c:wú # 芜
+0x829d:zhī # 芝
+0x829e:qì # 芞
+0x829f:shān # 芟
+0x82a0:wén # 芠
+0x82a1:qiàn # 芡
+0x82a2:rén # 芢
+0x82a3:fú # 芣
+0x82a4:kōu # 芤
+0x82a5:jiè,gài # 芥
+0x82a6:lú # 芦
+0x82a7:xù,zhù # 芧
+0x82a8:jī # 芨
+0x82a9:qín # 芩
+0x82aa:qí # 芪
+0x82ab:yuán,yán # 芫
+0x82ac:fēn # 芬
+0x82ad:bā # 芭
+0x82ae:ruì # 芮
+0x82af:xīn,xìn # 芯
+0x82b0:jì # 芰
+0x82b1:huā # 花
+0x82b2:lún,huā # 芲
+0x82b3:fāng # 芳
+0x82b4:wù,hū # 芴
+0x82b5:jué # 芵
+0x82b6:gōu,gǒu # 芶
+0x82b7:zhǐ # 芷
+0x82b8:yún # 芸
+0x82b9:qín # 芹
+0x82ba:ǎo # 芺
+0x82bb:chú # 芻
+0x82bc:máo,mào # 芼
+0x82bd:yá # 芽
+0x82be:fèi,fú # 芾
+0x82bf:réng # 芿
+0x82c0:háng # 苀
+0x82c1:cōng # 苁
+0x82c2:chán,yín # 苂
+0x82c3:yǒu # 苃
+0x82c4:biàn # 苄
+0x82c5:yì # 苅
+0x82c7:wěi # 苇
+0x82c8:lì # 苈
+0x82c9:pǐ # 苉
+0x82ca:è # 苊
+0x82cb:xiàn # 苋
+0x82cc:cháng # 苌
+0x82cd:cāng # 苍
+0x82ce:zhù # 苎
+0x82cf:sū,sù # 苏
+0x82d0:dì,tí # 苐
+0x82d1:yuàn # 苑
+0x82d2:rǎn # 苒
+0x82d3:líng # 苓
+0x82d4:tái,tāi # 苔
+0x82d5:tiáo,sháo # 苕
+0x82d6:dí # 苖
+0x82d7:miáo # 苗
+0x82d8:qǐng # 苘
+0x82d9:lì,jī # 苙
+0x82da:yòng # 苚
+0x82db:kē,hē # 苛
+0x82dc:mù # 苜
+0x82dd:bèi # 苝
+0x82de:bāo # 苞
+0x82df:gǒu # 苟
+0x82e0:mín # 苠
+0x82e1:yǐ # 苡
+0x82e2:yǐ # 苢
+0x82e3:jù,qǔ # 苣
+0x82e4:piě # 苤
+0x82e5:ruò,rě # 若
+0x82e6:kǔ # 苦
+0x82e7:zhù,níng # 苧
+0x82e8:nǐ # 苨
+0x82e9:pā,bó # 苩
+0x82ea:bǐng # 苪
+0x82eb:shān,shàn # 苫
+0x82ec:xiú # 苬
+0x82ed:yǎo # 苭
+0x82ee:xiān # 苮
+0x82ef:běn # 苯
+0x82f0:hóng # 苰
+0x82f1:yīng # 英
+0x82f2:zuó,zhǎ # 苲
+0x82f3:dōng # 苳
+0x82f4:jū,chá # 苴
+0x82f5:dié # 苵
+0x82f6:nié # 苶
+0x82f7:gān # 苷
+0x82f8:hū # 苸
+0x82f9:píng,pēng # 苹
+0x82fa:méi # 苺
+0x82fb:fú # 苻
+0x82fc:shēng,ruí # 苼
+0x82fd:gū # 苽
+0x82fe:bì # 苾
+0x82ff:wèi # 苿
+0x8300:fú # 茀
+0x8301:zhuó # 茁
+0x8302:mào # 茂
+0x8303:fàn # 范
+0x8304:qié,jiā # 茄
+0x8305:máo # 茅
+0x8306:máo # 茆
+0x8307:bá # 茇
+0x8308:zǐ,cí # 茈
+0x8309:mò # 茉
+0x830a:zī # 茊
+0x830b:zhǐ # 茋
+0x830c:chí # 茌
+0x830d:jì # 茍
+0x830e:jīng # 茎
+0x830f:lóng # 茏
+0x8311:niǎo # 茑
+0x8313:xué # 茓
+0x8314:yíng # 茔
+0x8315:qióng # 茕
+0x8316:gè # 茖
+0x8317:míng # 茗
+0x8318:lì # 茘
+0x8319:róng # 茙
+0x831a:yìn # 茚
+0x831b:gèn # 茛
+0x831c:qiàn,xī # 茜
+0x831d:chǎi,zhǐ # 茝
+0x831e:chén # 茞
+0x831f:yù # 茟
+0x8320:hāo # 茠
+0x8321:zì # 茡
+0x8322:liè # 茢
+0x8323:wú # 茣
+0x8324:jì # 茤
+0x8325:guī # 茥
+0x8326:cì # 茦
+0x8327:jiǎn # 茧
+0x8328:cí # 茨
+0x8329:hòu # 茩
+0x832a:guāng # 茪
+0x832b:máng # 茫
+0x832c:chá # 茬
+0x832d:jiāo # 茭
+0x832e:jiāo # 茮
+0x832f:fú # 茯
+0x8330:yú # 茰
+0x8331:zhū # 茱
+0x8332:zī # 茲
+0x8333:jiāng # 茳
+0x8334:huí # 茴
+0x8335:yīn # 茵
+0x8336:chá # 茶
+0x8337:fá # 茷
+0x8338:róng # 茸
+0x8339:rú # 茹
+0x833a:chōng # 茺
+0x833b:mǎng # 茻
+0x833c:tóng # 茼
+0x833d:zhòng # 茽
+0x833f:zhú # 茿
+0x8340:xún # 荀
+0x8341:huán # 荁
+0x8342:fū # 荂
+0x8343:quán # 荃
+0x8344:gāi # 荄
+0x8345:dá # 荅
+0x8346:jīng # 荆
+0x8347:xìng # 荇
+0x8348:chuǎn # 荈
+0x8349:cǎo # 草
+0x834a:jīng # 荊
+0x834b:ér # 荋
+0x834c:àn # 荌
+0x834d:qiáo # 荍
+0x834e:chí # 荎
+0x834f:rěn # 荏
+0x8350:jiàn # 荐
+0x8351:yí,tí # 荑
+0x8352:huāng # 荒
+0x8353:píng # 荓
+0x8354:lì # 荔
+0x8355:jīn # 荕
+0x8356:lǎo # 荖
+0x8357:shù # 荗
+0x8358:zhuāng # 荘
+0x8359:dá # 荙
+0x835a:jiá # 荚
+0x835b:ráo # 荛
+0x835c:bì # 荜
+0x835d:cè # 荝
+0x835e:qiáo # 荞
+0x835f:huì # 荟
+0x8360:jì,qí # 荠
+0x8361:dàng # 荡
+0x8363:róng # 荣
+0x8364:hūn,xūn # 荤
+0x8365:xíng,yīng # 荥
+0x8366:luò # 荦
+0x8367:yíng # 荧
+0x8368:qián,xún # 荨
+0x8369:jìn # 荩
+0x836a:sūn # 荪
+0x836b:yīn,yìn # 荫
+0x836c:mǎi # 荬
+0x836d:hóng # 荭
+0x836e:zhòu # 荮
+0x836f:yào # 药
+0x8370:dù # 荰
+0x8371:wěi # 荱
+0x8372:lí # 荲
+0x8373:dòu # 荳
+0x8374:fū # 荴
+0x8375:rěn # 荵
+0x8376:yín # 荶
+0x8377:hé # 荷
+0x8378:bí # 荸
+0x8379:bù # 荹
+0x837a:yǔn # 荺
+0x837b:dí # 荻
+0x837c:tú # 荼
+0x837d:suī # 荽
+0x837e:suī # 荾
+0x837f:chéng # 荿
+0x8380:chén # 莀
+0x8381:wú # 莁
+0x8382:bié # 莂
+0x8383:xī # 莃
+0x8384:gěng # 莄
+0x8385:lì # 莅
+0x8386:pú # 莆
+0x8387:zhù # 莇
+0x8388:mò # 莈
+0x8389:lì # 莉
+0x838a:zhuāng # 莊
+0x838b:zuó # 莋
+0x838c:tuō # 莌
+0x838d:qiú # 莍
+0x838e:suō,shā # 莎
+0x838f:suō # 莏
+0x8390:chén # 莐
+0x8391:péng,fēng # 莑
+0x8392:jǔ # 莒
+0x8393:méi # 莓
+0x8394:méng # 莔
+0x8395:xìng # 莕
+0x8396:jìng # 莖
+0x8397:chē # 莗
+0x8398:shēn,xīn # 莘
+0x8399:jūn # 莙
+0x839a:yán # 莚
+0x839b:tíng # 莛
+0x839c:yóu # 莜
+0x839d:cuò # 莝
+0x839e:guān,guǎn,wǎn # 莞
+0x839f:hàn # 莟
+0x83a0:yǒu # 莠
+0x83a1:cuò # 莡
+0x83a2:jiá # 莢
+0x83a3:wáng # 莣
+0x83a4:sù,yóu # 莤
+0x83a5:niǔ # 莥
+0x83a6:shāo,xiāo # 莦
+0x83a7:xiàn # 莧
+0x83a8:làng,liáng # 莨
+0x83a9:fú,piǎo # 莩
+0x83aa:é # 莪
+0x83ab:mò,mù # 莫
+0x83ac:wèn,wǎn,miǎn # 莬
+0x83ad:jié # 莭
+0x83ae:nán # 莮
+0x83af:mù # 莯
+0x83b0:kǎn # 莰
+0x83b1:lái # 莱
+0x83b2:lián # 莲
+0x83b3:shì,shí # 莳
+0x83b4:wō # 莴
+0x83b6:xiān,liǎn # 莶
+0x83b7:huò # 获
+0x83b8:yóu # 莸
+0x83b9:yíng # 莹
+0x83ba:yīng # 莺
+0x83bc:chún # 莼
+0x83bd:mǎng # 莽
+0x83be:mǎng # 莾
+0x83bf:cì # 莿
+0x83c0:wǎn,yùn,yù # 菀
+0x83c1:jīng # 菁
+0x83c2:dì # 菂
+0x83c3:qú # 菃
+0x83c4:dōng # 菄
+0x83c5:jiān # 菅
+0x83c6:zōu,chù # 菆
+0x83c7:gū # 菇
+0x83c8:lā # 菈
+0x83c9:lù # 菉
+0x83ca:jú # 菊
+0x83cb:wèi # 菋
+0x83cc:jūn,jùn # 菌
+0x83cd:niè,rěn # 菍
+0x83ce:kūn # 菎
+0x83cf:hé # 菏
+0x83d0:pú # 菐
+0x83d1:zī,zì,zāi # 菑
+0x83d2:gǎo # 菒
+0x83d3:guǒ # 菓
+0x83d4:fú # 菔
+0x83d5:lún # 菕
+0x83d6:chāng # 菖
+0x83d7:chóu # 菗
+0x83d8:sōng # 菘
+0x83d9:chuí # 菙
+0x83da:zhàn # 菚
+0x83db:mén # 菛
+0x83dc:cài # 菜
+0x83dd:bá # 菝
+0x83de:lí # 菞
+0x83df:tù,tú # 菟
+0x83e0:bō # 菠
+0x83e1:hàn # 菡
+0x83e2:bào # 菢
+0x83e3:qìn # 菣
+0x83e4:juǎn # 菤
+0x83e5:xī # 菥
+0x83e6:qín # 菦
+0x83e7:dǐ # 菧
+0x83e8:jiē,shà # 菨
+0x83e9:pú # 菩
+0x83ea:dàng # 菪
+0x83eb:jǐn # 菫
+0x83ec:qiáo,zhǎo # 菬
+0x83ed:tái,zhī,chí # 菭
+0x83ee:gēng # 菮
+0x83ef:huá,huà,huā # 華
+0x83f0:gū # 菰
+0x83f1:líng # 菱
+0x83f2:fēi,fěi # 菲
+0x83f3:qín,qīn,jīn # 菳
+0x83f4:ān # 菴
+0x83f5:wǎng # 菵
+0x83f6:běng # 菶
+0x83f7:zhǒu # 菷
+0x83f8:yān # 菸
+0x83f9:zū # 菹
+0x83fa:jiān # 菺
+0x83fb:lǐn,má # 菻
+0x83fc:tǎn # 菼
+0x83fd:shū # 菽
+0x83fe:tián,tiàn # 菾
+0x83ff:dào # 菿
+0x8400:hǔ # 萀
+0x8401:qí # 萁
+0x8402:hé # 萂
+0x8403:cuì # 萃
+0x8404:táo # 萄
+0x8405:chūn # 萅
+0x8406:bì # 萆
+0x8407:cháng # 萇
+0x8408:huán # 萈
+0x8409:fèi # 萉
+0x840a:lái # 萊
+0x840b:qī # 萋
+0x840c:méng # 萌
+0x840d:píng # 萍
+0x840e:wěi # 萎
+0x840f:dàn # 萏
+0x8410:shà # 萐
+0x8411:huán # 萑
+0x8412:yǎn # 萒
+0x8413:yí # 萓
+0x8414:tiáo # 萔
+0x8415:qí # 萕
+0x8416:wǎn # 萖
+0x8417:cè # 萗
+0x8418:nài # 萘
+0x841a:tuò # 萚
+0x841b:jiū # 萛
+0x841c:tiē # 萜
+0x841d:luó # 萝
+0x8420:pān # 萠
+0x8424:yíng # 萤
+0x8425:yíng # 营
+0x8426:yíng # 萦
+0x8427:xiāo # 萧
+0x8428:sà # 萨
+0x8429:qiū # 萩
+0x842a:kē # 萪
+0x842b:xiāng # 萫
+0x842c:wàn # 萬
+0x842d:yǔ # 萭
+0x842e:yú # 萮
+0x842f:fù # 萯
+0x8430:liàn # 萰
+0x8431:xuān # 萱
+0x8432:xuān # 萲
+0x8433:nǎn # 萳
+0x8434:cè # 萴
+0x8435:wō # 萵
+0x8436:chǔn # 萶
+0x8437:shāo # 萷
+0x8438:yú # 萸
+0x8439:biān # 萹
+0x843a:mào # 萺
+0x843b:ān # 萻
+0x843c:è # 萼
+0x843d:là,luò,lào # 落
+0x843e:yíng # 萾
+0x843f:kuò # 萿
+0x8440:kuò # 葀
+0x8441:jiāng # 葁
+0x8442:miǎn # 葂
+0x8443:zuò # 葃
+0x8444:zuò # 葄
+0x8445:zū # 葅
+0x8446:bǎo # 葆
+0x8447:róu # 葇
+0x8448:xǐ # 葈
+0x8449:yè # 葉
+0x844a:ān # 葊
+0x844b:qú # 葋
+0x844c:jiān # 葌
+0x844d:fú # 葍
+0x844e:lǜ # 葎
+0x844f:jīng # 葏
+0x8450:pén # 葐
+0x8451:fēng # 葑
+0x8452:hóng # 葒
+0x8453:hóng # 葓
+0x8454:hóu # 葔
+0x8455:xìng # 葕
+0x8456:tū # 葖
+0x8457:zhù,zhuó,zhe # 著
+0x8458:zī # 葘
+0x8459:xiāng # 葙
+0x845a:shèn,rèn # 葚
+0x845b:gé,gě # 葛
+0x845c:qiā # 葜
+0x845d:qíng # 葝
+0x845e:mǐ # 葞
+0x845f:huáng # 葟
+0x8460:shēn # 葠
+0x8461:pú # 葡
+0x8462:gài # 葢
+0x8463:dǒng # 董
+0x8464:zhòu # 葤
+0x8465:qián # 葥
+0x8466:wěi # 葦
+0x8467:bó # 葧
+0x8468:wēi # 葨
+0x8469:pā # 葩
+0x846a:jì # 葪
+0x846b:hú # 葫
+0x846c:zàng # 葬
+0x846d:jiā # 葭
+0x846e:duàn # 葮
+0x846f:yào # 葯
+0x8470:jùn # 葰
+0x8471:cōng # 葱
+0x8472:quán # 葲
+0x8473:wēi # 葳
+0x8474:zhēn # 葴
+0x8475:kuí # 葵
+0x8476:tíng # 葶
+0x8477:hūn # 葷
+0x8478:xǐ # 葸
+0x8479:shī # 葹
+0x847a:qì # 葺
+0x847b:lán # 葻
+0x847c:zōng # 葼
+0x847d:yāo # 葽
+0x847e:yuān # 葾
+0x847f:méi # 葿
+0x8480:yūn # 蒀
+0x8481:shù # 蒁
+0x8482:dì # 蒂
+0x8483:zhuàn # 蒃
+0x8484:guān # 蒄
+0x8486:xuē # 蒆
+0x8487:chǎn # 蒇
+0x8488:kǎi # 蒈
+0x8489:kuì,kuài # 蒉
+0x848b:jiǎng # 蒋
+0x848c:lóu # 蒌
+0x848d:wěi # 蒍
+0x848e:pài # 蒎
+0x8490:sōu # 蒐
+0x8491:yīn # 蒑
+0x8492:shī # 蒒
+0x8493:chún # 蒓
+0x8494:shì,shí # 蒔
+0x8495:yūn # 蒕
+0x8496:zhēn # 蒖
+0x8497:làng # 蒗
+0x8498:rú,ná # 蒘
+0x8499:mēng,méng,měng # 蒙
+0x849a:lì # 蒚
+0x849b:quē # 蒛
+0x849c:suàn # 蒜
+0x849d:yuán,huán # 蒝
+0x849e:lì # 蒞
+0x849f:jǔ # 蒟
+0x84a0:xī # 蒠
+0x84a1:bàng # 蒡
+0x84a2:chú # 蒢
+0x84a3:xú,shú # 蒣
+0x84a4:tú # 蒤
+0x84a5:liú # 蒥
+0x84a6:huò # 蒦
+0x84a7:diǎn # 蒧
+0x84a8:qiàn # 蒨
+0x84a9:zū,jù # 蒩
+0x84aa:pò # 蒪
+0x84ab:cuó # 蒫
+0x84ac:yuān # 蒬
+0x84ad:chú # 蒭
+0x84ae:yù # 蒮
+0x84af:kuǎi # 蒯
+0x84b0:pán # 蒰
+0x84b1:pú # 蒱
+0x84b2:pú # 蒲
+0x84b3:nà # 蒳
+0x84b4:shuò # 蒴
+0x84b5:xí,xì # 蒵
+0x84b6:fén # 蒶
+0x84b7:yún # 蒷
+0x84b8:zhēng # 蒸
+0x84b9:jiān # 蒹
+0x84ba:jí # 蒺
+0x84bb:ruò # 蒻
+0x84bc:cāng # 蒼
+0x84bd:ēn # 蒽
+0x84be:mí # 蒾
+0x84bf:hāo # 蒿
+0x84c0:sūn # 蓀
+0x84c1:zhēn # 蓁
+0x84c2:míng # 蓂
+0x84c3:sōu,sǒu # 蓃
+0x84c4:xù # 蓄
+0x84c5:liú # 蓅
+0x84c6:xí # 蓆
+0x84c7:gū # 蓇
+0x84c8:láng # 蓈
+0x84c9:róng # 蓉
+0x84ca:wěng # 蓊
+0x84cb:gài,gě,hé # 蓋
+0x84cc:cuò # 蓌
+0x84cd:shī # 蓍
+0x84ce:táng # 蓎
+0x84cf:luǒ # 蓏
+0x84d0:rù # 蓐
+0x84d1:suō # 蓑
+0x84d2:xuān # 蓒
+0x84d3:bèi # 蓓
+0x84d4:yǎo,zhuó # 蓔
+0x84d5:guì # 蓕
+0x84d6:bì # 蓖
+0x84d7:zǒng # 蓗
+0x84d8:gǔn # 蓘
+0x84da:tiáo # 蓚
+0x84db:cè # 蓛
+0x84dd:lán # 蓝
+0x84df:jì # 蓟
+0x84e0:lí # 蓠
+0x84e1:shēn # 蓡
+0x84e2:lǎng # 蓢
+0x84e3:yù # 蓣
+0x84e5:yíng # 蓥
+0x84e6:mò # 蓦
+0x84e7:diào,tiáo,dí # 蓧
+0x84e8:tiáo # 蓨
+0x84e9:mǎo # 蓩
+0x84ea:tōng # 蓪
+0x84eb:zhú # 蓫
+0x84ec:péng # 蓬
+0x84ed:ān # 蓭
+0x84ee:lián # 蓮
+0x84ef:cōng # 蓯
+0x84f0:xǐ # 蓰
+0x84f1:píng # 蓱
+0x84f2:qiū,xū,fū # 蓲
+0x84f3:jǐn # 蓳
+0x84f4:chún # 蓴
+0x84f5:jié # 蓵
+0x84f6:wéi # 蓶
+0x84f7:tuī # 蓷
+0x84f8:cáo # 蓸
+0x84f9:yù # 蓹
+0x84fa:yì # 蓺
+0x84fb:zí,jú # 蓻
+0x84fc:liǎo,lù # 蓼
+0x84fd:bì # 蓽
+0x84fe:lǔ # 蓾
+0x84ff:xù # 蓿
+0x8500:bù # 蔀
+0x8501:zhāng # 蔁
+0x8502:léi # 蔂
+0x8503:qiáng,jiàng # 蔃
+0x8504:màn # 蔄
+0x8505:yán # 蔅
+0x8506:líng # 蔆
+0x8507:jì # 蔇
+0x8508:biāo # 蔈
+0x8509:gǔn # 蔉
+0x850a:hàn # 蔊
+0x850b:dí # 蔋
+0x850c:sù # 蔌
+0x850d:lù # 蔍
+0x850e:shè # 蔎
+0x850f:shāng # 蔏
+0x8510:dí # 蔐
+0x8511:miè # 蔑
+0x8512:hūn # 蔒
+0x8513:màn,wàn # 蔓
+0x8514:bo # 蔔
+0x8515:dì # 蔕
+0x8516:cuó # 蔖
+0x8517:zhè # 蔗
+0x8518:shēn # 蔘
+0x8519:xuàn # 蔙
+0x851a:wèi,yù # 蔚
+0x851b:hú # 蔛
+0x851c:áo # 蔜
+0x851d:mǐ # 蔝
+0x851e:lóu # 蔞
+0x851f:cù # 蔟
+0x8520:zhōng # 蔠
+0x8521:cài # 蔡
+0x8522:pó # 蔢
+0x8523:jiǎng # 蔣
+0x8524:mì # 蔤
+0x8525:cōng # 蔥
+0x8526:niǎo # 蔦
+0x8527:huì # 蔧
+0x8528:juàn # 蔨
+0x8529:yín # 蔩
+0x852a:jiān # 蔪
+0x852b:niān # 蔫
+0x852c:shū # 蔬
+0x852d:yīn # 蔭
+0x852e:guó # 蔮
+0x852f:chén # 蔯
+0x8530:hù # 蔰
+0x8531:shā # 蔱
+0x8532:kòu # 蔲
+0x8533:qiàn # 蔳
+0x8534:má # 蔴
+0x8535:zàng # 蔵
+0x8537:qiáng # 蔷
+0x8538:dōu # 蔸
+0x8539:liǎn # 蔹
+0x853a:lìn # 蔺
+0x853b:kòu # 蔻
+0x853c:ǎi # 蔼
+0x853d:bì # 蔽
+0x853e:lí # 蔾
+0x853f:wěi # 蔿
+0x8540:jí # 蕀
+0x8541:qián,xún # 蕁
+0x8542:shèng # 蕂
+0x8543:fān,fán,bō # 蕃
+0x8544:méng # 蕄
+0x8545:ǒu # 蕅
+0x8546:chǎn # 蕆
+0x8547:diǎn # 蕇
+0x8548:xùn # 蕈
+0x8549:jiāo,qiáo # 蕉
+0x854a:ruǐ # 蕊
+0x854b:ruǐ # 蕋
+0x854c:lěi # 蕌
+0x854d:yú # 蕍
+0x854e:qiáo # 蕎
+0x854f:zhū # 蕏
+0x8550:huá # 蕐
+0x8551:jiān # 蕑
+0x8552:mǎi # 蕒
+0x8553:yún # 蕓
+0x8554:bāo # 蕔
+0x8555:yóu # 蕕
+0x8556:qú # 蕖
+0x8557:lù # 蕗
+0x8558:ráo # 蕘
+0x8559:huì # 蕙
+0x855a:è # 蕚
+0x855b:tí # 蕛
+0x855c:fěi # 蕜
+0x855d:jué # 蕝
+0x855e:zuì # 蕞
+0x855f:fà # 蕟
+0x8560:rú # 蕠
+0x8561:fén # 蕡
+0x8562:kuì # 蕢
+0x8563:shùn # 蕣
+0x8564:ruí # 蕤
+0x8565:yǎ # 蕥
+0x8566:xū # 蕦
+0x8567:fù # 蕧
+0x8568:jué # 蕨
+0x8569:dàng # 蕩
+0x856a:wú # 蕪
+0x856b:dǒng # 蕫
+0x856c:sī # 蕬
+0x856d:xiāo # 蕭
+0x856e:xì # 蕮
+0x856f:sà # 蕯
+0x8570:yùn,wēn # 蕰
+0x8572:qí # 蕲
+0x8573:jiān # 蕳
+0x8574:yùn # 蕴
+0x8575:sūn # 蕵
+0x8576:líng # 蕶
+0x8577:yù # 蕷
+0x8578:xiá # 蕸
+0x8579:wèng # 蕹
+0x857a:jí # 蕺
+0x857b:hòng # 蕻
+0x857c:sì # 蕼
+0x857d:nóng # 蕽
+0x857e:lěi # 蕾
+0x857f:xuān # 蕿
+0x8580:yùn # 薀
+0x8581:yù # 薁
+0x8582:xí,xiào # 薂
+0x8583:hào # 薃
+0x8584:báo,bó,bò # 薄
+0x8585:hāo # 薅
+0x8586:ài # 薆
+0x8587:wēi # 薇
+0x8588:huì # 薈
+0x8589:huì # 薉
+0x858a:jì # 薊
+0x858b:cí,zī # 薋
+0x858c:xiāng # 薌
+0x858d:wàn,luàn # 薍
+0x858e:miè # 薎
+0x858f:yì # 薏
+0x8590:léng # 薐
+0x8591:jiāng # 薑
+0x8592:càn # 薒
+0x8593:shēn # 薓
+0x8594:qiáng,sè # 薔
+0x8595:lián # 薕
+0x8596:kē # 薖
+0x8597:yuán # 薗
+0x8598:dá # 薘
+0x8599:tì # 薙
+0x859a:tāng # 薚
+0x859b:xuē # 薛
+0x859c:bì # 薜
+0x859d:zhān # 薝
+0x859e:sūn # 薞
+0x859f:xiān,liǎn # 薟
+0x85a0:fán # 薠
+0x85a1:dǐng # 薡
+0x85a2:xiè # 薢
+0x85a3:gǔ # 薣
+0x85a4:xiè # 薤
+0x85a5:shǔ # 薥
+0x85a6:jiàn # 薦
+0x85a7:hāo,kǎo # 薧
+0x85a8:hōng # 薨
+0x85a9:sà # 薩
+0x85aa:xīn # 薪
+0x85ab:xūn # 薫
+0x85ac:yào # 薬
+0x85ae:sǒu # 薮
+0x85af:shǔ # 薯
+0x85b0:xūn # 薰
+0x85b1:duì # 薱
+0x85b2:pín # 薲
+0x85b3:yuǎn,wěi # 薳
+0x85b4:níng # 薴
+0x85b5:chóu,zhòu # 薵
+0x85b6:mái,wō # 薶
+0x85b7:rú # 薷
+0x85b8:piáo # 薸
+0x85b9:tái # 薹
+0x85ba:jì,qí # 薺
+0x85bb:zǎo # 薻
+0x85bc:chén # 薼
+0x85bd:zhēn # 薽
+0x85be:ěr # 薾
+0x85bf:nǐ # 薿
+0x85c0:yíng # 藀
+0x85c1:gǎo # 藁
+0x85c2:cóng # 藂
+0x85c3:xiāo,hào # 藃
+0x85c4:qí # 藄
+0x85c5:fá # 藅
+0x85c6:jiǎn # 藆
+0x85c7:xù,yù,xū # 藇
+0x85c8:kuí # 藈
+0x85c9:jiè,jí # 藉
+0x85ca:biǎn # 藊
+0x85cb:diào,zhuó # 藋
+0x85cc:mí # 藌
+0x85cd:lán # 藍
+0x85ce:jìn # 藎
+0x85cf:cáng,zàng # 藏
+0x85d0:miǎo # 藐
+0x85d1:qióng # 藑
+0x85d2:qì # 藒
+0x85d3:xiǎn # 藓
+0x85d5:ǒu # 藕
+0x85d6:xián # 藖
+0x85d7:sù # 藗
+0x85d8:lǘ # 藘
+0x85d9:yì # 藙
+0x85da:xù # 藚
+0x85db:xiě # 藛
+0x85dc:lí # 藜
+0x85dd:yì # 藝
+0x85de:lǎ # 藞
+0x85df:lěi # 藟
+0x85e0:jiào # 藠
+0x85e1:dí # 藡
+0x85e2:zhǐ # 藢
+0x85e3:bēi # 藣
+0x85e4:téng # 藤
+0x85e5:yào # 藥
+0x85e6:mò # 藦
+0x85e7:huàn # 藧
+0x85e8:biāo,pāo # 藨
+0x85e9:fān # 藩
+0x85ea:sǒu # 藪
+0x85eb:tán # 藫
+0x85ec:tuī # 藬
+0x85ed:qióng # 藭
+0x85ee:qiáo # 藮
+0x85ef:wèi # 藯
+0x85f0:liú,liǔ # 藰
+0x85f1:huì,huí # 藱
+0x85f3:gǎo # 藳
+0x85f4:yùn # 藴
+0x85f6:lì # 藶
+0x85f7:shǔ # 藷
+0x85f8:zhū,chú # 藸
+0x85f9:ǎi # 藹
+0x85fa:lìn # 藺
+0x85fb:zǎo # 藻
+0x85fc:xuān # 藼
+0x85fd:qìn # 藽
+0x85fe:lài # 藾
+0x85ff:huò # 藿
+0x8600:tuò # 蘀
+0x8601:wù # 蘁
+0x8602:ruǐ # 蘂
+0x8603:ruǐ # 蘃
+0x8604:qí # 蘄
+0x8605:héng # 蘅
+0x8606:lú # 蘆
+0x8607:sū # 蘇
+0x8608:tuí # 蘈
+0x8609:máng # 蘉
+0x860a:yùn # 蘊
+0x860b:pín,píng # 蘋
+0x860c:yù # 蘌
+0x860d:xūn # 蘍
+0x860e:jì # 蘎
+0x860f:jiōng # 蘏
+0x8610:xuān # 蘐
+0x8611:mó # 蘑
+0x8613:sū # 蘓
+0x8614:jiōng # 蘔
+0x8616:niè # 蘖
+0x8617:bò # 蘗
+0x8618:ráng # 蘘
+0x8619:yì # 蘙
+0x861a:xiǎn # 蘚
+0x861b:yú # 蘛
+0x861c:jú # 蘜
+0x861d:liǎn # 蘝
+0x861e:liǎn # 蘞
+0x861f:yǐn # 蘟
+0x8620:qiáng # 蘠
+0x8621:yīng # 蘡
+0x8622:lóng # 蘢
+0x8623:tǒu # 蘣
+0x8624:huā # 蘤
+0x8625:yuè # 蘥
+0x8626:lìng # 蘦
+0x8627:qú # 蘧
+0x8628:yáo # 蘨
+0x8629:fán # 蘩
+0x862a:mí # 蘪
+0x862b:lán # 蘫
+0x862c:guī # 蘬
+0x862d:lán # 蘭
+0x862e:jì # 蘮
+0x862f:dàng # 蘯
+0x8631:lèi # 蘱
+0x8632:léi # 蘲
+0x8633:huī # 蘳
+0x8634:fēng # 蘴
+0x8635:zhī # 蘵
+0x8636:wèi # 蘶
+0x8637:kuí # 蘷
+0x8638:zhàn # 蘸
+0x8639:huái # 蘹
+0x863a:lí # 蘺
+0x863b:jì # 蘻
+0x863c:mí # 蘼
+0x863d:lěi # 蘽
+0x863e:huài # 蘾
+0x863f:luó # 蘿
+0x8640:jī # 虀
+0x8641:kuí # 虁
+0x8642:lù # 虂
+0x8643:jiān # 虃
+0x8646:léi # 虆
+0x8647:quǎn # 虇
+0x8648:xiāo # 虈
+0x8649:yì # 虉
+0x864a:luán # 虊
+0x864b:mén # 虋
+0x864c:biē # 虌
+0x864d:hū # 虍
+0x864e:hǔ # 虎
+0x864f:lǔ # 虏
+0x8650:nüè # 虐
+0x8651:lǜ # 虑
+0x8652:sī # 虒
+0x8653:xiāo # 虓
+0x8654:qián # 虔
+0x8655:chǔ # 處
+0x8656:hū # 虖
+0x8657:xū # 虗
+0x8658:cuó # 虘
+0x8659:fú # 虙
+0x865a:xū # 虚
+0x865b:xū # 虛
+0x865c:lǔ # 虜
+0x865d:hǔ # 虝
+0x865e:yú # 虞
+0x865f:hào,háo # 號
+0x8660:jiāo # 虠
+0x8661:jù # 虡
+0x8662:guó # 虢
+0x8663:bào # 虣
+0x8664:yán # 虤
+0x8665:zhàn # 虥
+0x8666:zhàn # 虦
+0x8667:kuī # 虧
+0x8668:bīn # 虨
+0x8669:xì # 虩
+0x866a:shù # 虪
+0x866b:chóng # 虫
+0x866c:qiú # 虬
+0x866d:diāo # 虭
+0x866e:jǐ # 虮
+0x866f:qiú # 虯
+0x8670:dīng # 虰
+0x8671:shī # 虱
+0x8673:jué # 虳
+0x8674:zhé # 虴
+0x8675:shé # 虵
+0x8676:yú # 虶
+0x8677:hán # 虷
+0x8678:zǐ # 虸
+0x8679:hóng # 虹
+0x867a:huǐ,huī # 虺
+0x867b:méng # 虻
+0x867c:gè # 虼
+0x867d:suī # 虽
+0x867e:xiā,hā # 虾
+0x867f:chài # 虿
+0x8680:shí # 蚀
+0x8681:yǐ # 蚁
+0x8682:mǎ,mā,mà # 蚂
+0x8683:xiǎng # 蚃
+0x8684:fāng,bàng # 蚄
+0x8685:è # 蚅
+0x8686:bā # 蚆
+0x8687:chǐ # 蚇
+0x8688:qiān # 蚈
+0x8689:wén # 蚉
+0x868a:wén # 蚊
+0x868b:ruì # 蚋
+0x868c:bàng,bèng # 蚌
+0x868d:pí # 蚍
+0x868e:yuè # 蚎
+0x868f:yuè # 蚏
+0x8690:jūn # 蚐
+0x8691:qí # 蚑
+0x8692:tóng # 蚒
+0x8693:yǐn # 蚓
+0x8694:qí,zhǐ # 蚔
+0x8695:cán # 蚕
+0x8696:yuán,wán # 蚖
+0x8697:jué,quē # 蚗
+0x8698:huí # 蚘
+0x8699:qín,qián # 蚙
+0x869a:qí # 蚚
+0x869b:zhòng # 蚛
+0x869c:yá # 蚜
+0x869d:háo # 蚝
+0x869e:mù # 蚞
+0x869f:wáng # 蚟
+0x86a0:fén # 蚠
+0x86a1:fén # 蚡
+0x86a2:háng # 蚢
+0x86a3:gōng,zhōng # 蚣
+0x86a4:zǎo # 蚤
+0x86a5:fù,fǔ # 蚥
+0x86a6:rán # 蚦
+0x86a7:jiè # 蚧
+0x86a8:fú # 蚨
+0x86a9:chī # 蚩
+0x86aa:dǒu # 蚪
+0x86ab:bào # 蚫
+0x86ac:xiǎn # 蚬
+0x86ad:ní # 蚭
+0x86ae:dài,dé # 蚮
+0x86af:qiū # 蚯
+0x86b0:yóu # 蚰
+0x86b1:zhà # 蚱
+0x86b2:píng # 蚲
+0x86b3:chí # 蚳
+0x86b4:yòu # 蚴
+0x86b5:kē # 蚵
+0x86b6:hān # 蚶
+0x86b7:jù # 蚷
+0x86b8:lì # 蚸
+0x86b9:fù # 蚹
+0x86ba:rán # 蚺
+0x86bb:zhá # 蚻
+0x86bc:gǒu,qú,xù # 蚼
+0x86bd:pí # 蚽
+0x86be:pí,bǒ # 蚾
+0x86bf:xián # 蚿
+0x86c0:zhù # 蛀
+0x86c1:diāo # 蛁
+0x86c2:bié # 蛂
+0x86c3:bīng # 蛃
+0x86c4:gū # 蛄
+0x86c5:zhān # 蛅
+0x86c6:qū # 蛆
+0x86c7:shé,yí # 蛇
+0x86c8:tiě # 蛈
+0x86c9:líng # 蛉
+0x86ca:gǔ # 蛊
+0x86cb:dàn # 蛋
+0x86cc:tún # 蛌
+0x86cd:yíng # 蛍
+0x86ce:lì # 蛎
+0x86cf:chēng # 蛏
+0x86d0:qū # 蛐
+0x86d1:móu # 蛑
+0x86d2:gé,luò # 蛒
+0x86d3:cì # 蛓
+0x86d4:huí # 蛔
+0x86d5:huí # 蛕
+0x86d6:máng,bàng # 蛖
+0x86d7:fù # 蛗
+0x86d8:yáng # 蛘
+0x86d9:wā # 蛙
+0x86da:liè # 蛚
+0x86db:zhū # 蛛
+0x86dc:yī # 蛜
+0x86dd:xián # 蛝
+0x86de:kuò # 蛞
+0x86df:jiāo # 蛟
+0x86e0:lì # 蛠
+0x86e1:yì,xǔ # 蛡
+0x86e2:píng # 蛢
+0x86e3:jié # 蛣
+0x86e4:gé,há # 蛤
+0x86e5:shé # 蛥
+0x86e6:yí # 蛦
+0x86e7:wǎng # 蛧
+0x86e8:mò # 蛨
+0x86e9:qióng # 蛩
+0x86ea:qiè,ní # 蛪
+0x86eb:guǐ # 蛫
+0x86ec:qióng # 蛬
+0x86ed:zhì # 蛭
+0x86ee:mán # 蛮
+0x86f0:zhé # 蛰
+0x86f1:jiá # 蛱
+0x86f2:náo # 蛲
+0x86f3:sī # 蛳
+0x86f4:qí # 蛴
+0x86f5:xíng # 蛵
+0x86f6:jiè # 蛶
+0x86f7:qiú # 蛷
+0x86f8:xiāo,shāo # 蛸
+0x86f9:yǒng # 蛹
+0x86fa:jiá # 蛺
+0x86fb:tuì # 蛻
+0x86fc:chē # 蛼
+0x86fd:bèi # 蛽
+0x86fe:é,yǐ # 蛾
+0x86ff:hàn # 蛿
+0x8700:shǔ # 蜀
+0x8701:xuán # 蜁
+0x8702:fēng # 蜂
+0x8703:shèn # 蜃
+0x8704:shèn # 蜄
+0x8705:fǔ # 蜅
+0x8706:xiǎn # 蜆
+0x8707:zhé # 蜇
+0x8708:wú # 蜈
+0x8709:fú # 蜉
+0x870a:lì # 蜊
+0x870b:láng # 蜋
+0x870c:bì # 蜌
+0x870d:chú # 蜍
+0x870e:yuān # 蜎
+0x870f:yǒu # 蜏
+0x8710:jié # 蜐
+0x8711:dàn # 蜑
+0x8712:yán # 蜒
+0x8713:tíng # 蜓
+0x8714:diàn # 蜔
+0x8715:tuì # 蜕
+0x8716:huí # 蜖
+0x8717:wō # 蜗
+0x8718:zhī # 蜘
+0x8719:zhōng # 蜙
+0x871a:fēi # 蜚
+0x871b:jū # 蜛
+0x871c:mì # 蜜
+0x871d:qí # 蜝
+0x871e:qí # 蜞
+0x871f:yù # 蜟
+0x8720:jùn # 蜠
+0x8721:là,zhà # 蜡
+0x8722:měng # 蜢
+0x8723:qiāng # 蜣
+0x8724:sī # 蜤
+0x8725:xī # 蜥
+0x8726:lún # 蜦
+0x8727:lì # 蜧
+0x8728:dié # 蜨
+0x8729:tiáo # 蜩
+0x872a:táo # 蜪
+0x872b:kūn # 蜫
+0x872c:hán # 蜬
+0x872d:hàn # 蜭
+0x872e:yù # 蜮
+0x872f:bàng # 蜯
+0x8730:féi # 蜰
+0x8731:pí # 蜱
+0x8732:wēi # 蜲
+0x8733:dūn # 蜳
+0x8734:yì # 蜴
+0x8735:yuān # 蜵
+0x8736:suò # 蜶
+0x8737:quán # 蜷
+0x8738:qiǎn # 蜸
+0x8739:ruì # 蜹
+0x873a:ní # 蜺
+0x873b:qīng # 蜻
+0x873c:wèi # 蜼
+0x873d:liǎng # 蜽
+0x873e:guǒ # 蜾
+0x873f:wān # 蜿
+0x8740:dōng # 蝀
+0x8741:è # 蝁
+0x8742:bǎn # 蝂
+0x8743:dì # 蝃
+0x8744:wǎng # 蝄
+0x8745:cán # 蝅
+0x8746:yǎng # 蝆
+0x8747:yíng # 蝇
+0x8748:guō # 蝈
+0x8749:chán # 蝉
+0x874b:là # 蝋
+0x874c:kē # 蝌
+0x874d:jí # 蝍
+0x874e:xiē # 蝎
+0x874f:tíng # 蝏
+0x8750:mào # 蝐
+0x8751:xū # 蝑
+0x8752:mián # 蝒
+0x8753:yú # 蝓
+0x8754:jiē # 蝔
+0x8755:shí # 蝕
+0x8756:xuān # 蝖
+0x8757:huáng # 蝗
+0x8758:yǎn # 蝘
+0x8759:biān # 蝙
+0x875a:róu # 蝚
+0x875b:wēi # 蝛
+0x875c:fù # 蝜
+0x875d:yuán # 蝝
+0x875e:mèi # 蝞
+0x875f:wèi # 蝟
+0x8760:fú # 蝠
+0x8761:rú,ruăn # 蝡
+0x8762:xié # 蝢
+0x8763:yóu # 蝣
+0x8764:qiú,yóu # 蝤
+0x8765:máo # 蝥
+0x8766:xiā,hā # 蝦
+0x8767:yīng # 蝧
+0x8768:shī # 蝨
+0x8769:chóng # 蝩
+0x876a:tāng # 蝪
+0x876b:zhū # 蝫
+0x876c:zōng # 蝬
+0x876d:dì # 蝭
+0x876e:fù # 蝮
+0x876f:yuán # 蝯
+0x8770:kuí # 蝰
+0x8771:méng # 蝱
+0x8772:là # 蝲
+0x8773:dài # 蝳
+0x8774:hú # 蝴
+0x8775:qiū # 蝵
+0x8776:dié # 蝶
+0x8777:lì # 蝷
+0x8778:wō # 蝸
+0x8779:yūn # 蝹
+0x877a:qǔ # 蝺
+0x877b:nǎn # 蝻
+0x877c:lóu # 蝼
+0x877d:chūn # 蝽
+0x877e:róng # 蝾
+0x877f:yíng # 蝿
+0x8780:jiāng # 螀
+0x8782:láng # 螂
+0x8783:páng # 螃
+0x8784:sī # 螄
+0x8785:xī # 螅
+0x8786:cì # 螆
+0x8787:xī,qī # 螇
+0x8788:yuán # 螈
+0x8789:wēng # 螉
+0x878a:lián # 螊
+0x878b:sōu # 螋
+0x878c:bān # 螌
+0x878d:róng # 融
+0x878e:róng # 螎
+0x878f:jí # 螏
+0x8790:wū # 螐
+0x8791:xiù # 螑
+0x8792:hàn # 螒
+0x8793:qín # 螓
+0x8794:yí # 螔
+0x8795:bī,pí # 螕
+0x8796:huá # 螖
+0x8797:táng # 螗
+0x8798:yǐ # 螘
+0x8799:dù # 螙
+0x879a:nài,něng # 螚
+0x879b:hé,xiá # 螛
+0x879c:hú # 螜
+0x879d:guì,huǐ # 螝
+0x879e:mǎ,mā,mà # 螞
+0x879f:míng # 螟
+0x87a0:yì # 螠
+0x87a1:wén # 螡
+0x87a2:yíng # 螢
+0x87a3:téng # 螣
+0x87a4:zhōng # 螤
+0x87a5:cāng # 螥
+0x87a8:mǎn # 螨
+0x87aa:shāng # 螪
+0x87ab:shì,zhē # 螫
+0x87ac:cáo # 螬
+0x87ad:chī # 螭
+0x87ae:dì # 螮
+0x87af:áo # 螯
+0x87b0:lù # 螰
+0x87b1:wèi # 螱
+0x87b2:dié,zhì # 螲
+0x87b3:táng # 螳
+0x87b4:chén # 螴
+0x87b5:piāo # 螵
+0x87b6:qú,jù # 螶
+0x87b7:pí # 螷
+0x87b8:yú # 螸
+0x87b9:chán,jiàn # 螹
+0x87ba:luó # 螺
+0x87bb:lóu # 螻
+0x87bc:qǐn # 螼
+0x87bd:zhōng # 螽
+0x87be:yǐn # 螾
+0x87bf:jiāng # 螿
+0x87c0:shuài # 蟀
+0x87c1:wén # 蟁
+0x87c2:xiāo # 蟂
+0x87c3:wàn # 蟃
+0x87c4:zhé # 蟄
+0x87c5:zhè # 蟅
+0x87c6:má,mò # 蟆
+0x87c7:má # 蟇
+0x87c8:guō # 蟈
+0x87c9:liú # 蟉
+0x87ca:máo # 蟊
+0x87cb:xī # 蟋
+0x87cc:cōng # 蟌
+0x87cd:lí # 蟍
+0x87ce:mǎn # 蟎
+0x87cf:xiāo # 蟏
+0x87d1:zhāng # 蟑
+0x87d2:mǎng,měng # 蟒
+0x87d3:xiàng # 蟓
+0x87d4:mò # 蟔
+0x87d5:zuī # 蟕
+0x87d6:sī # 蟖
+0x87d7:qiū # 蟗
+0x87d8:tè # 蟘
+0x87d9:zhí # 蟙
+0x87da:péng # 蟚
+0x87db:péng # 蟛
+0x87dc:jiǎo # 蟜
+0x87dd:qú # 蟝
+0x87de:biē,bié # 蟞
+0x87df:liáo # 蟟
+0x87e0:pán # 蟠
+0x87e1:guǐ # 蟡
+0x87e2:xǐ # 蟢
+0x87e3:jǐ # 蟣
+0x87e4:zhuān # 蟤
+0x87e5:huáng # 蟥
+0x87e6:fèi,bēn # 蟦
+0x87e7:láo,liáo # 蟧
+0x87e8:jué # 蟨
+0x87e9:jué # 蟩
+0x87ea:huì # 蟪
+0x87eb:yín,xún # 蟫
+0x87ec:chán # 蟬
+0x87ed:jiāo # 蟭
+0x87ee:shàn # 蟮
+0x87ef:náo # 蟯
+0x87f0:xiāo # 蟰
+0x87f1:wú # 蟱
+0x87f2:chóng # 蟲
+0x87f3:xún # 蟳
+0x87f4:sī # 蟴
+0x87f6:chēng # 蟶
+0x87f7:dāng # 蟷
+0x87f8:lí # 蟸
+0x87f9:xiè # 蟹
+0x87fa:shàn # 蟺
+0x87fb:yǐ # 蟻
+0x87fc:jǐng # 蟼
+0x87fd:dá # 蟽
+0x87fe:chán # 蟾
+0x87ff:qì # 蟿
+0x8800:cī # 蠀
+0x8801:xiǎng # 蠁
+0x8802:shè # 蠂
+0x8803:luǒ # 蠃
+0x8804:qín # 蠄
+0x8805:yíng # 蠅
+0x8806:chài # 蠆
+0x8807:lì # 蠇
+0x8808:zéi # 蠈
+0x8809:xuān # 蠉
+0x880a:lián # 蠊
+0x880b:zhú # 蠋
+0x880c:zé # 蠌
+0x880d:xiē # 蠍
+0x880e:mǎng # 蠎
+0x880f:xiè # 蠏
+0x8810:qí # 蠐
+0x8811:róng # 蠑
+0x8812:jiǎn # 蠒
+0x8813:měng # 蠓
+0x8814:háo # 蠔
+0x8815:rú # 蠕
+0x8816:huò # 蠖
+0x8817:zhuó # 蠗
+0x8818:jié # 蠘
+0x8819:pín # 蠙
+0x881a:hē # 蠚
+0x881b:miè # 蠛
+0x881c:fán # 蠜
+0x881d:lěi # 蠝
+0x881e:jié # 蠞
+0x881f:là # 蠟
+0x8820:mǐn # 蠠
+0x8821:lǐ # 蠡
+0x8822:chǔn # 蠢
+0x8823:lì # 蠣
+0x8824:qiū # 蠤
+0x8825:niè # 蠥
+0x8826:lú # 蠦
+0x8827:dù # 蠧
+0x8828:xiāo # 蠨
+0x8829:zhū # 蠩
+0x882a:lóng # 蠪
+0x882b:lí # 蠫
+0x882c:lóng # 蠬
+0x882d:fēng # 蠭
+0x882e:yē # 蠮
+0x882f:pí # 蠯
+0x8830:náng # 蠰
+0x8831:gǔ # 蠱
+0x8832:juān # 蠲
+0x8833:yīng # 蠳
+0x8835:xī # 蠵
+0x8836:cán # 蠶
+0x8837:qú # 蠷
+0x8838:quán # 蠸
+0x8839:dù # 蠹
+0x883a:cán # 蠺
+0x883b:mán # 蠻
+0x883c:qú # 蠼
+0x883d:jié # 蠽
+0x883e:zhú # 蠾
+0x883f:zhuó # 蠿
+0x8840:xiě,xuè # 血
+0x8841:huāng # 衁
+0x8842:nǜ # 衂
+0x8843:pēi # 衃
+0x8844:nǜ # 衄
+0x8845:xìn # 衅
+0x8846:zhòng # 衆
+0x8847:mài # 衇
+0x8848:ěr # 衈
+0x8849:kè # 衉
+0x884a:miè # 衊
+0x884b:xì # 衋
+0x884c:háng,xíng,héng,hàng # 行
+0x884d:yǎn # 衍
+0x884e:kàn # 衎
+0x884f:yuàn # 衏
+0x8851:líng # 衑
+0x8852:xuàn # 衒
+0x8853:shù # 術
+0x8854:xián # 衔
+0x8855:tòng # 衕
+0x8856:xiàng # 衖
+0x8857:jiē # 街
+0x8858:xián # 衘
+0x8859:yá # 衙
+0x885a:hú # 衚
+0x885b:wèi # 衛
+0x885c:dào # 衜
+0x885d:chōng # 衝
+0x885e:wèi # 衞
+0x885f:dào # 衟
+0x8860:zhūn # 衠
+0x8861:héng # 衡
+0x8862:qú # 衢
+0x8863:yī # 衣
+0x8865:bǔ # 补
+0x8866:gǎn # 衦
+0x8867:yú # 衧
+0x8868:biǎo # 表
+0x8869:chà # 衩
+0x886a:yì # 衪
+0x886b:shān # 衫
+0x886c:chèn # 衬
+0x886d:fū # 衭
+0x886e:gǔn # 衮
+0x886f:fēn # 衯
+0x8870:shuāi,cuī # 衰
+0x8871:jié # 衱
+0x8872:nà # 衲
+0x8873:zhōng # 衳
+0x8874:dǎn # 衴
+0x8875:rì # 衵
+0x8876:zhòng # 衶
+0x8877:zhōng # 衷
+0x8878:jiè # 衸
+0x8879:zhǐ # 衹
+0x887a:xié # 衺
+0x887b:rán # 衻
+0x887c:zhī # 衼
+0x887d:rèn # 衽
+0x887e:qīn # 衾
+0x887f:jīn # 衿
+0x8880:jūn # 袀
+0x8881:yuán # 袁
+0x8882:mèi # 袂
+0x8883:chài # 袃
+0x8884:ǎo # 袄
+0x8885:niǎo # 袅
+0x8886:huī # 袆
+0x8887:rán # 袇
+0x8888:jiā # 袈
+0x8889:tuó,tuō # 袉
+0x888a:lǐng,líng # 袊
+0x888b:dài # 袋
+0x888c:bào,páo,pào # 袌
+0x888d:páo # 袍
+0x888e:yào # 袎
+0x888f:zuò # 袏
+0x8890:bì # 袐
+0x8891:shào # 袑
+0x8892:tǎn # 袒
+0x8893:jù,jiē # 袓
+0x8894:hè,kè # 袔
+0x8895:xué # 袕
+0x8896:xiù # 袖
+0x8897:zhěn # 袗
+0x8898:yí,yì # 袘
+0x8899:pà # 袙
+0x889a:fú # 袚
+0x889b:dī # 袛
+0x889c:wà # 袜
+0x889d:fù # 袝
+0x889e:gǔn # 袞
+0x889f:zhì # 袟
+0x88a0:zhì # 袠
+0x88a1:rán # 袡
+0x88a2:pàn # 袢
+0x88a3:yì # 袣
+0x88a4:mào # 袤
+0x88a6:nà,jué # 袦
+0x88a7:gōu # 袧
+0x88a8:xuàn # 袨
+0x88a9:zhé # 袩
+0x88aa:qū # 袪
+0x88ab:bèi,pī # 被
+0x88ac:yù # 袬
+0x88ad:xí # 袭
+0x88af:bó # 袯
+0x88b1:fú # 袱
+0x88b2:chǐ,nuǒ # 袲
+0x88b3:chǐ,qǐ,duǒ,nuǒ # 袳
+0x88b4:kù # 袴
+0x88b5:rèn # 袵
+0x88b6:péng # 袶
+0x88b7:jiá,jié,qiā # 袷
+0x88b8:jiàn,zùn # 袸
+0x88b9:bó,mò # 袹
+0x88ba:jié # 袺
+0x88bb:ér # 袻
+0x88bc:gē # 袼
+0x88bd:rú # 袽
+0x88be:zhū # 袾
+0x88bf:guī,guà # 袿
+0x88c0:yīn # 裀
+0x88c1:cái # 裁
+0x88c2:liè,liě # 裂
+0x88c5:zhuāng # 装
+0x88c6:dāng # 裆
+0x88c8:kūn # 裈
+0x88c9:kèn # 裉
+0x88ca:niǎo # 裊
+0x88cb:shù # 裋
+0x88cc:jiá # 裌
+0x88cd:kǔn # 裍
+0x88ce:chéng,chěng # 裎
+0x88cf:lǐ # 裏
+0x88d0:juān # 裐
+0x88d1:shēn # 裑
+0x88d2:póu # 裒
+0x88d3:gé,jiē # 裓
+0x88d4:yì # 裔
+0x88d5:yù # 裕
+0x88d6:zhěn # 裖
+0x88d7:liú # 裗
+0x88d8:qiú # 裘
+0x88d9:qún # 裙
+0x88da:jì # 裚
+0x88db:yì # 裛
+0x88dc:bǔ # 補
+0x88dd:zhuāng # 裝
+0x88de:shuì # 裞
+0x88df:shā # 裟
+0x88e0:qún # 裠
+0x88e1:lǐ # 裡
+0x88e2:lián # 裢
+0x88e3:liǎn # 裣
+0x88e4:kù # 裤
+0x88e5:jiǎn # 裥
+0x88e6:bāo # 裦
+0x88e7:chān # 裧
+0x88e8:bì,pí # 裨
+0x88e9:kūn # 裩
+0x88ea:táo # 裪
+0x88eb:yuàn # 裫
+0x88ec:líng # 裬
+0x88ed:chǐ # 裭
+0x88ee:chāng # 裮
+0x88ef:chóu,dāo # 裯
+0x88f0:duō # 裰
+0x88f1:biǎo # 裱
+0x88f2:liǎng # 裲
+0x88f3:cháng,shang # 裳
+0x88f4:péi # 裴
+0x88f5:péi # 裵
+0x88f6:fēi # 裶
+0x88f7:yuān,gǔn # 裷
+0x88f8:luǒ # 裸
+0x88f9:guǒ # 裹
+0x88fa:yǎn,ān # 裺
+0x88fb:dú # 裻
+0x88fc:xī,tì # 裼
+0x88fd:zhì # 製
+0x88fe:jū # 裾
+0x88ff:yǐ # 裿
+0x8900:qí # 褀
+0x8901:guǒ # 褁
+0x8902:guà # 褂
+0x8903:kèn # 褃
+0x8905:tì # 褅
+0x8906:tí # 褆
+0x8907:fù # 複
+0x8908:chóng # 褈
+0x8909:xiè # 褉
+0x890a:biǎn # 褊
+0x890b:dié # 褋
+0x890c:kūn # 褌
+0x890d:duān # 褍
+0x890e:xiù,yòu # 褎
+0x890f:xiù # 褏
+0x8910:hè # 褐
+0x8911:yuàn # 褑
+0x8912:bāo # 褒
+0x8913:bǎo # 褓
+0x8914:fù,fú # 褔
+0x8915:yú # 褕
+0x8916:tuàn # 褖
+0x8917:yǎn # 褗
+0x8918:huī # 褘
+0x8919:bèi # 褙
+0x891a:zhǔ,chǔ # 褚
+0x891b:lǚ # 褛
+0x891e:yùn # 褞
+0x891f:tā # 褟
+0x8920:gōu # 褠
+0x8921:dā # 褡
+0x8922:huái # 褢
+0x8923:róng # 褣
+0x8924:yuán # 褤
+0x8925:rù # 褥
+0x8926:nài # 褦
+0x8927:jiǒng # 褧
+0x8928:suǒ # 褨
+0x8929:bān # 褩
+0x892a:tuì,tùn # 褪
+0x892b:chǐ # 褫
+0x892c:sǎng # 褬
+0x892d:niǎo # 褭
+0x892e:yīng # 褮
+0x892f:jiè # 褯
+0x8930:qiān # 褰
+0x8931:huái # 褱
+0x8932:kù # 褲
+0x8933:lián # 褳
+0x8934:lán # 褴
+0x8935:lí # 褵
+0x8936:zhě # 褶
+0x8937:shī # 褷
+0x8938:lǚ # 褸
+0x8939:yì # 褹
+0x893a:diē # 褺
+0x893b:xiè # 褻
+0x893c:xiān # 褼
+0x893d:wèi # 褽
+0x893e:biǎo # 褾
+0x893f:cáo # 褿
+0x8940:jì # 襀
+0x8941:qiǎng # 襁
+0x8942:sēn # 襂
+0x8943:bāo # 襃
+0x8944:xiāng # 襄
+0x8946:fú # 襆
+0x8947:jiǎn # 襇
+0x8948:zhuàn # 襈
+0x8949:jiǎn # 襉
+0x894a:cuì # 襊
+0x894b:jí # 襋
+0x894c:dān # 襌
+0x894d:zá # 襍
+0x894e:fán # 襎
+0x894f:bó # 襏
+0x8950:xiàng # 襐
+0x8951:xín # 襑
+0x8952:bié # 襒
+0x8953:ráo # 襓
+0x8954:mǎn # 襔
+0x8955:lán # 襕
+0x8956:ǎo # 襖
+0x8957:zé # 襗
+0x8958:guì # 襘
+0x8959:cào # 襙
+0x895a:suì # 襚
+0x895b:nóng # 襛
+0x895c:chān # 襜
+0x895d:liǎn # 襝
+0x895e:bì # 襞
+0x895f:jīn # 襟
+0x8960:dāng # 襠
+0x8961:shǔ # 襡
+0x8962:tǎn # 襢
+0x8963:bì # 襣
+0x8964:lán # 襤
+0x8965:fú # 襥
+0x8966:rú # 襦
+0x8967:zhǐ # 襧
+0x8969:shǔ # 襩
+0x896a:wà # 襪
+0x896b:shì # 襫
+0x896c:bǎi # 襬
+0x896d:xié # 襭
+0x896e:bó # 襮
+0x896f:chèn # 襯
+0x8970:lǎi # 襰
+0x8971:lóng # 襱
+0x8972:xí # 襲
+0x8973:xiān # 襳
+0x8974:lán # 襴
+0x8975:zhě # 襵
+0x8976:dài # 襶
+0x8978:zàn # 襸
+0x8979:shī # 襹
+0x897a:jiǎn # 襺
+0x897b:pàn # 襻
+0x897c:yì # 襼
+0x897e:yà # 襾
+0x897f:xī # 西
+0x8980:yà # 覀
+0x8981:yào,yāo # 要
+0x8982:fěng # 覂
+0x8983:tán,qín # 覃
+0x8985:fiào # 覅
+0x8986:fù # 覆
+0x8987:bà # 覇
+0x8988:hé # 覈
+0x8989:jī # 覉
+0x898a:jī # 覊
+0x898b:jiàn,xiàn # 見
+0x898c:guān,guàn # 覌
+0x898d:biàn # 覍
+0x898e:yàn # 覎
+0x898f:guī # 規
+0x8990:jué,jiào # 覐
+0x8991:piǎn # 覑
+0x8992:mào # 覒
+0x8993:mì # 覓
+0x8994:mì # 覔
+0x8995:piē,miè # 覕
+0x8996:shì # 視
+0x8997:sì # 覗
+0x8998:chān # 覘
+0x8999:zhěn # 覙
+0x899a:jué,jiào # 覚
+0x899b:mì # 覛
+0x899c:tiào # 覜
+0x899d:lián # 覝
+0x899e:yào # 覞
+0x899f:zhì # 覟
+0x89a0:jūn # 覠
+0x89a1:xī # 覡
+0x89a2:shǎn # 覢
+0x89a3:wēi # 覣
+0x89a4:xì # 覤
+0x89a5:tiǎn # 覥
+0x89a6:yú # 覦
+0x89a7:lǎn # 覧
+0x89a8:è # 覨
+0x89a9:dǔ # 覩
+0x89aa:qīn,qìng # 親
+0x89ab:pǎng # 覫
+0x89ac:jì # 覬
+0x89ad:míng # 覭
+0x89ae:yíng,yǐng # 覮
+0x89af:gòu # 覯
+0x89b0:qū,qù # 覰
+0x89b1:zhàn,zhān # 覱
+0x89b2:jìn # 覲
+0x89b3:guān,guàn # 観
+0x89b4:dèng # 覴
+0x89b5:jiàn,biǎn # 覵
+0x89b6:luó,luǎn # 覶
+0x89b7:qù,qū # 覷
+0x89b8:jiàn # 覸
+0x89b9:wéi # 覹
+0x89ba:jué,jiào # 覺
+0x89bb:qù,qū # 覻
+0x89bc:luó # 覼
+0x89bd:lǎn # 覽
+0x89be:shěn # 覾
+0x89bf:dí # 覿
+0x89c0:guān,guàn # 觀
+0x89c1:jiàn,xiàn # 见
+0x89c2:guān,guàn # 观
+0x89c3:yàn # 觃
+0x89c4:guī # 规
+0x89c5:mì # 觅
+0x89c6:shì # 视
+0x89c7:chān # 觇
+0x89c8:lǎn # 览
+0x89c9:jué,jiào # 觉
+0x89ca:jì # 觊
+0x89cb:xí # 觋
+0x89cc:dí # 觌
+0x89cd:tiǎn # 觍
+0x89ce:yú # 觎
+0x89cf:gòu # 觏
+0x89d0:jìn # 觐
+0x89d1:qù,qū # 觑
+0x89d2:jiǎo,jué # 角
+0x89d3:qiú # 觓
+0x89d4:jīn # 觔
+0x89d5:cū # 觕
+0x89d6:jué # 觖
+0x89d7:zhì # 觗
+0x89d8:chào # 觘
+0x89d9:jí # 觙
+0x89da:gū # 觚
+0x89db:dàn # 觛
+0x89dc:zī,zuǐ # 觜
+0x89dd:dǐ # 觝
+0x89de:shāng # 觞
+0x89df:huà,xiè # 觟
+0x89e0:quán # 觠
+0x89e1:gé # 觡
+0x89e2:shì # 觢
+0x89e3:jiě,jiè,xiè # 解
+0x89e4:guǐ # 觤
+0x89e5:gōng # 觥
+0x89e6:chù # 触
+0x89e7:jiě,jiè,xiè # 觧
+0x89e8:hùn # 觨
+0x89e9:qiú # 觩
+0x89ea:xīng # 觪
+0x89eb:sù # 觫
+0x89ec:ní # 觬
+0x89ed:jī,qí # 觭
+0x89ee:jué # 觮
+0x89ef:zhì # 觯
+0x89f0:zhā # 觰
+0x89f1:bì # 觱
+0x89f2:xīng # 觲
+0x89f3:hú # 觳
+0x89f4:shāng # 觴
+0x89f5:gōng # 觵
+0x89f6:zhì # 觶
+0x89f7:xué,hù # 觷
+0x89f8:chù # 觸
+0x89f9:xī # 觹
+0x89fa:yí # 觺
+0x89fb:lì,lù # 觻
+0x89fc:jué # 觼
+0x89fd:xī # 觽
+0x89fe:yàn # 觾
+0x89ff:xī # 觿
+0x8a00:yán # 言
+0x8a02:dìng # 訂
+0x8a03:fù # 訃
+0x8a04:qiú # 訄
+0x8a05:qiú # 訅
+0x8a06:jiào # 訆
+0x8a07:hōng # 訇
+0x8a08:jì # 計
+0x8a09:fàn # 訉
+0x8a0a:xùn # 訊
+0x8a0b:diào # 訋
+0x8a0c:hòng # 訌
+0x8a0d:chài,chā,chà # 訍
+0x8a0e:tǎo # 討
+0x8a0f:xū # 訏
+0x8a10:jié # 訐
+0x8a11:dàn,yí # 訑
+0x8a12:rèn # 訒
+0x8a13:xùn # 訓
+0x8a14:yín # 訔
+0x8a15:shàn # 訕
+0x8a16:qì # 訖
+0x8a17:tuō # 託
+0x8a18:jì # 記
+0x8a19:xùn # 訙
+0x8a1a:yín # 訚
+0x8a1b:é # 訛
+0x8a1c:fēn # 訜
+0x8a1d:yà # 訝
+0x8a1e:yāo # 訞
+0x8a1f:sòng # 訟
+0x8a20:shěn # 訠
+0x8a21:yín # 訡
+0x8a22:xīn # 訢
+0x8a23:jué # 訣
+0x8a24:xiáo,ná # 訤
+0x8a25:nè # 訥
+0x8a26:chén # 訦
+0x8a27:yóu # 訧
+0x8a28:zhǐ # 訨
+0x8a29:xiōng # 訩
+0x8a2a:fǎng # 訪
+0x8a2b:xìn # 訫
+0x8a2c:chāo # 訬
+0x8a2d:shè # 設
+0x8a2e:yán # 訮
+0x8a2f:sǎ # 訯
+0x8a30:zhùn # 訰
+0x8a31:xū # 許
+0x8a32:yì # 訲
+0x8a33:yì # 訳
+0x8a34:sù # 訴
+0x8a35:chī # 訵
+0x8a36:hē # 訶
+0x8a37:shēn # 訷
+0x8a38:hé # 訸
+0x8a39:xù # 訹
+0x8a3a:zhěn # 診
+0x8a3b:zhù # 註
+0x8a3c:zhèng # 証
+0x8a3d:gòu # 訽
+0x8a3e:zī # 訾
+0x8a3f:zǐ # 訿
+0x8a40:zhān # 詀
+0x8a41:gǔ # 詁
+0x8a42:fù # 詂
+0x8a43:jiǎn # 詃
+0x8a44:dié # 詄
+0x8a45:líng # 詅
+0x8a46:dǐ # 詆
+0x8a47:yàng # 詇
+0x8a48:lì # 詈
+0x8a49:náo # 詉
+0x8a4a:pàn # 詊
+0x8a4b:zhòu # 詋
+0x8a4c:gàn # 詌
+0x8a4d:yì # 詍
+0x8a4e:jù # 詎
+0x8a4f:yào # 詏
+0x8a50:zhà # 詐
+0x8a51:tuó # 詑
+0x8a52:yí,dài # 詒
+0x8a53:qǔ # 詓
+0x8a54:zhào # 詔
+0x8a55:píng # 評
+0x8a56:bì # 詖
+0x8a57:xiòng # 詗
+0x8a58:qū # 詘
+0x8a59:bá # 詙
+0x8a5a:dá # 詚
+0x8a5b:zǔ # 詛
+0x8a5c:tāo # 詜
+0x8a5d:zhǔ # 詝
+0x8a5e:cí # 詞
+0x8a5f:zhé # 詟
+0x8a60:yǒng # 詠
+0x8a61:xǔ # 詡
+0x8a62:xún # 詢
+0x8a63:yì # 詣
+0x8a64:huǎng # 詤
+0x8a65:hé # 詥
+0x8a66:shì # 試
+0x8a67:chá # 詧
+0x8a68:xiào # 詨
+0x8a69:shī # 詩
+0x8a6a:hěn # 詪
+0x8a6b:chà # 詫
+0x8a6c:gòu # 詬
+0x8a6d:guǐ # 詭
+0x8a6e:quán # 詮
+0x8a6f:huì # 詯
+0x8a70:jié # 詰
+0x8a71:huà # 話
+0x8a72:gāi # 該
+0x8a73:xiáng # 詳
+0x8a74:wēi # 詴
+0x8a75:shēn # 詵
+0x8a76:chóu # 詶
+0x8a77:tóng # 詷
+0x8a78:mí # 詸
+0x8a79:zhān # 詹
+0x8a7a:míng # 詺
+0x8a7b:luò # 詻
+0x8a7c:huī # 詼
+0x8a7d:yán # 詽
+0x8a7e:xiōng # 詾
+0x8a7f:guà # 詿
+0x8a80:èr # 誀
+0x8a81:bìng # 誁
+0x8a82:tiǎo,diào # 誂
+0x8a83:yí,chǐ,chì # 誃
+0x8a84:lěi # 誄
+0x8a85:zhū # 誅
+0x8a86:kuāng # 誆
+0x8a87:kuā,kuà # 誇
+0x8a88:wū # 誈
+0x8a89:yù # 誉
+0x8a8a:téng # 誊
+0x8a8b:jì # 誋
+0x8a8c:zhì # 誌
+0x8a8d:rèn # 認
+0x8a8e:cù # 誎
+0x8a8f:lǎng,làng # 誏
+0x8a90:é # 誐
+0x8a91:kuáng # 誑
+0x8a92:ēi,éi,ěi,èi,xī # 誒
+0x8a93:shì # 誓
+0x8a94:tǐng # 誔
+0x8a95:dàn # 誕
+0x8a96:bèi,bó # 誖
+0x8a97:chán # 誗
+0x8a98:yòu # 誘
+0x8a99:kēng # 誙
+0x8a9a:qiào # 誚
+0x8a9b:qīn # 誛
+0x8a9c:shuà # 誜
+0x8a9d:ān # 誝
+0x8a9e:yǔ,yù # 語
+0x8a9f:xiào # 誟
+0x8aa0:chéng # 誠
+0x8aa1:jiè # 誡
+0x8aa2:xiàn # 誢
+0x8aa3:wū # 誣
+0x8aa4:wù # 誤
+0x8aa5:gào # 誥
+0x8aa6:sòng # 誦
+0x8aa7:bū # 誧
+0x8aa8:huì # 誨
+0x8aa9:jìng # 誩
+0x8aaa:shuō,shuì,yuè # 說
+0x8aab:zhèn # 誫
+0x8aac:shuō,shuì,yuè # 説
+0x8aad:dú # 読
+0x8aaf:chàng # 誯
+0x8ab0:shuí,shéi # 誰
+0x8ab1:jié # 誱
+0x8ab2:kè # 課
+0x8ab3:qū,juè # 誳
+0x8ab4:cóng # 誴
+0x8ab5:xiáo # 誵
+0x8ab6:suì # 誶
+0x8ab7:wǎng # 誷
+0x8ab8:xián # 誸
+0x8ab9:fěi # 誹
+0x8aba:chī,lài # 誺
+0x8abb:tà # 誻
+0x8abc:yì # 誼
+0x8abd:nì,ná # 誽
+0x8abe:yín # 誾
+0x8abf:diào,tiáo # 調
+0x8ac0:pǐ,bēi # 諀
+0x8ac1:zhuó # 諁
+0x8ac2:chǎn # 諂
+0x8ac3:chēn # 諃
+0x8ac4:zhūn # 諄
+0x8ac5:jì,jī # 諅
+0x8ac6:qī # 諆
+0x8ac7:tán # 談
+0x8ac8:zhuì # 諈
+0x8ac9:wěi # 諉
+0x8aca:jū # 諊
+0x8acb:qǐng # 請
+0x8acc:dǒng # 諌
+0x8acd:zhèng # 諍
+0x8ace:zé,zuò,zhǎ,cuò # 諎
+0x8acf:zōu # 諏
+0x8ad0:qiān # 諐
+0x8ad1:zhuó # 諑
+0x8ad2:liàng # 諒
+0x8ad3:jiàn # 諓
+0x8ad4:chù,jí # 諔
+0x8ad5:xià,háo # 諕
+0x8ad6:lùn,lún # 論
+0x8ad7:shěn # 諗
+0x8ad8:biǎo # 諘
+0x8ad9:huà # 諙
+0x8ada:biàn # 諚
+0x8adb:yú # 諛
+0x8adc:dié # 諜
+0x8add:xū # 諝
+0x8ade:piǎn # 諞
+0x8adf:shì,dì # 諟
+0x8ae0:xuān # 諠
+0x8ae1:shì # 諡
+0x8ae2:hùn # 諢
+0x8ae3:huà,guā # 諣
+0x8ae4:è # 諤
+0x8ae5:zhòng # 諥
+0x8ae6:dì # 諦
+0x8ae7:xié # 諧
+0x8ae8:fú # 諨
+0x8ae9:pǔ # 諩
+0x8aea:tíng # 諪
+0x8aeb:jiàn # 諫
+0x8aec:qǐ # 諬
+0x8aed:yù # 諭
+0x8aee:zī # 諮
+0x8aef:zhuān # 諯
+0x8af0:xǐ,shāi,āi # 諰
+0x8af1:huì # 諱
+0x8af2:yīn # 諲
+0x8af3:ān # 諳
+0x8af4:xián # 諴
+0x8af5:nán,nàn # 諵
+0x8af6:chén # 諶
+0x8af7:fěng # 諷
+0x8af8:zhū # 諸
+0x8af9:yáng # 諹
+0x8afa:yàn # 諺
+0x8afb:huáng # 諻
+0x8afc:xuān # 諼
+0x8afd:gé # 諽
+0x8afe:nuò # 諾
+0x8aff:xǔ # 諿
+0x8b00:móu # 謀
+0x8b01:yè # 謁
+0x8b02:wèi # 謂
+0x8b04:téng # 謄
+0x8b05:zhōu # 謅
+0x8b06:shàn # 謆
+0x8b07:jiǎn # 謇
+0x8b08:bó # 謈
+0x8b0a:huǎng # 謊
+0x8b0b:huò # 謋
+0x8b0c:gē # 謌
+0x8b0d:yíng # 謍
+0x8b0e:mí # 謎
+0x8b0f:xiǎo # 謏
+0x8b10:mì # 謐
+0x8b11:xǐ # 謑
+0x8b12:qiāng # 謒
+0x8b13:chēn # 謓
+0x8b14:xuè # 謔
+0x8b15:tí # 謕
+0x8b16:sù # 謖
+0x8b17:bàng # 謗
+0x8b18:chí # 謘
+0x8b19:qiān # 謙
+0x8b1a:shì # 謚
+0x8b1b:jiǎng # 講
+0x8b1c:yuán # 謜
+0x8b1d:xiè # 謝
+0x8b1e:hè # 謞
+0x8b1f:tāo # 謟
+0x8b20:yáo # 謠
+0x8b21:yáo # 謡
+0x8b23:yú # 謣
+0x8b24:biāo # 謤
+0x8b25:còng # 謥
+0x8b26:qǐng # 謦
+0x8b27:lí # 謧
+0x8b28:mó # 謨
+0x8b29:mó # 謩
+0x8b2a:shāng # 謪
+0x8b2b:zhé # 謫
+0x8b2c:miù # 謬
+0x8b2d:jiǎn # 謭
+0x8b2e:zé # 謮
+0x8b2f:jiē # 謯
+0x8b30:lián # 謰
+0x8b31:lóu # 謱
+0x8b32:càn # 謲
+0x8b33:ōu # 謳
+0x8b34:gùn # 謴
+0x8b35:xí # 謵
+0x8b36:zhuó # 謶
+0x8b37:áo # 謷
+0x8b38:áo # 謸
+0x8b39:jǐn # 謹
+0x8b3a:zhé # 謺
+0x8b3b:yí # 謻
+0x8b3c:hū # 謼
+0x8b3d:jiàng # 謽
+0x8b3e:mán # 謾
+0x8b3f:cháo # 謿
+0x8b40:hàn # 譀
+0x8b41:huá # 譁
+0x8b42:chǎn # 譂
+0x8b43:xū # 譃
+0x8b44:zēng # 譄
+0x8b45:sè # 譅
+0x8b46:xī # 譆
+0x8b47:zhā # 譇
+0x8b48:duì # 譈
+0x8b49:zhèng # 證
+0x8b4a:náo # 譊
+0x8b4b:lán # 譋
+0x8b4c:é # 譌
+0x8b4d:yīng # 譍
+0x8b4e:jué # 譎
+0x8b4f:jī # 譏
+0x8b50:zǔn # 譐
+0x8b51:jiǎo # 譑
+0x8b52:bò # 譒
+0x8b53:huì # 譓
+0x8b54:zhuàn # 譔
+0x8b55:wú # 譕
+0x8b56:zèn # 譖
+0x8b57:zhá # 譗
+0x8b58:shí,zhì # 識
+0x8b59:qiáo # 譙
+0x8b5a:tán # 譚
+0x8b5b:jiàn # 譛
+0x8b5c:pǔ # 譜
+0x8b5d:shéng # 譝
+0x8b5e:xuān # 譞
+0x8b5f:zào # 譟
+0x8b60:tán # 譠
+0x8b61:dǎng # 譡
+0x8b62:suì # 譢
+0x8b63:xiǎn # 譣
+0x8b64:jī # 譤
+0x8b65:jiào # 譥
+0x8b66:jǐng # 警
+0x8b67:zhàn # 譧
+0x8b68:nóng # 譨
+0x8b69:yī # 譩
+0x8b6a:ǎi # 譪
+0x8b6b:zhān # 譫
+0x8b6c:pì # 譬
+0x8b6d:huǐ # 譭
+0x8b6e:huà # 譮
+0x8b6f:yì # 譯
+0x8b70:yì # 議
+0x8b71:shàn # 譱
+0x8b72:ràng # 譲
+0x8b73:ròu # 譳
+0x8b74:qiǎn # 譴
+0x8b75:duì # 譵
+0x8b76:tà # 譶
+0x8b77:hù # 護
+0x8b78:zhōu # 譸
+0x8b79:háo # 譹
+0x8b7a:ài # 譺
+0x8b7b:yīng # 譻
+0x8b7c:jiān # 譼
+0x8b7d:yù # 譽
+0x8b7e:jiǎn # 譾
+0x8b7f:huì # 譿
+0x8b80:dú # 讀
+0x8b81:zhé # 讁
+0x8b82:juàn,xuān # 讂
+0x8b83:zàn # 讃
+0x8b84:lěi # 讄
+0x8b85:shěn # 讅
+0x8b86:wèi # 讆
+0x8b87:chǎn # 讇
+0x8b88:lì # 讈
+0x8b89:yí,tuī # 讉
+0x8b8a:biàn # 變
+0x8b8b:zhé # 讋
+0x8b8c:yàn # 讌
+0x8b8d:è # 讍
+0x8b8e:chóu # 讎
+0x8b8f:wèi # 讏
+0x8b90:chóu # 讐
+0x8b91:yào # 讑
+0x8b92:chán # 讒
+0x8b93:ràng # 讓
+0x8b94:yǐn # 讔
+0x8b95:lán # 讕
+0x8b96:chèn # 讖
+0x8b97:xié # 讗
+0x8b98:niè # 讘
+0x8b99:huān # 讙
+0x8b9a:zàn # 讚
+0x8b9b:yì # 讛
+0x8b9c:dǎng # 讜
+0x8b9d:zhán # 讝
+0x8b9e:yàn # 讞
+0x8b9f:dú # 讟
+0x8ba0:yán # 讠
+0x8ba1:jì # 计
+0x8ba2:dìng # 订
+0x8ba3:fù # 讣
+0x8ba4:rèn # 认
+0x8ba5:jī # 讥
+0x8ba6:jié # 讦
+0x8ba7:hòng # 讧
+0x8ba8:tǎo # 讨
+0x8ba9:ràng # 让
+0x8baa:shàn # 讪
+0x8bab:qì # 讫
+0x8bac:tuō # 讬
+0x8bad:xùn # 训
+0x8bae:yì # 议
+0x8baf:xùn # 讯
+0x8bb0:jì # 记
+0x8bb1:rèn # 讱
+0x8bb2:jiǎng # 讲
+0x8bb3:huì # 讳
+0x8bb4:ōu # 讴
+0x8bb5:jù # 讵
+0x8bb6:yà # 讶
+0x8bb7:nè # 讷
+0x8bb8:xǔ,hǔ # 许
+0x8bb9:é # 讹
+0x8bba:lùn,lún # 论
+0x8bbb:xiōng # 讻
+0x8bbc:sòng # 讼
+0x8bbd:fěng # 讽
+0x8bbe:shè # 设
+0x8bbf:fǎng # 访
+0x8bc0:jué # 诀
+0x8bc1:zhèng # 证
+0x8bc2:gǔ # 诂
+0x8bc3:hē # 诃
+0x8bc4:píng # 评
+0x8bc5:zǔ # 诅
+0x8bc6:shí,zhì # 识
+0x8bc7:xiòng # 诇
+0x8bc8:zhà # 诈
+0x8bc9:sù # 诉
+0x8bca:zhěn # 诊
+0x8bcb:dǐ # 诋
+0x8bcc:zhōu # 诌
+0x8bcd:cí # 词
+0x8bce:qū # 诎
+0x8bcf:zhào # 诏
+0x8bd0:bì # 诐
+0x8bd1:yì # 译
+0x8bd2:yí,dài # 诒
+0x8bd3:kuāng # 诓
+0x8bd4:lěi # 诔
+0x8bd5:shì # 试
+0x8bd6:guà # 诖
+0x8bd7:shī # 诗
+0x8bd8:jié,jí # 诘
+0x8bd9:huī # 诙
+0x8bda:chéng # 诚
+0x8bdb:zhū # 诛
+0x8bdc:shēn # 诜
+0x8bdd:huà # 话
+0x8bde:dàn # 诞
+0x8bdf:gòu # 诟
+0x8be0:quán # 诠
+0x8be1:guǐ # 诡
+0x8be2:xún # 询
+0x8be3:yì # 诣
+0x8be4:zhèng # 诤
+0x8be5:gāi # 该
+0x8be6:xiáng,yáng # 详
+0x8be7:chà # 诧
+0x8be8:hùn # 诨
+0x8be9:xǔ # 诩
+0x8bea:zhōu,chóu # 诪
+0x8beb:jiè # 诫
+0x8bec:wū # 诬
+0x8bed:yǔ,yù # 语
+0x8bee:qiào # 诮
+0x8bef:wù # 误
+0x8bf0:gào # 诰
+0x8bf1:yòu # 诱
+0x8bf2:huì # 诲
+0x8bf3:kuáng # 诳
+0x8bf4:shuō,shuì,yuè # 说
+0x8bf5:sòng # 诵
+0x8bf6:ēi,éi,ěi,èi,xī # 诶
+0x8bf7:qǐng # 请
+0x8bf8:zhū # 诸
+0x8bf9:zōu # 诹
+0x8bfa:nuò # 诺
+0x8bfb:dú,dòu # 读
+0x8bfc:zhuó # 诼
+0x8bfd:fěi # 诽
+0x8bfe:kè # 课
+0x8bff:wěi # 诿
+0x8c00:yú # 谀
+0x8c01:shuí,shéi # 谁
+0x8c02:shěn # 谂
+0x8c03:tiáo,diào,zhōu # 调
+0x8c04:chǎn # 谄
+0x8c05:liàng # 谅
+0x8c06:zhūn # 谆
+0x8c07:suì # 谇
+0x8c08:tán # 谈
+0x8c09:shěn # 谉
+0x8c0a:yì # 谊
+0x8c0b:móu # 谋
+0x8c0c:chén,shèn # 谌
+0x8c0d:dié # 谍
+0x8c0e:huǎng # 谎
+0x8c0f:jiàn # 谏
+0x8c10:xié # 谐
+0x8c11:xuè # 谑
+0x8c12:yè # 谒
+0x8c13:wèi # 谓
+0x8c14:è # 谔
+0x8c15:yù # 谕
+0x8c16:xuān # 谖
+0x8c17:chán # 谗
+0x8c18:zī # 谘
+0x8c19:ān # 谙
+0x8c1a:yàn # 谚
+0x8c1b:dì # 谛
+0x8c1c:mí,mèi # 谜
+0x8c1d:piǎn # 谝
+0x8c1e:xū # 谞
+0x8c1f:mó # 谟
+0x8c20:dǎng # 谠
+0x8c21:sù # 谡
+0x8c22:xiè # 谢
+0x8c23:yáo # 谣
+0x8c24:bàng # 谤
+0x8c25:shì # 谥
+0x8c26:qiān # 谦
+0x8c27:mì # 谧
+0x8c28:jǐn # 谨
+0x8c29:mán # 谩
+0x8c2a:zhé # 谪
+0x8c2b:jiǎn # 谫
+0x8c2c:miù # 谬
+0x8c2d:tán # 谭
+0x8c2e:zèn # 谮
+0x8c2f:qiáo # 谯
+0x8c30:lán # 谰
+0x8c31:pǔ # 谱
+0x8c32:jué # 谲
+0x8c33:yàn # 谳
+0x8c34:qiǎn # 谴
+0x8c35:zhān # 谵
+0x8c36:chèn # 谶
+0x8c37:gǔ,yù # 谷
+0x8c38:qiān # 谸
+0x8c39:hóng # 谹
+0x8c3a:xiā # 谺
+0x8c3b:jí # 谻
+0x8c3c:hóng # 谼
+0x8c3d:hān # 谽
+0x8c3e:hōng # 谾
+0x8c3f:xī # 谿
+0x8c40:xī # 豀
+0x8c41:huō,huò,huá # 豁
+0x8c42:liáo # 豂
+0x8c43:hǎn # 豃
+0x8c44:dú # 豄
+0x8c45:lóng # 豅
+0x8c46:dòu # 豆
+0x8c47:jiāng # 豇
+0x8c48:qǐ,kǎi # 豈
+0x8c49:chǐ # 豉
+0x8c4a:lǐ # 豊
+0x8c4b:dēng # 豋
+0x8c4c:wān # 豌
+0x8c4d:bī # 豍
+0x8c4e:shù # 豎
+0x8c4f:xiàn # 豏
+0x8c50:fēng # 豐
+0x8c51:zhì # 豑
+0x8c52:zhì # 豒
+0x8c53:yàn # 豓
+0x8c54:yàn # 豔
+0x8c55:shǐ # 豕
+0x8c56:chù # 豖
+0x8c57:huī # 豗
+0x8c58:tún # 豘
+0x8c59:yì # 豙
+0x8c5a:tún # 豚
+0x8c5b:yì # 豛
+0x8c5c:jiān # 豜
+0x8c5d:bā # 豝
+0x8c5e:hòu # 豞
+0x8c5f:è # 豟
+0x8c60:chú # 豠
+0x8c61:xiàng # 象
+0x8c62:huàn # 豢
+0x8c63:jiān,yàn # 豣
+0x8c64:kěn # 豤
+0x8c65:gāi # 豥
+0x8c66:jù # 豦
+0x8c67:fú # 豧
+0x8c68:xī # 豨
+0x8c69:bīn # 豩
+0x8c6a:háo # 豪
+0x8c6b:yù # 豫
+0x8c6c:zhū # 豬
+0x8c6d:jiā # 豭
+0x8c6e:fén # 豮
+0x8c6f:xī # 豯
+0x8c70:hù # 豰
+0x8c71:wēn # 豱
+0x8c72:huán # 豲
+0x8c73:bīn # 豳
+0x8c74:dí # 豴
+0x8c75:zōng # 豵
+0x8c76:fén # 豶
+0x8c77:yì # 豷
+0x8c78:zhì # 豸
+0x8c79:bào # 豹
+0x8c7a:chái # 豺
+0x8c7b:àn # 豻
+0x8c7c:pí # 豼
+0x8c7d:nà # 豽
+0x8c7e:pī # 豾
+0x8c7f:gǒu # 豿
+0x8c80:nà # 貀
+0x8c81:yòu # 貁
+0x8c82:diāo # 貂
+0x8c83:mò # 貃
+0x8c84:sì # 貄
+0x8c85:xiū # 貅
+0x8c86:huán,huān # 貆
+0x8c87:kěn,kūn # 貇
+0x8c88:hé,mò # 貈
+0x8c89:hé,háo,mò # 貉
+0x8c8a:mò # 貊
+0x8c8b:àn # 貋
+0x8c8c:mào # 貌
+0x8c8d:lí # 貍
+0x8c8e:ní # 貎
+0x8c8f:bǐ # 貏
+0x8c90:yǔ # 貐
+0x8c91:jiā # 貑
+0x8c92:tuān,tuàn # 貒
+0x8c93:māo,máo # 貓
+0x8c94:pí # 貔
+0x8c95:xī # 貕
+0x8c96:yì # 貖
+0x8c97:jù,lóu # 貗
+0x8c98:mò # 貘
+0x8c99:chū # 貙
+0x8c9a:tán # 貚
+0x8c9b:huān # 貛
+0x8c9c:jué # 貜
+0x8c9d:bèi # 貝
+0x8c9e:zhēn # 貞
+0x8c9f:yuán,yún,yùn # 貟
+0x8ca0:fù # 負
+0x8ca1:cái # 財
+0x8ca2:gòng # 貢
+0x8ca3:dài,tè # 貣
+0x8ca4:yì,yí # 貤
+0x8ca5:háng # 貥
+0x8ca6:wán # 貦
+0x8ca7:pín # 貧
+0x8ca8:huò # 貨
+0x8ca9:fàn # 販
+0x8caa:tān # 貪
+0x8cab:guàn # 貫
+0x8cac:zé,zhài # 責
+0x8cad:zhì # 貭
+0x8cae:èr # 貮
+0x8caf:zhù # 貯
+0x8cb0:shì # 貰
+0x8cb1:bì # 貱
+0x8cb2:zī # 貲
+0x8cb3:èr # 貳
+0x8cb4:guì # 貴
+0x8cb5:piǎn # 貵
+0x8cb6:biǎn # 貶
+0x8cb7:mǎi # 買
+0x8cb8:dài # 貸
+0x8cb9:shèng # 貹
+0x8cba:kuàng # 貺
+0x8cbb:fèi # 費
+0x8cbc:tiē # 貼
+0x8cbd:yí # 貽
+0x8cbe:chí # 貾
+0x8cbf:mào # 貿
+0x8cc0:hè # 賀
+0x8cc1:bì,bēn # 賁
+0x8cc2:lù # 賂
+0x8cc3:lìn # 賃
+0x8cc4:huì # 賄
+0x8cc5:gāi # 賅
+0x8cc6:pián # 賆
+0x8cc7:zī # 資
+0x8cc8:jiǎ,gǔ,jià # 賈
+0x8cc9:xù # 賉
+0x8cca:zéi # 賊
+0x8ccb:jiǎo # 賋
+0x8ccc:gāi # 賌
+0x8ccd:zāng # 賍
+0x8cce:jiàn # 賎
+0x8ccf:yīng # 賏
+0x8cd0:jùn # 賐
+0x8cd1:zhèn # 賑
+0x8cd2:shē # 賒
+0x8cd3:bīn # 賓
+0x8cd4:bīn # 賔
+0x8cd5:qiú # 賕
+0x8cd6:shē # 賖
+0x8cd7:chuàn # 賗
+0x8cd8:zāng # 賘
+0x8cd9:zhōu # 賙
+0x8cda:lài # 賚
+0x8cdb:zàn # 賛
+0x8cdc:cì # 賜
+0x8cdd:chēn # 賝
+0x8cde:shǎng # 賞
+0x8cdf:tiǎn # 賟
+0x8ce0:péi # 賠
+0x8ce1:gēng # 賡
+0x8ce2:xián # 賢
+0x8ce3:mài # 賣
+0x8ce4:jiàn # 賤
+0x8ce5:suì # 賥
+0x8ce6:fù # 賦
+0x8ce7:dǎn # 賧
+0x8ce8:cóng # 賨
+0x8ce9:cóng # 賩
+0x8cea:zhì # 質
+0x8ceb:jī # 賫
+0x8cec:zhàng # 賬
+0x8ced:dǔ # 賭
+0x8cee:jìn # 賮
+0x8cef:xiōng,mín # 賯
+0x8cf0:chǔn # 賰
+0x8cf1:yǔn # 賱
+0x8cf2:bǎo # 賲
+0x8cf3:zāi # 賳
+0x8cf4:lài # 賴
+0x8cf5:fèng # 賵
+0x8cf6:càng # 賶
+0x8cf7:jī # 賷
+0x8cf8:shèng # 賸
+0x8cf9:ài # 賹
+0x8cfa:zhuàn,zuàn # 賺
+0x8cfb:fù # 賻
+0x8cfc:gòu # 購
+0x8cfd:sài # 賽
+0x8cfe:zé # 賾
+0x8cff:liáo # 賿
+0x8d00:yì # 贀
+0x8d01:bài # 贁
+0x8d02:chěn # 贂
+0x8d03:wàn,zhuàn # 贃
+0x8d04:zhì # 贄
+0x8d05:zhuì # 贅
+0x8d06:biāo # 贆
+0x8d07:yūn # 贇
+0x8d08:zèng # 贈
+0x8d09:dàn # 贉
+0x8d0a:zàn # 贊
+0x8d0b:yàn # 贋
+0x8d0d:shàn # 贍
+0x8d0e:wàn # 贎
+0x8d0f:yíng # 贏
+0x8d10:jìn # 贐
+0x8d11:gàn # 贑
+0x8d12:xián # 贒
+0x8d13:zāng # 贓
+0x8d14:bì # 贔
+0x8d15:dú # 贕
+0x8d16:shú # 贖
+0x8d17:yàn # 贗
+0x8d19:xuàn # 贙
+0x8d1a:lòng # 贚
+0x8d1b:gàn # 贛
+0x8d1c:zāng # 贜
+0x8d1d:bèi # 贝
+0x8d1e:zhēn # 贞
+0x8d1f:fù # 负
+0x8d20:yuán,yùn # 贠
+0x8d21:gòng # 贡
+0x8d22:cái # 财
+0x8d23:zé,zhài # 责
+0x8d24:xián # 贤
+0x8d25:bài # 败
+0x8d26:zhàng # 账
+0x8d27:huò # 货
+0x8d28:zhì # 质
+0x8d29:fàn # 贩
+0x8d2a:tān # 贪
+0x8d2b:pín # 贫
+0x8d2c:biǎn # 贬
+0x8d2d:gòu # 购
+0x8d2e:zhù # 贮
+0x8d2f:guàn # 贯
+0x8d30:èr # 贰
+0x8d31:jiàn # 贱
+0x8d32:bì,bēn # 贲
+0x8d33:shì # 贳
+0x8d34:tiē # 贴
+0x8d35:guì # 贵
+0x8d36:kuàng # 贶
+0x8d37:dài # 贷
+0x8d38:mào # 贸
+0x8d39:fèi # 费
+0x8d3a:hè # 贺
+0x8d3b:yí # 贻
+0x8d3c:zéi # 贼
+0x8d3d:zhì # 贽
+0x8d3e:gǔ,jiǎ # 贾
+0x8d3f:huì # 贿
+0x8d40:zī # 赀
+0x8d41:lìn # 赁
+0x8d42:lù # 赂
+0x8d43:zāng # 赃
+0x8d44:zī # 资
+0x8d45:gāi # 赅
+0x8d46:jìn # 赆
+0x8d47:qiú # 赇
+0x8d48:zhèn # 赈
+0x8d49:lài # 赉
+0x8d4a:shē # 赊
+0x8d4b:fù # 赋
+0x8d4c:dǔ # 赌
+0x8d4d:jī # 赍
+0x8d4e:shú # 赎
+0x8d4f:shǎng # 赏
+0x8d50:cì # 赐
+0x8d51:bì # 赑
+0x8d52:zhōu # 赒
+0x8d53:gēng # 赓
+0x8d54:péi # 赔
+0x8d55:dǎn # 赕
+0x8d56:lài # 赖
+0x8d57:fèng # 赗
+0x8d58:zhuì # 赘
+0x8d59:fù # 赙
+0x8d5a:zhuàn # 赚
+0x8d5b:sài # 赛
+0x8d5c:zé # 赜
+0x8d5d:yàn # 赝
+0x8d5e:zàn # 赞
+0x8d5f:yūn # 赟
+0x8d60:zèng # 赠
+0x8d61:shàn # 赡
+0x8d62:yíng # 赢
+0x8d63:gàn # 赣
+0x8d64:chì # 赤
+0x8d65:xī # 赥
+0x8d66:shè # 赦
+0x8d67:nǎn # 赧
+0x8d68:tóng # 赨
+0x8d69:xì # 赩
+0x8d6a:chēng # 赪
+0x8d6b:hè # 赫
+0x8d6c:chēng # 赬
+0x8d6d:zhě # 赭
+0x8d6e:xiá # 赮
+0x8d6f:táng # 赯
+0x8d70:zǒu # 走
+0x8d71:zǒu # 赱
+0x8d72:lì # 赲
+0x8d73:jiū # 赳
+0x8d74:fù # 赴
+0x8d75:zhào # 赵
+0x8d76:gǎn # 赶
+0x8d77:qǐ # 起
+0x8d78:shàn # 赸
+0x8d79:qióng # 赹
+0x8d7a:yǐn # 赺
+0x8d7b:xiǎn # 赻
+0x8d7c:zī # 赼
+0x8d7d:jué # 赽
+0x8d7e:qǐn # 赾
+0x8d7f:chí # 赿
+0x8d80:cī # 趀
+0x8d81:chèn # 趁
+0x8d82:chèn # 趂
+0x8d83:dié,tú # 趃
+0x8d84:qiè,jū # 趄
+0x8d85:chāo # 超
+0x8d86:dī # 趆
+0x8d87:xì # 趇
+0x8d88:zhān # 趈
+0x8d89:jué # 趉
+0x8d8a:yuè # 越
+0x8d8b:qū,cù # 趋
+0x8d8c:jí,jié # 趌
+0x8d8d:qū # 趍
+0x8d8e:chú # 趎
+0x8d8f:guā,huó # 趏
+0x8d90:xuè # 趐
+0x8d91:zī # 趑
+0x8d92:tiào # 趒
+0x8d93:duǒ # 趓
+0x8d94:liè # 趔
+0x8d95:gǎn # 趕
+0x8d96:suō # 趖
+0x8d97:cù # 趗
+0x8d98:xí # 趘
+0x8d99:zhào # 趙
+0x8d9a:sù # 趚
+0x8d9b:yǐn # 趛
+0x8d9c:jú # 趜
+0x8d9d:jiàn # 趝
+0x8d9e:què,qì,jí # 趞
+0x8d9f:tàng,tāng # 趟
+0x8da0:chuō,zhuó # 趠
+0x8da1:cuǐ # 趡
+0x8da2:lù # 趢
+0x8da3:qù,cù # 趣
+0x8da4:dàng # 趤
+0x8da5:qiū # 趥
+0x8da6:zī # 趦
+0x8da7:tí # 趧
+0x8da8:qū,cù # 趨
+0x8da9:chì # 趩
+0x8daa:huáng # 趪
+0x8dab:qiáo # 趫
+0x8dac:qiāo # 趬
+0x8dad:jiào # 趭
+0x8dae:zào # 趮
+0x8daf:tì,yuè # 趯
+0x8db1:zǎn # 趱
+0x8db2:zǎn # 趲
+0x8db3:zú # 足
+0x8db4:pā # 趴
+0x8db5:bào,bō # 趵
+0x8db6:kuà,wù # 趶
+0x8db7:kē # 趷
+0x8db8:dǔn # 趸
+0x8db9:jué,guì # 趹
+0x8dba:fū # 趺
+0x8dbb:chěn # 趻
+0x8dbc:jiǎn # 趼
+0x8dbd:fāng,fàng,páng # 趽
+0x8dbe:zhǐ # 趾
+0x8dbf:tā # 趿
+0x8dc0:yuè # 跀
+0x8dc1:bà,páo # 跁
+0x8dc2:qí,qǐ # 跂
+0x8dc3:yuè # 跃
+0x8dc4:qiāng,qiàng # 跄
+0x8dc5:tuò # 跅
+0x8dc6:tái # 跆
+0x8dc7:yì # 跇
+0x8dc8:jiàn,chén # 跈
+0x8dc9:líng # 跉
+0x8dca:mèi # 跊
+0x8dcb:bá # 跋
+0x8dcc:diē # 跌
+0x8dcd:kū # 跍
+0x8dce:tuó # 跎
+0x8dcf:jiā # 跏
+0x8dd0:cī,cǐ # 跐
+0x8dd1:pǎo,páo # 跑
+0x8dd2:qiǎ # 跒
+0x8dd3:zhù # 跓
+0x8dd4:jū # 跔
+0x8dd5:diǎn,tiē,dié # 跕
+0x8dd6:zhí # 跖
+0x8dd7:fū # 跗
+0x8dd8:pán,bàn # 跘
+0x8dd9:jū,jù,qiè # 跙
+0x8dda:shān # 跚
+0x8ddb:bǒ # 跛
+0x8ddc:ní # 跜
+0x8ddd:jù # 距
+0x8dde:lì,luò # 跞
+0x8ddf:gēn # 跟
+0x8de0:yí # 跠
+0x8de1:jì # 跡
+0x8de2:dài,duò,duō,chí # 跢
+0x8de3:xiǎn # 跣
+0x8de4:jiāo # 跤
+0x8de5:duò # 跥
+0x8de6:zhū # 跦
+0x8de7:quán # 跧
+0x8de8:kuà # 跨
+0x8de9:zhuǎi # 跩
+0x8dea:guì # 跪
+0x8deb:qióng # 跫
+0x8dec:kuǐ # 跬
+0x8ded:xiáng # 跭
+0x8dee:dié # 跮
+0x8def:lù # 路
+0x8df0:pián,bèng # 跰
+0x8df1:zhì # 跱
+0x8df2:jié # 跲
+0x8df3:tiào,táo # 跳
+0x8df4:cǎi # 跴
+0x8df5:jiàn # 践
+0x8df6:dá # 跶
+0x8df7:qiāo # 跷
+0x8df8:bì # 跸
+0x8df9:xiān # 跹
+0x8dfa:duò # 跺
+0x8dfb:jī # 跻
+0x8dfc:jú # 跼
+0x8dfd:jì # 跽
+0x8dfe:shū,chōu # 跾
+0x8dff:tú # 跿
+0x8e00:chuò # 踀
+0x8e01:jìng # 踁
+0x8e02:niè # 踂
+0x8e03:xiāo # 踃
+0x8e04:bù # 踄
+0x8e05:xué # 踅
+0x8e06:cūn # 踆
+0x8e07:mǔ # 踇
+0x8e08:shū # 踈
+0x8e09:liáng,liàng # 踉
+0x8e0a:yǒng # 踊
+0x8e0b:jiǎo # 踋
+0x8e0c:chóu # 踌
+0x8e0d:qiāo # 踍
+0x8e0f:tà # 踏
+0x8e10:jiàn # 踐
+0x8e11:jī # 踑
+0x8e12:wō # 踒
+0x8e13:wěi # 踓
+0x8e14:chuō # 踔
+0x8e15:jié # 踕
+0x8e16:jí # 踖
+0x8e17:niè # 踗
+0x8e18:jū # 踘
+0x8e19:niè # 踙
+0x8e1a:lún # 踚
+0x8e1b:lù # 踛
+0x8e1c:lèng # 踜
+0x8e1d:huái # 踝
+0x8e1e:jù # 踞
+0x8e1f:chí # 踟
+0x8e20:wǎn # 踠
+0x8e21:quán # 踡
+0x8e22:tī # 踢
+0x8e23:bó # 踣
+0x8e24:zú # 踤
+0x8e25:qiè # 踥
+0x8e26:qī,yǐ # 踦
+0x8e27:cù # 踧
+0x8e28:zōng # 踨
+0x8e29:cǎi # 踩
+0x8e2a:zōng # 踪
+0x8e2b:pèng # 踫
+0x8e2c:zhì # 踬
+0x8e2d:zhēng # 踭
+0x8e2e:diǎn # 踮
+0x8e2f:zhí # 踯
+0x8e30:yú # 踰
+0x8e31:duó # 踱
+0x8e32:dùn # 踲
+0x8e33:chuǎn # 踳
+0x8e34:yǒng # 踴
+0x8e35:zhǒng # 踵
+0x8e36:dì # 踶
+0x8e37:zhě # 踷
+0x8e38:chěn # 踸
+0x8e39:chuài # 踹
+0x8e3a:jiàn # 踺
+0x8e3b:guā # 踻
+0x8e3c:táng # 踼
+0x8e3d:jǔ # 踽
+0x8e3e:fú # 踾
+0x8e3f:cù # 踿
+0x8e40:dié # 蹀
+0x8e41:pián # 蹁
+0x8e42:róu # 蹂
+0x8e43:nuò # 蹃
+0x8e44:tí # 蹄
+0x8e45:chǎ # 蹅
+0x8e46:tuǐ # 蹆
+0x8e47:jiǎn # 蹇
+0x8e48:dǎo # 蹈
+0x8e49:cuō # 蹉
+0x8e4a:qī,xī # 蹊
+0x8e4b:tà # 蹋
+0x8e4c:qiāng # 蹌
+0x8e4d:niǎn # 蹍
+0x8e4e:diān # 蹎
+0x8e4f:tí # 蹏
+0x8e50:jí # 蹐
+0x8e51:niè # 蹑
+0x8e52:pán # 蹒
+0x8e53:liū # 蹓
+0x8e54:zàn # 蹔
+0x8e55:bì # 蹕
+0x8e56:chōng # 蹖
+0x8e57:lù # 蹗
+0x8e58:liáo # 蹘
+0x8e59:cù # 蹙
+0x8e5a:tāng # 蹚
+0x8e5b:dài # 蹛
+0x8e5c:sù # 蹜
+0x8e5d:xǐ # 蹝
+0x8e5e:kuǐ # 蹞
+0x8e5f:jì # 蹟
+0x8e60:zhí # 蹠
+0x8e61:qiāng # 蹡
+0x8e62:dí,zhí # 蹢
+0x8e63:pán # 蹣
+0x8e64:zōng # 蹤
+0x8e65:lián # 蹥
+0x8e66:bèng # 蹦
+0x8e67:zāo # 蹧
+0x8e68:niǎn # 蹨
+0x8e69:bié # 蹩
+0x8e6a:tuí # 蹪
+0x8e6b:jú # 蹫
+0x8e6c:dēng # 蹬
+0x8e6d:cèng # 蹭
+0x8e6e:xiān # 蹮
+0x8e6f:fán # 蹯
+0x8e70:chú # 蹰
+0x8e71:zhōng # 蹱
+0x8e72:dūn,cún # 蹲
+0x8e73:bō # 蹳
+0x8e74:cù,jiu # 蹴
+0x8e75:cù # 蹵
+0x8e76:jué,juě # 蹶
+0x8e77:jué # 蹷
+0x8e78:lìn # 蹸
+0x8e79:tà # 蹹
+0x8e7a:qiāo # 蹺
+0x8e7b:qiāo,juē,jiǎo # 蹻
+0x8e7c:pǔ # 蹼
+0x8e7d:liāo # 蹽
+0x8e7e:dūn # 蹾
+0x8e7f:cuān # 蹿
+0x8e80:guàn # 躀
+0x8e81:zào # 躁
+0x8e82:tà # 躂
+0x8e83:bì # 躃
+0x8e84:bì # 躄
+0x8e85:zhú # 躅
+0x8e86:jù # 躆
+0x8e87:chú # 躇
+0x8e88:qiào # 躈
+0x8e89:dǔn # 躉
+0x8e8a:chóu # 躊
+0x8e8b:jī # 躋
+0x8e8c:wǔ # 躌
+0x8e8d:yuè # 躍
+0x8e8e:niǎn # 躎
+0x8e8f:lìn # 躏
+0x8e90:liè # 躐
+0x8e91:zhí # 躑
+0x8e92:lì,luò # 躒
+0x8e93:zhì # 躓
+0x8e94:chán # 躔
+0x8e95:chú # 躕
+0x8e96:duàn # 躖
+0x8e97:wèi # 躗
+0x8e98:lóng,lǒng # 躘
+0x8e99:lìn # 躙
+0x8e9a:xiān # 躚
+0x8e9b:wèi # 躛
+0x8e9c:zuān # 躜
+0x8e9d:lán # 躝
+0x8e9e:xiè # 躞
+0x8e9f:ráng # 躟
+0x8ea0:sǎ,xiè # 躠
+0x8ea1:niè # 躡
+0x8ea2:tà # 躢
+0x8ea3:qú # 躣
+0x8ea4:jí # 躤
+0x8ea5:cuān # 躥
+0x8ea6:zuān # 躦
+0x8ea7:xǐ # 躧
+0x8ea8:kuí # 躨
+0x8ea9:jué # 躩
+0x8eaa:lìn # 躪
+0x8eab:shēn # 身
+0x8eac:gōng # 躬
+0x8ead:dān # 躭
+0x8eaf:qū # 躯
+0x8eb0:tǐ # 躰
+0x8eb1:duǒ # 躱
+0x8eb2:duǒ # 躲
+0x8eb3:gōng # 躳
+0x8eb4:láng # 躴
+0x8eb6:luǒ # 躶
+0x8eb7:ǎi # 躷
+0x8eb8:jī # 躸
+0x8eb9:jū # 躹
+0x8eba:tǎng # 躺
+0x8ebd:yǎn # 躽
+0x8ebf:kāng # 躿
+0x8ec0:qū # 軀
+0x8ec1:lóu # 軁
+0x8ec2:lào # 軂
+0x8ec3:duǒ # 軃
+0x8ec4:zhí # 軄
+0x8ec6:tǐ # 軆
+0x8ec7:dào # 軇
+0x8ec9:yù # 軉
+0x8eca:chē,jū # 車
+0x8ecb:yà,zhá,gá # 軋
+0x8ecc:guǐ # 軌
+0x8ecd:jūn # 軍
+0x8ece:wèi # 軎
+0x8ecf:yuè # 軏
+0x8ed0:xìn,xiàn # 軐
+0x8ed1:dài # 軑
+0x8ed2:xuān # 軒
+0x8ed3:fàn,guǐ # 軓
+0x8ed4:rèn # 軔
+0x8ed5:shān # 軕
+0x8ed6:kuáng # 軖
+0x8ed7:shū # 軗
+0x8ed8:tún # 軘
+0x8ed9:chén # 軙
+0x8eda:dài # 軚
+0x8edb:è # 軛
+0x8edc:nà # 軜
+0x8edd:qí # 軝
+0x8ede:máo # 軞
+0x8edf:ruǎn # 軟
+0x8ee0:kuáng # 軠
+0x8ee1:qián # 軡
+0x8ee2:zhuàn,zhuǎn # 転
+0x8ee3:hōng # 軣
+0x8ee4:hū # 軤
+0x8ee5:qú # 軥
+0x8ee6:kuàng # 軦
+0x8ee7:dǐ # 軧
+0x8ee8:líng # 軨
+0x8ee9:dài # 軩
+0x8eea:āo,ào # 軪
+0x8eeb:zhěn # 軫
+0x8eec:fàn # 軬
+0x8eed:kuāng # 軭
+0x8eee:yǎng # 軮
+0x8eef:pēng # 軯
+0x8ef0:bèi # 軰
+0x8ef1:gū # 軱
+0x8ef2:gū # 軲
+0x8ef3:páo # 軳
+0x8ef4:zhù # 軴
+0x8ef5:rǒng # 軵
+0x8ef6:è # 軶
+0x8ef7:bá # 軷
+0x8ef8:zhóu,zhòu # 軸
+0x8ef9:zhǐ # 軹
+0x8efa:yáo # 軺
+0x8efb:kē,kě # 軻
+0x8efc:yì,dié # 軼
+0x8efd:qīng # 軽
+0x8efe:shì # 軾
+0x8eff:píng # 軿
+0x8f00:ér # 輀
+0x8f01:gǒng # 輁
+0x8f02:jú # 輂
+0x8f03:jiào # 較
+0x8f04:guāng # 輄
+0x8f05:lù # 輅
+0x8f06:kǎi # 輆
+0x8f07:quán # 輇
+0x8f08:zhōu # 輈
+0x8f09:zài # 載
+0x8f0a:zhì # 輊
+0x8f0b:shē # 輋
+0x8f0c:liàng # 輌
+0x8f0d:yù # 輍
+0x8f0e:shāo # 輎
+0x8f0f:yóu # 輏
+0x8f10:wàn # 輐
+0x8f11:yǐn # 輑
+0x8f12:zhé # 輒
+0x8f13:wǎn # 輓
+0x8f14:fǔ # 輔
+0x8f15:qīng # 輕
+0x8f16:zhōu # 輖
+0x8f17:ní # 輗
+0x8f18:líng # 輘
+0x8f19:zhé # 輙
+0x8f1a:hàn,zhàn # 輚
+0x8f1b:liàng # 輛
+0x8f1c:zī # 輜
+0x8f1d:huī # 輝
+0x8f1e:wǎng # 輞
+0x8f1f:chuò # 輟
+0x8f20:guǒ # 輠
+0x8f21:kǎn # 輡
+0x8f22:yǐ # 輢
+0x8f23:péng # 輣
+0x8f24:qiàn # 輤
+0x8f25:gǔn # 輥
+0x8f26:niǎn # 輦
+0x8f27:píng # 輧
+0x8f28:guǎn # 輨
+0x8f29:bèi # 輩
+0x8f2a:lún # 輪
+0x8f2b:pái # 輫
+0x8f2c:liáng # 輬
+0x8f2d:ruǎn # 輭
+0x8f2e:róu # 輮
+0x8f2f:jí # 輯
+0x8f30:yáng # 輰
+0x8f31:xián # 輱
+0x8f32:chuán # 輲
+0x8f33:còu # 輳
+0x8f34:chūn # 輴
+0x8f35:gé # 輵
+0x8f36:yóu # 輶
+0x8f37:hōng # 輷
+0x8f38:shū # 輸
+0x8f39:fù # 輹
+0x8f3a:zī # 輺
+0x8f3b:fú # 輻
+0x8f3c:wēn # 輼
+0x8f3d:fàn # 輽
+0x8f3e:zhǎn # 輾
+0x8f3f:yú # 輿
+0x8f40:wēn # 轀
+0x8f41:tāo # 轁
+0x8f42:gǔ # 轂
+0x8f43:zhēn # 轃
+0x8f44:xiá # 轄
+0x8f45:yuán # 轅
+0x8f46:lù # 轆
+0x8f47:jiāo # 轇
+0x8f48:cháo # 轈
+0x8f49:zhuǎn # 轉
+0x8f4a:wèi # 轊
+0x8f4b:hūn # 轋
+0x8f4d:zhé # 轍
+0x8f4e:jiào # 轎
+0x8f4f:zhàn # 轏
+0x8f50:bú # 轐
+0x8f51:lǎo # 轑
+0x8f52:fén # 轒
+0x8f53:fān # 轓
+0x8f54:lín # 轔
+0x8f55:gé # 轕
+0x8f56:sè # 轖
+0x8f57:kǎn # 轗
+0x8f58:huàn # 轘
+0x8f59:yǐ # 轙
+0x8f5a:jí # 轚
+0x8f5b:duì # 轛
+0x8f5c:ér # 轜
+0x8f5d:yú # 轝
+0x8f5e:jiàn # 轞
+0x8f5f:hōng # 轟
+0x8f60:léi # 轠
+0x8f61:pèi # 轡
+0x8f62:lì # 轢
+0x8f63:lì # 轣
+0x8f64:lú # 轤
+0x8f65:lìn # 轥
+0x8f66:chē,jū # 车
+0x8f67:yà,zhá,gá # 轧
+0x8f68:guǐ # 轨
+0x8f69:xuān # 轩
+0x8f6a:dài # 轪
+0x8f6b:rèn # 轫
+0x8f6c:zhuǎn,zhuàn,zhuǎi # 转
+0x8f6d:è # 轭
+0x8f6e:lún # 轮
+0x8f6f:ruǎn # 软
+0x8f70:hōng # 轰
+0x8f71:gū # 轱
+0x8f72:kē # 轲
+0x8f73:lú # 轳
+0x8f74:zhóu,zhòu # 轴
+0x8f75:zhǐ # 轵
+0x8f76:yì # 轶
+0x8f77:hū # 轷
+0x8f78:zhěn # 轸
+0x8f79:lì # 轹
+0x8f7a:yáo # 轺
+0x8f7b:qīng # 轻
+0x8f7c:shì # 轼
+0x8f7d:zǎi,zài # 载
+0x8f7e:zhì # 轾
+0x8f7f:jiào # 轿
+0x8f80:zhōu # 辀
+0x8f81:quán # 辁
+0x8f82:lù # 辂
+0x8f83:jiào # 较
+0x8f84:zhé # 辄
+0x8f85:fǔ # 辅
+0x8f86:liàng # 辆
+0x8f87:niǎn # 辇
+0x8f88:bèi # 辈
+0x8f89:huī # 辉
+0x8f8a:gǔn # 辊
+0x8f8b:wǎng # 辋
+0x8f8c:liáng # 辌
+0x8f8d:chuò # 辍
+0x8f8e:zī # 辎
+0x8f8f:còu # 辏
+0x8f90:fú # 辐
+0x8f91:jí # 辑
+0x8f92:wēn # 辒
+0x8f93:shū # 输
+0x8f94:pèi # 辔
+0x8f95:yuán # 辕
+0x8f96:xiá # 辖
+0x8f97:zhǎn,niǎn # 辗
+0x8f98:lù # 辘
+0x8f99:zhé # 辙
+0x8f9a:lín # 辚
+0x8f9b:xīn # 辛
+0x8f9c:gū # 辜
+0x8f9d:cí # 辝
+0x8f9e:cí # 辞
+0x8f9f:bì,pì # 辟
+0x8fa0:zuì # 辠
+0x8fa1:biàn # 辡
+0x8fa2:là # 辢
+0x8fa3:là # 辣
+0x8fa4:cí # 辤
+0x8fa5:xuē # 辥
+0x8fa6:bàn # 辦
+0x8fa7:biàn # 辧
+0x8fa8:biàn # 辨
+0x8fa9:biàn # 辩
+0x8fab:biàn # 辫
+0x8fac:bān # 辬
+0x8fad:cí # 辭
+0x8fae:biàn # 辮
+0x8faf:biàn # 辯
+0x8fb0:chén # 辰
+0x8fb1:rǔ # 辱
+0x8fb2:nóng # 農
+0x8fb3:nóng # 辳
+0x8fb4:zhěn # 辴
+0x8fb5:chuò # 辵
+0x8fb6:chuò # 辶
+0x8fb8:réng # 辸
+0x8fb9:biān # 边
+0x8fba:dào,biān # 辺
+0x8fbd:liáo # 辽
+0x8fbe:dá # 达
+0x8fbf:chān # 辿
+0x8fc0:gān # 迀
+0x8fc1:qiān # 迁
+0x8fc2:yū # 迂
+0x8fc3:yū # 迃
+0x8fc4:qì # 迄
+0x8fc5:xùn # 迅
+0x8fc6:yǐ,yí # 迆
+0x8fc7:guò,guo,guō # 过
+0x8fc8:mài # 迈
+0x8fc9:qī # 迉
+0x8fca:zā # 迊
+0x8fcb:wàng,kuāng # 迋
+0x8fcd:zhūn # 迍
+0x8fce:yíng # 迎
+0x8fcf:dá # 迏
+0x8fd0:yùn # 运
+0x8fd1:jìn # 近
+0x8fd2:háng # 迒
+0x8fd3:yà # 迓
+0x8fd4:fǎn # 返
+0x8fd5:wǔ # 迕
+0x8fd6:dá # 迖
+0x8fd7:é # 迗
+0x8fd8:hái,huán # 还
+0x8fd9:zhè,zhèi # 这
+0x8fdb:jìn # 进
+0x8fdc:yuǎn,yuàn # 远
+0x8fdd:wéi # 违
+0x8fde:lián # 连
+0x8fdf:chí # 迟
+0x8fe0:chè # 迠
+0x8fe1:chí # 迡
+0x8fe2:tiáo # 迢
+0x8fe3:zhì,lì # 迣
+0x8fe4:yǐ,yí # 迤
+0x8fe5:jiǒng # 迥
+0x8fe6:jiā # 迦
+0x8fe7:chén # 迧
+0x8fe8:dài # 迨
+0x8fe9:ěr # 迩
+0x8fea:dí # 迪
+0x8feb:pò,pǎi # 迫
+0x8fec:zhù,wǎng # 迬
+0x8fed:dié # 迭
+0x8fee:zé # 迮
+0x8fef:táo # 迯
+0x8ff0:shù # 述
+0x8ff1:yǐ,yí # 迱
+0x8ff3:jìng # 迳
+0x8ff4:huí # 迴
+0x8ff5:dòng # 迵
+0x8ff6:yòu # 迶
+0x8ff7:mí # 迷
+0x8ff8:bèng # 迸
+0x8ff9:jì # 迹
+0x8ffa:nǎi # 迺
+0x8ffb:yí # 迻
+0x8ffc:jié # 迼
+0x8ffd:zhuī,duī # 追
+0x8ffe:liè # 迾
+0x8fff:xùn # 迿
+0x9000:tuì # 退
+0x9001:sòng # 送
+0x9002:shì # 适
+0x9003:táo # 逃
+0x9004:páng # 逄
+0x9005:hòu # 逅
+0x9006:nì # 逆
+0x9007:dùn # 逇
+0x9008:jiǒng # 逈
+0x9009:xuǎn # 选
+0x900a:xùn # 逊
+0x900b:bū # 逋
+0x900c:yōu # 逌
+0x900d:xiāo # 逍
+0x900e:qiú # 逎
+0x900f:tòu # 透
+0x9010:zhú # 逐
+0x9011:qiú # 逑
+0x9012:dì # 递
+0x9013:dì # 逓
+0x9014:tú # 途
+0x9015:jìng # 逕
+0x9016:tì # 逖
+0x9017:dòu # 逗
+0x9018:yǐ # 逘
+0x9019:zhè # 這
+0x901a:tōng # 通
+0x901b:guàng # 逛
+0x901c:wǔ # 逜
+0x901d:shì # 逝
+0x901e:chěng # 逞
+0x901f:sù # 速
+0x9020:zào # 造
+0x9021:qūn # 逡
+0x9022:féng # 逢
+0x9023:lián # 連
+0x9024:suò # 逤
+0x9025:huí # 逥
+0x9026:lǐ # 逦
+0x9028:lái # 逨
+0x9029:bèn # 逩
+0x902a:cuò # 逪
+0x902b:zhú,jué # 逫
+0x902c:bèng # 逬
+0x902d:huàn # 逭
+0x902e:dài # 逮
+0x902f:lù # 逯
+0x9030:yóu # 逰
+0x9031:zhōu # 週
+0x9032:jìn # 進
+0x9033:yù # 逳
+0x9034:chuō # 逴
+0x9035:kuí # 逵
+0x9036:wēi # 逶
+0x9037:tì # 逷
+0x9038:yì # 逸
+0x9039:dá # 逹
+0x903a:yuǎn # 逺
+0x903b:luó # 逻
+0x903c:bī # 逼
+0x903d:nuò # 逽
+0x903e:yú # 逾
+0x903f:dàng # 逿
+0x9040:suí # 遀
+0x9041:dùn # 遁
+0x9042:suì # 遂
+0x9043:yǎn # 遃
+0x9044:chuán # 遄
+0x9045:chí # 遅
+0x9046:dì,tí # 遆
+0x9047:yù # 遇
+0x9048:shí # 遈
+0x9049:zhēn # 遉
+0x904a:yóu # 遊
+0x904b:yùn # 運
+0x904c:è # 遌
+0x904d:biàn # 遍
+0x904e:guò # 過
+0x904f:è # 遏
+0x9050:xiá # 遐
+0x9051:huáng # 遑
+0x9052:qiú # 遒
+0x9053:dào # 道
+0x9054:dá # 達
+0x9055:wéi # 違
+0x9057:yí,wèi # 遗
+0x9058:gòu # 遘
+0x9059:yáo # 遙
+0x905a:chòu # 遚
+0x905b:liù # 遛
+0x905c:xùn # 遜
+0x905d:tà # 遝
+0x905e:dì # 遞
+0x905f:chí # 遟
+0x9060:yuǎn # 遠
+0x9061:sù # 遡
+0x9062:tà # 遢
+0x9063:qiǎn # 遣
+0x9065:yáo # 遥
+0x9066:guàn # 遦
+0x9067:zhāng # 遧
+0x9068:áo # 遨
+0x9069:shì # 適
+0x906a:cà # 遪
+0x906b:chì # 遫
+0x906c:sù # 遬
+0x906d:zāo # 遭
+0x906e:zhē # 遮
+0x906f:dùn # 遯
+0x9070:dì # 遰
+0x9071:lóu # 遱
+0x9072:chí # 遲
+0x9073:cuō # 遳
+0x9074:lín # 遴
+0x9075:zūn # 遵
+0x9076:rào # 遶
+0x9077:qiān # 遷
+0x9078:xuǎn # 選
+0x9079:yù # 遹
+0x907a:yí,wèi,suí # 遺
+0x907b:è # 遻
+0x907c:liáo # 遼
+0x907d:jù # 遽
+0x907e:shì # 遾
+0x907f:bì # 避
+0x9080:yāo # 邀
+0x9081:mài # 邁
+0x9082:xiè # 邂
+0x9083:suì # 邃
+0x9084:huán,hái # 還
+0x9085:zhān # 邅
+0x9086:téng # 邆
+0x9087:ěr # 邇
+0x9088:miǎo # 邈
+0x9089:biān # 邉
+0x908a:biān # 邊
+0x908b:lā # 邋
+0x908c:lí,chí # 邌
+0x908d:yuán # 邍
+0x908e:yáo # 邎
+0x908f:luó # 邏
+0x9090:lǐ # 邐
+0x9091:yì # 邑
+0x9092:tíng # 邒
+0x9093:dèng # 邓
+0x9094:qǐ # 邔
+0x9095:yōng # 邕
+0x9096:shān # 邖
+0x9097:hán # 邗
+0x9098:yú # 邘
+0x9099:máng # 邙
+0x909a:rú # 邚
+0x909b:qióng # 邛
+0x909d:kuàng # 邝
+0x909e:fū # 邞
+0x909f:kàng,háng # 邟
+0x90a0:bīn # 邠
+0x90a1:fāng # 邡
+0x90a2:xíng # 邢
+0x90a3:nà,nǎ,nèi,nā,nè,nuó # 那
+0x90a5:shěn # 邥
+0x90a6:bāng # 邦
+0x90a7:yuán # 邧
+0x90a8:cūn # 邨
+0x90a9:huǒ # 邩
+0x90aa:xié,yá,yé,yú,xú # 邪
+0x90ab:bāng # 邫
+0x90ac:wū # 邬
+0x90ad:jù # 邭
+0x90ae:yóu # 邮
+0x90af:hán # 邯
+0x90b0:tái # 邰
+0x90b1:qiū # 邱
+0x90b2:bì # 邲
+0x90b3:pī # 邳
+0x90b4:bǐng # 邴
+0x90b5:shào # 邵
+0x90b6:bèi # 邶
+0x90b7:wǎ # 邷
+0x90b8:dǐ # 邸
+0x90b9:zōu # 邹
+0x90ba:yè # 邺
+0x90bb:lín # 邻
+0x90bc:kuāng # 邼
+0x90bd:guī # 邽
+0x90be:zhū # 邾
+0x90bf:shī # 邿
+0x90c0:kū # 郀
+0x90c1:yù # 郁
+0x90c2:gāi,hái # 郂
+0x90c3:hé # 郃
+0x90c4:qiè,xì # 郄
+0x90c5:zhì # 郅
+0x90c6:jí # 郆
+0x90c7:xún,huán # 郇
+0x90c8:hòu # 郈
+0x90c9:xíng # 郉
+0x90ca:jiāo # 郊
+0x90cb:xí # 郋
+0x90cc:guī # 郌
+0x90cd:nà # 郍
+0x90ce:láng,làng # 郎
+0x90cf:jiá # 郏
+0x90d0:kuài # 郐
+0x90d1:zhèng # 郑
+0x90d3:yùn # 郓
+0x90d4:yán # 郔
+0x90d5:chéng # 郕
+0x90d6:dòu # 郖
+0x90d7:xī # 郗
+0x90d8:lǚ # 郘
+0x90d9:fǔ # 郙
+0x90da:wú # 郚
+0x90db:fú # 郛
+0x90dc:gào # 郜
+0x90dd:hǎo # 郝
+0x90de:láng # 郞
+0x90df:jiá # 郟
+0x90e0:gěng # 郠
+0x90e1:jùn # 郡
+0x90e2:yǐng # 郢
+0x90e3:bó # 郣
+0x90e4:xì # 郤
+0x90e5:bèi # 郥
+0x90e6:lì,zhí # 郦
+0x90e7:yún # 郧
+0x90e8:bù # 部
+0x90e9:xiáo,ǎo # 郩
+0x90ea:qī # 郪
+0x90eb:pí # 郫
+0x90ec:qīng # 郬
+0x90ed:guō # 郭
+0x90ef:tán # 郯
+0x90f0:zōu # 郰
+0x90f1:píng # 郱
+0x90f2:lái # 郲
+0x90f3:ní # 郳
+0x90f4:chēn # 郴
+0x90f5:yóu # 郵
+0x90f6:bù # 郶
+0x90f7:xiāng # 郷
+0x90f8:dān # 郸
+0x90f9:jú # 郹
+0x90fa:yōng # 郺
+0x90fb:qiāo # 郻
+0x90fc:yī # 郼
+0x90fd:dōu,dū # 都
+0x90fe:yǎn # 郾
+0x90ff:méi # 郿
+0x9100:ruò # 鄀
+0x9101:bèi # 鄁
+0x9102:è # 鄂
+0x9103:shū # 鄃
+0x9104:juàn # 鄄
+0x9105:yǔ # 鄅
+0x9106:yùn # 鄆
+0x9107:hóu # 鄇
+0x9108:kuí # 鄈
+0x9109:xiāng # 鄉
+0x910a:xiāng # 鄊
+0x910b:sōu # 鄋
+0x910c:táng # 鄌
+0x910d:míng # 鄍
+0x910e:xī # 鄎
+0x910f:rǔ # 鄏
+0x9110:chù # 鄐
+0x9111:zī # 鄑
+0x9112:zōu # 鄒
+0x9113:yì # 鄓
+0x9114:wū # 鄔
+0x9115:xiāng # 鄕
+0x9116:yún # 鄖
+0x9117:hào # 鄗
+0x9118:yōng # 鄘
+0x9119:bǐ # 鄙
+0x911a:mào # 鄚
+0x911b:cháo # 鄛
+0x911c:fū # 鄜
+0x911d:liǎo # 鄝
+0x911e:yín # 鄞
+0x911f:zhuān # 鄟
+0x9120:hù # 鄠
+0x9121:qiāo # 鄡
+0x9122:yān # 鄢
+0x9123:zhāng # 鄣
+0x9124:màn # 鄤
+0x9125:qiāo # 鄥
+0x9126:xǔ # 鄦
+0x9127:dèng # 鄧
+0x9128:bì # 鄨
+0x9129:xún # 鄩
+0x912a:bì # 鄪
+0x912b:zēng # 鄫
+0x912c:wéi # 鄬
+0x912d:zhèng # 鄭
+0x912e:mào # 鄮
+0x912f:shàn # 鄯
+0x9130:lín # 鄰
+0x9131:pó # 鄱
+0x9132:dān # 鄲
+0x9133:méng # 鄳
+0x9134:yè # 鄴
+0x9135:cào # 鄵
+0x9136:kuài # 鄶
+0x9137:fēng # 鄷
+0x9138:méng # 鄸
+0x9139:zōu # 鄹
+0x913a:kuàng # 鄺
+0x913b:liǎn # 鄻
+0x913c:zàn # 鄼
+0x913d:chán # 鄽
+0x913e:yōu # 鄾
+0x913f:qí # 鄿
+0x9140:yàn # 酀
+0x9141:chán # 酁
+0x9142:cuó,zàn # 酂
+0x9143:líng # 酃
+0x9144:huān # 酄
+0x9145:xī # 酅
+0x9146:fēng # 酆
+0x9147:cuó,zàn # 酇
+0x9148:lì # 酈
+0x9149:yǒu # 酉
+0x914a:dīng,dǐng # 酊
+0x914b:qiú # 酋
+0x914c:zhuó # 酌
+0x914d:pèi # 配
+0x914e:zhòu # 酎
+0x914f:yǐ # 酏
+0x9150:gān # 酐
+0x9151:yú # 酑
+0x9152:jiǔ # 酒
+0x9153:yǎn # 酓
+0x9154:zuì # 酔
+0x9155:máo # 酕
+0x9156:dān # 酖
+0x9157:xù # 酗
+0x9158:dòu # 酘
+0x9159:zhēn # 酙
+0x915a:fēn # 酚
+0x915d:yùn # 酝
+0x915e:tài # 酞
+0x915f:tiān # 酟
+0x9160:qiǎ # 酠
+0x9161:tuó # 酡
+0x9162:zuò,cù # 酢
+0x9163:hān # 酣
+0x9164:gū # 酤
+0x9165:sū # 酥
+0x9166:pō,fā # 酦
+0x9167:chóu # 酧
+0x9168:zài # 酨
+0x9169:mǐng # 酩
+0x916a:lào # 酪
+0x916b:chuò # 酫
+0x916c:chóu # 酬
+0x916d:yòu # 酭
+0x916e:tóng # 酮
+0x916f:zhǐ # 酯
+0x9170:xiān # 酰
+0x9171:jiàng # 酱
+0x9172:chéng # 酲
+0x9173:yìn # 酳
+0x9174:tú # 酴
+0x9175:jiào # 酵
+0x9176:méi # 酶
+0x9177:kù # 酷
+0x9178:suān # 酸
+0x9179:lèi # 酹
+0x917a:pú # 酺
+0x917b:zuì # 酻
+0x917c:hǎi # 酼
+0x917d:yàn # 酽
+0x917e:shī,shāi # 酾
+0x917f:niàng # 酿
+0x9180:wéi # 醀
+0x9181:lù # 醁
+0x9182:lǎn # 醂
+0x9183:yān # 醃
+0x9184:táo # 醄
+0x9185:pēi # 醅
+0x9186:zhǎn # 醆
+0x9187:chún # 醇
+0x9188:tán,dàn # 醈
+0x9189:zuì # 醉
+0x918a:zhuì # 醊
+0x918b:cù # 醋
+0x918c:kūn # 醌
+0x918d:tí,tǐ # 醍
+0x918e:xián # 醎
+0x918f:dū # 醏
+0x9190:hú # 醐
+0x9191:xǔ # 醑
+0x9192:xǐng # 醒
+0x9193:tǎn # 醓
+0x9194:qiú,chōu # 醔
+0x9195:chún # 醕
+0x9196:yùn # 醖
+0x9197:pō,fā # 醗
+0x9198:kē # 醘
+0x9199:sōu # 醙
+0x919a:mí # 醚
+0x919b:quán # 醛
+0x919c:chǒu # 醜
+0x919d:cuō # 醝
+0x919e:yùn # 醞
+0x919f:yòng # 醟
+0x91a0:àng # 醠
+0x91a1:zhà # 醡
+0x91a2:hǎi # 醢
+0x91a3:táng # 醣
+0x91a4:jiàng # 醤
+0x91a5:piǎo # 醥
+0x91a6:chǎn,chěn # 醦
+0x91a7:yù # 醧
+0x91a8:lí # 醨
+0x91a9:zāo # 醩
+0x91aa:láo # 醪
+0x91ab:yī # 醫
+0x91ac:jiàng # 醬
+0x91ad:bú # 醭
+0x91ae:jiào # 醮
+0x91af:xī # 醯
+0x91b0:tán # 醰
+0x91b1:pō,fā # 醱
+0x91b2:nóng # 醲
+0x91b3:yì,shì # 醳
+0x91b4:lǐ # 醴
+0x91b5:jù # 醵
+0x91b6:yàn,liǎn,xiān # 醶
+0x91b7:yì # 醷
+0x91b8:niàng # 醸
+0x91b9:rú # 醹
+0x91ba:xūn # 醺
+0x91bb:chóu # 醻
+0x91bc:yàn # 醼
+0x91bd:líng # 醽
+0x91be:mí # 醾
+0x91bf:mí # 醿
+0x91c0:niàng,niáng # 釀
+0x91c1:xìn # 釁
+0x91c2:jiào # 釂
+0x91c3:shī # 釃
+0x91c4:mí # 釄
+0x91c5:yàn # 釅
+0x91c6:biàn # 釆
+0x91c7:cǎi,cài # 采
+0x91c8:shì # 釈
+0x91c9:yòu # 釉
+0x91ca:shì # 释
+0x91cb:shì # 釋
+0x91cc:lǐ # 里
+0x91cd:zhòng,chóng # 重
+0x91ce:yě # 野
+0x91cf:liáng,liàng # 量
+0x91d0:lí,xǐ,xī # 釐
+0x91d1:jīn # 金
+0x91d3:gá # 釓
+0x91d4:yǐ # 釔
+0x91d5:liǎo,liào # 釕
+0x91d6:dāo # 釖
+0x91d7:zhāo # 釗
+0x91d8:dīng,dìng # 釘
+0x91d9:pō # 釙
+0x91da:qiú # 釚
+0x91db:hé # 釛
+0x91dc:fǔ # 釜
+0x91dd:zhēn # 針
+0x91de:zhí # 釞
+0x91df:bā # 釟
+0x91e0:luàn # 釠
+0x91e1:fǔ # 釡
+0x91e2:nǎi # 釢
+0x91e3:diào # 釣
+0x91e4:shān,shàn # 釤
+0x91e5:qiǎo,jiǎo # 釥
+0x91e6:kòu # 釦
+0x91e7:chuàn # 釧
+0x91e8:zǐ # 釨
+0x91e9:fán # 釩
+0x91ea:huá,yú # 釪
+0x91eb:huá,wū # 釫
+0x91ec:hàn # 釬
+0x91ed:gāng # 釭
+0x91ee:qí # 釮
+0x91ef:máng # 釯
+0x91f0:rì,rèn,jiàn # 釰
+0x91f1:dì,dài # 釱
+0x91f2:sì # 釲
+0x91f3:xì # 釳
+0x91f4:yì # 釴
+0x91f5:chāi # 釵
+0x91f6:shī,yí # 釶
+0x91f7:tǔ # 釷
+0x91f8:xī # 釸
+0x91f9:nǚ # 釹
+0x91fa:qiān # 釺
+0x91fc:rì,rèn,jiàn # 釼
+0x91fd:pī,zhāo # 釽
+0x91fe:yé,yá # 釾
+0x91ff:jīn,yǐn,yín # 釿
+0x9200:bǎ,pá # 鈀
+0x9201:fāng # 鈁
+0x9202:chén # 鈂
+0x9203:xíng # 鈃
+0x9204:dǒu # 鈄
+0x9205:yuè # 鈅
+0x9206:qiān # 鈆
+0x9207:fū # 鈇
+0x9208:bù # 鈈
+0x9209:nà # 鈉
+0x920a:xīn # 鈊
+0x920b:é # 鈋
+0x920c:jué # 鈌
+0x920d:dùn # 鈍
+0x920e:gōu # 鈎
+0x920f:yǐn # 鈏
+0x9210:qián # 鈐
+0x9211:bǎn # 鈑
+0x9212:sà # 鈒
+0x9213:rèn # 鈓
+0x9214:chāo # 鈔
+0x9215:niǔ # 鈕
+0x9216:fēn # 鈖
+0x9217:yǔn # 鈗
+0x9218:yǐ # 鈘
+0x9219:qín # 鈙
+0x921a:pī # 鈚
+0x921b:guō # 鈛
+0x921c:hóng # 鈜
+0x921d:yín # 鈝
+0x921e:jūn # 鈞
+0x921f:diào # 鈟
+0x9220:yì # 鈠
+0x9221:zhōng # 鈡
+0x9222:xǐ # 鈢
+0x9223:gài # 鈣
+0x9224:rì # 鈤
+0x9225:huǒ # 鈥
+0x9226:tài # 鈦
+0x9227:kàng # 鈧
+0x922c:duó # 鈬
+0x922d:zī # 鈭
+0x922e:ní # 鈮
+0x922f:tú # 鈯
+0x9230:shì # 鈰
+0x9231:mín # 鈱
+0x9232:gū # 鈲
+0x9233:kē # 鈳
+0x9234:líng # 鈴
+0x9235:bǐng # 鈵
+0x9236:sì # 鈶
+0x9237:gǔ # 鈷
+0x9238:bó # 鈸
+0x9239:pí # 鈹
+0x923a:yù # 鈺
+0x923b:sì # 鈻
+0x923c:zuó # 鈼
+0x923d:bū # 鈽
+0x923e:yóu # 鈾
+0x923f:diàn # 鈿
+0x9240:jiǎ # 鉀
+0x9241:zhēn # 鉁
+0x9242:shǐ # 鉂
+0x9243:shì # 鉃
+0x9244:tiě # 鉄
+0x9245:jù # 鉅
+0x9246:zuān # 鉆
+0x9247:shī # 鉇
+0x9248:tā,tuó # 鉈
+0x9249:xuàn # 鉉
+0x924a:zhāo # 鉊
+0x924b:bào,páo # 鉋
+0x924c:hé # 鉌
+0x924d:bì # 鉍
+0x924e:shēng # 鉎
+0x924f:chú # 鉏
+0x9250:shí # 鉐
+0x9251:bó # 鉑
+0x9252:zhù # 鉒
+0x9253:chì # 鉓
+0x9254:zā # 鉔
+0x9255:pǒ # 鉕
+0x9256:tóng # 鉖
+0x9257:qián # 鉗
+0x9258:fú # 鉘
+0x9259:zhǎi # 鉙
+0x925a:mǎo # 鉚
+0x925b:qiān # 鉛
+0x925c:fú # 鉜
+0x925d:lì # 鉝
+0x925e:yuè # 鉞
+0x925f:pī # 鉟
+0x9260:yāng # 鉠
+0x9261:bàn # 鉡
+0x9262:bō # 鉢
+0x9263:jié # 鉣
+0x9264:gōu # 鉤
+0x9265:shù # 鉥
+0x9266:zhēng # 鉦
+0x9267:mǔ # 鉧
+0x9268:xǐ # 鉨
+0x9269:xǐ # 鉩
+0x926a:dì # 鉪
+0x926b:jiā # 鉫
+0x926c:mù # 鉬
+0x926d:tǎn # 鉭
+0x926e:shén # 鉮
+0x926f:yǐ # 鉯
+0x9270:sī # 鉰
+0x9271:kuàng # 鉱
+0x9272:kǎ # 鉲
+0x9273:běi # 鉳
+0x9274:jiàn # 鉴
+0x9275:tóng # 鉵
+0x9276:xíng # 鉶
+0x9277:hóng # 鉷
+0x9278:jiǎo # 鉸
+0x9279:chǐ # 鉹
+0x927a:ěr # 鉺
+0x927b:gè # 鉻
+0x927c:bǐng,píng # 鉼
+0x927d:shì # 鉽
+0x927e:máo # 鉾
+0x927f:hā,kē # 鉿
+0x9280:yín # 銀
+0x9281:jūn # 銁
+0x9282:zhōu # 銂
+0x9283:chòng # 銃
+0x9284:xiǎng,jiōng # 銄
+0x9285:tóng # 銅
+0x9286:mò # 銆
+0x9287:lèi # 銇
+0x9288:jī # 銈
+0x9289:yù,sì # 銉
+0x928a:xù,huì # 銊
+0x928b:rén,rěn # 銋
+0x928c:zùn # 銌
+0x928d:zhì # 銍
+0x928e:qióng # 銎
+0x928f:shàn,shuò # 銏
+0x9290:chì,lì # 銐
+0x9291:xiǎn,xǐ # 銑
+0x9292:xíng # 銒
+0x9293:quán # 銓
+0x9294:pī # 銔
+0x9295:tiě # 銕
+0x9296:zhū # 銖
+0x9297:hóu,xiàng # 銗
+0x9298:míng # 銘
+0x9299:kuǎ # 銙
+0x929a:diào,tiáo,yáo # 銚
+0x929b:xiān,kuò,tiǎn,guā # 銛
+0x929c:xián # 銜
+0x929d:xiū # 銝
+0x929e:jūn # 銞
+0x929f:chā # 銟
+0x92a0:lǎo # 銠
+0x92a1:jí # 銡
+0x92a2:pǐ # 銢
+0x92a3:rú # 銣
+0x92a4:mǐ # 銤
+0x92a5:yī # 銥
+0x92a6:yīn # 銦
+0x92a7:guāng # 銧
+0x92a8:ǎn # 銨
+0x92a9:diū # 銩
+0x92aa:yǒu # 銪
+0x92ab:sè # 銫
+0x92ac:kào # 銬
+0x92ad:qián # 銭
+0x92ae:luán # 銮
+0x92b0:āi # 銰
+0x92b1:diào # 銱
+0x92b2:hàn # 銲
+0x92b3:ruì # 銳
+0x92b4:shì,zhì # 銴
+0x92b5:kēng # 銵
+0x92b6:qiú # 銶
+0x92b7:xiāo # 銷
+0x92b8:zhé,niè # 銸
+0x92b9:xiù # 銹
+0x92ba:zàng # 銺
+0x92bb:tī # 銻
+0x92bc:cuò # 銼
+0x92bd:xiān,kuò,tiǎn,guā # 銽
+0x92be:hòng,gǒng # 銾
+0x92bf:zhōng,yōng # 銿
+0x92c0:tōu,tù,dòu # 鋀
+0x92c1:lǚ # 鋁
+0x92c2:méi,méng # 鋂
+0x92c3:láng # 鋃
+0x92c4:wàn,jiǎn # 鋄
+0x92c5:xīn # 鋅
+0x92c6:yún # 鋆
+0x92c7:bèi # 鋇
+0x92c8:wù # 鋈
+0x92c9:sù # 鋉
+0x92ca:yù # 鋊
+0x92cb:chán # 鋋
+0x92cc:tǐng,dìng # 鋌
+0x92cd:bó # 鋍
+0x92ce:hàn # 鋎
+0x92cf:jiá # 鋏
+0x92d0:hóng # 鋐
+0x92d1:juān,jiān,cuān # 鋑
+0x92d2:fēng # 鋒
+0x92d3:chān # 鋓
+0x92d4:wǎn # 鋔
+0x92d5:zhì # 鋕
+0x92d6:sī,tuó # 鋖
+0x92d7:xuān,juān,juàn # 鋗
+0x92d8:huá,wú,wū # 鋘
+0x92d9:wú,yǔ # 鋙
+0x92da:tiáo # 鋚
+0x92db:kuàng # 鋛
+0x92dc:zhuó,chuò # 鋜
+0x92dd:lüè # 鋝
+0x92de:xíng,xìng,jīng # 鋞
+0x92df:qǐn # 鋟
+0x92e0:shèn # 鋠
+0x92e1:hán # 鋡
+0x92e2:lüè # 鋢
+0x92e3:yé # 鋣
+0x92e4:chú # 鋤
+0x92e5:zèng # 鋥
+0x92e6:jū,jú # 鋦
+0x92e7:xiàn # 鋧
+0x92e8:é # 鋨
+0x92e9:máng # 鋩
+0x92ea:pū,pù # 鋪
+0x92eb:lí # 鋫
+0x92ec:pàn # 鋬
+0x92ed:ruì # 鋭
+0x92ee:chéng # 鋮
+0x92ef:gào # 鋯
+0x92f0:lǐ # 鋰
+0x92f1:tè # 鋱
+0x92f3:zhù # 鋳
+0x92f5:tū # 鋵
+0x92f6:liǔ # 鋶
+0x92f7:zuì,niè # 鋷
+0x92f8:jù,jū # 鋸
+0x92f9:chǎng # 鋹
+0x92fa:yuǎn,yuān,wǎn,wān # 鋺
+0x92fb:jiān,jiàn # 鋻
+0x92fc:gāng,gàng # 鋼
+0x92fd:diào # 鋽
+0x92fe:táo # 鋾
+0x92ff:shǎng # 鋿
+0x9300:lún # 錀
+0x9301:kè # 錁
+0x9302:líng # 錂
+0x9303:pī # 錃
+0x9304:lù # 錄
+0x9305:lí # 錅
+0x9306:qīng # 錆
+0x9307:péi # 錇
+0x9308:juǎn # 錈
+0x9309:mín # 錉
+0x930a:zuì # 錊
+0x930b:péng # 錋
+0x930c:àn # 錌
+0x930d:pī # 錍
+0x930e:xiàn # 錎
+0x930f:yā # 錏
+0x9310:zhuī # 錐
+0x9311:lèi # 錑
+0x9312:ā # 錒
+0x9313:kōng # 錓
+0x9314:tà # 錔
+0x9315:kūn # 錕
+0x9316:dú # 錖
+0x9317:nèi # 錗
+0x9318:chuí # 錘
+0x9319:zī # 錙
+0x931a:zhēng # 錚
+0x931b:bēn # 錛
+0x931c:niè # 錜
+0x931d:cóng # 錝
+0x931e:chún,duì # 錞
+0x931f:tán # 錟
+0x9320:dìng # 錠
+0x9321:qí # 錡
+0x9322:qián # 錢
+0x9323:zhuì # 錣
+0x9324:jī # 錤
+0x9325:yù # 錥
+0x9326:jǐn # 錦
+0x9327:guǎn # 錧
+0x9328:máo # 錨
+0x9329:chāng # 錩
+0x932a:tiǎn # 錪
+0x932b:xī # 錫
+0x932c:liàn # 錬
+0x932d:diāo # 錭
+0x932e:gù # 錮
+0x932f:cuò # 錯
+0x9330:shù # 錰
+0x9331:zhēn # 錱
+0x9332:lù # 録
+0x9333:měng # 錳
+0x9334:lù # 錴
+0x9335:huā # 錵
+0x9336:biǎo # 錶
+0x9337:gá # 錷
+0x9338:lái # 錸
+0x9339:kěn # 錹
+0x933c:nài # 錼
+0x933d:wàn # 錽
+0x933e:zàn # 錾
+0x9340:dé # 鍀
+0x9341:xiān # 鍁
+0x9343:huò # 鍃
+0x9344:liàng # 鍄
+0x9346:mén # 鍆
+0x9347:kǎi # 鍇
+0x9348:yāng # 鍈
+0x9349:chí # 鍉
+0x934a:liàn # 鍊
+0x934b:guō # 鍋
+0x934c:xiǎn # 鍌
+0x934d:dù # 鍍
+0x934e:tú # 鍎
+0x934f:wéi # 鍏
+0x9350:zōng # 鍐
+0x9351:fù # 鍑
+0x9352:róu # 鍒
+0x9353:jí # 鍓
+0x9354:è # 鍔
+0x9355:jūn # 鍕
+0x9356:chěn # 鍖
+0x9357:tí # 鍗
+0x9358:zhá # 鍘
+0x9359:hù # 鍙
+0x935a:yáng # 鍚
+0x935b:duàn # 鍛
+0x935c:xiá # 鍜
+0x935d:yú # 鍝
+0x935e:kēng # 鍞
+0x935f:shēng # 鍟
+0x9360:huáng # 鍠
+0x9361:wěi # 鍡
+0x9362:fù # 鍢
+0x9363:zhāo # 鍣
+0x9364:chā # 鍤
+0x9365:qiè # 鍥
+0x9366:shī # 鍦
+0x9367:hōng # 鍧
+0x9368:kuí # 鍨
+0x9369:nuò # 鍩
+0x936a:móu # 鍪
+0x936b:qiāo # 鍫
+0x936c:qiāo # 鍬
+0x936d:hóu # 鍭
+0x936e:tōu # 鍮
+0x936f:cōng # 鍯
+0x9370:huán # 鍰
+0x9371:yè # 鍱
+0x9372:mín # 鍲
+0x9373:jiàn # 鍳
+0x9374:duān # 鍴
+0x9375:jiàn # 鍵
+0x9376:sī # 鍶
+0x9377:kuí # 鍷
+0x9378:hú # 鍸
+0x9379:xuān # 鍹
+0x937a:zhě # 鍺
+0x937b:jié # 鍻
+0x937c:zhēn # 鍼
+0x937d:biān # 鍽
+0x937e:zhōng # 鍾
+0x937f:zī # 鍿
+0x9380:xiū # 鎀
+0x9381:yé # 鎁
+0x9382:měi # 鎂
+0x9383:pài # 鎃
+0x9384:āi # 鎄
+0x9385:jiè # 鎅
+0x9387:méi # 鎇
+0x9388:cuō,chā # 鎈
+0x9389:dā,tà # 鎉
+0x938a:bàng # 鎊
+0x938b:xiá # 鎋
+0x938c:lián # 鎌
+0x938d:suǒ,sè # 鎍
+0x938e:kài # 鎎
+0x938f:liú # 鎏
+0x9390:yáo,zú # 鎐
+0x9391:yè,tà,gé # 鎑
+0x9392:nòu # 鎒
+0x9393:wēng # 鎓
+0x9394:róng # 鎔
+0x9395:táng # 鎕
+0x9396:suǒ # 鎖
+0x9397:qiāng,chēng # 鎗
+0x9398:gé,lì # 鎘
+0x9399:shuò # 鎙
+0x939a:chuí # 鎚
+0x939b:bó # 鎛
+0x939c:pán # 鎜
+0x939d:dā # 鎝
+0x939e:bī,bì,pī # 鎞
+0x939f:sǎng # 鎟
+0x93a0:gāng # 鎠
+0x93a1:zī # 鎡
+0x93a2:wū # 鎢
+0x93a3:yíng # 鎣
+0x93a4:huàng # 鎤
+0x93a5:tiáo # 鎥
+0x93a6:liú,liù # 鎦
+0x93a7:kǎi # 鎧
+0x93a8:sǔn # 鎨
+0x93a9:shā # 鎩
+0x93aa:sōu # 鎪
+0x93ab:wàn,jiǎn # 鎫
+0x93ac:gǎo,hào # 鎬
+0x93ad:zhèn # 鎭
+0x93ae:zhèn # 鎮
+0x93af:láng # 鎯
+0x93b0:yì # 鎰
+0x93b1:yuán # 鎱
+0x93b2:tǎng # 鎲
+0x93b3:niè # 鎳
+0x93b4:xí # 鎴
+0x93b5:jiā # 鎵
+0x93b6:gē # 鎶
+0x93b7:mǎ # 鎷
+0x93b8:juān # 鎸
+0x93bb:suǒ # 鎻
+0x93bf:ná # 鎿
+0x93c0:lǔ # 鏀
+0x93c1:suǒ # 鏁
+0x93c2:ōu # 鏂
+0x93c3:zú,chuò # 鏃
+0x93c4:tuán # 鏄
+0x93c5:xiū,xiù # 鏅
+0x93c6:guàn # 鏆
+0x93c7:xuàn # 鏇
+0x93c8:liàn # 鏈
+0x93c9:shòu,sōu # 鏉
+0x93ca:ào # 鏊
+0x93cb:mǎn # 鏋
+0x93cc:mò # 鏌
+0x93cd:luó # 鏍
+0x93ce:bì # 鏎
+0x93cf:wèi # 鏏
+0x93d0:liú # 鏐
+0x93d1:dí,dī # 鏑
+0x93d2:sǎn,qiāo,càn # 鏒
+0x93d3:cōng # 鏓
+0x93d4:yí # 鏔
+0x93d5:lù,áo # 鏕
+0x93d6:áo # 鏖
+0x93d7:kēng # 鏗
+0x93d8:qiāng # 鏘
+0x93d9:cuī # 鏙
+0x93da:qī # 鏚
+0x93db:shǎng # 鏛
+0x93dc:tāng,táng # 鏜
+0x93dd:màn # 鏝
+0x93de:yōng # 鏞
+0x93df:chǎn # 鏟
+0x93e0:fēng # 鏠
+0x93e1:jìng # 鏡
+0x93e2:biāo # 鏢
+0x93e3:shù # 鏣
+0x93e4:lòu # 鏤
+0x93e5:xiù # 鏥
+0x93e6:cōng # 鏦
+0x93e7:lóng # 鏧
+0x93e8:zàn # 鏨
+0x93e9:jiàn,zàn # 鏩
+0x93ea:cáo # 鏪
+0x93eb:lí # 鏫
+0x93ec:xià # 鏬
+0x93ed:xī # 鏭
+0x93ee:kāng # 鏮
+0x93f0:bèng # 鏰
+0x93f3:zhēng # 鏳
+0x93f4:lù # 鏴
+0x93f5:huá # 鏵
+0x93f6:jí # 鏶
+0x93f7:pú # 鏷
+0x93f8:huì,suì,ruì # 鏸
+0x93f9:qiǎng,qiāng # 鏹
+0x93fa:pō # 鏺
+0x93fb:lín # 鏻
+0x93fc:sè # 鏼
+0x93fd:xiù # 鏽
+0x93fe:sǎn,xiàn,sà # 鏾
+0x93ff:chēng # 鏿
+0x9400:guì,kuì # 鐀
+0x9401:sī # 鐁
+0x9402:liú # 鐂
+0x9403:náo # 鐃
+0x9404:huáng # 鐄
+0x9405:piě # 鐅
+0x9406:suì # 鐆
+0x9407:fán # 鐇
+0x9408:qiáo # 鐈
+0x9409:quān # 鐉
+0x940a:xī # 鐊
+0x940b:tàng # 鐋
+0x940c:xiàng # 鐌
+0x940d:jué # 鐍
+0x940e:jiāo # 鐎
+0x940f:zūn # 鐏
+0x9410:liào # 鐐
+0x9411:qì # 鐑
+0x9412:láo # 鐒
+0x9413:duī # 鐓
+0x9414:xín # 鐔
+0x9415:zān # 鐕
+0x9416:jī # 鐖
+0x9417:jiǎn # 鐗
+0x9418:zhōng # 鐘
+0x9419:dèng # 鐙
+0x941a:yā # 鐚
+0x941b:yǐng # 鐛
+0x941c:duī # 鐜
+0x941d:jué # 鐝
+0x941e:nòu # 鐞
+0x941f:zān # 鐟
+0x9420:pǔ # 鐠
+0x9421:tiě # 鐡
+0x9424:dǐng # 鐤
+0x9425:shàn # 鐥
+0x9426:kāi # 鐦
+0x9427:jiǎn # 鐧
+0x9428:fèi # 鐨
+0x9429:suì # 鐩
+0x942a:lǔ # 鐪
+0x942b:juān # 鐫
+0x942c:huì # 鐬
+0x942d:yù # 鐭
+0x942e:lián # 鐮
+0x942f:zhuō # 鐯
+0x9430:qiāo # 鐰
+0x9431:jiàn # 鐱
+0x9432:zhuó # 鐲
+0x9433:léi # 鐳
+0x9434:bì # 鐴
+0x9435:tiě # 鐵
+0x9436:huán # 鐶
+0x9437:yè # 鐷
+0x9438:duó # 鐸
+0x9439:guò # 鐹
+0x943a:dāng,chēng # 鐺
+0x943b:jù # 鐻
+0x943c:fén # 鐼
+0x943d:dá # 鐽
+0x943e:bèi # 鐾
+0x943f:yì # 鐿
+0x9440:ài # 鑀
+0x9441:zōng # 鑁
+0x9442:xùn # 鑂
+0x9443:diào # 鑃
+0x9444:zhù # 鑄
+0x9445:héng # 鑅
+0x9446:zhuì # 鑆
+0x9447:jī # 鑇
+0x9448:niè # 鑈
+0x9449:hé # 鑉
+0x944a:huò # 鑊
+0x944b:qīng # 鑋
+0x944c:bīn # 鑌
+0x944d:yīng # 鑍
+0x944e:guì # 鑎
+0x944f:níng # 鑏
+0x9450:xū # 鑐
+0x9451:jiàn # 鑑
+0x9452:jiàn # 鑒
+0x9454:chǎ # 鑔
+0x9455:zhì # 鑕
+0x9456:miè # 鑖
+0x9457:lí # 鑗
+0x9458:léi # 鑘
+0x9459:jī # 鑙
+0x945a:zuān # 鑚
+0x945b:kuàng # 鑛
+0x945c:shǎng # 鑜
+0x945d:péng # 鑝
+0x945e:là # 鑞
+0x945f:dú # 鑟
+0x9460:shuò # 鑠
+0x9461:chuò # 鑡
+0x9462:lǜ # 鑢
+0x9463:biāo # 鑣
+0x9464:bào # 鑤
+0x9465:lǔ # 鑥
+0x9468:lóng # 鑨
+0x9469:è # 鑩
+0x946a:lú # 鑪
+0x946b:xīn # 鑫
+0x946c:jiàn # 鑬
+0x946d:lán # 鑭
+0x946e:bó # 鑮
+0x946f:jiān # 鑯
+0x9470:yuè,yào # 鑰
+0x9471:chán # 鑱
+0x9472:xiāng # 鑲
+0x9473:jiàn # 鑳
+0x9474:xī # 鑴
+0x9475:guàn # 鑵
+0x9476:cáng # 鑶
+0x9477:niè # 鑷
+0x9478:lěi # 鑸
+0x9479:cuān # 鑹
+0x947a:qú # 鑺
+0x947b:pàn # 鑻
+0x947c:luó # 鑼
+0x947d:zuān # 鑽
+0x947e:luán # 鑾
+0x947f:záo # 鑿
+0x9480:niè # 钀
+0x9481:jué # 钁
+0x9482:tǎng # 钂
+0x9483:zhú # 钃
+0x9484:làn # 钄
+0x9485:jīn # 钅
+0x9486:gá # 钆
+0x9487:yǐ # 钇
+0x9488:zhēn # 针
+0x9489:dīng,dìng # 钉
+0x948a:zhāo # 钊
+0x948b:pō # 钋
+0x948c:liǎo,liào # 钌
+0x948d:tǔ # 钍
+0x948e:qiān # 钎
+0x948f:chuàn # 钏
+0x9490:shān,shàn # 钐
+0x9491:sà,xì # 钑
+0x9492:fán # 钒
+0x9493:diào # 钓
+0x9494:mén # 钔
+0x9495:nǚ # 钕
+0x9496:yáng # 钖
+0x9497:chāi # 钗
+0x9498:xíng # 钘
+0x9499:gài # 钙
+0x949a:bù # 钚
+0x949b:tài # 钛
+0x949c:jù # 钜
+0x949d:dùn # 钝
+0x949e:chāo # 钞
+0x949f:zhōng # 钟
+0x94a0:nà # 钠
+0x94a1:bèi # 钡
+0x94a2:gāng,gàng # 钢
+0x94a3:bǎn # 钣
+0x94a4:qián # 钤
+0x94a5:yuè,yào # 钥
+0x94a6:qīn # 钦
+0x94a7:jūn # 钧
+0x94a8:wū # 钨
+0x94a9:gōu # 钩
+0x94aa:kàng # 钪
+0x94ab:fāng # 钫
+0x94ac:huǒ # 钬
+0x94ad:dǒu # 钭
+0x94ae:niǔ # 钮
+0x94af:bǎ,pá # 钯
+0x94b0:yù # 钰
+0x94b1:qián # 钱
+0x94b2:zhēng,zhèng # 钲
+0x94b3:qián # 钳
+0x94b4:gǔ # 钴
+0x94b5:bō # 钵
+0x94b6:kē # 钶
+0x94b7:pǒ # 钷
+0x94b8:bū # 钸
+0x94b9:bó # 钹
+0x94ba:yuè # 钺
+0x94bb:zuān,zuàn # 钻
+0x94bc:mù # 钼
+0x94bd:tǎn # 钽
+0x94be:jiǎ # 钾
+0x94bf:diàn,tián # 钿
+0x94c0:yóu # 铀
+0x94c1:tiě # 铁
+0x94c2:bó # 铂
+0x94c3:líng # 铃
+0x94c4:shuò # 铄
+0x94c5:qiān,yán # 铅
+0x94c6:mǎo # 铆
+0x94c7:bào,páo # 铇
+0x94c8:shì # 铈
+0x94c9:xuàn # 铉
+0x94ca:tā,tuó # 铊
+0x94cb:bì # 铋
+0x94cc:ní # 铌
+0x94cd:pí,pī # 铍
+0x94ce:duó # 铎
+0x94cf:xíng # 铏
+0x94d0:kào # 铐
+0x94d1:lǎo # 铑
+0x94d2:ěr # 铒
+0x94d3:máng # 铓
+0x94d4:yā,yà # 铔
+0x94d5:yǒu # 铕
+0x94d6:chéng # 铖
+0x94d7:jiá # 铗
+0x94d8:yé # 铘
+0x94d9:náo # 铙
+0x94da:zhì # 铚
+0x94db:dāng,chēng # 铛
+0x94dc:tóng # 铜
+0x94dd:lǚ # 铝
+0x94de:diào # 铞
+0x94df:yīn # 铟
+0x94e0:kǎi # 铠
+0x94e1:zhá # 铡
+0x94e2:zhū # 铢
+0x94e3:xiǎn,xǐ # 铣
+0x94e4:tǐng,dìng # 铤
+0x94e5:diū # 铥
+0x94e6:xiān,kuò,tiǎn,guā # 铦
+0x94e7:huá # 铧
+0x94e8:quán # 铨
+0x94e9:shā # 铩
+0x94ea:hā,kē # 铪
+0x94eb:diào,tiáo,yáo # 铫
+0x94ec:gè # 铬
+0x94ed:míng # 铭
+0x94ee:zhēng # 铮
+0x94ef:sè # 铯
+0x94f0:jiǎo # 铰
+0x94f1:yī # 铱
+0x94f2:chǎn # 铲
+0x94f3:chòng # 铳
+0x94f4:tàng,tāng # 铴
+0x94f5:ǎn # 铵
+0x94f6:yín # 银
+0x94f7:rú # 铷
+0x94f8:zhù # 铸
+0x94f9:láo # 铹
+0x94fa:pū,pù # 铺
+0x94fb:wú,yǔ # 铻
+0x94fc:lái # 铼
+0x94fd:tè # 铽
+0x94fe:liàn # 链
+0x94ff:kēng # 铿
+0x9500:xiāo # 销
+0x9501:suǒ # 锁
+0x9502:lǐ # 锂
+0x9503:zèng # 锃
+0x9504:chú # 锄
+0x9505:guō # 锅
+0x9506:gào # 锆
+0x9507:é # 锇
+0x9508:xiù # 锈
+0x9509:cuò # 锉
+0x950a:lüè # 锊
+0x950b:fēng # 锋
+0x950c:xīn # 锌
+0x950d:liǔ # 锍
+0x950e:kāi # 锎
+0x950f:jiǎn # 锏
+0x9510:ruì # 锐
+0x9511:tī # 锑
+0x9512:láng # 锒
+0x9513:qǐn # 锓
+0x9514:jū # 锔
+0x9515:ā # 锕
+0x9516:qiāng # 锖
+0x9517:zhě # 锗
+0x9518:nuò # 锘
+0x9519:cuò # 错
+0x951a:máo # 锚
+0x951b:bēn # 锛
+0x951c:qí # 锜
+0x951d:dé # 锝
+0x951e:kè # 锞
+0x951f:kūn # 锟
+0x9520:chāng # 锠
+0x9521:xī # 锡
+0x9522:gù # 锢
+0x9523:luó # 锣
+0x9524:chuí # 锤
+0x9525:zhuī # 锥
+0x9526:jǐn # 锦
+0x9527:zhì # 锧
+0x9528:xiān # 锨
+0x9529:juǎn # 锩
+0x952a:huò # 锪
+0x952b:péi # 锫
+0x952c:tán # 锬
+0x952d:dìng # 锭
+0x952e:jiàn # 键
+0x952f:jù # 锯
+0x9530:měng # 锰
+0x9531:zī # 锱
+0x9532:qiè # 锲
+0x9533:yīng # 锳
+0x9534:kǎi # 锴
+0x9535:qiāng # 锵
+0x9536:sī # 锶
+0x9537:è # 锷
+0x9538:chā # 锸
+0x9539:qiāo # 锹
+0x953a:zhōng # 锺
+0x953b:duàn # 锻
+0x953c:sōu # 锼
+0x953d:huáng # 锽
+0x953e:huán # 锾
+0x953f:āi # 锿
+0x9540:dù # 镀
+0x9541:měi # 镁
+0x9542:lòu # 镂
+0x9543:zī # 镃
+0x9544:fèi # 镄
+0x9545:méi # 镅
+0x9546:mò # 镆
+0x9547:zhèn # 镇
+0x9548:bó # 镈
+0x9549:gé,lì # 镉
+0x954a:niè # 镊
+0x954b:tǎng # 镋
+0x954c:juān # 镌
+0x954d:niè # 镍
+0x954e:ná # 镎
+0x954f:liú # 镏
+0x9550:gǎo,hào # 镐
+0x9551:bàng # 镑
+0x9552:yì # 镒
+0x9553:jiā # 镓
+0x9554:bīn # 镔
+0x9555:róng # 镕
+0x9556:biāo # 镖
+0x9557:tāng # 镗
+0x9558:màn # 镘
+0x9559:luó # 镙
+0x955a:bèng # 镚
+0x955b:yōng # 镛
+0x955c:jìng # 镜
+0x955d:dí # 镝
+0x955e:zú # 镞
+0x955f:xuàn # 镟
+0x9560:liú # 镠
+0x9561:xín,tán,chán # 镡
+0x9562:jué # 镢
+0x9563:liào # 镣
+0x9564:pú # 镤
+0x9565:lǔ # 镥
+0x9566:duī # 镦
+0x9567:lán # 镧
+0x9568:pǔ # 镨
+0x9569:cuān # 镩
+0x956a:qiǎng # 镪
+0x956b:dèng # 镫
+0x956c:huò # 镬
+0x956d:léi # 镭
+0x956e:huán # 镮
+0x956f:zhuó # 镯
+0x9570:lián # 镰
+0x9571:yì # 镱
+0x9572:chǎ # 镲
+0x9573:biāo # 镳
+0x9574:là # 镴
+0x9575:chán # 镵
+0x9576:xiāng # 镶
+0x9577:cháng,zhǎng # 長
+0x9578:cháng # 镸
+0x9579:jiǔ # 镹
+0x957a:ǎo # 镺
+0x957b:dié # 镻
+0x957c:jié # 镼
+0x957d:liǎo # 镽
+0x957e:mí # 镾
+0x957f:cháng,zhǎng # 长
+0x9580:mén # 門
+0x9581:mà # 閁
+0x9582:shuān # 閂
+0x9583:shǎn # 閃
+0x9584:huò,shǎn # 閄
+0x9585:mén # 閅
+0x9586:yán # 閆
+0x9587:bì # 閇
+0x9588:hàn,bì # 閈
+0x9589:bì # 閉
+0x958b:kāi # 開
+0x958c:kāng,kàng # 閌
+0x958d:bēng # 閍
+0x958e:hóng # 閎
+0x958f:rùn # 閏
+0x9590:sàn # 閐
+0x9591:xián # 閑
+0x9592:xián,jiān,jiàn # 閒
+0x9593:jiān,jiàn # 間
+0x9594:mǐn # 閔
+0x9595:xiā,xiǎ # 閕
+0x9597:dòu # 閗
+0x9598:zhá # 閘
+0x9599:nào # 閙
+0x959b:pēng,pèng # 閛
+0x959c:xiǎ,kě # 閜
+0x959d:líng # 閝
+0x959e:biàn,guān # 閞
+0x959f:bì # 閟
+0x95a0:rùn # 閠
+0x95a1:hé # 閡
+0x95a2:guān # 関
+0x95a3:gé # 閣
+0x95a4:hé,gé # 閤
+0x95a5:fá # 閥
+0x95a6:chù # 閦
+0x95a7:hòng,xiàng # 閧
+0x95a8:guī # 閨
+0x95a9:mǐn # 閩
+0x95ab:kǔn # 閫
+0x95ac:làng # 閬
+0x95ad:lǘ # 閭
+0x95ae:tíng,tǐng # 閮
+0x95af:shà # 閯
+0x95b0:jú # 閰
+0x95b1:yuè # 閱
+0x95b2:yuè # 閲
+0x95b3:chǎn # 閳
+0x95b4:qù # 閴
+0x95b5:lìn # 閵
+0x95b6:chāng # 閶
+0x95b7:shā # 閷
+0x95b8:kǔn # 閸
+0x95b9:yān # 閹
+0x95ba:wén # 閺
+0x95bb:yán # 閻
+0x95bc:è,yān # 閼
+0x95bd:hūn # 閽
+0x95be:yù # 閾
+0x95bf:wén # 閿
+0x95c0:hòng # 闀
+0x95c1:bāo # 闁
+0x95c2:hòng,juǎn,xiàng # 闂
+0x95c3:qù # 闃
+0x95c4:yǎo # 闄
+0x95c5:wén # 闅
+0x95c6:bǎn,pàn # 闆
+0x95c7:àn # 闇
+0x95c8:wéi # 闈
+0x95c9:yīn # 闉
+0x95ca:kuò # 闊
+0x95cb:què # 闋
+0x95cc:lán # 闌
+0x95cd:dū,shé # 闍
+0x95d0:tián # 闐
+0x95d1:niè # 闑
+0x95d2:tà # 闒
+0x95d3:kǎi # 闓
+0x95d4:hé # 闔
+0x95d5:què,quē # 闕
+0x95d6:chuǎng # 闖
+0x95d7:guān # 闗
+0x95d8:dòu # 闘
+0x95d9:qǐ # 闙
+0x95da:kuī # 闚
+0x95db:táng,tāng,chāng # 闛
+0x95dc:guān # 關
+0x95dd:piáo # 闝
+0x95de:kàn,hǎn # 闞
+0x95df:xì,sè,tà # 闟
+0x95e0:huì # 闠
+0x95e1:chǎn # 闡
+0x95e2:pì # 闢
+0x95e3:dāng,dàng # 闣
+0x95e4:huán # 闤
+0x95e5:tà # 闥
+0x95e6:wén # 闦
+0x95e8:mén # 门
+0x95e9:shuān # 闩
+0x95ea:shǎn # 闪
+0x95eb:yán # 闫
+0x95ec:hàn,bì # 闬
+0x95ed:bì # 闭
+0x95ee:wèn # 问
+0x95ef:chuǎng # 闯
+0x95f0:rùn # 闰
+0x95f1:wéi # 闱
+0x95f2:xián # 闲
+0x95f3:hóng # 闳
+0x95f4:jiān,jiàn # 间
+0x95f5:mǐn # 闵
+0x95f6:kàng,kāng # 闶
+0x95f7:mèn,mēn # 闷
+0x95f8:zhá # 闸
+0x95f9:nào # 闹
+0x95fa:guī # 闺
+0x95fb:wén # 闻
+0x95fc:tà # 闼
+0x95fd:mǐn # 闽
+0x95fe:lǘ # 闾
+0x95ff:kǎi # 闿
+0x9600:fá # 阀
+0x9601:gé # 阁
+0x9602:hé # 阂
+0x9603:kǔn # 阃
+0x9604:jiū # 阄
+0x9605:yuè # 阅
+0x9606:làng # 阆
+0x9607:dū,shé # 阇
+0x9608:yù # 阈
+0x9609:yān # 阉
+0x960a:chāng # 阊
+0x960b:xì # 阋
+0x960c:wén # 阌
+0x960d:hūn # 阍
+0x960e:yán # 阎
+0x960f:è,yān # 阏
+0x9610:chǎn # 阐
+0x9611:lán # 阑
+0x9612:qù # 阒
+0x9613:huì # 阓
+0x9614:kuò # 阔
+0x9615:què # 阕
+0x9616:hé # 阖
+0x9617:tián # 阗
+0x9618:tà # 阘
+0x9619:quē,què # 阙
+0x961a:kàn # 阚
+0x961b:huán # 阛
+0x961c:fù # 阜
+0x961d:fǔ # 阝
+0x961e:lè # 阞
+0x961f:duì # 队
+0x9620:xìn # 阠
+0x9621:qiān # 阡
+0x9622:wù # 阢
+0x9623:yì # 阣
+0x9624:tuó # 阤
+0x9625:yīn # 阥
+0x9626:yáng # 阦
+0x9627:dǒu # 阧
+0x9628:è # 阨
+0x9629:shēng # 阩
+0x962a:bǎn # 阪
+0x962b:péi # 阫
+0x962c:kēng # 阬
+0x962d:yǔn # 阭
+0x962e:ruǎn # 阮
+0x962f:zhǐ # 阯
+0x9630:pí # 阰
+0x9631:jǐng # 阱
+0x9632:fáng # 防
+0x9633:yáng # 阳
+0x9634:yīn # 阴
+0x9635:zhèn # 阵
+0x9636:jiē # 阶
+0x9637:chēng # 阷
+0x9638:è # 阸
+0x9639:qū # 阹
+0x963a:dǐ # 阺
+0x963b:zǔ # 阻
+0x963c:zuò # 阼
+0x963d:diàn,yán # 阽
+0x963e:lín # 阾
+0x963f:ā,ē # 阿
+0x9640:tuó # 陀
+0x9641:tuó # 陁
+0x9642:bēi,pí,pō # 陂
+0x9643:bǐng # 陃
+0x9644:fù # 附
+0x9645:jì # 际
+0x9646:lù,liù # 陆
+0x9647:lǒng # 陇
+0x9648:chén # 陈
+0x9649:xíng # 陉
+0x964a:duò # 陊
+0x964b:lòu # 陋
+0x964c:mò # 陌
+0x964d:jiàng,xiáng # 降
+0x964e:shū # 陎
+0x964f:duò # 陏
+0x9650:xiàn # 限
+0x9651:ér # 陑
+0x9652:guǐ # 陒
+0x9653:yū # 陓
+0x9654:gāi # 陔
+0x9655:shǎn # 陕
+0x9656:jùn # 陖
+0x9657:qiào # 陗
+0x9658:xíng # 陘
+0x9659:chún # 陙
+0x965a:wǔ # 陚
+0x965b:bì # 陛
+0x965c:xiá # 陜
+0x965d:shǎn # 陝
+0x965e:shēng # 陞
+0x965f:zhì # 陟
+0x9660:pū # 陠
+0x9661:dǒu # 陡
+0x9662:yuàn # 院
+0x9663:zhèn # 陣
+0x9664:chú # 除
+0x9665:xiàn # 陥
+0x9667:niè # 陧
+0x9668:yǔn # 陨
+0x9669:xiǎn # 险
+0x966a:péi # 陪
+0x966b:fèi # 陫
+0x966c:zōu # 陬
+0x966d:qí,yī # 陭
+0x966e:duì # 陮
+0x966f:lún # 陯
+0x9670:yīn # 陰
+0x9671:jū # 陱
+0x9672:chuí # 陲
+0x9673:chén # 陳
+0x9674:pī # 陴
+0x9675:líng # 陵
+0x9676:táo,yáo # 陶
+0x9677:xiàn # 陷
+0x9678:lù # 陸
+0x967a:xiǎn # 険
+0x967b:yīn # 陻
+0x967c:zhǔ # 陼
+0x967d:yáng # 陽
+0x967e:réng # 陾
+0x967f:xiá # 陿
+0x9680:chóng # 隀
+0x9681:yàn,yǎn # 隁
+0x9682:yīn # 隂
+0x9683:yú,yáo,shù # 隃
+0x9684:dī # 隄
+0x9685:yú # 隅
+0x9686:lóng # 隆
+0x9687:wēi # 隇
+0x9688:wēi # 隈
+0x9689:niè # 隉
+0x968a:duì,zhuì # 隊
+0x968b:suí,duò # 隋
+0x968c:àn # 隌
+0x968d:huáng # 隍
+0x968e:jiē # 階
+0x968f:suí # 随
+0x9690:yǐn,yìn # 隐
+0x9691:qí,gāi,ái # 隑
+0x9692:yǎn # 隒
+0x9693:huī,duò # 隓
+0x9694:gé # 隔
+0x9695:yǔn # 隕
+0x9696:wù # 隖
+0x9697:wěi,kuí # 隗
+0x9698:ài # 隘
+0x9699:xì # 隙
+0x969a:táng # 隚
+0x969b:jì # 際
+0x969c:zhàng # 障
+0x969d:dǎo # 隝
+0x969e:áo # 隞
+0x969f:xì # 隟
+0x96a0:yǐn,yìn # 隠
+0x96a2:rǎo # 隢
+0x96a3:lín # 隣
+0x96a4:tuí # 隤
+0x96a5:dèng # 隥
+0x96a6:pí # 隦
+0x96a7:suì # 隧
+0x96a8:suí # 隨
+0x96a9:ào,yù # 隩
+0x96aa:xiǎn # 險
+0x96ab:fén # 隫
+0x96ac:nǐ # 隬
+0x96ad:ér # 隭
+0x96ae:jī # 隮
+0x96af:dǎo # 隯
+0x96b0:xí # 隰
+0x96b1:yǐn,yìn # 隱
+0x96b2:zhì # 隲
+0x96b3:huī,duò # 隳
+0x96b4:lǒng # 隴
+0x96b5:xī # 隵
+0x96b6:lì # 隶
+0x96b7:lì # 隷
+0x96b8:lì # 隸
+0x96b9:zhuī,cuī,wéi # 隹
+0x96ba:hú,hè # 隺
+0x96bb:zhī # 隻
+0x96bc:sǔn # 隼
+0x96bd:jùn,juàn # 隽
+0x96be:nán,nàn,nuó # 难
+0x96bf:yì # 隿
+0x96c0:què,qiāo,qiǎo # 雀
+0x96c1:yàn # 雁
+0x96c2:qín # 雂
+0x96c3:jiān # 雃
+0x96c4:xióng # 雄
+0x96c5:yǎ # 雅
+0x96c6:jí # 集
+0x96c7:gù # 雇
+0x96c8:huán # 雈
+0x96c9:zhì # 雉
+0x96ca:gòu # 雊
+0x96cb:jùn,juàn # 雋
+0x96cc:cí # 雌
+0x96cd:yōng # 雍
+0x96ce:jū # 雎
+0x96cf:chú # 雏
+0x96d0:hū # 雐
+0x96d1:zá # 雑
+0x96d2:luò # 雒
+0x96d3:yú # 雓
+0x96d4:chóu # 雔
+0x96d5:diāo # 雕
+0x96d6:suī # 雖
+0x96d7:hàn # 雗
+0x96d8:huò # 雘
+0x96d9:shuāng # 雙
+0x96da:guàn,huán # 雚
+0x96db:chú # 雛
+0x96dc:zá # 雜
+0x96dd:yōng # 雝
+0x96de:jī # 雞
+0x96df:guī,xī # 雟
+0x96e0:chóu # 雠
+0x96e1:liù # 雡
+0x96e2:lí # 離
+0x96e3:nán,nàn,nuó # 難
+0x96e4:yù,xué # 雤
+0x96e5:zá # 雥
+0x96e6:chóu # 雦
+0x96e7:jí # 雧
+0x96e8:yǔ,yù # 雨
+0x96e9:yú # 雩
+0x96ea:xuě # 雪
+0x96eb:nǎ # 雫
+0x96ec:fǒu # 雬
+0x96ed:sè,xí # 雭
+0x96ee:mù # 雮
+0x96ef:wén # 雯
+0x96f0:fēn # 雰
+0x96f1:pāng # 雱
+0x96f2:yún # 雲
+0x96f3:lì # 雳
+0x96f4:chì # 雴
+0x96f5:yāng # 雵
+0x96f6:líng # 零
+0x96f7:léi # 雷
+0x96f8:án # 雸
+0x96f9:báo # 雹
+0x96fa:wù,méng # 雺
+0x96fb:diàn # 電
+0x96fc:dàng # 雼
+0x96fd:hū,hù # 雽
+0x96fe:wù # 雾
+0x96ff:diào # 雿
+0x9700:xū # 需
+0x9701:jì # 霁
+0x9702:mù # 霂
+0x9703:chén # 霃
+0x9704:xiāo # 霄
+0x9705:zhá # 霅
+0x9706:tíng # 霆
+0x9707:zhèn # 震
+0x9708:pèi # 霈
+0x9709:méi # 霉
+0x970a:líng # 霊
+0x970b:qī # 霋
+0x970c:zhōu # 霌
+0x970d:huò # 霍
+0x970e:shà # 霎
+0x970f:fēi # 霏
+0x9710:hóng # 霐
+0x9711:zhān # 霑
+0x9712:yīn # 霒
+0x9713:ní # 霓
+0x9714:shù # 霔
+0x9715:tún # 霕
+0x9716:lín # 霖
+0x9718:dòng # 霘
+0x9719:yīng # 霙
+0x971a:wù # 霚
+0x971b:líng # 霛
+0x971c:shuāng # 霜
+0x971d:líng # 霝
+0x971e:xiá # 霞
+0x971f:hóng # 霟
+0x9720:yīn # 霠
+0x9721:mài # 霡
+0x9722:mài # 霢
+0x9723:yǔn # 霣
+0x9724:liù # 霤
+0x9725:mèng # 霥
+0x9726:bīn # 霦
+0x9727:wù # 霧
+0x9728:wèi # 霨
+0x9729:kuò # 霩
+0x972a:yín # 霪
+0x972b:xí # 霫
+0x972c:yì # 霬
+0x972d:ǎi # 霭
+0x972e:dàn # 霮
+0x972f:tèng # 霯
+0x9730:xiàn # 霰
+0x9731:yù # 霱
+0x9732:lòu,lù # 露
+0x9733:lóng # 霳
+0x9734:dài # 霴
+0x9735:jí # 霵
+0x9736:pāng # 霶
+0x9737:yáng # 霷
+0x9738:bà # 霸
+0x9739:pī # 霹
+0x973a:wēi # 霺
+0x973c:xì # 霼
+0x973d:jì # 霽
+0x973e:mái # 霾
+0x973f:méng # 霿
+0x9740:méng # 靀
+0x9741:léi # 靁
+0x9742:lì # 靂
+0x9743:huò # 靃
+0x9744:ǎi # 靄
+0x9745:fèi # 靅
+0x9746:dài # 靆
+0x9747:lóng # 靇
+0x9748:lìng # 靈
+0x9749:ài # 靉
+0x974a:fēng # 靊
+0x974b:lì # 靋
+0x974c:bǎo # 靌
+0x974e:hè # 靎
+0x974f:hè # 靏
+0x9750:bìng # 靐
+0x9751:qīng # 靑
+0x9752:qīng # 青
+0x9753:jìng,liàng # 靓
+0x9754:tiān # 靔
+0x9755:zhèng # 靕
+0x9756:jìng # 靖
+0x9757:chēng # 靗
+0x9758:qìng # 靘
+0x9759:jìng # 静
+0x975a:jìng,liàng # 靚
+0x975b:diàn # 靛
+0x975c:jìng # 靜
+0x975d:tiān # 靝
+0x975e:fēi # 非
+0x975f:fēi # 靟
+0x9760:kào # 靠
+0x9761:mí # 靡
+0x9762:miàn # 面
+0x9763:miàn # 靣
+0x9764:pào # 靤
+0x9765:yè # 靥
+0x9766:miǎn # 靦
+0x9767:huì # 靧
+0x9768:yè # 靨
+0x9769:gé,jí # 革
+0x976a:dīng # 靪
+0x976b:chá # 靫
+0x976c:jiān # 靬
+0x976d:rèn # 靭
+0x976e:dí # 靮
+0x976f:dù # 靯
+0x9770:wù # 靰
+0x9771:rèn # 靱
+0x9772:qín # 靲
+0x9773:jìn # 靳
+0x9774:xuē # 靴
+0x9775:niǔ # 靵
+0x9776:bǎ # 靶
+0x9777:yǐn # 靷
+0x9778:sǎ # 靸
+0x9779:nà # 靹
+0x977a:mò # 靺
+0x977b:zǔ # 靻
+0x977c:dá # 靼
+0x977d:bàn # 靽
+0x977e:xiè # 靾
+0x977f:yào # 靿
+0x9780:táo # 鞀
+0x9781:bèi # 鞁
+0x9782:jiē # 鞂
+0x9783:hóng # 鞃
+0x9784:páo # 鞄
+0x9785:yāng,yàng # 鞅
+0x9787:yīn # 鞇
+0x9788:gé,tà,sǎ # 鞈
+0x9789:táo # 鞉
+0x978a:jié,jí # 鞊
+0x978b:xié # 鞋
+0x978c:ān # 鞌
+0x978d:ān # 鞍
+0x978e:hén # 鞎
+0x978f:gǒng # 鞏
+0x9791:dá # 鞑
+0x9792:qiáo # 鞒
+0x9793:tīng # 鞓
+0x9794:mán,mèn # 鞔
+0x9795:biān,yìng # 鞕
+0x9796:suī # 鞖
+0x9797:tiáo # 鞗
+0x9798:qiào,shāo # 鞘
+0x9799:xuān,juān # 鞙
+0x979a:kòng # 鞚
+0x979b:běng # 鞛
+0x979c:tà # 鞜
+0x979d:shàng,zhǎng # 鞝
+0x979e:bǐng,pí,bì,bēi # 鞞
+0x979f:kuò # 鞟
+0x97a0:jū # 鞠
+0x97a1:la # 鞡
+0x97a2:xiè,dié # 鞢
+0x97a3:róu # 鞣
+0x97a4:bāng # 鞤
+0x97a5:ēng # 鞥
+0x97a6:qiū # 鞦
+0x97a7:qiū # 鞧
+0x97a8:hé # 鞨
+0x97a9:qiào # 鞩
+0x97aa:mù,móu # 鞪
+0x97ab:jū # 鞫
+0x97ac:jiàn,jiān # 鞬
+0x97ad:biān # 鞭
+0x97ae:dī # 鞮
+0x97af:jiān # 鞯
+0x97b1:tāo # 鞱
+0x97b2:gōu # 鞲
+0x97b3:tà # 鞳
+0x97b4:bèi # 鞴
+0x97b5:xié # 鞵
+0x97b6:pán # 鞶
+0x97b7:gé # 鞷
+0x97b8:bì,bǐng # 鞸
+0x97b9:kuò # 鞹
+0x97bb:lóu # 鞻
+0x97bc:guì # 鞼
+0x97bd:qiáo # 鞽
+0x97be:xuē # 鞾
+0x97bf:jī # 鞿
+0x97c0:jiān # 韀
+0x97c1:jiāng # 韁
+0x97c2:chàn # 韂
+0x97c3:dá # 韃
+0x97c4:huò # 韄
+0x97c5:xiǎn # 韅
+0x97c6:qiān # 韆
+0x97c7:dú # 韇
+0x97c8:wā # 韈
+0x97c9:jiān # 韉
+0x97ca:lán # 韊
+0x97cb:wéi # 韋
+0x97cc:rèn # 韌
+0x97cd:fú # 韍
+0x97ce:mèi,wà # 韎
+0x97cf:quàn # 韏
+0x97d0:gé # 韐
+0x97d1:wěi # 韑
+0x97d2:qiào # 韒
+0x97d3:hán # 韓
+0x97d4:chàng # 韔
+0x97d6:rǒu # 韖
+0x97d7:yùn # 韗
+0x97d8:shè,xiè # 韘
+0x97d9:wěi # 韙
+0x97da:gé # 韚
+0x97db:bài # 韛
+0x97dc:tāo # 韜
+0x97dd:gōu # 韝
+0x97de:yùn # 韞
+0x97e0:bì # 韠
+0x97e1:wěi # 韡
+0x97e2:suì # 韢
+0x97e3:dú # 韣
+0x97e4:wà # 韤
+0x97e5:dú # 韥
+0x97e6:wéi # 韦
+0x97e7:rèn # 韧
+0x97e8:fú # 韨
+0x97e9:hán # 韩
+0x97ea:wěi # 韪
+0x97eb:yùn,wēn # 韫
+0x97ec:tāo # 韬
+0x97ed:jiǔ # 韭
+0x97ee:jiǔ # 韮
+0x97ef:xiān # 韯
+0x97f0:xiè # 韰
+0x97f1:xiān # 韱
+0x97f2:jī # 韲
+0x97f3:yīn # 音
+0x97f4:zá # 韴
+0x97f5:yùn # 韵
+0x97f6:sháo # 韶
+0x97f7:lè # 韷
+0x97f8:péng # 韸
+0x97f9:huáng # 韹
+0x97fa:yīng # 韺
+0x97fb:yùn # 韻
+0x97fc:péng # 韼
+0x97fd:ān # 韽
+0x97fe:yīn # 韾
+0x97ff:xiǎng # 響
+0x9800:hù # 頀
+0x9801:yè # 頁
+0x9802:dǐng # 頂
+0x9803:qǐng # 頃
+0x9804:qiú # 頄
+0x9805:xiàng # 項
+0x9806:shùn # 順
+0x9807:hān # 頇
+0x9808:xū # 須
+0x9809:yí # 頉
+0x980a:xū # 頊
+0x980b:ě # 頋
+0x980c:sòng # 頌
+0x980d:kuǐ # 頍
+0x980e:qí # 頎
+0x980f:háng # 頏
+0x9810:yù # 預
+0x9811:wán # 頑
+0x9812:bān # 頒
+0x9813:dùn # 頓
+0x9814:dí # 頔
+0x9815:dān # 頕
+0x9816:pàn # 頖
+0x9817:pō # 頗
+0x9818:lǐng # 領
+0x9819:chè # 頙
+0x981a:jǐng # 頚
+0x981b:lèi # 頛
+0x981c:hé # 頜
+0x981d:qiāo # 頝
+0x981e:è # 頞
+0x981f:é # 頟
+0x9820:wěi # 頠
+0x9821:jié # 頡
+0x9822:kuò # 頢
+0x9823:shěn # 頣
+0x9824:yí # 頤
+0x9825:yí # 頥
+0x9826:kē # 頦
+0x9827:duǐ # 頧
+0x9828:yǔ # 頨
+0x9829:pīng # 頩
+0x982a:lèi # 頪
+0x982b:fǔ # 頫
+0x982c:jiá # 頬
+0x982d:tóu # 頭
+0x982e:huì # 頮
+0x982f:kuí # 頯
+0x9830:jiá # 頰
+0x9831:luō # 頱
+0x9832:tǐng # 頲
+0x9833:chēng # 頳
+0x9834:yǐng # 頴
+0x9835:jūn # 頵
+0x9836:hú # 頶
+0x9837:hàn # 頷
+0x9838:jǐng # 頸
+0x9839:tuí # 頹
+0x983a:tuí # 頺
+0x983b:bīn,pín # 頻
+0x983c:lài # 頼
+0x983d:tuí # 頽
+0x983e:zī # 頾
+0x983f:zī # 頿
+0x9840:chuí # 顀
+0x9841:dìng # 顁
+0x9842:lài # 顂
+0x9843:tán # 顃
+0x9844:hàn # 顄
+0x9845:qiān # 顅
+0x9846:kē # 顆
+0x9847:cuì # 顇
+0x9848:jiǒng # 顈
+0x9849:qīn # 顉
+0x984a:yí # 顊
+0x984b:sāi # 顋
+0x984c:tí # 題
+0x984d:é # 額
+0x984e:è # 顎
+0x984f:yán # 顏
+0x9850:wèn # 顐
+0x9851:kǎn # 顑
+0x9852:yóng # 顒
+0x9853:zhuān # 顓
+0x9854:yán # 顔
+0x9855:xiǎn # 顕
+0x9856:xìn # 顖
+0x9857:yǐ # 顗
+0x9858:yuàn # 願
+0x9859:sǎng # 顙
+0x985a:diān # 顚
+0x985b:diān # 顛
+0x985c:jiǎng # 顜
+0x985d:kuī # 顝
+0x985e:lèi # 類
+0x985f:láo # 顟
+0x9860:piǎo # 顠
+0x9861:wài # 顡
+0x9862:mān # 顢
+0x9863:cù # 顣
+0x9864:yáo # 顤
+0x9865:hào # 顥
+0x9866:qiáo # 顦
+0x9867:gù # 顧
+0x9868:xùn # 顨
+0x9869:yǎn # 顩
+0x986a:huì # 顪
+0x986b:chàn,zhàn,shān # 顫
+0x986c:rú # 顬
+0x986d:méng # 顭
+0x986e:bīn # 顮
+0x986f:xiǎn # 顯
+0x9870:pín # 顰
+0x9871:lú # 顱
+0x9872:lǎn # 顲
+0x9873:niè # 顳
+0x9874:quán # 顴
+0x9875:yè # 页
+0x9876:dǐng # 顶
+0x9877:qǐng # 顷
+0x9878:hān # 顸
+0x9879:xiàng # 项
+0x987a:shùn # 顺
+0x987b:xū # 须
+0x987c:xū # 顼
+0x987d:wán # 顽
+0x987e:gù # 顾
+0x987f:dùn,dú # 顿
+0x9880:qí # 颀
+0x9881:bān # 颁
+0x9882:sòng # 颂
+0x9883:háng # 颃
+0x9884:yù # 预
+0x9885:lú # 颅
+0x9886:lǐng # 领
+0x9887:pō # 颇
+0x9888:jǐng,gěng # 颈
+0x9889:jié,xié,jiá # 颉
+0x988a:jiá # 颊
+0x988b:tǐng # 颋
+0x988c:hé,gé # 颌
+0x988d:yǐng # 颍
+0x988e:jiǒng # 颎
+0x988f:kē # 颏
+0x9890:yí # 颐
+0x9891:pín,bīn # 频
+0x9892:huì # 颒
+0x9893:tuí # 颓
+0x9894:hàn # 颔
+0x9895:yǐng # 颕
+0x9896:yǐng # 颖
+0x9897:kē # 颗
+0x9898:tí # 题
+0x9899:yóng # 颙
+0x989a:è # 颚
+0x989b:zhuān # 颛
+0x989c:yán # 颜
+0x989d:é # 额
+0x989e:niè # 颞
+0x989f:mān # 颟
+0x98a0:diān # 颠
+0x98a1:sǎng # 颡
+0x98a2:hào # 颢
+0x98a3:lèi # 颣
+0x98a4:chàn,zhàn # 颤
+0x98a5:rú # 颥
+0x98a6:pín # 颦
+0x98a7:quán # 颧
+0x98a8:fēng,fěng # 風
+0x98a9:biāo,diū # 颩
+0x98ab:fú # 颫
+0x98ac:xiā # 颬
+0x98ad:zhǎn # 颭
+0x98ae:biāo # 颮
+0x98af:sà # 颯
+0x98b0:bá,fú # 颰
+0x98b1:tái # 颱
+0x98b2:liè # 颲
+0x98b3:guā # 颳
+0x98b4:xuàn # 颴
+0x98b5:xiāo # 颵
+0x98b6:jù # 颶
+0x98b7:biāo # 颷
+0x98b8:sī # 颸
+0x98b9:wěi # 颹
+0x98ba:yáng # 颺
+0x98bb:yáo # 颻
+0x98bc:sōu # 颼
+0x98bd:kǎi # 颽
+0x98be:sāo,sōu # 颾
+0x98bf:fān # 颿
+0x98c0:liú # 飀
+0x98c1:xí # 飁
+0x98c2:liù,liáo # 飂
+0x98c3:piāo # 飃
+0x98c4:piāo # 飄
+0x98c5:liú # 飅
+0x98c6:biāo # 飆
+0x98c7:biāo # 飇
+0x98c8:biāo # 飈
+0x98c9:liáo # 飉
+0x98cb:sè # 飋
+0x98cc:fēng # 飌
+0x98cd:xiū # 飍
+0x98ce:fēng,fěng # 风
+0x98cf:yáng # 飏
+0x98d0:zhǎn # 飐
+0x98d1:biāo # 飑
+0x98d2:sà # 飒
+0x98d3:jù # 飓
+0x98d4:sī # 飔
+0x98d5:sōu # 飕
+0x98d6:yáo # 飖
+0x98d7:liú # 飗
+0x98d8:piāo # 飘
+0x98d9:biāo # 飙
+0x98da:biāo # 飚
+0x98db:fēi # 飛
+0x98dc:fān # 飜
+0x98dd:fēi # 飝
+0x98de:fēi # 飞
+0x98df:shí,sì,yì # 食
+0x98e0:shí # 飠
+0x98e1:cān # 飡
+0x98e2:jī # 飢
+0x98e3:dìng # 飣
+0x98e4:sì # 飤
+0x98e5:tuō # 飥
+0x98e6:zhān # 飦
+0x98e7:sūn # 飧
+0x98e8:xiǎng # 飨
+0x98e9:tún # 飩
+0x98ea:rèn # 飪
+0x98eb:yù # 飫
+0x98ec:yǎng,juàn # 飬
+0x98ed:chì # 飭
+0x98ee:yǐn,yìn # 飮
+0x98ef:fàn # 飯
+0x98f0:fàn # 飰
+0x98f1:sūn # 飱
+0x98f2:yǐn,yìn # 飲
+0x98f3:zhù,tǒu # 飳
+0x98f4:yí,sì # 飴
+0x98f5:zuò,zé,zhā # 飵
+0x98f6:bì # 飶
+0x98f7:jiě # 飷
+0x98f8:tāo # 飸
+0x98f9:bǎo # 飹
+0x98fa:cí # 飺
+0x98fb:tiè # 飻
+0x98fc:sì # 飼
+0x98fd:bǎo # 飽
+0x98fe:shì # 飾
+0x98ff:duò # 飿
+0x9900:hài # 餀
+0x9901:rèn # 餁
+0x9902:tiǎn # 餂
+0x9903:jiǎo # 餃
+0x9904:hé # 餄
+0x9905:bǐng # 餅
+0x9906:yáo # 餆
+0x9907:tóng # 餇
+0x9908:cí # 餈
+0x9909:xiǎng # 餉
+0x990a:yǎng # 養
+0x990b:juàn # 餋
+0x990c:ěr # 餌
+0x990d:yàn # 餍
+0x990e:lè # 餎
+0x990f:xī # 餏
+0x9910:cān # 餐
+0x9911:bō # 餑
+0x9912:něi # 餒
+0x9913:è # 餓
+0x9914:bū # 餔
+0x9915:jùn # 餕
+0x9916:dòu # 餖
+0x9917:sù # 餗
+0x9918:yú # 餘
+0x9919:shì # 餙
+0x991a:yáo # 餚
+0x991b:hún # 餛
+0x991c:guǒ # 餜
+0x991d:shì # 餝
+0x991e:jiàn # 餞
+0x991f:chuò # 餟
+0x9920:bǐng # 餠
+0x9921:xiàn # 餡
+0x9922:bù # 餢
+0x9923:yè # 餣
+0x9924:dàn # 餤
+0x9925:fēi # 餥
+0x9926:zhāng # 餦
+0x9927:wèi # 餧
+0x9928:guǎn # 館
+0x9929:è # 餩
+0x992a:nuǎn # 餪
+0x992b:yùn # 餫
+0x992c:hú # 餬
+0x992d:huáng # 餭
+0x992e:tiè # 餮
+0x992f:huì # 餯
+0x9930:jiān # 餰
+0x9931:hóu # 餱
+0x9932:ài # 餲
+0x9933:xíng # 餳
+0x9934:fēn # 餴
+0x9935:wèi # 餵
+0x9936:gǔ # 餶
+0x9937:chā # 餷
+0x9938:sòng # 餸
+0x9939:táng # 餹
+0x993a:bó # 餺
+0x993b:gāo # 餻
+0x993c:xì # 餼
+0x993d:kuì # 餽
+0x993e:liù # 餾
+0x993f:sōu # 餿
+0x9940:táo # 饀
+0x9941:yè # 饁
+0x9942:wēn # 饂
+0x9943:mó # 饃
+0x9944:táng # 饄
+0x9945:mán # 饅
+0x9946:bì # 饆
+0x9947:yù # 饇
+0x9948:xiū # 饈
+0x9949:jǐn # 饉
+0x994a:sǎn # 饊
+0x994b:kuì # 饋
+0x994c:zhuàn # 饌
+0x994d:shàn # 饍
+0x994e:xī # 饎
+0x994f:dàn # 饏
+0x9950:yì # 饐
+0x9951:jī # 饑
+0x9952:ráo # 饒
+0x9953:chēng # 饓
+0x9954:yōng # 饔
+0x9955:tāo # 饕
+0x9956:wèi # 饖
+0x9957:xiǎng # 饗
+0x9958:zhān # 饘
+0x9959:fēn # 饙
+0x995a:hài # 饚
+0x995b:méng # 饛
+0x995c:yàn # 饜
+0x995d:mó # 饝
+0x995e:chán # 饞
+0x995f:xiǎng,náng # 饟
+0x9960:luó # 饠
+0x9961:zàn # 饡
+0x9962:náng # 饢
+0x9963:shí # 饣
+0x9964:dìng # 饤
+0x9965:jī # 饥
+0x9966:tuō # 饦
+0x9967:xíng # 饧
+0x9968:tún # 饨
+0x9969:xì # 饩
+0x996a:rèn # 饪
+0x996b:yù # 饫
+0x996c:chì # 饬
+0x996d:fàn # 饭
+0x996e:yǐn # 饮
+0x996f:jiàn # 饯
+0x9970:shì # 饰
+0x9971:bǎo # 饱
+0x9972:sì # 饲
+0x9973:duò # 饳
+0x9974:yí # 饴
+0x9975:ěr # 饵
+0x9976:ráo # 饶
+0x9977:xiǎng # 饷
+0x9978:hé # 饸
+0x9979:gē,le # 饹
+0x997a:jiǎo # 饺
+0x997b:xī # 饻
+0x997c:bǐng # 饼
+0x997d:bō # 饽
+0x997e:dòu # 饾
+0x997f:è # 饿
+0x9980:yú # 馀
+0x9981:něi # 馁
+0x9982:jùn # 馂
+0x9983:guǒ # 馃
+0x9984:hún # 馄
+0x9985:xiàn # 馅
+0x9986:guǎn # 馆
+0x9987:chā # 馇
+0x9988:kuì # 馈
+0x9989:gǔ # 馉
+0x998a:sōu # 馊
+0x998b:chán # 馋
+0x998c:yè # 馌
+0x998d:mó # 馍
+0x998e:bó # 馎
+0x998f:liù,liú # 馏
+0x9990:xiū # 馐
+0x9991:jǐn # 馑
+0x9992:mán # 馒
+0x9993:sǎn # 馓
+0x9994:zhuàn # 馔
+0x9995:náng,nǎng # 馕
+0x9996:shǒu # 首
+0x9997:kuí # 馗
+0x9998:guó # 馘
+0x9999:xiāng # 香
+0x999a:fēn # 馚
+0x999b:bó # 馛
+0x999c:ní # 馜
+0x999d:bì # 馝
+0x999e:bó # 馞
+0x999f:tú # 馟
+0x99a0:hān # 馠
+0x99a1:fēi # 馡
+0x99a2:jiān # 馢
+0x99a3:ān # 馣
+0x99a4:ài # 馤
+0x99a5:fù # 馥
+0x99a6:xiān # 馦
+0x99a7:yūn,wò # 馧
+0x99a8:xīn # 馨
+0x99a9:fén # 馩
+0x99aa:pīn # 馪
+0x99ab:xīn # 馫
+0x99ac:mǎ # 馬
+0x99ad:yù # 馭
+0x99ae:féng,píng # 馮
+0x99af:hàn,hán # 馯
+0x99b0:dí # 馰
+0x99b1:tuó,duò # 馱
+0x99b2:tuō,zhé # 馲
+0x99b3:chí # 馳
+0x99b4:xùn # 馴
+0x99b5:zhù # 馵
+0x99b6:zhī,shì # 馶
+0x99b7:pèi # 馷
+0x99b8:xìn,jìn # 馸
+0x99b9:rì # 馹
+0x99ba:sà # 馺
+0x99bb:yǔn # 馻
+0x99bc:wén # 馼
+0x99bd:zhí # 馽
+0x99be:dǎn,dàn # 馾
+0x99bf:lú # 馿
+0x99c0:yóu # 駀
+0x99c1:bó # 駁
+0x99c2:bǎo # 駂
+0x99c3:jué,kuài # 駃
+0x99c4:tuó,duò # 駄
+0x99c5:yì # 駅
+0x99c6:qū # 駆
+0x99c8:qū # 駈
+0x99c9:jiōng # 駉
+0x99ca:pǒ # 駊
+0x99cb:zhāo # 駋
+0x99cc:yuān # 駌
+0x99cd:pēng # 駍
+0x99ce:zhòu # 駎
+0x99cf:jù # 駏
+0x99d0:zhù # 駐
+0x99d1:nú # 駑
+0x99d2:jū # 駒
+0x99d3:pī # 駓
+0x99d4:zǎng # 駔
+0x99d5:jià # 駕
+0x99d6:líng # 駖
+0x99d7:zhěn # 駗
+0x99d8:tái,dài # 駘
+0x99d9:fù # 駙
+0x99da:yǎng # 駚
+0x99db:shǐ # 駛
+0x99dc:bì # 駜
+0x99dd:tuó # 駝
+0x99de:tuó # 駞
+0x99df:sì # 駟
+0x99e0:liú # 駠
+0x99e1:mà # 駡
+0x99e2:pián # 駢
+0x99e3:táo # 駣
+0x99e4:zhì # 駤
+0x99e5:róng # 駥
+0x99e6:téng # 駦
+0x99e7:dòng # 駧
+0x99e8:xún,xuān # 駨
+0x99e9:quán # 駩
+0x99ea:shēn # 駪
+0x99eb:jiōng # 駫
+0x99ec:ěr # 駬
+0x99ed:hài # 駭
+0x99ee:bó # 駮
+0x99f0:yīn # 駰
+0x99f1:luò # 駱
+0x99f3:dàn # 駳
+0x99f4:hài # 駴
+0x99f5:liú # 駵
+0x99f6:jú # 駶
+0x99f7:sǒng # 駷
+0x99f8:qīn # 駸
+0x99f9:máng # 駹
+0x99fa:liáng,láng # 駺
+0x99fb:hàn # 駻
+0x99fc:tú # 駼
+0x99fd:xuān # 駽
+0x99fe:tuì # 駾
+0x99ff:jùn # 駿
+0x9a00:ě # 騀
+0x9a01:chěng # 騁
+0x9a02:xīng # 騂
+0x9a03:sì # 騃
+0x9a04:lù # 騄
+0x9a05:zhuī # 騅
+0x9a06:zhōu # 騆
+0x9a07:shè # 騇
+0x9a08:pián # 騈
+0x9a09:kūn # 騉
+0x9a0a:táo # 騊
+0x9a0b:lái # 騋
+0x9a0c:zōng # 騌
+0x9a0d:kè # 騍
+0x9a0e:qí # 騎
+0x9a0f:qí # 騏
+0x9a10:yàn # 騐
+0x9a11:fēi # 騑
+0x9a12:sāo # 騒
+0x9a13:yàn # 験
+0x9a14:gé # 騔
+0x9a15:yǎo # 騕
+0x9a16:wù # 騖
+0x9a17:piàn # 騗
+0x9a18:cōng # 騘
+0x9a19:piàn # 騙
+0x9a1a:qián # 騚
+0x9a1b:fēi # 騛
+0x9a1c:huáng # 騜
+0x9a1d:qián # 騝
+0x9a1e:huō # 騞
+0x9a1f:yú # 騟
+0x9a20:tí # 騠
+0x9a21:quán # 騡
+0x9a22:xiá # 騢
+0x9a23:zōng # 騣
+0x9a24:kuí # 騤
+0x9a25:róu # 騥
+0x9a26:sī # 騦
+0x9a27:guā # 騧
+0x9a28:tuó # 騨
+0x9a29:guī # 騩
+0x9a2a:sōu # 騪
+0x9a2b:qiān # 騫
+0x9a2c:chéng # 騬
+0x9a2d:zhì # 騭
+0x9a2e:liú # 騮
+0x9a2f:péng # 騯
+0x9a30:téng # 騰
+0x9a31:xí # 騱
+0x9a32:cǎo # 騲
+0x9a33:dú # 騳
+0x9a34:yàn # 騴
+0x9a35:yuán # 騵
+0x9a36:zōu # 騶
+0x9a37:sāo # 騷
+0x9a38:shàn # 騸
+0x9a39:qí # 騹
+0x9a3a:zhì # 騺
+0x9a3b:shuāng # 騻
+0x9a3c:lù # 騼
+0x9a3d:xí # 騽
+0x9a3e:luó # 騾
+0x9a3f:zhāng # 騿
+0x9a40:mò # 驀
+0x9a41:ào # 驁
+0x9a42:cān # 驂
+0x9a43:piào # 驃
+0x9a44:cōng # 驄
+0x9a45:qū # 驅
+0x9a46:bì # 驆
+0x9a47:zhì # 驇
+0x9a48:yù # 驈
+0x9a49:xū # 驉
+0x9a4a:huá # 驊
+0x9a4b:bō # 驋
+0x9a4c:sù # 驌
+0x9a4d:xiāo # 驍
+0x9a4e:lín # 驎
+0x9a4f:zhàn # 驏
+0x9a50:dūn # 驐
+0x9a51:liú # 驑
+0x9a52:tuó # 驒
+0x9a53:céng # 驓
+0x9a54:diàn # 驔
+0x9a55:jiāo # 驕
+0x9a56:tiě # 驖
+0x9a57:yàn # 驗
+0x9a58:luó # 驘
+0x9a59:zhān # 驙
+0x9a5a:jīng # 驚
+0x9a5b:yì # 驛
+0x9a5c:yè # 驜
+0x9a5d:tuó # 驝
+0x9a5e:pīn # 驞
+0x9a5f:zhòu # 驟
+0x9a60:yàn # 驠
+0x9a61:lóng # 驡
+0x9a62:lǘ # 驢
+0x9a63:téng # 驣
+0x9a64:xiāng # 驤
+0x9a65:jì # 驥
+0x9a66:shuāng # 驦
+0x9a67:jú # 驧
+0x9a68:xí # 驨
+0x9a69:huān # 驩
+0x9a6a:lí # 驪
+0x9a6b:biāo # 驫
+0x9a6c:mǎ # 马
+0x9a6d:yù # 驭
+0x9a6e:tuó,duò # 驮
+0x9a6f:xùn # 驯
+0x9a70:chí # 驰
+0x9a71:qū # 驱
+0x9a72:rì # 驲
+0x9a73:bó # 驳
+0x9a74:lǘ # 驴
+0x9a75:zǎng # 驵
+0x9a76:shǐ # 驶
+0x9a77:sì # 驷
+0x9a78:fù # 驸
+0x9a79:jū # 驹
+0x9a7a:zōu # 驺
+0x9a7b:zhù # 驻
+0x9a7c:tuó # 驼
+0x9a7d:nú # 驽
+0x9a7e:jià # 驾
+0x9a7f:yì # 驿
+0x9a80:tái # 骀
+0x9a81:xiāo # 骁
+0x9a82:mà # 骂
+0x9a83:yīn # 骃
+0x9a84:jiāo # 骄
+0x9a85:huá # 骅
+0x9a86:luò # 骆
+0x9a87:hài # 骇
+0x9a88:pián # 骈
+0x9a89:biāo # 骉
+0x9a8a:lí # 骊
+0x9a8b:chěng # 骋
+0x9a8c:yàn # 验
+0x9a8d:xīng # 骍
+0x9a8e:qīn # 骎
+0x9a8f:jùn # 骏
+0x9a90:qí # 骐
+0x9a91:qí # 骑
+0x9a92:kè # 骒
+0x9a93:zhuī # 骓
+0x9a94:zōng # 骔
+0x9a95:sù # 骕
+0x9a96:cān # 骖
+0x9a97:piàn # 骗
+0x9a98:zhì # 骘
+0x9a99:kuí # 骙
+0x9a9a:sāo,sǎo # 骚
+0x9a9b:wù # 骛
+0x9a9c:áo # 骜
+0x9a9d:liú # 骝
+0x9a9e:qiān # 骞
+0x9a9f:shàn # 骟
+0x9aa0:piào,biāo # 骠
+0x9aa1:luó # 骡
+0x9aa2:cōng # 骢
+0x9aa3:chǎn # 骣
+0x9aa4:zhòu # 骤
+0x9aa5:jì # 骥
+0x9aa6:shuāng # 骦
+0x9aa7:xiāng # 骧
+0x9aa8:gǔ,gū # 骨
+0x9aa9:wěi # 骩
+0x9aaa:wěi # 骪
+0x9aab:wěi # 骫
+0x9aac:yú # 骬
+0x9aad:gàn # 骭
+0x9aae:yì # 骮
+0x9aaf:āng # 骯
+0x9ab0:tóu # 骰
+0x9ab1:jiè # 骱
+0x9ab2:bào # 骲
+0x9ab3:bèi,mó # 骳
+0x9ab4:cī # 骴
+0x9ab5:tǐ # 骵
+0x9ab6:dǐ # 骶
+0x9ab7:kū # 骷
+0x9ab8:hái # 骸
+0x9ab9:qiāo,xiāo # 骹
+0x9aba:hóu # 骺
+0x9abb:kuà # 骻
+0x9abc:gé # 骼
+0x9abd:tuǐ # 骽
+0x9abe:gěng # 骾
+0x9abf:pián # 骿
+0x9ac0:bì # 髀
+0x9ac1:kē # 髁
+0x9ac2:qià # 髂
+0x9ac3:yú # 髃
+0x9ac4:suí # 髄
+0x9ac5:lóu # 髅
+0x9ac6:bó # 髆
+0x9ac7:xiāo # 髇
+0x9ac8:bǎng,pǎng # 髈
+0x9ac9:bó,jué # 髉
+0x9aca:cī # 髊
+0x9acb:kuān # 髋
+0x9acc:bìn # 髌
+0x9acd:mó # 髍
+0x9ace:liáo # 髎
+0x9acf:lóu # 髏
+0x9ad0:xiāo # 髐
+0x9ad1:dú # 髑
+0x9ad2:zāng # 髒
+0x9ad3:suǐ # 髓
+0x9ad4:tǐ,tī # 體
+0x9ad5:bìn # 髕
+0x9ad6:kuān # 髖
+0x9ad7:lú # 髗
+0x9ad8:gāo # 高
+0x9ad9:gāo # 髙
+0x9ada:qiào # 髚
+0x9adb:kāo # 髛
+0x9adc:qiǎo # 髜
+0x9add:láo # 髝
+0x9ade:sào # 髞
+0x9adf:biāo # 髟
+0x9ae0:kūn # 髠
+0x9ae1:kūn # 髡
+0x9ae2:dí # 髢
+0x9ae3:fǎng # 髣
+0x9ae4:xiū # 髤
+0x9ae5:rán # 髥
+0x9ae6:máo # 髦
+0x9ae7:dàn # 髧
+0x9ae8:kūn # 髨
+0x9ae9:bìn # 髩
+0x9aea:fà # 髪
+0x9aeb:tiáo # 髫
+0x9aec:pī # 髬
+0x9aed:zī # 髭
+0x9aee:fà # 髮
+0x9aef:rán # 髯
+0x9af0:tì # 髰
+0x9af1:bào # 髱
+0x9af2:bì,pǒ # 髲
+0x9af3:máo,méng # 髳
+0x9af4:fú # 髴
+0x9af5:ér # 髵
+0x9af6:èr # 髶
+0x9af7:qū # 髷
+0x9af9:xiū # 髹
+0x9afa:kuò,yuè # 髺
+0x9afb:jì # 髻
+0x9afc:péng # 髼
+0x9afd:zhuā # 髽
+0x9afe:shāo # 髾
+0x9aff:shā # 髿
+0x9b00:tì # 鬀
+0x9b01:lì # 鬁
+0x9b02:bìn # 鬂
+0x9b03:zōng # 鬃
+0x9b04:tì # 鬄
+0x9b05:péng # 鬅
+0x9b06:sōng # 鬆
+0x9b07:zhēng # 鬇
+0x9b08:quán # 鬈
+0x9b09:zōng # 鬉
+0x9b0a:shùn # 鬊
+0x9b0b:jiǎn # 鬋
+0x9b0c:duǒ # 鬌
+0x9b0d:hú # 鬍
+0x9b0e:là # 鬎
+0x9b0f:jiū # 鬏
+0x9b10:qí # 鬐
+0x9b11:lián # 鬑
+0x9b12:zhěn # 鬒
+0x9b13:bìn # 鬓
+0x9b14:péng # 鬔
+0x9b15:mà # 鬕
+0x9b16:sān # 鬖
+0x9b17:mán # 鬗
+0x9b18:mán # 鬘
+0x9b19:sēng # 鬙
+0x9b1a:xū # 鬚
+0x9b1b:liè # 鬛
+0x9b1c:qiān # 鬜
+0x9b1d:qiān # 鬝
+0x9b1e:nóng # 鬞
+0x9b1f:huán # 鬟
+0x9b20:kuò # 鬠
+0x9b21:níng # 鬡
+0x9b22:bìn # 鬢
+0x9b23:liè # 鬣
+0x9b24:ráng # 鬤
+0x9b25:dòu # 鬥
+0x9b26:dòu # 鬦
+0x9b27:nào # 鬧
+0x9b28:hòng # 鬨
+0x9b29:xì # 鬩
+0x9b2a:dòu # 鬪
+0x9b2b:kàn # 鬫
+0x9b2c:dòu # 鬬
+0x9b2d:dòu # 鬭
+0x9b2e:jiū # 鬮
+0x9b2f:chàng # 鬯
+0x9b30:yù # 鬰
+0x9b31:yù # 鬱
+0x9b32:gé,lì # 鬲
+0x9b33:yàn # 鬳
+0x9b34:fǔ # 鬴
+0x9b35:zèng # 鬵
+0x9b36:guī # 鬶
+0x9b37:zōng # 鬷
+0x9b38:liù # 鬸
+0x9b39:guī # 鬹
+0x9b3a:shāng # 鬺
+0x9b3b:yù # 鬻
+0x9b3c:guǐ # 鬼
+0x9b3d:mèi # 鬽
+0x9b3e:jì # 鬾
+0x9b3f:qí # 鬿
+0x9b40:gà # 魀
+0x9b41:kuí # 魁
+0x9b42:hún # 魂
+0x9b43:bá # 魃
+0x9b44:pò,tuò,bó # 魄
+0x9b45:mèi # 魅
+0x9b46:xū # 魆
+0x9b47:yǎn # 魇
+0x9b48:xiāo # 魈
+0x9b49:liǎng # 魉
+0x9b4a:yù # 魊
+0x9b4b:tuí # 魋
+0x9b4c:qī # 魌
+0x9b4d:wǎng # 魍
+0x9b4e:liǎng # 魎
+0x9b4f:wèi # 魏
+0x9b50:gān # 魐
+0x9b51:chī # 魑
+0x9b52:piāo # 魒
+0x9b53:bì # 魓
+0x9b54:mó # 魔
+0x9b55:jī # 魕
+0x9b56:xū # 魖
+0x9b57:chǒu # 魗
+0x9b58:yǎn # 魘
+0x9b59:zhān # 魙
+0x9b5a:yú # 魚
+0x9b5b:dāo # 魛
+0x9b5c:rén # 魜
+0x9b5d:jì # 魝
+0x9b5f:hóng # 魟
+0x9b60:tuō # 魠
+0x9b61:diào # 魡
+0x9b62:jǐ # 魢
+0x9b63:yú # 魣
+0x9b64:é # 魤
+0x9b65:jì # 魥
+0x9b66:shā # 魦
+0x9b67:háng # 魧
+0x9b68:tún # 魨
+0x9b69:mò # 魩
+0x9b6a:jiè # 魪
+0x9b6b:shěn # 魫
+0x9b6c:bǎn # 魬
+0x9b6d:yuán # 魭
+0x9b6e:pí # 魮
+0x9b6f:lǔ # 魯
+0x9b70:wén # 魰
+0x9b71:hú # 魱
+0x9b72:lú # 魲
+0x9b73:zā # 魳
+0x9b74:fáng # 魴
+0x9b75:fén # 魵
+0x9b76:nà # 魶
+0x9b77:yóu # 魷
+0x9b7a:hé # 魺
+0x9b7b:xiá # 魻
+0x9b7c:qū # 魼
+0x9b7d:hān # 魽
+0x9b7e:pī # 魾
+0x9b7f:líng # 魿
+0x9b80:tuó # 鮀
+0x9b81:bà # 鮁
+0x9b82:qiú # 鮂
+0x9b83:píng # 鮃
+0x9b84:fú # 鮄
+0x9b85:bì # 鮅
+0x9b86:cǐ,jì # 鮆
+0x9b87:wèi # 鮇
+0x9b88:jū # 鮈
+0x9b89:diāo # 鮉
+0x9b8a:bó,bà # 鮊
+0x9b8b:yóu # 鮋
+0x9b8c:gǔn # 鮌
+0x9b8d:pí # 鮍
+0x9b8e:nián # 鮎
+0x9b8f:xīng # 鮏
+0x9b90:tái # 鮐
+0x9b91:bào # 鮑
+0x9b92:fù # 鮒
+0x9b93:zhǎ,zhà # 鮓
+0x9b94:jù # 鮔
+0x9b95:gū # 鮕
+0x9b99:tǎ # 鮙
+0x9b9a:jié # 鮚
+0x9b9b:shū # 鮛
+0x9b9c:hòu # 鮜
+0x9b9d:xiǎng # 鮝
+0x9b9e:ér # 鮞
+0x9b9f:ān # 鮟
+0x9ba0:wéi # 鮠
+0x9ba1:zhào # 鮡
+0x9ba2:zhū # 鮢
+0x9ba3:yìn # 鮣
+0x9ba4:liè # 鮤
+0x9ba5:luò,gé # 鮥
+0x9ba6:tóng # 鮦
+0x9ba7:yí # 鮧
+0x9ba8:yì # 鮨
+0x9ba9:bìng # 鮩
+0x9baa:wěi # 鮪
+0x9bab:jiāo # 鮫
+0x9bac:kū # 鮬
+0x9bad:guī,xié,wā,kuí # 鮭
+0x9bae:xiān,xiǎn # 鮮
+0x9baf:gé # 鮯
+0x9bb0:huí # 鮰
+0x9bb3:kào # 鮳
+0x9bb5:tuō # 鮵
+0x9bb6:jūn # 鮶
+0x9bb7:tí # 鮷
+0x9bb8:miǎn # 鮸
+0x9bb9:shāo # 鮹
+0x9bba:zhǎ # 鮺
+0x9bbb:suō # 鮻
+0x9bbc:qīn # 鮼
+0x9bbd:yú # 鮽
+0x9bbe:něi # 鮾
+0x9bbf:zhé # 鮿
+0x9bc0:gǔn # 鯀
+0x9bc1:gěng # 鯁
+0x9bc3:wú # 鯃
+0x9bc4:qiú # 鯄
+0x9bc5:shān # 鯅
+0x9bc6:pū,bū # 鯆
+0x9bc7:huàn # 鯇
+0x9bc8:tiáo # 鯈
+0x9bc9:lǐ # 鯉
+0x9bca:shā # 鯊
+0x9bcb:shā # 鯋
+0x9bcc:kào # 鯌
+0x9bcd:méng # 鯍
+0x9bd2:yǒng # 鯒
+0x9bd3:shēn # 鯓
+0x9bd4:zī # 鯔
+0x9bd5:qí # 鯕
+0x9bd6:qīng,zhēng # 鯖
+0x9bd7:xiǎng # 鯗
+0x9bd8:něi # 鯘
+0x9bd9:chún # 鯙
+0x9bda:jì # 鯚
+0x9bdb:diāo # 鯛
+0x9bdc:qiè # 鯜
+0x9bdd:gù # 鯝
+0x9bde:zhǒu # 鯞
+0x9bdf:dōng # 鯟
+0x9be0:lái # 鯠
+0x9be1:fēi # 鯡
+0x9be2:ní # 鯢
+0x9be3:yì,sī # 鯣
+0x9be4:kūn # 鯤
+0x9be5:lù # 鯥
+0x9be6:jiù # 鯦
+0x9be7:chāng # 鯧
+0x9be8:jīng # 鯨
+0x9be9:lún # 鯩
+0x9bea:líng # 鯪
+0x9beb:zōu # 鯫
+0x9bec:lí # 鯬
+0x9bed:měng # 鯭
+0x9bee:zōng # 鯮
+0x9bef:zhì # 鯯
+0x9bf0:nián # 鯰
+0x9bf4:shī # 鯴
+0x9bf5:shēn # 鯵
+0x9bf6:huàn # 鯶
+0x9bf7:tí # 鯷
+0x9bf8:hóu # 鯸
+0x9bf9:xīng # 鯹
+0x9bfa:zhū # 鯺
+0x9bfb:là # 鯻
+0x9bfc:zōng # 鯼
+0x9bfd:jì # 鯽
+0x9bfe:biān # 鯾
+0x9bff:biān # 鯿
+0x9c00:huàn # 鰀
+0x9c01:quán # 鰁
+0x9c02:zéi # 鰂
+0x9c03:wēi # 鰃
+0x9c04:wēi # 鰄
+0x9c05:yú # 鰅
+0x9c06:chūn # 鰆
+0x9c07:róu # 鰇
+0x9c08:dié # 鰈
+0x9c09:huáng # 鰉
+0x9c0a:liàn # 鰊
+0x9c0b:yǎn # 鰋
+0x9c0c:qiū # 鰌
+0x9c0d:qiū # 鰍
+0x9c0e:jiǎn # 鰎
+0x9c0f:bī # 鰏
+0x9c10:è # 鰐
+0x9c11:yáng # 鰑
+0x9c12:fù # 鰒
+0x9c13:sāi,xǐ # 鰓
+0x9c14:jiān # 鰔
+0x9c15:xiā # 鰕
+0x9c16:tuǒ # 鰖
+0x9c17:hú # 鰗
+0x9c19:ruò # 鰙
+0x9c1b:wēn # 鰛
+0x9c1c:jiān # 鰜
+0x9c1d:hào # 鰝
+0x9c1e:wū # 鰞
+0x9c1f:páng # 鰟
+0x9c20:sāo # 鰠
+0x9c21:liú # 鰡
+0x9c22:mǎ # 鰢
+0x9c23:shí # 鰣
+0x9c24:shī # 鰤
+0x9c25:guān # 鰥
+0x9c27:téng # 鰧
+0x9c28:tǎ # 鰨
+0x9c29:yáo # 鰩
+0x9c2a:è # 鰪
+0x9c2b:yóng # 鰫
+0x9c2c:qián # 鰬
+0x9c2d:qí # 鰭
+0x9c2e:wēn # 鰮
+0x9c2f:ruò # 鰯
+0x9c31:lián # 鰱
+0x9c32:áo # 鰲
+0x9c33:lè # 鰳
+0x9c34:huī # 鰴
+0x9c35:mǐn # 鰵
+0x9c36:jì # 鰶
+0x9c37:tiáo # 鰷
+0x9c38:qū # 鰸
+0x9c39:jiān # 鰹
+0x9c3a:shēn # 鰺
+0x9c3b:mán # 鰻
+0x9c3c:xí # 鰼
+0x9c3d:qiú # 鰽
+0x9c3e:piào # 鰾
+0x9c3f:jì # 鰿
+0x9c40:jì # 鱀
+0x9c41:zhú # 鱁
+0x9c42:jiāng # 鱂
+0x9c43:xiū # 鱃
+0x9c44:zhuān # 鱄
+0x9c45:yōng # 鱅
+0x9c46:zhāng # 鱆
+0x9c47:kāng # 鱇
+0x9c48:xuě # 鱈
+0x9c49:biē # 鱉
+0x9c4a:yù # 鱊
+0x9c4b:qū # 鱋
+0x9c4c:xiàng # 鱌
+0x9c4d:bō # 鱍
+0x9c4e:jiǎo # 鱎
+0x9c4f:xún # 鱏
+0x9c50:sù # 鱐
+0x9c51:huáng # 鱑
+0x9c52:zūn # 鱒
+0x9c53:shàn # 鱓
+0x9c54:shàn # 鱔
+0x9c55:fān # 鱕
+0x9c56:guì # 鱖
+0x9c57:lín # 鱗
+0x9c58:xún # 鱘
+0x9c59:yáo # 鱙
+0x9c5a:xǐ # 鱚
+0x9c5d:fèn # 鱝
+0x9c5e:guān # 鱞
+0x9c5f:hòu # 鱟
+0x9c60:kuài # 鱠
+0x9c61:zéi # 鱡
+0x9c62:sāo # 鱢
+0x9c63:zhān # 鱣
+0x9c64:gǎn # 鱤
+0x9c65:guì # 鱥
+0x9c66:yìng # 鱦
+0x9c67:lǐ # 鱧
+0x9c68:cháng # 鱨
+0x9c6c:rú # 鱬
+0x9c6d:jì # 鱭
+0x9c6e:xù # 鱮
+0x9c6f:hù # 鱯
+0x9c71:lǐ # 鱱
+0x9c72:liè # 鱲
+0x9c73:lè # 鱳
+0x9c74:miè # 鱴
+0x9c75:zhēn # 鱵
+0x9c76:xiǎng # 鱶
+0x9c77:è # 鱷
+0x9c78:lú # 鱸
+0x9c79:guàn # 鱹
+0x9c7a:lí # 鱺
+0x9c7b:xiān # 鱻
+0x9c7c:yú # 鱼
+0x9c7d:dāo # 鱽
+0x9c7e:jǐ # 鱾
+0x9c7f:yóu # 鱿
+0x9c80:tún # 鲀
+0x9c81:lǔ # 鲁
+0x9c82:fáng # 鲂
+0x9c83:bā,bà # 鲃
+0x9c84:hé,gě # 鲄
+0x9c85:bà # 鲅
+0x9c86:píng # 鲆
+0x9c87:nián # 鲇
+0x9c88:lú # 鲈
+0x9c89:yóu # 鲉
+0x9c8a:zhǎ,zhà # 鲊
+0x9c8b:fù # 鲋
+0x9c8c:bó,bà # 鲌
+0x9c8d:bào # 鲍
+0x9c8e:hòu # 鲎
+0x9c8f:pí # 鲏
+0x9c90:tái # 鲐
+0x9c91:guī,xié # 鲑
+0x9c92:jié # 鲒
+0x9c93:kào # 鲓
+0x9c94:wěi # 鲔
+0x9c95:ér # 鲕
+0x9c96:tóng # 鲖
+0x9c97:zéi # 鲗
+0x9c98:hòu # 鲘
+0x9c99:kuài # 鲙
+0x9c9a:jì # 鲚
+0x9c9b:jiāo # 鲛
+0x9c9c:xiān,xiǎn # 鲜
+0x9c9d:zhǎ # 鲝
+0x9c9e:xiǎng # 鲞
+0x9c9f:xún # 鲟
+0x9ca0:gěng # 鲠
+0x9ca1:lí # 鲡
+0x9ca2:lián # 鲢
+0x9ca3:jiān # 鲣
+0x9ca4:lǐ # 鲤
+0x9ca5:shí # 鲥
+0x9ca6:tiáo # 鲦
+0x9ca7:gǔn # 鲧
+0x9ca8:shā # 鲨
+0x9ca9:huàn # 鲩
+0x9caa:jūn # 鲪
+0x9cab:jì # 鲫
+0x9cac:yǒng # 鲬
+0x9cad:qīng,zhēng # 鲭
+0x9cae:líng # 鲮
+0x9caf:qí # 鲯
+0x9cb0:zōu # 鲰
+0x9cb1:fēi # 鲱
+0x9cb2:kūn # 鲲
+0x9cb3:chāng # 鲳
+0x9cb4:gù # 鲴
+0x9cb5:ní # 鲵
+0x9cb6:nián # 鲶
+0x9cb7:diāo # 鲷
+0x9cb8:jīng # 鲸
+0x9cb9:shēn # 鲹
+0x9cba:shī # 鲺
+0x9cbb:zī # 鲻
+0x9cbc:fèn # 鲼
+0x9cbd:dié # 鲽
+0x9cbe:bī # 鲾
+0x9cbf:cháng # 鲿
+0x9cc0:tí # 鳀
+0x9cc1:wēn # 鳁
+0x9cc2:wēi # 鳂
+0x9cc3:sāi,xǐ # 鳃
+0x9cc4:è # 鳄
+0x9cc5:qiū # 鳅
+0x9cc6:fù # 鳆
+0x9cc7:huáng # 鳇
+0x9cc8:quán # 鳈
+0x9cc9:jiāng # 鳉
+0x9cca:biān # 鳊
+0x9ccb:sāo # 鳋
+0x9ccc:áo # 鳌
+0x9ccd:qí # 鳍
+0x9cce:tǎ # 鳎
+0x9ccf:guān # 鳏
+0x9cd0:yáo # 鳐
+0x9cd1:páng # 鳑
+0x9cd2:jiān # 鳒
+0x9cd3:lè # 鳓
+0x9cd4:biào # 鳔
+0x9cd5:xuě # 鳕
+0x9cd6:biē # 鳖
+0x9cd7:mán # 鳗
+0x9cd8:mǐn # 鳘
+0x9cd9:yōng # 鳙
+0x9cda:wèi # 鳚
+0x9cdb:xí # 鳛
+0x9cdc:guì,jué # 鳜
+0x9cdd:shàn # 鳝
+0x9cde:lín # 鳞
+0x9cdf:zūn # 鳟
+0x9ce0:hù # 鳠
+0x9ce1:gǎn # 鳡
+0x9ce2:lǐ # 鳢
+0x9ce3:zhān,shàn # 鳣
+0x9ce4:guǎn # 鳤
+0x9ce5:niǎo,diǎo # 鳥
+0x9ce6:yǐ # 鳦
+0x9ce7:fú # 鳧
+0x9ce8:lì # 鳨
+0x9ce9:jiū # 鳩
+0x9cea:bú # 鳪
+0x9ceb:yàn # 鳫
+0x9cec:fú # 鳬
+0x9ced:diāo,zhāo # 鳭
+0x9cee:jī # 鳮
+0x9cef:fèng # 鳯
+0x9cf1:gān,hàn,yàn # 鳱
+0x9cf2:shī # 鳲
+0x9cf3:fèng # 鳳
+0x9cf4:míng # 鳴
+0x9cf5:bǎo # 鳵
+0x9cf6:yuān # 鳶
+0x9cf7:zhī # 鳷
+0x9cf8:hù # 鳸
+0x9cf9:qín # 鳹
+0x9cfa:fū,guī # 鳺
+0x9cfb:bān,fén # 鳻
+0x9cfc:wén # 鳼
+0x9cfd:jiān,qiān,zhān # 鳽
+0x9cfe:shī # 鳾
+0x9cff:yù # 鳿
+0x9d00:fǒu # 鴀
+0x9d01:yāo # 鴁
+0x9d02:jué # 鴂
+0x9d03:jué # 鴃
+0x9d04:pǐ # 鴄
+0x9d05:huān # 鴅
+0x9d06:zhèn # 鴆
+0x9d07:bǎo # 鴇
+0x9d08:yàn # 鴈
+0x9d09:yā # 鴉
+0x9d0a:zhèng # 鴊
+0x9d0b:fāng # 鴋
+0x9d0c:fèng # 鴌
+0x9d0d:wén # 鴍
+0x9d0e:ōu # 鴎
+0x9d0f:dài # 鴏
+0x9d10:jiā # 鴐
+0x9d11:rú # 鴑
+0x9d12:líng # 鴒
+0x9d13:miè # 鴓
+0x9d14:fú # 鴔
+0x9d15:tuó # 鴕
+0x9d16:mín # 鴖
+0x9d17:lì # 鴗
+0x9d18:biǎn # 鴘
+0x9d19:zhì # 鴙
+0x9d1a:gē # 鴚
+0x9d1b:yuān # 鴛
+0x9d1c:cí # 鴜
+0x9d1d:qú # 鴝
+0x9d1e:xiāo # 鴞
+0x9d1f:chī # 鴟
+0x9d20:dàn # 鴠
+0x9d21:jū # 鴡
+0x9d22:yāo # 鴢
+0x9d23:gū # 鴣
+0x9d24:zhōng # 鴤
+0x9d25:yù # 鴥
+0x9d26:yāng # 鴦
+0x9d27:yù # 鴧
+0x9d28:yā # 鴨
+0x9d29:dié # 鴩
+0x9d2a:yù # 鴪
+0x9d2c:yīng # 鴬
+0x9d2d:duī # 鴭
+0x9d2e:wū # 鴮
+0x9d2f:ér # 鴯
+0x9d30:guā # 鴰
+0x9d31:ài # 鴱
+0x9d32:zhī # 鴲
+0x9d33:yàn # 鴳
+0x9d34:héng # 鴴
+0x9d35:xiāo # 鴵
+0x9d36:jiá # 鴶
+0x9d37:liè # 鴷
+0x9d38:zhū # 鴸
+0x9d39:yáng # 鴹
+0x9d3a:yí # 鴺
+0x9d3b:hóng # 鴻
+0x9d3c:lù # 鴼
+0x9d3d:rú # 鴽
+0x9d3e:móu # 鴾
+0x9d3f:gē # 鴿
+0x9d40:rén # 鵀
+0x9d41:jiāo # 鵁
+0x9d42:xiū # 鵂
+0x9d43:zhōu # 鵃
+0x9d44:chī # 鵄
+0x9d45:luò # 鵅
+0x9d49:luán # 鵉
+0x9d4a:jiá # 鵊
+0x9d4b:jì # 鵋
+0x9d4c:tú # 鵌
+0x9d4d:huān # 鵍
+0x9d4e:tuǒ # 鵎
+0x9d4f:bū # 鵏
+0x9d50:wú # 鵐
+0x9d51:jiān # 鵑
+0x9d52:yù # 鵒
+0x9d53:bó # 鵓
+0x9d54:jùn # 鵔
+0x9d55:jùn # 鵕
+0x9d56:bī # 鵖
+0x9d57:xī # 鵗
+0x9d58:jùn # 鵘
+0x9d59:jú # 鵙
+0x9d5a:tū # 鵚
+0x9d5b:jìng # 鵛
+0x9d5c:tí # 鵜
+0x9d5d:é # 鵝
+0x9d5e:é # 鵞
+0x9d5f:kuáng # 鵟
+0x9d60:hú # 鵠
+0x9d61:wǔ # 鵡
+0x9d62:shēn # 鵢
+0x9d63:lài # 鵣
+0x9d66:lù # 鵦
+0x9d67:pí # 鵧
+0x9d68:shū # 鵨
+0x9d69:fú # 鵩
+0x9d6a:ān # 鵪
+0x9d6b:zhuó # 鵫
+0x9d6c:péng # 鵬
+0x9d6d:qín # 鵭
+0x9d6e:qiān # 鵮
+0x9d6f:bēi # 鵯
+0x9d70:diāo # 鵰
+0x9d71:lù # 鵱
+0x9d72:què # 鵲
+0x9d73:jiān # 鵳
+0x9d74:jú # 鵴
+0x9d75:tù # 鵵
+0x9d76:yā # 鵶
+0x9d77:yuān # 鵷
+0x9d78:qí # 鵸
+0x9d79:lí # 鵹
+0x9d7a:yè # 鵺
+0x9d7b:zhuī # 鵻
+0x9d7c:kōng # 鵼
+0x9d7d:duò # 鵽
+0x9d7e:kūn # 鵾
+0x9d7f:shēng # 鵿
+0x9d80:qí # 鶀
+0x9d81:jīng # 鶁
+0x9d82:yì # 鶂
+0x9d83:yì # 鶃
+0x9d84:jīng # 鶄
+0x9d85:zī # 鶅
+0x9d86:lái # 鶆
+0x9d87:dōng # 鶇
+0x9d88:qī # 鶈
+0x9d89:chún # 鶉
+0x9d8a:gēng # 鶊
+0x9d8b:jū # 鶋
+0x9d8c:qū # 鶌
+0x9d8f:jī # 鶏
+0x9d90:shù # 鶐
+0x9d92:chì # 鶒
+0x9d93:miáo # 鶓
+0x9d94:róu # 鶔
+0x9d95:ān # 鶕
+0x9d96:qiū # 鶖
+0x9d97:tí,chí # 鶗
+0x9d98:hú # 鶘
+0x9d99:tí,chí # 鶙
+0x9d9a:è # 鶚
+0x9d9b:jiē # 鶛
+0x9d9c:máo # 鶜
+0x9d9d:fú,bì # 鶝
+0x9d9e:chūn # 鶞
+0x9d9f:tú # 鶟
+0x9da0:yǎn # 鶠
+0x9da1:hé,jiè # 鶡
+0x9da2:yuán # 鶢
+0x9da3:piān,biǎn # 鶣
+0x9da4:kūn # 鶤
+0x9da5:méi # 鶥
+0x9da6:hú # 鶦
+0x9da7:yīng # 鶧
+0x9da8:chuàn,zhì # 鶨
+0x9da9:wù # 鶩
+0x9daa:jú # 鶪
+0x9dac:cāng,qiāng # 鶬
+0x9dad:fǎng # 鶭
+0x9dae:hè,hú # 鶮
+0x9daf:yīng # 鶯
+0x9db0:yuán # 鶰
+0x9db1:xiān # 鶱
+0x9db2:wēng # 鶲
+0x9db3:shī # 鶳
+0x9db4:hè # 鶴
+0x9db5:chú # 鶵
+0x9db6:táng # 鶶
+0x9db7:xiá # 鶷
+0x9db8:ruò # 鶸
+0x9db9:liú # 鶹
+0x9dba:jī # 鶺
+0x9dbb:gǔ,hú # 鶻
+0x9dbc:jiān # 鶼
+0x9dbd:sǔn,xùn # 鶽
+0x9dbe:hàn # 鶾
+0x9dbf:cí # 鶿
+0x9dc0:cí # 鷀
+0x9dc1:yì # 鷁
+0x9dc2:yào # 鷂
+0x9dc3:yàn # 鷃
+0x9dc4:jī # 鷄
+0x9dc5:lì # 鷅
+0x9dc6:tián # 鷆
+0x9dc7:kòu # 鷇
+0x9dc8:tī # 鷈
+0x9dc9:tī # 鷉
+0x9dca:yì # 鷊
+0x9dcb:tú # 鷋
+0x9dcc:mǎ # 鷌
+0x9dcd:xiāo # 鷍
+0x9dce:gāo # 鷎
+0x9dcf:tián # 鷏
+0x9dd0:chén # 鷐
+0x9dd1:jì # 鷑
+0x9dd2:tuán # 鷒
+0x9dd3:zhè # 鷓
+0x9dd4:áo # 鷔
+0x9dd5:yǎo # 鷕
+0x9dd6:yī # 鷖
+0x9dd7:ōu # 鷗
+0x9dd8:chì # 鷘
+0x9dd9:zhì # 鷙
+0x9dda:liù # 鷚
+0x9ddb:yōng # 鷛
+0x9ddc:lóu,lǚ # 鷜
+0x9ddd:bì # 鷝
+0x9dde:shuāng # 鷞
+0x9ddf:zhuó # 鷟
+0x9de0:yú # 鷠
+0x9de1:wú # 鷡
+0x9de2:jué # 鷢
+0x9de3:yín # 鷣
+0x9de4:tí # 鷤
+0x9de5:sī # 鷥
+0x9de6:jiāo # 鷦
+0x9de7:yì # 鷧
+0x9de8:huá # 鷨
+0x9de9:bì # 鷩
+0x9dea:yīng # 鷪
+0x9deb:sù # 鷫
+0x9dec:huáng # 鷬
+0x9ded:fán # 鷭
+0x9dee:jiāo # 鷮
+0x9def:liáo # 鷯
+0x9df0:yàn # 鷰
+0x9df1:gāo # 鷱
+0x9df2:jiù # 鷲
+0x9df3:xián # 鷳
+0x9df4:xián # 鷴
+0x9df5:tú # 鷵
+0x9df6:mǎi # 鷶
+0x9df7:zūn # 鷷
+0x9df8:yù # 鷸
+0x9df9:yīng # 鷹
+0x9dfa:lù # 鷺
+0x9dfb:tuán # 鷻
+0x9dfc:xián # 鷼
+0x9dfd:xué # 鷽
+0x9dfe:yì # 鷾
+0x9dff:pì # 鷿
+0x9e00:zhǔ # 鸀
+0x9e01:luó # 鸁
+0x9e02:xī # 鸂
+0x9e03:yì # 鸃
+0x9e04:jī # 鸄
+0x9e05:zé # 鸅
+0x9e06:yú # 鸆
+0x9e07:zhān # 鸇
+0x9e08:yè # 鸈
+0x9e09:yáng # 鸉
+0x9e0a:pì # 鸊
+0x9e0b:níng # 鸋
+0x9e0c:hù # 鸌
+0x9e0d:mí # 鸍
+0x9e0e:yīng # 鸎
+0x9e0f:méng # 鸏
+0x9e10:dí # 鸐
+0x9e11:yuè # 鸑
+0x9e12:yù # 鸒
+0x9e13:lěi # 鸓
+0x9e14:bǔ # 鸔
+0x9e15:lú # 鸕
+0x9e16:hè # 鸖
+0x9e17:lóng # 鸗
+0x9e18:shuāng # 鸘
+0x9e19:yuè # 鸙
+0x9e1a:yīng # 鸚
+0x9e1b:guàn # 鸛
+0x9e1c:qú # 鸜
+0x9e1d:lí # 鸝
+0x9e1e:luán # 鸞
+0x9e1f:niǎo,diǎo # 鸟
+0x9e20:jiū # 鸠
+0x9e21:jī # 鸡
+0x9e22:yuān # 鸢
+0x9e23:míng # 鸣
+0x9e24:shī # 鸤
+0x9e25:ōu # 鸥
+0x9e26:yā # 鸦
+0x9e27:cāng # 鸧
+0x9e28:bǎo # 鸨
+0x9e29:zhèn # 鸩
+0x9e2a:gū # 鸪
+0x9e2b:dōng # 鸫
+0x9e2c:lú # 鸬
+0x9e2d:yā # 鸭
+0x9e2e:xiāo # 鸮
+0x9e2f:yāng # 鸯
+0x9e30:líng # 鸰
+0x9e31:chī # 鸱
+0x9e32:qú # 鸲
+0x9e33:yuān # 鸳
+0x9e34:xué # 鸴
+0x9e35:tuó # 鸵
+0x9e36:sī # 鸶
+0x9e37:zhì # 鸷
+0x9e38:ér # 鸸
+0x9e39:guā # 鸹
+0x9e3a:xiū # 鸺
+0x9e3b:héng # 鸻
+0x9e3c:zhōu # 鸼
+0x9e3d:gē # 鸽
+0x9e3e:luán # 鸾
+0x9e3f:hóng # 鸿
+0x9e40:wú # 鹀
+0x9e41:bó # 鹁
+0x9e42:lí # 鹂
+0x9e43:juān # 鹃
+0x9e44:hú,gǔ,hè # 鹄
+0x9e45:é # 鹅
+0x9e46:yù # 鹆
+0x9e47:xián # 鹇
+0x9e48:tí # 鹈
+0x9e49:wǔ # 鹉
+0x9e4a:què # 鹊
+0x9e4b:miáo # 鹋
+0x9e4c:ān # 鹌
+0x9e4d:kūn # 鹍
+0x9e4e:bēi # 鹎
+0x9e4f:péng # 鹏
+0x9e50:qiān # 鹐
+0x9e51:chún # 鹑
+0x9e52:gēng # 鹒
+0x9e53:yuān # 鹓
+0x9e54:sù # 鹔
+0x9e55:hú # 鹕
+0x9e56:hé # 鹖
+0x9e57:è # 鹗
+0x9e58:gǔ,hú # 鹘
+0x9e59:qiū # 鹙
+0x9e5a:cí # 鹚
+0x9e5b:méi # 鹛
+0x9e5c:wù # 鹜
+0x9e5d:yì # 鹝
+0x9e5e:yào # 鹞
+0x9e5f:wēng # 鹟
+0x9e60:liú # 鹠
+0x9e61:jī # 鹡
+0x9e62:yì # 鹢
+0x9e63:jiān # 鹣
+0x9e64:hè # 鹤
+0x9e65:yī # 鹥
+0x9e66:yīng # 鹦
+0x9e67:zhè # 鹧
+0x9e68:liù # 鹨
+0x9e69:liáo # 鹩
+0x9e6a:jiāo # 鹪
+0x9e6b:jiù # 鹫
+0x9e6c:yù # 鹬
+0x9e6d:lù # 鹭
+0x9e6e:huán # 鹮
+0x9e6f:zhān # 鹯
+0x9e70:yīng # 鹰
+0x9e71:hù # 鹱
+0x9e72:méng # 鹲
+0x9e73:guàn # 鹳
+0x9e74:shuāng # 鹴
+0x9e75:lǔ # 鹵
+0x9e76:jīn # 鹶
+0x9e77:líng # 鹷
+0x9e78:jiǎn # 鹸
+0x9e79:xián # 鹹
+0x9e7a:cuó # 鹺
+0x9e7b:jiǎn # 鹻
+0x9e7c:jiǎn # 鹼
+0x9e7d:yán # 鹽
+0x9e7e:cuó # 鹾
+0x9e7f:lù # 鹿
+0x9e80:yōu # 麀
+0x9e81:cū # 麁
+0x9e82:jǐ # 麂
+0x9e83:páo,biāo # 麃
+0x9e84:cū # 麄
+0x9e85:páo # 麅
+0x9e86:zhù,cū # 麆
+0x9e87:jūn,qún # 麇
+0x9e88:zhǔ # 麈
+0x9e89:jiān # 麉
+0x9e8a:mí # 麊
+0x9e8b:mí # 麋
+0x9e8c:yǔ # 麌
+0x9e8d:liú # 麍
+0x9e8e:chén # 麎
+0x9e8f:jūn # 麏
+0x9e90:lín # 麐
+0x9e91:ní # 麑
+0x9e92:qí # 麒
+0x9e93:lù # 麓
+0x9e94:jiù # 麔
+0x9e95:jūn # 麕
+0x9e96:jīng # 麖
+0x9e97:lí,lì # 麗
+0x9e98:xiāng # 麘
+0x9e99:xián # 麙
+0x9e9a:jiā # 麚
+0x9e9b:mí # 麛
+0x9e9c:lì # 麜
+0x9e9d:shè # 麝
+0x9e9e:zhāng # 麞
+0x9e9f:lín # 麟
+0x9ea0:jīng # 麠
+0x9ea1:qí # 麡
+0x9ea2:líng # 麢
+0x9ea3:yán # 麣
+0x9ea4:cū # 麤
+0x9ea5:mài # 麥
+0x9ea6:mài # 麦
+0x9ea7:hé # 麧
+0x9ea8:chǎo # 麨
+0x9ea9:fū # 麩
+0x9eaa:miàn # 麪
+0x9eab:miàn # 麫
+0x9eac:fū # 麬
+0x9ead:pào # 麭
+0x9eae:qù # 麮
+0x9eaf:qū # 麯
+0x9eb0:móu # 麰
+0x9eb1:fū # 麱
+0x9eb2:xiàn # 麲
+0x9eb3:lái # 麳
+0x9eb4:qū # 麴
+0x9eb5:miàn # 麵
+0x9eb7:fēng # 麷
+0x9eb8:fū # 麸
+0x9eb9:qū # 麹
+0x9eba:miàn # 麺
+0x9ebb:má # 麻
+0x9ebc:mó,me # 麼
+0x9ebd:mó,me,ma # 麽
+0x9ebe:huī # 麾
+0x9ec0:zōu # 黀
+0x9ec1:nún # 黁
+0x9ec2:fén # 黂
+0x9ec3:huáng # 黃
+0x9ec4:huáng # 黄
+0x9ec5:jīn # 黅
+0x9ec6:guāng # 黆
+0x9ec7:tiān # 黇
+0x9ec8:tǒu # 黈
+0x9ec9:hóng # 黉
+0x9eca:huà # 黊
+0x9ecb:kuàng # 黋
+0x9ecc:hóng # 黌
+0x9ecd:shǔ # 黍
+0x9ece:lí # 黎
+0x9ecf:nián # 黏
+0x9ed0:chī # 黐
+0x9ed1:hēi # 黑
+0x9ed2:hēi # 黒
+0x9ed3:yì # 黓
+0x9ed4:qián # 黔
+0x9ed5:dǎn # 黕
+0x9ed6:xì # 黖
+0x9ed7:tún # 黗
+0x9ed8:mò # 默
+0x9ed9:mò # 黙
+0x9eda:qián # 黚
+0x9edb:dài # 黛
+0x9edc:chù # 黜
+0x9edd:yǒu # 黝
+0x9ede:diǎn # 點
+0x9edf:yī # 黟
+0x9ee0:xiá # 黠
+0x9ee1:yǎn # 黡
+0x9ee2:qū # 黢
+0x9ee3:měi # 黣
+0x9ee4:yǎn # 黤
+0x9ee5:qíng # 黥
+0x9ee6:yuè # 黦
+0x9ee7:lí # 黧
+0x9ee8:dǎng # 黨
+0x9ee9:dú # 黩
+0x9eea:cǎn # 黪
+0x9eeb:yān # 黫
+0x9eec:yǎn # 黬
+0x9eed:yǎn # 黭
+0x9eee:dàn,shèn # 黮
+0x9eef:àn # 黯
+0x9ef0:zhěn,yān # 黰
+0x9ef1:dài # 黱
+0x9ef2:cǎn # 黲
+0x9ef3:yī # 黳
+0x9ef4:méi # 黴
+0x9ef5:dǎn,zhǎn # 黵
+0x9ef6:yǎn # 黶
+0x9ef7:dú # 黷
+0x9ef8:lú # 黸
+0x9ef9:zhǐ # 黹
+0x9efa:fěn # 黺
+0x9efb:fú # 黻
+0x9efc:fǔ # 黼
+0x9efd:mǐn,miǎn,měng # 黽
+0x9efe:mǐn,miǎn,měng # 黾
+0x9eff:yuán # 黿
+0x9f00:cù # 鼀
+0x9f01:qù # 鼁
+0x9f02:cháo # 鼂
+0x9f03:wā # 鼃
+0x9f04:zhū # 鼄
+0x9f05:zhī # 鼅
+0x9f06:měng # 鼆
+0x9f07:áo # 鼇
+0x9f08:biē # 鼈
+0x9f09:tuó # 鼉
+0x9f0a:bì # 鼊
+0x9f0b:yuán # 鼋
+0x9f0c:cháo,zhāo # 鼌
+0x9f0d:tuó # 鼍
+0x9f0e:dǐng # 鼎
+0x9f0f:mì # 鼏
+0x9f10:nài # 鼐
+0x9f11:dǐng # 鼑
+0x9f12:zī # 鼒
+0x9f13:gǔ # 鼓
+0x9f14:gǔ # 鼔
+0x9f15:dōng # 鼕
+0x9f16:fén # 鼖
+0x9f17:táo # 鼗
+0x9f18:yuān # 鼘
+0x9f19:pí # 鼙
+0x9f1a:chāng # 鼚
+0x9f1b:gāo # 鼛
+0x9f1c:cào # 鼜
+0x9f1d:yuān # 鼝
+0x9f1e:tāng # 鼞
+0x9f1f:tēng # 鼟
+0x9f20:shǔ # 鼠
+0x9f21:shǔ # 鼡
+0x9f22:fén # 鼢
+0x9f23:fèi # 鼣
+0x9f24:wén # 鼤
+0x9f25:bá # 鼥
+0x9f26:diāo # 鼦
+0x9f27:tuó # 鼧
+0x9f28:zhōng # 鼨
+0x9f29:qú # 鼩
+0x9f2a:shēng # 鼪
+0x9f2b:shí # 鼫
+0x9f2c:yòu # 鼬
+0x9f2d:shí # 鼭
+0x9f2e:tíng # 鼮
+0x9f2f:wú # 鼯
+0x9f30:jú # 鼰
+0x9f31:jīng # 鼱
+0x9f32:hún # 鼲
+0x9f33:jú # 鼳
+0x9f34:yǎn # 鼴
+0x9f35:tū # 鼵
+0x9f36:sī # 鼶
+0x9f37:xī # 鼷
+0x9f38:xiàn # 鼸
+0x9f39:yǎn # 鼹
+0x9f3a:léi # 鼺
+0x9f3b:bí # 鼻
+0x9f3c:yào # 鼼
+0x9f3d:qiú # 鼽
+0x9f3e:hān # 鼾
+0x9f3f:wù # 鼿
+0x9f40:wù # 齀
+0x9f41:hōu # 齁
+0x9f42:xiè # 齂
+0x9f43:è # 齃
+0x9f44:zhā # 齄
+0x9f45:xiù # 齅
+0x9f46:wèng # 齆
+0x9f47:zhā # 齇
+0x9f48:nòng # 齈
+0x9f49:nàng # 齉
+0x9f4a:qí,zhāi # 齊
+0x9f4b:zhāi # 齋
+0x9f4c:jì # 齌
+0x9f4d:zī # 齍
+0x9f4e:jí # 齎
+0x9f4f:jī # 齏
+0x9f50:qí,jì,zī,zhāi # 齐
+0x9f51:jī # 齑
+0x9f52:chǐ # 齒
+0x9f53:chèn # 齓
+0x9f54:chèn # 齔
+0x9f55:hé # 齕
+0x9f56:yá # 齖
+0x9f57:yīn # 齗
+0x9f58:xiè # 齘
+0x9f59:bāo # 齙
+0x9f5a:zé # 齚
+0x9f5b:xiè # 齛
+0x9f5c:zī # 齜
+0x9f5d:chī # 齝
+0x9f5e:yàn # 齞
+0x9f5f:jǔ # 齟
+0x9f60:tiáo # 齠
+0x9f61:líng # 齡
+0x9f62:líng # 齢
+0x9f63:chū # 齣
+0x9f64:quán # 齤
+0x9f65:xiè # 齥
+0x9f66:yín # 齦
+0x9f67:niè # 齧
+0x9f68:jiù # 齨
+0x9f69:yǎo # 齩
+0x9f6a:chuò # 齪
+0x9f6b:yǔn # 齫
+0x9f6c:yǔ # 齬
+0x9f6d:chǔ # 齭
+0x9f6e:yǐ # 齮
+0x9f6f:ní # 齯
+0x9f70:zé # 齰
+0x9f71:zōu # 齱
+0x9f72:qǔ # 齲
+0x9f73:yǔn # 齳
+0x9f74:yǎn # 齴
+0x9f75:yú # 齵
+0x9f76:è # 齶
+0x9f77:wò # 齷
+0x9f78:yì # 齸
+0x9f79:cī # 齹
+0x9f7a:zōu # 齺
+0x9f7b:diān # 齻
+0x9f7c:chǔ # 齼
+0x9f7d:jìn # 齽
+0x9f7e:yà # 齾
+0x9f7f:chǐ # 齿
+0x9f80:chèn # 龀
+0x9f81:hé # 龁
+0x9f82:yín,kěn # 龂
+0x9f83:jǔ # 龃
+0x9f84:líng # 龄
+0x9f85:bāo # 龅
+0x9f86:tiáo # 龆
+0x9f87:zī # 龇
+0x9f88:yín,kěn # 龈
+0x9f89:yǔ # 龉
+0x9f8a:chuò # 龊
+0x9f8b:qǔ # 龋
+0x9f8c:wò # 龌
+0x9f8d:lóng,lǒng # 龍
+0x9f8e:páng # 龎
+0x9f8f:gōng,wò # 龏
+0x9f90:páng # 龐
+0x9f91:yǎn # 龑
+0x9f92:lóng # 龒
+0x9f93:lóng,lǒng # 龓
+0x9f94:gōng # 龔
+0x9f95:kān # 龕
+0x9f96:dá # 龖
+0x9f97:líng # 龗
+0x9f98:dá # 龘
+0x9f99:lóng # 龙
+0x9f9a:gōng # 龚
+0x9f9b:kān # 龛
+0x9f9c:guī,jūn,qiū # 龜
+0x9f9d:qiū # 龝
+0x9f9e:biē # 龞
+0x9f9f:guī,jūn,qiū # 龟
+0x9fa0:yuè # 龠
+0x9fa1:chuī # 龡
+0x9fa2:hé # 龢
+0x9fa3:jiǎo # 龣
+0x9fa4:xié # 龤
+0x9fa5:yù # 龥
+0x9fc3:shǎn # 鿃
+0xf90e:lài,là # 癩
+0xfa0c:wù,wū # 兀
+0xfa0d:hù, huò # 嗀
+0xfa10:zhǒng # 塚
+0xfa12:qíng # 晴
+0xfa15:xī # 凞
+0xfa16:zhū # 猪
+0xfa17:yì # 益
+0xfa18:lǐ # 礼
+0xfa19:shén # 神
+0xfa1a:xiáng # 祥
+0xfa1b:fú,fù # 福
+0xfa1c:jìng # 靖
+0xfa1d:jīng,qíng,jìng # 精
+0xfa1e:yǔ # 羽
+0xfa22:zhū # 諸
+0xfa25:yì # 逸
+0xfa26:dū # 都
+0xfa2a:fàn # 飯
+0xfa2b:sì # 飼
+0xfa2c:guǎn # 館
+0xfa2d:hè # 鶴
if(LINUX)
- set(UTILS_SOURCE
+ set(UTILS_SOURCES
${CMAKE_CURRENT_LIST_DIR}/dtimeunitformatter.cpp
${CMAKE_CURRENT_LIST_DIR}/dabstractunitformatter.cpp
${CMAKE_CURRENT_LIST_DIR}/ddisksizeformatter.cpp
${CMAKE_CURRENT_LIST_DIR}/ddbusinterface.cpp
${CMAKE_CURRENT_LIST_DIR}/ddbusextendedabstractinterface.cpp
${CMAKE_CURRENT_LIST_DIR}/ddbusextendedpendingcallwatcher.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/dtextencoding.cpp
)
else()
- set(UTILS_SOURCE
+ set(UTILS_SOURCES
${CMAKE_CURRENT_LIST_DIR}/dtimeunitformatter.cpp
${CMAKE_CURRENT_LIST_DIR}/dabstractunitformatter.cpp
${CMAKE_CURRENT_LIST_DIR}/ddisksizeformatter.cpp
${CMAKE_CURRENT_LIST_DIR}/ddbusinterface.cpp
${CMAKE_CURRENT_LIST_DIR}/ddbusextendedabstractinterface.cpp
${CMAKE_CURRENT_LIST_DIR}/ddbusextendedpendingcallwatcher.cpp
+ ${CMAKE_CURRENT_LIST_DIR}/dtextencoding.cpp
)
endif()
-file(GLOB UTILS_HEADER
- ${CMAKE_CURRENT_LIST_DIR}/../../include/util/*
- ${CMAKE_CURRENT_LIST_DIR}/ddbusinterface_p.h
- ${CMAKE_CURRENT_LIST_DIR}/ddbusextendedpendingcallwatcher_p.h
+file(GLOB UTILS_HEADERS
+ ${PROJECT_SOURCE_DIR}/include/util/*.h
)
+
+set(PRIVATE_HEADERS
+ ${CMAKE_CURRENT_LIST_DIR}/ddbusinterface_p.h
+ ${CMAKE_CURRENT_LIST_DIR}/ddbusextendedpendingcallwatcher_p.h)
+
+if(DTK_VERSION_MAJOR)
+ list(REMOVE_ITEM UTILS_SOURCES "${CMAKE_CURRENT_LIST_DIR}/dtimedloop.cpp")
+ list(REMOVE_ITEM UTILS_HEADERS "${PROJECT_SOURCE_DIR}/include/util/dtimedloop.h") # no longer be used
+ list(REMOVE_ITEM UTILS_HEADERS "${PROJECT_SOURCE_DIR}/include/util/dasync.h")
+endif()
+
set(utils_SRC
- ${UTILS_HEADER}
- ${UTILS_SOURCE}
+ ${UTILS_HEADERS}
+ ${PRIVATE_HEADERS}
+ ${UTILS_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/util.qrc
)
-set(BIN_NAME "ut-${PROJECT_NAME}")
+# 方便 test 脚本中调用
+set(BIN_NAME "ut-DtkCore")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
# dbus
-set(CMAKE_CXX_FLAGS "-fno-access-control -ldl")
+set(CMAKE_CXX_FLAGS "-fno-access-control")
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
-add_definitions(-DPREFIX="${CMAKE_PREFIX_PATH}")
-add_definitions(-DOS_VERSION_TEST_FILE="/tmp/etc/os-version")
-find_package(Qt5 REQUIRED COMPONENTS Gui)
-find_package(Qt5 REQUIRED COMPONENTS Core)
-if(LINUX)
- find_package(Qt5 REQUIRED COMPONENTS DBus)
- find_package(PkgConfig REQUIRED)
- pkg_check_modules(QGSettings REQUIRED gsettings-qt)
-endif()
-find_package(Qt5 REQUIRED COMPONENTS Xml)
-find_package(Qt5 REQUIRED COMPONENTS Concurrent)
-find_package(Qt5 REQUIRED COMPONENTS Test)
-find_package(GTest REQUIRED)
-# start base
-include(../src/base/base.cmake)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
-# end base
if(LINUX)
- include(../src/dbus/dbus.cmake)
+ find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS DBus)
+ find_package(PkgConfig REQUIRED)
+ if("${QT_VERSION_MAJOR}" STREQUAL "5")
+ pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt)
+ endif()
endif()
-#message(${dbus_SRCS})
-# end dbus
-
-
-# start dci
-include(../src/dci/dci.cmake)
-#end dci
-
-#start filesystem
-include(../src/filesystem/filesystem.cmake)
-#end filesystem
-# start log
-include(../src/log/log.cmake)
-#end log
-# start settings
-include(../src/settings/settings.cmake)
-#message(${settings_SRC})
-#end settings
-
-#start utils
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Xml)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Concurrent)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Test)
+find_package(GTest REQUIRED)
-# TODO match linux and others
-include(../src/util/util.cmake)
-#end utils
+# for test.so
+set(TEST_SO_NAME vtabletest${DTK_VERSION_MAJOR})
+add_subdirectory(./testso)
-#GLOB
-include(../src/glob.cmake)
+# test
+file(GLOB TEST_HEADER ut_.*h)
+file(GLOB TEST_SOURCE *.cpp)
-#endglob
+file(GLOB FackDBus
+ "./fakedbus/*.h"
+ "./fakedbus/*.cpp"
+)
+if(DTK_VERSION_MAJOR)
+ list(REMOVE_ITEM TEST_SOURCE "${CMAKE_CURRENT_LIST_DIR}/ut_gsettingsbackend.cpp")
+ list(REMOVE_ITEM TEST_SOURCE "${CMAKE_CURRENT_LIST_DIR}/ut_dasync.cpp")
+endif()
-# test
-file(GLOB TEST_HEADER
- ut_.*h
+set(test_SRC
+ ${TEST_HEADER}
+ ${TEST_SOURCE}
+ ${FackDBus}
)
-file(GLOB TEST_SOURCE
- *.cpp
-)
-set(test_SRC
- ${TEST_HEADER}
- ${TEST_SOURCE}
+# end test
+
+add_executable(${BIN_NAME}
+ ${test_SRC}
+ ./data.qrc
)
+target_compile_definitions(${BIN_NAME} PUBLIC
+ PREFIX="${DSG_PREFIX_PATH}"
+ DSYSINFO_PREFIX="${DSYSINFO_PREFIX}"
+)
+add_dependencies(${BIN_NAME} ${TEST_SO_NAME})
+target_link_libraries(
+ ${BIN_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::Gui
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::CorePrivate
+ Qt${QT_VERSION_MAJOR}::Xml
+ Qt${QT_VERSION_MAJOR}::Concurrent
+ Qt${QT_VERSION_MAJOR}::Test
+ ${GTEST_LIBRARIES}
+ ${LIB_NAME}
+ -l${TEST_SO_NAME}
+)
-# end test
if(LINUX)
- add_executable(${BIN_NAME}
- ${dbus_SRCS}
- ${base_SRCS}
- ${dci_SRCS}
- ${filesystem_SRCS}
- ${log_SRCS}
- ${settings_SRC}
- ${utils_SRC}
- ${glob_SRC}
- ${test_SRC}
- ./data.qrc
- )
- target_link_libraries(
- ${BIN_NAME} PRIVATE
- Qt5::Gui
- Qt5::Core
- Qt5::DBus
- Qt5::Xml
- Qt5::Concurrent
- Qt5::Test
- ${GTEST_LIBRARIES}
- ${QGSettings_LIBRARIES}
- -lpthread
- -lm
- -lgcov
- )
- if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- target_compile_options(${BIN_NAME} PRIVATE -fprofile-instr-generate -ftest-coverage)
- endif()
- if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
- target_compile_options(${BIN_NAME} PRIVATE -fprofile-arcs -ftest-coverage)
- endif()
- target_include_directories( ${BIN_NAME} PUBLIC
- ${Qt5Core_PRIVATE_INCLUDE_DIRS}
- ${QGSettings_INCULDE_DIRS}
- ../include/util/
- ../include/dci/
- ../include/log/
- ../include/base/
- ../include/base/private/
- ../include/global/
- ../include/DtkCore/
- ../include/settings/
- ../include/filesystem/
- ../include/
- ../src/filesystem/private/
- )
-else()
- add_executable(${BIN_NAME}
- ${base_SRCS}
- ${dci_SRCS}
- ${filesystem_SRCS}
- ${log_SRCS}
- ${settings_SRC}
- ${utils_SRC}
- ${glob_SRC}
- ${test_SRC}
- ./data.qrc
- )
- target_link_libraries(
- ${BIN_NAME} PRIVATE
- Qt5::Gui
- Qt5::Core
- Qt5::Xml
- Qt5::Concurrent
- Qt5::Test
- ${GTEST_LIBRARIES}
- -lpthread
- -lm
- -lgcov
- )
- if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- target_compile_options(${BIN_NAME} PRIVATE -fprofile-instr-generate -ftest-coverage)
- endif()
- if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
- target_compile_options(${BIN_NAME} PRIVATE -fprofile-arcs -ftest-coverage)
- endif()
- target_include_directories( ${BIN_NAME} PUBLIC
- ${Qt5Core_PRIVATE_INCLUDE_DIRS}
+ if(${QT_VERSION_MAJOR} STREQUAL "5")
+ target_link_libraries(
+ ${BIN_NAME} PRIVATE
+ PkgConfig::QGSettings
+ )
+ endif()
+
+ target_link_libraries(
+ ${BIN_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::DBus
+ -lpthread
+ -lm
+ -lgcov
+ -ldl
+ )
+endif() #end LINUX
+
+target_link_directories(${BIN_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/testso/)
+target_include_directories( ${BIN_NAME} PUBLIC
../include/util/
../include/dci/
../include/log/
../include/settings/
../include/filesystem/
../include/
- )
-endif()
+ ./testso/
+)
add_test(NAME ${BIN_NAME} COMMAND ${BIN_NAME})
<file>data/dconf-global.meta.json</file>
<file>data/dconf-global.override.json</file>
<file>data/dconf-example_other_app_configure.meta.json</file>
+ <file>data/LGPLv3.txt</file>
+ <file>data/example-license.json</file>
+ <file>data/dconf-example.override.noexistitem.json</file>
</qresource>
</RCC>
--- /dev/null
+GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
"name": "array value type",
"permissions": "readwrite",
"visibility": "public"
+ },
+ "publicConfig": {
+ "value": true,
+ "serial": 0,
+ "flags": ["user-public"],
+ "name": "public configure",
+ "name[zh_CN]": "我是公开的配置",
+ "description": "I am public configure",
+ "permissions": "readwrite",
+ "visibility": "private"
}
}
}
--- /dev/null
+{
+ "magic": "dsg.config.override",
+ "version": "1.0",
+ "contents": {
+ "noexistitem": {
+ "value": "override",
+ "serial": 0,
+ "permissions": "readwrite"
+ }
+ }
+}
--- /dev/null
+[
+ {
+ "name": "dtk",
+ "version": "5.6.8",
+ "copyright": "Copyright 2023 The Uniontech Company Ltd. All rights reserved.",
+ "license": "LGPLv3"
+ }
+]
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include "fakedbusservice.h"
+#include <QDBusConnection>
+#include <QDBusError>
+#include <QDebug>
+FakeDBusService::FakeDBusService(QObject *parent)
+ : QObject(parent)
+ , m_strproperty("testDBusService")
+ , m_objectpaths({QDBusObjectPath("/ss"), QDBusObjectPath("/bb")})
+{
+ registerService();
+}
+
+FakeDBusService::~FakeDBusService()
+{
+ unregisterService();
+}
+
+void FakeDBusService::registerService()
+{
+ QDBusConnection bus = QDBusConnection::sessionBus();
+ if (!bus.registerService(m_service)) {
+ QString errorMsg = bus.lastError().message();
+ if (errorMsg.isEmpty())
+ errorMsg = "maybe it's running";
+ qWarning() << QString("Can't register the %1 service, %2.").arg(m_service).arg(errorMsg);
+ }
+ if (!bus.registerObject(m_path, this, QDBusConnection::ExportScriptableContents)) {
+ qWarning() << QString("Can't register %1 the D-Bus object.").arg(m_path);
+ }
+}
+
+void FakeDBusService::unregisterService()
+{
+ QDBusConnection bus = QDBusConnection::sessionBus();
+ bus.unregisterObject(m_path);
+ bus.unregisterService(m_service);
+}
+
+FakeDBusServiceParent::FakeDBusServiceParent(QObject *parent)
+ : QObject(parent)
+{
+ m_dDbusFakeDBusServiceInter = new DDBusInterface(FakeDBusService::get_service(),
+ FakeDBusService::get_path(),
+ FakeDBusService::get_interface(),
+ QDBusConnection::sessionBus(),
+ this);
+}
+
+QList<QDBusObjectPath> FakeDBusServiceParent::objectpaths()
+{
+ return qvariant_cast<QList<QDBusObjectPath>>(m_dDbusFakeDBusServiceInter->property("objectPaths"));
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#pragma once
+
+#include <QStringList>
+#include <QDBusObjectPath>
+
+#include <ddbusinterface.h>
+
+using Dtk::Core::DDBusInterface;
+
+class FakeDBusServiceParent: public QObject
+{
+ Q_OBJECT
+public:
+ explicit FakeDBusServiceParent(QObject *parent = nullptr);
+
+ Q_PROPERTY(QList<QDBusObjectPath> objectPaths READ objectpaths NOTIFY objectpathsChanged);
+ QList<QDBusObjectPath> objectpaths();
+signals:
+ void objectpathsChanged();
+private:
+ DDBusInterface *m_dDbusFakeDBusServiceInter;
+};
+
+class FakeDBusService : public QObject
+{
+ Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "org.deepin.FakeDBusService")
+public:
+ explicit FakeDBusService(QObject *parent = nullptr);
+ ~FakeDBusService();
+
+ Q_PROPERTY(QString strProperty READ strproperty WRITE setStrproperty)
+ Q_PROPERTY(QList<QDBusObjectPath> objectPaths READ objectpaths)
+
+ static QString get_service() { return "org.deepin.FakeDBusService"; }
+ static QString get_path() { return "/org/deepin/FakeDBusService"; }
+ static QString get_interface() { return "org.deepin.FakeDBusService"; }
+
+public Q_SLOTS:
+ inline QString strproperty() { return m_strproperty; }
+ void setStrproperty(const QString &var) {
+ if (var != m_strproperty)
+ m_strproperty = var;
+ }
+ inline QList<QDBusObjectPath> objectpaths() { return m_objectpaths; }
+ // ExportScriptableContents
+ Q_SCRIPTABLE QString foo() { return QString("bar"); }
+
+private:
+ const QString m_service{"org.deepin.FakeDBusService"};
+ const QString m_path{"/org/deepin/FakeDBusService"};
+ void registerService();
+ void unregisterService();
+
+ QString m_strproperty;
+ QList<QDBusObjectPath> m_objectpaths;
+};
-// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2017 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
-
+ app.setApplicationName("tests");
+ app.setOrganizationName("deepin");
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
DTimedLoop loop;
+#endif
testing::InitGoogleTest(&argc, argv);
int retVal = RUN_ALL_TESTS();
__sanitizer_set_report_path("asan.log");
#endif
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
return loop.exec(0, "main execution") + retVal;
+#else
+ return 0;
+#endif
}
#!/bin/bash
-# SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
+# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: LGPL-3.0-or-later
+set -ex
BUILD_DIR=`pwd`/../build/tests/
HTML_DIR=${BUILD_DIR}/html
# back to project directroy
cd ..
-cmake -Bbuild -DCMAKE_BUILD_TYPE=Debug
+cmake -Bbuild -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=OFF -DEnableCov=ON -DDSYSINFO_PREFIX=/tmp
-cmake --build build --target ut-DtkCore -j$(nproc)
+cmake --build build -j$(nproc)
cd $BUILD_DIR
./ut-DtkCore --gtest_output=xml:${XML_DIR}/report_dtkcore.xml
-lcov -d ./ -c -o coverage_all.info
-#lcov --extract coverage_all.info $EXTRACT_ARGS --output-file coverage.info
+# find *.gcda from build dir
+lcov -d ../ -c -o coverage_all.info
lcov --remove coverage_all.info "*/tests/*" "*/usr/include*" "*build/src*" "*build-ut/src*" --output-file coverage.info
cd ..
genhtml -o $HTML_DIR $BUILD_DIR/coverage.info && mv ${BUILD_DIR}/html/index.html ${BUILD_DIR}/html/cov_dtkcore.html
-// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
class EnvGuard {
public:
- void set(const char *name, const QByteArray &value)
+ void set(const char *name, const QByteArray &value, bool mkpath = true)
{
m_name = name;
- m_originValue = qgetenv(m_name);
+ if (m_originValue.isEmpty())
+ m_originValue = qgetenv(m_name);
qputenv(m_name, value);
- if (!QDir(value).exists()) {
+ if (mkpath && !QDir(value).exists()) {
QDir().mkpath(value);
}
}
+ void unset(const char *name)
+ {
+ m_name = name;
+ m_originValue = qgetenv(m_name);
+ qunsetenv(m_name);
+ }
void restore()
{
qputenv(m_name, m_originValue);
{
return qgetenv(m_name);
}
+ ~EnvGuard() {
+ if (m_name)
+ restore();
+ }
private:
QByteArray m_originValue;
const char* m_name = nullptr;
};
+class FileGuard {
+public:
+ explicit FileGuard(const QString &fileName)
+ : m_fileName(fileName){ }
+ virtual ~FileGuard() {
+ QFile::remove(m_fileName);
+ }
+ const QString fileName() const { return m_fileName; }
+private:
+ QString m_fileName;
+};
-class FileCopyGuard {
+class FileCopyGuard : public FileGuard {
public:
FileCopyGuard(const QString &source, const QString &target)
- : m_target(target)
+ : FileGuard(target)
{
if (!QFile::exists(QFileInfo(target).path()))
QDir().mkpath(QFileInfo(target).path());
QFile::copy(source, target);
}
- ~FileCopyGuard(){ QFile::remove(m_target); }
-private:
- QString m_target;
};
--- /dev/null
+# SPDX-FileCopyrightText: 2023 Uniontech Software Technology Co.,Ltd.
+#
+# SPDX-License-Identifier: LGPL-3.0-or-later
+
+file(GLOB_RECURSE TESTSO "*.cpp" "*.h")
+
+add_compile_options(-fno-sanitize=all)
+add_link_options(-fno-sanitize=all)
+
+add_library(${TEST_SO_NAME} SHARED ${TESTSO})
+
+target_link_libraries(${TEST_SO_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::Core)
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include "testso.h"
+
+char TestClass::A::test(int v)
+{
+ qDebug() << Q_FUNC_INFO << this << v;
+
+ return 'a';
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <QDebug>
+
+namespace TestClass { // test case use multiple inheritance
+struct A
+{
+ int aa;
+ virtual char test(int v);
+ virtual ~A() {}
+};
+
+struct B
+{
+ int bx;
+ virtual char test(int v)
+ {
+ qDebug() << Q_FUNC_INFO << v;
+
+ return 'b';
+ }
+
+ virtual ~B() {}
+};
+
+struct C : public A, public B
+{
+ int cx;
+ char test(int v) override
+ {
+ qDebug() << Q_FUNC_INFO << v;
+ return 'c';
+ }
+};
+} // namespace TestClass
#include "ut_dutil.h"
DCORE_USE_NAMESPACE
-
+#if 0
// 为了方便托管 std::thread 而创建的辅助类
class Thread : public QObject {
std::thread *m_thread = nullptr;
m_loop->exec("testRunInSubThread");
}
-#if 0
TEST_F(ut_DAsync, testMultiThreadSynchronization)
{
// task3, 在子线程中输入 0~999, 在 post 中乘以 2 输出到主线程 then 中
m_loop->exec("testMultiThreadSynchronization");
}
-#endif
TEST_F(ut_DAsync, testOneTimeTask)
{
})->start();
m_loop->exec("test task7");
}
+#endif
//
// SPDX-License-Identifier: LGPL-3.0-or-later
-#include "dcapfsfileengine_p.h"
#include "filesystem/dcapmanager.h"
#include "filesystem/dcapfile.h"
#define TMPCAP_PATH "/tmp/cap"
-class ut_DCapFSFileEngine : public testing::Test
+class ut_DCapFile : public testing::Test
{
protected:
void SetUp() override;
QFile *file;
};
-void ut_DCapFSFileEngine::SetUp()
+void ut_DCapFile::SetUp()
{
manager = DCapManager::instance();
manager->removePath("/tmp");
manager->appendPath(TMPCAP_PATH);
- manager->registerFileEngine();
file = new QFile(nullptr);
QDir dir(TMPCAP_PATH);
ASSERT_TRUE(dir.mkdir(TMPCAP_PATH));
}
-void ut_DCapFSFileEngine::TearDown()
+void ut_DCapFile::TearDown()
{
- manager->unregisterFileEngine();
manager->appendPath("/tmp");
delete file;
QDir dir(TMPCAP_PATH);
ASSERT_TRUE(dir.removeRecursively());
}
-TEST_F(ut_DCapFSFileEngine, testSubDirCanReadWrite)
+TEST(ut_DCapManager, paths)
{
- manager->appendPath("/usr/share/");
- ASSERT_FALSE(DCapFSFileEngine("").canReadWrite("/tmp/usr/share/file0"));
- manager->removePath("/usr/share/");
-}
-
-TEST_F(ut_DCapFSFileEngine, testDCapFileOpenFile)
-{
- file->setFileName("/tmp/file0");
- bool open = file->open(QIODevice::WriteOnly);
- ASSERT_FALSE(open); // path `/tmp` has removed from setup.
-
- QDir dir(TMPCAP_PATH);
- ASSERT_TRUE(dir.exists());
- if (!dir.exists("subdir"))
- ASSERT_TRUE(dir.mkdir("subdir"));
- ASSERT_TRUE(dir.cd("subdir"));
- file->close();
- file->setFileName(dir.path() + "/file0"); // path: /tmp/etc/subdir/file0
- ASSERT_TRUE(file->open(QIODevice::WriteOnly));
-}
-
-TEST_F(ut_DCapFSFileEngine, testDCapFileRename)
-{
- file->setFileName(TMPCAP_PATH"/file0");
- bool open = file->open(QIODevice::WriteOnly);
- ASSERT_TRUE(open); // Default path contains the `/tmp` path.
- file->close();
-
- ASSERT_TRUE(file->rename(TMPCAP_PATH"/file1"));
- ASSERT_FALSE(file->rename("/tmp/file1"));
-
- QDir dir(TMPCAP_PATH);
- if (!dir.exists("subdir"))
- ASSERT_TRUE(dir.mkdir("subdir"));
- ASSERT_TRUE(file->rename(TMPCAP_PATH"/subdir/file0"));
-}
-
-TEST_F(ut_DCapFSFileEngine, testDCapFileRemove)
-{
- file->setFileName(TMPCAP_PATH"/test");
- ASSERT_TRUE(file->open(QFile::WriteOnly));
- file->close();
- ASSERT_TRUE(file->exists());
- ASSERT_TRUE(file->remove());
- ASSERT_FALSE(file->exists());
-
- QDir dir(TMPCAP_PATH);
- if (!dir.exists("subdir"))
- ASSERT_TRUE(dir.mkdir("subdir"));
-
- manager->appendPath(TMPCAP_PATH"/subdir"); // create a new subdir file.
- ASSERT_FALSE(manager->paths().contains(TMPCAP_PATH"/subdir")); // already has /tmp/cap
- QFile f(TMPCAP_PATH"/subdir/test");
- ASSERT_TRUE(f.open(QFile::WriteOnly));
- f.close();
- ASSERT_TRUE(f.exists());
-
- file->setFileName(TMPCAP_PATH"/subdir/test");
- ASSERT_TRUE(file->remove());
-
- manager->appendPath("/tmp");
- ASSERT_TRUE(manager->paths().contains("/tmp"));
- file->setFileName("/tmp/file0");
- bool open = file->open(QIODevice::WriteOnly);
- ASSERT_TRUE(open);
- manager->removePath("/tmp");
- ASSERT_FALSE(manager->paths().contains("/tmp"));
- ASSERT_FALSE(file->remove());
-}
-
-TEST_F(ut_DCapFSFileEngine, testDCapFileLink)
-{
- file->setFileName(TMPCAP_PATH"/test");
- ASSERT_TRUE(file->open(QFile::WriteOnly));
- file->close();
- ASSERT_TRUE(file->exists());
- ASSERT_TRUE(file->link(TMPCAP_PATH"/test1"));
- ASSERT_FALSE(file->link("/tmp/test1"));
-
- QDir dir(TMPCAP_PATH);
- if (!dir.exists("subdir"))
- ASSERT_TRUE(dir.mkdir("subdir"));
- ASSERT_TRUE(file->link(TMPCAP_PATH"/subdir/test1"));
-
- ASSERT_TRUE(file->remove()); // clean the file.
-}
-
-TEST_F(ut_DCapFSFileEngine, testDCapFileCopy)
-{
- file->setFileName(TMPCAP_PATH"/test");
- ASSERT_TRUE(file->open(QFile::WriteOnly));
- file->write("test");
- file->close();
- ASSERT_TRUE(file->exists());
- ASSERT_TRUE(file->copy(TMPCAP_PATH"/test2"));
- ASSERT_TRUE(file->copy("/tmp/test2"));
- ASSERT_FALSE(QFileInfo::exists(TMPCAP_PATH"/subdir/test2"));
-
- QDir dir(TMPCAP_PATH);
- if (!dir.exists("subdir"))
- ASSERT_TRUE(dir.mkdir("subdir"));
- ASSERT_TRUE(file->copy(TMPCAP_PATH"/subdir/test2"));
- ASSERT_TRUE(QFileInfo::exists(TMPCAP_PATH"/subdir/test2"));
-}
-
-TEST_F(ut_DCapFSFileEngine, testDCapFileResize)
-{
- file->setFileName(TMPCAP_PATH"/test");
- ASSERT_TRUE(file->open(QFile::WriteOnly));
- file->write("test");
- file->close();
- ASSERT_TRUE(file->exists());
- ASSERT_TRUE(file->resize(10));
- ASSERT_EQ(file->size(), 10);
-
- QDir dir(TMPCAP_PATH);
- if (!dir.exists("subdir"))
- ASSERT_TRUE(dir.mkdir("subdir"));
-
- QFile f(TMPCAP_PATH"/subdir/test");
- ASSERT_TRUE(f.open(QFile::WriteOnly));
- f.write("test");
- f.close();
- ASSERT_TRUE(f.exists());
-
- file->setFileName(TMPCAP_PATH"/subdir/test");
- ASSERT_TRUE(file->resize(10));
-
- DCapManager::instance()->appendPath("/tmp");
-
- f.setFileName("/tmp/test");
- ASSERT_TRUE(f.open(QFile::WriteOnly));
- f.write("test");
- f.close();
- ASSERT_TRUE(f.exists());
- DCapManager::instance()->removePath("/tmp");
-
- file->setFileName("/tmp/test");
- ASSERT_FALSE(file->resize(10));
- file->remove();}
-
-TEST_F(ut_DCapFSFileEngine, testDCapDirEntry)
-{
- auto createFiles = [this](const QString & path, int count) {
- for (int i = 0; i < count; ++i) {
- file->setFileName(QString(path) + "/test" + QString::number(i));
- ASSERT_TRUE(file->open(QFile::WriteOnly));
- file->close();
- ASSERT_TRUE(file->exists());
- }
- };
-
- createFiles(TMPCAP_PATH, 10);
- QDir dir(TMPCAP_PATH);
- ASSERT_TRUE(dir.entryList(QDir::Files).length() == 10);
+ auto size = DCapManager::instance()->paths().size();
+ EXPECT_TRUE(size > 0);
- if (!dir.exists("subdir"))
- ASSERT_TRUE(dir.mkdir("subdir"));
+ DCapManager::instance()->appendPaths({"/path/to/myCap"});
+ EXPECT_TRUE(DCapManager::instance()->paths().contains("/path/to/myCap"));
- dir.setPath(TMPCAP_PATH"/subdir");
- createFiles(TMPCAP_PATH"/subdir", 10);
- ASSERT_TRUE(dir.entryList(QDir::Files).length() == 10);
- manager->removePath(TMPCAP_PATH);
- ASSERT_TRUE(dir.entryList(QDir::Files).length() == 0);
+ DCapManager::instance()->removePaths({"/path/to/myCap"});
+ EXPECT_FALSE(DCapManager::instance()->paths().contains("/path/to/myCap"));
}
TEST(ut_DCapFileAndDir, testDCapFileOpen)
#include <gtest/gtest.h>
#include "test_helper.hpp"
+#include "backend/dsettingsdconfigbackend.h"
DCORE_USE_NAMESPACE
protected:
static void SetUpTestCase() {
fileBackendLocalPerfix.set("DSG_DCONFIG_FILE_BACKEND_LOCAL_PREFIX", "/tmp/example");
- metaGuard = new FileCopyGuard(":/data/dconf-example.meta.json", QString("%1" PREFIX"/share/dsg/configs/%2/%3.json").arg(fileBackendLocalPerfix.value(), APP_ID, FILE_NAME));
backendType.set("DSG_DCONFIG_BACKEND_TYPE", "FileBackend");
dsgDataDir.set("DSG_DATA_DIRS", PREFIX"/share/dsg");
static void TearDownTestCase() {
QDir(fileBackendLocalPerfix.value()).removeRecursively();
fileBackendLocalPerfix.restore();
- delete metaGuard;
backendType.restore();
dsgDataDir.restore();
}
- virtual void SetUp() override;
+ virtual void SetUp() override {}
+ virtual void TearDown() override;
static EnvGuard backendType;
static EnvGuard fileBackendLocalPerfix;
- static FileCopyGuard *metaGuard;
+ QString metaFilePath = QString("%1" PREFIX"/share/dsg/configs/%2/%3.json").arg(fileBackendLocalPerfix.value(), APP_ID, FILE_NAME);
+ QString noAppIdMetaFilePath = QString("%1" PREFIX"/share/dsg/configs/%2.json").arg(fileBackendLocalPerfix.value(), FILE_NAME);
};
EnvGuard ut_DConfig::fileBackendLocalPerfix;
EnvGuard ut_DConfig::backendType;
-FileCopyGuard *ut_DConfig::metaGuard = nullptr;
+
+void ut_DConfig::TearDown()
+{
+ QDir(fileBackendLocalPerfix.value()).removeRecursively();
+}
TEST_F(ut_DConfig, backend) {
+ FileCopyGuard guard(":/data/dconf-example.meta.json", metaFilePath);
DConfig config(FILE_NAME);
ASSERT_EQ(config.backendName(), QString("FileBackend"));
}
TEST_F(ut_DConfig, isValid) {
+ FileCopyGuard guard(":/data/dconf-example.meta.json", metaFilePath);
DConfig config(FILE_NAME);
ASSERT_TRUE(config.isValid());
}
TEST_F(ut_DConfig, value) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", metaFilePath);
const QStringList array{"1", "2"};
QVariantMap map;
map.insert("key1", "value1");
TEST_F(ut_DConfig, keyList) {
+ FileCopyGuard guard(":/data/dconf-example.meta.json", metaFilePath);
DConfig config(FILE_NAME);
QStringList keyList{QString("key2"), QString("canExit")};
for (auto item : keyList) {
TEST_F(ut_DConfig, OtherAppConfigfile) {
+ FileCopyGuard guard(":/data/dconf-example.meta.json", metaFilePath);
+
constexpr char const *APP_OTHER = "tests_other";
FileCopyGuard gurand(":/data/dconf-example_other_app_configure.meta.json", QString("%1" PREFIX"/share/dsg/configs/%2/%3.json").arg(fileBackendLocalPerfix.value(), APP_OTHER, FILE_NAME));
ASSERT_EQ(config->value("appPublic").toString(), QString("publicValue"));
}
-void ut_DConfig::SetUp() {}
+TEST_F(ut_DConfig, appIdWriteConfig) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", noAppIdMetaFilePath);
+ {
+ // 内部会传递appid,强制appid不为空
+ DConfig config(FILE_NAME);
+ config.setValue("key2", "user-with-appid");
+ ASSERT_EQ(config.value("key2"), "user-with-appid");
+ }
+ {
+ // appid为公共id
+ QScopedPointer<DConfig> config(DConfig::createGeneric(FILE_NAME));
+ ASSERT_TRUE(config->isValid());
+ ASSERT_EQ(config->value("key2").toString(), QString("125"));
+ }
+ {
+ // 传递appid
+ QScopedPointer<DConfig> config(DConfig::create(APP_ID, FILE_NAME));
+ ASSERT_TRUE(config->isValid());
+ ASSERT_EQ(config->value("key2").toString(), "user-with-appid");
+ }
+}
+
+TEST_F(ut_DConfig, noAppidWirteConfig) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", noAppIdMetaFilePath);
+ FileCopyGuard guard2(":/data/dconf-example.meta.json", metaFilePath);
+ {
+ // 内部会传递appid,强制appid不为公共id
+ QScopedPointer<DConfig> config(DConfig::createGeneric(FILE_NAME));
+ ASSERT_TRUE(config->isValid());
+ config->setValue("key2", "user-with-no-appid");
+ ASSERT_EQ(config->value("key2"), "user-with-no-appid");
+ }
+ {
+ // appid为公共id,获取公共id的值
+ QScopedPointer<DConfig> config(DConfig::createGeneric(FILE_NAME));
+ ASSERT_EQ(config->value("key2"), "user-with-no-appid");
+ }
+ {
+ // 传递appid,fallback到公共id的值
+ QScopedPointer<DConfig> config(DConfig::create(APP_ID, FILE_NAME));
+ ASSERT_EQ(config->value("key2"), "user-with-no-appid");
+ }
+}
+
+TEST_F(ut_DConfig, DSettingsDConfigBackend)
+{
+ FileCopyGuard guard(":/data/dconf-example.meta.json", metaFilePath);
+ {
+ DSettingsDConfigBackend backend(FILE_NAME);
+ QStringList keyList{ QString("key2"), QString("canExit") };
+ for (auto item : keyList) {
+ ASSERT_TRUE(backend.keys().contains(item));
+ }
+ }
+
+ {
+ DSettingsDConfigBackend backend(FILE_NAME);
+ ASSERT_EQ(backend.getOption("key2").toString(), QString("125"));
+ }
+
+ {
+
+ DConfig config(FILE_NAME);
+ config.setValue("key2", "126");
+ // save cache file
+ }
+
+ {
+ // reload cache file
+ DSettingsDConfigBackend backend(FILE_NAME);
+ ASSERT_EQ(backend.getOption("key2").toString(), QString("126"));
+ }
+}
+
+TEST_F(ut_DConfig, isDefaultValue) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", metaFilePath);
+ {
+ DConfig config(FILE_NAME);
+ ASSERT_EQ(config.isDefaultValue("key2"), true);
+ }
+ {
+ DConfig config(FILE_NAME);
+ config.setValue("key2", "126");
+ EXPECT_EQ(config.isDefaultValue("key2"), false);
+ }
+ {
+ DConfig config(FILE_NAME);
+ config.setValue("key2", "126");
+ config.reset("key2");
+ EXPECT_EQ(config.isDefaultValue("key2"), true);
+ }
+}
-// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <gtest/gtest.h>
#include "test_helper.hpp"
+#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
+#define type typeId // In qt6 type is deprecated and typeId should be used, this macro is for more convenient compatibility with qt6
+#endif
+
DCORE_USE_NAMESPACE
static constexpr char const *LocalPrefix = "/tmp/example";
+static QString NoAppId;
class ut_DConfigFile : public testing::Test
{
QString metaPath = QString("%1" PREFIX"/share/dsg/configs/%2").arg(LocalPrefix, APP_ID);
QString metaGlobalPath = QString("%1" PREFIX"/share/dsg/configs").arg(LocalPrefix);
QString overridePath = QString("%1" PREFIX"/share/dsg/configs/overrides/%2/%3").arg(LocalPrefix, APP_ID, FILE_NAME);
+ const char *OTHER_APP_ID = "tests_other";
+ QString noAppidMetaPath = QString("%1" PREFIX"/share/dsg/configs").arg(LocalPrefix);
+ QString noAppidOverridePath = QString("%1" PREFIX"/share/dsg/configs/overrides/%2").arg(LocalPrefix, FILE_NAME);
uint uid = getuid();
static EnvGuard dsgDataDir;
static EnvGuard home;
TEST_F(ut_DConfigFile, setValueTypeCheck) {
- FileCopyGuard gurad(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
DConfigFile config(APP_ID, FILE_NAME);
config.load(LocalPrefix);
QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
ASSERT_TRUE(config.setValue("array", array, "test", userCache.get()));
ASSERT_TRUE(config.setValue("array", QJsonDocument::fromJson("[]").toVariant(), "test", userCache.get()));
ASSERT_FALSE(config.setValue("array", "", "test", userCache.get()));
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
ASSERT_FALSE(config.setValue("array", "value1", "test", userCache.get()));
+#else
+ ASSERT_TRUE(config.setValue("array", "value1", "test", userCache.get()));
+#endif
ASSERT_EQ(config.value("array", userCache.get()).type(), type);
}
{
ASSERT_TRUE(config.setValue("array_map", array, "test", userCache.get()));
ASSERT_TRUE(config.setValue("array_map", QJsonDocument::fromJson("[]").toVariant(), "test", userCache.get()));
ASSERT_FALSE(config.setValue("array_map", "", "test", userCache.get()));
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
ASSERT_FALSE(config.setValue("array_map", "value1", "test", userCache.get()));
+#else
+ ASSERT_TRUE(config.setValue("array_map", "value1", "test", userCache.get()));
+#endif
ASSERT_EQ(config.value("array_map", userCache.get()).type(), type);
}
{
QVariantMap map;
map.insert("key1", QStringList{"value1"});
map.insert("key2", QStringList{"value2"});
+ #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
ASSERT_EQ(config.value("map_array", userCache.get()).toMap(), map);
+ #else
+ auto ret = config.value("map_array", userCache.get()).toMap();
+ ASSERT_EQ(ret.keys(), map.keys());
+ auto value1 = ret.values();
+ auto value2 = map.values();
+ ASSERT_EQ(value1.size(), value2.size());
+ for(std::size_t i = 0; i < value1.size(); ++i){
+ ASSERT_EQ(value1[i].toStringList(), value2[i].toStringList());
+ }
+ #endif
ASSERT_TRUE(config.setValue("map_array", QVariantMap(), "test", userCache.get()));
ASSERT_TRUE(config.setValue("map_array", map, "test", userCache.get()));
ASSERT_TRUE(config.setValue("map_array", QJsonDocument::fromJson("{}").toVariant(), "test", userCache.get()));
TEST_F(ut_DConfigFile, fileIODevice) {
- FileCopyGuard gurad(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
{
DConfigFile config(APP_ID, FILE_NAME);
ASSERT_TRUE(config.load(LocalPrefix));
TEST_F(ut_DConfigFile, appmeta) {
- FileCopyGuard gurad(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
{
DConfigFile config(APP_ID, FILE_NAME);
TEST_F(ut_DConfigFile, globalmeta) {
- FileCopyGuard gurad(":/data/dconf-global.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ FileCopyGuard guard(":/data/dconf-global.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
DConfigFile config(APP_ID, FILE_NAME);
ASSERT_TRUE(config.load(LocalPrefix));
QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
TEST_F(ut_DConfigFile, meta) {
- FileCopyGuard gurad(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
- FileCopyGuard gurad2(":/data/dconf-global.meta.json", QString("%1/%2.json").arg(metaGlobalPath, FILE_NAME));
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ FileCopyGuard guard2(":/data/dconf-global.meta.json", QString("%1/%2.json").arg(metaGlobalPath, FILE_NAME));
DConfigFile config(APP_ID, FILE_NAME);
ASSERT_TRUE(config.load(LocalPrefix));
QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
ASSERT_TRUE(userCache->load(LocalPrefix));
ASSERT_EQ(config.value("key3", userCache.get()), QString("application"));
const QStringList array{"value1", "value2"};
- ASSERT_EQ(config.value("array", userCache.get()), array);
+ ASSERT_EQ(config.value("array", userCache.get()).toStringList(), array);
QVariantMap map;
map.insert("key1", "value1");
map.insert("key2", "value2");
TEST_F(ut_DConfigFile, fileOverride) {
- FileCopyGuard gurad(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
{
DConfigFile config(APP_ID, FILE_NAME);
config.load(LocalPrefix);
ASSERT_EQ(config.value("key3", userCache.get()), QString("application"));
}
- FileCopyGuard gurad1(":/data/dconf-example.override.json", QString("%1/%2.json").arg(overridePath, FILE_NAME));
+ FileCopyGuard guard1(":/data/dconf-example.override.json", QString("%1/%2.json").arg(overridePath, FILE_NAME));
{
DConfigFile config(APP_ID, FILE_NAME);
config.load(LocalPrefix);
ASSERT_EQ(config.value("key3", userCache.get()), QString("override"));
}
- FileCopyGuard gurad2(":/data/dconf-override/dconf-example.override.a.json", QString("%1/a/%2.json").arg(overridePath, FILE_NAME));
+ FileCopyGuard guard2(":/data/dconf-override/dconf-example.override.a.json", QString("%1/a/%2.json").arg(overridePath, FILE_NAME));
{
{
DConfigFile config(APP_ID, FILE_NAME, "/a");
}
}
- FileCopyGuard gurad3(":/data/dconf-override/dconf-example.override.a.b.json", QString("%1/a/b/%2.json").arg(overridePath, FILE_NAME));
+ FileCopyGuard guard3(":/data/dconf-override/dconf-example.override.a.b.json", QString("%1/a/b/%2.json").arg(overridePath, FILE_NAME));
{
{
DConfigFile config(APP_ID, FILE_NAME, "/a/b");
}
}
}
+
+TEST_F(ut_DConfigFile, fileOverrideNoExistItem) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ FileCopyGuard guard2(":/data/dconf-example.override.noexistitem.json", QString("%1/%2.json").arg(overridePath, FILE_NAME));
+ {
+ DConfigFile config(APP_ID, FILE_NAME);
+ ASSERT_TRUE(config.load(LocalPrefix));
+ ASSERT_FALSE(config.meta()->keyList().contains("noexistitem"));
+ }
+}
+
+TEST_F(ut_DConfigFile, noAppIdWithGlobalConfiguration) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(noAppidMetaPath, FILE_NAME));
+ {
+ DConfigFile config(NoAppId, FILE_NAME);
+ ASSERT_TRUE(config.load(LocalPrefix));
+ ASSERT_EQ(config.value("key3"), QString("application"));
+ config.setValue("key3", "global-with-no-appid", "test");
+ config.save(LocalPrefix);
+ }
+ {
+ DConfigFile config(NoAppId, FILE_NAME);
+ config.load(LocalPrefix);
+ ASSERT_EQ(config.value("key3"), "global-with-no-appid");
+ }
+}
+
+TEST_F(ut_DConfigFile, noAppIdWithUserConfiguration) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(noAppidMetaPath, FILE_NAME));
+ {
+ DConfigFile config(NoAppId, FILE_NAME);
+ ASSERT_TRUE(config.load(LocalPrefix));
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ ASSERT_TRUE(userCache->load(LocalPrefix));
+ ASSERT_EQ(config.value("key2", userCache.get()), QString("125"));
+ config.setValue("key2", "user-with-no-appid", "test", userCache.get());
+ ASSERT_TRUE(userCache->save(LocalPrefix));
+ }
+ {
+ DConfigFile config(NoAppId, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ ASSERT_EQ(config.value("key2", userCache.get()), "user-with-no-appid");
+ }
+}
+
+TEST_F(ut_DConfigFile, noAppIdUserConfiguration) {
+
+ // meta安装在公共目录,使用空的appid设置配置项, 则无论是否传入appid,获取的是均为空appid的cache值
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(noAppidMetaPath, FILE_NAME));
+ {
+ // 不传入appid设置配置项
+ DConfigFile config(NoAppId, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ config.setValue("key2", "user-with-no-appid", "test", userCache.get());
+ userCache->save(LocalPrefix);
+ }
+ {
+ // 不传入appid,获取的为空appid的值
+ DConfigFile config(NoAppId, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ ASSERT_EQ(config.value("key2", userCache.get()), "user-with-no-appid");
+ }
+}
+
+TEST_F(ut_DConfigFile, appIdOverrideNoAppIdUserConfiguration) {
+
+ // meta安装在公共目录,appid覆盖了meta文件,使用空的appid设置配置项, 则无论是否传入appid,获取的是均为空appid的cache值
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(noAppidMetaPath, FILE_NAME));
+ FileCopyGuard guard2(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ {
+ DConfigFile config(NoAppId, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ config.setValue("key2", "user-with-no-appid", "test", userCache.get());
+ userCache->save(LocalPrefix);
+ }
+ {
+ // 不传入appid,获取的为空appid的值
+ DConfigFile config(NoAppId, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ ASSERT_EQ(config.value("key2", userCache.get()), "user-with-no-appid");
+ }
+ {
+ // 传入appid设置配置项
+ DConfigFile config(APP_ID, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ config.setValue("key2", "user-with-appid", "test", userCache.get());
+ userCache->save(LocalPrefix);
+ }
+ {
+ // 不传入appid,获取的是空appid的值
+ DConfigFile config(NoAppId, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ ASSERT_EQ(config.value("key2", userCache.get()), "user-with-no-appid");
+ }
+ {
+ // 传入appid,获取的是含appid的值
+ DConfigFile config(APP_ID, FILE_NAME);
+ config.load(LocalPrefix);
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->load(LocalPrefix);
+ ASSERT_EQ(config.value("key2", userCache.get()).toString().toStdString(), "user-with-appid");
+ }
+}
+
+TEST_F(ut_DConfigFile, setCachePathPrefix) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ {
+ DConfigFile config(APP_ID, FILE_NAME);
+ config.globalCache()->setCachePathPrefix("/configs-global");
+ ASSERT_TRUE(config.load(LocalPrefix));
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->setCachePathPrefix("/configs-user");
+ ASSERT_TRUE(userCache->load(LocalPrefix));
+ ASSERT_EQ(config.value("key2", userCache.get()), QString("125"));
+ ASSERT_EQ(config.value("key3", userCache.get()), QString("application"));
+
+ config.setValue("key2", QString("user-config"), "test", userCache.get());
+ config.setValue("key3", "global-config", "test", userCache.get());
+ config.save(LocalPrefix);
+ userCache->save(LocalPrefix);
+ }
+ {
+ DConfigFile config(APP_ID, FILE_NAME);
+ config.globalCache()->setCachePathPrefix("/configs-global");
+ ASSERT_TRUE(config.load(LocalPrefix));
+ QScopedPointer<DConfigCache> userCache(config.createUserCache(uid));
+ userCache->setCachePathPrefix("/configs-user");
+ ASSERT_TRUE(userCache->load(LocalPrefix));
+
+ ASSERT_EQ(config.value("key2", userCache.get()), QString("user-config"));
+ ASSERT_EQ(config.value("key3", userCache.get()), QString("global-config"));
+ }
+}
+
+TEST_F(ut_DConfigFile, setSubpath) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ {
+ DConfigFile config(APP_ID, FILE_NAME);
+ ASSERT_TRUE(config.load(LocalPrefix));
+ }
+ {
+ DConfigFile config(APP_ID, FILE_NAME, "/a/b");
+ ASSERT_TRUE(config.load(LocalPrefix));
+ }
+ {
+ DConfigFile config(APP_ID, FILE_NAME, "/a/b/..");
+ ASSERT_TRUE(config.load(LocalPrefix));
+ }
+ {
+ DConfigFile config(APP_ID, FILE_NAME, "/../a/b");
+ ASSERT_FALSE(config.load(LocalPrefix));
+ }
+ {
+ DConfigFile config(APP_ID, FILE_NAME, "/a/b/../../..");
+ ASSERT_FALSE(config.load(LocalPrefix));
+ }
+}
+
+TEST_F(ut_DConfigFile, userPublic) {
+
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME));
+ {
+ DConfigFile config(APP_ID, FILE_NAME);
+ ASSERT_TRUE(config.load(LocalPrefix));
+ ASSERT_TRUE(config.meta()->flags("publicConfig").testFlag(DConfigFile::UserPublic));
+ ASSERT_FALSE(config.meta()->flags("canExit").testFlag(DConfigFile::UserPublic));
+ }
+}
+
+class ut_DConfigFileCheckName : public ut_DConfigFile, public ::testing::WithParamInterface<std::tuple<QString, bool>>
+{
+
+};
+
+TEST_P(ut_DConfigFileCheckName, checkName)
+{
+ const auto [fileName, isValid] = GetParam();
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2.json").arg(metaPath, fileName));
+ DConfigFile config(APP_ID, fileName);
+ ASSERT_EQ(config.load(LocalPrefix), isValid);
+}
+INSTANTIATE_TEST_SUITE_P(checkName, ut_DConfigFileCheckName,
+ ::testing::Values(
+ std::tuple{QString("org-foo"), true},
+ std::tuple{QString("org foo"), true},
+ std::tuple{QString("org.foo2"), true},
+ std::tuple{QString("org/foo"), false},
+ std::tuple{QString("./org-foo"), false},
+ std::tuple{QString("../configs/org-foo"), false}));
+
+class ut_DConfigFileCheckAppId : public ut_DConfigFile, public ::testing::WithParamInterface<std::tuple<QString, bool>>
+{
+
+};
+
+TEST_P(ut_DConfigFileCheckAppId, checkAppId)
+{
+ const auto [appId, isValid] = GetParam();
+ FileCopyGuard guard(":/data/dconf-example.meta.json", QString("%1/%2/%3.json").arg(noAppidMetaPath, appId, FILE_NAME));
+ DConfigFile config(appId, FILE_NAME);
+ ASSERT_EQ(config.load(LocalPrefix), isValid);
+}
+INSTANTIATE_TEST_SUITE_P(checkAppId, ut_DConfigFileCheckAppId,
+ ::testing::Values(
+ std::tuple{NoAppId, true},
+ std::tuple{QString("org-foo"), true},
+ std::tuple{QString("org foo"), false},
+ std::tuple{QString("org.foo2"), true},
+ std::tuple{QString("org/foo"), false},
+ std::tuple{QString("./org-foo"), false},
+ std::tuple{QString("../configs/org-foo"), false}));
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <gtest/gtest.h>
+#include <ddbusextendedabstractinterface.h>
+#include "fakedbus/fakedbusservice.h"
+
+#include <QTest>
+#include <QSignalSpy>
+
+DCORE_USE_NAMESPACE
+
+class DBusExtendedInterfaceFoo : public DDBusExtendedAbstractInterface {
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.deepin.FakeDBusService"; }
+
+ explicit DBusExtendedInterfaceFoo(QObject *parent = nullptr)
+ : DDBusExtendedAbstractInterface(FakeDBusService::get_service(),
+ FakeDBusService::get_path(),
+ staticInterfaceName(),
+ QDBusConnection::sessionBus(),
+ parent) {
+ connect(this, &DBusExtendedInterfaceFoo::propertyChanged, this,
+ [this](const QString &propName, const QVariant &value){
+ if (propName == QStringLiteral("strProperty"))
+ {
+ const QString &strProperty = qvariant_cast<QString>(value);
+ if (m_strProp != strProperty)
+ {
+ m_strProp = strProperty;
+ Q_EMIT StrPropertyChanged(m_strProp);
+ }
+ return;
+ }
+
+ qWarning() << "property not handle: " << propName;
+ return;
+ });
+ }
+ ~DBusExtendedInterfaceFoo(){
+
+ }
+
+ Q_PROPERTY(QString strProperty READ strProperty WRITE setStrProperty NOTIFY StrPropertyChanged)
+ QString strProperty() {
+ return qvariant_cast<QString>(internalPropGet("strProperty", &m_strProp));
+ }
+ void setStrProperty(const QString &value) {
+ internalPropSet("strProperty", QVariant::fromValue(value), &m_strProp);
+ }
+Q_SIGNALS: // SIGNALS
+ void StrPropertyChanged(const QString & value) const;
+private:
+ QString m_strProp;
+};
+
+class ut_DDBusExtendedAbstractInterface : public testing::Test
+{
+public:
+ void SetUp() override
+ {
+ m_fakeService = new FakeDBusService;
+ m_dbusExtend = new DBusExtendedInterfaceFoo;
+ }
+ void TearDown() override
+ {
+ delete m_fakeService;
+ delete m_dbusExtend;
+ }
+ DBusExtendedInterfaceFoo *m_dbusExtend = nullptr;
+ FakeDBusService *m_fakeService = nullptr;
+};
+
+TEST_F(ut_DDBusExtendedAbstractInterface, sync)
+{
+ EXPECT_TRUE(m_dbusExtend->sync());
+ m_dbusExtend->setSync(false, false);
+ EXPECT_FALSE(m_dbusExtend->sync());
+}
+
+TEST_F(ut_DDBusExtendedAbstractInterface, useCache)
+{
+ EXPECT_FALSE(m_dbusExtend->useCache());
+ m_dbusExtend->setUseCache(true);
+ EXPECT_TRUE(m_dbusExtend->useCache());
+}
+
+TEST_F(ut_DDBusExtendedAbstractInterface, startServiceProcess)
+{
+ EXPECT_TRUE(m_dbusExtend->isValid());
+ m_dbusExtend->startServiceProcess();
+}
+
+TEST_F(ut_DDBusExtendedAbstractInterface, getAllProperties)
+{
+ QSignalSpy spy(m_dbusExtend, &DDBusExtendedAbstractInterface::asyncGetAllPropertiesFinished);
+ m_dbusExtend->setSync(false);
+
+ m_dbusExtend->getAllProperties();
+
+ EXPECT_TRUE(QTest::qWaitFor([&spy, this]() {
+ return spy.count() >= 1 && !m_dbusExtend->lastExtendedError().isValid();
+ }, 2000));
+}
+
+TEST_F(ut_DDBusExtendedAbstractInterface, internalPropGet)
+{
+ QSignalSpy asyncPropertyFinishedSpy(m_dbusExtend, &DDBusExtendedAbstractInterface::asyncPropertyFinished);
+ QSignalSpy propertyChangedSpy(m_dbusExtend, &DDBusExtendedAbstractInterface::propertyChanged);
+ m_dbusExtend->setSync(false);
+
+ // internalPropGet
+ m_dbusExtend->strProperty();
+
+ QObject::connect(m_dbusExtend, &DDBusExtendedAbstractInterface::propertyChanged,
+ m_dbusExtend, [](const QString &propertyName, const QVariant &value){
+ if (propertyName == "strProp")
+ EXPECT_EQ(value.toString(), "testDBusService");
+
+ qInfo() << "propertyChanged" << propertyName << value;
+ });
+
+ EXPECT_TRUE(QTest::qWaitFor([&]() {
+ return asyncPropertyFinishedSpy.count() >= 1 &&
+ propertyChangedSpy.count() >= 1 &&
+ !m_dbusExtend->lastExtendedError().isValid();
+ }, 2000));
+}
+
+TEST_F(ut_DDBusExtendedAbstractInterface, internalPropSet)
+{
+ QSignalSpy asyncPropertyFinishedSpy(m_dbusExtend, &DDBusExtendedAbstractInterface::asyncSetPropertyFinished);
+ QSignalSpy propertyChangedSpy(m_dbusExtend, &DDBusExtendedAbstractInterface::propertyChanged);
+ m_dbusExtend->setSync(false);
+
+ // internalPropSet
+ m_dbusExtend->setStrProperty("MyProp");
+
+ QObject::connect(m_dbusExtend, &DDBusExtendedAbstractInterface::propertyChanged,
+ m_dbusExtend, [](const QString &propertyName, const QVariant &value){
+ if (propertyName == "strProp")
+ EXPECT_EQ(value.toString(), "MyProp");
+
+ qInfo() << "propertyChanged" << propertyName << value;
+ });
+
+ EXPECT_TRUE(QTest::qWaitFor([&]() {
+ return asyncPropertyFinishedSpy.count() >= 1 &&
+ propertyChangedSpy.count() >= 1 &&
+ !m_dbusExtend->lastExtendedError().isValid();
+ }, 2000));
+}
+
+#include "ut_ddbusextendedabstractinterface.moc"
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <gtest/gtest.h>
+#include <ddbusinterface.h>
+
+#include "fakedbus/fakedbusservice.h"
+#include <QTest>
+#include <QSignalSpy>
+
+using Dtk::Core::DDBusInterface;
+
+class ut_DDBusInterface : public testing::Test
+{
+public:
+ void SetUp() override
+ {
+ m_testservice = new FakeDBusService();
+ m_testDBusInterfaceParent = new FakeDBusServiceParent();
+ // if parent is nullptr
+ m_testInterface = new DDBusInterface(FakeDBusService::get_service(),
+ FakeDBusService::get_path(),
+ FakeDBusService::get_interface(),
+ QDBusConnection::sessionBus());
+ }
+ void TearDown() override
+ {
+ delete m_testDBusInterfaceParent;
+ delete m_testInterface;
+ delete m_testservice;
+ }
+ DDBusInterface *m_testInterface;
+ FakeDBusService *m_testservice;
+ FakeDBusServiceParent *m_testDBusInterfaceParent;
+};
+
+TEST_F(ut_DDBusInterface, TestProperty)
+{
+ auto objectpaths = m_testservice->objectpaths();
+ EXPECT_EQ(m_testDBusInterfaceParent->objectpaths().length(), objectpaths.length());
+
+ auto strproperty = qvariant_cast<QString>(m_testInterface->property("strProperty"));
+ EXPECT_EQ(strproperty, m_testservice->strproperty());
+}
+
+TEST_F(ut_DDBusInterface, suffix)
+{
+ EXPECT_EQ(m_testInterface->suffix(), "");
+ m_testInterface->setSuffix("-suffix");
+ EXPECT_EQ(m_testInterface->suffix(), "-suffix");
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <gtest/gtest.h>
+#include "ddbussender.h"
+
+#include <QtDBus>
+#include <QDebug>
+
+#include "fakedbus/fakedbusservice.h"
+
+using Dtk::Core::DDBusInterface;
+
+class ut_DDBusSender : public testing::Test
+{
+public:
+ void SetUp() override
+ {
+ m_testservice = new FakeDBusService();
+ m_sender = new DDBusSender;
+ }
+ void TearDown() override
+ {
+ delete m_testservice;
+ delete m_sender;
+ }
+
+ FakeDBusService *m_testservice = nullptr;
+ DDBusSender *m_sender = nullptr;
+};
+
+
+TEST_F(ut_DDBusSender, DDBusCaller)
+{
+ QDBusPendingReply<QString> reply = m_sender->service(m_testservice->get_service())
+ .path(m_testservice->get_path())
+ .interface(m_testservice->get_interface())
+ .method(QString("foo"))
+ .call();
+
+ reply.waitForFinished();
+ if (reply.error().isValid())
+ qWarning() << reply.error().message();
+
+ ASSERT_TRUE(reply.value() == QString("bar"));
+}
+
+TEST_F(ut_DDBusSender, DDBusProperty)
+{
+ auto prop = m_sender->service(m_testservice->get_service())
+ .path(m_testservice->get_path())
+ .interface(m_testservice->get_interface())
+ .property(QString("strProperty"));
+
+ QDBusPendingReply<QVariant> reply = prop.get();
+ reply.waitForFinished();
+ if (reply.error().isValid())
+ qWarning() << reply.error().message();
+
+ ASSERT_TRUE(reply.value().toString() == QString("testDBusService"));
+
+ auto res = prop.set("myProp");
+ res.waitForFinished();
+ if (res.error().isValid())
+ qWarning() << res.error().message();
+
+ ASSERT_TRUE(m_testservice->strproperty() == QString("myProp"));
+}
#include <QTemporaryFile>
#include <DDesktopEntry>
#include <gtest/gtest.h>
+#include <QLocale>
DCORE_USE_NAMESPACE
//qDebug() << desktopFile->save();
//qDebug() << fileName;
}
+
+TEST_F(ut_DesktopEntry, escape)
+{
+ QString slash("\\\\");
+ ASSERT_TRUE(DDesktopEntry::escapeExec(slash) == slash);
+ ASSERT_TRUE(DDesktopEntry::unescapeExec(slash) == slash);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <gtest/gtest.h>
+
+#include "dexpected.h"
+
+DCORE_USE_NAMESPACE
+
+TEST(ut_DExpected, unexpected)
+{
+ DExpected<void> exp_void { DUnexpected { emplace_tag::USE_EMPLACE, 404, "Not Found"} };
+
+ EXPECT_FALSE(exp_void.hasValue());
+ EXPECT_EQ(exp_void.error().getErrorCode(), 404);
+ EXPECT_EQ(exp_void.error().getErrorMessage(), "Not Found");
+}
+
+TEST(ut_DExpected, expected)
+{
+ DExpected<void> exp_void {};
+ EXPECT_TRUE(exp_void.hasValue()); // void
+
+ DExpected<int> exp_int {200};
+ EXPECT_TRUE(exp_int.hasValue());
+ EXPECT_EQ(exp_int.value(), 200);
+}
+
+TEST(ut_DError, defaultError)
+{
+ DError error;
+ EXPECT_EQ(error.getErrorCode(), -1);
+ EXPECT_EQ(error.getErrorMessage(), QString());
+}
+
+TEST(ut_DError, setError)
+{
+ DError error(404, "Not Found");
+ EXPECT_EQ(error.getErrorCode(), 404);
+ EXPECT_EQ(error.getErrorMessage(), "Not Found");
+
+ error.setErrorCode(502);
+ error.setErrorMessage("Bad Gateway");
+ EXPECT_EQ(error.getErrorCode(), 502);
+ EXPECT_EQ(error.getErrorMessage(), "Bad Gateway");
+}
+
+TEST(ut_DError, operator)
+{
+ DError error(404, "Not Found");
+ DError copy = error;
+ EXPECT_EQ(copy, error);
+
+ copy.setErrorCode(502);
+ EXPECT_NE(copy, error);
+
+ qDebug() << error; // operator <<
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <gtest/gtest.h>
+#include <ddbussender.h>
+#include <dexportedinterface.h>
+
+#include <QtDBus>
+
+DCORE_USE_NAMESPACE
+
+class ut_DExportedInterface : public testing::Test
+{
+public:
+ static void SetUpTestSuite() {
+ QDBusConnection::sessionBus().registerService("org.deepin.ExpIntfTest");
+ _infc = new DUtil::DExportedInterface;
+ _infc->registerAction("quit", "quit the application", [](QString)->QVariant {
+ qDebug() << "quit? No Way!";
+ return QVariant();
+ });
+
+ _infc->registerAction("answer", "answer to the ultimate question of life, the universe, and everything",
+ [](QString)->QVariant {
+ return QVariant(42);
+ });
+ }
+ static void TearDownTestSuite() {
+ QDBusConnection::sessionBus().unregisterService("org.deepin.ExpIntfTest");
+ delete _infc;
+ }
+
+ static DUtil::DExportedInterface *_infc;
+};
+
+DUtil::DExportedInterface *ut_DExportedInterface::_infc = nullptr;
+
+TEST_F(ut_DExportedInterface, list)
+{
+ auto caller = DDBusSender().service("org.deepin.ExpIntfTest")
+ .path("/")
+ .interface("com.deepin.ExportedInterface")
+ .method("list");
+
+ auto msg = caller.call();
+ msg.waitForFinished();
+
+ QDBusReply<QStringList> reply = msg;
+
+ EXPECT_EQ(reply.value().size(), 2);
+}
+
+TEST_F(ut_DExportedInterface, help)
+{
+ auto caller = DDBusSender().service("org.deepin.ExpIntfTest")
+ .path("/")
+ .interface("com.deepin.ExportedInterface")
+ .method("help")
+ .arg(QString("quit"));
+
+ auto msg = caller.call();
+ msg.waitForFinished();
+
+ QDBusReply<QString> reply = msg;
+
+ EXPECT_EQ(reply.value(), "quit: quit the application");
+}
+
+TEST_F(ut_DExportedInterface, invoke)
+{
+ auto caller = DDBusSender().service("org.deepin.ExpIntfTest")
+ .path("/")
+ .interface("com.deepin.ExportedInterface")
+ .method("invoke")
+ .arg(QString("answer"))
+ .arg(QString("balabala"));
+
+ auto msg = caller.call();
+ msg.waitForFinished();
+
+ QDBusReply<QVariant> reply = msg;
+
+ EXPECT_EQ(reply.value(), 42);
+
+ caller = DDBusSender().service("org.deepin.ExpIntfTest")
+ .path("/")
+ .interface("com.deepin.ExportedInterface")
+ .method("invoke")
+ .arg(QString("unkownAction")) // invoke an unregistered action
+ .arg(QString("balabala"));
+
+ msg = caller.call();
+ msg.waitForFinished();
+ EXPECT_TRUE(msg.isError());
+ EXPECT_TRUE(msg.error().type() == QDBusError::ErrorType::InvalidArgs);
+}
#include <gtest/gtest.h>
#include <QDir>
+#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
+#include <filesystem> //Avoid changing the access control of the standard library
+#endif
#define private public
#include "filesystem/dfilesystemwatcher.h"
#undef private
if (!fileWatcher->startWatcher()) return;
ASSERT_TRUE(fileWatcher->startWatcher());
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QSignalSpy spy(fileWatcher, &DBaseFileWatcher::fileMoved);
+#else
+ QSignalSpy spy(fileWatcher, &DBaseFileWatcher::fileDeleted);
+#endif
QString oldFile("/tmp/etc/test");
QString newFile("/tmp/etc/test1");
QFile::rename(oldFile, newFile);
-// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <QUrl>
#include <QSignalSpy>
#include <QTest>
+#include <QTemporaryFile>
#include "filesystem/dfilewatcher.h"
#include "filesystem/dfilewatchermanager.h"
DCORE_USE_NAMESPACE
-
class ut_DFileWatcherManager : public testing::Test
{
protected:
void TearDown() override;
DFileWatcherManager *fileWatcherManager = nullptr;
-
};
void ut_DFileWatcherManager::SetUp()
{
fileWatcherManager = new DFileWatcherManager(nullptr);
- QFile file("/tmp/test");
- if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
- return;
- file.close();
}
void ut_DFileWatcherManager::TearDown()
delete fileWatcherManager;
fileWatcherManager = nullptr;
}
- QFile file("/tmp/test");
- if (file.exists())
- file.remove();
- QFile file1("/tmp/test1");
- if (file1.exists())
- file1.remove();
}
TEST_F(ut_DFileWatcherManager, testDFileWatcherManagerAdd)
{
- auto watcher = fileWatcherManager->add("/tmp/test");
- if (!watcher->startWatcher()) return;
+ QTemporaryFile tmpfile;
+ if (!tmpfile.open())
+ return;
+
+ auto watcher = fileWatcherManager->add(tmpfile.fileName());
+ if (!watcher->startWatcher())
+ return;
// test fileDeleted signal
QSignalSpy spy(watcher, &DBaseFileWatcher::fileDeleted);
- QFile file("/tmp/test");
- if (file.exists())
- file.remove();
- ASSERT_TRUE(QTest::qWaitFor([&spy](){
- return spy.count() >= 1;
- }, 1000));
+
+ if (tmpfile.exists())
+ tmpfile.remove();
+ ASSERT_TRUE(QTest::qWaitFor([&spy]() { return spy.count() >= 1; }, 1000));
ASSERT_TRUE(spy.count() >= 1);
+
+ watcher->stopWatcher();
}
-TEST_F(ut_DFileWatcherManager, testDFileSystemWatcherRemove)
+TEST_F(ut_DFileWatcherManager, testDFileWatcherManagerRemove)
{
fileWatcherManager->add("/tmp/test");
fileWatcherManager->remove("/tmp/test");
+ ASSERT_EQ(fileWatcherManager->watchedFiles().count(), 0);
}
+TEST_F(ut_DFileWatcherManager, testDFileWatcherManagerRemoveAll)
+{
+ fileWatcherManager->add("/tmp/test");
+ fileWatcherManager->add("/tmp/test1");
+ fileWatcherManager->removeAll();
+ ASSERT_EQ(fileWatcherManager->watchedFiles().count(), 0);
+}
+
+TEST_F(ut_DFileWatcherManager, testDFileSystemWatcherwatchedFiles)
+{
+ fileWatcherManager->add("/tmp/test");
+ fileWatcherManager->add("/tmp/test1");
+ fileWatcherManager->watchedFiles();
+ ASSERT_EQ(fileWatcherManager->watchedFiles().count(), 2);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+#include <gtest/gtest.h>
+#include <QString>
+#include "dlicenseinfo.h"
+
+DCORE_USE_NAMESPACE
+
+TEST(ut_DLicenseInfo, testLicense)
+{
+ DLicenseInfo licenseInfo;
+ QString jsonContent = u8R"([
+ {
+ "name": "dtk",
+ "version": "5.6.8",
+ "copyright": "Copyright 2023 THe Uniontech Company Ltd. All rights reserved.",
+ "license": "LGPLv3"
+ }
+ ]
+ )";
+ licenseInfo.setLicenseSearchPath(":/data/");
+
+ ASSERT_TRUE(licenseInfo.loadContent(jsonContent.toLatin1()));
+
+ EXPECT_EQ(licenseInfo.componentInfos().count(), 1);
+ ASSERT_TRUE(licenseInfo.loadFile(":/data/example-license.json"));
+ EXPECT_EQ(licenseInfo.componentInfos().count(), 1);
+ ASSERT_FALSE(licenseInfo.licenseContent("LGPLv3").isEmpty());
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+#define private public
+#include "log/LogManager.h"
+#undef private
+
+#include "dpathbuf.h"
+#include "dstandardpaths.h"
+#include "test_helper.hpp"
+#include <gtest/gtest.h>
+
+DCORE_USE_NAMESPACE
+
+TEST(ut_DLogManager, testDLogManager)
+{
+ DPathBuf logPath(QStandardPaths::standardLocations(QStandardPaths::CacheLocation).first());
+
+ logPath = logPath / "tests.log";
+
+ ASSERT_EQ(DLogManager::getlogFilePath(), logPath.toString());
+}
+
+TEST(ut_DLogManager, testDefaultLogPath)
+{
+ EnvGuard guard;
+ guard.unset("HOME");
+
+ // unset HOME env will not init default log file path
+ ASSERT_TRUE(DLogManager::getlogFilePath().contains(DStandardPaths::homePath()));
+}
+
+TEST(ut_DLogManager, testSetInvalidLogPath)
+{
+ QString tmp = QDir::tempPath();
+ DLogManager::setlogFilePath(tmp);
+ // set log file path to a dir is not supported
+ ASSERT_NE(DLogManager::getlogFilePath(), tmp);
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <gtest/gtest.h>
+#define private public
+#include "dnotifysender.h"
+#undef private
+
+DCORE_USE_NAMESPACE
+
+struct DUtil::DNotifyData {
+ uint m_replaceId;
+ int m_timeOut;
+ QString m_body;
+ QString m_summary;
+ QString m_appIcon;
+ QString m_appName;
+ QStringList m_actions;
+ QVariantMap m_hints;
+};
+
+TEST(ut_DNotifySender, notify)
+{
+ DUtil::DNotifySender notifySender("summary");
+ notifySender.appName("appName")
+ .replaceId(123456)
+ .appIcon("iconName")
+ .appBody("msg body")
+ .actions({"1", "2"})
+ .timeOut(5000);
+ //.call();
+
+ EXPECT_TRUE(notifySender.m_dbusData->m_summary == "summary");
+ EXPECT_TRUE(notifySender.m_dbusData->m_body == "msg body");
+ EXPECT_TRUE(notifySender.m_dbusData->m_replaceId == 123456);
+ EXPECT_TRUE(notifySender.m_dbusData->m_appIcon == "iconName");
+ EXPECT_TRUE(notifySender.m_dbusData->m_actions == QStringList({"1", "2"}));
+ EXPECT_TRUE(notifySender.m_dbusData->m_timeOut == 5000);
+}
#include <gtest/gtest.h>
#include "util/dpinyin.h"
-
+#include <algorithm>
DCORE_USE_NAMESPACE
-
class ut_DPinyin : public testing::Test
{
protected:
TEST_F(ut_DPinyin, testChinese2Pinyin)
{
auto pinyin = Chinese2Pinyin("你好, world");
+
ASSERT_EQ(pinyin, "ni3hao3, world");
}
+
+TEST_F(ut_DPinyin, pinyin)
+{
+ bool ok = false;
+ QString words("深度音乐");
+ QStringList tones = {"shēndùyīnlè", "shēndùyīnyuè", "shēndùyīnyào",
+ "shēndùyīnlào", "shēnduóyīnlè", "shēnduóyīnyuè",
+ "shēnduóyīnyào", "shēnduóyīnlào"};
+ QStringList noneTones = {"shenduyinle", "shenduyinyue", "shenduyinyao",
+ "shenduyinlao", "shenduoyinle", "shenduoyinyue",
+ "shenduoyinyao", "shenduoyinlao"};
+ QStringList numTones = {"shen1du4yin1le4", "shen1du4yin1yue4", "shen1du4yin1yao4",
+ "shen1du4yin1lao4", "shen1duo2yin1le4", "shen1duo2yin1yue4",
+ "shen1duo2yin1yao4", "shen1duo2yin1lao4"};
+
+ QStringList py = pinyin(words, TS_ToneNum, &ok);
+ ASSERT_TRUE(ok);
+ bool isPermutation = std::is_permutation(py.begin() , py.end(), numTones.begin());
+ ASSERT_TRUE(isPermutation);
+
+ py = pinyin(words, TS_NoneTone, &ok);
+
+ ASSERT_TRUE(ok);
+ isPermutation = std::is_permutation(py.begin() , py.end(), noneTones.begin());
+ ASSERT_TRUE(isPermutation);
+
+ py = pinyin(words, TS_Tone, &ok);
+ ASSERT_TRUE(ok);
+ isPermutation = std::is_permutation(py.begin() , py.end(), tones.begin());
+ ASSERT_TRUE(isPermutation);
+}
+
+TEST_F(ut_DPinyin, firstLetters)
+{
+ QStringList letters = {"sdyl", "sdyy"};
+ QString words("深度音乐");
+ QStringList ls = firstLetters(words);
+
+ bool isPermutation = std::is_permutation(ls.begin() , ls.end(), letters.begin());
+ ASSERT_TRUE(isPermutation);
+}
+
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <gtest/gtest.h>
+#include <QCoreApplication>
+#include "dsgapplication.h"
+
+DCORE_USE_NAMESPACE
+
+TEST(ut_DSGApplication, id)
+{
+ if (!qgetenv("DSG_APP_ID").isEmpty()) {
+ EXPECT_EQ(DSGApplication::id(), qgetenv("DSG_APP_ID"));
+ }
+
+ EXPECT_EQ(DSGApplication::id(), QCoreApplication::applicationName());
+
+// qputenv("DTK_DISABLED_FALLBACK_APPID", "1");
+// // Q_ASSERT id not empty...
+// EXPECT_EQ(DSGApplication::id(), "");
+}
+
+TEST(ut_DSGApplication, getId)
+{
+ ASSERT_EQ(DSGApplication::getId(QCoreApplication::applicationPid()), QByteArray());
+}
#include <gtest/gtest.h>
#include <QDir>
+#include <QList>
#include <QProcessEnvironment>
+#include <QDebug>
+
+#include "test_helper.hpp"
#include "filesystem/dstandardpaths.h"
DCORE_USE_NAMESPACE
-
class ut_DStandardPaths : public testing::Test
{
protected:
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
if (env.value("SNAP_USER_COMMON") == "/tmp/etc")
qputenv("SNAP_USER_COMMON", "");
+ DStandardPaths::setMode(DStandardPaths::Auto);
}
TEST_F(ut_DStandardPaths, testDStandardPathsWritableLocation)
{
QString dir = DStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
ASSERT_TRUE(dir == "/tmp/etc");
+
+ DStandardPaths::setMode(DStandardPaths::Test);
+ dir = DStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
+ ASSERT_TRUE(dir == QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
}
TEST_F(ut_DStandardPaths, testDStandardPathsStandardLocations)
{
QStringList dirs = DStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
ASSERT_TRUE(dirs.contains("/tmp/etc"));
+
+ DStandardPaths::setMode(DStandardPaths::Test);
+ dirs = DStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
+ ASSERT_TRUE(dirs == QStandardPaths::standardLocations(QStandardPaths::DesktopLocation));
+}
+
+TEST_F(ut_DStandardPaths, testD_Q)
+{
+ ASSERT_EQ(DStandardPaths::locate(QStandardPaths::ApplicationsLocation, "sh"),
+ QStandardPaths::locate(QStandardPaths::ApplicationsLocation, "sh"));
+
+ ASSERT_EQ(DStandardPaths::locateAll(QStandardPaths::ApplicationsLocation, "sh"),
+ QStandardPaths::locateAll(QStandardPaths::ApplicationsLocation, "sh"));
+
+ ASSERT_EQ(DStandardPaths::findExecutable("sh"), QStandardPaths::findExecutable("sh"));
+}
+
+TEST_F(ut_DStandardPaths, homepath)
+{
+ EnvGuard homeGuard;
+ homeGuard.unset("HOME");
+ auto homePath = DStandardPaths::homePath();
+ ASSERT_EQ(DStandardPaths::homePath(getuid()), homePath);
+
+ homeGuard.set("HOME", "/tmp/home", false);
+ homePath = DStandardPaths::homePath();
+ ASSERT_EQ("/tmp/home", homePath);
+ homeGuard.restore();
+}
+
+TEST_F(ut_DStandardPaths, xdgpath)
+{
+ auto testFunc = [](DStandardPaths::XDG type, const QLatin1String &env, const QByteArray &sufix,
+ const QString &prefix = DStandardPaths::homePath()) {
+ EnvGuard guard;
+ guard.unset(env.data());
+ QString path = DStandardPaths::path(type);
+ const QString &localpath = prefix + sufix;
+ ASSERT_EQ(path, localpath);
+
+ QByteArray custom = QByteArray("/tmp/home") + sufix;
+ guard.set(env.data(), custom, false);
+ qputenv(env.data(), custom.data());
+ path = DStandardPaths::path(type);
+ ASSERT_EQ(path, custom);
+ guard.restore();
+ };
+
+ testFunc(DStandardPaths::XDG::DataHome, QLatin1String("XDG_DATA_HOME"), "/.local/share");
+ testFunc(DStandardPaths::XDG::CacheHome, QLatin1String("XDG_CACHE_HOME"), "/.cache");
+ testFunc(DStandardPaths::XDG::ConfigHome, QLatin1String("XDG_CONFIG_HOME"), "/.config");
+ testFunc(DStandardPaths::XDG::RuntimeDir, QLatin1String("XDG_RUNTIME_DIR"), QByteArray::number(getuid()), "/run/user/");
+}
+
+TEST_F(ut_DStandardPaths, dsgpath)
+{
+ {
+ EnvGuard guard;
+ guard.unset("DSG_APP_DATA");
+ QString path = DStandardPaths::path(DStandardPaths::DSG::AppData);
+ ASSERT_EQ(path, QString());
+
+ guard.set("DSG_APP_DATA", "/tmp/dsg");
+ path = DStandardPaths::path(DStandardPaths::DSG::AppData);
+ ASSERT_EQ(path, "/tmp/dsg");
+ guard.restore();
+ }
+ {
+ EnvGuard guard;
+ guard.unset("DSG_DATA_DIRS");
+ QString path = DStandardPaths::path(DStandardPaths::DSG::DataDir);
+ ASSERT_EQ(path, QString(PREFIX"/share/dsg"));
+
+ guard.set("DSG_DATA_DIRS", "/tmp/dsg");
+ path = DStandardPaths::path(DStandardPaths::DSG::DataDir);
+ ASSERT_EQ(path, "/tmp/dsg");
+ guard.restore();
+ }
+}
+
+TEST_F(ut_DStandardPaths, filepath)
+{
+ {
+ EnvGuard guard;
+ guard.unset("DSG_APP_DATA");
+ QString path = DStandardPaths::filePath(DStandardPaths::DSG::AppData, "filename");
+ ASSERT_EQ(path, QString());
+
+ guard.set("DSG_APP_DATA", "/tmp/dsg");
+ path = DStandardPaths::filePath(DStandardPaths::DSG::AppData, "filename");
+ ASSERT_EQ(path, "/tmp/dsg/filename");
+ guard.restore();
+ }
+
+ QString path = DStandardPaths::filePath(DStandardPaths::XDG::CacheHome, "filename");
+ ASSERT_EQ(path, DStandardPaths::path(DStandardPaths::XDG::CacheHome).append("/filename"));
}
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+#include <gtest/gtest.h>
+
+#include <QFile>
+#include <QDebug>
+#include <QRandomGenerator>
+
+#include "dsysinfo.h"
+#include "ddesktopentry.h"
+#include "test_helper.hpp"
+
+DCORE_USE_NAMESPACE
+
+class ut_DSysInfo : public testing::Test
+{
+protected:
+ void SetUp() override {
+ if (QLatin1String(DSYSINFO_PREFIX).isEmpty()) {
+ GTEST_SKIP_("DSYSINFO_PREFIX not defined...");
+ }
+ }
+ void TearDown() override {
+
+ }
+};
+
+TEST_F(ut_DSysInfo, testOsVersion)
+{
+ FileGuard guard("/tmp/etc/os-version");
+ DDesktopEntry entry(guard.fileName());
+ entry.setStringValue("UnionTech OS Desktop", "SystemName", "Version");
+ entry.setStringValue("统信桌面操作系统", "SystemName[zh_CN]", "Version");
+ entry.setStringValue("Desktop", "ProductType", "Version");
+ entry.setStringValue("桌面", "ProductType[zh_CN]", "Version");
+ entry.setStringValue("Professional", "EditionName", "Version");
+ entry.setStringValue("专业版", "EditionName[zh_CN]", "Version");
+ entry.setStringValue("20", "MajorVersion", "Version");
+ entry.setStringValue("100A", "MinorVersion", "Version");
+ entry.setStringValue("11Z18.107.109", "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+
+ ASSERT_TRUE(DSysInfo::uosSystemName(QLocale("C")) == "UnionTech OS Desktop");
+ ASSERT_TRUE(DSysInfo::uosSystemName(QLocale("zh_CN")) == "统信桌面操作系统");
+ ASSERT_TRUE(DSysInfo::uosProductTypeName(QLocale("zh_CN")) == "桌面");
+ ASSERT_TRUE(DSysInfo::uosProductTypeName(QLocale("C")) == "Desktop");
+ ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("zh_CN")) == "专业版");
+ ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("C")) == "Professional");
+ ASSERT_TRUE(DSysInfo::majorVersion() == "20");
+ ASSERT_TRUE(DSysInfo::minorVersion() == "100A");
+ ASSERT_TRUE(DSysInfo::buildVersion() == "107.109");
+
+ // test minVersion.BC SP1….SP99
+ for (int i = 0; i < 3; ++i) {
+ int sp = QRandomGenerator::global()->generate() % 100;
+ entry.setStringValue(QString("%1").arg(1001 + sp * 10), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::spVersion() == (sp ? QString("SP%1").arg(sp) : QString()));
+ }
+
+ // test minVersion.D udpate1~udpate9 updateA~udpateZ
+ for (int i = 0; i < 10; ++i) {
+ entry.setStringValue(QString("%1").arg(1000 + i), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::udpateVersion() == (i ? QString("update%1").arg(i) : QString()));
+ }
+
+ for (char c = 'A'; c <= 'Z'; ++c) {
+ entry.setStringValue(QString("100").append(c), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::udpateVersion() == QString("update%1").arg(c));
+ }
+
+ // test incalide MinorVersion
+ entry.setStringValue(QString("100?"), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::udpateVersion() == QString());
+ // restore MinorVersion
+ entry.setStringValue(QString("1000"), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+
+ // test OsBuild.B == 1 && OsBuild.D = [1, 6]
+ ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosDesktop);
+ for (int i = 1; i <= 6; ++i) {
+ entry.setStringValue(QString("%1").arg(11008.107 + i * 10), "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+ switch (i) {
+ case 1:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosProfessional);
+ break;
+ case 2:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosHome);
+ break;
+ case 4:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosMilitary);
+ break;
+ case 5:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosDeviceEdition);
+ break;
+ case 6:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEducation);
+ break;
+ default:
+ break;
+ }
+ }
+
+ // test OsBuild.B == 2 && OsBuild.D = [1, 5]
+ entry.setStringValue("12018.107", "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosServer);
+ for (int i = 1; i <= 5; ++i) {
+ entry.setStringValue(QString("%1").arg(12008.107 + i * 10), "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+ switch (i) {
+ case 1:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEnterprise);
+ break;
+ case 2:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEnterpriseC);
+ break;
+ case 3:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEuler);
+ break;
+ case 4:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosMilitaryS);
+ break;
+ case 5:
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosDeviceEdition);
+ break;
+ default:
+ break;
+ }
+ }
+
+ // test OsBuild.B == 3
+ entry.setStringValue("13018.107", "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosDevice);
+ ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEnterprise);
+
+ // test invalid OsBuild.B
+ entry.setStringValue("10018.107", "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosTypeUnknown);
+
+ // 社区版测试
+ entry.setStringValue("Community", "EditionName", "Version");
+ entry.setStringValue("社区版", "EditionName[zh_CN]", "Version");
+ entry.setStringValue("21.1.2", "MinorVersion", "Version");
+ entry.setStringValue("11038.107", "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+
+ ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("zh_CN")) == "社区版");
+ ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("C")) == "Community");
+ ASSERT_TRUE(DSysInfo::minorVersion() == "21.1.2");
+ ASSERT_TRUE(DSysInfo::buildVersion() == "107");
+
+ //社区版A_BC_D模式 test minVersion.BC SP1….SP99
+ for (int i = 0; i < 3; ++i) {
+ int sp = QRandomGenerator::global()->generate() % 100;
+ entry.setStringValue(QString("%1").arg(1001 + sp * 10), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::spVersion() == (sp ? QString("SP%1").arg(sp) : QString()));
+ }
+
+ //社区版A_BC_D模式 test minVersion.D udpate1~udpate9 updateA~udpateZ
+ for (int i = 0; i < 10; ++i) {
+ entry.setStringValue(QString("%1").arg(1000 + i), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::udpateVersion() == (i ? QString("update%1").arg(i) : QString()));
+ }
+
+ auto dmax = [](int x, int y){
+ return x > y ? x : y;
+ };
+ //社区版A_B_C模式 test minVersion.BC SP1….SP99
+ const QString &defalutSP("21.%1");
+ for (int i = 1; i < 3; ++i) {
+ int sp = dmax(QRandomGenerator::global()->generate() % 100, 1);
+ entry.setStringValue(defalutSP.arg(sp), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::spVersion() == QString("SP%1").arg(sp));
+ }
+
+ //社区版A_B_C模式 test minVersion.D udpate1~udpate9 updateA~udpateZ
+ const QString &defalutUpdate("21.1.%1");
+ for (int i = 1; i < 3; ++i) {
+ int sp = dmax(QRandomGenerator::global()->generate() % 100, 1);
+ entry.setStringValue(defalutUpdate.arg(sp), "MinorVersion", "Version");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::udpateVersion() == QString("update%1").arg(sp));
+ }
+
+ // 家庭版测试
+ entry.setStringValue("Home", "EditionName", "Version");
+ entry.setStringValue("家庭版", "EditionName[zh_CN]", "Version");
+ entry.setStringValue("21.0", "MinorVersion", "Version");
+ entry.setStringValue("11078.107", "OsBuild", "Version");
+ ASSERT_TRUE(entry.save());
+
+ ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("zh_CN")) == "家庭版");
+ ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("C")) == "Home");
+ ASSERT_TRUE(DSysInfo::minorVersion() == "21.0");
+ ASSERT_TRUE(DSysInfo::buildVersion() == "107");
+ ASSERT_TRUE(DSysInfo::spVersion() == QStringLiteral(""));
+ ASSERT_TRUE(DSysInfo::udpateVersion() == QStringLiteral(""));
+}
+
+TEST_F(ut_DSysInfo, testdistributionInfo)
+{
+ FileGuard fg("/tmp/share/deepin/distribution.info");
+ DDesktopEntry entry(fg.fileName());
+ entry.setStringValue("Deepin", "Name", "Distribution");
+ entry.setStringValue("www.deepin.org", "WebsiteName", "Distribution");
+ entry.setStringValue("https://www.deepin.org", "Website", "Distribution");
+ entry.setStringValue("Logo.svg", "Logo", "Distribution");
+ entry.setStringValue("LogoLight.svg", "LogoLight", "Distribution");
+ entry.setStringValue("LogoTransparent.svg", "LogoTransparent", "Distribution");
+
+ entry.setStringValue("Deepin-Manufacturer", "Name", "Manufacturer");
+ entry.setStringValue("Deepin-Distributor", "Name", "Distributor");
+ ASSERT_TRUE(entry.save());
+
+ EnvGuard guard;
+ guard.set("XDG_DATA_HOME", "/tmp/share");
+ ASSERT_EQ(DSysInfo::distributionInfoPath(), fg.fileName());
+ auto website = DSysInfo::distributionOrgWebsite();
+ ASSERT_EQ(website.first, "www.deepin.org");
+ ASSERT_EQ(website.second, "https://www.deepin.org");
+ ASSERT_EQ(DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Normal), "Logo.svg");
+ ASSERT_EQ(DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Light), "LogoLight.svg");
+ ASSERT_EQ(DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Symbolic), ""); // not set
+ ASSERT_EQ(DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Transparent), "LogoTransparent.svg");
+
+ ASSERT_EQ(DSysInfo::distributionOrgName(DSysInfo::Distribution), "Deepin");
+ ASSERT_EQ(DSysInfo::distributionOrgName(DSysInfo::Distributor), "Deepin-Distributor");
+ ASSERT_EQ(DSysInfo::distributionOrgName(DSysInfo::Manufacturer), "Deepin-Manufacturer");
+
+ guard.restore();
+}
+
+TEST_F(ut_DSysInfo, osRelease)
+{
+ FileGuard fg("/tmp/etc/os-release");
+ DDesktopEntry entry(fg.fileName());
+ entry.setStringValue("Deepin", "ID", "Release");
+ entry.setStringValue("20.9", "VERSION_ID", "Release");
+ entry.setStringValue("Deepin 20.9", "PRETTY_NAME", "Release");
+ ASSERT_TRUE(entry.save());
+
+ ASSERT_EQ(DSysInfo::operatingSystemName(), "Deepin 20.9");
+ ASSERT_EQ(DSysInfo::productType(), DSysInfo::Deepin);
+ ASSERT_EQ(DSysInfo::productTypeString(), "Deepin");
+ ASSERT_EQ(DSysInfo::productVersion(), "20.9");
+
+ // isDeepin
+ ASSERT_TRUE(DSysInfo::isDeepin());
+ entry.setStringValue("Uos", "ID", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::isDeepin());
+
+ entry.setStringValue("arch", "ID", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_FALSE(DSysInfo::isDeepin());
+
+ QString types[] = {"UnknownType", "Deepin", "Arch", "CentOS", "Debian",
+ "Fedora", "LinuxMint", "Manjaro", "openSUSE","SailfishOS",
+ "Ubuntu", "Uos", "Gentoo", "NixOS"};
+ for (int i = DSysInfo::UnknownType; i <= DSysInfo::NixOS; ++i) {
+ entry.setStringValue(types[i], "ID", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_EQ(DSysInfo::productType(), DSysInfo::ProductType(i));
+ }
+}
+
+TEST_F(ut_DSysInfo, isDDE)
+{
+ FileGuard fg("/tmp/etc/os-release");
+ DDesktopEntry entry(fg.fileName());
+ entry.setStringValue("Deepin 20.9", "PRETTY_NAME", "Release");
+ entry.setStringValue("Deepin", "ID", "Release");
+ entry.setStringValue("20.9", "VERSION_ID", "Release");
+ ASSERT_TRUE(entry.save());
+
+ FileGuard fg2("/tmp/etc/deepin-version");
+ DDesktopEntry entry2(fg2.fileName());
+ entry2.setStringValue("20.9", "Version", "Release");
+ entry2.setStringValue("Desktop", "Type", "Release");
+ ASSERT_TRUE(entry2.save());
+
+ // isDeepin && deepinType valid
+ ASSERT_TRUE(DSysInfo::isDeepin());
+ ASSERT_TRUE(DSysInfo::isDDE());
+
+ // isDeepin but deepinType unknow
+ entry2.setStringValue("Unknown", "Type", "Release");
+ ASSERT_TRUE(entry2.save());
+ ASSERT_TRUE(DSysInfo::isDeepin());
+ ASSERT_FALSE(DSysInfo::isDDE());
+
+ // !isDeepin && XDG_SESSION_DESKTOP == dde or deepin
+ {
+ entry.setStringValue("Unknown", "ID", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_FALSE(DSysInfo::isDeepin());
+ EnvGuard guard;
+
+ guard.set("XDG_SESSION_DESKTOP", "dde");
+ ASSERT_TRUE(DSysInfo::isDDE());
+ guard.restore();
+
+ guard.set("XDG_SESSION_DESKTOP", "deepin");
+ ASSERT_TRUE(DSysInfo::isDDE());
+ guard.restore();
+
+ guard.set("XDG_SESSION_DESKTOP", "Unknown");
+ ASSERT_FALSE(DSysInfo::isDDE());
+ guard.restore();
+ }
+
+}
+
+TEST_F(ut_DSysInfo, deepinVersion)
+{
+ FileGuard fg("/tmp/etc/deepin-version");
+ DDesktopEntry entry(fg.fileName());
+ entry.setStringValue("20.9", "Version", "Release");
+ entry.setStringValue("Desktop", "Type", "Release");
+ entry.setStringValue("社区版", "Type[zh_CN]", "Release");
+ entry.setStringValue("Y2020E0001", "Edition", "Release");
+ entry.setStringValue("Y2020CR001", "Copyright", "Release");
+ entry.setStringValue("build1", "Buildid", "Addition");
+ //entry.setStringValue("", "Milestone", "Addition");
+ ASSERT_TRUE(entry.save());
+
+ ASSERT_EQ(DSysInfo::deepinTypeDisplayName(QLocale("C")), "Desktop");
+ ASSERT_EQ(DSysInfo::deepinTypeDisplayName(QLocale("zh_CN")), "社区版");
+ ASSERT_EQ(DSysInfo::deepinVersion(), "20.9");
+ ASSERT_EQ(DSysInfo::deepinEdition(), "Y2020E0001");
+ ASSERT_EQ(DSysInfo::deepinCopyright(), "Y2020CR001");
+
+ qInfo() << "DSysInfo::deepinType()" << DSysInfo::deepinType();
+ ASSERT_EQ(DSysInfo::deepinType(), DSysInfo::DeepinDesktop);
+ {
+ // isCommunityEdition Not Uos
+ FileGuard fg("/tmp/etc/os-release");
+ DDesktopEntry entry(fg.fileName());
+ entry.setStringValue("Deepin", "ID", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_TRUE(DSysInfo::isCommunityEdition());
+
+ entry.setStringValue("Uos", "ID", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_FALSE(DSysInfo::isCommunityEdition());
+ }
+
+ entry.setStringValue("Professional", "Type", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_EQ(DSysInfo::deepinType(), DSysInfo::DeepinProfessional);
+ ASSERT_FALSE(DSysInfo::isCommunityEdition());
+
+ entry.setStringValue("Server", "Type", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_EQ(DSysInfo::deepinType(), DSysInfo::DeepinServer);
+ ASSERT_FALSE(DSysInfo::isCommunityEdition());
+
+ entry.setStringValue("Personal", "Type", "Release");
+ ASSERT_TRUE(entry.save());
+ ASSERT_EQ(DSysInfo::deepinType(), DSysInfo::DeepinPersonal);
+ ASSERT_FALSE(DSysInfo::isCommunityEdition());
+}
+
+TEST_F(ut_DSysInfo, other)
+{
+ qDebug() << DSysInfo::computerName();
+ qDebug() << DSysInfo::memoryInstalledSize();
+ qDebug() << DSysInfo::memoryTotalSize();
+ qDebug() << DSysInfo::systemDiskSize();
+}
--- /dev/null
+// SPDX-FileCopyrightText: 2022-2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include "dtextencoding.h"
+
+#include <gtest/gtest.h>
+
+#include <QLibrary>
+#include <QFile>
+#include <QTemporaryFile>
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+#include <QStringConverter>
+#else
+#include <QTextCodec>
+#endif
+
+DCORE_USE_NAMESPACE
+
+class ut_DTextEncoding : public testing::Test
+{
+public:
+ static void SetUpTestCase();
+
+ bool rewriteTempFile(const QByteArray &data);
+ void removeTempFile();
+
+ static bool canLoadUchardet;
+ static bool canLoadICU;
+ static QString tmpFileName;
+
+ static QByteArray dataGB18030;
+ static QByteArray dataEUC_JP;
+ static QByteArray dataKOI8_R;
+
+protected:
+ void TearDown() override;
+};
+
+bool ut_DTextEncoding::canLoadUchardet = false;
+bool ut_DTextEncoding::canLoadICU = false;
+QString ut_DTextEncoding::tmpFileName;
+// Utf8 Chinese Text(Hex): 中文测试一二三四123456789abcdefgh
+QByteArray ut_DTextEncoding::dataGB18030 = "\xd6\xd0\xce\xc4\xb2\xe2\xca\xd4\xd2\xbb\xb6\xfe\xc8\xfd\xcb\xc4\x31\x32\x33\x34\x35"
+ "\x36\x37\x38\x39\x61\x62\x63\x64\x65\x66\x67\x68";
+// Utf8 Japanese Text(Hex): 日本語のテスト ワン ツー スリー フォー 123456789abcdefgh
+QByteArray ut_DTextEncoding::dataEUC_JP =
+ "\xc6\xfc\xcb\xdc\xb8\xec\xa4\xce\xa5\xc6\xa5\xb9\xa5\xc8\x20\xa5\xef\xa5\xf3\x20\xa5\xc4\xa1\xbc\x20\xa5\xb9\xa5\xea\xa1\xbc"
+ "\x20\xa5\xd5\xa5\xa9\xa1\xbc\x20\x31\x32\x33\x34\x35\x36\x37\x38\x39\x61\x62\x63\x64\x65\x66\x67\x68";
+// Utf8 Russian Text(Hex): Русский тест раз два три четыре 123456789abcdefgh
+QByteArray ut_DTextEncoding::dataKOI8_R =
+ "\xf2\xd5\xd3\xd3\xcb\xc9\xca\x20\xd4\xc5\xd3\xd4\x20\xd2\xc1\xda\x20\xc4\xd7\xc1\x20\xd4\xd2\xc9\x20\xde\xc5\xd4\xd9\xd2\xc5"
+ "\x20\x31\x32\x33\x34\x35\x36\x37\x38\x39\x61\x62\x63\x64\x65\x66\x67\x68";
+
+void ut_DTextEncoding::SetUpTestCase()
+{
+ QLibrary uchardet("libuchardet", "0");
+ if (!uchardet.isLoaded()) {
+ canLoadUchardet = uchardet.load();
+ if (canLoadUchardet) {
+ uchardet.unload();
+ }
+ }
+
+ QLibrary icuuc("libicuuc");
+ if (icuuc.isLoaded()) {
+ canLoadICU = icuuc.load();
+ if (canLoadICU) {
+ icuuc.unload();
+ }
+ }
+}
+
+bool ut_DTextEncoding::rewriteTempFile(const QByteArray &data)
+{
+ QTemporaryFile tmpFile;
+ if (!tmpFile.open()) {
+ return false;
+ }
+ tmpFileName = tmpFile.fileName();
+ tmpFile.setAutoRemove(false);
+
+ tmpFile.write(data);
+ tmpFile.close();
+ return true;
+}
+
+void ut_DTextEncoding::removeTempFile()
+{
+ if (QFile::exists(tmpFileName)) {
+ QFile::remove(tmpFileName);
+ }
+}
+
+void ut_DTextEncoding::TearDown()
+{
+ removeTempFile();
+}
+
+TEST_F(ut_DTextEncoding, testDetectTextEncode)
+{
+ // Default encoding is utf-8.
+ ASSERT_EQ("UTF-8", DTextEncoding::detectTextEncoding(""));
+ ASSERT_EQ("UTF-8", DTextEncoding::detectTextEncoding("12345678ABCDEFG"));
+
+ ASSERT_EQ("GB18030", DTextEncoding::detectTextEncoding(dataGB18030));
+ ASSERT_EQ("EUC-JP", DTextEncoding::detectTextEncoding(dataEUC_JP));
+ ASSERT_EQ("KOI8-R", DTextEncoding::detectTextEncoding(dataKOI8_R));
+}
+
+TEST_F(ut_DTextEncoding, testDetectTextEncodeWithUchardet)
+{
+ if (canLoadUchardet) {
+ QByteArray uchardetEncoding("EUC-TW");
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ auto encode = QStringConverter::encodingForName(uchardetEncoding);
+ ASSERT_FALSE(encode);
+#else
+ // QTextCodec not suppotted EUC-TW.
+ QTextCodec *codec = QTextCodec::codecForName(uchardetEncoding);
+ ASSERT_EQ(codec, nullptr);
+#endif
+
+ // Utf8 text: 繁體中文測試一二三四
+ QByteArray dataZhTraditional("\u7e41\u9ad4\u4e2d\u6587\u6e2c\u8a66\u4e00\u4e8c\u4e09\u56db");
+ QByteArray dataEUC_TW;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataZhTraditional, dataEUC_TW, uchardetEncoding));
+ ASSERT_EQ(uchardetEncoding, DTextEncoding::detectTextEncoding(dataEUC_TW));
+
+ QByteArray convertGB18030;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataEUC_TW, convertGB18030, "GB18030"));
+ QByteArray convertUTF8;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(convertGB18030, convertUTF8, "UTF-8"));
+ ASSERT_EQ(dataZhTraditional, convertUTF8);
+ }
+}
+
+TEST_F(ut_DTextEncoding, testDetectFileEncode)
+{
+ bool isOk = false;
+ ASSERT_EQ("", DTextEncoding::detectFileEncoding(tmpFileName, &isOk));
+ ASSERT_FALSE(isOk);
+
+ ASSERT_TRUE(rewriteTempFile(""));
+ ASSERT_EQ("UTF-8", DTextEncoding::detectFileEncoding(tmpFileName, &isOk));
+ ASSERT_TRUE(isOk);
+
+ ASSERT_TRUE(rewriteTempFile(dataGB18030));
+ ASSERT_EQ("GB18030", DTextEncoding::detectFileEncoding(tmpFileName, &isOk));
+ ASSERT_TRUE(isOk);
+
+ ASSERT_TRUE(rewriteTempFile(dataEUC_JP));
+ ASSERT_EQ("EUC-JP", DTextEncoding::detectFileEncoding(tmpFileName, &isOk));
+ ASSERT_TRUE(isOk);
+
+ ASSERT_TRUE(rewriteTempFile(dataKOI8_R));
+ ASSERT_EQ("KOI8-R", DTextEncoding::detectFileEncoding(tmpFileName, &isOk));
+ ASSERT_TRUE(isOk);
+}
+
+TEST_F(ut_DTextEncoding, testConvertTextEncoding)
+{
+ QByteArray dataUTF_8;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataGB18030, dataUTF_8, "UTF-8"));
+ ASSERT_EQ("UTF-8", DTextEncoding::detectTextEncoding(dataUTF_8));
+
+ // QStringConverter not support GB18030.
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QTextCodec *codec = QTextCodec::codecForName("GB18030");
+ ASSERT_EQ(codec->toUnicode(dataGB18030).toUtf8(), dataUTF_8);
+
+ QByteArray convertedGB18030;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataUTF_8, convertedGB18030, "GB18030"));
+ ASSERT_EQ(dataGB18030, convertedGB18030);
+#endif
+
+ // Convert with multi bytes encoding.
+ QByteArray dataUTF_16;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataUTF_8, dataUTF_16, "UTF-16"));
+ ASSERT_EQ("UTF-16", DTextEncoding::detectTextEncoding(dataUTF_16));
+
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ // Qt6 using utf-16 string by default, not utf-8.
+ auto fromUtf16 = QStringDecoder(QStringDecoder::Utf16);
+ QString strUtf16 = fromUtf16.decode(dataUTF_16);
+ ASSERT_EQ(strUtf16, QString::fromUtf8(dataUTF_8));
+#else
+ codec = QTextCodec::codecForName("UTF-16");
+ ASSERT_EQ(codec->toUnicode(dataUTF_16).toUtf8(), dataUTF_8);
+#endif
+
+ QByteArray convertedUTF8;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataUTF_16, convertedUTF8, "UTF-8"));
+ ASSERT_EQ(dataUTF_8, convertedUTF8);
+
+ QByteArray dataUTF_32;
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataUTF_8, dataUTF_32, "UTF-32"));
+ ASSERT_EQ("UTF-32", DTextEncoding::detectTextEncoding(dataUTF_32));
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ auto fromUtf32 = QStringDecoder(QStringDecoder::Utf32);
+ QString strUtf32 = fromUtf32.decode(dataUTF_32);
+ ASSERT_EQ(strUtf32, QString::fromUtf8(dataUTF_8));
+#else
+ codec = QTextCodec::codecForName("UTF-32");
+ ASSERT_EQ(codec->toUnicode(dataUTF_32).toUtf8(), dataUTF_8);
+#endif
+
+ ASSERT_TRUE(DTextEncoding::convertTextEncoding(dataUTF_32, convertedUTF8, "UTF-8"));
+ ASSERT_EQ(dataUTF_8, convertedUTF8);
+}
+
+TEST_F(ut_DTextEncoding, testConvertTextEncodingWithError)
+{
+ QByteArray dataUTF_8;
+ ASSERT_FALSE(DTextEncoding::convertTextEncoding(dataGB18030, dataUTF_8, "ERROR"));
+ ASSERT_FALSE(DTextEncoding::convertTextEncoding(dataGB18030, dataUTF_8, "KOI8-R"));
+
+ QByteArray tmpUTF_8Error = "\x31\x32\x33\xFF\xFF\xFF\x31\x32\x33";
+ QByteArray tmpUTF_16;
+ QString error;
+ int converted = 0;
+ bool ret = DTextEncoding::convertTextEncodingEx(tmpUTF_8Error, tmpUTF_16, "UTF-16", "UTF-8", &error, &converted);
+ ASSERT_FALSE(ret);
+ ASSERT_FALSE(error.isEmpty());
+ ASSERT_EQ(converted, 3);
+
+ QByteArray tmpUTF_8Error2 = "\xFF\xFF";
+ converted = 3;
+ ret = DTextEncoding::convertTextEncodingEx(tmpUTF_8Error2, tmpUTF_16, "UTF-16", "UTF-8", &error, &converted);
+ ASSERT_FALSE(ret);
+ ASSERT_EQ(converted, 0);
+}
+
+TEST_F(ut_DTextEncoding, testConvertFileEncoding)
+{
+ ASSERT_TRUE(rewriteTempFile(dataGB18030));
+ ASSERT_TRUE(DTextEncoding::convertFileEncoding(tmpFileName, "UTF-8"));
+ ASSERT_EQ("UTF-8", DTextEncoding::detectFileEncoding(tmpFileName));
+
+ ASSERT_TRUE(DTextEncoding::convertFileEncoding(tmpFileName, "UTF-32"));
+ ASSERT_EQ("UTF-32", DTextEncoding::detectFileEncoding(tmpFileName));
+
+ ASSERT_FALSE(DTextEncoding::convertFileEncoding("", "UTF-32"));
+}
+
+TEST_F(ut_DTextEncoding, testConvertFileEncodingTo)
+{
+ QString tmpConvertFileName("/tmp/ut_DTextEncoding_temp_testConvertFileEncodingTo.txt");
+ if (QFile::exists(tmpConvertFileName)) {
+ ASSERT_TRUE(QFile::remove(tmpConvertFileName));
+ }
+
+ ASSERT_TRUE(rewriteTempFile(dataGB18030));
+ ASSERT_TRUE(DTextEncoding::convertFileEncodingTo(tmpFileName, tmpConvertFileName, "GB18030"));
+ ASSERT_TRUE(QFile::exists(tmpConvertFileName));
+
+ ASSERT_TRUE(DTextEncoding::convertFileEncodingTo(tmpFileName, tmpConvertFileName, "UTF-8"));
+ ASSERT_TRUE(QFile::exists(tmpConvertFileName));
+ ASSERT_EQ("UTF-8", DTextEncoding::detectFileEncoding(tmpConvertFileName));
+
+ ASSERT_TRUE(DTextEncoding::convertFileEncodingTo(tmpFileName, tmpConvertFileName, "UTF-32"));
+ ASSERT_EQ("UTF-32", DTextEncoding::detectFileEncoding(tmpConvertFileName));
+
+ ASSERT_TRUE(QFile::remove(tmpConvertFileName));
+}
+
+TEST_F(ut_DTextEncoding, testConvertFileEncodingToWithError)
+{
+ QString tmpConvertFileName("/tmp/ut_DTextEncoding_temp_testConvertFileEncodingToWithError.txt");
+ if (QFile::exists(tmpConvertFileName)) {
+ ASSERT_TRUE(QFile::remove(tmpConvertFileName));
+ }
+
+ ASSERT_FALSE(DTextEncoding::convertFileEncodingTo("", tmpConvertFileName, "UTF-32"));
+ ASSERT_FALSE(DTextEncoding::convertFileEncodingTo(tmpFileName, "", "UTF-32"));
+ ASSERT_FALSE(DTextEncoding::convertFileEncodingTo(tmpFileName, tmpConvertFileName, "ERROR"));
+ ASSERT_FALSE(QFile::exists(tmpConvertFileName));
+
+ ASSERT_TRUE(rewriteTempFile(dataGB18030));
+ ASSERT_FALSE(DTextEncoding::convertFileEncodingTo(tmpFileName, tmpConvertFileName, "EUC-JP"));
+ ASSERT_FALSE(QFile::exists(tmpConvertFileName));
+}
-// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2020 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <gtest/gtest.h>
#include <QTest>
#include <QtConcurrent>
-
+#include <QSignalSpy>
#include <DThreadUtils>
+#include <string>
+#include <thread>
+#include <chrono>
DCORE_USE_NAMESPACE
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
+
class ThreadUtils : public QObject
{
Q_OBJECT
m_threadutil->testCallInMainThread();
}
+#else
+
+class ut_DThreadUtils :public testing::Test{
+public:
+ virtual void SetUp()
+ {
+ t = new QThread();
+ t->start();
+ m_threadutil = new DThreadUtils(t);
+ }
+
+ virtual void TearDown()
+ {
+ t->exit();
+ t->wait();
+ delete t;
+ delete m_threadutil;
+ }
+
+protected:
+ QThread *t{nullptr};
+ DThreadUtils *m_threadutil{nullptr};
+};
+
+class QWorker : public QObject {
+ Q_OBJECT
+public:
+ explicit QWorker(QObject *parent = nullptr):QObject(parent){}
+ ~QWorker() = default;
+public Q_SLOTS:
+ int testFunc(int i, double j) {
+ int r =qFloor(i + j);
+ wait();
+ emit testFuncTrigger(r);
+ return r;
+ }
+
+ void setWaitForSecs(int sec){
+ m_waitSecs = sec;
+ }
+ void wait() {
+ std::unique_lock<std::mutex> lock(m_mutex);
+ m_cv.wait_for(lock, std::chrono::seconds(m_waitSecs));
+ }
+
+ void notifyOne() {
+ m_cv.notify_one();
+ }
+
+Q_SIGNALS:
+ void testFuncTrigger(int v);
+private:
+ std::mutex m_mutex;
+ std::condition_variable m_cv;
+ int m_waitSecs = 2;
+};
+
+class CallableObject{
+
+public:
+ CallableObject() = default;
+ ~CallableObject() = default;
+
+ QString operator()(const QString &str){
+ s += str;
+ std::this_thread::sleep_for(std::chrono::microseconds(100));
+ return s;
+ }
+
+ QString testFunc(const QString &){
+ return s;
+ }
+
+private:
+ QString s{"CallableObject: "};
+};
+
+TEST_F(ut_DThreadUtils, testThread)
+{
+ auto tmp = m_threadutil->thread();
+ EXPECT_EQ(tmp, t);
+}
+
+TEST_F(ut_DThreadUtils, testRunWithQObj)
+{
+ QWorker w;
+ QSignalSpy spy(&w, &QWorker::testFuncTrigger);
+ auto result = m_threadutil->run(&w, &QWorker::testFunc, 10, 24.6);
+ std::this_thread::sleep_for(std::chrono::microseconds(100));
+ EXPECT_TRUE(result.isStarted());
+ EXPECT_TRUE(result.isRunning());
+ w.notifyOne();
+ result.waitForFinished();
+ EXPECT_TRUE(result.isFinished());
+ auto raw = result.result();
+ EXPECT_EQ(raw, 34);
+ EXPECT_EQ(spy.count(), 1);
+}
+
+TEST_F(ut_DThreadUtils,testRunWithLambda)
+{
+ auto threadId1 = std::this_thread::get_id();
+ auto result = m_threadutil->run([](decltype(threadId1) id){
+ EXPECT_NE(std::this_thread::get_id(), id);
+ return true;
+ }, threadId1);
+ result.waitForFinished();
+ auto raw = result.result();
+ EXPECT_TRUE(raw);
+}
+
+TEST_F(ut_DThreadUtils,testRunWithCallableObj)
+{
+ CallableObject obj;
+ QString tmp{"Hello"};
+ auto result1 = m_threadutil->run(obj, tmp);
+ result1.waitForFinished();
+ auto raw1 = result1.result();
+ EXPECT_EQ(raw1, QString{"CallableObject: Hello"});
+
+ auto result2 = m_threadutil->run(&obj, &CallableObject::testFunc, tmp);
+ result2.waitForFinished();
+ auto raw2 = result2.result();
+ EXPECT_EQ(raw2, QString{"CallableObject: "});
+}
+
+TEST_F(ut_DThreadUtils, testExecWithQObj)
+{
+ QWorker w;
+ w.setWaitForSecs(0);
+ QSignalSpy spy(&w, SIGNAL(testFuncTrigger(int)));
+ auto result = m_threadutil->exec(&w, &QWorker::testFunc, 10, 24.6);
+ EXPECT_EQ(result, 34);
+ EXPECT_EQ(spy.count(), 1);
+}
+
+TEST_F(ut_DThreadUtils, testExecWithLambda)
+{
+ auto threadId1 = std::this_thread::get_id();
+ auto result = m_threadutil->exec (
+ [](decltype(threadId1) id) {
+ EXPECT_NE(std::this_thread::get_id(), id);
+ return true;
+ }, threadId1);
+ EXPECT_TRUE(result);
+}
+
+TEST_F(ut_DThreadUtils, testExecWithCallableObj)
+{
+ CallableObject obj;
+ QString tmp{"Hello"};
+ auto result1 = m_threadutil->exec(obj, tmp);
+ EXPECT_EQ(result1, QString{"CallableObject: Hello"});
+
+ auto result2 = m_threadutil->exec(&obj, &CallableObject::testFunc, tmp);
+ EXPECT_EQ(result2, QString{"CallableObject: "});
+}
+
+TEST_F(ut_DThreadUtils, testDirectlyInvoke)
+{
+ DThreadUtils tu(QThread::currentThread());
+ QWorker w;
+ w.setWaitForSecs(0);
+ QSignalSpy spy(&w, SIGNAL(testFuncTrigger(int)));
+ auto result = tu.run(&w, &QWorker::testFunc, 10, 24.6);
+ auto raw = result.result(); // no wait
+ EXPECT_EQ(raw, 34);
+ EXPECT_EQ(spy.count(), 1);
+}
+
+TEST_F(ut_DThreadUtils, testCancel)
+{
+ CallableObject obj;
+ QString tmp{"Hello"};
+ int cancelCounter{0};
+ auto result1 = m_threadutil->run(obj, tmp);
+ auto cancelResult = result1.onCanceled([&cancelCounter]() {
+ cancelCounter += 1;
+ return QString{"failed"};
+ });
+
+ result1.cancel();
+ EXPECT_FALSE(result1.isFinished());
+ EXPECT_FALSE(result1.isValid());
+ EXPECT_TRUE(result1.isCanceled());
+ cancelResult.waitForFinished();
+ EXPECT_EQ(cancelCounter, 1);
+ EXPECT_EQ(cancelResult.result(), QString{"failed"});
+}
+
+TEST_F(ut_DThreadUtils, testDestructCancel)
+{
+ auto w = new QWorker{};
+ auto failedCounter{0};
+ auto result = m_threadutil->run(w, &QWorker::testFunc, 10, 24.6);
+ delete w;
+ auto failedResult = result.onFailed([&failedCounter]() {
+ failedCounter += 1;
+ return -1;
+ });
+ EXPECT_FALSE(result.isValid());
+ failedResult.waitForFinished();
+ EXPECT_EQ(failedCounter, 1);
+ EXPECT_EQ(failedResult.result(), -1);
+}
+
+#endif
+
#include "ut_dthreadutils.moc"
#include "ut_dutil.h"
-#include <QThread>
-#include <QStandardPaths>
-#include <QDBusPendingCall>
-#include <QDBusReply>
-#include <QDir>
-#include <DDesktopEntry>
#include <QTest>
-#include "log/LogManager.h"
-#include "filesystem/dpathbuf.h"
-#include "ut_singleton.h"
#include "util/dtimeunitformatter.h"
#include "util/ddisksizeformatter.h"
-#include "util/ddbussender.h"
-#include "settings/dsettings.h"
-#include "settings/dsettingsgroup.h"
-#include "settings/dsettingsoption.h"
-#include "dsysinfo.h"
-#include "base/dsingleton.h"
DCORE_USE_NAMESPACE
dir.remove("/tmp/etc/");
}
-TEST_F(ut_DUtil, testDefaultLogPath)
-{
- QByteArray home = qgetenv("HOME");
- qunsetenv("HOME");
-
- // unset HOME env will not init default log file path
- ASSERT_EQ(DLogManager::getlogFilePath(), QString());
-
- qputenv("HOME", home);
-}
-
-TEST_F(ut_DUtil, testDLogManager)
-{
- qApp->setOrganizationName("deepin");
- qApp->setApplicationName("deepin-test-dtk");
-
- DPathBuf logPath(QStandardPaths::standardLocations(QStandardPaths::CacheLocation).first());
-
-#ifdef Q_OS_OSX
- logPath = logPath / "deepin-test-dtk.log";
-#else
- logPath = logPath / "deepin-test-dtk.log";
-#endif
-
- ASSERT_EQ(DLogManager::getlogFilePath(), logPath.toString());
- DLogManager::registerFileAppender();
- DLogManager::registerConsoleAppender();
- DLogManager::setlogFilePath("%{time}{yyyy-MM-dd, HH:mm:ss.zzz} [%{type:-7}] [%{file:-20} %{function:-35} %{line}] %{message}\n");
-}
-
-TEST_F(ut_DUtil, testSetInvalidLogPath)
-{
- QString tmp = QDir::tempPath();
- DLogManager::setlogFilePath(tmp);
- // set log file path to a dir is not supported
- ASSERT_NE(DLogManager::getlogFilePath(), tmp);
-}
-
-TEST_F(ut_DUtil, testPathChange)
-{
- DPathBuf root("/");
-
- auto usr = root / "./usr";
- ASSERT_EQ(QDir(usr.toString()).absolutePath(), QDir::toNativeSeparators("/usr"));
-
- root /= "root";
- ASSERT_EQ(root.toString(), QDir::toNativeSeparators("/root"));
-
- root /= "../usr";
- ASSERT_EQ(root.toString(), usr.toString());
-}
-
-TEST_F(ut_DUtil, testDSingleton)
-{
- const int exampleCount = 5;
- QVector<QThread*> threads;
- QVector<MultiSingletonTester*> testers;
- threads.reserve(exampleCount);
- testers.reserve(exampleCount);
- for (int i = 0; i < exampleCount; i++) {
- auto thread = new QThread();
- auto tester = new MultiSingletonTester;
- tester->moveToThread(thread);
- QObject::connect(thread, &QThread::started, tester, &MultiSingletonTester::run);
-
- threads.push_back(thread);
- testers.push_back(tester);
- thread->start();
- }
-
- for (auto thread : threads) {
- thread->quit();
- }
-
- ASSERT_TRUE(QTest::qWaitFor([threads] {
- for (auto thread : threads) {
- if (!thread->isFinished()) {
- return false;
- }
- }
- return true;
- }));
-
- for (auto tester : testers) {
- ASSERT_EQ(tester->count(), exampleCount);
- }
-
- qDeleteAll(threads);
- qDeleteAll(testers);
- delete DSingleton<int>::instance();
-}
TEST_F(ut_DUtil, testTimeFormatter)
{
ASSERT_TRUE(qFuzzyCompare(0.09094947017729282, d2));
}
-TEST_F(ut_DUtil, testDBusSender)
-{
- // basic method call
- DDBusSender()
- .service("com.deepin.dde.ControlCenter")
- .interface("com.deepin.dde.ControlCenter")
- .path("/com/deepin/dde/ControlCenter")
- .method("ShowPage")
- .arg(QString("update"))
- .arg(QString("available-updates"))
- .call();
-
- // property set
- QDBusPendingReply<> r1 = DDBusSender()
- .service("com.deepin.dde.daemon.Dock")
- .interface("com.deepin.dde.daemon.Dock")
- .path("/com/deepin/dde/daemon/Dock")
- .property("DisplayMode")
- .set(1); // set to efficient mode
-
- // property get
- QDBusPendingReply<QVariant> r2 = DDBusSender()
- .service("com.deepin.dde.daemon.Dock")
- .interface("com.deepin.dde.daemon.Dock")
- .path("/com/deepin/dde/daemon/Dock")
- .property("DisplayMode")
- .get(); // read mode
-
- if (!r2.isError() && !r1.isError()) {
- ASSERT_TRUE(r2.value().toInt() == 1);
- }
-
- // complex type property get
- QDBusPendingReply<QVariant> r3 = DDBusSender()
- .service("com.deepin.dde.ControlCenter")
- .interface("com.deepin.dde.ControlCenter")
- .path("/com/deepin/dde/ControlCenter")
- .property("Rect")
- .get();
-
- QVariant variant = r3.value();
- const QDBusArgument v = variant.value<QDBusArgument>();
-
- int x, y, w, h;
- v.beginStructure();
- v >> x >> y >> w >> h;
- v.endStructure();
-
- //qDebug() << x << y << w << h;
-}
-
-TEST_F(ut_DUtil, testGroups)
-{
- auto path = ":/data/dt-settings.json";
- auto settings = DSettings::fromJsonFile(path);
-
- qDebug() << settings->groupKeys();
- qDebug() << settings->group("shortcuts");
- for (auto cg : settings->group("shortcuts")->childGroups()) {
- qDebug() << cg->key();
- }
- qDebug() << settings->group("shortcuts.ternimal");
- qDebug() << settings->group("shortcuts.ternimal")->options();
-
- delete settings;
-}
-
-TEST_F(ut_DUtil, testOsVersion)
-{
- DDesktopEntry entry("/tmp/etc/os-version");
- entry.setStringValue("UnionTech OS Desktop", "SystemName", "Version");
- entry.setStringValue("统信桌面操作系统", "SystemName[zh_CN]", "Version");
- entry.setStringValue("Desktop", "ProductType", "Version");
- entry.setStringValue("桌面", "ProductType[zh_CN]", "Version");
- entry.setStringValue("Professional", "EditionName", "Version");
- entry.setStringValue("专业版", "EditionName[zh_CN]", "Version");
- entry.setStringValue("20", "MajorVersion", "Version");
- entry.setStringValue("100A", "MinorVersion", "Version");
- entry.setStringValue("11Z18.107.109", "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
-
- ASSERT_TRUE(DSysInfo::uosSystemName(QLocale("C")) == "UnionTech OS Desktop");
- ASSERT_TRUE(DSysInfo::uosSystemName(QLocale("zh_CN")) == "统信桌面操作系统");
- ASSERT_TRUE(DSysInfo::uosProductTypeName(QLocale("zh_CN")) == "桌面");
- ASSERT_TRUE(DSysInfo::uosProductTypeName(QLocale("C")) == "Desktop");
- ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("zh_CN")) == "专业版");
- ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("C")) == "Professional");
- ASSERT_TRUE(DSysInfo::majorVersion() == "20");
- ASSERT_TRUE(DSysInfo::minorVersion() == "100A");
- ASSERT_TRUE(DSysInfo::buildVersion() == "107.109");
-
- // test minVersion.BC SP1….SP99
- for (int i = 0; i < 100; ++i) {
- entry.setStringValue(QString("%1").arg(1001 + i * 10), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::spVersion() == (i ? QString("SP%1").arg(i) : QString()));
- }
-
- // test minVersion.D udpate1~udpate9 updateA~udpateZ
- for (int i = 0; i < 10; ++i) {
- entry.setStringValue(QString("%1").arg(1000 + i), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::udpateVersion() == (i ? QString("update%1").arg(i) : QString()));
- }
-
- for (char c = 'A'; c <= 'Z'; ++c) {
- entry.setStringValue(QString("100").append(c), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::udpateVersion() == QString("update%1").arg(c));
- }
-
- // test incalide MinorVersion
- entry.setStringValue(QString("100?"), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::udpateVersion() == QString());
- // restore MinorVersion
- entry.setStringValue(QString("1000"), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
-
- // test OsBuild.B == 1 && OsBuild.D = [1, 6]
- ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosDesktop);
- for (int i = 1; i <= 6; ++i) {
- entry.setStringValue(QString("%1").arg(11008.107 + i * 10), "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
- switch (i) {
- case 1:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosProfessional);
- break;
- case 2:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosHome);
- break;
- case 4:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosMilitary);
- break;
- case 5:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosDeviceEdition);
- break;
- case 6:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEducation);
- break;
- default:
- break;
- }
- }
-
- // test OsBuild.B == 2 && OsBuild.D = [1, 5]
- entry.setStringValue("12018.107", "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosServer);
- for (int i = 1; i <= 5; ++i) {
- entry.setStringValue(QString("%1").arg(12008.107 + i * 10), "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
- switch (i) {
- case 1:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEnterprise);
- break;
- case 2:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEnterpriseC);
- break;
- case 3:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEuler);
- break;
- case 4:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosMilitaryS);
- break;
- case 5:
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosDeviceEdition);
- break;
- default:
- break;
- }
- }
-
- // test OsBuild.B == 3
- entry.setStringValue("13018.107", "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosDevice);
- ASSERT_TRUE(DSysInfo::uosEditionType() == DSysInfo::UosEnterprise);
-
- // test invalid OsBuild.B
- entry.setStringValue("10018.107", "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::uosType() == DSysInfo::UosTypeUnknown);
-
- // test OsBuild.E
- for (int i = 0; i < 4; ++i) {
- entry.setStringValue(QString("%1").arg(11000.107 + qreal(1 << i)), "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::uosArch() == (1 << i));
- }
-
- // 社区版测试
- entry.setStringValue("Community", "EditionName", "Version");
- entry.setStringValue("社区版", "EditionName[zh_CN]", "Version");
- entry.setStringValue("21.1.2", "MinorVersion", "Version");
- entry.setStringValue("11038.107", "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
-
- ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("zh_CN")) == "社区版");
- ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("C")) == "Community");
- ASSERT_TRUE(DSysInfo::minorVersion() == "21.1.2");
- ASSERT_TRUE(DSysInfo::buildVersion() == "107");
-
- //社区版A_BC_D模式 test minVersion.BC SP1….SP99
- for (int i = 0; i < 100; ++i) {
- entry.setStringValue(QString("%1").arg(1001 + i * 10), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::spVersion() == (i ? QString("SP%1").arg(i) : QString()));
- }
-
- //社区版A_BC_D模式 test minVersion.D udpate1~udpate9 updateA~udpateZ
- for (int i = 0; i < 10; ++i) {
- entry.setStringValue(QString("%1").arg(1000 + i), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::udpateVersion() == (i ? QString("update%1").arg(i) : QString()));
- }
-
- //社区版A_B_C模式 test minVersion.BC SP1….SP99
- const QString &defalutSP("21.%1");
- for (int i = 1; i < 100; ++i) {
- entry.setStringValue(defalutSP.arg(i), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::spVersion() == QString("SP%1").arg(i));
- }
-
- //社区版A_B_C模式 test minVersion.D udpate1~udpate9 updateA~udpateZ
- const QString &defalutUpdate("21.1.%1");
- for (int i = 1; i < 100; ++i) {
- entry.setStringValue(defalutUpdate.arg(i), "MinorVersion", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(DSysInfo::udpateVersion() == QString("update%1").arg(i));
- }
-
- // 家庭版测试
- entry.setStringValue("Home", "EditionName", "Version");
- entry.setStringValue("家庭版", "EditionName[zh_CN]", "Version");
- entry.setStringValue("21.0", "MinorVersion", "Version");
- entry.setStringValue("11078.107", "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
-
- ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("zh_CN")) == "家庭版");
- ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("C")) == "Home");
- ASSERT_TRUE(DSysInfo::minorVersion() == "21.0");
- ASSERT_TRUE(DSysInfo::buildVersion() == "107");
- ASSERT_TRUE(DSysInfo::spVersion() == QStringLiteral(""));
- ASSERT_TRUE(DSysInfo::udpateVersion() == QStringLiteral(""));
-
- QFile::remove("/tmp/etc/os-version");
-}
-
-TEST_F(ut_DUtil, testDDesktopEntry)
-{
- DDesktopEntry entry("/tmp/etc/os-version");
- entry.setStringValue("UnionTech OS Desktop", "SystemName", "Version");
- entry.setStringValue("统信桌面操作系统", "SystemName[zh_CN]", "Version");
- entry.setStringValue("Desktop", "ProductType", "Version");
- entry.setStringValue("桌面", "ProductType[zh_CN]", "Version");
- entry.setStringValue("Professional", "EditionName", "Version");
- entry.setStringValue("专业版", "EditionName[zh_CN]", "Version");
- entry.setStringValue("20", "MajorVersion", "Version");
- entry.setStringValue("100A", "MinorVersion", "Version");
- entry.setStringValue("11018.107", "OsBuild", "Version");
- ASSERT_TRUE(entry.save());
- ASSERT_TRUE(entry.name().isEmpty());
- ASSERT_TRUE(entry.genericName().isEmpty());
- ASSERT_TRUE(entry.ddeDisplayName().isEmpty());
- ASSERT_TRUE(entry.comment().isEmpty());
- QString slash("\\\\");
- ASSERT_TRUE(entry.escapeExec(slash) == slash);
- ASSERT_TRUE(entry.unescapeExec(slash) == slash);
-}
-
-TEST_F(ut_DUtil, testDSysInfo)
-{
- DSysInfo::distributionOrgWebsite();
- DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Normal);
- DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Light);
- DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Symbolic);
- DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Transparent);
- qDebug() << DSysInfo::distributionOrgName(DSysInfo::Distribution);
- qDebug() << DSysInfo::distributionOrgName(DSysInfo::Distributor);
- qDebug() << DSysInfo::distributionOrgName(DSysInfo::Manufacturer);
- qDebug() << DSysInfo::isDeepin();
- qDebug() << DSysInfo::isDDE();
- qDebug() << DSysInfo::productType();
- qDebug() << DSysInfo::productTypeString();
- qDebug() << DSysInfo::productVersion();
- qDebug() << DSysInfo::cpuModelName();
- qDebug() << DSysInfo::operatingSystemName();
- qDebug() << DSysInfo::deepinType();
- qDebug() << DSysInfo::deepinTypeDisplayName();
- qDebug() << DSysInfo::deepinVersion();
- qDebug() << DSysInfo::deepinEdition();
- qDebug() << DSysInfo::deepinCopyright();
- qDebug() << DSysInfo::distributionInfoPath().size();
- qDebug() << DSysInfo::isCommunityEdition();
- qDebug() << DSysInfo::computerName();
- qDebug() << DSysInfo::memoryInstalledSize();
- qDebug() << DSysInfo::memoryTotalSize();
- qDebug() << DSysInfo::systemDiskSize();
-}
-// SPDX-FileCopyrightText: 2017 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2017 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#pragma once
-
+#include "dtkcore_global.h"
#include <gtest/gtest.h>
+#if DTK_VERSION < DTK_VERSION_CHECK(6, 0, 0, 0)
#include "dtimedloop.h"
-
DCORE_USE_NAMESPACE
+#endif
// 有返回值的 lambda 表达式、函数里面使用 ASSERT_XXX
// 总之,不管有没有返回值,用它就对了
-// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
+// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <gtest/gtest.h>
+#include "testso.h"
#include <DVtableHook>
-namespace TestClass {
-class A
-{
-public:
- virtual bool test(int v);
-
- virtual ~A()
- {
- }
-};
-bool A::test(int v)
-{
- qDebug() << Q_FUNC_INFO << this << v;
-
- return false;
-}
-
-class B
-{
-public:
- bool test(int v)
- {
- qDebug() << Q_FUNC_INFO << v;
-
- return true;
- }
-};
-} // namespace TestClass
-
class ut_DVtableHook : public testing::Test
{
public:
using namespace TestClass;
DCORE_USE_NAMESPACE
-static bool test(A *obj, int v)
+static char test(A *obj, int v)
{
qDebug() << Q_FUNC_INFO << obj << v;
- return true;
+ return 'x';
}
-static bool test2(A *obj, int v, bool v2)
+static char test2(A *obj, int v, bool v2)
{
qDebug() << Q_FUNC_INFO << obj << v << v2;
- return v2;
+ return 'y';
}
TEST_F(ut_DVtableHook, objectFun2ObjectFun)
{
A *a = new A();
B *b = new B();
-
ASSERT_TRUE(DVtableHook::overrideVfptrFun(a, &A::test, b, &B::test));
ASSERT_TRUE(DVtableHook::hasVtable(a));
- ASSERT_TRUE(a->test(0));
+ ASSERT_EQ(a->test(0), 'b');
DVtableHook::resetVfptrFun(a, &A::test);
- ASSERT_TRUE(!a->test(0));
+ ASSERT_EQ(a->test(0), 'a');
delete a;
ASSERT_TRUE(!DVtableHook::hasVtable(a));
delete b;
{
A *a = new A();
ASSERT_TRUE(DVtableHook::overrideVfptrFun(a, &A::test, &test));
- ASSERT_TRUE(a->test(1));
+ ASSERT_EQ(a->test(1), 'x');
DVtableHook::resetVtable(a);
ASSERT_TRUE(!DVtableHook::hasVtable(a));
{
A *a = new A();
ASSERT_TRUE(DVtableHook::overrideVfptrFun(a, &A::test, std::bind(&test2, std::placeholders::_1, std::placeholders::_2, true)));
- ASSERT_TRUE(a->test(2));
+ ASSERT_EQ(a->test(2), 'y');
DVtableHook::resetVtable(a);
ASSERT_TRUE(!DVtableHook::hasVtable(a));
// not support
TEST_F(ut_DVtableHook, objectFun2LambdaFun)
{
A *a = new A();
- auto lambda1 = [a](A *obj, int v) {
+ auto lambda1 = [](A *obj, int v) {
qDebug() << Q_FUNC_INFO << obj << v;
- return a == obj;
+ return '1';
};
- auto lambda2 = [a](A *obj, int v) {
+ auto lambda2 = [](A *obj, int v) {
qDebug() << Q_FUNC_INFO << obj << v;
- return a != obj;
+ return '2';
};
ASSERT_TRUE(DVtableHook::overrideVfptrFun(a, &A::test, lambda1));
- ASSERT_TRUE(a->test(3));
+ ASSERT_EQ(a->test(3), '1');
ASSERT_TRUE(DVtableHook::overrideVfptrFun(a, &A::test, lambda2));
- ASSERT_TRUE(!a->test(3));
+ ASSERT_EQ(a->test(3), '2');
DVtableHook::resetVtable(a);
ASSERT_TRUE(!DVtableHook::hasVtable(a));
delete a;
ASSERT_TRUE(DVtableHook::overrideVfptrFun(&A::test, b, &B::test));
A *a = new A();
ASSERT_TRUE(DVtableHook::getVtableOfObject(a) == DVtableHook::getVtableOfClass<A>());
- ASSERT_TRUE(a->test(4));
+ ASSERT_EQ(a->test(4), 'b');
delete a;
delete b;
}
{
ASSERT_TRUE(DVtableHook::overrideVfptrFun(&A::test, &test));
A *a = new A();
- ASSERT_TRUE(a->test(5));
+ ASSERT_EQ(a->test(5), 'x');
delete a;
}
{
A *a = new A();
ASSERT_TRUE(DVtableHook::overrideVfptrFun(&A::test, std::bind(&test2, std::placeholders::_1, std::placeholders::_2, true)));
- ASSERT_TRUE(a->test(6));
+ ASSERT_EQ(a->test(6), 'y');
DVtableHook::resetVtable(a);
ASSERT_TRUE(!DVtableHook::hasVtable(a));
delete a;
TEST_F(ut_DVtableHook, fun2LambdaFun)
{
A *a = new A();
- auto lambda = [a](A *obj, int v) {
+ auto lambda = [](A *obj, int v) {
qDebug() << Q_FUNC_INFO << obj << v;
- return a == obj;
+ return 'z';
};
ASSERT_TRUE(DVtableHook::overrideVfptrFun(&A::test, lambda));
- ASSERT_TRUE(a->test(7));
+ ASSERT_EQ(a->test(7), 'z');
DVtableHook::resetVtable(a);
ASSERT_TRUE(!DVtableHook::hasVtable(a));
delete a;
}
+
+TEST_F(ut_DVtableHook, testRTTI)
+{
+ A *c1 = new C();
+ auto original = typeid(*c1).name();
+ auto lambda3 = [](C *obj, int v) {
+ qDebug() << Q_FUNC_INFO << obj << v;
+ return '3';
+ };
+ ASSERT_TRUE(DVtableHook::overrideVfptrFun(dynamic_cast<C *>(c1), &C::test, lambda3));
+ ASSERT_EQ(c1->test(0), '3');
+ ASSERT_EQ(typeid(*c1).name(), original);
+ delete c1;
+}
void ut_GSettings::SetUp()
{
+ GTEST_SKIP_("Do not test GSettingsBackend. schema was removed...");
QFile file("/tmp/test.json");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
+++ /dev/null
-// SPDX-FileCopyrightText: 2021 - 2022 UnionTech Software Technology Co., Ltd.
-//
-// SPDX-License-Identifier: LGPL-3.0-or-later
-
-#include <gtest/gtest.h>
-#include <QFile>
-#include <QLocale>
-#include "log/Logger.h"
-#include "log/FileAppender.h"
-#include "log/ConsoleAppender.h"
-#include "log/RollingFileAppender.h"
-
-DCORE_USE_NAMESPACE
-
-class ut_Logger: public testing::Test
-{
-protected:
- void SetUp() override;
- void TearDown() override;
- Logger *m_logger = nullptr;
-};
-
-void ut_Logger::SetUp()
-{
- m_logger = new Logger;
- QFile file("/tmp/log");
- if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
- return;
- file.close();
- QFile rollFile("/tmp/rollLog");
- if (!rollFile.open(QIODevice::WriteOnly | QIODevice::Text))
- return;
- rollFile.close();
-}
-
-void ut_Logger::TearDown()
-{
- if (m_logger) {
- delete m_logger;
- m_logger = nullptr;
- }
- QFile file("/tmp/log");
- if (file.exists())
- file.remove();
- QFile rollFile("/tmp/rollLog");
- if (rollFile.exists())
- rollFile.remove();
-}
-
-TEST_F(ut_Logger, testLevelToString)
-{
- QString trace = Logger::levelToString(Logger::Trace);
- ASSERT_EQ(trace, "Trace");
- QString debug = Logger::levelToString(Logger::Debug);
- ASSERT_EQ(debug, "Debug");
- QString info = Logger::levelToString(Logger::Info);
- ASSERT_EQ(info, "Info");
- QString warning = Logger::levelToString(Logger::Warning);
- ASSERT_EQ(warning, "Warning");
- QString error = Logger::levelToString(Logger::Error);
- ASSERT_EQ(error, "Error");
- QString fatal = Logger::levelToString(Logger::Fatal);
- ASSERT_EQ(fatal, "Fatal");
-}
-
-TEST_F(ut_Logger, testLevelFromString)
-{
- Logger::LogLevel trace = Logger::levelFromString("Trace");
- ASSERT_EQ(trace, Logger::Trace);
- Logger::LogLevel debug = Logger::levelFromString("Debug");
- ASSERT_EQ(debug, Logger::Debug);
- Logger::LogLevel info = Logger::levelFromString("Info");
- ASSERT_EQ(info, Logger::Info);
- Logger::LogLevel warning = Logger::levelFromString("Warning");
- ASSERT_EQ(warning, Logger::Warning);
- Logger::LogLevel error = Logger::levelFromString("Error");
- ASSERT_EQ(error, Logger::Error);
- Logger::LogLevel fatal = Logger::levelFromString("Fatal");
- ASSERT_EQ(fatal, Logger::Fatal);
-}
-
-TEST_F(ut_Logger, testGlobalInstance)
-{
- ASSERT_TRUE(Logger::globalInstance());
-}
-
-TEST_F(ut_Logger, testRegisterAppender)
-{
- Logger* gLogger = Logger::globalInstance();
-
- FileAppender *fileAppener = new FileAppender("/tmp/log");
- if (fileAppener->detailsLevel() > Logger::Trace)
- fileAppener->setDetailsLevel(Logger::Trace);
- gLogger->registerAppender(fileAppener);
- ASSERT_TRUE(fileAppener->size() == 0);
- dTrace("testRegisterAppender");
- ASSERT_TRUE(fileAppener->size() != 0);
-
- ConsoleAppender *consoleAppener = new ConsoleAppender();
- if (consoleAppener->detailsLevel() > Logger::Trace)
- consoleAppener->setDetailsLevel(Logger::Trace);
- gLogger->registerAppender(consoleAppener);
- consoleAppener->ignoreEnvironmentPattern(false);
- QString format = consoleAppener->format();
- consoleAppener->setFormat("[%{file}: %{line} %{type:-7}] <%{function}> %{message}\n");
- dTrace("testRegisterAppender");
-
- RollingFileAppender *rollingFileAppender = new RollingFileAppender("/tmp/rollLog");
- if (rollingFileAppender->detailsLevel() > Logger::Trace)
- rollingFileAppender->setDetailsLevel(Logger::Trace);
- gLogger->registerAppender(rollingFileAppender);
- rollingFileAppender->setDatePattern("'.'yyyy-MM-dd-hh-mm");
- ASSERT_TRUE(rollingFileAppender->datePatternString() == "'.'yyyy-MM-dd-hh-mm");
- rollingFileAppender->setLogFilesLimit(2);
- ASSERT_TRUE(rollingFileAppender->logFilesLimit() == 2);
- rollingFileAppender->setDatePattern(RollingFileAppender::MinutelyRollover);
- ASSERT_TRUE(rollingFileAppender->datePattern() == RollingFileAppender::MinutelyRollover);
- dTrace("testRegisterAppender");
- rollingFileAppender->setDatePattern(RollingFileAppender::HourlyRollover);
- ASSERT_TRUE(rollingFileAppender->datePattern() == RollingFileAppender::HourlyRollover);
- dTrace("testRegisterAppender");
- rollingFileAppender->setDatePattern(RollingFileAppender::HalfDailyRollover);
- ASSERT_TRUE(rollingFileAppender->datePattern() == RollingFileAppender::HalfDailyRollover);
- dTrace("testRegisterAppender");
-}
-
-TEST_F(ut_Logger, testRegisterCategoryAppender)
-{
- Logger* gLogger = Logger::globalInstance();
- FileAppender *fileAppener = new FileAppender("/tmp/log");
- if (fileAppener->detailsLevel() > Logger::Trace)
- fileAppener->setDetailsLevel(Logger::Trace);
- gLogger->registerCategoryAppender("test", fileAppener);
- ASSERT_TRUE(fileAppener->size() == 0);
- dCDebug("test") << "testRegisterAppender";
- ASSERT_TRUE(fileAppener->size() != 0);
-}
-
-TEST_F(ut_Logger, testLogToGlobalInstance)
-{
- Logger* gLogger = Logger::globalInstance();
- FileAppender *fileAppener = new FileAppender("/tmp/log");
- if (fileAppener->detailsLevel() > Logger::Trace)
- fileAppener->setDetailsLevel(Logger::Trace);
- gLogger->registerAppender(fileAppener);
- m_logger->logToGlobalInstance("test", true);
-
- ASSERT_TRUE(fileAppener->size() == 0);
- dTrace("testRegisterAppender");
- ASSERT_TRUE(fileAppener->size() != 0);
-}
-
-TEST_F(ut_Logger, testSetDefaultCategory)
-{
- m_logger->setDefaultCategory("test");
- ASSERT_EQ(m_logger->defaultCategory(), "test");
-}
-
-TEST_F(ut_Logger, testDefaultCategory)
-{
- ASSERT_EQ(m_logger->defaultCategory(), "");
-}
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "ut_singleton.h"
+#include <gtest/gtest.h>
+#include <QTest>
+#include <QThread>
Singleton::Singleton(QObject *parent)
: QObject(parent),
void MultiSingletonTester::run()
{
- Singleton::instance()->count.ref();
+ Singleton::ref().count.ref();
}
int MultiSingletonTester::count() const
{
- return Singleton::instance()->count.load();
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+ return Singleton::ref().count.loadRelaxed();
+#else
+ return Singleton::ref().count.load();
+#endif
+}
+
+TEST(ut_DSingleton, testDSingleton)
+{
+ const int exampleCount = 5;
+ QVector<QThread*> threads;
+ QVector<MultiSingletonTester*> testers;
+ threads.reserve(exampleCount);
+ testers.reserve(exampleCount);
+ for (int i = 0; i < exampleCount; i++) {
+ auto thread = new QThread();
+ auto tester = new MultiSingletonTester;
+ tester->moveToThread(thread);
+ QObject::connect(thread, &QThread::started, tester, &MultiSingletonTester::run);
+
+ threads.push_back(thread);
+ testers.push_back(tester);
+ thread->start();
+ }
+
+ for (auto thread : threads) {
+ thread->quit();
+ }
+
+ ASSERT_TRUE(QTest::qWaitFor([threads] {
+ for (auto thread : threads) {
+ if (!thread->isFinished()) {
+ return false;
+ }
+ }
+ return true;
+ }));
+
+ for (auto tester : testers) {
+ ASSERT_EQ(tester->count(), exampleCount);
+ }
+
+ qDeleteAll(threads);
+ qDeleteAll(testers);
}
add_subdirectory(deepin-os-release)
add_subdirectory(qdbusxml2cpp)
add_subdirectory(settings)
+add_subdirectory(ch2py)
--- /dev/null
+set(TARGET_NAME ch2py)
+set(BIN_NAME ${TARGET_NAME}${DTK_VERSION_MAJOR})
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
+
+set(CMAKE_AUTORCC ON)
+add_executable(${BIN_NAME}
+ ${PROJECT_SOURCE_DIR}/src/util/dpinyin.cpp
+ ${PROJECT_SOURCE_DIR}/src/util/util.qrc
+ main.cpp
+)
+target_link_libraries(${BIN_NAME} PRIVATE
+ Qt${QT_VERSION_MAJOR}::Core
+)
+target_include_directories(${BIN_NAME} PRIVATE
+ ${PROJECT_SOURCE_DIR}/include/util
+ ${PROJECT_SOURCE_DIR}/include/global
+)
+set_target_properties(${BIN_NAME} PROPERTIES OUTPUT_NAME ${TARGET_NAME})
+install(TARGETS ${BIN_NAME} DESTINATION "${TOOL_INSTALL_DIR}")
--- /dev/null
+// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
+//
+// SPDX-License-Identifier: LGPL-3.0-or-later
+
+#include <QCoreApplication>
+#include <QCommandLineParser>
+#include <QElapsedTimer>
+#include <iostream>
+
+#include "dpinyin.h"
+
+DCORE_USE_NAMESPACE
+
+int main(int argc, char **argv)
+{
+ QCoreApplication a(argc, argv);
+ a.setOrganizationName("deepin");
+ a.setApplicationName("ch2py");
+ a.setApplicationVersion("0.0.1");
+
+ QCommandLineParser cp;
+ cp.setApplicationDescription("ch2py tool is a command tool that convert Chinese words to Pinyin.\n"
+ "The commands of DCI tools can be expressed as follows:\n"
+ "\t ch2py [chinese words]\n"
+ "\t ch2py --tonestyle notones [chinese words]\n"
+ "\t ch2py --letters [chinese words]\n"
+ );
+
+
+ QCommandLineOption tonestyle = QCommandLineOption(QStringList() << "s" << "tonestyle",
+ "tone style value can be \"notones\",\"tones\",\"numtones\"",
+ "tonestyle",
+ "tones");
+ QCommandLineOption letters = QCommandLineOption(QStringList() << "l" << "letters",
+ "convert Chinese words to Pinyin first letters");
+ cp.addOption(tonestyle);
+ cp.addOption(letters);
+ cp.addPositionalArgument("words", "words to be converted to pinyin");
+ cp.addHelpOption();
+
+ cp.process(a);
+
+ QString words = cp.positionalArguments().join(" ");
+
+ if (words.isEmpty()) {
+ cp.showHelp();
+ }
+
+ QString tones = cp.value("tonestyle");
+
+ ToneStyle ts = TS_Tone;
+ if (!tones.compare("notones"))
+ ts = TS_NoneTone;
+ else if (!tones.compare("numtones"))
+ ts = TS_ToneNum;
+
+ QElapsedTimer timer;
+ timer.start();
+
+ qint64 size = -1;
+ if (cp.isSet(letters)) {
+ const auto &ls = firstLetters(words);
+ printf("%s\n", qPrintable(ls.join("\n")));
+ size = ls.size();
+ } else {
+ const auto &py = pinyin(words, ts);
+ printf("%s\n", qPrintable(py.join("\n")));
+ size = py.size();
+ }
+
+ std:: cout << "Total size: " << size << ", time:" << timer.elapsed() << " ms" << std::endl;
+ return 0;
+}
-set(BIN_NAME dci)
+set(TARGET_NAME dci)
+set(BIN_NAME ${TARGET_NAME}${DTK_VERSION_MAJOR})
+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-find_package(Qt5 REQUIRED COMPONENTS Core)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
add_definitions(-DDTK_NO_PROJECT)
# start dci
include(../../src/dci/dci.cmake)
main.cpp
)
target_link_libraries(${BIN_NAME} PRIVATE
- Qt5::Core
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::CorePrivate
)
target_include_directories(${BIN_NAME} PUBLIC
- ${Qt5Core_PRIVATE_INCLUDE_DIRS}
../../include/
../../include/dci/
../../include/DtkCore/
../../include/base/
../../include/global/
)
+set_target_properties(${BIN_NAME} PROPERTIES OUTPUT_NAME ${TARGET_NAME})
#end dci
+
+install(TARGETS ${BIN_NAME} DESTINATION "${TOOL_INSTALL_DIR}")
+++ /dev/null
-QT -= gui
-
-CONFIG += c++11 console
-CONFIG -= app_bundle
-
-# You can make your code fail to compile if it uses deprecated APIs.
-# In order to do so, uncomment the following line.
-#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
-
-DEFINES += DTK_NO_PROJECT
-
-# 支持从当前目录找到动态库
-mac {
- QMAKE_RPATHDIR = "@executable_path"
-}
-
-SOURCES += \
- main.cpp
-
-include($$PWD/../../src/dci/dci.pri)
-INCLUDEPATH += $$PWD/../../src
-
-#不要依赖于 dtk 的其它任何文件,要确保能在 macox 上独立编译
return dci.writeToFile(newFile);
}
-static bool copyFilesFromDci(const DDciFile *dci, const QString &targetDir, const QString &sourceDir) {
+static bool copyFilesFromDci(const DDciFile *dci, const QString &targetDir, const QString &sourceDir, QMap<QString, QString> &pathMap) {
QDir target(targetDir);
for (const QString &file : dci->list(sourceDir)) {
const QString &newFileName = QFileInfo(file).fileName();
const QString &newFilePath = target.filePath(newFileName);
+ pathMap.insert(file, newFilePath);
const auto &type = dci->type(file);
if (type == DDciFile::Directory) {
if (!target.mkdir(newFileName))
return false;
- if (!copyFilesFromDci(dci, newFilePath, file))
+ if (!copyFilesFromDci(dci, newFilePath, file, pathMap))
return false;
} else if (type == DDciFile::File) {
QFile newFile(newFilePath);
if (newFile.write(data) != data.size())
return false;
} else if (type == DDciFile::Symlink) {
- if (!QFile::link(dci->symlinkTarget(file, true), newFilePath))
- return false;
+ // link the real source later
} else {
return false;
}
if (!dci.isValid())
return false;
- return copyFilesFromDci(&dci, newDir, "/");
+ QMap<QString, QString> pathMap;
+ if (!copyFilesFromDci(&dci, QDir(newDir).absolutePath(), "/", pathMap))
+ return false;
+
+ // link to real source
+ for (auto it = pathMap.begin(); it != pathMap.end(); it++) {
+ if (dci.type(it.key()) == DDciFile::Symlink) {
+ const QString &realSource = it.value();
+ const QDir &dirInDci(QFileInfo(it.key()).path());
+ const QDir &dirRealSrc(QFileInfo(realSource).path());
+ const QString &target = dci.symlinkTarget(it.key(), true);
+ const QString &absoluteTarget = QDir::cleanPath(dirInDci.absoluteFilePath(target));
+ const QString &realTarget = pathMap.value(absoluteTarget);
+
+ // link to relative path(e.g. xx.webp -> ../../normal.light/x/xx.webp)
+ if (!QFile::link(dirRealSrc.relativeFilePath(realTarget), realSource)) {
+ qErrnoWarning(strerror(errno));
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+#define SPACE_CHAR " "
+#define BEGINE_CHAR "├── "
+#define MIDDLE_CHAR "│ "
+#define END_CHAR "└── "
+#define ARROW_CHAR " -> "
+
+static inline QString pathName(const QString &path)
+{
+ QDir dir(path);
+ return dir.dirName().isEmpty() ? path : dir.dirName();
+}
+
+void print(DDciFile &dci, const QString &dir = QString("/"), QString prefix = QString())
+{
+ const auto &fileList = dci.list(dir);
+ QString dirName = pathName(dir);
+
+ printf("%s\n", qPrintable(prefix + dirName));
+
+ prefix.replace(END_CHAR, SPACE_CHAR);
+ prefix.replace(BEGINE_CHAR, MIDDLE_CHAR);
+
+ for (const auto &file : fileList) {
+ QString newPrefix = prefix;
+ newPrefix.append(file == fileList.last() ? END_CHAR : BEGINE_CHAR);
+ if (dci.type(file) == DDciFile::Directory) {
+ print(dci, file, newPrefix);
+ } else {
+ QString fileName = pathName(file);
+ QString symlinkTarget;
+ if (dci.type(file) == DDciFile::Symlink) {
+ symlinkTarget.append(ARROW_CHAR).append(dci.symlinkTarget(file));
+ }
+ printf("%s\n", qPrintable(newPrefix + fileName + symlinkTarget));
+ }
+ }
+}
+
+bool tree(const QString &dciFile)
+{
+ QFileInfo info(dciFile);
+ DDciFile dci(dciFile);
+ if (!dci.isValid())
+ return false;
+
+ print(dci, "/");
+
+ return true;
}
int main(int argc, char *argv[])
"The commands of DCI tools can be expressed as follows:\n"
"\t dci --create [target file path] [source directory path]\n"
"\t dci --export [target directory path] [source file path]\n"
+ "\t dci --tree [target file path]\n"
"For example, the tool is used in the following ways: \n"
"\t dci --create ~/Desktop ~/Desktop/action_add\n"
- "\t dci --export ~/Desktop ~/Desktop/action_add.dci\n");
+ "\t dci --export ~/Desktop ~/Desktop/action_add.dci\n"
+ "\t dci --tree ~/Desktop/action_add.dci\n");
- auto options = QList<QCommandLineOption> {
+ auto options = QList<QCommandLineOption>
+ {
QCommandLineOption("create", "Create the new dci files by the directorys", "targetDirectiry"),
QCommandLineOption("export", "Export the dci files to the directorys", "targetDirectory"),
+ QCommandLineOption("tree", "tree view the dci file", "targetDciFile"),
};
commandParser.addOptions(options);
commandParser.addPositionalArgument("sources", "The directorys of create or the dci files of export",
printf("Failed on export the \"%s\" dci file\n", qPrintable(dci));
}
}
+ } else if (commandParser.isSet(options.at(2))) {
+ const QString &dci = commandParser.value(options.at(2));
+ if (!tree(dci)) {
+ printf("Failed on view the \"%s\" dci file\n", qPrintable(dci));
+ }
} else {
commandParser.showHelp(-1);
}
-set(BIN_NAME deepin-os-release)
+set(TARGET_NAME deepin-os-release)
+set(BIN_NAME ${TARGET_NAME}${DTK_VERSION_MAJOR})
+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOMOC ON)
-find_package(Qt5 REQUIRED COMPONENTS Core)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
add_definitions(-DDTK_NO_PROJECT)
# start dci
set(dci_SRCS
${dci_SRCS}
main.cpp
)
+
+target_compile_definitions(${BIN_NAME} PUBLIC
+ DSYSINFO_PREFIX="${DSYSINFO_PREFIX}")
+
target_link_libraries(${BIN_NAME} PRIVATE
- Qt5::Core
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::CorePrivate
)
target_include_directories(${BIN_NAME} PUBLIC
- ${Qt5Core_PRIVATE_INCLUDE_DIRS}
../../include/
../../include/dci/
../../include/DtkCore/
../../include/base/
../../include/global/
)
+set_target_properties(${BIN_NAME} PROPERTIES OUTPUT_NAME ${TARGET_NAME})
install(TARGETS ${BIN_NAME} DESTINATION "${TOOL_INSTALL_DIR}")
#end dci
+++ /dev/null
-QT -= gui
-TEMPLATE = app
-CONFIG += qt
-
-HEADERS += ../../src/dsysinfo.h \
- ../../src/ddesktopentry.h
-
-SOURCES += \
- main.cpp \
- ../../src/dsysinfo.cpp \
- ../../src/ddesktopentry.cpp
-
-INCLUDEPATH += ../../src
-DESTDIR = $$_PRO_FILE_PWD_/../../bin
-
-DTK_MODULE_NAME=dtkcore
-load(dtk_build_config)
-target.path = $$TOOL_INSTALL_DIR
-
-INSTALLS += target
parser.addVersionOption();
parser.process(app);
+ if (argc < 2)
+ parser.showHelp();
+
if (parser.isSet(option_all)) {
printf("Computer Name: %s\n", qPrintable(DSysInfo::computerName()));
printf("CPU Model: %s x %d\n", qPrintable(DSysInfo::cpuModelName()), QThread::idealThreadCount());
printf("Memory Size: %f GiB\n", DSysInfo::memoryTotalSize() / 1024.0 / 1024 / 1024);
printf("Disk Size: %f GiB\n", DSysInfo::systemDiskSize() / 1024.0 / 1024 / 1024);
- if (DSysInfo::isDDE()) {
+ if (DSysInfo::isDeepin() && DSysInfo::isDDE()) {
printf("Deepin Type: %s\n", qPrintable(DSysInfo::deepinTypeDisplayName()));
printf("Deepin Version: %s\n", qPrintable(DSysInfo::deepinVersion()));
printf("Product Type: %s\n", qPrintable(DSysInfo::productTypeString()));
printf("Product Version: %s\n", qPrintable(DSysInfo::productVersion()));
- printf("Uos Product Name: %s\n", qPrintable(DSysInfo::uosProductTypeName()));
- printf("Uos SystemName Name: %s\n", qPrintable(DSysInfo::uosSystemName()));
- printf("Uos Edition Name: %s\n", qPrintable(DSysInfo::uosEditionName()));
- printf("Uos SP Version: %s\n", qPrintable(DSysInfo::spVersion()));
- printf("Uos update Version: %s\n", qPrintable(DSysInfo::udpateVersion()));
- printf("Uos major Version: %s\n", qPrintable(DSysInfo::majorVersion()));
- printf("Uos minor Version: %s\n", qPrintable(DSysInfo::minorVersion()));
- printf("Uos build Version: %s\n", qPrintable(DSysInfo::buildVersion()));
-
+ if (DSysInfo::isDeepin()) {
+ printf("Uos Product Name: %s\n", qPrintable(DSysInfo::uosProductTypeName()));
+ printf("Uos SystemName Name: %s\n", qPrintable(DSysInfo::uosSystemName()));
+ printf("Uos Edition Name: %s\n", qPrintable(DSysInfo::uosEditionName()));
+ printf("Uos SP Version: %s\n", qPrintable(DSysInfo::spVersion()));
+ printf("Uos update Version: %s\n", qPrintable(DSysInfo::udpateVersion()));
+ printf("Uos major Version: %s\n", qPrintable(DSysInfo::majorVersion()));
+ printf("Uos minor Version: %s\n", qPrintable(DSysInfo::minorVersion()));
+ printf("Uos build Version: %s\n", qPrintable(DSysInfo::buildVersion()));
+ }
if (distributionInfoValid()) {
printDistributionOrgInfo(DSysInfo::Distribution);
printDistributionOrgInfo(DSysInfo::Distributor);
-set(BIN_NAME qdbusxml2cpp-fix)
+set(TARGET_NAME qdbusxml2cpp-fix)
+set(BIN_NAME ${TARGET_NAME}${DTK_VERSION_MAJOR})
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-find_package(Qt5 REQUIRED COMPONENTS Core)
-find_package(Qt5 REQUIRED COMPONENTS DBus)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS DBus)
add_executable(${BIN_NAME}
- qdbusxml2cpp.cpp
+ qdbusxml2cpp.cpp
)
target_link_libraries(
${BIN_NAME} PRIVATE
- Qt5::DBus
- Qt5::Core
+ Qt${QT_VERSION_MAJOR}::DBus
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::DBusPrivate
)
-target_include_directories(${BIN_NAME} PUBLIC
- ${Qt5DBus_PRIVATE_INCLUDE_DIRS}
+
+set_target_properties(
+ ${BIN_NAME} PROPERTIES
+ OUTPUT_NAME ${TARGET_NAME}
+ EXPORT_NAME Xml2Cpp
+)
+
+install(
+ TARGETS ${BIN_NAME}
+ EXPORT Dtk${DTK_VERSION_MAJOR}ToolsTargets
+ DESTINATION ${TOOL_INSTALL_DIR}
+)
+
+install(
+ EXPORT Dtk${DTK_VERSION_MAJOR}ToolsTargets
+ FILE Dtk${DTK_VERSION_MAJOR}ToolsTargets.cmake
+ NAMESPACE Dtk${DTK_VERSION_MAJOR}::
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Dtk${DTK_VERSION_MAJOR}Tools"
)
-install(TARGETS ${BIN_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
#include <qdbusmetatype.h>
#include <private/qdbusintrospection_p.h>
+#include <QVariant>
#include <stdio.h>
#include <stdlib.h>
#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
+#if QT_VERSION >= QT_VERSION_CHECK(5,15,0)
+#define endl Qt::endl
+#else
+#define endl endl
+#endif
static QString globalClassName;
static QString parentClassName;
static QString proxyFile;
static bool skipNamespaces;
static bool verbose;
static bool includeMocs;
+static bool skipIncludeAnnotations;
static QString commandLine;
static QStringList includes;
static QStringList wantedInterfaces;
" -N Don't use namespaces\n"
" -p <filename> Write the proxy code to <filename>\n"
" -v Be verbose.\n"
+ " -S Skip include annotation headers from \"types/\".\n"
" -V Show the program version and quit.\n"
"\n"
"If the file name given to the options -a and -p does not end in .cpp or .h, the\n"
case 'N':
skipNamespaces = true;
break;
+ case 'S':
+ skipIncludeAnnotations = true;
+ break;
case '?':
case 'h':
return retval;
retval.truncate(retval.length() - 1); // drop the h in .h
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ retval = QString("moc_%1cpp").arg(retval);
+#else
retval += QLatin1String("moc");
+#endif
return retval;
}
return retval;
}
+static QString annotationValue(QDBusIntrospection::Annotations annotations, const QString &name) {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
+ return annotations.value(name).value;
+#else
+ return annotations.value(name);
+#endif
+}
+
static QByteArray qtTypeName(const QString &signature, const QDBusIntrospection::Annotations &annotations, int paramId = -1, const char *direction = "Out")
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ const auto& type = QDBusMetaType::signatureToMetaType(signature.toLatin1());
+ if (type.id() == QMetaType::Type::UnknownType) {
+#else
int type = QDBusMetaType::signatureToType(signature.toLatin1());
if (type == QVariant::Invalid) {
+#endif
QString annotationName = QString::fromLatin1("org.qtproject.QtDBus.QtTypeName");
if (paramId >= 0)
annotationName += QString::fromLatin1(".%1%2").arg(QLatin1String(direction)).arg(paramId);
- QString qttype = annotations.value(annotationName);
+ QString qttype = annotationValue(annotations, annotationName);
if (!qttype.isEmpty())
return qttype.toLatin1();
QString oldAnnotationName = QString::fromLatin1("com.trolltech.QtDBus.QtTypeName");
if (paramId >= 0)
oldAnnotationName += QString::fromLatin1(".%1%2").arg(QLatin1String(direction)).arg(paramId);
- qttype = annotations.value(oldAnnotationName);
+ qttype = annotationValue(annotations, oldAnnotationName);
if (qttype.isEmpty()) {
fprintf(stderr, "Got unknown type `%s'\n", qPrintable(signature));
return qttype.toLatin1();
}
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ return type.name();
+#else
return QVariant::typeToName(QVariant::Type(type));
+#endif
}
static QString nonConstRefArg(const QByteArray &arg)
static QString propertyGetter(const QDBusIntrospection::Property &property)
{
- QString getter = property.annotations.value(QLatin1String("org.qtproject.QtDBus.PropertyGetter"));
+ QString getter = annotationValue(property.annotations, "org.qtproject.QtDBus.PropertyGetter");
if (!getter.isEmpty())
return getter;
- getter = property.annotations.value(QLatin1String("com.trolltech.QtDBus.propertyGetter"));
+ getter = annotationValue(property.annotations, "com.trolltech.QtDBus.propertyGetter");
if (!getter.isEmpty()) {
fprintf(stderr, "Warning: deprecated annotation 'com.trolltech.QtDBus.propertyGetter' found;"
" suggest updating to 'org.qtproject.QtDBus.PropertyGetter'\n");
static QString propertySetter(const QDBusIntrospection::Property &property)
{
- QString setter = property.annotations.value(QLatin1String("org.qtproject.QtDBus.PropertySetter"));
+ QString setter = annotationValue(property.annotations, "org.qtproject.QtDBus.PropertySetter");
if (!setter.isEmpty())
return setter;
- setter = property.annotations.value(QLatin1String("com.trolltech.QtDBus.propertySetter"));
+ setter = annotationValue(property.annotations, "com.trolltech.QtDBus.propertySetter");
if (!setter.isEmpty()) {
fprintf(stderr, "Warning: deprecated annotation 'com.trolltech.QtDBus.propertySetter' found;"
" suggest updating to 'org.qtproject.QtDBus.PropertySetter'\n");
static QString propertyNotifier(const QDBusIntrospection::Property &property)
{
- QString notifier = property.annotations.value(QLatin1String("org.qtproject.QtDBus.PropertyNotifier"));
+ QString notifier = annotationValue(property.annotations, "org.qtproject.QtDBus.PropertyNotifier");
if (!notifier.isEmpty())
return notifier;
static QString methodName(const QDBusIntrospection::Method &method)
{
- QString name = method.annotations.value(QStringLiteral("org.qtproject.QtDBus.MethodName"));
+ QString name = annotationValue(method.annotations, "org.qtproject.QtDBus.MethodName");
if (!name.isEmpty())
return name;
QSet<QString> annotations;
for (const QDBusIntrospection::Interface *interface : interfaces) {
- for (const auto method : interface->methods) {
+ for (const auto &method : interface->methods) {
for (int i(0); i != method.outputArgs.size(); ++i) {
const QDBusIntrospection::Argument &arg = method.outputArgs[i];
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ if (QDBusMetaType::signatureToMetaType(arg.type.toLatin1()).id() != QMetaType::Type::UnknownType)
+#else
if (QDBusMetaType::signatureToType(arg.type.toLatin1()) != QVariant::Invalid)
+#endif
continue;
annotations << qtTypeName(arg.type, method.annotations, i, "Out");
for (int i(0); i != method.inputArgs.size(); ++i) {
const QDBusIntrospection::Argument &arg = method.inputArgs[i];
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ if (QDBusMetaType::signatureToMetaType(arg.type.toLatin1()).id() != QMetaType::Type::UnknownType)
+#else
if (QDBusMetaType::signatureToType(arg.type.toLatin1()) != QVariant::Invalid)
+#endif
continue;
annotations << qtTypeName(arg.type, method.annotations, i, "In");
}
}
- for (const auto property : interface->properties) {
+ for (const auto &property : interface->properties) {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ if (QDBusMetaType::signatureToMetaType(property.type.toLatin1()).id() != QMetaType::Type::UnknownType)
+#else
if (QDBusMetaType::signatureToType(property.type.toLatin1()) != QVariant::Invalid)
+#endif
continue;
annotations << qtTypeName(property.type, property.annotations);
}
}
- for (const QString &annotation : annotations) {
- if (annotation.indexOf('<') == -1) {
- hs << "#include \"types/" << annotation.toLower() << ".h\"" << endl;
+ if (!skipIncludeAnnotations) {
+ for (const QString &annotation : annotations) {
+ if (annotation.indexOf('<') == -1) {
+ hs << "#include \"types/" << annotation.toLower() << ".h\"" << endl;
+ }
}
}
hs << endl;
foreach (const QDBusIntrospection::Interface *interface, interfaces) {
QString className = "__" + classNameForInterface(interface->name, Proxy);
+ // using namespace Dtk::Core in cpp
+ cs << "DCORE_USE_NAMESPACE" << endl;
+
// comment:
hs << "/*" << endl
<< " * Proxy class for interface " << interface->name << endl
// private class declare
hs << "class " << className << "Private;" << endl;
- // class header:
- hs << "class " << className << " : public DBusExtendedAbstractInterface" << endl
+ // class header: add Dtk::Core
+ hs << "class " << className << " : public DTK_CORE_NAMESPACE::DDBusExtendedAbstractInterface" << endl
<< "{" << endl
<< " Q_OBJECT" << endl;
hs << endl;
// private class member
cs << " // begin member variables" << endl;
- for (const auto property : interface->properties) {
+ for (const auto &property : interface->properties) {
QByteArray type = qtTypeName(property.type, property.annotations);
cs << " " << type << " " << property.name << ';' << endl;
}
<< " ~" << className << "();" << endl
<< endl;
cs << className << "::" << className << "(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)" << endl
- << " : DBusExtendedAbstractInterface(service, path, staticInterfaceName(), connection, parent)" << endl
+ << " : DDBusExtendedAbstractInterface(service, path, staticInterfaceName(), connection, parent)" << endl
<< " , d_ptr(new " << className << "Private)" << endl
<< "{" << endl;
if (!interface->properties.isEmpty())
for (const QString &annotation : annotations) {
if (annotation.indexOf('<') != -1) {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ cs << " if (QMetaType::fromName(\"" << annotation << "\").id() == QMetaType::UnknownType) {" << endl;
+#else
cs << " if (QMetaType::type(\"" << annotation << "\") == QMetaType::UnknownType) {" << endl;
+#endif
cs << " qRegisterMetaType< " << annotation << " >(\"" << annotation << "\");" << endl;
cs << " qDBusRegisterMetaType< " << annotation << " >();" << endl;
cs << " }" << endl;
} else {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ cs << " if (QMetaType::fromName(\"" << annotation << "\").id() == QMetaType::UnknownType)" << endl;
+#else
cs << " if (QMetaType::type(\"" << annotation << "\") == QMetaType::UnknownType)" << endl;
+#endif
cs << " register" << annotation << "MetaType();" << endl;
}
}
cs << "void " << className << "::onPropertyChanged(const QString &propName, const QVariant &value)" << endl;
cs << "{" << endl;
- for (const auto property : interface->properties) {
+ for (const auto &property : interface->properties) {
char first = property.name[0].toLatin1();
QString name = property.name;
- name[0] = first & ~0x20;
+ name[0] = QChar(first & ~0x20);
QByteArray type = qtTypeName(property.type, property.annotations);
// methods:
hs << "public Q_SLOTS: // METHODS" << endl;
foreach (const QDBusIntrospection::Method &method, interface->methods) {
- bool isDeprecated = method.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true");
+ bool isDeprecated = annotationValue(method.annotations, "org.freedesktop.DBus.Deprecated") == QLatin1String("true");
bool isNoReply =
- method.annotations.value(QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true");
+ annotationValue(method.annotations, QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true");
if (isNoReply && !method.outputArgs.isEmpty()) {
fprintf(stderr, "warning: method %s in interface %s is marked 'no-reply' but has output arguments.\n",
qPrintable(method.name), qPrintable(interface->name));
hs << "Q_SIGNALS: // SIGNALS" << endl;
foreach (const QDBusIntrospection::Signal &signal, interface->signals_) {
hs << " ";
- if (signal.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true"))
+ if (annotationValue(signal.annotations, QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true"))
hs << "Q_DECL_DEPRECATED ";
hs << "void " << signal.name << "(";
hs << "public Q_SLOTS: // METHODS" << endl;
foreach (const QDBusIntrospection::Method &method, interface->methods) {
bool isNoReply =
- method.annotations.value(QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true");
+ annotationValue(method.annotations, QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true");
if (isNoReply && !method.outputArgs.isEmpty()) {
fprintf(stderr, "warning: method %s in interface %s is marked 'no-reply' but has output arguments.\n",
qPrintable(method.name), qPrintable(interface->name));
}
hs << " ";
- if (method.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true"))
+ if (annotationValue(method.annotations, QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true"))
hs << "Q_DECL_DEPRECATED ";
QByteArray returnType;
hs << "Q_SIGNALS: // SIGNALS" << endl;
foreach (const QDBusIntrospection::Signal &signal, interface->signals_) {
hs << " ";
- if (signal.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true"))
+ if (annotationValue(signal.annotations, QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true"))
hs << "Q_DECL_DEPRECATED ";
hs << "void " << signal.name << "(";
+++ /dev/null
-TARGET = qdbusxml2cpp-fix
-
-TEMPLATE = app
-QT += core dbus-private dbus
-CONFIG += c++11
-
-SOURCES += qdbusxml2cpp.cpp
-
-host_sw_64 {
- QMAKE_CXXFLAGS += -mieee
-}
-
-#target.path = $$TOOL_INSTALL_DIR
-target.path = $$PREFIX/bin
-
-INSTALLS += target
-set(BIN_NAME dtk-settings)
+set(TARGET_NAME dtk-settings)
+set(BIN_NAME ${TARGET_NAME}${DTK_VERSION_MAJOR})
+
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
+find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Xml)
+
+if(${QT_VERSION_MAJOR} STREQUAL "5")
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt)
+endif()
-find_package(Qt5 REQUIRED COMPONENTS Core)
-find_package(Qt5 REQUIRED COMPONENTS Xml)
-find_package(PkgConfig REQUIRED)
-pkg_check_modules(QGSettings REQUIRED gsettings-qt)
add_executable(${BIN_NAME}
main.cpp
)
target_link_libraries(
${BIN_NAME} PRIVATE
- Qt5::Core
- Qt5::Xml
- dtkcore
- ${QGSettings_LIBRARIES}
+ Qt${QT_VERSION_MAJOR}::Core
+ Qt${QT_VERSION_MAJOR}::Xml
+ ${LIB_NAME}
)
+
+if(${QT_VERSION_MAJOR} STREQUAL "5")
+target_link_libraries(
+ ${BIN_NAME} PRIVATE
+ PkgConfig::QGSettings
+)
+endif()
+
target_include_directories( ${BIN_NAME} PUBLIC
- ${QGSettings_INCLUDE_DIRS}
../../include/util/
../../include/dci/
../../include/log/
../../include/filesystem/
../../include/
)
+set_target_properties(${BIN_NAME} PROPERTIES OUTPUT_NAME ${TARGET_NAME})
install(TARGETS ${BIN_NAME} DESTINATION "${TOOL_INSTALL_DIR}")
* dictionary a{ss} QVariantMap QVariant::Map
*/
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+QString gsettings_type_from_QVarint(const QMetaType::Type qtype)
+{
+ switch (qtype) {
+ case QMetaType::Type::Bool:
+ return "b";
+ case QMetaType::Type::Int:
+ return "i";
+ case QMetaType::Type::UInt:
+ return "u";
+ case QMetaType::Type::LongLong:
+ return "x";
+ case QMetaType::Type::ULongLong:
+ return "t";
+ case QMetaType::Type::Double:
+ return "d";
+ case QMetaType::Type::QString:
+ return "s";
+ case QMetaType::Type::QStringList:
+ return "as";
+ case QMetaType::Type::QByteArray:
+ return "ay";
+ case QMetaType::Type::QVariantMap:
+ return "a{ss}";
+ default:
+ return "";
+ }
+}
+#else
QString gsettings_type_from_QVarint(const QVariant::Type qtype)
{
switch (qtype) {
return "";
}
}
+#endif
QString gsettings_value_from_QVarint(const QVariant value)
{
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ switch (value.typeId()) {
+ case QMetaType::Type::Bool:
+ return value.toString();
+ case QMetaType::Type::Int:
+ return value.toString();
+ case QMetaType::Type::UInt:
+ return value.toString();
+ case QMetaType::Type::LongLong:
+ return value.toString();
+ case QMetaType::Type::ULongLong:
+ return value.toString();
+ case QMetaType::Type::Double:
+ return value.toString();
+ case QMetaType::Type::QString:
+ return QString("\"%1\"").arg(value.toString());
+ case QMetaType::Type::QStringList:
+ return value.toString();
+ case QMetaType::Type::QByteArray:
+ return value.toString();
+ case QMetaType::Type::QVariantMap:
+ return value.toString();
+ default:
+ return "";
+ }
+#else
switch (value.type()) {
case QVariant::Bool:
return value.toString();
default:
return "";
}
+#endif
}
for (QString key : settings->keys()) {
auto codeKey = QString(key).replace(".", "-").replace("_", "-");
auto value = settings->option(key)->value();
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ auto gtype = gsettings_type_from_QVarint(static_cast<QMetaType::Type>(value.typeId()));
+#else
auto gtype = gsettings_type_from_QVarint(value.type());
+#endif
if (gtype.isEmpty()) {
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ qDebug() << "skip unsupported type:" << value.typeId() << key;
+#else
qDebug() << "skip unsupported type:" << value.type() << key;
+#endif
continue;
}
+++ /dev/null
-QT += core xml
-QT -= gui
-
-CONFIG += c++11
-
-TARGET = dtk-settings
-CONFIG += console link_pkgconfig
-CONFIG -= app_bundle
-PKGCONFIG += gsettings-qt
-
-TEMPLATE = app
-
-SOURCES += main.cpp
-
-!isEmpty(DTK_STATIC_LIB){
- DEFINES += DTK_STATIC_LIB
-}
-
-win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../src/release/ -ldtkcore
-else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../src/debug/ -ldtkcore
-else:unix: LIBS += -L$$OUT_PWD/../../src/ -ldtkcore
-
-INCLUDEPATH += $$PWD/../../src
-DEPENDPATH += $$PWD/../../src
-DESTDIR = $$_PRO_FILE_PWD_/../../bin
-
-DTK_MODULE_NAME=dtkcore
-load(dtk_build_config)
-target.path = $$TOOL_INSTALL_DIR
-
-scripts.files += ../script/*.py
-scripts.path = $$TOOL_INSTALL_DIR
-
-INSTALLS += target scripts