-- | RFC-1751 human-readable 128-bit keys
module Crypto.RFC1751
    ( keyToMnemonic
    , mnemonicToKey
    ) where

import           Control.Monad
import           Data.Bits
import           Data.ByteString     (ByteString)
import qualified Data.ByteString     as BS
import           Data.Char
import           Data.Either
import           Data.Serialize
import           Data.Vector         (Vector, fromList, (!))
import qualified Data.Vector         as V
import           Data.Word

unsafeDecode :: ByteString -> Word64
unsafeDecode :: ByteString -> Word64
unsafeDecode = Word64 -> Either String Word64 -> Word64
forall b a. b -> Either a b -> b
fromRight (String -> Word64
forall a. HasCallStack => String -> a
error String
"Could not decode") (Either String Word64 -> Word64)
-> (ByteString -> Either String Word64) -> ByteString -> Word64
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Either String Word64
forall a. Serialize a => ByteString -> Either String a
decode

-- | Decode a mnemonic sentence to a 128-bit key.
mnemonicToKey :: String -> Maybe ByteString
mnemonicToKey :: String -> Maybe ByteString
mnemonicToKey String
s = do
    Bool -> Maybe ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> Maybe ()) -> Bool -> Maybe ()
forall a b. (a -> b) -> a -> b
$ [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
ws Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
12
    [ByteString] -> ByteString
BS.concat ([ByteString] -> ByteString)
-> Maybe [ByteString] -> Maybe ByteString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Vector String -> Maybe ByteString)
-> [Vector String] -> Maybe [ByteString]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM ((Word64 -> ByteString
forall a. Serialize a => a -> ByteString
encode (Word64 -> ByteString) -> Maybe Word64 -> Maybe ByteString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (Maybe Word64 -> Maybe ByteString)
-> (Vector String -> Maybe Word64)
-> Vector String
-> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector String -> Maybe Word64
wordsToKey) [[String] -> Vector String
forall a. [a] -> Vector a
fromList [String]
ws1, [String] -> Vector String
forall a. [a] -> Vector a
fromList [String]
ws2]
  where
    ws :: [String]
ws = String -> [String]
words (String -> [String]) -> String -> [String]
forall a b. (a -> b) -> a -> b
$ (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toUpper String
s
    ([String]
ws1, [String]
ws2) = Int -> [String] -> ([String], [String])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
6 [String]
ws

-- | Encode a 128-bit key to a mnemonic sentence.
keyToMnemonic :: ByteString -> Maybe String
keyToMnemonic :: ByteString -> Maybe String
keyToMnemonic ByteString
k = do
    Bool -> Maybe ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> Maybe ()) -> Bool -> Maybe ()
forall a b. (a -> b) -> a -> b
$ ByteString -> Int
BS.length ByteString
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
16
    String -> Maybe String
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe String)
-> ([[String]] -> String) -> [[String]] -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [String] -> String
unwords ([String] -> String)
-> ([[String]] -> [String]) -> [[String]] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [[String]] -> [String]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[String]] -> Maybe String) -> [[String]] -> Maybe String
forall a b. (a -> b) -> a -> b
$ (ByteString -> [String]) -> [ByteString] -> [[String]]
forall a b. (a -> b) -> [a] -> [b]
map (Word64 -> [String]
keyToWords (Word64 -> [String])
-> (ByteString -> Word64) -> ByteString -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Word64
unsafeDecode) [ByteString
k1, ByteString
k2]
  where
    (ByteString
k1, ByteString
k2) = Int -> ByteString -> (ByteString, ByteString)
BS.splitAt Int
8 ByteString
k

keyToWords :: Word64 -> [String]
keyToWords :: Word64 -> [String]
keyToWords Word64
key =
    (Word64 -> String) -> [Word64] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map ((Vector String
dict Vector String -> Int -> String
forall a. Vector a -> Int -> a
!) (Int -> String) -> (Word64 -> Int) -> Word64 -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word64 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) [Word64]
indices
  where
    keyCheckSum :: Word64
keyCheckSum = Word64 -> Word64
checkSum Word64
key
    tempIndices :: [Word64]
tempIndices = (Int -> Word64) -> [Int] -> [Word64]
forall a b. (a -> b) -> [a] -> [b]
map (\Int
start -> Word64 -> Int -> Int -> Word64
extract Word64
key Int
start Int
11) [Int
0,Int
11..Int
55]
    indices :: [Word64]
indices = [Word64] -> [Word64]
forall a. [a] -> [a]
init [Word64]
tempIndices [Word64] -> [Word64] -> [Word64]
forall a. [a] -> [a] -> [a]
++ [[Word64] -> Word64
forall a. [a] -> a
last [Word64]
tempIndices Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.|. Word64
keyCheckSum]

wordsToKey :: Vector String -> Maybe Word64
wordsToKey :: Vector String -> Maybe Word64
wordsToKey Vector String
ws = do
    let findWord :: String -> Maybe b
findWord String
w   = Int -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> b) -> Maybe Int -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Vector String -> Maybe Int
forall a. Eq a => a -> Vector a -> Maybe Int
V.elemIndex String
w Vector String
dict
        maybeIndices :: Maybe (Vector Word64)
maybeIndices = Vector (Maybe Word64) -> Maybe (Vector Word64)
forall (m :: * -> *) a. Monad m => Vector (m a) -> m (Vector a)
V.sequence (Vector (Maybe Word64) -> Maybe (Vector Word64))
-> Vector (Maybe Word64) -> Maybe (Vector Word64)
forall a b. (a -> b) -> a -> b
$ (String -> Maybe Word64) -> Vector String -> Vector (Maybe Word64)
forall a b. (a -> b) -> Vector a -> Vector b
V.map String -> Maybe Word64
forall b. Num b => String -> Maybe b
findWord Vector String
ws
    Vector Word64
indices <- Maybe (Vector Word64)
maybeIndices
    let buildKey :: a -> (Int, a) -> a
