DRWordle (script)

From Elanthipedia
Revision as of 16:23, 21 May 2023 by SHIFT3 (talk | contribs)
Jump to navigation Jump to search
DRWordle (script)
Category events
Front-end Genie
Author Shift


Updated word list on 5-21-2023, added "infinite run" option. Word list as of 5-23-2022

  .drwordle solve
 Attempts to solve the puzzle. 
 .drwordle debug
 Enters debug mode.  use "#parse NEXTCASE" without the quotes to progress it.
 drwordle help
 Shows possible commands. 

Important Notes:


1. Turn the recommend only variable in the custom variables section to ON if you want the script to give you recommendations rather than solve the puzzle for you.

2. If the script is timing out, decrease the infinite loop hack variable. This will slow it down a bit, so don't make it too short unless you want to sit around and do otherstuff while it processes.

3. Some DR words will likely not be in the list. You can add them to the missing words list at top. Just make sure you end in a | and it's all caps or it's likely to break or ignore the word.

4. If the script dies or you accidentally break out, change the guess variable and just rerun it. It'll pick back up with the new guess.

5. Start the script when standing next to a time lock.

Disclaimer: No guarantees on your RPAs because I don't know what else you have going on in your system, but my testing showed about 81-100% accuracy (variable due to versions and updates to the script itself + word lists).


### use .DRWordle help for instructions


#==============================      CUSTOM VARIABLES GO HERE      ===========================

## This is the word to start the puzzle
## Most people will want to just ignore this.
	var DRWordle._guess AEIOU
#	var DRWordle._guess CRANE


## Add new words discovered here
## Most likely DR specific words not in the dictionary; always 5 characters
## Make sure to separate words and end with |
## Always caps, and these words will be prioritized if the program does auto-input
	## WARNING: ADDING THE WORD "FALSE" WILL BREAK THE CODE !!!
	var DRWordle._missingWords OSAGE|NILOS|DARJE|IROKO|RAMIE|KASAI|CRWTH|SITAR|REBEC|KELSA|COBZA|ANGLE|GUIRO|TABLA|TZECE|SNICK|IAHJA|ESTOC|AVENE|ZUBKE|SUFIL|

## Only recommends a word.  Won't actually type it in.  You need to. 
## OFF to have it play the game for you, ON or anything else to enable assisted mode
	var DRWordle._recommendOnly OFF

## If you have errors due to infinite loop or recursion, lower this number. 
## It will be slighly slower to significantly slower depending on how low it goes
	var DRWordle._infiniteLoopHack 2000

## Echo color for information text; customizable for the visually impaired or for those running lots of highlights
	var DRWordle._textColor._info yellow
	var DRWordle._textColor._warning red

## Delay for processing.  Increase this if you're missing letters due to slower or older PCs
	var DRWordle._globalShortDelay .001
	var DRWordle._globalLongDelay 1

## Set to 1 to repeat indefinitely - but it will break on failure to allow you to resolve the issue
	var DRWordle.useAllSlips 1

#=============================================================================================

DRWordle.Start: 

### Setting up base variables.  This should run before attempting
gosub DRWordle.SetupActions
gosub DRWordle.SetupGlobalVars

### real run or just help run? 
gosub DRWordle.InputCheck

DRWordle.Exit:
	put #parse DRWORDLE FINISHED
	exit 0


########################################################  Puzzle Solver FUNCTIONS ###########################################

DRWordle.startPuzzle:
	gosub DRWordle.Echo %DRWordle._textColor._info Starting puzzle

	put touch time lock
	waitforre This will consume a pass for Aesthene|already connected to the lock

	put touch time lock
	waitforre You can WHISPER your guess|already connected to the lock|an alarming pulse of energy surges from it and through you

	put whisper time lock %DRWordle._guess
	waitforre LOOK at the lock for an update on your progress

	pause %DRWordle._globalLongDelay
	drwordle.override:
		gosub DRWordle.PostProcessing
		if ("%DRWordle._recommendOnly" = "ON") then {
			gosub DRWordle.TestCase.PrintStates
			gosub DRWordle.Echo %DRWordle._textColor._warning red INPUT REQURIED
			gosub DRWordle.Echo %DRWordle._textColor._warning red type "whisper time lock <guess>" without quotes, filling in your guess for "<guess>"	
		} else {
			goto DRWordle.automateGuess
		}
	## waiting for triggers to move on.  Could use matchwait, but I'm lazy
	pause 30000
	goto DRWordle.override



########################################################  SETUP FUNCTIONS ###########################################

DRWordle.SetupActions:
	gosub DRWordle.Echo %DRWordle._textColor._info --- Creating Triggers
	### Actions to identify which words are good and which are bad. 
	### There has to be a better way to do this too. 

	### identify bad letters
		## This didn't work, only caught first bad letter per row, so splitting into multiple actions
		#	action var DRWordle._badLettersDirty %DRWordle._goodLettersDirty|$1 when \*([A-Z])\*
		action var DRWordle._badLettersDirty $1|%DRWordle._badLettersDirty when \s*\|\s*\*([A-Z])\*\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._badLettersDirty $1|%DRWordle._badLettersDirty when \s*\|\s*...\s*\|\s*\*([A-Z])\*\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._badLettersDirty $1|%DRWordle._badLettersDirty when \s*\|\s*...\s*\|\s*...\s*\|\s*\*([A-Z])\*\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._badLettersDirty $1|%DRWordle._badLettersDirty when \s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*\*([A-Z])\*\s*\|\s*...\s*\|\s*$
		action var DRWordle._badLettersDirty $1|%DRWordle._badLettersDirty when \s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*\*([A-Z])\*\s*\|\s*$

	### identify good letters
		#same problem as above, so just hardcoding it. 
		#action var DRWordle._goodLettersDirty %DRWordle._goodLettersDirty|$1 when \+([A-Z])\+
		#action var DRWordle._goodLettersDirty %DRWordle._goodLettersDirty|$1 when _([A-Z])_
		action var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty;var DRWordle._GoodLBadPosition1 $1 when \s*\|\s*_([A-Z])_\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty;var DRWordle._GoodLBadPosition2 $1 when \s*\|\s*...\s*\|\s*_([A-Z])_\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty;var DRWordle._GoodLBadPosition3 $1 when \s*\|\s*...\s*\|\s*...\s*\|\s*_([A-Z])_\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty;var DRWordle._GoodLBadPosition4 $1 when \s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*_([A-Z])_\s*\|\s*...\s*\|\s*$
		action var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty;var DRWordle._GoodLBadPosition5 $1 when \s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*_([A-Z])_\s*\|\s*$
		
	### identify known positions
		action var DRWordle._knownPosition1 $1;var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty when \s*\|\s*\+([A-Z])\+\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._knownPosition2 $1;var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty when \s*\|\s*...\s*\|\s*\+([A-Z])\+\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._knownPosition3 $1;var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty when \s*\|\s*...\s*\|\s*...\s*\|\s*\+([A-Z])\+\s*\|\s*...\s*\|\s*...\s*\|\s*$
		action var DRWordle._knownPosition4 $1;var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty when \s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*\+([A-Z])\+\s*\|\s*...\s*\|\s*$
		action var DRWordle._knownPosition5 $1;var DRWordle._goodLettersDirty $1|%DRWordle._goodLettersDirty when \s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*...\s*\|\s*\+([A-Z])\+\s*\|\s*$

	## support actions
		action goto DRWordle.Override when PROCESSLASTMOVE!
		action goto DRWordle.Override when indicates a wrong letter that isn't used in the final word
		action goto DRWordle.NO.PASSES when To interact with the lock, you must redeem a pass for the event
		action goto DRWordle.COMPLETE when for your assistance in locking away unstable temporal magics at Aesthene's Close
		action goto DRWordle.automateGuess when You must whisper a guess

	## fail states
		action goto DRWordle.UNKONWN.WORD when You are not currently tasked with solving the puzzle.  TOUCH the lock to begin.]
#		action goto DRWordle.UNKONWN.WORD when You whisper quietly to the lock.  It doesn't respond

return

