Files
serai/coins/monero/src/wallet/seed/polyseed/ja.json
akildemir 23b9d57305 add polyseed support (#257)
* add polyseed support

* fix pr comments

* fix tests

* Embed the mempool into the Blockchain

* Plan scheduled payments whenever outputs are received

The scheduler prior waited for the next series of payments to be added.

* Replace Tendermint step with sync_block

Step moved a step forward after an externally synced/added block. This created
a race condition to add the block between the sync process and the Tendermint
machine. Now that the block routes through Tendermint, there is no such race
condition.

* Finish binding Tendermint into Tributary and define a Tributary master object

* Add correction the last commit missed

* Add DoS limits to tributary and require provided transactions be ordered

* Fix the scheduler from dropping UTXOs when there weren't any payments

* Documentation and cargo update

* Add a dedicated db crate with a basic DB trait

It's needed by the processor and tributary (coordinator).

* Add a DB to Tributary

Adds support for reloading most of the blockchain.

* Reloaded provided transactions from the disk

Also resolves a race condition by asserting provided transactions must be
unique, allowing them to be safely provided multiple times.

* must_use annotations on DbTxn

* Support reloading the mempool from disk

* Add a NewSet event to validator-sets

Updates to the latest serai-dex/substrate due to depending on
10ccaca0eb498a2316bbf627d419b29b1a75933a.

* Add basic getters to tributary

* cargo update

* Update to the latest subxt

Writes a custom unsigned extrinic creator due to subxt having an internal error
with the scale metadata. While the code in our scope increased, it's much more
ergonomic to our usage. We may end up rewriting most of subxt, eventually.

* Make unsigned private due to unsafe calling potential

* Start defining the coordinator

* Merge AckBlock with Burns

Offers greater efficiency while reducing concerns re: atomicity.

* Correct processor flow to have the coordinator decide signing set/re-attempts

The signing set should be the first group to submit preprocesses to Tributary.
Re-attempts shouldn't be once every 30s, yet n blocks since the last relevant
message.

Removes the use of an async task/channel in the signer (and Substrate signer).
Also removes the need to be able to get the time from a coin's block, which was
a fragile system marked with a TODO already.

* cargo +nightly fmt

* cargo update

Since p256 now pulls in an extra crate with this update, the {k,p}256 imports
disable default-features to prevent growing the tree.

* Support extracting timestamps from blocks

* Make progres on handling NewSet events

Further bones out the coordinator.

* Resolve #245

* Have InInstructions track the latest block for a network in storage

* Fill out code for the rest of the Substrate events

* Clean up the Substrate block processing code

* Rename transaction file to tributary, add function for genesis

* Add a processor API to the coordinator

* Add extensive commentary on mutable to the processor's main file

Clearly establishes why consistency is guaranteed from a Rust borrow-checker
mindset. While there are plenty of... 'violations', they're clearly explained.

Hopefully, this method of thinking helps promote/ensure consistency in the
future.

* Move ConfirmKeyPair from key_gen to substrate

Clarifies the emitter and accordingly why its mutations are justified.

* Remove BatchSigned

SubstrateBlock's provision of the most recently acknowledged block has
equivalent information with the same latency. Accordingly, there's no need for
it.

* Add note to processor_messages

* Use a single txn for an entire coordinator message

Removes direct DB accesses whre possible. Documents the safety of the rest.
Does uncover one case of unsafety not previously noted.

* cargo update to remove usage of yanked crate

* Clarify safety of Scanner::block_number and KeyGen::keys

* Tweak ConfirmKeyPair to alleviate database requirements of coordinator

* Use an enum for Coin/NetworkId

It originally wasn't an enum so software which had yet to update before an
integration wouldn't error (as now enums are strictly typed). The strict typing
is preferable though.

* Code a method to determine the activation block before any block has consensus

[0; 32] is a magic for no block has been set yet due to this being the first
key pair. If [0; 32] is the latest finalized block, the processor determines
an activation block based on timestamps.

This doesn't use an Option for ergonomic reasons.

* automate whitespace & trimming test cases

* Save keys by their tweaked group_key

Keys are referred to by their tweaked versions. If a tweak was needed, keys
would fail to confirm.

* Use crypto-bigint's reduction in ed448

Achieves feasible performance in the ed448 which makes it potentially viable
for real world usage.

Accordingly prepares a new release, updating the README.

* Move the entirety of ed448 to Residue, offering a further 2-4x speedup

* Resolve #68

Notably speeds up monero-serai's build and CLSAG performance.

* Make MainDB into SubstrateDB

* Initial Tributary handling

* Add additional checks to key_gen/sign

There is the ability to cause state bloat by flooding Tributary.
KeyGen/Sign specifically shouldn't allow bloat since we check the
commitments/preprocesses/shares for validity. Accordingly, any invalid data
(such as bloat) should be detected.

It was posssible to place bloat after the valid data. Doing so would be
considered a valid KeyGen/Sign message, yet could add up to 50k kB per sign.

* Apply DKG TX handling code to all sign TXs

The existing code was almost entirely applicable. It just needed to be scoped
with an ID. While the handle function is now a bit convoluted, I don't see a
better option.

* Split FinalizedBlock into ExternalBlock and SeraiBlock

Also re-arranges their orders.

* Add support for multiple orderings in Provided

Necessary as our Tributary chains needed to agree when a Serai block has
occurred, and when a Monero block has occurred. Since those could happen at the
same time, some validators may put SeraiBlock before ExternalBlock and vice
versa, causing a chain halt. Now they can have distinct ordering queues.

* Slash on unrecognized ID

* ExternalBlock handler

* Add a SubstrateBlockAck message to the processor

When a Substrate block occurs, the coordinator is expected to emit
SubstrateBlock. This causes the processor to begin a variety of plans. The
processor now emits SubstrateBlockAck, explicitly listing all plan IDs, before
starting signing.

This lets the coordinator provide a SubstrateBlock transaction, and with it,
recognize all plan IDs as valid.

Prior, we would've had to have a spotty algorithm based upon the upcoming
Preprocess messages, or if we immediately provided the SubstrateBlock
transaction, then wait for the processor to inform us of the contained plans.

This creates an explicitly proper async flow not reliant on waiting for data
availability.

Alternatively, we could've replaced Preprocess with (Block, Vec<Preprocess>).
This would've been more efficient, yet also clunky due to the multiple usages
of the Preprocess message.

* Route the SubstrateBlock message, which is the last Tributary transaction type

* Add recent bloat checks added to signer to substrate_signer as well

* Add no_std support to transcript, dalek-ff-group, ed448, ciphersuite, multiexp, schnorr, and monero-generators

transcript, dalek-ff-group, ed449, and ciphersuite are all usable with no_std
alone. The rest additionally require alloc.

Part of #279.

* Add a test to the coordinator for running a Tributary

Impls a LocalP2p for testing.

Moves rebroadcasting into Tendermint, since it's what knows if a message is
fully valid + original.

Removes TributarySpec::validators() HashMap, as its non-determinism caused
different instances to have different round robin schedules. It was already
prior moved to a Vec for this issue, so I'm unsure why this remnant existed.

Also renames the GH no-std workflow from the prior commit.

* Add a test for Tributary

Further fleshes out the Tributary testing code.

* Test handling of DKG commitments transactions

* Add Transaction::sign.

While I don't love the introduction of empty_signed, it's practically fine.

* Tributary test wait_for_tx_inclusion function

* Additionally test DKGShares

* Handle adding new Tributaries

Removes last_block as an argument from Tendermint. It now loads from the DB as
needed. While slightly less performant, it's easiest and should be fine.

* Reload Tributaries

add_active_tributary writes the spec to disk before it returns, so even if the
VecDeque it pushes to isn't popped, the tributary will still be loaded on boot.

* Start handling P2P messages

This defines the tart of a very complex series of locks I'm really unhappy
with. At the same time, there's not immediately a better solution. This also
should work without issue.

* Clarify Arc RwLocks and sleeps in coordinator

* Send a heartbeat message when a Tributary falls behind

* cargo fmt

* cargo update

* Move json word lists to rs

Allows building the seed code without serde_json.

* Break coordinator main into multiple functions

Also moves from std::sync::RwLock to tokio::sync::RwLock to prevent wasting
cycles on spinning.

* Remove reliance on a blockchain read lock from block/commit

* Implement Tributary syncing

Also adds a forwards-lookup to the Tributary blockchain.

* Don't return from sync_block until the Tendermint machine returns if it's valid or not

We had a race condition where'd we be informed of blocks 1 .. 3, and
immediately add 1 .. 3. Because we immediately tried to add 2 after 1, it'd
fail since the tip was still the genesis, yet 2 needs the tip to be 1.

Adding a channel, while ugly, was the simplest way to accomplish this.

Also has any added block be broadcasted. Else there's a race condition where a
node which syncs up to the most recent block does so, yet fails to add the next
block when it's committed to.

* Test handle_p2p and Tributary syncing

Includes bug fixes.

* Tweak tests workflow

* Add a TributaryReader which doesn't require a borrow to operate

Reduces lock contention.

Additionally changes block_key to include the genesis. While not technically
needed, the lack of genesis introduced a side effect where any Tributary on the
the database could return the block of any other Tributary. While that wasn't a
security issue, returning it suggested it was on-chain when it wasn't. This may
have been usable to create issues.

* Document panic in FROST

* Document a pair of panics requiring 256 GB of RAM/4 GB of a context

* Add a UID function to messages

When we receive messages, we're provided with a message ID we can use to
prevent handling an item multiple times. That doesn't prevent us from *sending*
an item multiple times though. Thanks to the UID system, we can now not send if
already present.

Alternatively, we can remove the ordered message ID for just the UID, allowing
duplicates to be sent without issue, and handled on the receiving end.

* Initial code to handle messages from processors

* Document the processor/tributary/coordinator/serai flow

* Have Coordinator MainDb take a mutable borrow

* Update to substrate polkadot-v0.9.42

* Correct error message in ff-group-tests

* Update to May's nightly

Doesn't use the PR due to the needed changes.

* Support arbitrary RPC providers in monero-serai

Sets a clean path for no-std premised RPCs (buffers to an external RPC impl)/
Tor-based RPCs/client-side load balancing/...

* Correct processor's handling of the new Monero RPC code

* Correct Serai Dockerfile

* Publish ExternablBlock/SubstrateBlock, delay *Preprocess until ID acknowledged

Adds a channel for the Tributary scanner to communicate when an ID has been
acknowledged.

* Rename uid to intent

* Use U448 for Ed448 instead of U512

* Spawn a new async task for each block message

This probably should be done with n-long lived tasks, one per Tributary. While
this may not be suitably performant long-term (potential DoS vector), this at
least resolves the halting concerns.

* Move the coordinator to a n-processor design

* Ensure Tributary commits are minimal

* Properly get genesis for a Processor message

* Create a vote transaction upon GeneratedKeyPair

* Remove TODO about code de-duplication

It's infeasible to write a macro/function there. Does add a type alias which
makes things cleaner.

* Have coordinator publish batches to Substrate

* Implement MuSig key aggregation into DKG

Isn't spec compliant due to the lack of a spec to be compliant too.

Slight deviation from the paper by using a unique list instead of a multiset.

Closes #186, progresses #277.

* Correct 2/3rds definitions throughout the codebase

The prior formula failed for some values, such as 20.
20 / 3 = 6, * 2 = 12, + 1 = 13. 13 is 65%, not >= 67.

* cargo update

Resolves a yanked crate and removes some duplicated dependencies.

* Add a dedicated function to get a MuSig key

* Do the minimal amount of work for dkg to compile under no-std

The Substrate runtime requires access to the MuSig key aggregation function.

\#279 related.

* Use a MuSig signature to publish validator set key pairs to Serai

The processor/coordinator flow still has to be rewritten.

* Correct various no_std definitions

* Add a context to MuSig key aggregation

* Use proper messages for ValidatorSets/InInstructions pallet

Provides a DST, and associated metadata as beneficial.

Also utilizes MuSig's context to session-bind. Since set_keys_messages also
binds to set, this is semi-redundant, yet that's appreciated.

* Remove signed Substrate TXs from Coordinator

* Only scan v2 Monero TXs

* Fix for prior commit

* Ensure canonical points in the cross-group DLEq proof

* Fix incorrect sig_hash generation

sig_hash was used as a challenge. challenges should be of the form H(R, A, m).
These sig hashes were solely H(A, m), allowing trivial forgeries.

* cargo update

Resolves an openssl advisory and nets ~-8 crates.

* Build no-std tests with RISC-V 32 IMAC

Turns out wasm still has std, making it suboptimal to use here.

* Pin setup-protoc to v2.0.0

* Update to substrate polkadot-v0.9.43

* fix tributary sync test

* Slight terminology correction in sync test

Also correct a mistake from merging the most recent polkadot version.

* Update nightly

* Replace lazy_static with OnceLock inside monero-serai

lazy_static, if no_std environments were used, effectively required always
using spin locks. This resolves the ergonomics of that while adopting Rust std
code.

no_std does still use a spin based solution. Theoretically, we could use
atomics, yet writing our own Mutex wasn't a priority.

* no-std support for monero-serai (#311)

* Move monero-serai from std to std-shims, where possible

* no-std fixes

* Make the HttpRpc its own feature, thiserror only on std

* Drop monero-rs's epee for a homegrown one

We only need it for a single function. While I tried jeffro's, it didn't work
out of the box, had three unimplemented!s, and is no where near viable for
no_std.

Fixes #182, though should be further tested.

* no-std monero-serai

* Allow base58-monero via git

* cargo fmt

* Represent RCT amounts with None, not 0.

Fixes #282.

Does allow any v1 TXs which exist, and v2 miner-TXs, to specify Some(0). As far
as I can tell, both were/are theoreitcally possible.

* Add a message queue

This is intended to be a reliable transport between the processors and
coordinator. Since it'll be intranet only, it's written as never fail.

Primarily needs testing and a proper ID.

* cargo update

Resolves https://github.com/serai-dex/serai/security/dependabot/29

* Correct deny.toml with inclusion of message-queue

* Update nightly

* std-shims: six `Read` for &[u8]

* Use serai- prefixes on Serai-specific packages

Fixes deny.toml, also runs a minor cargo update shrinking the tree.

* Update monero-tests workflow to new name for the processor

* Correct depends for processor-messages

* Disable Rust caching

We hit the cache limit after just one or two builds, making it infeasible.

* cargo update

Resolves a yanked crate

* Move location of serai-client in Cargo.toml

* Monero: support for legacy transactions (#308)

* add mlsag

* fix last commit

* fix miner v1 txs

* fix non-miner v1 txs

* add borromean + fix mlsag

* add block hash calculations

* fix for the jokester that added unreduced scalars

to the borromean signature of
2368d846e671bf79a1f84c6d3af9f0bfe296f043f50cf17ae5e485384a53707b

* Add Borromean range proof verifying functionality

* Add MLSAG verifying functionality

* fmt & clippy :)

* update MLSAG, ss2_elements will always be 2

* Add MgSig proving

* Tidy block.rs

* Tidy Borromean, fix bugs in last commit, replace todo! with unreachable!

* Mark legacy EcdhInfo amount decryption as experimental

* Correct comments

* Write a new impl of the merkle algorithm

This one tries to be understandable.

* Only pull in things only needed for experimental when experimental

* Stop caching the Monero block hash now in processor that we have Block::hash

* Corrections for recent processor commit

* Use a clearer algorithm for the merkle

Should also be more efficient due to not shifting as often.

* Tidy Mlsag

* Remove verify_rct_* from Mlsag

Both methods were ports from Monero, overtly specific without clear
documentation. They need to be added back in, with documentation, or included
in a node which provides the necessary further context for them to be naturally
understandable.

* Move mlsag/mod.rs to mlsag.rs

This should only be a folder if it has multiple files.

* Replace EcdhInfo terminology

The ECDH encrypted the amount, yet this struct contained the encrypted amount,
not some ECDH.

Also corrects the types on the original EcdhInfo struct.

* Correct handling of commitment masks when scanning

* Route read_array through read_raw_vec

* Misc lint

* Make a proper RctType enum

No longer caches RctType in the RctSignatures as well.

* Replace Vec<Bulletproofs> with Bulletproofs

Monero uses aggregated range proofs, so there's only ever one Bulletproof. This
is enforced with a consensus rule as well, making this safe.

As for why Monero uses a vec, it's probably due to the lack of variadic typing
used. Its effectively an Option for them, yet we don't need an Option since we
do have variadic typing (enums).

* Add necessary checks to Eventuality re: supported protocols

* Fix for block 202612 and fix merkel root calculations

* MLSAG (de)serialisation fix

ss_2_elements will not always be 2 as rct type 1 transactions are not enforced to have one input

* Revert "MLSAG (de)serialisation fix"

This reverts commit 5e710e0c96.

here it checks number of MGs == number of inputs:
0a1eaf26f9/src/cryptonote_core/tx_verification_utils.cpp (L60-59)

and here it checks for RctTypeFull number of MGs == 1:
0a1eaf26f9/src/ringct/rctSigs.cpp (L1325)

so number of inputs == 1
so ss_2_elements == 2

* update `MlsagAggregate` comment

* cargo update

Resolves a yanked crate

* Move location of serai-client in Cargo.toml

---------

Co-authored-by: Luke Parker <lukeparker5132@gmail.com>

* Fix the known issue with the DSA

I wrote it to only select TXs with a timelock, not only TXs which are unlocked.
This most likely explains why it so heavily selected coinbases.

Also moves an InternalError which would've never been hit on mainnet, yet
technically isn't an invariant, to only exist when cfg(test).

* Add a bin to download a chain, over RPC, reserializing and hashing every item

Parallelized. Doesn't check the deserialization is correct. Does use distinct,
persistent HTTP clients.

* Correct how Monero integration tests are run

* Support multiple RPCs in the reserialize_chain bin

* Don't call get_height every block

* Modify get_transactions to split requests as to not hit the restricted RPC limits

* Meaningful changes from aggressive-clippy

I do want to enable a few specific lints, yet aggressive-clippy as a whole
isn't worthwhile.

* Extend reserialize_chain with CLSAG/BP(+) verification

* Remove spammy println from reserialize_chain

* Update reserialize_chain for v1 and migration TXs

Also always marks 0-amount inputs as RCT due to impossibility of non-RCT
0-amount outputs.

* Only deserialize RctSignatures where's there at least one input

This is only enforced by the Monero protocol due to a single check the mixRing
isn't empty in get_pre_mlsag_hash. The value in ensuring there's a least one
input is to ensure the safety of our rct_type functions, which determines the
RctType based off structural analysis (specifically, input data if
MlsagBorromean).

rct_type was technically safe without this. A 0-input transaction would be
mis-classified as RctFull/MlsagAggregate, which would then make the
RctSignatures invalid for being RctFull (requiring exactly one input) yet not
having inputs, meaning an invalid RctSignatures would be mis-classified yet
still invalid.

This just removes the risk of mis-classification in the first place, tightening
the library's safety.

* docs/Getting Started.md: cargo build --release --all-features

* Fix the known instance of #295

* Bind RocksDB into serai-db

* Split up tests in CI to avoid node storage limits

* Corrections to prior commit

* Again

I called git commit --amend without calling git add . again :(

* Update the flow for completed signing processes

Now, an on-chain transaction exists. This resolves some ambiguities and
provides greater coordination.

* Clean Polyseed code

* Final tweaks

* Correct no-std builds for Polyseed

* Again correct no-std

---------

Co-authored-by: Luke Parker <lukeparker5132@gmail.com>
Co-authored-by: GitHub Actions <unknown>
Co-authored-by: Boog900 <54e72d8a-345f-4599-bd90-c6b9bc7d0ec5@aleeas.com>
Co-authored-by: Boog900 <108027008+Boog900@users.noreply.github.com>
Co-authored-by: Steven Chang <stevenchang5000@gmail.com>
2023-07-16 07:25:17 -04:00

2050 lines
40 KiB
JSON

[
"あいこくしん",
"あいさつ",
"あいだ",
"あおぞら",
"あかちゃん",
"あきる",
"あけがた",
"あける",
"あこがれる",
"あさい",
"あさひ",
"あしあと",
"あじわう",
"あずかる",
"あずき",
"あそぶ",
"あたえる",
"あたためる",
"あたりまえ",
"あたる",
"あっしゅく",
"あつい",
"あつかう",
"あつまり",
"あつめる",
"あてな",
"あてはまる",
"あひる",
"あふれる",
"あぶら",
"あぶる",
"あまい",
"あまど",
"あまやかす",
"あまり",
"あみもの",
"あめりか",
"あやまる",
"あゆむ",
"あらいぐま",
"あらし",
"あらすじ",
"あらためる",
"あらゆる",
"あらわす",
"ありがとう",
"あわせる",
"あわてる",
"あんい",
"あんがい",
"あんこ",
"あんぜん",
"あんてい",
"あんない",
"あんまり",
"いいだす",
"いおん",
"いがい",
"いがく",
"いきおい",
"いきなり",
"いきもの",
"いきる",
"いくじ",
"いくぶん",
"いけばな",
"いけん",
"いこう",
"いこく",
"いこつ",
"いさましい",
"いさん",
"いしき",
"いじゅう",
"いじょう",
"いじわる",
"いずみ",
"いずれ",
"いせい",
"いせえび",
"いせかい",
"いせき",
"いぜん",
"いそうろう",
"いそがしい",
"いたずら",
"いたみ",
"いたりあ",
"いだい",
"いだく",
"いちおう",
"いちじ",
"いちど",
"いちば",
"いちぶ",
"いちりゅう",
"いっしゅん",
"いっせい",
"いっそう",
"いったん",
"いっち",
"いってい",
"いっぽう",
"いつか",
"いてざ",
"いてん",
"いとこ",
"いどう",
"いない",
"いなか",
"いねむり",
"いのち",
"いのる",
"いはつ",
"いはん",
"いばる",
"いひん",
"いびき",
"いふく",
"いへん",
"いほう",
"いみん",
"いもうと",
"いもたれ",
"いもり",
"いやがる",
"いやす",
"いよかん",
"いよく",
"いらい",
"いらすと",
"いりぐち",
"いりょう",
"いれい",
"いれもの",
"いれる",
"いろえんぴつ",
"いわい",
"いわう",
"いわかん",
"いわば",
"いわゆる",
"いんげんまめ",
"いんさつ",
"いんしょう",
"いんよう",
"うえき",
"うえる",
"うおざ",
"うかぶ",
"うかべる",
"うがい",
"うきわ",
"うくらいな",
"うくれれ",
"うけたまわる",
"うけつけ",
"うけとる",
"うけもつ",
"うける",
"うこん",
"うごかす",
"うごく",
"うさぎ",
"うしなう",
"うしろがみ",
"うすい",
"うすぎ",
"うすぐらい",
"うすめる",
"うせつ",
"うちあわせ",
"うちがわ",
"うちき",
"うちゅう",
"うっかり",
"うったえる",
"うつくしい",
"うつる",
"うどん",
"うなぎ",
"うなじ",
"うなずく",
"うなる",
"うねる",
"うのう",
"うぶげ",
"うぶごえ",
"うまれる",
"うめる",
"うもう",
"うやまう",
"うよく",
"うらがえす",
"うらぐち",
"うらない",
"うりあげ",
"うりきれ",
"うるさい",
"うれしい",
"うれゆき",
"うれる",
"うろこ",
"うわき",
"うわさ",
"うんこう",
"うんちん",
"うんてん",
"うんどう",
"えいえん",
"えいが",
"えいきょう",
"えいご",
"えいせい",
"えいぶん",
"えいよう",
"えいわ",
"えおり",
"えがお",
"えがく",
"えきたい",
"えくせる",
"えしゃく",
"えすて",
"えつらん",
"えのぐ",
"えほうまき",
"えほん",
"えまき",
"えもじ",
"えもの",
"えらい",
"えらぶ",
"えりあ",
"えんえん",
"えんかい",
"えんぎ",
"えんげき",
"えんしゅう",
"えんぜつ",
"えんそく",
"えんちょう",
"えんとつ",
"おいかける",
"おいこす",
"おいしい",
"おいつく",
"おうえん",
"おうさま",
"おうじ",
"おうせつ",
"おうたい",
"おうふく",
"おうべい",
"おうよう",
"おえる",
"おおい",
"おおう",
"おおどおり",
"おおや",
"おおよそ",
"おかえり",
"おかず",
"おかわり",
"おがむ",
"おきる",
"おぎなう",
"おくさま",
"おくじょう",
"おくりがな",
"おくる",
"おくれる",
"おこす",
"おこなう",
"おこる",
"おさえる",
"おさない",
"おさめる",
"おしいれ",
"おしえる",
"おしゃれ",
"おじぎ",
"おじさん",
"おそらく",
"おそわる",
"おたがい",
"おたく",
"おだやか",
"おちつく",
"おっと",
"おつり",
"おでかけ",
"おとしもの",
"おとなしい",
"おどり",
"おどろかす",
"おばさん",
"おまいり",
"おめでとう",
"おもいで",
"おもう",
"おもたい",
"おもちゃ",
"おやつ",
"おやゆび",
"およぼす",
"おらんだ",
"おろす",
"おんがく",
"おんけい",
"おんしゃ",
"おんせん",
"おんだん",
"おんちゅう",
"おんどけい",
"かあつ",
"かいが",
"かいさつ",
"かいしゃ",
"かいすいよく",
"かいぜん",
"かいぞうど",
"かいつう",
"かいてん",
"かいとう",
"かいふく",
"かいほう",
"かいよう",
"かいわ",
"かえる",
"かおり",
"かかえる",
"かがく",
"かがし",
"かがみ",
"かくご",
"かくとく",
"かざる",
"かたい",
"かたち",
"かなざわし",
"かのう",
"かぶか",
"かほう",
"かほご",
"かまう",
"かまぼこ",
"かめれおん",
"かゆい",
"かようび",
"からい",
"かるい",
"かろう",
"かわく",
"かわら",
"かんけい",
"かんこう",
"かんしゃ",
"かんそう",
"かんたん",
"かんち",
"がいき",
"がいけん",
"がいこう",
"がいへき",
"がいらい",
"がぞう",
"がちょう",
"がっきゅう",
"がっこう",
"がっさん",
"がっしょう",
"がはく",
"がんか",
"がんばる",
"きあい",
"きあつ",
"きいろ",
"きうい",
"きうん",
"きえる",
"きおう",
"きおく",
"きおち",
"きおん",
"きかい",
"きかく",
"きかんしゃ",
"ききて",
"きくばり",
"きくらげ",
"きけんせい",
"きこう",
"きこえる",
"きこく",
"きさい",
"きさく",
"きさま",
"きさらぎ",
"きすう",
"きせい",
"きせき",
"きせつ",
"きそう",
"きぞく",
"きぞん",
"きたえる",
"きちょう",
"きつえん",
"きつつき",
"きつね",
"きてい",
"きどう",
"きどく",
"きない",
"きなが",
"きなこ",
"きぬごし",
"きねん",
"きのう",
"きのした",
"きはく",
"きひん",
"きびしい",
"きふく",
"きぶん",
"きほん",
"きぼう",
"きまる",
"きみつ",
"きむずかしい",
"きめる",
"きもだめし",
"きもち",
"きもの",
"きゃく",
"きやく",
"きょうりゅう",
"きよう",
"きらい",
"きらく",
"きりん",
"きれい",
"きれつ",
"きろく",
"きわめる",
"きんかくじ",
"きんじょ",
"きんようび",
"ぎいん",
"ぎしき",
"ぎじかがく",
"ぎじたいけん",
"ぎじにってい",
"ぎじゅつしゃ",
"ぎっちり",
"ぎゅうにく",
"ぎろん",
"ぎんいろ",
"くいず",
"くうかん",
"くうき",
"くうぐん",
"くうこう",
"くうそう",
"くうふく",
"くうぼ",
"くかん",
"くきょう",
"くげん",
"くさい",
"くさき",
"くさばな",
"くさる",
"くしゃみ",
"くしょう",
"くすのき",
"くすりゆび",
"くせげ",
"くせん",
"くたびれる",
"くださる",
"くちこみ",
"くちさき",
"くつした",
"くつろぐ",
"くとうてん",
"くどく",
"くなん",
"くねくね",
"くのう",
"くふう",
"くみあわせ",
"くみたてる",
"くめる",
"くやくしょ",
"くらす",
"くらべる",
"くるま",
"くれる",
"くろう",
"くわしい",
"ぐあい",
"ぐうせい",
"ぐうたら",
"ぐこう",
"ぐたいてき",
"ぐっすり",
"ぐんかん",
"ぐんしょく",
"ぐんたい",
"ぐんて",
"けあな",
"けいかく",
"けいけん",
"けいこ",
"けいさつ",
"けいたい",
"けいれき",
"けいろ",
"けおとす",
"けおりもの",
"けさき",
"けしき",
"けしごむ",
"けしょう",
"けたば",
"けちゃっぷ",
"けちらす",
"けっこん",
"けっせき",
"けってい",
"けつあつ",
"けつい",
"けつえき",
"けつじょ",
"けつまつ",
"けつろん",
"けとばす",
"けとる",
"けなげ",
"けなす",
"けなみ",
"けぬき",
"けねん",
"けはい",
"けぶかい",
"けまり",
"けみかる",
"けむし",
"けむり",
"けもの",
"けらい",
"けろけろ",
"けわしい",
"けんい",
"けんえつ",
"けんお",
"けんか",
"けんげん",
"けんこう",
"けんさく",
"けんしゅう",
"けんすう",
"けんちく",
"けんてい",
"けんとう",
"けんない",
"けんにん",
"けんま",
"けんみん",
"けんめい",
"けんらん",
"けんり",
"げいじゅつ",
"げいのうじん",
"げきか",
"げきげん",
"げきだん",
"げきちん",
"げきとつ",
"げきは",
"げきやく",
"げこう",
"げこくじょう",
"げざい",
"げざん",
"げすと",
"げつようび",
"げつれい",
"げどく",
"げねつ",
"げひん",
"げぼく",
"げんき",
"げんそう",
"げんぶつ",
"こあくま",
"こいぬ",
"こいびと",
"こうえん",
"こうおん",
"こうかん",
"こうこう",
"こうさい",
"こうじ",
"こうすい",
"こうそく",
"こうたい",
"こうちゃ",
"こうつう",
"こうてい",
"こうどう",
"こうない",
"こうはい",
"こうもく",
"こうりつ",
"こえる",
"こおり",
"こくご",
"こくさい",
"こくとう",
"こくない",
"こくはく",
"こぐま",
"こけい",
"こける",
"ここのか",
"こころ",
"こさめ",
"こしつ",
"こすう",
"こせい",
"こせき",
"こぜん",
"こそだて",
"こたい",
"こたえる",
"こたつ",
"こちょう",
"こっか",
"こつこつ",
"こつばん",
"こつぶ",
"こてい",
"こてん",
"ことがら",
"ことし",
"ことば",
"ことり",
"こなごな",
"こねこね",
"このまま",
"このみ",
"このよ",
"こひつじ",
"こふう",
"こふん",
"こぼれる",
"こまかい",
"こまつな",
"こまる",
"こむぎこ",
"こもじ",
"こもち",
"こもの",
"こもん",
"こやく",
"こやま",
"こゆう",
"こゆび",
"こよい",
"こよう",
"こりる",
"これくしょん",
"ころっけ",
"こわもて",
"こわれる",
"こんいん",
"こんかい",
"こんき",
"こんしゅう",
"こんすい",
"こんだて",
"こんとん",
"こんなん",
"こんびに",
"こんぽん",
"こんまけ",
"こんや",
"こんれい",
"こんわく",
"ごうい",
"ごうきゅう",
"ごうけい",
"ごうせい",
"ごうほう",
"ごうまん",
"ごかい",
"ごかん",
"ごがつ",
"ごはん",
"ごまあぶら",
"ごますり",
"さいかい",
"さいきん",
"さいしょ",
"さいせい",
"さいてき",
"さうな",
"さかいし",
"さかな",
"さかみち",
"さがす",
"さがる",
"さぎょう",
"さくし",
"さくひん",
"さくら",
"さこく",
"さこつ",
"さずかる",
"さたん",
"さっきょく",
"さつえい",
"さつじん",
"さつたば",
"さつまいも",
"さてい",
"さといも",
"さとう",
"さとおや",
"さとし",
"さとる",
"さのう",
"さばく",
"さびしい",
"さべつ",
"さほう",
"さほど",
"さます",
"さみしい",
"さみだれ",
"さむけ",
"さめる",
"さやえんどう",
"さゆう",
"さよう",
"さよく",
"さらだ",
"さわやか",
"さわる",
"さんいん",
"さんか",
"さんきゃく",
"さんこう",
"さんさい",
"さんすう",
"さんせい",
"さんそ",
"さんち",
"さんま",
"さんみ",
"さんらん",
"ざいえき",
"ざいげん",
"ざいこ",
"ざいたく",
"ざいちゅう",
"ざいりょう",
"ざせき",
"ざっか",
"ざっし",
"ざっそう",
"ざつおん",
"ざつがく",
"ざるそば",
"ざんしょ",
"しあい",
"しあげ",
"しあさって",
"しあわせ",
"しいく",
"しいん",
"しうち",
"しえい",
"しおけ",
"しかい",
"しかく",
"しごと",
"しすう",
"したうけ",
"したぎ",
"したて",
"したみ",
"しちょう",
"しちりん",
"しっかり",
"しつじ",
"しつもん",
"してい",
"してき",
"してつ",
"しなぎれ",
"しなもの",
"しなん",
"しねま",
"しねん",
"しのぐ",
"しのぶ",
"しはい",
"しはつ",
"しはらい",
"しはん",
"しばかり",
"しひょう",
"しふく",
"しへい",
"しほう",
"しほん",
"しまう",
"しまる",
"しみん",
"しむける",
"しめい",
"しめる",
"しもん",
"しゃいん",
"しゃうん",
"しゃおん",
"しゃくほう",
"しゃけん",
"しゃこ",
"しゃざい",
"しゃしん",
"しゃせん",
"しゃそう",
"しゃたい",
"しゃちょう",
"しゃっきん",
"しゃりん",
"しゃれい",
"しやくしょ",
"しゅくはく",
"しゅっせき",
"しゅみ",
"しゅらば",
"しょうかい",
"しょくたく",
"しょっけん",
"しょどう",
"しょもつ",
"しらせる",
"しらべる",
"しんか",
"しんこう",
"しんせいじ",
"しんちく",
"しんりん",
"じかん",
"じだい",
"じてん",
"じどう",
"じぶん",
"じむしょ",
"じゃがいも",
"じゃま",
"じゅうしょ",
"じゅしん",
"じゅんばん",
"じゆう",
"じんじゃ",
"すあげ",
"すあし",
"すあな",
"すいえい",
"すいか",
"すいとう",
"すいようび",
"すうがく",
"すうじつ",
"すうせん",
"すおどり",
"すきま",
"すくう",
"すくない",
"すける",
"すこし",
"すごい",
"すすむ",
"すすめる",
"すずしい",
"すっかり",
"すてき",
"すてる",
"すねる",
"すのこ",
"すはだ",
"すばらしい",
"すふれ",
"すぶり",
"すべて",
"すべる",
"すぼん",
"すまい",
"すめし",
"すもう",
"すやき",
"すらすら",
"するめ",
"すれちがう",
"すろっと",
"すわる",
"すんぜん",
"すんぽう",
"ずあん",
"ずいぶん",
"ずさん",
"ずっしり",
"ずっと",
"ずひょう",
"ずぶぬれ",
"ずほう",
"せあぶら",
"せいかつ",
"せいげん",
"せいじ",
"せいよう",
"せおう",
"せかいかん",
"せきにん",
"せきむ",
"せきゆ",
"せきらんうん",
"せけん",
"せこう",
"せすじ",
"せたい",
"せたけ",
"せっかく",
"せっきゃく",
"せっけん",
"せっこつ",
"せっさたくま",
"せっぱん",
"せつぞく",
"せつだん",
"せつでん",
"せつび",
"せつぶん",
"せつめい",
"せつりつ",
"せなか",
"せのび",
"せはば",
"せびろ",
"せぼね",
"せまい",
"せまる",
"せめる",
"せもたれ",
"せりふ",
"せんい",
"せんえい",
"せんか",
"せんきょ",
"せんく",
"せんげん",
"せんさい",
"せんしゅ",
"せんすい",
"せんせい",
"せんぞ",
"せんたく",
"せんちょう",
"せんてい",
"せんとう",
"せんぬき",
"せんねん",
"せんぱい",
"せんむ",
"せんめんじょ",
"せんもん",
"せんやく",
"せんゆう",
"せんよう",
"せんれい",
"せんろ",
"ぜっく",
"ぜんあく",
"ぜんご",
"ぜんぶ",
"ぜんぽう",
"ぜんら",
"ぜんりゃく",
"そあく",
"そいとげる",
"そいね",
"そうがんきょう",
"そうき",
"そうご",
"そうしん",
"そうだん",
"そうなん",
"そうび",
"そうめん",
"そうり",
"そえもの",
"そえん",
"そがい",
"そげき",
"そこう",
"そこそこ",
"そざい",
"そしな",
"そせい",
"そせん",
"そそぐ",
"そだてる",
"そっかん",
"そっけつ",
"そっこう",
"そっせん",
"そっと",
"そつう",
"そつえん",
"そつぎょう",
"そとがわ",
"そとづら",
"そなえる",
"そなた",
"そふぼ",
"そぼく",
"そぼろ",
"そまつ",
"そまる",
"そむく",
"そむりえ",
"そめる",
"そもそも",
"そよかぜ",
"そらまめ",
"そろう",
"そんかい",
"そんけい",
"そんざい",
"そんしつ",
"そんぞく",
"そんちょう",
"そんみん",
"ぞんび",
"ぞんぶん",
"たあい",
"たいいん",
"たいうん",
"たいえき",
"たいおう",
"たいき",
"たいぐう",
"たいけん",
"たいこ",
"たいざい",
"たいせつ",
"たいそう",
"たいちょう",
"たいてい",
"たいない",
"たいねつ",
"たいのう",
"たいはん",
"たいふう",
"たいへん",
"たいほ",
"たいまつばな",
"たいみんぐ",
"たいむ",
"たいめん",
"たいやき",
"たいよう",
"たいら",
"たいりょく",
"たいる",
"たいわん",
"たうえ",
"たえる",
"たおす",
"たおる",
"たおれる",
"たかい",
"たかね",
"たきび",
"たくさん",
"たこく",
"たこやき",
"たさい",
"たしざん",
"たすける",
"たずさわる",
"たそがれ",
"たたかう",
"たたく",
"たたみ",
"ただしい",
"たちばな",
"たてる",
"たとえる",
"たなばた",
"たにん",
"たぬき",
"たのしみ",
"たはつ",
"たぶん",
"たべる",
"たぼう",
"たまご",
"たまる",
"ためいき",
"ためす",
"ためる",
"たもつ",
"たやすい",
"たよる",
"たらす",
"たりきほんがん",
"たりょう",
"たりる",
"たると",
"たれる",
"たれんと",
"たろっと",
"たわむれる",
"たんい",
"たんおん",
"たんか",
"たんき",
"たんけん",
"たんご",
"たんさん",
"たんじょうび",
"たんそく",
"たんたい",
"たんてい",
"たんとう",
"たんにん",
"たんのう",
"たんぴん",
"たんまつ",
"たんめい",
"だいがく",
"だいじょうぶ",
"だいすき",
"だいたい",
"だいどころ",
"だいひょう",
"だじゃれ",
"だっかい",
"だっきゃく",
"だっこ",
"だっしゅつ",
"だったい",
"だむる",
"だんあつ",
"だんせい",
"だんち",
"だんな",
"だんねつ",
"だんぼう",
"だんれつ",
"だんろ",
"だんわ",
"ちあい",
"ちあん",
"ちいき",
"ちいさい",
"ちえん",
"ちかい",
"ちから",
"ちきゅう",
"ちきん",
"ちけいず",
"ちけん",
"ちこく",
"ちさい",
"ちしき",
"ちしりょう",
"ちせい",
"ちそう",
"ちたい",
"ちたん",
"ちちおや",
"ちつじょ",
"ちてき",
"ちてん",
"ちぬき",
"ちぬり",
"ちのう",
"ちひょう",
"ちへいせん",
"ちほう",
"ちまた",
"ちみつ",
"ちみどろ",
"ちめいど",
"ちゃんこなべ",
"ちゅうい",
"ちゆりょく",
"ちょうし",
"ちょさくけん",
"ちらし",
"ちらみ",
"ちりがみ",
"ちりょう",
"ちるど",
"ちわわ",
"ちんたい",
"ちんもく",
"ついか",
"ついたち",
"つうか",
"つうじょう",
"つうはん",
"つうわ",
"つかう",
"つかれる",
"つくね",
"つくる",
"つけね",
"つける",
"つごう",
"つたえる",
"つつじ",
"つつむ",
"つづく",
"つとめる",
"つながる",
"つなみ",
"つねづね",
"つのる",
"つぶす",
"つまらない",
"つまる",
"つみき",
"つめたい",
"つもり",
"つもる",
"つよい",
"つるぼ",
"つるみく",
"つわもの",
"つわり",
"てあし",
"てあて",
"てあみ",
"ていおん",
"ていか",
"ていき",
"ていけい",
"ていこく",
"ていさつ",
"ていし",
"ていせい",
"ていたい",
"ていど",
"ていねい",
"ていひょう",
"ていへん",
"ていぼう",
"てうち",
"ておくれ",
"てきとう",
"てくび",
"てさぎょう",
"てさげ",
"てすり",
"てそう",
"てちがい",
"てちょう",
"てつがく",
"てつづき",
"てつぼう",
"てつや",
"てぬき",
"てぬぐい",
"てのひら",
"てはい",
"てふだ",
"てぶくろ",
"てほどき",
"てほん",
"てまえ",
"てまきずし",
"てみじか",
"てみやげ",
"てらす",
"てれび",
"てわけ",
"てわたし",
"てんいん",
"てんかい",
"てんき",
"てんぐ",
"てんけん",
"てんごく",
"てんさい",
"てんし",
"てんすう",
"てんてき",
"てんとう",
"てんない",
"てんぷら",
"てんぼうだい",
"てんめつ",
"てんらんかい",
"でこぼこ",
"でっぱ",
"でぬかえ",
"でんあつ",
"でんち",
"でんりょく",
"でんわ",
"といれ",
"とうきゅう",
"とうし",
"とうむぎ",
"とおい",
"とおか",
"とおく",
"とおす",
"とおる",
"とかい",
"とかす",
"ときおり",
"ときどき",
"とくい",
"とくしゅう",
"とくてん",
"とくに",
"とくべつ",
"とけい",
"とける",
"とこや",
"とさか",
"としょかん",
"とそう",
"とたん",
"とちゅう",
"とっきゅう",
"とっくん",
"とつぜん",
"とつにゅう",
"ととのえる",
"とどける",
"とない",
"となえる",
"となり",
"とのさま",
"とばす",
"とほう",
"とまる",
"とめる",
"ともだち",
"ともる",
"とらえる",
"とんかつ",
"どあい",
"どうかん",
"どうぐ",
"どぶがわ",
"どようび",
"どんぶり",
"ないかく",
"ないこう",
"ないしょ",
"ないす",
"ないせん",
"ないそう",
"なおす",
"ながい",
"なくす",
"なげる",
"なこうど",
"なさけ",
"なたでここ",
"なっとう",
"なつやすみ",
"ななおし",
"なにごと",
"なにもの",
"なにわ",
"なのか",
"なふだ",
"なまいき",
"なまえ",
"なまみ",
"なみだ",
"なめらか",
"なめる",
"なやむ",
"ならう",
"ならび",
"ならぶ",
"なれる",
"なわとび",
"なわばり",
"にあう",
"にいがた",
"にうけ",
"におい",
"にかい",
"にがて",
"にきび",
"にくしみ",
"にくまん",
"にげる",
"にさんかたんそ",
"にしき",
"にせもの",
"にちじょう",
"にちようび",
"にっか",
"にっき",
"にっけい",
"にっこう",
"にっさん",
"にっしょく",
"にっすう",
"にっせき",
"にってい",
"になう",
"にほん",
"にまめ",
"にもつ",
"にやり",
"にゅういん",
"にりんしゃ",
"にわとり",
"にんい",
"にんか",
"にんき",
"にんげん",
"にんしき",
"にんずう",
"にんそう",
"にんたい",
"にんち",
"にんてい",
"にんにく",
"にんぷ",
"にんまり",
"にんむ",
"にんめい",
"にんよう",
"ぬいくぎ",
"ぬかす",
"ぬくもり",
"ぬぐいとる",
"ぬぐう",
"ぬすむ",
"ぬまえび",
"ぬめり",
"ぬらす",
"ぬんちゃく",
"ねあげ",
"ねいき",
"ねいる",
"ねいろ",
"ねくたい",
"ねくら",
"ねぐせ",
"ねこぜ",
"ねこむ",
"ねさげ",
"ねすごす",
"ねそべる",
"ねだん",
"ねっしん",
"ねったいぎょ",
"ねつい",
"ねつぞう",
"ねふだ",
"ねぶそく",
"ねほりはほり",
"ねぼう",
"ねまき",
"ねまわし",
"ねみみ",
"ねむい",
"ねむたい",
"ねもと",
"ねらう",
"ねわざ",
"ねんいり",
"ねんおし",
"ねんかん",
"ねんきん",
"ねんぐ",
"ねんざ",
"ねんし",
"ねんちゃく",
"ねんど",
"ねんぴ",
"ねんぶつ",
"ねんまつ",
"ねんりょう",
"ねんれい",
"のいず",
"のおづま",
"のがす",
"のきなみ",
"のこぎり",
"のこす",
"のこる",
"のせる",
"のぞく",
"のぞむ",
"のたまう",
"のちほど",
"のっく",
"のはら",
"のばす",
"のべる",
"のぼる",
"のみもの",
"のやま",
"のらいぬ",
"のらねこ",
"のりもの",
"のりゆき",
"のれん",
"のんき",
"はあく",
"はいけん",
"はいご",
"はいしん",
"はいすい",
"はいせん",
"はいそう",
"はいち",
"はいれつ",
"はえる",
"はおる",
"はかい",
"はかる",
"はくしゅ",
"はけん",
"はこぶ",
"はさみ",
"はさん",
"はしご",
"はしる",
"はせる",
"はそん",
"はたん",
"はちみつ",
"はっかく",
"はっきり",
"はっくつ",
"はっけん",
"はっこう",
"はっさん",
"はっしん",
"はったつ",
"はっちゅう",
"はってん",
"はっぴょう",
"はっぽう",
"はつおん",
"はづき",
"はなす",
"はなび",
"はにかむ",
"はぶらし",
"はみがき",
"はむかう",
"はめつ",
"はやい",
"はやし",
"はらう",
"はろうぃん",
"はわい",
"はんい",
"はんえい",
"はんおん",
"はんかく",
"はんきょう",
"はんこ",
"はんしゃ",
"はんすう",
"はんだん",
"はんてい",
"はんとし",
"はんのう",
"はんぱ",
"はんぶん",
"はんぺん",
"はんぼうき",
"はんめい",
"はんらん",
"はんろん",
"ばあい",
"ばあさん",
"ばいか",
"ばいく",
"ばいばい",
"ばかり",
"ばしょ",
"ばんぐみ",
"ぱそこん",
"ぱんち",
"ぱんつ",
"ひいき",
"ひうん",
"ひえる",
"ひかく",
"ひかり",
"ひかる",
"ひかん",
"ひくい",
"ひけつ",
"ひこうき",
"ひこく",
"ひさい",
"ひさしぶり",
"ひさん",
"ひしょ",
"ひそか",
"ひそむ",
"ひたむき",
"ひたる",
"ひだり",
"ひっこし",
"ひっし",
"ひっす",
"ひつぎ",
"ひつじゅひん",
"ひつぜん",
"ひつよう",
"ひてい",
"ひとごみ",
"ひなまつり",
"ひなん",
"ひねる",
"ひはん",
"ひひょう",
"ひびく",
"ひほう",
"ひまわり",
"ひまん",
"ひみつ",
"ひめい",
"ひめじし",
"ひやけ",
"ひやす",
"ひよう",
"ひらがな",
"ひらく",
"ひりつ",
"ひりょう",
"ひるま",
"ひるやすみ",
"ひれい",
"ひろい",
"ひろう",
"ひろき",
"ひろゆき",
"ひんかく",
"ひんけつ",
"ひんこん",
"ひんしゅ",
"ひんそう",
"ひんぱん",
"びじゅつかん",
"びょうき",
"びんぼう",
"ぴったり",
"ぴっちり",
"ぴんち",
"ふあん",
"ふいうち",
"ふうけい",
"ふうせん",
"ふうとう",
"ふうふ",
"ふえる",
"ふおん",
"ふかい",
"ふきん",
"ふくざつ",
"ふくぶくろ",
"ふこう",
"ふさい",
"ふしぎ",
"ふじみ",
"ふすま",
"ふせい",
"ふせぐ",
"ふそく",
"ふたん",
"ふちょう",
"ふっかつ",
"ふっき",
"ふっこく",
"ふつう",
"ふつか",
"ふとる",
"ふとん",
"ふのう",
"ふはい",
"ふひょう",
"ふへん",
"ふまん",
"ふみん",
"ふめつ",
"ふめん",
"ふよう",
"ふりこ",
"ふりる",
"ふるい",
"ふんいき",
"ふんしつ",
"ふんそう",
"ぶたにく",
"ぶどう",
"ぶんがく",
"ぶんぐ",
"ぶんせき",
"ぶんぽう",
"ぷうたろう",
"へいあん",
"へいおん",
"へいがい",
"へいき",
"へいげん",
"へいこう",
"へいさ",
"へいしゃ",
"へいせつ",
"へいそ",
"へいたく",
"へいてん",
"へいねつ",
"へいわ",
"へきが",
"へこむ",
"へらす",
"へんかん",
"へんさい",
"へんたい",
"べにいろ",
"べにしょうが",
"べんきょう",
"べんごし",
"べんり",
"ほあん",
"ほいく",
"ほうこく",
"ほうそう",
"ほうほう",
"ほうもん",
"ほうりつ",
"ほえる",
"ほおん",
"ほかん",
"ほきょう",
"ほくろ",
"ほけつ",
"ほけん",
"ほこう",
"ほこる",
"ほしい",
"ほしつ",
"ほしゅ",
"ほしょう",
"ほせい",
"ほそい",
"ほそく",
"ほたて",
"ほたる",
"ほっきょく",
"ほっさ",
"ほったん",
"ほとんど",
"ほめる",
"ほんい",
"ほんき",
"ほんけ",
"ほんしつ",
"ほんやく",
"ぼうぎょ",
"ぼきん",
"ぽちぶくろ",
"まいにち",
"まかい",
"まかせる",
"まがる",
"まける",
"まこと",
"まさつ",
"まじめ",
"ますく",
"まぜる",
"まつり",
"まとめ",
"まなぶ",
"まぬけ",
"まねく",
"まほう",
"まもる",
"まゆげ",
"まよう",
"まろやか",
"まわす",
"まわり",
"まわる",
"まんが",
"まんきつ",
"まんぞく",
"まんなか",
"みいら",
"みうち",
"みえる",
"みかた",
"みかん",
"みがく",
"みけん",
"みこん",
"みじかい",
"みすい",
"みすえる",
"みせる",
"みっか",
"みつかる",
"みつける",
"みてい",
"みとめる",
"みなと",
"みなみかさい",
"みねらる",
"みのう",
"みのがす",
"みほん",
"みもと",
"みやげ",
"みらい",
"みりょく",
"みわく",
"みんか",
"みんぞく",
"むいか",
"むえき",
"むえん",
"むかい",
"むかう",
"むかえ",
"むかし",
"むぎちゃ",
"むける",
"むげん",
"むさぼる",
"むしあつい",
"むしば",
"むしろ",
"むじゅん",
"むすう",
"むすこ",
"むすぶ",
"むすめ",
"むせる",
"むせん",
"むちゅう",
"むなしい",
"むのう",
"むやみ",
"むよう",
"むらさき",
"むりょう",
"むろん",
"めいあん",
"めいうん",
"めいえん",
"めいかく",
"めいきょく",
"めいさい",
"めいし",
"めいそう",
"めいぶつ",
"めいれい",
"めいわく",
"めぐまれる",
"めざす",
"めした",
"めずらしい",
"めだつ",
"めまい",
"めやす",
"めんきょ",
"めんせき",
"めんどう",
"もうしあげる",
"もうどうけん",
"もえる",
"もくし",
"もくてき",
"もくようび",
"もちろん",
"もどる",
"もらう",
"もんく",
"もんだい",
"やおや",
"やける",
"やさい",
"やさしい",
"やすい",
"やすたろう",
"やすみ",
"やせる",
"やそう",
"やたい",
"やちん",
"やっと",
"やっぱり",
"やぶる",
"やめる",
"ややこしい",
"やよい",
"やわらかい",
"ゆうき",
"ゆうびんきょく",
"ゆうべ",
"ゆうめい",
"ゆけつ",
"ゆしゅつ",
"ゆせん",
"ゆそう",
"ゆたか",
"ゆちゃく",
"ゆでる",
"ゆにゅう",
"ゆびわ",
"ゆらい",
"ゆれる",
"ようい",
"ようか",
"ようきゅう",
"ようじ",
"ようす",
"ようちえん",
"よかぜ",
"よかん",
"よきん",
"よくせい",
"よくぼう",
"よけい",
"よごれる",
"よさん",
"よしゅう",
"よそう",
"よそく",
"よっか",
"よてい",
"よどがわく",
"よねつ",
"よやく",
"よゆう",
"よろこぶ",
"よろしい",
"らいう",
"らくがき",
"らくご",
"らくさつ",
"らくだ",
"らしんばん",
"らせん",
"らぞく",
"らたい",
"らっか",
"られつ",
"りえき",
"りかい",
"りきさく",
"りきせつ",
"りくぐん",
"りくつ",
"りけん",
"りこう",
"りせい",
"りそう",
"りそく",
"りてん",
"りねん",
"りゅうがく",
"りゆう",
"りょうり",
"りょかん",
"りょくちゃ",
"りょこう",
"りよう",
"りりく",
"りれき",
"りろん",
"りんご",
"るいけい",
"るいさい",
"るいじ",
"るいせき",
"るすばん",
"るりがわら",
"れいかん",
"れいぎ",
"れいせい",
"れいぞうこ",
"れいとう",
"れいぼう",
"れきし",
"れきだい",
"れんあい",
"れんけい",
"れんこん",
"れんさい",
"れんしゅう",
"れんぞく",
"れんらく",
"ろうか",
"ろうご",
"ろうじん",
"ろうそく",
"ろくが",
"ろこつ",
"ろしゅつ",
"ろじうら",
"ろせん",
"ろてん",
"ろめん",
"ろれつ",
"ろんぎ",
"ろんぱ",
"ろんぶん",
"ろんり",
"わかす",
"わかめ",
"わかやま",
"わかれる",
"わしつ",
"わじまし",
"わすれもの",
"わらう",
"われる"
]