buildKey a
acc (Int
bits, a
index) = (a
index a -> Int -> a
forall a. Bits a => a -> Int -> a
`shift` Int
bits) a -> a -> a
forall a. Bits a => a -> a -> a
.|. a
acc
        key :: Word64
key = (Word64 -> (Int, Word64) -> Word64)
-> Word64 -> Vector (Int, Word64) -> Word64
forall a b. (a -> b -> a) -> a -> Vector b -> a
V.foldl Word64 -> (Int, Word64) -> Word64
forall a. Bits a => a -> (Int, a) -> a
buildKey Word64
0 (Vector (Int, Word64) -> Word64) -> Vector (Int, Word64) -> Word64
forall a b. (a -> b) -> a -> b
$ Vector Int -> Vector Word64 -> Vector (Int, Word64)
forall a b. Vector a -> Vector b -> Vector (a, b)
V.zip ([Int] -> Vector Int
forall a. [a] -> Vector a
fromList [Int
53,Int
42..(-Int
2)]) Vector Word64
indices
        computedSum :: Word64
computedSum = Word64 -> Word64
checkSum Word64
key
        providedSum :: Word64
providedSum = Vector Word64 -> Word64
forall a. Vector a -> a
V.last Vector Word64
indices Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.&. Word64
0x03
    Bool -> Maybe ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> Maybe ()) -> Bool -> Maybe ()
forall a b. (a -> b) -> a -> b
$ Word64
providedSum Word64 -> Word64 -> Bool
forall a. Eq a => a -> a -> Bool
== Word64
computedSum
    Word64 -> Maybe Word64
forall (m :: * -> *) a. Monad m => a -> m a
return Word64
key

checkSum :: Word64 -> Word64
checkSum :: Word64 -> Word64
checkSum Word64
key =
    Word64
pairSum Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.&. Word64
0x03
  where
    pairSum :: Word64
pairSum = [Word64] -> Word64
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Word64] -> Word64) -> [Word64] -> Word64
forall a b. (a -> b) -> a -> b
$ (Int -> Word64) -> [Int] -> [Word64]
forall a b. (a -> b) -> [a] -> [b]
map ((Int -> Int -> Word64) -> Int -> Int -> Word64
forall a b c. (a -> b -> c) -> b -> a -> c
flip (Word64 -> Int -> Int -> Word64
extract Word64
key) Int
2) [Int
0,Int
2..Int
62]

extract :: Word64 -> Int -> Int -> Word64
extract :: Word64 -> Int -> Int -> Word64
extract Word64
key Int
start Int
len =
    Word64
temp Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shiftL` (Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
count)
  where
    count :: Int
count = if Int
start Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
len Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
64 then Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
start else Int
len
    mask :: Word64
mask = Word64 -> Word64
forall a. Bits a => a -> a
complement (Word64 -> Word64) -> Word64 -> Word64
forall a b. (a -> b) -> a -> b
$ Word64
0xffffffffffffffff Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shiftL` Int
count
    temp :: Word64
temp = Word64
key Word64 -> Int -> Word64
forall a. Bits a => a -> Int -> a
`shiftR` (Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
start Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
count) Word64 -> Word64 -> Word64
forall a. Bits a => a -> a -> a
.&. Word64
mask