DRWordle.SetupGlobalVars:
	gosub DRWordle.Echo %DRWordle._textColor._info --- Creating Variables
	## Functional variables; will fill in as part of the run
	var DRWordle._goodLetters 
	var DRWordle._goodLettersDirty 
	var DRWordle._badLetters 
	var DRWordle._badLettersDirty 
	# NYI #
        var DRWordle._remainingLetters ABCDEFGHIJKLMNOPQRSTUVWXYZ
	#######
	var DRWordle._knownPosition1 
	var DRWordle._knownPosition2 
	var DRWordle._knownPosition3 
	var DRWordle._knownPosition4 
	var DRWordle._knownPosition5 
	
	var DRWordle._GoodLBadPosition1 .
	var DRWordle._GoodLBadPosition2 .
	var DRWordle._GoodLBadPosition3 .
	var DRWordle._GoodLBadPosition4 .
	var DRWordle._GoodLBadPosition5 .
	gosub DRWordle.CheckKnownPositions

	gosub DRWordle.Echo %DRWordle._textColor._info --- Creating Word List... this may take a while
	## Customizable variables.  Wordbank is HUGE.  There has to be a better way.  Import external file maybe? 
	var DRWordle._wordCharCount 5
	var DRWordle._wordBank %DRWordle._missingWordsAALAR|AARGH|AAYRA|ABACA|ABACI|ABACK|ABAFT|ABASE|ABASH|ABATE|ABBEY|ABBOT|ABEAM|ABEND|ABETS|ABHOR|ABIDE|ABIRA|ABLED|ABLER|ABODE|ABORT|ABOUT|ABOVE|ABSIT|ABUSE|ABUTS|ABUZZ|ABYSS|ACHED|ACHES|ACHOO|ACIDS|ACING|ACKED|ACMES|ACNED|ACNES|ACORN|ACRES|ACRID|ACTED|ACTIN|ACTOR|ACUTE|ADAGE|ADANF|ADANO|ADAPT|ADDED|ADDER|ADDLE|ADEPT|ADIEU|ADIOS|ADLIB|ADMAN|ADMEN|ADMIT|ADMIX|ADOBE|ADOPT|ADORE|ADORN|ADULT|ADZES|AEDEM|AEGIS|AELIK|AERIE|AESRY|AEVEL|AEYMI|AFFIX|AFIRE|AFOOT|AFORE|AFOUL|AFTER|AGAIN|AGAPE|AGARS|AGATE|AGAVE|AGENT|AGGAH|AGILE|AGING|AGLEY|AGLOW|AGOBL|AGONE|AGONY|AGORA|AGREE|AGUES|AHEAD|AHHHH|AHOLD|AHOYS|AHWEN|AIDED|AIDER|AIDES|AILED|AIMED|AIMER|AIOLI|AIRED|AIRER|AISLE|AITCH|AJUGA|ALACK|ALAIN|ALARM|ALBUM|ALDER|ALECK|ALEPH|ALERT|ALGAE|ALGAL|ALGIN|ALIAS|ALIBI|ALIEN|ALIGN|ALIKE|ALIVE|ALKYD|ALKYL|ALLAY|ALLEY|ALLOT|ALLOW|ALLOY|ALLUM|ALLYE|ALOES|ALOFT|ALOHA|ALONE|ALONG|ALOOF|ALOUD|ALPHA|ALRET|ALRIS|ALTAR|ALTER|ALTHO|ALTOS|ALUMS|ALUNE|ALVAR|ALWAY|ALYDA|AMAHS|AMASS|AMAZE|AMBER|AMBIT|AMBLE|AMEBA|AMEND|AMENS|AMIDE|AMIGO|AMINE|AMINO|AMISS|AMITY|AMMOS|AMONG|AMOUR|AMPED|AMPLE|AMPLY|AMUCK|AMUSE|AMYLS|ANDED|ANDOR|ANENT|ANEUS|ANGEL|ANGEM|ANGER|ANGLE|ANGRY|ANGST|ANIEK|ANILE|ANIMA|ANION|ANISE|ANISI|ANKHS|ANKLE|ANLAS|ANNAS|ANNEX|ANNOY|ANNUL|ANNUM|ANODE|ANOLE|ANTED|ANTES|ANTIC|ANTIS|ANTOC|ANTSY|ANVIL|AODIN|AORTA|AOURN|APACE|APART|APERS|APHID|APHIS|APIAN|APING|APISH|APNEA|APORT|APPLE|APPLY|APRIL|APRON|APSES|APSOS|APTLY|AQUAE|AQUAS|ARBOR|ARCED|ARDOR|ARDYS|AREAL|AREAS|AREKO|ARENA|ARENT|ARGON|ARGOT|ARGUE|ARHAT|ARIAS|ARINE|ARISE|ARITY|ARIYA|ARJEN|ARMED|ARMOR|AROMA|AROSE|ARPIA|ARRAS|ARRAY|ARROW|ARSES|ARSON|ARTHE|ARTSY|ARUMS|ARUNA|ASANA|ASCOT|ASHEN|ASHES|ASIDE|ASINI|ASKED|ASKER|ASKEW|ASMAR|ASPEN|ASPIC|ASSAI|ASSAY|ASSED|ASSES|ASSET|ASTER|ASTIR|ASTRO|ATHAN|ATILT|ATLAS|ATOLL|ATOMS|ATONE|ATRAI|ATRIA|ATTAR|ATTIC|ATUEN|ATVUS|AUDIO|AUDIT|AUGER|AUGHT|AUGUR|AULES|AUNTS|AURAE|AURAL|AURAS|AURIC|AUTOS|AVAAR|AVAEV|AVAIL|AVANT|AVAST|AVEDA|AVERS|AVERT|AVIAN|AVLEA|AVNEL|AVOID|AVOWS|AVREN|AVRII|AVTIK|AWAIT|AWAKE|AWARD|AWARE|AWASH|AWAYS|AWFUL|AWING|AWKSA|AWOKE|AXELS|AXIAL|AXING|AXIOM|AXLED|AXLES|AXMAN|AXMEN|AXONS|AYINS|AYLAY|AYSTA|AZDAR|AZINE|AZOIC|AZUME|AZURE|BABEL|BABES|BACKS|BACON|BADDY|BADGE|BADLY|BAERN|BAGEL|BAGGY|BAHTS|BAILS|BAINS|BAIRN|BAITS|BAIZE|BAKED|BAKER|BAKES|BALAM|BALDS|BALDY|BALED|BALER|BALES|BALKS|BALKY|BALLS|BALLY|BALMS|BALMY|BALSA|BANAL|BANDS|BANDY|BANES|BANGS|BANII|BANJO|BANKS|BANNS|BARBS|BARDS|BARED|BARER|BARES|BARFS|BARFY|BARGE|BARIC|BARKS|BARKY|BARMS|BARMY|BARNS|BARON|BASAL|BASED|BASER|BASES|BASIC|BASIL|BASIN|BASIR|BASIS|BASKS|BASSI|BASSO|BASTE|BATCH|BATED|BATES|BATHE|BATHS|BATIK|BATON|BATTY|BAUDS|BAULK|BAWDY|BAWLS|BAYED|BAYOU|BAZAR|BEACH|BEADS|BEADY|BEAKS|BEAKY|BEAMS|BEAMY|BEANO|BEANS|BEARD|BEARS|BEAST|BEATS|BEAUS|BEAUT|BEAUX|BEBOP|BEBUG|BECKS|BEDAN|BEDEW|BEDIM|BEECH|BEEFS|BEEFY|BEEPS|BEERS|BEERY|BEETS|BEFIT|BEFOG|BEGAN|BEGAT|BEGET|BEGIN|BEGOT|BEGUN|BEIGE|BEING|BELAY|BELCH|BELEA|BELIE|BELLE|BELLI|BELLS|BELLY|BELOW|BELTS|BENCH|BENDS|BENTS|BEORT|BERAN|BERET|BERGS|BERMS|BERRY|BERTH|BERYL|BESET|BESOT|BESTS|BETAS|BETEL|BETHS|BEVEL|BEZEL|BHANG|BHOYS|BIBBS|BIBLE|BIDDY|BIDED|BIDER|BIDES|BIDET|BIERS|BIFFS|BIFFY|BIGGY|BIGHT|BIGLY|BIGOT|BIKED|BIKER|BIKES|BILES|BILGE|BILGY|BILKS|BILLS|BILLY|BIMBO|BINDS|BINGE|BINGO|BIOME|BIPED|BIPOD|BIRCH|BIRDS|BIRTH|BISON|BITCH|BITER|BITES|BITSY|BITTY|BIZAR|BKKKM|BLABS|BLACK|BLADE|BLAHS|BLAME|BLAND|BLANK|BLARE|BLASH|BLAST|BLATS|BLAZE|BLEAK|BLEAR|BLEAT|BLEBS|BLEED|BLEND|BLESS|BLEST|BLIMP|BLIND|BLINI|BLINK|BLIPS|BLISS|BLITZ|BLOAT|BLOBS|BLOCK|BLOCS|BLOKE|BLOND|BLOOD|BLOOM|BLOTS|BLOWN|BLOWS|BLOWY|BLUED|BLUER|BLUES|BLUFF|BLUNT|BLURB|BLURS|BLURT|BLUSH|BOARD|BOARS|BOAST|BOATS|BOBBY|BOCCE|BOCCI|BOCKS|BODED|BODES|BODGE|BODIE|BOFFO|BOFFS|BOGEY|BOGGY|BOGIE|BOGUS|BOILS|BOLAS|BOLLS|BOLOS|BOLTS|BOMBE|BOMBS|BONDS|BONED|BONER|BONES|BONGO|BONGS|BONKS|BONNE|BONNY|BONUS|BOOBS|BOOBY|BOOED|BOOKS|BOOKY|BOOMS|BOOMY|BOONS|BOORS|BOOST|BOOTH|BOOTS|BOOTY|BOOZE|BOOZY|BORAX|BORED|BORER|BORES|BORIC|BORNE|BORON|BOSKY|BOSOM|BOSON|BOSSA|BOSSY|BOSUN|BOTCH|BOTHY|BOTUK|BOUGH|BOULE|BOUND|BOUTS|BOWED|BOWEL|BOWER|BOWIE|BOWLS|BOXED|BOXER|BOXES|BOZOS|BRACE|BRACK|BRACT|BRADS|BRAES|BRAGS|BRAID|BRAIN|BRAKE|BRAND|BRANS|BRANT|BRASH|BRASS|BRATH|BRATS|BRAUN|BRAVA|BRAVE|BRAVO|BRAWL|BRAWN|BRAYS|BRAZE|BREAD|BREAK|BREAM|BREED|BRENT|BREVE|BREWS|BRIAR|BRIBE|BRICK|BRIDE|BRIEF|BRIER|BRIES|BRIGS|BRIMS|BRINE|BRING|BRINK|BRINY|BRISK|BROAD|BROIL|BROKE|BROMO|BRONC|BRONX|BROOD|BROOK|BROOM|BROTH|BROWN|BROWS|BRUIN|BRUIT|BRUNG|BRUNT|BRUSH|BRUSK|BRUTE|BUBBA|BUCCA|BUCKS|BUDDY|BUDGE|BUENA|BUENO|BUFFA|BUFFO|BUFFS|BUGGY|BUGLE|BUILD|BUILT|BULBS|BULGE|BULGY|BULKS|BULKY|BULLS|BULLY|BUMPH|BUMPS|BUMPY|BUNCH|BUNCO|BUNDS|BUNGS|BUNKO|BUNKS|BUNNY|BUNTS|BUOYS|BURET|BURGS|BURIN|BURLS|BURLY|BURNS|BURNT|BURPS|BURRO|BURRS|BURRY|BURST|BUSBY|BUSED|BUSES|BUSHY|BUSKS|BUSTS|BUSTY|BUTCH|BUTTE|BUTTS|BUTYL|BUUWL|BUXOM|BUYER|BUZZY|BWANA|BXXAS|BYLAW|BYRES|BYTES|BYWAY|CABAL|CABBY|CABIN|CABLE|CACAO|CACHE|CACTI|CADDY|CADET|CADGE|CADRE|CAFES|CAGED|CAGER|CAGES|CAGEY|CAIRN|CAKED|CAKES|CALIX|CALKS|CALLA|CALLS|CALMS|CALVE|CALYX|CAMEL|CAMEO|CAMPO|CAMPS|CAMPY|CANAL|CANDY|CANED|CANER|CANES|CANNA|CANNY|CANOE|CANON|CANST|CANTO|CANTS|CAPED|CAPER|CAPES|CAPON|CAPOS|CARAT|CARDS|CARED|CARER|CARES|CARET|CARGO|CARME|CARNE|CARNY|CAROB|CAROL|CAROM|CARON|CARPS|CARPY|CARRY|CARTE|CARTS|CARVE|CASAS|CASED|CASES|CASKS|CASTE|CASTS|CASUS|CATCH|CATER|CATTY|CAULK|CAULS|CAUSE|CAVED|CAVES|CAVIL|CAWED|CAWNA|CEASE|CEDAR|CEDED|CEDER|CEDES|CEILS|CELEB|CELLO|CELLS|CENTO|CENTS|CHAFE|CHAFF|CHAGA|CHAID|CHAIN|CHAIR|CHALK|CHAMP|CHANT|CHAOS|CHAPS|CHARD|CHARM|CHARS|CHART|CHARY|CHASE|CHASM|CHATS|CHAWS|CHEAP|CHEAT|CHECK|CHEEK|CHEEP|CHEER|CHEFS|CHERT|CHESS|CHEST|CHEWS|CHEWY|CHICK|CHIDE|CHIEF|CHIFF|CHILD|CHILE|CHILI|CHILL|CHIME|CHIMP|CHINA|CHINE|CHINK|CHINO|CHINS|CHIPS|CHIRP|CHITS|CHIVE|CHOCK|CHOIR|CHOKE|CHOMP|CHOOS|CHOPS|CHORD|CHORE|CHOSE|CHOWS|CHRIS|CHUCK|CHUFF|CHUGS|CHUMP|CHUMS|CHUNK|CHURL|CHURN|CHUTE|CIDER|CIGAR|CILIA|CILLS|CINCH|CIRCA|CIRRI|CITED|CITES|CITYS|CIVET|CIVIC|CIVIL|CIVVY|CLACK|CLADS|CLAIM|CLAMP|CLAMS|CLANG|CLANK|CLANS|CLAPS|CLASH|CLASP|CLASS|CLAVE|CLAWS|CLAYS|CLEAN|CLEAR|CLEAT|CLEFS|CLEFT|CLERK|CLEWS|CLICK|CLIFF|CLIMB|CLIME|CLING|CLINK|CLIPS|CLOAK|CLOCK|CLODS|CLOGS|CLOMP|CLONE|CLOPS|CLOSE|CLOTH|CLOTS|CLOUD|CLOUT|CLOVE|CLOWN|CLOYS|CLUBS|CLUCK|CLUED|CLUES|CLUMP|CLUNG|CLUNK|COACH|COALS|COAST|COATI|COATS|COBRA|COCAS|COCCI|COCKS|COCKY|COCOA|COCOS|CODAS|CODED|CODER|CODES|CODEX|CODON|COEDS|COHOS|COIFS|COILS|COINS|COKED|COKES|COLAS|COLDS|COLIC|COLON|COLOR|COLTS|COMAS|COMBO|COMBS|COMER|COMES|COMET|COMFY|COMIC|COMMA|COMPS|CONCH|CONDO|CONED|CONES|CONEY|CONGA|CONIC|CONKS|COOCH|COOED|COOKS|COOKY|COOLS|COONS|COOPS|COOTS|COPED|COPER|COPES|COPRA|COPSE|COQUI|CORAL|CORDS|CORDY|CORED|CORER|CORES|CORGI|CORIK|CORKS|CORKY|CORMS|CORNS|CORNU|CORNY|CORPS|COSET|COSTA|COSTS|COTES|COTTA|COUCH|COUGH|COULD|COUNT|COUPE|COUPS|COURT|COUTH|COVEN|COVER|COVES|COVET|COVEY|COWED|COWER|COWLS|COWRY|COXED|COXES|COYER|COYLY|COYPU|COZEN|CRABS|CRACK|CRAFT|CRAGS|CRAMP|CRAMS|CRANE|CRANK|CRAPS|CRASH|CRASS|CRATE|CRAVE|CRAWL|CRAWS|CRAZE|CRAZY|CREAK|CREAM|CREDO|CREED|CREEK|CREEL|CREEP|CREME|CREPE|CREPT|CRESS|CREST|CREWS|CRIBS|CRICK|CRIED|CRIER|CRIES|CRIME|CRIMP|CRINK|CRISP|CRITS|CROAK|CROCK|CROCS|CROFF|CROFT|CRONE|CRONY|CROOK|CROON|CROPS|CROSS|CROUP|CROWD|CROWN|CROWS|CRUDE|CRUDS|CRUEL|CRUET|CRUFT|CRUMB|CRUMP|CRUSE|CRUSH|CRUST|CRYPT|CUBBY|CUBED|CUBER|CUBES|CUBIC|CUBIT|CUFFS|CUING|CUKES|CULLS|CULPA|CULTS|CUMIN|CUNTS|CUPID|CUPPA|CUPPY|CURBS|CURDS|CURDY|CURED|CURER|CURES|CURIA|CURIE|CURIO|CURLS|CURLY|CURRY|CURSE|CURVE|CURVY|CUSHY|CUSPS|CUSPY|CUTER|CUTIE|CUTTA|CUTUP|CYCAD|CYCLE|CYNIC|CYSTS|CZARS|DACHA|DADDY|DADOS|DAFFY|DAILY|DAIRY|DAISY|DALAR|DALES|DALLY|DAMES|DAMNS|DAMPS|DANCE|DANDY|DARED|DARER|DARES|DARKS|DARKY|DARNS|DARTS|DARVA|DASHY|DATED|DATER|DATES|DATUM|DAUBS|DAUNT|DAVIT|DAWNS|DAZED|DAZES|DEADS|DEALS|DEALT|DEANS|DEARS|DEARY|DEATH|DEBAR|DEBIT|DEBTS|DEBUG|DEBUT|DECAF|DECAL|DECAY|DECKS|DECOR|DECOY|DECRY|DEEDS|DEEMS|DEEPS|DEFER|DEFOG|DEFUN|DEGAS|DEGUM|DEICE|DEIFY|DEIGN|DEINS|DEISM|DEIST|DEITY|DEIVA|DELAY|DELFT|DELIS|DELLS|DELTA|DELVE|DEMIN|DEMIT|DEMON|DEMOS|DEMUR|DENIM|DENSE|DENTS|DEPOT|DEPTH|DEQUE|DERBY|DESEX|DESKS|DETER|DEUCE|DEVIL|DEWED|DEWEY|DHOWS|DIALS|DIARY|DIAZO|DICED|DICER|DICES|DICEY|DICKS|DICKY|DICOT|DICTA|DICTU|DICUT|DIDDY|DIDNT|DIDOS|DIDOT|DIDST|DIEMS|DIEST|DIETH|DIETS|DIGIT|DIKED|DIKES|DILDO|DILLS|DILLY|DIMER|DIMES|DIMLY|DINAR|DINED|DINER|DINES|DINGO|DINGS|DINGY|DINKS|DINKY|DINTS|DIODE|DIPPY|DIPSO|DIRER|DIRGE|DIRKS|DIRTS|DIRTY|DISCO|DISCS|DISHY|DISKS|DITCH|DITTO|DITTY|DIVAN|DIVAS|DIVED|DIVER|DIVES|DIVOT|DIVVY|DIXIT|DIZZY|DJINN|DOBEK|DOCKS|DODGE|DODGY|DODOS|DOERS|DOEST|DOETH|DOFFS|DOGES|DOGGO|DOGGY|DOGIE|DOGMA|DOILY|DOING|DOLCE|DOLED|DOLES|DOLLS|DOLLY|DOLOR|DOLTS|DOMED|DOMES|DONEE|DONNA|DONOR|DONUT|DOOMS|DOORS|DOOZY|DOPED|DOPER|DOPES|DOPEY|DORKS|DORKY|DORMS|DOSED|DOSER|DOSES|DOTED|DOTER|DOTES|DOTTY|DOUBT|DOUGH|DOUSE|DOVES|DOVEY|DOWDY|DOWEL|DOWER|DOWNS|DOWNY|DOWRY|DOWSE|DOXIE|DOYEN|DOZED|DOZEN|DOZER|DOZES|DRABS|DRAFT|DRAGS|DRAIN|DRAKE|DRAMA|DRAMS|DRANK|DRAPE|DRAUS|DRAWL|DRAWN|DRAWS|DRAYS|DREAD|DREAM|DREAR|DRECK|DREGS|DRESS|DRIBS|DRIED|DRIER|DRIES|DRIFT|DRILL|DRILY|DRINK|DRIPS|DRIVE|DRJPG|DROID|DROLL|DRONE|DROOL|DROOP|DROPS|DROSS|DROVE|DROWN|DRUBS|DRUGS|DRUID|DRUMS|DRUNK|DRYAD|DRYER|DRYLY|DUALS|DUCAL|DUCAT|DUCES|DUCHY|DUCKS|DUCKY|DUCTS|DUDDY|DUDES|DUELS|DUETS|DUFFS|DUGIN|DUKES|DULLS|DULLY|DULSE|DUMMY|DUMPS|DUMPY|DUNCE|DUNES|DUNGS|DUNGY|DUNKS|DUNNO|DUOMO|DUPED|DUPER|DUPES|DUPLE|DURST|DUSKS|DUSKY|DUSTS|DUSTY|DUTCH|DUVAC|DUVET|DWARF|DWEEB|DWELL|DWELT|DYADS|DYAUS|DYERS|DYING|DYKES|DYNES|DZIVE|DZREE|EADOS|EAGER|EAGLE|EARED|EARLS|EARLY|EARNS|EARTH|EASED|EASEL|EASES|EASTS|EATEN|EATER|EAVES|EBBED|EBONY|EBOTS|ECHOS|ECLAT|EDEMA|EDGED|EDGER|EDGES|EDICT|EDIFY|EDITS|EDUCE|EERIE|EGADS|EGGED|EGGER|EGRET|EIDER|EIGHT|EJECT|EKING|ELAND|ELANS|ELATE|ELBOW|ELDER|ELECT|ELEGY|ELFIN|ELIDE|ELITE|ELOPE|ELSES|ELUDE|ELVEN|ELVES|EMAIL|EMBED|EMBER|EMCEE|EMEND|EMERY|EMIIL|EMIRS|EMITS|EMOJI|EMOTE|EMPTY|ENACT|ENDED|ENDER|ENDIA|ENDOW|ENDUE|ENEMA|ENEMY|ENJOY|ENNUI|ENROL|ENSUE|ENTER|ENTRY|ENVOI|ENVOY|EPACT|EPATO|EPEES|EPHAH|EPHOD|EPICS|EPOCH|EPOXY|EPSOM|EQUAL|EQUIP|ERASE|ERECT|ERODE|ERRED|ERROR|ERUCT|ERUPT|ESSAY|ESSES|ESTER|ESTOP|ETEXT|ETHER|ETHIC|ETHOS|ETHYL|ETUDE|EVADE|EVENS|EVENT|EVERY|EVICT|EVILS|EVOKE|EXACT|EXALT|EXAMS|EXCEL|EXCON|EXEAT|EXECS|EXERT|EXILE|EXIST|EXITS|EXPAT|EXPEL|EXPOS|EXTOL|EXTRA|EXUDE|EXULT|EXURB|EYERS|EYING|EYRIE|FABLE|FACED|FACER|FACES|FACET|FACIE|FACTO|FACTS|FADDY|FADED|FADER|FADES|FAERY|FAGOT|FAILS|FAINT|FAIRE|FAIRS|FAIRY|FAITH|FAKED|FAKER|FAKES|FAKIR|FALLS|FAMED|FAMES|FANCY|FANGS|FANIN|FANNY|FARAD|FARCE|FARED|FARES|FARMS|FARNS|FARTS|FASTS|FATAL|FATED|FATES|FATLY|FATSO|FATTY|FATWA|FAULT|FAUNA|FAUNS|FAVOR|FAWNS|FAWNY|FAXED|FAXER|FAXES|FAZED|FAZES|FEARS|FEAST|FEATS|FECAL|FECES|FEEDS|FEELS|FEIGN|FEINT|FEIST|FELLA|FELLS|FELON|FELTS|FEMME|FEMUR|FENCE|FENDS|FENNY|FERAL|FERMI|FERNS|FERNY|FERRY|FESTS|FETAL|FETCH|FETED|FETES|FETID|FETOR|FETUS|FEUAR|FEUDS|FEUED|FEVER|FEWER|FIATS|FIBER|FIBRE|FICHE|FICHU|FIEFS|FIELD|FIEND|FIERY|FIFES|FIFTH|FIFTY|FIGHT|FILAR|FILCH|FILED|FILER|FILES|FILET|FILLS|FILLY|FILMS|FILMY|FILTH|FINAL|FINCH|FINDS|FINED|FINER|FINES|FINIF|FINIS|FINKS|FINNY|FIORD|FIRED|FIRER|FIRES|FIRMA|FIRMS|FIRST|FIRTH|FISHY|FISTS|FISTY|FITLY|FIVER|FIVES|FIXED|FIXER|FIXES|FIXIT|FIZZY|FJORD|FLABS|FLACK|FLAGS|FLAIL|FLAIR|FLAKE|FLAKS|FLAKY|FLAME|FLAMS|FLANK|FLAPS|FLARE|FLASH|FLASK|FLATS|FLAWS|FLAYS|FLEAS|FLECK|FLEES|FLEET|FLESH|FLICK|FLICS|FLIED|FLIER|FLIES|FLING|FLINT|FLIPS|FLIRT|FLITS|FLOAT|FLOCK|FLOES|FLOGS|FLOOD|FLOOR|FLOPS|FLORA|FLOSS|FLOUR|FLOUT|FLOWN|FLOWS|FLUBS|FLUES|FLUFF|FLUID|FLUKE|FLUKY|FLUME|FLUNG|FLUNK|FLUSH|FLUTE|FLYBY|FLYER|FOALS|FOAMS|FOAMY|FOCAL|FOCUS|FOGEY|FOGGY|FOILS|FOIST|FOLDS|FOLIA|FOLIC|FOLIO|FOLKS|FOLKY|FOLLY|FONDU|FONTS|FOODS|FOOLS|FOOTS|FORAY|FORCE|FORDS|FORES|FORGE|FORGO|FORIL|FORKS|FORKY|FORMA|FORMS|FORTE|FORTH|FORTS|FORTY|FORUM|FOSSA|FOSSE|FOULS|FOUND|FOUNT|FOURS|FOVEA|FOWLS|FOXED|FOXES|FOYER|FRAIL|FRAME|FRANC|FRANK|FRATS|FRAUD|FRAYS|FREAK|FREED|FREER|FREES|FRESH|FRETS|FRIAR|FRIED|FRIER|FRIES|FRIGS|FRILL|FRISK|FRIZZ|FROCK|FROGS|FROND|FRONT|FROSH|FROST|FROTH|FROWN|FROZE|FRUIT|FRUMP|FRYER|FTPED|FUAHL|FUCKS|FUDGE|FUDGY|FUELS|FUGAL|FUGIT|FUGUE|FULLS|FULLY|FUMED|FUMER|FUMES|FUNDS|FUNGI|FUNGO|FUNKS|FUNKY|FUNNY|FURLS|FUROR|FURRY|FURZE|FUSED|FUSEE|FUSES|FUSSY|FUSTY|FUTON|FUZED|FUZES|FUZZY|GABBY|GABLE|GAFFE|GAFFS|GAGES|GAILY|GAINS|GAITS|GALAS|GALEN|GALES|GALLS|GAMBA|GAMED|GAMER|GAMES|GAMEY|GAMIC|GAMIN|GAMMA|GAMUT|GANEF|GANGS|GAOLS|GAPED|GAPER|GAPES|GAPPY|GARBS|GARDE|GASES|GASPS|GASSY|GATED|GATES|GATOR|GAUDY|GAUGE|GAUNT|GAUSS|GAUZE|GAUZY|GAVEL|GAWKS|GAWKY|GAYER|GAYLY|GAZED|GAZER|GAZES|GEARS|GECKO|GEEKS|GEESE|GELDS|GENES|GENET|GENIE|GENII|GENRE|GENTS|GENUS|GEODE|GEOID|GERMS|GESSO|GETHA|GETUP|GHAST|GHOST|GHOTI|GHOUL|GIANT|GIBED|GIBER|GIBES|GIDDY|GIDII|GIESA|GIFTS|GIGAS|GIGUE|GILDS|GILLS|GILTS|GIMEL|GIMME|GIMPS|GIMPY|GINNY|GIPSY|GIRDS|GIRLS|GIRLY|GIROS|GIRTH|GIRTS|GISMO|GISTS|GIVEN|GIVER|GIVES|GIZMO|GLADE|GLADS|GLAES|GLAND|GLANS|GLARE|GLARY|GLASS|GLAZE|GLEAM|GLEAN|GLEBE|GLEES|GLENS|GLIDE|GLINT|GLITZ|GLOAT|GLOBE|GLOBS|GLOMS|GLOOM|GLORY|GLOSS|GLOVE|GLOWS|GLUED|GLUER|GLUES|GLUEY|GLUON|GLUTS|GLYPH|GMNPC|GNARL|GNASH|GNATS|GNAWS|GNOME|GOADS|GOALS|GOATS|GODLY|GOERS|GOEST|GOETH|GOFER|GOING|GOLDS|GOLEM|GOLFS|GOLLY|GONAD|GONER|GONGS|GONNA|GONZO|GOODS|GOODY|GOOEY|GOOFS|GOOFY|GOOKS|GOOKY|GOONS|GOONY|GOOPY|GOOSE|GOOSY|GORED|GORES|GORGE|GORSE|GOTHS|GOTTA|GOUDA|GOUGE|GOURD|GOUTS|GOUTY|GOWNS|GOYIM|GRABS|GRACE|GRADE|GRADS|GRAFT|GRAIL|GRAIN|GRAMS|GRAND|GRANT|GRAPE|GRAPH|GRAPY|GRASP|GRASS|GRATA|GRATE|GRAVE|GRAVY|GRAYS|GRAZE|GREAT|GREBE|GREED|GREEK|GREEN|GREET|GRELL|GREPS|GREWD|GREYS|GRIDS|GRIEF|GRIFT|GRILL|GRIME|GRIMY|GRIND|GRINS|GRIPE|GRIPS|GRIST|GRITS|GROAN|GROAT|GRODY|GROGS|GROIN|GROKS|GRONK|GROOK|GROOM|GROPE|GROSS|GROUP|GROUT|GROVE|GROWL|GROWN|GROWS|GRUBS|GRUEL|GRUFF|GRUMP|GRUNT|GUANO|GUARD|GUAVA|GUESS|GUEST|GUIDE|GUILD|GUILE|GUILT|GUISE|GULAG|GULCH|GULES|GULFS|GULLS|GULLY|GULPS|GUMBO|GUMMY|GUNKS|GUNKY|GUNNY|GUPPY|GURUS|GUSHY|GUSTO|GUSTS|GUSTY|GUTSY|GUTTA|GUTTY|GUYED|GWETH|GWINE|GYPPY|GYPSY|GYROS|GYVED|GYVES|HABIT|HACKS|HADDA|HADES|HADNT|HADST|HAFTA|HAFTS|HAFWA|HAIKU|HAILS|HAIRS|HAIRY|HALED|HALER|HALES|HALLO|HALLS|HALMA|HALOS|HALTS|HALVE|HAMES|HAMMY|HAMZA|HANDS|HANDY|HANGS|HANKS|HANKY|HAPAX|HAPLY|HAPPY|HARDY|HAREM|HARES|HARKS|HARMS|HARPS|HARPY|HARRY|HARSH|HARTS|HARUM|HASNT|HASPS|HASTE|HASTY|HATCH|HATED|HATER|HATES|HAULS|HAUNT|HAUTE|HAVEN|HAVES|HAVOC|HAWED|HAWKS|HAYED|HAYER|HAYEY|HAZED|HAZEL|HAZER|HAZES|HEADS|HEADY|HEALS|HEAPS|HEARD|HEARS|HEART|HEATH|HEATS|HEAVE|HEAVY|HEDGE|HEEDS|HEELS|HEERD|HEFTS|HEFTY|HEIGH|HEIRS|HEIST|HELIX|HELLO|HELLS|HELMS|HELPS|HEMPS|HEMPY|HENCE|HENGE|HENNA|HENRY|HERBS|HERBY|HERDS|HEREM|HERES|HERON|HEROS|HERTZ|HESHE|HEWED|HEWER|HEXAD|HEXED|HEXER|HEXES|HHRKI|HICKS|HIDER|HIDES|HIGHS|HIKED|HIKER|HIKES|HILAR|HILLS|HILLY|HILTS|HILUM|HIMBO|HINDS|HINGE|HINTS|HIPPO|HIPPY|HIRED|HIRER|HIRES|HITCH|HIVED|HIVER|HIVES|HOAGY|HOARD|HOARS|HOARY|HOBBY|HOBOS|HOCKS|HOCUS|HODAD|HOERS|HOGAN|HOIST|HOKEY|HOKUM|HOLDS|HOLED|HOLER|HOLES|HOLEY|HOLLY|HOLON|HOMED|HOMER|HOMES|HOMEY|HOMME|HOMOS|HONED|HONER|HONES|HONEY|HONKS|HONKY|HONOR|HOOCH|HOODS|HOOEY|HOOFS|HOOKS|HOOKY|HOOPS|HOOTS|HOPED|HOPER|HOPES|HOPPY|HORDE|HORNS|HORNY|HORSE|HORSY|HOSED|HOSES|HOSTS|HOTEL|HOTLY|HOUND|HOURI|HOURS|HOUSE|HOVEL|HOVER|HOWDY|HOWLS|HUBBA|HUBBY|HUFFS|HUFFY|HUGER|HULAS|HULKS|HULKY|HULLO|HULLS|HUMAN|HUMID|HUMOR|HUMPF|HUMPH|HUMPS|HUMPY|HUMUS|HUNCH|HUNKS|HUNKY|HUNTS|HURLS|HURLY|HURRY|HURTS|HUSKS|HUSKY|HUSSY|HUTCH|HUZZA|HYDRA|HYDRO|HYENA|HYING|HYMEN|HYMNS|HYPED|HYPER|HYPES|HYPOS|IAMBS|IAZEN|IBBST|ICERS|ICHOR|ICIER|ICILY|ICING|ICONS|ICUTU|IDEAL|IDEAS|IDIOM|IDIOT|IDLED|IDLER|IDLES|IDOLS|IDONS|IDYLL|IDYLS|IGLOO|IKATS|IKONS|ILAYA|ILEUM|ILEUS|ILIAC|ILIUM|IMAGE|IMAGO|IMAMS|IMBED|IMBUE|IMMIX|IMPEL|IMPLY|IMPRO|INANE|INAPT|INCUR|INDEX|INDIE|INEPT|INERT|INFER|INFIX|INFRA|INGOT|INJUN|INKED|INKER|INLAY|INLET|INNER|INODE|INPUT|INSET|INTER|INTRA|INTRO|INURE|IOCTL|IODIC|IONIC|IOTAS|IRATE|IRKED|IRNAN|IRONS|IRONY|ISEUM|ISLES|ISLET|ISSUE|ITCHY|ITEMS|IVIED|IVIES|IVORY|IXAEM|IXNAY|JACKS|JADED|JADES|JAGGY|JAILS|JAKES|JAMBS|JAMMY|JANES|JAPAN|JARES|JAUNT|JAVAC|JAWED|JAZZY|JEANS|JEEPS|JEERS|JELLO|JELLS|JELLY|JENNY|JERKS|JERKY|JERRY|JESTS|JETTY|JEWEL|JIBED|JIBER|JIBES|JIFFS|JIFFY|JIHAD|JILTS|JIMMY|JINGO|JINGS|JINKS|JINNS|JIVED|JIVES|JOCKS|JOEYS|JOHNS|JOINS|JOINT|JOIST|JOKED|JOKER|JOKES|JOLAS|JOLLY|JOLTS|JOMAY|JOULE|JOUST|JOWLS|JOWLY|JOYED|JUDGE|JUDOS|JUICE|JUICY|JUJUS|JUKES|JULEP|JUMBO|JUMPS|JUMPY|JUNCO|JUNKS|JUNKY|JUNTA|JUROR|JUSTE|JUTES|KABOB|KAIAK|KAITH|KALAG|KALEN|KALES|KAPOK|KAPPA|KAPUT|KARAT|KARMA|KAYAK|KAYOS|KAZOO|KEBAB|KEBOB|KEELS|KEENS|KEEPS|KEFIR|KELLY|KELPS|KELPY|KENAF|KEPIS|KERBS|KERFS|KERNS|KETCH|KEYED|KEYER|KHAKI|KHANS|KHRIS|KICKS|KICKY|KIDDO|KIIJA|KIKES|KILLS|KILNS|KILOS|KILTS|KILTY|KINDA|KINDS|KINGS|KINKS|KINKY|KIOSK|KIRKS|KITED|KITES|KITHS|KITTY|KIVAS|KIWIS|KLIEG|KLUGE|KLUGY|KLUNK|KLUTZ|KNACK|KNAVE|KNEAD|KNEED|KNEEL|KNEES|KNELL|KNELT|KNIFE|KNISH|KNITS|KNOBS|KNOCK|KNOLL|KNOPS|KNOTS|KNOUT|KNOWN|KNOWS|KNURL|KOALA|KOINE|KOOKS|KOOKY|KOPEK|KOROR|KRAAL|KRAEL|KRAUT|KRILL|KRONA|KRONE|KUDOS|KUDZU|KULAK|KYRIE|LABEL|LABIA|LABOR|LACED|LACER|LACES|LACEY|LACKS|LADED|LADEN|LADES|LADLE|LADOC|LAGER|LAIRD|LAIRS|LAITY|LAKER|LAKES|LAMAS|LAMBS|LAMED|LAMER|LAMES|LAMPS|LANAI|LANCE|LANDS|LANES|LANKY|LAPEL|LAPIN|LAPIS|LAPSE|LARCH|LARDS|LARDY|LARGE|LARGO|LARKS|LARVA|LASED|LASER|LASES|LASSO|LASTS|LATCH|LATER|LATEX|LATHE|LATHS|LATIN|LATUS|LAUDE|LAUDS|LAUGH|LAVAS|LAVED|LAVER|LAVES|LAWNS|LAWNY|LAWZY|LAXER|LAXLY|LAYER|LAYUP|LAZED|LAZES|LEACH|LEADS|LEAFS|LEAFY|LEAKS|LEAKY|LEANS|LEANT|LEAPS|LEAPT|LEARN|LEASE|LEASH|LEAST|LEAVE|LEDGE|LEECH|LEEKS|LEERS|LEERY|LEFTS|LEFTY|LEGAL|LEGGO|LEGGY|LEGIT|LEGOS|LEMMA|LEMME|LEMON|LEMUR|LENDS|LENTO|LEPER|LEPTA|LETUP|LEVEE|LEVEL|LEVER|LEVIS|LIARS|LIBEL|LIBRA|LICIT|LICKS|LIEGE|LIENS|LIERS|LIEST|LIETH|LIFER|LIFTS|LIGHT|LIGNE|LIKED|LIKEN|LIKER|LIKES|LILAC|LILTS|LILTY|LIMBO|LIMBS|LIMBY|LIMED|LIMEN|LIMES|LIMEY|LIMIT|LIMNS|LIMOS|LIMPS|LINED|LINEN|LINER|LINES|LINGO|LINGS|LINKS|LINTS|LINTY|LIONS|LIPID|LIPPY|LIRAS|LIRUM|LISLE|LISPS|LISTS|LITER|LITES|LITHE|LITHO|LITRE|LIVED|LIVEN|LIVER|LIVES|LIVID|LIVRE|LKARM|LLAMA|LOADS|LOAFS|LOAMS|LOAMY|LOANS|LOATH|LOBAR|LOBBY|LOBED|LOBES|LOCAL|LOCHS|LOCKS|LOCOS|LOCUS|LODES|LODGE|LOESS|LOFTS|LOFTY|LOGES|LOGGY|LOGIC|LOGIN|LOGOS|LOINS|LOLLS|LOLLY|LONER|LONGS|LOOKS|LOOKY|LOOMS|LOONS|LOONY|LOOPS|LOOPY|LOOSE|LOOTS|LOPED|LOPER|LOPES|LOPPY|LORDS|LORDY|LORES|LORRY|LOSER|LOSES|LOSSY|LOTSA|LOTTA|LOTTO|LOTUS|LOUIS|LOUSE|LOUSY|LOUTS|LOVED|LOVER|LOVES|LOWED|LOWER|LOWLY|LOXES|LOYAL|LUAUS|LUBES|LUBRA|LUCID|LUCKS|LUCKY|LUCRE|LULAB|LULLS|LULUS|LUMEN|LUMPS|LUMPY|LUNAR|LUNCH|LUNES|LUNGE|LUNGS|LUPUS|LURCH|LURED|LURER|LURES|LURID|LURKS|LUSTS|LUSTY|LUTED|LUTES|LUVYA|LUXES|LYCRA|LYING|LYMPH|LYNCH|LYRAS|LYRES|LYRIC|MACAW|MACED|MACER|MACES|MACHO|MACJA|MACRO|MADAM|MADLY|MAFIA|MAGEN|MAGES|MAGIC|MAGMA|MAGNA|MAGUS|MAHUA|MAIDS|MAILS|MAIMS|MAINS|MAIZE|MAJOR|MAKER|MAKES|MALES|MALKO|MALLS|MALTS|MALTY|MAMAS|MAMBA|MAMBO|MAMMA|MAMMY|MAMNI|MANED|MANES|MANGE|MANGO|MANGY|MANIA|MANIC|MANLY|MANNA|MANOR|MANSE|MANTA|MAPLE|MARCH|MARES|MARGE|MARIA|MARIG|MARKS|MARLS|MARRY|MARSH|MARTS|MASER|MASHY|MASKS|MASON|MASSE|MASTS|MATAR|MATCH|MATED|MATER|MATES|MATEY|MATHS|MATTE|MATZO|MAULS|MAUVE|MAVEN|MAVIS|MAXIM|MAXIS|MAYBE|MAYOR|MAYST|MAZED|MAZER|MAZES|MEADS|MEALS|MEALY|MEANS|MEANT|MEANY|MEATS|MEATY|MEBBE|MECCA|MECHS|MECUM|MEDAL|MEDIA|MEDIC|MEETS|MELBA|MELDS|MELEE|MELON|MELTS|MEMES|MEMOS|MENDS|MENUS|MEOWS|MERCY|MERGE|MERIT|MERRY|MERSE|MESAS|MESNE|MESON|MESSY|METAL|METED|METER|METES|METRE|METRO|MEWED|MEZZO|MIAOW|MICAS|MICKS|MICRO|MIDDY|MIDIS|MIDST|MIELE|MIENS|MIETH|MIEWS|MIFFS|MIGHT|MIKED|MIKES|MILCH|MILER|MILES|MILKS|MILKY|MILLS|MIMED|MIMEO|MIMER|MIMES|MIMIC|MIMSY|MINAS|MINCE|MINDS|MINED|MINER|MINES|MINIM|MINIS|MINKS|MINOR|MINTS|MINUS|MIRED|MIREK|MIRES|MIRTH|MISER|MISSY|MISTS|MISTY|MITER|MITES|MITRE|MITTS|MIXED|MIXER|MIXES|MIXUP|MOANS|MOATS|MOCHA|MOCKS|MODAL|MODEL|MODEM|MODES|MODUS|MOGUL|MOHEL|MOIRE|MOIST|MOLAL|MOLAR|MOLAS|MOLDS|MOLDY|MOLES|MOLLS|MOLLY|MOLTO|MOLTS|MOMMA|MOMMY|MONAD|MONDO|MONEY|MONIC|MONKS|MONTE|MONTH|MOOCH|MOODS|MOODY|MOOED|MOOLA|MOONS|MOONY|MOORS|MOOSE|MOOTS|MOPED|MOPER|MOPES|MORAH|MORAL|MORAY|MOREL|MORES|MORIT|MORNS|MORON|MORPH|MORTS|MORUM|MOSEY|MOSSY|MOSTS|MOTEL|MOTES|MOTET|MOTHS|MOTHY|MOTIF|MOTOR|MOTTO|MOULD|MOULT|MOUND|MOUNT|MOURN|MOUSE|MOUSY|MOUTH|MOVED|MOVER|MOVES|MOVIE|MOWED|MOWER|MOXIE|MRADS|MRISS|MUCHO|MUCKS|MUCKY|MUCUS|MUDDY|MUFFS|MUFTI|MUGGY|MUJIK|MULCH|MULCT|MULES|MULEY|MULLS|MUMBO|MUMMY|MUMPS|MUNCH|MUNGE|MUNGS|MUNGY|MUONS|MURAL|MURKS|MURKY|MUSED|MUSER|MUSES|MUSHY|MUSIC|MUSKS|MUSKY|MUSOS|MUSSY|MUSTA|MUSTS|MUSTY|MUTED|MUTER|MUTES|MUTTS|MUXES|MYLAR|MYNAH|MYNAS|MYRRH|MYTHS|NABLA|NABOB|NACHO|NADIR|NAIAD|NAILS|NAIVE|NAKED|NAMED|NAMER|NAMES|NANNY|NAPES|NAPPY|NARCO|NARCS|NARDS|NARES|NASAL|NASTY|NATAL|NATCH|NATES|NATTY|NAVAL|NAVEL|NAVES|NEARS|NEATH|NEATO|NECKS|NEEDS|NEEDY|NEFIS|NEGRO|NEIGH|NENAV|NEONS|NERDS|NERDY|NERFS|NERTS|NERVE|NERVY|NESTS|NEVER|NEWEL|NEWER|NEWLY|NEWSY|NEWTS|NEXUS|NICAD|NICER|NICHE|NICKS|NIECE|NIFTY|NIGHT|NIHIL|NILME|NIMBI|NINES|NINJA|NINNY|NINTH|NIPOH|NIPPY|NISEI|NISSA|NITER|NITRO|NITTY|NIXED|NIXES|NIXIE|NOBBY|NOBLE|NOBLY|NODAL|NODDY|NODES|NOELS|NOHOW|NOIRE|NOISE|NOISY|NOMAD|NONCE|NONES|NONNY|NOOKS|NOOKY|NOONS|NOOSE|NORMS|NORTH|NOSED|NOSES|NOSEY|NOTCH|NOTED|NOTER|NOTES|NOUNS|NOVAE|NOVAS|NOVEL|NOVUS|NOWAY|NUDER|NUDES|NUDGE|NUDIE|NUKED|NUKES|NULLS|NUMBS|NURBS|NURSE|NUTSY|NUTTY|NYLON|NYMPH|OAKEN|OAKUM|OARED|OASES|OASIS|OATEN|OATHS|OBEAH|OBESE|OBEYS|OBITS|OBOES|OCCUR|OCEAN|OCHER|OCHRE|OCTAL|OCTET|ODDER|ODDLY|ODIUM|ODORS|ODOUR|OFFAL|OFFED|OFFEN|OFFER|OFFON|OFNOR|OFTEN|OGLED|OGLER|OGLES|OGRES|OHHHH|OHMIC|OILED|OILER|OINKS|OINKY|OKAPI|OKAYS|OKNOR|OKRAS|OLDEN|OLDER|OLDIE|OLEOS|OLIOS|OLIVE|OLKAR|OLVIO|OMBRE|OMEGA|OMENS|OMITS|ONCET|ONION|ONSET|OODLE|OOMPH|OOZED|OOZES|OPALS|OPENS|OPERA|OPINE|OPIUM|OPTED|OPTIC|OPYUR|ORALS|ORATE|ORAUS|ORBED|ORBIT|ORCAS|ORDER|ORGAN|ORIIV|ORING|ORLON|ORTHO|OSAEN|OSIER|OSREL|OSVEN|OTHER|OTTER|OUGHT|OUIJA|OUNCE|OUSEL|OUSTS|OUTDO|OUTEN|OUTER|OUTGO|OUTTA|OUZEL|OVALS|OVARY|OVATE|OVENS|OVERS|OVERT|OVOID|OVULE|OWEST|OWETH|OWING|OWLET|OWNED|OWNER|OXBOW|OXEYE|OXIDE|OXLIP|OZONE|PACED|PACER|PACES|PACKS|PACTS|PADDY|PADRE|PAEAN|PAGAN|PAGED|PAGER|PAGES|PAILS|PAINS|PAINT|PAIRS|PALED|PALER|PALES|PALLS|PALLY|PALMS|PALMY|PALSY|PAMPA|PANDA|PANED|PANEL|PANES|PANGA|PANGS|PANIC|PANSY|PANTS|PANTY|PAPAL|PAPAS|PAPAW|PAPER|PAPPY|PARAS|PARCH|PARDS|PARED|PAREN|PARER|PARES|PARKA|PARKS|PARRY|PARSE|PARTS|PARTY|PASHA|PASSE|PASSS|PASTA|PASTE|PASTS|PASTY|PATCH|PATEN|PATER|PATES|PATHS|PATIO|PATSY|PATTY|PAUSE|PAVAN|PAVED|PAVER|PAVES|PAWED|PAWER|PAWKY|PAWLS|PAWNS|PAYED|PAYEE|PAYER|PEACE|PEACH|PEAKS|PEAKY|PEALS|PEARL|PEARS|PEASE|PEATS|PEATY|PECAN|PECKS|PEDAL|PEEKS|PEELS|PEENS|PEEPS|PEERS|PEEVE|PEKOE|PELAN|PELTS|PENAL|PENCE|PENDS|PENES|PENGO|PENIS|PENNY|PEONS|PEONY|PEPPY|PERCH|PERDU|PERIL|PERKS|PERKY|PERMS|PESKY|PESOS|PESTO|PESTS|PETAL|PETER|PETIT|PETRI|PETTY|PEWEE|PEWIT|PFFFT|PHAGE|PHASE|PHIAL|PHLOX|PHONE|PHONY|PHOTO|PHYLA|PIANO|PICAS|PICKS|PICKY|PICOT|PIECE|PIERS|PIETA|PIETY|PIGGY|PIGMY|PIING|PIKER|PIKES|PILAF|PILAU|PILED|PILES|PILLS|PILOT|PIMPS|PINCH|PINED|PINES|PINEY|PINGS|PINKO|PINKS|PINKY|PINTO|PINTS|PINUP|PIONS|PIOUS|PIPED|PIPER|PIPES|PIPET|PIQUE|PISMO|PITAS|PITCH|PITHS|PITHY|PITON|PIVOT|PIVUH|PIXEL|PIXIE|PIZZA|PLACE|PLAID|PLAIN|PLAIT|PLANE|PLANK|PLANS|PLANT|PLASH|PLASM|PLATE|PLATS|PLAYA|PLAYS|PLAZA|PLEAD|PLEAS|PLEAT|PLEBE|PLEBS|PLEIN|PLENA|PLIED|PLIES|PLINK|PLODS|PLONK|PLOPS|PLOTS|PLOWS|PLOYS|PLUCK|PLUGS|PLUMB|PLUME|PLUMP|PLUMS|PLUMY|PLUNK|PLUSH|PLYER|POACH|POCKS|POCKY|PODGY|PODIA|POEMS|POESY|POETS|POINT|POISE|POKED|POKER|POKES|POKEY|POLAR|POLED|POLER|POLES|POLIO|POLIS|POLKA|POLLS|POLLY|POLOS|POLYP|POMPS|PONDS|PONES|POOCH|POOEY|POOFS|POOHS|POOLS|POOPS|POPES|POPPY|PORCH|PORED|PORES|PORGY|PORKS|PORKY|PORNO|PORTS|POSED|POSER|POSES|POSET|POSIT|POSSE|POSTE|POSTS|POTTY|POUCH|POUFS|POUND|POURS|POUTS|POWER|POXED|POXES|PRAMS|PRANK|PRATE|PRATS|PRAWN|PRAYK|PRAYS|PREEN|PREPS|PRESS|PREST|PREXY|PREYS|PRICE|PRICK|PRIDE|PRIED|PRIER|PRIES|PRIGS|PRIMA|PRIME|PRIMO|PRIMP|PRIMS|PRINK|PRINT|PRIOR|PRISE|PRISM|PRIVY|PRIZE|PROBE|PRODS|PROEM|PROFS|PROMO|PROMS|PRONE|PRONG|PROOF|PROPS|PROSE|PROSY|PROUD|PROVE|PROWL|PROWS|PROXY|PRUDE|PRUNE|PRUTA|PRYER|PSALM|PSEUD|PSHAW|PSOAS|PSSST|PSYCH|PUBES|PUBIC|PUBIS|PUCKS|PUDGY|PUFFS|PUFFY|PUKED|PUKES|PUKKA|PULLS|PULPS|PULPY|PULSE|PUMAS|PUMPS|PUNCH|PUNKS|PUNKY|PUNNY|PUNTS|PUPAE|PUPAL|PUPAS|PUPIL|PUPPY|PUREE|PURER|PURGE|PURLS|PURRS|PURSE|PURTY|PUSHY|PUSSY|PUTTS|PUTTY|PYGMY|PYLON|PYRES|PYXIE|QOPHS|QUACK|QUADS|QUAFF|QUAIL|QUAIS|QUAKE|QUALM|QUALS|QUARK|QUART|QUASH|QUASI|QUAYS|QUEEN|QUEER|QUELL|QUERI|QUERY|QUEST|QUEUE|QUICK|QUIDS|QUIET|QUIFF|QUILL|QUILT|QUINT|QUIPS|QUIPU|QUIRE|QUIRK|QUIRT|QUITE|QUITS|QUOIN|QUOIT|QUOTA|QUOTE|QUOTH|RABBI|RABID|RACED|RACER|RACES|RACKS|RADAR|RADII|RADIO|RADIX|RADON|RAESH|RAFTS|RAGED|RAGER|RAGES|RAIDS|RAILS|RAINS|RAINY|RAISE|RAJAH|RAJAS|RAKED|RAKER|RAKES|RALEL|RALLY|RAMPS|RANCH|RANDS|RANDY|RANGE|RANGY|RANIK|RANKS|RANTS|RAPED|RAPER|RAPES|RAPID|RARER|RASAE|RASPS|RASPY|RATED|RATER|RATES|RATHA|RATHS|RATIO|RATTY|RAVED|RAVEL|RAVEN|RAVER|RAVES|RAWER|RAWLY|RAYED|RAYON|RAZED|RAZER|RAZES|RAZOR|REACH|REACT|READS|READY|REALM|REALS|REAMS|REAPS|REARM|REARS|REBAR|REBEL|REBID|REBOX|REBUS|REBUT|RECAP|RECTA|RECTO|RECUR|RECUT|REDID|REDIP|REDLY|REDOX|REDUX|REEDS|REEDY|REEFS|REEKS|REEKY|REELS|REEVE|REFER|REFIT|REFIX|REFLY|REFRY|REGAL|REGEN|REHAB|REIFY|REIGN|REINS|REJUV|RELAX|RELAY|RELET|RELIC|REMAN|REMAP|REMIT|REMIX|RENAL|RENDS|RENEW|RENSH|RENTE|RENTS|REPAY|REPEL|REPLY|REPRO|RERAN|RERUN|RESAW|RESAY|RESET|RESEW|RESIN|RESTS|RESUM|RETAN|RETCH|RETRO|RETRY|REUSE|REVEL|REVET|REVUE|REWED|RHEAS|RHEUM|RHINO|RHOAT|RHUMB|RHYME|RIALS|RIBBY|RICED|RICER|RICES|RIDER|RIDES|RIDGE|RIDGY|RIFER|RIFLE|RIFTS|RIGBY|RIGHT|RIGID|RIGOR|RIINI|RILED|RILES|RILLE|RILLS|RIMED|RIMER|RIMES|RINDS|RINGS|RINKS|RINSE|RIOTS|RIPEN|RIPER|RISEN|RISER|RISES|RISIK|RISKS|RISKY|RITES|RITZY|RIVAL|RIVED|RIVEN|RIVER|RIVES|RIVET|RIVYN|ROACH|ROADS|ROAMS|ROANS|ROARS|ROAST|ROBED|ROBES|ROBIN|ROBLE|ROBOT|ROBYN|ROCKS|ROCKY|RODEO|ROGER|ROGUE|ROIDS|ROILS|ROILY|ROLES|ROLLS|ROMAN|ROMPS|RONDO|ROODS|ROOFS|ROOKS|ROOKY|ROOMS|ROOMY|ROOST|ROOTS|ROOTY|ROPED|ROPER|ROPES|ROSES|ROSIN|ROTOR|ROUGE|ROUGH|ROUND|ROUSE|ROUST|ROUTE|ROUTS|ROVED|ROVER|ROVES|ROWAN|ROWDY|ROWED|ROWER|ROYAL|RUBES|RUBLE|RUCHE|RUDDY|RUDER|RUFFS|RUGBY|RUING|RUINS|RULED|RULER|RULES|RUMBA|RUMEN|RUMMY|RUMOR|RUMPS|RUNES|RUNGS|RUNIC|RUNNY|RUNTS|RUNTY|RUPEE|RURAL|RUSES|RUSKS|RUSSE|RUSTS|RUSTY|RUTTY|SABER|SABLE|SABRA|SABRE|SACKS|SADLY|SAFER|SAFES|SAGAS|SAGER|SAGES|SAHIB|SAHRA|SAILS|SAINT|SAIST|SAITH|SAKES|SALAD|SALES|SALLY|SALON|SALSA|SALTS|SALTY|SALVE|SALVO|SAMBA|SANDS|SANDY|SANER|SANYU|SAPPY|SARAN|SARBU|SARGE|SARIS|SASSY|SATED|SATES|SATIN|SATYR|SAUCE|SAUCY|SAUNA|SAUTE|SAVED|SAVER|SAVES|SAVOR|SAVVY|SAWED|SAWER|SAXES|SAYER|SCABS|SCADS|SCALD|SCALE|SCALP|SCALY|SCAMP|SCAMS|SCANS|SCANT|SCARE|SCARF|SCARP|SCARS|SCARY|SCATS|SCENE|SCENT|SCHMO|SCHWA|SCION|SCOFF|SCOIN|SCOLD|SCONE|SCOOP|SCOOT|SCOPE|SCOPS|SCORE|SCORN|SCOUR|SCOUT|SCOWL|SCOWS|SCRAM|SCRAP|SCREW|SCRIM|SCRIP|SCROD|SCRUB|SCRUM|SCUBA|SCUDI|SCUDO|SCUDS|SCUFF|SCULL|SCUMS|SCURF|SCUSE|SCUZZ|SEALS|SEAMS|SEAMY|SEARS|SEATS|SEBUM|SECCO|SECTS|SEDAN|SEDER|SEDGE|SEDGY|SEDUM|SEEDS|SEEDY|SEEKS|SEEMS|SEEPS|SEERS|SEEST|SEETH|SEGUE|SEIGE|SEINE|SEIZE|SELAH|SELAN|SELFS|SELLS|SEMEN|SEMIS|SENCI|SENDS|SENSE|SEORD|SEPAL|SEPIA|SEPOY|SEPTA|SERFS|SERGE|SERIF|SERUM|SERVE|SERVO|SETUP|SEVAN|SEVEN|SEVER|SEWED|SEWER|SEXED|SEXES|SHACK|SHADE|SHADS|SHADY|SHAFT|SHAGS|SHAHS|SHAKE|SHAKO|SHAKY|SHALE|SHALL|SHALT|SHAME|SHAMS|SHANK|SHAPE|SHARD|SHARE|SHARK|SHARP|SHAVE|SHAWL|SHAWM|SHAYS|SHEAF|SHEAR|SHEDS|SHEEN|SHEEP|SHEER|SHEET|SHEIK|SHELF|SHELL|SHERD|SHEWS|SHIED|SHIER|SHIES|SHIFT|SHIKI|SHILL|SHIMS|SHINE|SHINS|SHINY|SHIPS|SHIRE|SHIRK|SHIRR|SHIRT|SHISH|SHITS|SHLEP|SHMOO|SHNOR|SHOAL|SHOAN|SHOAT|SHOCK|SHOED|SHOER|SHOES|SHOJI|SHONE|SHOOK|SHOOS|SHOOT|SHOPS|SHORE|SHORN|SHORT|SHOTS|SHOUT|SHOVE|SHOWN|SHOWS|SHOWY|SHRED|SHREW|SHRUB|SHRUG|SHUCK|SHUNS|SHUNT|SHUSH|SHUTE|SHUTS|SHYER|SHYLY|SIBYL|SICKO|SICKS|SICLE|SIDED|SIDES|SIDLE|SIEGE|SIEVE|SIFTS|SIGHS|SIGHT|SIGIL|SIGMA|SIGNS|SILKS|SILKY|SILLS|SILLY|SILOS|SILTS|SILTY|SINCE|SINES|SINEW|SINGE|SINGS|SINKS|SINUS|SIRAN|SIRED|SIREE|SIREN|SIRES|SIRUP|SIRYN|SISAL|SISSY|SITAR|SITED|SITES|SITUS|SIXES|SIXTH|SIXTY|SIZED|SIZER|SIZES|SKATE|SKEET|SKEIN|SKEWS|SKIDS|SKIED|SKIER|SKIES|SKIFF|SKILL|SKIMP|SKIMS|SKINS|SKINT|SKIPS|SKIRT|SKITS|SKOAL|SKULK|SKULL|SKUNK|SKYED|SLABS|SLACK|SLAGS|SLAIN|SLAKE|SLAMS|SLANG|SLANT|SLAPS|SLASH|SLATE|SLATS|SLAVE|SLAWS|SLAYS|SLEDS|SLEEK|SLEEP|SLEET|SLEPT|SLEWS|SLICE|SLICK|SLIDE|SLIER|SLILY|SLIME|SLIMS|SLIMY|SLING|SLINK|SLIPS|SLITS|SLOBS|SLOES|SLOGS|SLOMO|SLOOP|SLOPE|SLOPS|SLOSH|SLOTH|SLOTS|SLOWS|SLUED|SLUES|SLUFF|SLUGS|SLUMP|SLUMS|SLUNG|SLUNK|SLURP|SLURS|SLUSH|SLUTS|SLYER|SLYLY|SMACK|SMALL|SMART|SMASH|SMEAR|SMELL|SMELT|SMILE|SMIRK|SMITE|SMITH|SMOCK|SMOGS|SMOKE|SMOKY|SMOTE|SMURF|SMUTS|SNACK|SNAER|SNAFU|SNAGS|SNAIL|SNAKE|SNAKY|SNAPS|SNARE|SNARF|SNARK|SNARL|SNEAK|SNEER|SNIDE|SNIFF|SNIPE|SNIPS|SNITS|SNOBS|SNOOD|SNOOK|SNOOP|SNOOT|SNORE|SNORT|SNOTS|SNOUT|SNOWS|SNOWY|SNUBS|SNUCK|SNUFF|SNUGS|SOAKS|SOAPS|SOAPY|SOARS|SOBER|SOCKO|SOCKS|SOCLE|SODAS|SOFAS|SOFTS|SOFTY|SOGGY|SOILS|SOKIS|SOLAR|SOLED|SOLES|SOLID|SOLON|SOLOS|SOLUM|SOLVE|SOMAS|SONAR|SONGS|SONIC|SONLY|SONNY|SOOTH|SOOTS|SOOTY|SOPPY|SORER|SORES|SORRY|SORTA|SORTS|SOULS|SOUND|SOUPS|SOUPY|SOURS|SOUSE|SOUTH|SOWED|SOWER|SOYAS|SPACE|SPACY|SPADE|SPAKE|SPANG|SPANK|SPANS|SPARE|SPARK|SPARS|SPASM|SPATE|SPATS|SPAWN|SPAYS|SPAZZ|SPEAK|SPEAR|SPECK|SPECS|SPEED|SPELL|SPELT|SPEND|SPENT|SPERM|SPEWS|SPICE|SPICS|SPICY|SPIED|SPIEL|SPIER|SPIES|SPIFF|SPIKE|SPIKY|SPILL|SPILT|SPINA|SPINE|SPINS|SPINY|SPIRE|SPITE|SPITS|SPITZ|SPIVS|SPLAT|SPLAY|SPLIT|SPOIL|SPOKE|SPOOF|SPOOK|SPOOL|SPOON|SPOOR|SPORE|SPORT|SPOTS|SPOUT|SPRAT|SPRAY|SPREE|SPRIG|SPRIT|SPROG|SPRUE|SPUDS|SPUED|SPUME|SPUMY|SPUNK|SPURN|SPURS|SPURT|SPUTA|SQUAB|SQUAD|SQUAT|SQUAW|SQUIB|SQUID|SRAAN|SSUGI|STABS|STACK|STAFF|STAGE|STAGS|STAGY|STAID|STAIN|STAIR|STAKE|STALE|STALK|STALL|STAMP|STAND|STANK|STAPH|STARE|STARK|STARS|START|STASH|STATE|STATS|STAVE|STAYS|STEAD|STEAK|STEAL|STEAM|STEED|STEEL|STEEP|STEER|STEIN|STELA|STELE|STEMS|STENO|STEPS|STERN|STETS|STEWS|STICK|STIED|STIES|STIFF|STILE|STILL|STILT|STING|STINK|STINT|STIRS|STOAE|STOAS|STOAT|STOCK|STOGY|STOIC|STOKE|STOLE|STOMA|STOMP|STONE|STONY|STOOD|STOOL|STOOP|STOPS|STORE|STORK|STORM|STORY|STOUP|STOUT|STOVE|STOWS|STRAP|STRAW|STRAY|STREP|STREW|STRIP|STROP|STRUM|STRUT|STUBS|STUCK|STUDS|STUDY|STUFF|STUMP|STUNG|STUNK|STUNS|STUNT|STURA|STYES|STYLE|STYLI|SUAVE|SUCKS|SUDSY|SUEDE|SUERS|SUETS|SUETY|SUGAR|SUING|SUITE|SUITS|SULFA|SULKS|SULKY|SULLY|SUMAC|SUMMA|SUMPS|SUNNY|SUNUP|SUPER|SUPES|SUPRA|SURAS|SURDS|SURER|SURFS|SURGE|SURLY|SUSHI|SUTRA|SVADH|SWABS|SWAGS|SWAIN|SWAMI|SWAMP|SWANK|SWANS|SWAPS|SWARD|SWARE|SWARF|SWARM|SWART|SWASH|SWATH|SWATS|SWAYS|SWEAR|SWEAT|SWEDE|SWEEP|SWEET|SWELL|SWEPT|SWIFT|SWIGS|SWILL|SWIMS|SWINE|SWING|SWIPE|SWIRL|SWISH|SWISS|SWIVE|SWOON|SWOOP|SWORD|SWORE|SWORN|SWUNG|SYLPH|SYNCH|SYNCS|SYNOD|SYRUP|TABBY|TABLE|TABOO|TABOR|TABUS|TACET|TACIT|TACKS|TACKY|TACOS|TACTS|TAELS|TAFFY|TAGUA|TAILS|TAINT|TAIPA|TAKEN|TAKER|TAKES|TALCS|TALES|TALKS|TALKY|TALLY|TALNA|TALON|TALUS|TAMED|TAMER|TAMES|TAMPS|TANGO|TANGS|TANGY|TANKS|TANSY|TAPED|TAPER|TAPES|TAPIR|TAPIS|TARDY|TARED|TARES|TARNS|TAROS|TAROT|TARPS|TARRY|TARTS|TASKS|TASTE|TASTY|TATER|TATTY|TAUNT|TAUPE|TAWNY|TAXED|TAXER|TAXES|TAXIS|TAXOL|TAXON|TEACH|TEAKS|TEALS|TEAMS|TEARS|TEARY|TEASE|TEATS|TECHS|TECHY|TECUM|TEDDY|TEEMS|TEENS|TEENY|TEETH|TEIRO|TELEX|TELGA|TELLS|TELLY|TEMPI|TEMPO|TEMPS|TEMPT|TENCH|TENDS|TENET|TENON|TENOR|TENSE|TENTH|TENTS|TEPEE|TEPID|TERCE|TERMS|TERNS|TERRA|TERRY|TERSE|TESLA|TESTS|TESTY|TETRA|TEXAS|TEXTS|THANE|THANK|THANX|THATS|THAWS|THEES|THEFT|THEIR|THEME|THENS|THERE|THERM|THESE|THETA|THEWS|THICK|THIEF|THIGH|THINE|THING|THINK|THINS|THIRD|THONG|THORN|THOSE|THOUS|THREE|THREW|THROB|THROE|THROW|THRUM|THUDS|THUGS|THUMB|THUMP|THUNK|THWAP|THYME|TIARA|TIBIA|TICKS|TIDAL|TIDED|TIDES|TIERS|TIFFS|TIGER|TIGHT|TIKES|TIKIS|TILDE|TILED|TILER|TILES|TILLS|TILTH|TILTS|TIMED|TIMER|TIMES|TIMID|TINES|TINGE|TINGS|TINNY|TINTS|TIPPY|TIPSY|TIRED|TIRES|TIROF|TIROS|TITAN|TITER|TITHE|TITLE|TITRE|TITTY|TIZZY|TKIEL|TLIIJ|TLOOE|TOADS|TOADY|TOAST|TODAY|TODDY|TOFFS|TOFFY|TOGAS|TOILE|TOILS|TOKED|TOKEN|TOKER|TOKES|TOLLS|TOMBS|TOMES|TOMMY|TONAL|TONED|TONER|TONES|TONGS|TONIC|TOOLS|TOONS|TOOTH|TOOTS|TOPAZ|TOPED|TOPER|TOPES|TOPIC|TOPOI|TOPOS|TOQUE|TORAH|TORCH|TORIC|TORSI|TORSO|TORTE|TORTS|TORUS|TOTAL|TOTED|TOTEM|TOTER|TOTES|TOTRS|TOTTY|TOUCH|TOUGH|TOURS|TOUTS|TOVES|TOWED|TOWEL|TOWER|TOWNS|TOXIC|TOXIN|TOYED|TOYER|TOYON|TRABE|TRACE|TRACK|TRACT|TRADE|TRAIL|TRAIM|TRAIN|TRAIT|TRAMP|TRAMS|TRANS|TRAPS|TRASH|TRAWL|TRAYS|TREAD|TREAP|TREAT|TREED|TREES|TREKS|TREND|TRESS|TREWS|TREYS|TRIAD|TRIAL|TRIBE|TRIBS|TRICE|TRICK|TRIED|TRIER|TRIES|TRIKE|TRILL|TRIMS|TRIOS|TRIPE|TRIPS|TRITE|TROLL|TROMP|TROOP|TROTH|TROTS|TROUT|TROVE|TROWS|TRUCE|TRUCK|TRUED|TRUER|TRUES|TRULY|TRUMP|TRUNK|TRUSS|TRUST|TRUTH|TRYST|TSARS|TUANS|TUBAL|TUBAS|TUBBY|TUBED|TUBER|TUBES|TUCKS|TUFAS|TUFTS|TUFTY|TULIP|TULLE|TUMMY|TUMOR|TUNAS|TUNED|TUNER|TUNES|TUNIC|TUNNY|TUPLE|TURBO|TURDS|TURDY|TURFS|TURFY|TURNS|TURPS|TUSKS|TUSKY|TUTOR|TUTTI|TUTUS|TUXES|TWAIN|TWANG|TWATS|TWEAK|TWEDH|TWEED|TWEET|TWERP|TWICE|TWIGS|TWILL|TWINE|TWINK|TWINS|TWINY|TWIRL|TWIRP|TWIST|TWITS|TWIXT|TYING|TYKES|TYPAL|TYPED|TYPES|TYPOS|TYRES|TYROS|TZARS|UDDER|UKASE|ULCER|ULNAR|ULNAS|ULTRA|UMBEL|UMBER|UMBRA|UMIAK|UMPED|UMPTY|UNAPT|UNARC|UNARM|UNARY|UNATE|UNBAN|UNBAR|UNBOX|UNCAP|UNCLE|UNCUT|UNDER|UNDID|UNDUE|UNFED|UNFIT|UNFIX|UNHIP|UNHIT|UNIFY|UNION|UNITE|UNITS|UNITY|UNJAM|UNLIT|UNMAN|UNMAP|UNMET|UNPEG|UNPIN|UNRIG|UNSAY|UNSEE|UNSET|UNSEW|UNSEX|UNTIE|UNTIL|UNWED|UNWON|UNZIP|UPEND|UPPED|UPPER|UPSET|URBAN|UREAS|URGED|URGER|URGES|URINE|USAGE|USERS|USHER|USING|USUAL|USURP|USURY|UTERI|UTERO|UTTER|UVULA|VACUA|VACUO|VAGUE|VAGUS|VAILS|VALES|VALET|VALID|VALOR|VALUE|VALVE|VAMPS|VANED|VANES|VAPES|VAPID|VAPOR|VARIA|VASES|VAULT|VAUNS|VAUNT|VEALS|VEEPS|VEERS|VEGAN|VEILA|VEILS|VEINS|VEINY|VELAR|VELDS|VELDT|VENAL|VENDS|VENOM|VENTS|VENUE|VERBS|VEREK|VERGE|VERIK|VERSA|VERSE|VERSO|VERST|VERVE|VESTS|VETCH|VEXED|VEXES|VIALS|VIAND|VIBES|VICAR|VICES|VIDEO|VIERS|VIEWS|VIGIL|VIGOR|VILER|VILLA|VILLE|VILLI|VINCA|VINED|VINES|VINYL|VIOLA|VIOLS|VIPER|VIRAL|VIREO|VIRES|VIRUS|VISAS|VISED|VISES|VISIT|VISOR|VISTA|VITAE|VITAL|VITAM|VITAS|VITRO|VIVAS|VIVID|VIVRE|VIXEN|VIZOR|VOCAB|VOCAL|VODKA|VOGUE|VOICE|VOIDS|VOILA|VOILE|VOLTS|VOMIT|VOTED|VOTER|VOTES|VOUCH|VOWED|VOWEL|VOWER|VOXEL|VROOM|VULVA|VURMA|VYING|WACKO|WACKY|WADED|WADER|WADES|WADIS|WAFER|WAFTS|WAGED|WAGER|WAGES|WAGON|WAHOO|WAIFS|WAILS|WAIST|WAITS|WAIVE|WAKED|WAKEN|WAKER|WAKES|WALED|WALES|WALKS|WALLS|WALTZ|WANDS|WANED|WANES|WANLY|WANNA|WANTA|WANTS|WARDS|WARES|WARMS|WARNS|WARPS|WARTS|WARTY|WASHY|WASNT|WASPS|WASPY|WASSA|WASTE|WATCH|WATER|WATSA|WATTS|WAVED|WAVER|WAVES|WAXED|WAXEN|WAXER|WAXES|WAZOO|WEALD|WEALS|WEANS|WEARS|WEARY|WEAVE|WEBBY|WEBER|WEDGE|WEDGY|WEEDS|WEEDY|WEEKS|WEENY|WEEPS|WEEPY|WEEST|WEFTS|WEIGH|WEIRD|WEIRS|WELCH|WELDS|WELLS|WELSH|WELTS|WENCH|WENDS|WESTS|WETLY|WHACK|WHALE|WHAMS|WHANG|WHARF|WHATS|WHEAL|WHEAT|WHEEE|WHEEL|WHELK|WHELM|WHELP|WHENS|WHERE|WHETS|WHEWS|WHEYS|WHICH|WHIFF|WHILE|WHIMS|WHINE|WHINY|WHIPS|WHIPT|WHIRL|WHIRR|WHIRS|WHISH|WHISK|WHIST|WHITE|WHITS|WHIZZ|WHOAS|WHOLE|WHOMP|WHOOO|WHOOP|WHOPS|WHORE|WHORL|WHOSE|WHOSO|WHUMP|WICKS|WIDEN|WIDER|WIDOW|WIDTH|WIELD|WIFEY|WIGHT|WILCO|WILDS|WILED|WILES|WILLS|WILTS|WIMPS|WIMPY|WINCE|WINCH|WINDS|WINDY|WINED|WINES|WINEY|WINGS|WINKS|WINOS|WIPED|WIPER|WIPES|WIRED|WIRER|WIRES|WISED|WISER|WISES|WISPS|WISPY|WISTS|WITCH|WITHS|WITTY|WIVES|WIZEN|WOKEN|WOLDS|WOMAN|WOMBS|WOMEN|WONKS|WONKY|WONTS|WOODS|WOODY|WOOED|WOOER|WOOFS|WOOLS|WOOLY|WOOSH|WOOZY|WORDS|WORDY|WORKS|WORLD|WORMS|WORMY|WORRY|WORSE|WORST|WORTH|WORTS|WOULD|WOUND|WOVEN|WOWED|WOWEE|WRACK|WRAPS|WRATH|WREAK|WRECK|WRENS|WREST|WRIER|WRING|WRIST|WRITE|WRITS|WRONG|WROTE|WROTH|WRUNG|WRYER|WRYLY|WURST|XENON|XEROX|XIBAR|XORED|XOSIZ|XYLEM|XZEAN|YACHT|YAHOO|YANKS|YARDS|YARNS|YAWED|YAWLS|YAWNS|YAWNY|YAWPS|YEARN|YEARS|YEAST|YECCH|YELLA|YELLS|YELPS|YENTA|YERBA|YESES|YIELD|YIKES|YIPES|YLOSH|YOBBO|YODEL|YOGAS|YOGIC|YOGIS|YOKED|YOKEL|YOKES|YOLKS|YOLKY|YORES|YOULL|YOUNG|YOURE|YOURN|YOURS|YOUSE|YOUTH|YOUVE|YOWLS|YOYOS|YSHAI|YUCCA|YUCKY|YUKKY|YULES|YUMMY|YURTS|ZALDI|ZANDS|ZAPPY|ZAYIN|ZEALS|ZEBRA|ZEBUS|ZEROS|ZESTS|ZESTY|ZETAS|ZILCH|ZILLS|ZINCS|ZINGS|ZINGY|ZIPPY|ZIPSY|ZLOTY|ZOHLU|ZOMBI|ZONAL|ZONED|ZONES|ZONKS|ZOOEY|ZOOKS|ZOOMS|ZOWIE|ZUKIR|ALLAY|CABAL|

	gosub DRWordle.UpdateWordBankCount

return

DRWordle.UpdateWordBankCount:
	pause .0001
	gosub DRWordle.Echo %DRWordle._textColor._info --- Word bank created, recalculating size
	eval DRWordle._wordBankCount count("%DRWordle._wordBank","|")
return

DRWordle.InputCheck:
	if ("%1" = "help") then {
		debug 0
		put #echo %DRWordle._textColor._info **********************************
		put #echo %DRWordle._textColor._info ** By default will not do the   
		put #echo %DRWordle._textColor._info ** inputs autonomously.  Check  
		put #echo %DRWordle._textColor._info ** configs at the top of file.  
		put #echo %DRWordle._textColor._info ** 
		put #echo %DRWordle._textColor._info ** To run, just be in a room 
		put #echo %DRWordle._textColor._info ** with a time lock with a pass.
		put #echo %DRWordle._textColor._info ** 
		put #echo %DRWordle._textColor._info ** Mods: 
		put #echo %DRWordle._textColor._info ** .DRWordle debug - test case only
		put #echo %DRWordle._textColor._info ** .DRWordle solve - Attempts to 
		put #echo %DRWordle._textColor._info ** solve one puzzle - see config
		put #echo %DRWordle._textColor._info ** 
		put #echo %DRWordle._textColor._info ** type PROCESSLASTMOVE! to force processing
		put #echo %DRWordle._textColor._info ** Not recommended while doing the
		put #echo %DRWordle._textColor._info ** initial prune
		put #echo %DRWordle._textColor._info **********************************
		goto DRWordle.Exit
	}

	if ("%1" = "debug") then {

		put #echo %DRWordle._textColor._info **********************************
		put #echo %DRWordle._textColor._info ** Starting testcases
		put #echo %DRWordle._textColor._info ** use #parse NEXTCASE to progress
		put #echo %DRWordle._textColor._info **********************************

		gosub DRWordle.TestCase.TestActions
		goto DRWordle.Exit
	}

	if ("%1" = "solve") then {
		gosub DRWordle.startPuzzle
		goto DRWordle.Exit
	}

	put #echo %DRWordle._textColor._warning No valid input detected. Run ".DRWordle help" without the quotes