dict :: Vector String
dict :: Vector String
dict = [String] -> Vector String
forall a. [a] -> Vector a
fromList
  [ String
"A", String
"ABE", String
"ACE", String
"ACT", String
"AD", String
"ADA", String
"ADD", String
"AGO", String
"AID"
  , String
"AIM", String
"AIR", String
"ALL", String
"ALP", String
"AM", String
"AMY", String
"AN", String
"ANA", String
"AND"
  , String
"ANN", String
"ANT", String
"ANY", String
"APE", String
"APS", String
"APT", String
"ARC", String
"ARE", String
"ARK"
  , String
"ARM", String
"ART", String
"AS", String
"ASH", String
"ASK", String
"AT", String
"ATE", String
"AUG", String
"AUK"
  , String
"AVE", String
"AWE", String
"AWK", String
"AWL", String
"AWN", String
"AX", String
"AYE", String
"BAD", String
"BAG"
  , String
"BAH", String
"BAM", String
"BAN", String
"BAR", String
"BAT", String
"BAY", String
"BE", String
"BED", String
"BEE"
  , String
"BEG", String
"BEN", String
"BET", String
"BEY", String
"BIB", String
"BID", String
"BIG", String
"BIN", String
"BIT"
  , String
"BOB", String
"BOG", String
"BON", String
"BOO", String
"BOP", String
"BOW", String
"BOY", String
"BUB", String
"BUD"
  , String
"BUG", String
"BUM", String
"BUN", String
"BUS", String
"BUT", String
"BUY", String
"BY", String
"BYE", String
"CAB"
  , String
"CAL", String
"CAM", String
"CAN", String
"CAP", String
"CAR", String
"CAT", String
"CAW", String
"COD", String
"COG"
  , String
"COL", String
"CON", String
"COO", String
"COP", String
"COT", String
"COW", String
"COY", String
"CRY", String
"CUB"
  , String
"CUE", String
"CUP", String
"CUR", String
"CUT", String
"DAB", String
"DAD", String
"DAM", String
"DAN", String
"DAR"
  , String
"DAY", String
"DEE", String
"DEL", String
"DEN", String
"DES", String
"DEW", String
"DID", String
"DIE", String
"DIG"
  , String
"DIN", String
"DIP", String
"DO", String
"DOE", String
"DOG", String
"DON", String
"DOT", String
"DOW", String
"DRY"
  , String
"DUB", String
"DUD", String
"DUE", String
"DUG", String
"DUN", String
"EAR", String
"EAT", String
"ED", String
"EEL"
  , String
"EGG", String
"EGO", String
"ELI", String
"ELK", String
"ELM", String
"ELY", String
"EM", String
"END", String
"EST"
  , String
"ETC", String
"EVA", String
"EVE", String
"EWE", String
"EYE", String
"FAD", String
"FAN", String
"FAR", String
"FAT"
  , String
"FAY", String
"FED", String
"FEE", String
"FEW", String
"FIB", String
"FIG", String
"FIN", String
"FIR", String
"FIT"
  , String
"FLO", String
"FLY", String
"FOE", String
"FOG", String
"FOR", String
"FRY", String
"FUM", String
"FUN", String
"FUR"
  , String
"GAB", String
"GAD", String
"GAG", String
"GAL", String
"GAM", String
"GAP", String
"GAS", String
"GAY", String
"GEE"
  , String
"GEL", String
"GEM", String
"GET", String
"GIG", String
"GIL", String
"GIN", String
"GO", String
"GOT", String
"GUM"
  , String
"GUN", String
"GUS", String
"GUT", String
"GUY", String
"GYM", String
"GYP", String
"HA", String
"HAD", String
"HAL"
  , String
"HAM", String
"HAN", String
"HAP", String
"HAS", String
"HAT", String
"HAW", String
"HAY", String
"HE", String
"HEM"
  , String
"HEN", String
"HER", String
"HEW", String
"HEY", String
"HI", String
"HID", String
"HIM", String
"HIP", String
"HIS"
  , String
"HIT", String
"HO", String
"HOB", String
"HOC", String
"HOE", String
"HOG", String
"HOP", String
"HOT", String
"HOW"
  , String
"HUB", String
"HUE", String
"HUG", String
"HUH", String
"HUM", String
"HUT", String
"I", String
"ICY", String
"IDA"
  , String
"IF", String
"IKE", String
"ILL", String
"INK", String
"INN", String
"IO", String
"ION", String
"IQ", String
"IRA"
  , String
"IRE", String
"IRK", String
"IS", String
"IT", String
"ITS", String
"IVY", String
"JAB", String
"JAG", String
"JAM"
  , String
"JAN", String
"JAR", String
"JAW", String
"JAY", String
"JET", String
"JIG", String
"JIM", String
"JO", String
"JOB"
  , String
"JOE", String
"JOG", String
"JOT", String
"JOY", String
"JUG", String
"JUT", String
"KAY", String
"KEG", String
"KEN"
  , String
"KEY", String
"KID", String
"KIM", String
"KIN", String
"KIT", String
"LA", String
"LAB", String
"LAC", String
"LAD"
  , String
"LAG", String
"LAM", String
"LAP", String
"LAW", String
"LAY", String
"LEA", String
"LED", String
"LEE", String
"LEG"
  , String
"LEN", String
"LEO", String
"LET", String
"LEW", String
"LID", String
"LIE", String
"LIN", String
"LIP", String
"LIT"
  , String
"LO", String
"LOB", String
"LOG", String
"LOP", String
"LOS", String
"LOT", String
"LOU", String
"LOW", String
"LOY"
  , String
"LUG", String
"LYE", String
"MA", String
"MAC", String
"MAD", String
"MAE", String
"MAN", String
"MAO", String
"MAP"
  , String
"MAT", String
"MAW", String
"MAY", String
"ME", String
"MEG", String
"MEL", String
"MEN", String
"MET", String
"MEW"
  , String
"MID", String
"MIN", String
"MIT", String
"MOB", String
"MOD", String
"MOE", String
"MOO", String
"MOP", String
"MOS"
  , String
"MOT", String
"MOW", String
"MUD", String
"MUG", String
"MUM", String
"MY", String
"NAB", String
"NAG", String
"NAN"
  , String
"NAP", String
"NAT", String
"NAY", String
"NE", String
"NED", String
"NEE", String
"NET", String
"NEW", String
"NIB"
  , String
"NIL", String
"NIP", String
"NIT", String
"NO", String
"NOB", String
"NOD", String
"NON", String
"NOR", String
"NOT"
  , String
"NOV", String
"NOW", String
"NU", String
"NUN", String
"NUT", String
"O", String
"OAF", String
"OAK", String
"OAR"
  , String
"OAT", String
"ODD", String
"ODE", String
"OF", String
"OFF", String
"OFT", String
"OH", String
"OIL", String
"OK"
  , String
"OLD", String
"ON", String
"ONE", String
"OR", String
"ORB", String
"ORE", String
"ORR", String
"OS", String
"OTT"
  , String
"OUR", String
"OUT", String
"OVA", String
"OW", String
"OWE", String
"OWL", String
"OWN", String
"OX", String
"PA"
  , String
"PAD", String
"PAL", String
"PAM", String
"PAN", String
"PAP", String
"PAR", String
"PAT", String
"PAW", String
"PAY"
  , String
"PEA", String
"PEG", String
"PEN", String
"PEP", String
"PER", String
"PET", String
"PEW", String
"PHI", String
"PI"
  , String
"PIE", String
"PIN", String
"PIT", String
"PLY", String
"PO", String
"POD", String
"POE", String
"POP", String
"POT"
  , String
"POW", String
"PRO", String
"PRY", String
"PUB", String
"PUG", String
"PUN", String
"PUP", String
"PUT", String
"QUO"
  , String
"RAG", String
"RAM", String
"RAN", String
"RAP", String
"RAT", String
"RAW", String
"RAY", String
"REB", String
"RED"
  , String
"REP", String
"RET", String
"RIB", String
"RID", String
"RIG", String
"RIM", String
"RIO", String
"RIP", String
"ROB"
  , String
"ROD", String
"ROE", String
"RON", String
"ROT", String
"ROW", String
"ROY", String
"RUB", String
"RUE", String
"RUG"
  , String
"RUM", String
"RUN", String
"RYE", String
"SAC", String
"SAD", String
"SAG", String
"SAL", String
"SAM", String
"SAN"
  , String
"SAP", String
"SAT", String
"SAW", String
"SAY", String
"SEA", String
"SEC", String
"SEE", String
"SEN", String
"SET"
  , String
"SEW", String
"SHE", String
"SHY", String
"SIN", String
"SIP", String
"SIR", String
"SIS", String
"SIT", String
"SKI"
  , String
"SKY", String
"SLY", String
"SO", String
"SOB", String
"SOD", String
"SON", String
"SOP", String
"SOW", String
"SOY"
  , String
"SPA", String
"SPY", String
"SUB", String
"SUD", String
"SUE", String
"SUM", String
"SUN", String
"SUP", String
"TAB"
  , String
"TAD", String
"TAG", String
"TAN", String
"TAP", String
"TAR", String
"TEA", String
"TED", String
"TEE", String
"TEN"
  , String
"THE", String
"THY", String
"TIC", String
"TIE", String
"TIM", String
"TIN", String
"TIP", String
"TO", String
"TOE"
  , String
"TOG", String
"TOM", String
"TON", String
"TOO", String
"TOP", String
"TOW", String
"TOY", String
"TRY", String
"TUB"
  , String
"TUG", String
"TUM", String
"TUN", String
"TWO", String
"UN", String
"UP", String
"US", String
"USE", String
"VAN"
  , String
"VAT", String
"VET", String
"VIE", String
"WAD", String
"WAG", String
"WAR", String
"WAS", String
"WAY", String
"WE"
  , String
"WEB", String
"WED", String
"WEE", String
"WET", String
"WHO", String
"WHY", String
"WIN", String
"WIT", String
"WOK"
  , String
"WON", String
"WOO", String
"WOW", String
"WRY", String
"WU", String
"YAM", String
"YAP", String
"YAW", String
"YE"
  , String
"YEA", String
"YES", String
"YET", String
"YOU", String
"ABED", String
"ABEL", String
"ABET", String
"ABLE", String
"ABUT"
  , String
"ACHE", String
"ACID", String
"ACME", String
"ACRE", String
"ACTA", String
"ACTS", String
"ADAM", String
"ADDS", String
"ADEN"
  , String
"AFAR", String
"AFRO", String
"AGEE", String
"AHEM", String
"AHOY", String
"AIDA", String
"AIDE", String
"AIDS", String
"AIRY"
  , String
"AJAR", String
"AKIN", String
"ALAN", String
"ALEC", String
"ALGA", String
"ALIA", String
"ALLY", String
"ALMA", String
"ALOE"
  , String
"ALSO", String
"ALTO", String
"ALUM", String
"ALVA", String
"AMEN", String
"AMES", String
"AMID", String
"AMMO", String
"AMOK"
  , String
"AMOS", String
"AMRA", String
"ANDY", String
"ANEW", String
"ANNA", String
"ANNE", String
"ANTE", String
"ANTI", String
"AQUA"
  , String
"ARAB", String
"ARCH", String
"AREA", String
"ARGO", String
"ARID", String
"ARMY", String
"ARTS", String
"ARTY", String
"ASIA"
  , String
"ASKS", String
"ATOM", String
"AUNT", String
"AURA", String
"AUTO", String
"AVER", String
"AVID", String
"AVIS", String
"AVON"
  , String
"AVOW", String
"AWAY", String
"AWRY", String
"BABE", String
"BABY", String
"BACH", String
"BACK", String
"BADE", String
"BAIL"
  , String
"BAIT", String
"BAKE", String
"BALD", String
"BALE", String
"BALI", String
"BALK", String
"BALL", String
"BALM", String
"BAND"
  , String
"BANE", String
"BANG", String
"BANK", String
"BARB", String
"BARD", String
"BARE", String
"BARK", String
"BARN", String
"BARR"
  , String
"BASE", String
"BASH", String
"BASK", String
"BASS", String
"BATE", String
"BATH", String
"BAWD", String
"BAWL", String
"BEAD"
  , String
"BEAK", String
"BEAM", String
"BEAN", String
"BEAR", String
"BEAT", String
"BEAU", String
"BECK", String
"BEEF", String
"BEEN"
  , String
"BEER", String
"BEET", String
"BELA", String
"BELL", String
"BELT", String
"BEND", String
"BENT", String
"BERG", String
"BERN"
  , String
"BERT", String
"BESS", String
"BEST", String
"BETA", String
"BETH", String
"BHOY", String
"BIAS", String
"BIDE", String
"BIEN"
  , String
"BILE", String
"BILK", String
"BILL", String
"BIND", String
"BING", String
"BIRD", String
"BITE", String
"BITS", String
"BLAB"
  , String
"BLAT", String
"BLED", String
"BLEW", String
"BLOB", String
"BLOC", String
"BLOT", String
"BLOW", String
"BLUE", String
"BLUM"
  , String
"BLUR", String
"BOAR", String
"BOAT", String
"BOCA", String
"BOCK", String
"BODE", String
"BODY", String
"BOGY", String
"BOHR"
  , String
"BOIL", String
"BOLD", String
"BOLO", String
"BOLT", String
"BOMB", String
"BONA", String
"BOND", String
"BONE", String
"BONG"
  , String
"BONN", String
"BONY", String
"BOOK", String
"BOOM", String
"BOON", String
"BOOT", String
"BORE", String
"BORG", String
"BORN"
  , String
"BOSE", String
"BOSS", String
"BOTH", String
"BOUT", String
"BOWL", String
"BOYD", String
"BRAD", String
"BRAE", String
"BRAG"
  , String
"BRAN", String
"BRAY", String
"BRED", String
"BREW", String
"BRIG", String
"BRIM", String
"BROW", String
"BUCK", String
"BUDD"
  , String
"BUFF", String
"BULB", String
"BULK", String
"BULL", String
"BUNK", String
"BUNT", String
"BUOY", String
"BURG", String
"BURL"
  , String
"BURN", String
"BURR", String
"BURT", String
"BURY", String
"BUSH", String
"BUSS", String
"BUST", String
"BUSY", String
"BYTE"
  , String
"CADY", String
"CAFE", String
"CAGE", String
"CAIN", String
"CAKE", String
"CALF", String
"CALL", String
"CALM", String
"CAME"
  , String
"CANE", String
"CANT", String
"CARD", String
"CARE", String
"CARL", String
"CARR", String
"CART", String
"CASE", String
"CASH"
  , String
"CASK", String
"CAST", String
"CAVE", String
"CEIL", String
"CELL", String
"CENT", String
"CERN", String
"CHAD", String
"CHAR"
  , String
"CHAT", String
"CHAW", String
"CHEF", String
"CHEN", String
"CHEW", String
"CHIC", String
"CHIN", String
"CHOU", String
"CHOW"
  , String
"CHUB", String
"CHUG", String
"CHUM", String
"CITE", String
"CITY", String
"CLAD", String
"CLAM", String
"CLAN", String
"CLAW"
  , String
"CLAY", String
"CLOD", String
"CLOG", String
"CLOT", String
"CLUB", String
"CLUE", String
"COAL", String
"COAT", String
"COCA"
  , String
"COCK", String
"COCO", String
"CODA", String
"CODE", String
"CODY", String
"COED", String
"COIL", String
"COIN", String
"COKE"
  , String
"COLA", String
"COLD", String
"COLT", String
"COMA", String
"COMB", String
"COME", String
"COOK", String
"COOL", String
"COON"
  , String
"COOT", String
"CORD", String
"CORE", String
"CORK", String
"CORN", String
"COST", String
"COVE", String
"COWL", String
"CRAB"
  , String
"CRAG", String
"CRAM", String
"CRAY", String
"CREW", String
"CRIB", String
"CROW", String
"CRUD", String
"CUBA", String
"CUBE"
  , String
"CUFF", String
"CULL", String
"CULT", String
"CUNY", String
"CURB", String
"CURD", String
"CURE", String
"CURL", String
"CURT"
  , String
"CUTS", String
"DADE", String
"DALE", String
"DAME", String
"DANA", String
"DANE", String
"DANG", String
"DANK", String
"DARE"
  , String
"DARK", String
"DARN", String
"DART", String
"DASH", String
"DATA", String
"DATE", String
"DAVE", String
"DAVY", String
"DAWN"
  , String
"DAYS", String
"DEAD", String
"DEAF", String
"DEAL", String
"DEAN", String
"DEAR", String
"DEBT", String
"DECK", String
"DEED"
  , String
"DEEM", String
"DEER", String
"DEFT", String
"DEFY", String
"DELL", String
"DENT", String
"DENY", String
"DESK", String
"DIAL"
  , String
"DICE", String
"DIED", String
"DIET", String
"DIME", String
"DINE", String
"DING", String
"DINT", String
"DIRE", String
"DIRT"
  , String
"DISC", String
"DISH", String
"DISK", String
"DIVE", String
"DOCK", String
"DOES", String
"DOLE", String
"DOLL", String
"DOLT"
  , String
"DOME", String
"DONE", String
"DOOM", String
"DOOR", String
"DORA", String
"DOSE", String
"DOTE", String
"DOUG", String
"DOUR"
  , String
"DOVE", String
"DOWN", String
"DRAB", String
"DRAG", String
"DRAM", String
"DRAW", String
"DREW", String
"DRUB", String
"DRUG"
  , String
"DRUM", String
"DUAL", String
"DUCK", String
"DUCT", String
"DUEL", String
"DUET", String
"DUKE", String
"DULL", String
"DUMB"
  , String
"DUNE", String
"DUNK", String
"DUSK", String
"DUST", String
"DUTY", String
"EACH", String
"EARL", String
"EARN", String
"EASE"
  , String
"EAST", String
"EASY", String
"EBEN", String
"ECHO", String
"EDDY", String
"EDEN", String
"EDGE", String
"EDGY", String
"EDIT"
  , String
"EDNA", String
"EGAN", String
"ELAN", String
"ELBA", String
"ELLA", String
"ELSE", String
"EMIL", String
"EMIT", String
"EMMA"
  , String
"ENDS", String
"ERIC", String
"EROS", String
"EVEN", String
"EVER", String
"EVIL", String
"EYED", String
"FACE", String
"FACT"
  , String
"FADE", String
"FAIL", String
"FAIN", String
"FAIR", String
"FAKE", String
"FALL", String
"FAME", String
"FANG", String
"FARM"
  , String
"FAST", String
"FATE", String
"FAWN", String
"FEAR", String
"FEAT", String
"FEED", String
"FEEL", String
"FEET", String
"FELL"
  , String
"FELT", String
"FEND", String
"FERN", String
"FEST", String
"FEUD", String
"FIEF", String
"FIGS", String
"FILE", String
"FILL"
  , String
"FILM", String
"FIND", String
"FINE", String
"FINK", String
"FIRE", String
"FIRM", String
"FISH", String
"FISK", String
"FIST"
  , String
"FITS", String
"FIVE", String
"FLAG", String
"FLAK", String
"FLAM", String
"FLAT", String
"FLAW", String
"FLEA", String
"FLED"
  , String
"FLEW", String
"FLIT", String
"FLOC", String
"FLOG", String
"FLOW", String
"FLUB", String
"FLUE", String
"FOAL", String
"FOAM"
  , String
"FOGY", String
"FOIL", String
"FOLD", String
"FOLK", String
"FOND", String
"FONT", String
"FOOD", String
"FOOL", String
"FOOT"
  , String
"FORD", String
"FORE", String
"FORK", String
"FORM", String
"FORT", String
"FOSS", String
"FOUL", String
"FOUR", String
"FOWL"
  , String
"FRAU", String
"FRAY", String
"FRED", String
"FREE", String
"FRET", String
"FREY", String
"FROG", String
"FROM", String
"FUEL"
  , String
"FULL", String
"FUME", String
"FUND", String
"FUNK", String
"FURY", String
"FUSE", String
"FUSS", String
"GAFF", String
"GAGE"
  , String
"GAIL", String
"GAIN", String
"GAIT", String
"GALA", String
"GALE", String
"GALL", String
"GALT", String
"GAME", String
"GANG"
  , String
"GARB", String
"GARY", String
"GASH", String
"GATE", String
"GAUL", String
"GAUR", String
"GAVE", String
"GAWK", String
"GEAR"
  , String
"GELD", String
"GENE", String
"GENT", String
"GERM", String
"GETS", String
"GIBE", String
"GIFT", String
"GILD", String
"GILL"
  , String
"GILT", String
"GINA", String
"GIRD", String
"GIRL", String
"GIST", String
"GIVE", String
"GLAD", String
"GLEE", String
"GLEN"
  , String
"GLIB", String
"GLOB", String
"GLOM", String
"GLOW", String
"GLUE", String
"GLUM", String
"GLUT", String
"GOAD", String
"GOAL"
  , String
"GOAT", String
"GOER", String
"GOES", String
"GOLD", String
"GOLF", String
"GONE", String
"GONG", String
"GOOD", String
"GOOF"
  , String
"GORE", String
"GORY", String
"GOSH", String
"GOUT", String
"GOWN", String
"GRAB", String
"GRAD", String
"GRAY", String
"GREG"
  , String
"GREW", String
"GREY", String
"GRID", String
"GRIM", String
"GRIN", String
"GRIT", String
"GROW", String
"GRUB", String
"GULF"
  , String
"GULL", String
"GUNK", String
"GURU", String
"GUSH", String
"GUST", String
"GWEN", String
"GWYN", String
"HAAG", String
"HAAS"
  , String
"HACK", String
"HAIL", String
"HAIR", String
"HALE", String
"HALF", String
"HALL", String
"HALO", String
"HALT", String
"HAND"
  , String
"HANG", String
"HANK", String
"HANS", String
"HARD", String
"HARK", String
"HARM", String
"HART", String
"HASH", String
"HAST"
  , String
"HATE", String
"HATH", String
"HAUL", String
"HAVE", String
"HAWK", String
"HAYS", String
"HEAD", String
"HEAL", String
"HEAR"
  , String
"HEAT", String
"HEBE", String
"HECK", String
"HEED", String
"HEEL", String
"HEFT", String
"HELD", String
"HELL", String
"HELM"
  , String
"HERB", String
"HERD", String
"HERE", String
"HERO", String
"HERS", String
"HESS", String
"HEWN", String
"HICK", String
"HIDE"
  , String
"HIGH", String
"HIKE", String
"HILL", String
"HILT", String
"HIND", String
"HINT", String
"HIRE", String
"HISS", String
"HIVE"
  , String
"HOBO", String
"HOCK", String
"HOFF", String
"HOLD", String
"HOLE", String
"HOLM", String
"HOLT", String
"HOME", String
"HONE"
  , String
"HONK", String
"HOOD", String
"HOOF", String
"HOOK", String
"HOOT", String
"HORN", String
"HOSE", String
"HOST", String
"HOUR"
  , String
"HOVE", String
"HOWE", String
"HOWL", String
"HOYT", String
"HUCK", String
"HUED", String
"HUFF", String
"HUGE", String
"HUGH"
  , String
"HUGO", String
"HULK", String
"HULL", String
"HUNK", String
"HUNT", String
"HURD", String
"HURL", String
"HURT", String
"HUSH"
  , String
"HYDE", String
"HYMN", String
"IBIS", String
"ICON", String
"IDEA", String
"IDLE", String
"IFFY", String
"INCA", String
"INCH"
  , String
"INTO", String
"IONS", String
"IOTA", String
"IOWA", String
"IRIS", String
"IRMA", String
"IRON", String
"ISLE", String
"ITCH"
  , String
"ITEM", String
"IVAN", String
"JACK", String
"JADE", String
"JAIL", String
"JAKE", String
"JANE", String
"JAVA", String
"JEAN"
  , String
"JEFF", String
"JERK", String
"JESS", String
"JEST", String
"JIBE", String
"JILL", String
"JILT", String
"JIVE", String
"JOAN"
  , String
"JOBS", String
"JOCK", String
"JOEL", String
"JOEY", String
"JOHN", String
"JOIN", String
"JOKE", String
"JOLT", String
"JOVE"
  , String
"JUDD", String
"JUDE", String
"JUDO", String
"JUDY", String
"JUJU", String
"JUKE", String
"JULY", String
"JUNE", String
"JUNK"
  , String
"JUNO", String
"JURY", String
"JUST", String
"JUTE", String
"KAHN", String
"KALE", String
"KANE", String
"KANT", String
"KARL"
  , String
"KATE", String
"KEEL", String
"KEEN", String
"KENO", String
"KENT", String
"KERN", String
"KERR", String
"KEYS", String
"KICK"
  , String
"KILL", String
"KIND", String
"KING", String
"KIRK", String
"KISS", String
"KITE", String
"KLAN", String
"KNEE", String
"KNEW"
  , String
"KNIT", String
"KNOB", String
"KNOT", String
"KNOW", String
"KOCH", String
"KONG", String
"KUDO", String
"KURD", String
"KURT"
  , String
"KYLE", String
"LACE", String
"LACK", String
"LACY", String
"LADY", String
"LAID", String
"LAIN", String
"LAIR", String
"LAKE"
  , String
"LAMB", String
"LAME", String
"LAND", String
"LANE", String
"LANG", String
"LARD", String
"LARK", String
"LASS", String
"LAST"
  , String
"LATE", String
"LAUD", String
"LAVA", String
"LAWN", String
"LAWS", String
"LAYS", String
"LEAD", String
"LEAF", String
"LEAK"
  , String
"LEAN", String
"LEAR", String
"LEEK", String
"LEER", String
"LEFT", String
"LEND", String
"LENS", String
"LENT", String
"LEON"
  , String
"LESK", String
"LESS", String
"LEST", String
"LETS", String
"LIAR", String
"LICE", String
"LICK", String
"LIED", String
"LIEN"
  , String
"LIES", String
"LIEU", String
"LIFE", String
"LIFT", String
"LIKE", String
"LILA", String
"LILT", String
"LILY", String
"LIMA"
  , String
"LIMB", String
"LIME", String
"LIND", String
"LINE", String
"LINK", String
"LINT", String
"LION", String
"LISA", String
"LIST"
  , String
"LIVE", String
"LOAD", String
"LOAF", String
"LOAM", String
"LOAN", String
"LOCK", String
"LOFT", String
"LOGE", String
"LOIS"
  , String
"LOLA", String
"LONE", String
"LONG", String
"LOOK", String
"LOON", String
"LOOT", String
"LORD", String
"LORE", String
"LOSE"
  , String
"LOSS", String
"LOST", String
"LOUD", String
"LOVE", String
"LOWE", String
"LUCK", String
"LUCY", String
"LUGE", String
"LUKE"
  , String
"LULU", String
"LUND", String
"LUNG", String
"LURA", String
"LURE", String
"LURK", String
"LUSH", String
"LUST", String
"LYLE"
  , String
"LYNN", String
"LYON", String
"LYRA", String
"MACE", String
"MADE", String
"MAGI", String
"MAID", String
"MAIL", String
"MAIN"
  , String
"MAKE", String
"MALE", String
"MALI", String
"MALL", String
"MALT", String
"MANA", String
"MANN", String
"MANY", String
"MARC"
  , String
"MARE", String
"MARK", String
"MARS", String
"MART", String
"MARY", String
"MASH", String
"MASK", String
"MASS", String
"MAST"
  , String
"MATE", String
"MATH", String
"MAUL", String
"MAYO", String
"MEAD", String
"MEAL", String
"MEAN", String
"MEAT", String
"MEEK"
  , String
"MEET", String
"MELD", String
"MELT", String
"MEMO", String
"MEND", String
"MENU", String
"MERT", String
"MESH", String
"MESS"
  , String
"MICE", String
"MIKE", String
"MILD", String
"MILE", String
"MILK", String
"MILL", String
"MILT", String
"MIMI", String
"MIND"
  , String
"MINE", String
"MINI", String
"MINK", String
"MINT", String
"MIRE", String
"MISS", String
"MIST", String
"MITE", String
"MITT"
  , String
"MOAN", String
"MOAT", String
"MOCK", String
"MODE", String
"MOLD", String
"MOLE", String
"MOLL", String
"MOLT", String
"MONA"
  , String
"MONK", String
"MONT", String
"MOOD", String
"MOON", String
"MOOR", String
"MOOT", String
"MORE", String
"MORN", String
"MORT"
  , String
"MOSS", String
"MOST", String
"MOTH", String
"MOVE", String
"MUCH", String
"MUCK", String
"MUDD", String
"MUFF", String
"MULE"
  , String
"MULL", String
"MURK", String
"MUSH", String
"MUST", String
"MUTE", String
"MUTT", String
"MYRA", String
"MYTH", String
"NAGY"
  , String
"NAIL", String
"NAIR", String
"NAME", String
"NARY", String
"NASH", String
"NAVE", String
"NAVY", String
"NEAL", String
"NEAR"
  , String
"NEAT", String
"NECK", String
"NEED", String
"NEIL", String
"NELL", String
"NEON", String
"NERO", String
"NESS", String
"NEST"
  , String
"NEWS", String
"NEWT", String
"NIBS", String
"NICE", String
"NICK", String
"NILE", String
"NINA", String
"NINE", String
"NOAH"
  , String
"NODE", String
"NOEL", String
"NOLL", String
"NONE", String
"NOOK", String
"NOON", String
"NORM", String
"NOSE", String
"NOTE"
  , String
"NOUN", String
"NOVA", String
"NUDE", String
"NULL", String
"NUMB", String
"OATH", String
"OBEY", String
"OBOE", String
"ODIN"
  , String
"OHIO", String
"OILY", String
"OINT", String
"OKAY", String
"OLAF", String
"OLDY", String
"OLGA", String
"OLIN", String
"OMAN"
  , String
"OMEN", String
"OMIT", String
"ONCE", String
"ONES", String
"ONLY", String
"ONTO", String
"ONUS", String
"ORAL", String
"ORGY"
  , String
"OSLO", String
"OTIS", String
"OTTO", String
"OUCH", String
"OUST", String
"OUTS", String
"OVAL", String
"OVEN", String
"OVER"
  , String
"OWLY", String
"OWNS", String
"QUAD", String
"QUIT", String
"QUOD", String
"RACE", String
"RACK", String
"RACY", String
"RAFT"
  , String
"RAGE", String
"RAID", String
"RAIL", String
"RAIN", String
"RAKE", String
"RANK", String
"RANT", String
"RARE", String
"RASH"
  , String
"RATE", String
"RAVE", String
"RAYS", String
"READ", String
"REAL", String
"REAM", String
"REAR", String
"RECK", String
"REED"
  , String
"REEF", String
"REEK", String
"REEL", String
"REID", String
"REIN", String
"RENA", String
"REND", String
"RENT", String
"REST"
  , String
"RICE", String
"RICH", String
"RICK", String
"RIDE", String
"RIFT", String
"RILL", String
"RIME", String
"RING", String
"RINK"
  , String
"RISE", String
"RISK", String
"RITE", String
"ROAD", String
"ROAM", String
"ROAR", String
"ROBE", String
"ROCK", String
"RODE"
  , String
"ROIL", String
"ROLL", String
"ROME", String
"ROOD", String
"ROOF", String
"ROOK", String
"ROOM", String
"ROOT", String
"ROSA"
  , String
"ROSE", String
"ROSS", String
"ROSY", String
"ROTH", String
"ROUT", String
"ROVE", String
"ROWE", String
"ROWS", String
"RUBE"
  , String
"RUBY", String
"RUDE", String
"RUDY", String
"RUIN", String
"RULE", String
"RUNG", String
"RUNS", String
"RUNT", String
"RUSE"
  , String
"RUSH", String
"RUSK", String
"RUSS", String
"RUST", String
"RUTH", String
"SACK", String
"SAFE", String
"SAGE", String
"SAID"
  , String
"SAIL", String
"SALE", String
"SALK", String
"SALT", String
"SAME", String
"SAND", String
"SANE", String
"SANG", String
"SANK"
  , String
"SARA", String
"SAUL", String
"SAVE", String
"SAYS", String
"SCAN", String
"SCAR", String
"SCAT", String
"SCOT", String
"SEAL"
  , String
"SEAM", String
"SEAR", String
"SEAT", String
"SEED", String
"SEEK", String
"SEEM", String
"SEEN", String
"SEES", String
"SELF"
  , String
"SELL", String
"SEND", String
"SENT", String
"SETS", String
"SEWN", String
"SHAG", String
"SHAM", String
"SHAW", String
"SHAY"
  , String
"SHED", String
"SHIM", String
"SHIN", String
"SHOD", String
"SHOE", String
"SHOT", String
"SHOW", String
"SHUN", String
"SHUT"
  , String
"SICK", String
"SIDE", String
"SIFT", String
"SIGH", String
"SIGN", String
"SILK", String
"SILL", String
"SILO", String
"SILT"
  , String
"SINE", String
"SING", String
"SINK", String
"SIRE", String
"SITE", String
"SITS", String
"SITU", String
"SKAT", String
"SKEW"
  , String
"SKID", String
"SKIM", String
"SKIN", String
"SKIT", String
"SLAB", String
"SLAM", String
"SLAT", String
"SLAY", String
"SLED"
  , String
"SLEW", String
"SLID", String
"SLIM", String
"SLIT", String
"SLOB", String
"SLOG", String
"SLOT", String
"SLOW", String
"SLUG"
  , String
"SLUM", String
"SLUR", String
"SMOG", String
"SMUG", String
"SNAG", String
"SNOB", String
"SNOW", String
"SNUB", String
"SNUG"
  , String
"SOAK", String
"SOAR", String
"SOCK", String
"SODA", String
"SOFA", String
"SOFT", String
"SOIL", String
"SOLD", String
"SOME"
  , String
"SONG", String
"SOON", String
"SOOT", String
"SORE", String
"SORT", String
"SOUL", String
"SOUR", String
"SOWN", String
"STAB"
  , String
"STAG", String
"STAN", String
"STAR", String
"STAY", String
"STEM", String
"STEW", String
"STIR", String
"STOW", String
"STUB"
  , String
"STUN", String
"SUCH", String
"SUDS", String
"SUIT", String
"SULK", String
"SUMS", String
"SUNG", String
"SUNK", String
"SURE"
  , String
"SURF", String
"SWAB", String
"SWAG", String
"SWAM", String
"SWAN", String
"SWAT", String
"SWAY", String
"SWIM", String
"SWUM"
  , String
"TACK", String
"TACT", String
"TAIL", String
"TAKE", String
"TALE", String
"TALK", String
"TALL", String
"TANK", String
"TASK"
  , String
"TATE", String
"TAUT", String
"TEAL", String
"TEAM", String
"TEAR", String
"TECH", String
"TEEM", String
"TEEN", String
"TEET"
  , String
"TELL", String
"TEND", String
"TENT", String
"TERM", String
"TERN", String
"TESS", String
"TEST", String
"THAN", String
"THAT"
  , String
"THEE", String
"THEM", String
"THEN", String
"THEY", String
"THIN", String
"THIS", String
"THUD", String
"THUG", String
"TICK"
  , String
"TIDE", String
"TIDY", String
"TIED", String
"TIER", String
"TILE", String
"TILL", String
"TILT", String
"TIME", String
"TINA"
  , String
"TINE", String
"TINT", String
"TINY", String
"TIRE", String
"TOAD", String
"TOGO", String
"TOIL", String
"TOLD", String
"TOLL"
  , String
"TONE", String
"TONG", String
"TONY", String
"TOOK", String
"TOOL", String
"TOOT", String
"TORE", String
"TORN", String
"TOTE"
  , String
"TOUR", String
"TOUT", String
"TOWN", String
"TRAG", String
"TRAM", String
"TRAY", String
"TREE", String
"TREK", String
"TRIG"
  , String
"TRIM", String
"TRIO", String
"TROD", String
"TROT", String
"TROY", String
"TRUE", String
"TUBA", String
"TUBE", String
"TUCK"
  , String
"TUFT", String
"TUNA", String
"TUNE", String
"TUNG", String
"TURF", String
"TURN", String
"TUSK", String
"TWIG", String
"TWIN"
  , String
"TWIT", String
"ULAN", String
"UNIT", String
"URGE", String
"USED", String
"USER", String
"USES", String
"UTAH", String
"VAIL"
  , String
"VAIN", String
"VALE", String
"VARY", String
"VASE", String
"VAST", String
"VEAL", String
"VEDA", String
"VEIL", String
"VEIN"
  , String
"VEND", String
"VENT", String
"VERB", String
"VERY", String
"VETO", String
"VICE", String
"VIEW", String
"VINE", String
"VISE"
  , String
"VOID", String
"VOLT", String
"VOTE", String
"WACK", String
"WADE", String
"WAGE", String
"WAIL", String
"WAIT", String
"WAKE"
  , String
"WALE", String
"WALK", String
"WALL", String
"WALT", String
"WAND", String
"WANE", String
"WANG", String
"WANT", String
"WARD"
  , String
"WARM", String
"WARN", String
"WART", String
"WASH", String
"WAST", String
"WATS", String
"WATT", String
"WAVE", String
"WAVY"
  , String
"WAYS", String
"WEAK", String
"WEAL", String
"WEAN", String
"WEAR", String
"WEED", String
"WEEK", String
"WEIR", String
"WELD"
  , String
"WELL", String
"WELT", String
"WENT", String
"WERE", String
"WERT", String
"WEST", String
"WHAM", String
"WHAT", String
"WHEE"
  , String
"WHEN", String
"WHET", String
"WHOA", String
"WHOM", String
"WICK", String
"WIFE", String
"WILD", String
"WILL", String
"WIND"
  , String
"WINE", String
"WING", String
"WINK", String
"WINO", String
"WIRE", String
"WISE", String
"WISH", String
"WITH", String
"WOLF"
  , String
"WONT", String
"WOOD", String
"WOOL", String
"WORD", String
"WORE", String
"WORK", String
"WORM", String
"WORN", String
"WOVE"
  , String
"WRIT", String
"WYNN", String
"YALE", String
"YANG", String
"YANK", String
"YARD", String
"YARN", String
"YAWL", String
"YAWN"
  , String
"YEAH", String
"YEAR", String
"YELL", String
"YOGA", String
"YOKE"
  ]