goto DRWordle.Emergency.Exit

############################################# CLEANING FUNCTIONS #############################

DRWordle.PostProcessing:
	#good, bad, positioning.  This is for optimization on removal.  if no change, don't check words against that condition. 
	var DRWordle.PostProcessing.foundLetterChangeG 0
	var DRWordle.PostProcessing.foundLetterChangeB 0
	var DRWordle.PostProcessing.foundLetterChangeP 0
	############## BAD WORD MIX ###############
	# clean up bad letter mix.  	
	# Yes, I could (should?) make this a reusable function, but I'm leaving it as is to help with readibility later
	# I may remove the eval / comparison later too and just put the post processing change flag in the clean word section, but
	# I'm not realy a fan of turning local variables into globals

		gosub DRWordle.Echo %DRWordle._textColor._info ........starting bad word analysis 
		eval DRWordle.PostProcessing.tmp count("%DRWordle._badLetters","|")
		gosub DRWordle.CheckDirtyWord bad
		eval DRWordle.PostProcessing.tmp2 count("%DRWordle._badLetters","|")	
	
	#     Any changes? If yes, remove words from word bank when pruning starts
		if (%DRWordle.PostProcessing.tmp <> %DRWordle.PostProcessing.tmp2) then var DRWordle.PostProcessing.foundLetterChangeB 1

	############## GOOD WORD MIX ###############	
	# clean up good letter mix.  Any changes?	
		gosub DRWordle.Echo %DRWordle._textColor._info ........starting good word analysis 
		eval DRWordle.PostProcessing.tmp count("%DRWordle._goodLetters","|")
		gosub DRWordle.CheckDirtyWord good
		eval DRWordle.PostProcessing.tmp2 count("%DRWordle._goodLetters","|")

		#Any changes? If yes, remove words from word bank when pruning starts
		if (%DRWordle.PostProcessing.tmp <> %DRWordle.PostProcessing.tmp2) then var DRWordle.PostProcessing.foundLetterChangeG 1

	############## UPDATE CHAR POS ###############
	# Changes to known char positions? 
		gosub DRWordle.Echo %DRWordle._textColor._info ........starting known char position manipulation
		
		var DRWordle.PostProcessing.tmp %DRWordle._knownPositions
		gosub DRWordle.CheckKnownPositions
		if ("%DRWordle._knownPositions" <> "DRWordle.PostProcessing.tmp") then var DRWordle.PostProcessing.foundLetterChangeP 1
			
		#Any changes? If yes, remove words from word bank when pruning starts
		if ("%DRWordle._knownPositions" <> "DRWordle.PostProcessing.tmp") then var DRWordle.PostProcessing.foundLetterChangeP 1
			

	#	#If yes, remove words from word bank when pruning starts
		# update known char position log

	############## WORD BANK PRUNING ###############
	#start pruning, iff changes
	DRWordle.PostProcessing.startPruning:
		gosub DRWordle.Echo %DRWordle._textColor._info ........starting known char position analysis
		if ((%DRWordle.PostProcessing.foundLetterChangeP = 1) OR (%DRWordle.PostProcessing.foundLetterChangeB = 1) OR (%DRWordle.PostProcessing.foundLetterChangeG = 1)) then {
			gosub DRWordle.PruneWordBank %DRWordle.PostProcessing.foundLetterChangeP %DRWordle.PostProcessing.foundLetterChangeB %DRWordle.PostProcessing.foundLetterChangeG
		}
	if ("%1" = "debug") then goto RETURN
	DRWordle.automateGuess:
		pause %DRWordle._globalLongDelay
		var DRWordle.automateGuess.maxGuess %DRWordle._wordBankCount
		MATH DRWordle.automateGuess.maxGuess SUB 1

		random 0 %DRWordle.automateGuess.maxGuess

		#saving this as a variable for debugging, and it looks like random 0 0 returns -1
		if ("%r" = "-1") then {
			var DRWordle.automateGuess.word %DRWordle._wordBank(0)
		} else var DRWordle.automateGuess.word %DRWordle._wordBank(%r)

		if ("%DRWordle._recommendOnly" = "OFF") then {
			if ("%DRWordle.automateGuess.word" = "") then goto DRWordle.UNKONWN.WORD
			put whisp time lock %DRWordle.automateGuess.word
		} else {
			gosub DRWordle.TestCase.PrintStates
			gosub DRWordle.Echo %DRWordle._textColor._warning WAITING ON USER INPUT - Whisper time lock <guess> 
		}
	pause 6000
	goto DRWordle.Emergency.Exit

RETURN:
	return

DRWordle.CheckDirtyWord:
	# $1 = Bad or Good
	var DRWordle.CleanDirtyWord.variableBucket $1

	#start cleaning
	var DRWordle.CleanDirtyWord.index 0
	eval DRWordle.CleanDirtyWord.maxIndex count("%DRWordle._%DRWordle.CleanDirtyWord.variableBucketLettersDirty","|")

	DRWordle.CleanDirtyWord.loop:
		var DRWordle.CleanDirtyWord.loop.letter %DRWordle._%DRWordle.CleanDirtyWord.variableBucketLettersDirty(%DRWordle.CleanDirtyWord.index)
		if !matchre("%DRWordle._%DRWordle.CleanDirtyWord.variableBucketLetters","%DRWordle.CleanDirtyWord.loop.letter") then {
			if ("%DRWordle._%DRWordle.CleanDirtyWord.variableBucketLetters" = "") then {
				var DRWordle._%DRWordle.CleanDirtyWord.variableBucketLetters %DRWordle.CleanDirtyWord.loop.letter
			} else {
				var DRWordle._%DRWordle.CleanDirtyWord.variableBucketLetters %DRWordle.CleanDirtyWord.loop.letter|%DRWordle._%DRWordle.CleanDirtyWord.variableBucketLetters
			}
		}
		MATH DRWordle.CleanDirtyWord.index ADD 1
		if (%DRWordle.CleanDirtyWord.index <= %DRWordle.CleanDirtyWord.maxIndex) then goto DRWordle.CleanDirtyWord.loop

	var DRWordle._%DRWordle.CleanDirtyWord.variableBucketLettersDirty 
return

DRWordle.CheckKnownPositions:
	#ugly way to do this, but it's faster than a comparison. 
	#may go back and fix it but it was frankly easier to do it this way with the actions since numbering matters. 
	var DRWordle.CheckKnownPositions.index 2

	# making sure there's no preceding space.  
	# A little neurotic and somewhat unreasonable, but better safe than sorry.
	if ("%DRWordle._knownPosition1" = "") then var DRWordle._knownPositions _|
	else var DRWordle._knownPositions %DRWordle._knownPosition1|

	## checks word against good letters, good positions ##
	DRWordle.CheckKnownPositions.Loop:
	if ("%DRWordle._knownPosition%DRWordle.CheckKnownPositions.index" = "") then var DRWordle._knownPositions %DRWordle._knownPositions_|
		else var DRWordle._knownPositions %DRWordle._knownPositions%DRWordle._knownPosition%DRWordle.CheckKnownPositions.index|
	
		MATH DRWordle.CheckKnownPositions.index ADD 1
		if (%DRWordle.CheckKnownPositions.index <= 5) then goto DRWordle.CheckKnownPositions.Loop		
return

DRWordle.PruneWordBank:
	# $1 = positioning changed
	# $2 = bad letters changed
	# $3 = good letters changed 
	# ordered so that the largest number of potential changes (on average) go first
	# 0 = no, 1 = yes for all

	gosub DRWordle.Echo %DRWordle._textColor._warning --- Pruning Word Bank - this will take a few minutes, especially on the first Prune
	var DRWordle.PruneWordBank.startTime $gametime
#	put #echo red %DRWordle.PruneWordBank.startTime
	var DRWordle.PruneWordBank.startBankCount %DRWordle._wordBankCount
	pause %DRWordle._globalShortDelay

	var DRWordle.PruneWordBank.posCheck $1
	var DRWordle.PruneWordBank.badCheck $2
	var DRWordle.PruneWordBank.goodCheck $3

	var DRWordle.PruneWordBank.counter 1
	var DRWordle.PruneWordBank.index 0
	var DRWordle.PruneWordBank.updatedWordBank
	pause %DRWordle._globalShortDelay

	DRWordle.PruneWordBank.IterateWords:
		# THIS STUPID LINE OF CODE
		# THIS RIGHT HERE
		# MADE SENSE IN DEBUGGING - SUPER SLOW IN REAL LIFE!!!
		# Like arizona, it'll remain as a monument to man's arrogance
			#pause %DRWordle._globalShortDelay


		#put #echo index: %DRWordle.PruneWordBank.index, wordbank: %DRWordle._wordBank
		eval DRWordle.PruneWordBank.IterateWords.word %DRWordle._wordBank(%DRWordle.PruneWordBank.index)	
		if (("%DRWordle.PruneWordBank.IterateWords.word" = "") or (%DRWordle._wordBankCount < 0)) then {
			goto DRWordle.UNKONWN.WORD
		}
		#put #echo green word: %DRWordle.PruneWordBank.IterateWords.word (%DRWordle.PruneWordBank.index)

		#hack to stop infinite loop detection 
		if (%DRWordle._infiniteLoopHack < %DRWordle.PruneWordBank.counter) then {
			gosub DRWordle.Echo %DRWordle._textColor._info --- Still processing
			pause %DRWordle._globalShortDelay
			var DRWordle.PruneWordBank.counter 1
		} else MATH DRWordle.PruneWordBank.counter ADD 1

		#check positioning
			DRWordle.PruneWordBank.IterateWords.Pos: 
				if (%DRWordle.PruneWordBank.posCheck = 0) then goto DRWordle.PruneWordBank.IterateWords.Bad
				var DRWordle.PruneWordBank.IterateWords.Pos.index 0
				DRWordle.PruneWordBank.IterateWords.Pos.Loop:
					var DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex %DRWordle.PruneWordBank.IterateWords.Pos.index
					MATH DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex ADD 1
					var DRWordle.PruneWordBank.IterateWords.Pos.Loop.goodChar %DRWordle._knownPosition%DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex
					var DRWordle.PruneWordBank.IterateWords.Pos.Loop.goodCharBadPos %DRWordle._GoodLBadPosition%DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex

					# get the char to compare against
					eval DRWordle.PruneWordBank.IterateWords.Pos.Loop.wordChar substr(%DRWordle.PruneWordBank.IterateWords.word,%DRWordle.PruneWordBank.IterateWords.Pos.index,1)

					## good char not in this position? ##
					if ("%DRWordle.PruneWordBank.IterateWords.Pos.Loop.wordChar" = "%DRWordle.PruneWordBank.IterateWords.Pos.Loop.goodCharBadPos") then {	
						#gosub DRWordle.Echo green ---- removing word: %DRWordle.PruneWordBank.IterateWords.word because of a good letter in the wrong position (%DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex, "%DRWordle.PruneWordBank.IterateWords.Pos.Loop.wordChar"="%DRWordle.PruneWordBank.IterateWords.Pos.Loop.goodCharBadPos") (%DRWordle._GoodLBadPosition1%DRWordle._GoodLBadPosition2%DRWordle._GoodLBadPosition3%DRWordle._GoodLBadPosition4%DRWordle._GoodLBadPosition5)
						#pause 1.5
						goto DRWordle.PruneWordBank.Remove
					} else {
						#gosub DRWordle.Echo pink ---- NOT removing word: %DRWordle.PruneWordBank.IterateWords.word because of a good letter in the wrong position (%DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex, "%DRWordle.PruneWordBank.IterateWords.Pos.Loop.wordChar"!="%DRWordle.PruneWordBank.IterateWords.Pos.Loop.goodCharBadPos") (%DRWordle._GoodLBadPosition1%DRWordle._GoodLBadPosition2%DRWordle._GoodLBadPosition3%DRWordle._GoodLBadPosition4%DRWordle._GoodLBadPosition5)
						#pause .5
					}

					## good char in this position? ##
					if (("%DRWordle._knownPosition%DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex" = "") or ("%DRWordle._knownPosition%DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex" = "_")) then {
						goto DRWordle.PruneWordBank.IterateWords.Pos.Next
					}

					if ("%DRWordle.PruneWordBank.IterateWords.Pos.Loop.wordChar" <> "%DRWordle.PruneWordBank.IterateWords.Pos.Loop.goodChar") then {
						#put #echo red Removing word - (pos2) good char does not match (i:%DRWordle.PruneWordBank.IterateWords.Pos.adjustedIndex, char:%DRWordle.PruneWordBank.IterateWords.Pos.Loop.goodChar, word:%DRWordle.PruneWordBank.IterateWords.word)
						goto DRWordle.PruneWordBank.Remove
					}
				
				DRWordle.PruneWordBank.IterateWords.Pos.Next:
					MATH DRWordle.PruneWordBank.IterateWords.Pos.index ADD 1
					if (%DRWordle.PruneWordBank.IterateWords.Pos.index >= 5) then {
						#put #echo blue Skipping out of pruneword %DRWordle.PruneWordBank.IterateWords.Pos.index
						goto DRWordle.PruneWordBank.IterateWords.Good
					}
					goto DRWordle.PruneWordBank.IterateWords.Pos.Loop

		#check good letters, missing from word
			DRWordle.PruneWordBank.IterateWords.Good:
			#	put #echo --- Pruning wordbank of words with good letters
				if (%DRWordle.PruneWordBank.goodCheck = 0) then goto DRWordle.PruneWordBank.IterateWords.Bad

				var DRWordle.PruneWordBank.IterateWords.Good.index 0
				eval DRWordle.PruneWordBank.IterateWords.Good.max count("%DRWordle._goodLetters","|")
				DRWordle.PruneWordBank.IterateWords.Good.Loop:
					eval DRWordle.PruneWordBank.IterateWords.Good.letter %DRWordle._goodLetters(%DRWordle.PruneWordBank.IterateWords.Good.index)
					if (!matchre("%DRWordle.PruneWordBank.IterateWords.word","%DRWordle.PruneWordBank.IterateWords.Good.letter")) then {
					#	put #echo orange Removing word - (good) (word: %DRWordle.PruneWordBank.IterateWords.word, letters:%DRWordle._goodLetters (testing:%DRWordle.PruneWordBank.IterateWords.Good.letter ) )
						goto DRWordle.PruneWordBank.Remove
					}

									
				DRWordle.PruneWordBank.IterateWords.Good.Next:
					MATH DRWordle.PruneWordBank.IterateWords.Good.index ADD 1
					if (%DRWordle.PruneWordBank.IterateWords.Good.index <= %DRWordle.PruneWordBank.IterateWords.Good.max) then goto DRWordle.PruneWordBank.IterateWords.Good.Loop
					goto DRWordle.PruneWordBank.IterateWords.Bad


		#check bad letters, included in word
			DRWordle.PruneWordBank.IterateWords.Bad:
			#	put #echo --- Pruning wordbank of words with bad letters (%DRWordle._badLetters)
				if (%DRWordle.PruneWordBank.badCheck = 0) then goto DRWordle.PruneWordBank.IterateWords.Keep
				if (matchre("%DRWordle.PruneWordBank.IterateWords.word","%DRWordle._badLetters")) then {
				#	put #echo orange Removing word - (bad) (word: %DRWordle.PruneWordBank.IterateWords.word, letters:%DRWordle._badLetters )
					goto DRWordle.PruneWordBank.Remove
				}


		DRWordle.PruneWordBank.IterateWords.Keep:
			var DRWordle.PruneWordBank.updatedWordBank %DRWordle.PruneWordBank.IterateWords.word|%DRWordle.PruneWordBank.updatedWordBank

		DRWordle.PruneWordBank.IterateWords.Next:
			MATH DRWordle.PruneWordBank.index ADD 1
			if (%DRWordle.PruneWordBank.index < %DRWordle._wordBankCount) then goto DRWordle.PruneWordBank.IterateWords
		goto DRWordle.PruneWordBank.Done
	
		DRWordle.PruneWordBank.Remove:

			## rewriting to not remove, but append.  Hoping this cuts down on processing time. 
	### keeping as legacy code
	### replaced the replacere with a simple var command to build lists
	#			#remove the word
	#				eval DRWordle._wordBank replacere("%DRWordle._wordBank", "%DRWordle.PruneWordBank.IterateWords.word\|","")
	#			#adjust the count
	#			put #echo After .... %DRWordle._wordBank
	#			MATH DRWordle.PruneWordBank.index SUB 1
	#			MATH DRWordle._wordBankCount SUB 1
	#			if (%DRWordle._wordBankCount <= 0) then {
	#				goto DRWordle.UNKONWN.WORD
	#			}
			goto DRWordle.PruneWordBank.IterateWords.Next
			
		DRWordle.PruneWordBank.Done:
			#pausing to let variables catch up, like gametime
			pause %DRWordle._globalShortDelay

			# Cleaning up some variables, move to a function due to duplictive code (TODO) 
			var DRWordle._GoodLBadPosition1 .
			var DRWordle._GoodLBadPosition2 .
			var DRWordle._GoodLBadPosition3 .
			var DRWordle._GoodLBadPosition4 .
			var DRWordle._GoodLBadPosition5 .

			# Stats and other info
			var DRWordle.PruneWordBank.endTime $gametime	
			MATH DRWordle.PruneWordBank.endTime SUB %DRWordle.PruneWordBank.startTime

			var DRWordle._wordBank %DRWordle.PruneWordBank.updatedWordBank
			gosub DRWordle.UpdateWordBankCount

			MATH DRWordle.PruneWordBank.endBankCount SET %DRWordle.PruneWordBank.startBankCount
			MATH DRWordle.PruneWordBank.endBankCount SUB %DRWordle._wordBankCount
			gosub DRWordle.Echo %DRWordle._textColor._info Prune complete.  Finished in %DRWordle.PruneWordBank.endTimes and removed %DRWordle.PruneWordBank.endBankCount words, %DRWordle._wordBankCount remaining

return



############################################# UTILITY FUNCTIONS #############################

DRWordle.Echo:
	put #echo $0
return

DRWordle.NO.PASSES:
	put #echo %DRWordle._textColor._warning ----- ERROR ------ 
	put #echo %DRWordle._textColor._warning - Out of Passes
	put #echo %DRWordle._textColor._warning -------------------
	goto DRWordle.Emergency.Exit
return

DRWordle.UNKONWN.WORD:
	put #echo %DRWordle._textColor._warning ----- ERROR ------ 
	put #echo %DRWordle._textColor._warning - Word not in list
	put #echo %DRWordle._textColor._warning - or bad wordbank
	put #echo %DRWordle._textColor._warning - Dumping state
	put #echo %DRWordle._textColor._warning -------------------
	put #echo >ScriptLog red RPA FAIL
	gosub DRWordle.TestCase.PrintStates
goto DRWordle.Emergency.Exit

DRWordle.COMPLETE:
	put #echo >ScriptLog green RPA success
goto DRWordle.Check.Repeat.Run

DRWordle.Check.Repeat.Run:
	if (%DRWordle.useAllSlips = 1) then {
		put .drwordle %0
		exit
	}
goto DRWordle.Emergency.Exit

DRWordle.Emergency.Exit:
	put #echo %DRWordle._textColor._warning ----- Hard Exiting ------ 
	goto DRWordle.Exit

################################################################################################################### TBI ####
#call with just a letter, feed in bad letters

#### TEST CASES - IGNORE ####
DRWordle.TestCase.TestActions:
gosub DRWordle.Echo %DRWordle._textColor._info STARTING FIRST LINE
#gosub DRWordle.TestCase.PrintStates

gosub DRWordle.Echo red 0====================================================
gosub DRWordle.Echo %DRWordle._textColor._info | _A_ | *E* | +I+ | *O* | *U* |

pause 1
put #parse  +-----+-----+-----+-----+-----+
put #parse  |  1  |  2  |  3  |  4  |  5  |
put #parse  +-----+-----+-----+-----+-----+
put #parse  | *A* | _E_ | *I* | +O+ | *U* |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  +-----+-----+-----+-----+-----+
pause %DRWordle._globalLongDelay
gosub DRWordle.PostProcessing
gosub DRWordle.TestCase.PrintStates


waitfor NEXTCASE


gosub DRWordle.Echo red 1====================================================
gosub DRWordle.Echo %DRWordle._textColor._info | *F* | +R+ | +I+ | *L* | _A_ |
put #parse  +-----+-----+-----+-----+-----+
put #parse  |  1  |  2  |  3  |  4  |  5  |
put #parse  +-----+-----+-----+-----+-----+
put #parse  | *A* | _E_ | *I* | +O+ | *U* |
put #parse  | *F* | +R+ | +I+ | *L* | _A_ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  +-----+-----+-----+-----+-----+
pause %DRWordle._globalLongDelay
gosub DRWordle.PostProcessing
gosub DRWordle.TestCase.PrintStates

waitfor NEXTCASE
gosub DRWordle.Echo red 2====================================================
gosub DRWordle.Echo %DRWordle._textColor._info | _A_ | *T* | +I+ | *N* | _A_ |
put #parse  +-----+-----+-----+-----+-----+
put #parse  |  1  |  2  |  3  |  4  |  5  |
put #parse  +-----+-----+-----+-----+-----+
put #parse  | *A* | _E_ | *I* | +O+ | *U* |
put #parse  | *F* | +R+ | +I+ | *L* | _A_ |
put #parse  | _A_ | *T* | +I+ | *N* | _A_ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  +-----+-----+-----+-----+-----+
pause %DRWordle._globalLongDelay
gosub DRWordle.PostProcessing
gosub DRWordle.TestCase.PrintStates

waitfor NEXTCASE
gosub DRWordle.Echo red 3====================================================
gosub DRWordle.Echo %DRWordle._textColor._info | *C* | +R+ | +I+ | *M* | _A_ |
put #parse  +-----+-----+-----+-----+-----+
put #parse  |  1  |  2  |  3  |  4  |  5  |
put #parse  +-----+-----+-----+-----+-----+
put #parse  | *A* | _E_ | *I* | +O+ | *U* |
put #parse  | *F* | +R+ | +I+ | *L* | _A_ |
put #parse  | _A_ | *T* | +I+ | *N* | _A_ |
put #parse  | *C* | +R+ | +I+ | *M* | _A_ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  +-----+-----+-----+-----+-----+
pause %DRWordle._globalLongDelay
gosub DRWordle.PostProcessing
gosub DRWordle.TestCase.PrintStates

waitfor NEXTCASE
gosub DRWordle.Echo red 3====================================================
gosub DRWordle.Echo %DRWordle._textColor._info | *G* | +R+ | +I+ | +A+ | *L* |
put #parse  +-----+-----+-----+-----+-----+
put #parse  |  1  |  2  |  3  |  4  |  5  |
put #parse  +-----+-----+-----+-----+-----+
put #parse  | *A* | _E_ | *I* | +O+ | *U* |
put #parse  | *F* | +R+ | +I+ | *L* | _A_ |
put #parse  | _A_ | *T* | +I+ | *N* | _A_ |
put #parse  | *C* | +R+ | +I+ | *M* | _A_ |
put #parse  | *G* | +R+ | +I+ | +A+ | *L* |
put #parse  | ___ | ___ | ___ | ___ | ___ |
put #parse  +-----+-----+-----+-----+-----+
pause %DRWordle._globalLongDelay
gosub DRWordle.PostProcessing
gosub DRWordle.TestCase.PrintStates

waitfor NEXTCASE
gosub DRWordle.Echo red 4====================================================
gosub DRWordle.Echo %DRWordle._textColor._info | +B+ | +R+ | +I+ | +A+ | +R+ |
put #parse  +-----+-----+-----+-----+-----+
put #parse  |  1  |  2  |  3  |  4  |  5  |
put #parse  +-----+-----+-----+-----+-----+
put #parse  | *A* | _E_ | *I* | +O+ | *U* |
put #parse  | *F* | +R+ | +I+ | *L* | _A_ |
put #parse  | _A_ | *T* | +I+ | *N* | _A_ |
put #parse  | *C* | +R+ | +I+ | *M* | _A_ |
put #parse  | *G* | +R+ | +I+ | +A+ | *L* |
put #parse  | +B+ | +R+ | +I+ | +A+ | +R+ |
put #parse  +-----+-----+-----+-----+-----+
pause %DRWordle._globalLongDelay
gosub DRWordle.PostProcessing
gosub DRWordle.TestCase.PrintStates

waitfor NEXTCASE

return

DRWordle.TestCase.PrintStates:
	put #echo %DRWordle._textColor._info word bank count: %DRWordle._wordBankCount
	put #echo %DRWordle._textColor._info bad Letters: %DRWordle._badLetters
	put #echo %DRWordle._textColor._info dirty (bad) Letters: %DRWordle._badLettersDirty 
	put #echo %DRWordle._textColor._info good Letters: %DRWordle._goodLetters 
	put #echo %DRWordle._textColor._info dirty (good) Letters: %DRWordle._goodLettersDirty 
#        put #echo %DRWordle._textColor._info remaining letters: %DRWordle._remainingLetters
#        put #echo %DRWordle._textColor._info remaining letters: NYI
	put #echo %DRWordle._textColor._info known positions: %DRWordle._knownPositions
	put #echo %DRWordle._textColor._info known position 1: %DRWordle._knownPosition1
	put #echo %DRWordle._textColor._info known position 2: %DRWordle._knownPosition2
	put #echo %DRWordle._textColor._info known position 3: %DRWordle._knownPosition3
	put #echo %DRWordle._textColor._info known position 4: %DRWordle._knownPosition4
	put #echo %DRWordle._textColor._info known position 5: %DRWordle._knownPosition5
	put #echo %DRWordle._textColor._info known position 5: %DRWordle._knownPosition5
	put #echo %DRWordle._textColor._info Remaining Words: %DRWordle._wordBank
	
return