Skip to content

Instantly share code, notes, and snippets.

@diiq
Last active July 15, 2018 22:58
Show Gist options
  • Save diiq/1dcd3f3e66ed6836c9dc54fa0dabb67a to your computer and use it in GitHub Desktop.
Save diiq/1dcd3f3e66ed6836c9dc54fa0dabb67a to your computer and use it in GitHub Desktop.
Location canonization for Michigan elections (doesn't function for the "Village of Grosse Pointe Shores, A Michigan City", yet)
import csv
import re
from collections import Iterable
def flatten(items):
# Why in gods name am I forced to write this, python?
for x in items:
if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
for sub_x in flatten(x):
yield sub_x
else:
yield x
# This error is raised if no suitable name can be found.
class NameNotFoundException(Exception): pass
SPECIAL_EDITS = ["district", "county", "city", "township", "village"]
class Correctable():
def __init__(self, names):
"""`names` is a dictionary mapping name to prior probability."""
self.names = {name.lower(): [name, p] for name, p in names.items()}
def exact_match(self, name):
"Returns name (w/ proper capitalization) if name is already canonical; None otherwise."
if name.lower() in self.names:
return self.names[name.lower()][0]
def correction(self, name):
"Returns the most probable correction for name."
return self.names[max(self._candidates(name), key=self._p)][0]
def _p(self, name):
"Returns the prior probability of name"
return self.names[name][1]
def _candidates(self, name, depth=0):
"Generate possible corrections for name."
c = self._known(self._edits_within(name, depth))
if c:
return c
if depth >= 2:
raise NameNotFoundException("Unable to find canonical name for: " + name)
return self.candidates(name, depth+1)
def _known(self, names):
"The subset of `names` that appear in the dictionary of names."
return set(w for w in names if w in self.names)
def _edits_within(self, name, max_dist=2):
"All edits that are max_dist edits away from `name`."
return self._edits_recur([name], max_dist)
def _edits_recur(self, partials, stop):
if stop == 0:
return partials
return self._edits_recur(flatten([self._edits(n) for n in partials]), stop - 1)
def _edits(self, name):
"All edits that are one edit away from `name`."
letters = 'abcdefghijklmnopqrstuvwxyz'
splits = [(name[:i], name[i:]) for i in range(len(name) + 1)]
deletes = [L + R[1:] for L, R in splits if R]
transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]
replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
inserts = [L + c + R for L, R in splits for c in letters]
finals = [self._add_or_remove_final(name, s) for s in SPECIAL_EDITS]
initials = [self._add_or_remove_final(name, s + " of") for s in SPECIAL_EDITS]
return list(set(deletes + transposes + replaces + inserts + finals + initials))
def _add_or_remove_final(self, name, string):
reg = r"\s*" + re.escape(string) + r"$"
if re.search(reg, name):
return re.sub(reg, "", name)
return name + " " + string
def _add_or_remove_initial(self, name, string):
reg = r"^" + re.escape(string) + r"\s*"
if re.search(reg, name):
return re.sub(reg, "", name)
return string + " " + name
Alcona 10942
Alger 9601
Allegan 111408
Alpena 29598
Antrim 23598
Arenac 15899
Baraga 8860
Barry 59173
Bay 107771
Benzie 17525
Berrien 156813
Branch 45248
Calhoun 136146
Cass 52293
Charlevoix 25949
Cheboygan 26152
Chippewa 38520
Clare 30926
Clinton 75382
Crawford 14074
Delta 37069
Dickinson 26168
Eaton 107759
Emmet 32694
Genesee 425790
Gladwin 25692
Gogebic 16427
Grand Traverse 86986
Gratiot 42476
Hillsdale 46688
Houghton 36628
Huron 33118
Ingham 280895
Ionia 63905
Iosco 25887
Iron 11817
Isabella 70311
Jackson 160248
Kalamazoo 250331
Kalkaska 17153
Kent 602622
Keweenaw 2156
Lake 11539
Lapeer 88319
Leelanau 21708
Lenawee 99892
Livingston 180967
Luce 6631
Mackinac 11113
Macomb 840978
Manistee 24733
Marquette 67077
Mason 28705
Mecosta 42798
Menominee 24029
Midland 83629
Missaukee 14849
Alcona 1000
Caledonia 1000
Mitchell 1000
Haynes 1000
Hawes 1000
Harrisville 1000
Gustin 1000
Millen 1000
Harrisville 1000
Greenbush 1000
Mikado 1000
Curtis 1000
Burt 1000
Munising 1000
Grand Island 1000
Onota 1000
Au Train 1000
Munising 1000
Rock River 1000
Limestone 1000
Mathias 1000
Leighton 1000
Fillmore 1000
Overisel 1000
Dorr 1000
Salem 1000
Laketown 1000
Wayland 1000
Wayland 1000
Manlius 1000
Heath 1000
Hopkins 1000
Monterey 1000
Saugatuck 1000
Douglas 1000
Saugatuck 1000
Fennville 1000
Martin 1000
Watson 1000
Allegan 1000
Clyde 1000
Valley 1000
Ganges 1000
Allegan 1000
Gunplain 1000
Trowbridge 1000
Lee 1000
Cheshire 1000
Casco 1000
Otsego 1000
Plainwell 1000
Otsego 1000
Maple Ridge 1000
Long Rapids 1000
Wellington 1000
Alpena 1000
Wilson 1000
Green 1000
Alpena 1000
Sanborn 1000
Ossineke 1000
Banks 1000
Torch Lake 1000
Jordan 1000
Warner 1000
Central Lake 1000
Echo 1000
Forest Home 1000
Kearney 1000
Star 1000
Chestonia 1000
Milton 1000
Mancelona 1000
Custer 1000
Helena 1000
Elk Rapids 1000
Whitney 1000
Turner 1000
Mason 1000
Clayton 1000
Moffatt 1000
Deep River 1000
Adams 1000
Au Gres 1000
Omer 1000
Sims 1000
Au Gres 1000
Standish 1000
Arenac 1000
Standish 1000
Lincoln 1000
Baraga 1000
Lanse 1000
Arvon 1000
Spurr 1000
Covington 1000
Woodland 1000
Carlton 1000
Irving 1000
Thornapple 1000
Castleton 1000
Hastings 1000
Rutland 1000
Yankee Springs 1000
Hastings 1000
Maple Grove 1000
Baltimore 1000
Hope 1000
Orangeville 1000
Assyria 1000
Johnstown 1000
Barry 1000
Prairieville 1000
Gibson 1000
Mt Forest 1000
Pinconning 1000
Pinconning 1000
Garfield 1000
Fraser 1000
Kawkawlin 1000
Beaver 1000
Bangor 1000
Hampton 1000
Monitor 1000
Williams 1000
Essexville 1000
Bay City 1000
Auburn 1000
Portsmouth 1000
Merritt 1000
Frankenlust 1000
Platte 1000
Almira 1000
Lake 1000
Benzonia 1000
Homestead 1000
Inland 1000
Crystal Lake 1000
Frankfort 1000
Gilmore 1000
Weldon 1000
Colfax 1000
Blaine 1000
Joyfield 1000
Coloma 1000
Watervliet 1000
Hagar 1000
Watervliet 1000
Coloma 1000
Bainbridge 1000
Benton Harbor 1000
Benton 1000
St Joseph 1000
St Joseph 1000
Royalton 1000
Sodus 1000
Pipestone 1000
Lincoln 1000
Lake 1000
Oronoko 1000
Baroda 1000
Berrien 1000
Bridgman 1000
Chikaming 1000
Weesaw 1000
Buchanan 1000
Buchanan 1000
Niles 1000
New Buffalo 1000
Three Oaks 1000
Galien 1000
Bertrand 1000
New Buffalo 1000
Butler 1000
Girard 1000
Union 1000
Sherwood 1000
Quincy 1000
Coldwater 1000
Batavia 1000
Matteson 1000
Coldwater 1000
Algansee 1000
Ovid 1000
Bethel 1000
Bronson 1000
Bronson 1000
California 1000
Kinderhook 1000
Gilead 1000
Noble 1000
Clarence 1000
Lee 1000
Convis 1000
Pennfield 1000
Bedford 1000
Battle Creek 1000
Sheridan 1000
Marengo 1000
Springfield 1000
Marshall 1000
Emmett 1000
Marshall 1000
Albion 1000
Albion 1000
Eckford 1000
Fredonia 1000
Newton 1000
Leroy 1000
Homer 1000
Clarendon 1000
Tekonsha 1000
Burlington 1000
Athens 1000
Wayne 1000
Volinia 1000
Marcellus 1000
Silver Creek 1000
Pokagon 1000
Newberg 1000
Penn 1000
Dowagiac 1000
Lagrange 1000
Howard 1000
Jefferson 1000
Calvin 1000
Porter 1000
Milton 1000
Ontwa 1000
Mason 1000
St James 1000
Peaine 1000
Hayes 1000
Bay 1000
Charlevoix 1000
Charlevoix 1000
Eveline 1000
Chandler 1000
Melrose 1000
Marion 1000
Norwood 1000
Evangeline 1000
Boyne City 1000
Boyne Valley 1000
Hudson 1000
Wilson 1000
South Arm 1000
East Jordan 1000
Mackinaw 1000
Beaugrand 1000
Hebron 1000
Benton 1000
Cheboygan 1000
Munro 1000
Inverness 1000
Grant 1000
Burt 1000
Mullett 1000
Aloha 1000
Koehler 1000
Tuscarora 1000
Waverly 1000
Walker 1000
Ellis 1000
Mentor 1000
Forest 1000
Nunda 1000
Wilmot 1000
Whitefish 1000
Sugar Island 1000
Sault Ste Marie 1000
Bay Mills 1000
Soo 1000
Superior 1000
Bruce 1000
Dafter 1000
Chippewa 1000
Hulbert 1000
Kinross 1000
Pickford 1000
Rudyard 1000
Trout Lake 1000
Raber 1000
Drummond 1000
Detour 1000
Franklin 1000
Frost 1000
Winterfield 1000
Summerfield 1000
Hamilton 1000
Hayes 1000
Greenwood 1000
Redding 1000
Harrison 1000
Arthur 1000
Hatton 1000
Lincoln 1000
Freeman 1000
Sheridan 1000
Grant 1000
Surrey 1000
Garfield 1000
Duplain 1000
Greenbush 1000
Essex 1000
Lebanon 1000
Ovid 1000
Bengal 1000
Dallas 1000
St Johns 1000
Bingham 1000
Victor 1000
Olive 1000
Riley 1000
Westphalia 1000
Watertown 1000
Eagle 1000
Dewitt 1000
Dewitt 1000
Bath 1000
Lovells 1000
Maple Forest 1000
Frederic 1000
Grayling 1000
South Branch 1000
Grayling 1000
Beaver Creek 1000
Maple Ridge 1000
Nahma 1000
Garden 1000
Baldwin 1000
Cornell 1000
Brampton 1000
Ensign 1000
Masonville 1000
Escanaba 1000
Gladstone 1000
Bay De Noc 1000
Bark River 1000
Wells 1000
Escanaba 1000
Ford River 1000
Fairbanks 1000
Sagola 1000
Felch 1000
West Branch 1000
Breen 1000
Norway 1000
Breitung 1000
Waucedah 1000
Iron Mountain 1000
Kingsford 1000
Norway 1000
Oneida 1000
Roxand 1000
Sunfield 1000
Delta 1000
Windsor 1000
Chester 1000
Vermontville 1000
Potterville 1000
Benton 1000
Eaton Rapids 1000
Carmel 1000
Kalamo 1000
Charlotte 1000
Eaton 1000
Eaton Rapids 1000
Hamlin 1000
Brookfield 1000
Walton 1000
Bellevue 1000
Olivet 1000
Wawatam 1000
Bliss 1000
Carp Lake 1000
Cross Village 1000
McKinley 1000
Center 1000
Readmond 1000
Maple River 1000
Pleasant View 1000
Friendship 1000
Littlefield 1000
Little Traverse 1000
Harbor Springs 1000
West Traverse 1000
Springvale 1000
Bear Creek 1000
Petoskey 1000
Resort 1000
Forest 1000
Thetford 1000
Vienna 1000
Montrose 1000
Clio 1000
Montrose 1000
Richfield 1000
Genesee 1000
Mt Morris 1000
Flushing 1000
Mt Morris 1000
Flint 1000
Flushing 1000
Davison 1000
Burton 1000
Davison 1000
Swartz Creek 1000
Atlas 1000
Grand Blanc 1000
Mundy 1000
Clayton 1000
Flint 1000
Gaines 1000
Grand Blanc 1000
Fenton 1000
Argentine 1000
Linden 1000
Bourret 1000
Clement 1000
Butman 1000
Sherman 1000
Grim 1000
Secord 1000
Sage 1000
Hay 1000
Gladwin 1000
Gladwin 1000
Buckeye 1000
Grout 1000
Bentley 1000
Billings 1000
Tobacco 1000
Beaverton 1000
Beaverton 1000
Wakefield 1000
Ironwood 1000
Bessemer 1000
Marenisco 1000
Wakefield 1000
Bessemer 1000
Ironwood 1000
Erwin 1000
Watersmeet 1000
Peninsula 1000
White Water 1000
Acme 1000
Garfield 1000
Long Lake 1000
East Bay 1000
Green Lake 1000
Blair 1000
Union 1000
Paradise 1000
Grant 1000
Fife Lake 1000
Mayfield 1000
Wheeler 1000
Seville 1000
St Louis 1000
Pine River 1000
Bethany 1000
Alma 1000
Lafayette 1000
Emerson 1000
Arcada 1000
Sumner 1000
Ithaca 1000
Hamilton 1000
North Star 1000
Newark 1000
New Haven 1000
Elba 1000
Washington 1000
Fulton 1000
North Shade 1000
Somerset 1000
Moscow 1000
Scipio 1000
Litchfield 1000
Litchfield 1000
Fayette 1000
Jonesville 1000
Wheatland 1000
Adams 1000
Allen 1000
Hillsdale 1000
Hillsdale 1000
Pittsford 1000
Jefferson 1000
Cambria 1000
Reading 1000
Reading 1000
Wright 1000
Ransom 1000
Woodbridge 1000
Camden 1000
Amboy 1000
Calumet 1000
Osceola 1000
Hancock 1000
Schoolcraft 1000
Stanton 1000
Franklin 1000
Torch Lake 1000
Quincy 1000
Hancock 1000
Adams 1000
Portage 1000
Houghton 1000
Chassell 1000
Elm River 1000
Laird 1000
Duncan 1000
Pointe Aux Barques 1000
Port Austin 1000
Dwight 1000
Huron 1000
Hume 1000
Lake 1000
Gore 1000
Bloomfield 1000
Caseville 1000
Lincoln 1000
Meade 1000
Chandler 1000
Caseville 1000
Rubicon 1000
McKinley 1000
Sigel 1000
Harbor Beach 1000
Oliver 1000
Winsor 1000
Fairhaven 1000
Bad Axe 1000
Colfax 1000
Verona 1000
Sand Beach 1000
Sherman 1000
Paris 1000
Bingham 1000
Sheridan 1000
Grant 1000
Brookfield 1000
Sebewaing 1000
Locke 1000
Williamstown 1000
Meridian 1000
Lansing 1000
Williamston 1000
Leroy 1000
Wheatfield 1000
Alaiedon 1000
Delhi 1000
Mason 1000
White Oak 1000
Ingham 1000
Vevay 1000
Aurelius 1000
Stockbridge 1000
Bunker Hill 1000
Leslie 1000
Onondaga 1000
Leslie 1000
North Plains 1000
Ronald 1000
Orleans 1000
Otisco 1000
Belding 1000
Lyons 1000
Easton 1000
Keene 1000
Ionia 1000
Berlin 1000
Ionia 1000
Portland 1000
Orange 1000
Boston 1000
Portland 1000
Danby 1000
Sebewa 1000
Odessa 1000
Campbell 1000
Oscoda 1000
Plainfield 1000
Au Sable 1000
Wilber 1000
Baldwin 1000
Tawas 1000
Grant 1000
Reno 1000
East Tawas 1000
Tawas City 1000
Alabaster 1000
Sherman 1000
Burleigh 1000
Whittemore 1000
Iron River 1000
Bates 1000
Hematite 1000
Crystal Falls 1000
Stambaugh 1000
Mansfield 1000
Iron River 1000
Crystal Falls 1000
Caspian 1000
Mastodon 1000
Gaastra 1000
Wise 1000
Vernon 1000
Gilmore 1000
Coldwater 1000
Denver 1000
Isabella 1000
Nottawa 1000
Sherman 1000
Chippewa 1000
Union 1000
Deerfield 1000
Broomfield 1000
Mt Pleasant 1000
Coe 1000
Lincoln 1000
Fremont 1000
Rolland 1000
Waterloo 1000
Henrietta 1000
Rives 1000
Tompkins 1000
Springport 1000
Leoni 1000
Blackman 1000
Sandstone 1000
Parma 1000
Grass Lake 1000
Jackson 1000
Summit 1000
Spring Arbor 1000
Concord 1000
Napoleon 1000
Norvell 1000
Liberty 1000
Hanover 1000
Pulaski 1000
Columbia 1000
Richland 1000
Cooper 1000
Ross 1000
Alamo 1000
Charleston 1000
Comstock 1000
Kalamazoo 1000
Kalamazoo 1000
Parchment 1000
Oshtemo 1000
Galesburg 1000
Climax 1000
Pavilion 1000
Portage 1000
Texas 1000
Wakeshma 1000
Brady 1000
Prairie Ronde 1000
Schoolcraft 1000
Blue Lake 1000
Cold Springs 1000
Rapid River 1000
Clearwater 1000
Bear Lake 1000
Excelsior 1000
Kalkaska 1000
Oliver 1000
Orange 1000
Boardman 1000
Garfield 1000
Springfield 1000
Spencer 1000
Nelson 1000
Tyrone 1000
Cedar Springs 1000
Solon 1000
Oakfield 1000
Courtland 1000
Algoma 1000
Sparta 1000
Rockford 1000
Grattan 1000
Cannon 1000
Alpine 1000
Plainfield 1000
Vergennes 1000
Walker 1000
Ada 1000
Grand Rapids 1000
Grand Rapids 1000
East Grand Rapids 1000
Lowell 1000
Lowell 1000
Cascade 1000
Kentwood 1000
Grandville 1000
Bowne 1000
Caledonia 1000
Byron 1000
Gaines 1000
Wyoming 1000
Houghton 1000
Eagle Harbor 1000
Grant 1000
Allouez 1000
Sherman 1000
Elk 1000
Dover 1000
Newkirk 1000
Eden 1000
Sauble 1000
Ellsworth 1000
Peacock 1000
Sweetwater 1000
Pinora 1000
Cherry Valley 1000
Webber 1000
Chase 1000
Yates 1000
Lake 1000
Pleasant Plains 1000
Burlington 1000
Rich 1000
Burnside 1000
North Branch 1000
Deerfield 1000
Marathon 1000
Goodland 1000
Arcadia 1000
Mayfield 1000
Oregon 1000
Imlay 1000
Lapeer 1000
Attica 1000
Lapeer 1000
Elba 1000
Imlay City 1000
Almont 1000
Dryden 1000
Metamora 1000
Hadley 1000
Leelanau 1000
Leland 1000
Suttons Bay 1000
Cleveland 1000
Glen Arbor 1000
Centerville 1000
Bingham 1000
Empire 1000
Kasson 1000
Elmwood 1000
Solon 1000
Macon 1000
Clinton 1000
Franklin 1000
Cambridge 1000
Woodstock 1000
Tecumseh 1000
Tecumseh 1000
Ridgeway 1000
Raisin 1000
Rome 1000
Rollin 1000
Deerfield 1000
Adrian 1000
Blissfield 1000
Palmyra 1000
Adrian 1000
Dover 1000
Madison 1000
Hudson 1000
Hudson 1000
Ogden 1000
Riga 1000
Fairfield 1000
Medina 1000
Morenci 1000
Seneca 1000
Tyrone 1000
Deerfield 1000
Cohoctah 1000
Conway 1000
Hartland 1000
Oceola 1000
Handy 1000
Howell 1000
Howell 1000
Brighton 1000
Genoa 1000
Marion 1000
Iosco 1000
Brighton 1000
Green Oak 1000
Hamburg 1000
Putnam 1000
Unadilla 1000
McMillan 1000
Columbus 1000
Pentland 1000
Lakefield 1000
Hudson 1000
Portage 1000
Brevort 1000
Moran 1000
Newton 1000
Garfield 1000
Hendricks 1000
Marquette 1000
St Ignace 1000
Clark 1000
St Ignace 1000
Mackinac Island 1000
Bois Blanc 1000
Richmond 1000
Armada 1000
Bruce 1000
Lenox 1000
Ray 1000
Washington 1000
Chesterfield 1000
Macomb 1000
Shelby 1000
New Baltimore 1000
Utica 1000
Harrison 1000
Clinton 1000
Sterling Heights 1000
Mt Clemens 1000
Fraser 1000
St Clair Shores 1000
Roseville 1000
Warren 1000
Center Line 1000
Eastpointe 1000
Arcadia 1000
Pleasanton 1000
Springdale 1000
Cleon 1000
Onekama 1000
Bear Lake 1000
Maple Grove 1000
Marilla 1000
Manistee 1000
Brown 1000
Dickson 1000
Manistee 1000
Stronach 1000
Norman 1000
Filer 1000
Powell 1000
Michigamme 1000
Champion 1000
Ishpeming 1000
Marquette 1000
Ely 1000
Negaunee 1000
Marquette 1000
Negaunee 1000
Ishpeming 1000
Republic 1000
Humboldt 1000
Sands 1000
Chocolay 1000
Tilden 1000
Richmond 1000
West Branch 1000
Skandia 1000
Forsyth 1000
Turin 1000
Wells 1000
Ewing 1000
Grant 1000
Freesoil 1000
Meade 1000
Hamlin 1000
Victory 1000
Sherman 1000
Sheridan 1000
Amber 1000
Custer 1000
Branch 1000
Pere Marquette 1000
Ludington 1000
Scottville 1000
Riverton 1000
Eden 1000
Logan 1000
Summit 1000
Fork 1000
Green 1000
Chippewa 1000
Grant 1000
Sheridan 1000
Martiny 1000
Colfax 1000
Big Rapids 1000
Big Rapids 1000
Morton 1000
Wheatland 1000
Mecosta 1000
Austin 1000
Hinton 1000
Millbrook 1000
Aetna 1000
Deerfield 1000
Spalding 1000
Harris 1000
Meyer 1000
Faithorn 1000
Nadeau 1000
Gourley 1000
Holmes 1000
Cedarville 1000
Daggett 1000
Lake 1000
Stephenson 1000
Stephenson 1000
Mellen 1000
Ingallston 1000
Menominee 1000
Menominee 1000
Mills 1000
Hope 1000
Edenville 1000
Warren 1000
Coleman 1000
Jerome 1000
Geneva 1000
Larkin 1000
Lincoln 1000
Lee 1000
Greendale 1000
Homer 1000
Midland 1000
Ingersoll 1000
Mt Haley 1000
Porter 1000
Jasper 1000
Norwich 1000
Bloomfield 1000
Pioneer 1000
Enterprise 1000
Forest 1000
Caldwell 1000
West Branch 1000
Lake City 1000
Reeder 1000
Lake 1000
Aetna 1000
Butterfield 1000
Richland 1000
Riverside 1000
Clam Union 1000
Holland 1000
McBain 1000
Ash 1000
Exeter 1000
London 1000
Milan 1000
Berlin 1000
Frenchtown 1000
Raisinville 1000
Dundee 1000
Monroe 1000
Monroe 1000
Summerfield 1000
Ida 1000
Petersburg 1000
Lasalle 1000
Luna Pier 1000
Bedford 1000
Whiteford 1000
Erie 1000
Richland 1000
Home 1000
Cato 1000
Belvidere 1000
Winfield 1000
Reynolds 1000
Ferris 1000
Day 1000
Pine 1000
Douglass 1000
Maple Valley 1000
Pierson 1000
Stanton 1000
Crystal 1000
Evergreen 1000
Montcalm 1000
Sidney 1000
Bushnell 1000
Fairplain 1000
Eureka 1000
Carson City 1000
Bloomer 1000
Greenville 1000
Montmorency 1000
Hillman 1000
Briley 1000
Vienna 1000
Rust 1000
Avery 1000
Loud 1000
Albert 1000
White River 1000
Montague 1000
Blue Lake 1000
Holton 1000
Whitehall 1000
Montague 1000
Whitehall 1000
Fruitland 1000
Dalton 1000
Cedar Creek 1000
Laketon 1000
Egelston 1000
Moorland 1000
Casnovia 1000
North Muskegon 1000
Muskegon 1000
Muskegon Heights 1000
Muskegon 1000
Norton Shores 1000
Sullivan 1000
Ravenna 1000
Roosevelt Park 1000
Fruitport 1000
Barton 1000
Home 1000
Troy 1000
Lilley 1000
Norwich 1000
Monroe 1000
Beaver 1000
Merrill 1000
Goodwell 1000
Wilcox 1000
Denver 1000
Lincoln 1000
Everett 1000
White Cloud 1000
Big Prairie 1000
Sherman 1000
Fremont 1000
Croton 1000
Dayton 1000
Sheridan 1000
Garfield 1000
Newaygo 1000
Brooks 1000
Ensley 1000
Grant 1000
Bridgeton 1000
Ashland 1000
Grant 1000
Addison 1000
Oxford 1000
Brandon 1000
Groveland 1000
Holly 1000
Oakland 1000
Orion 1000
Independence 1000
Springfield 1000
Rose 1000
Clarkston 1000
Rochester Hills 1000
Auburn Hills 1000
Rochester 1000
Waterford 1000
Lake Angelus 1000
Pontiac 1000
White Lake 1000
Highland 1000
Troy 1000
Sylvan Lake 1000
Bloomfield 1000
Keego Harbor 1000
West Bloomfield 1000
Commerce 1000
Orchard Lake Village 1000
Milford 1000
Bloomfield Hills 1000
Birmingham 1000
Walled Lake 1000
Wixom 1000
Clawson 1000
Royal Oak 1000
Madison Heights 1000
Southfield 1000
Farmington Hills 1000
Novi 1000
Southfield 1000
Lyon 1000
Berkley 1000
Lathrup Village 1000
Huntington Woods 1000
Oak Park 1000
Hazel Park 1000
Ferndale 1000
Pleasant Ridge 1000
Royal Oak 1000
South Lyon 1000
Farmington 1000
Novi 1000
Pentwater 1000
Weare 1000
Crystal 1000
Colfax 1000
Golden 1000
Elbridge 1000
Leavitt 1000
Hart 1000
Hart 1000
Benona 1000
Shelby 1000
Ferry 1000
New Field 1000
Clay Banks 1000
Grant 1000
Otto 1000
Greenwood 1000
Goodar 1000
Rose 1000
Foster 1000
Rose City 1000
Hill 1000
Cumming 1000
Klacking 1000
Logan 1000
Churchill 1000
Ogemaw 1000
West Branch 1000
West Branch 1000
Richland 1000
Mills 1000
Horton 1000
Edwards 1000
Bohemia 1000
Ontonagon 1000
Greenland 1000
Carp Lake 1000
Rockland 1000
Bergland 1000
Matchwood 1000
Stannard 1000
McMillan 1000
Interior 1000
Haight 1000
Marion 1000
Highland 1000
Sherman 1000
Burdell 1000
Middle Branch 1000
Hartwick 1000
Leroy 1000
Rose Lake 1000
Sylvan 1000
Cedar 1000
Lincoln 1000
Osceola 1000
Orient 1000
Evart 1000
Hersey 1000
Evart 1000
Reed City 1000
Richmond 1000
Clinton 1000
Elmer 1000
Greenwood 1000
Comins 1000
Mentor 1000
Big Creek 1000
Corwith 1000
Charlton 1000
Dover 1000
Elmira 1000
Chester 1000
Livingston 1000
Bagley 1000
Hayes 1000
Gaylord 1000
Otsego Lake 1000
Chester 1000
Polkton 1000
Wright 1000
Spring Lake 1000
Crockery 1000
Ferrysburg 1000
Coopersville 1000
Grand Haven 1000
Grand Haven 1000
Robinson 1000
Tallmadge 1000
Allendale 1000
Georgetown 1000
Blendon 1000
Olive 1000
Port Sheldon 1000
Hudsonville 1000
Jamestown 1000
Zeeland 1000
Holland 1000
Park 1000
Zeeland 1000
Bearinger 1000
Ocqueoc 1000
Rogers 1000
Moltke 1000
North Allis 1000
Rogers City 1000
Pulawski 1000
Belknap 1000
Krakow 1000
Bismark 1000
Case 1000
Allis 1000
Onaway 1000
Presque Isle 1000
Posen 1000
Metz 1000
Au Sable 1000
Higgins 1000
Gerrish 1000
Lyon 1000
Richfield 1000
Markey 1000
Lake 1000
Backus 1000
Denton 1000
Roscommon 1000
Nester 1000
Tittabawassee 1000
Buena Vista 1000
Zilwaukee 1000
Kochville 1000
Zilwaukee 1000
Blumfield 1000
Carrollton 1000
Saginaw 1000
Thomas 1000
Richland 1000
Jonesfield 1000
Saginaw 1000
James 1000
Frankenmuth 1000
Bridgeport 1000
Spaulding 1000
Swan Creek 1000
Fremont 1000
Lakefield 1000
Frankenmuth 1000
Birch Run 1000
Taymouth 1000
Albee 1000
St Charles 1000
Brant 1000
Marion 1000
Maple Grove 1000
Chesaning 1000
Brady 1000
Chapin 1000
Burtchville 1000
Grant 1000
Greenwood 1000
Brockway 1000
Lynn 1000
Yale 1000
Fort Gratiot 1000
Clyde 1000
Kenockee 1000
Emmett 1000
Mussey 1000
Port Huron 1000
Port Huron 1000
Kimball 1000
Wales 1000
Riley 1000
Berlin 1000
Marysville 1000
Columbus 1000
St Clair 1000
St Clair 1000
China 1000
East China 1000
Casco 1000
Marine City 1000
Ira 1000
Cottrellville 1000
Algonac 1000
Clay 1000
Leonidas 1000
Mendon 1000
Park 1000
Flowerfield 1000
Colon 1000
Nottawa 1000
Lockport 1000
Three Rivers 1000
Fabius 1000
Sherman 1000
Florence 1000
Constantine 1000
White Pigeon 1000
Burr Oak 1000
Mottville 1000
Fawn River 1000
Sturgis 1000
Sturgis 1000
Delaware 1000
Minden 1000
Austin 1000
Greenleaf 1000
Forester 1000
Marion 1000
Wheatland 1000
Argyle 1000
Evergreen 1000
Bridgehampton 1000
Custer 1000
Moore 1000
Lamotte 1000
Sanilac 1000
Sandusky 1000
Washington 1000
Watertown 1000
Elmer 1000
Marlette 1000
Lexington 1000
Buel 1000
Elk 1000
Marlette 1000
Flynn 1000
Croswell 1000
Worth 1000
Fremont 1000
Speaker 1000
Maple Valley 1000
Hiawatha 1000
Seney 1000
Germfask 1000
Manistique 1000
Doyle 1000
Inwood 1000
Thompson 1000
Mueller 1000
Manistique 1000
Hazelton 1000
New Haven 1000
Rush 1000
Fairfield 1000
Venice 1000
Caledonia 1000
Owosso 1000
Middlebury 1000
Owosso 1000
Corunna 1000
Shiawassee 1000
Bennington 1000
Durand 1000
Vernon 1000
Laingsburg 1000
Sciota 1000
Burns 1000
Antrim 1000
Perry 1000
Woodhull 1000
Perry 1000
Akron 1000
Elkland 1000
Elmwood 1000
Columbia 1000
Wisner 1000
Novesta 1000
Ellington 1000
Almer 1000
Fairgrove 1000
Gilford 1000
Caro 1000
Kingston 1000
Wells 1000
Indianfields 1000
Juniata 1000
Denmark 1000
Koylton 1000
Dayton 1000
Fremont 1000
Vassar 1000
Tuscola 1000
Vassar 1000
Watertown 1000
Millington 1000
Arbela 1000
Pine Grove 1000
Bloomingdale 1000
South Haven 1000
Geneva 1000
Columbia 1000
Gobles 1000
Almena 1000
Waverly 1000
Arlington 1000
Bangor 1000
Covert 1000
Bangor 1000
Paw Paw 1000
Lawrence 1000
Antwerp 1000
Hartford 1000
Hartford 1000
Porter 1000
Decatur 1000
Keeler 1000
Hamilton 1000
Salem 1000
Northfield 1000
Webster 1000
Dexter 1000
Lyndon 1000
Superior 1000
Dexter 1000
Lima 1000
Sylvan 1000
Chelsea 1000
Scio 1000
Ann Arbor 1000
Ann Arbor 1000
Ypsilanti 1000
Ypsilanti 1000
Lodi 1000
Pittsfield 1000
Freedom 1000
Sharon 1000
Saline 1000
Augusta 1000
York 1000
Saline 1000
Bridgewater 1000
Manchester 1000
Grosse Pointe Woods 1000
Harper Woods 1000
Detroit 1000
Redford 1000
Livonia 1000
Grosse Pointe Farms 1000
Northville 1000
Highland Park 1000
Grosse Pointe 1000
Hamtramck 1000
Grosse Pointe Park 1000
Plymouth 1000
Plymouth 1000
Dearborn Heights 1000
Dearborn 1000
Westland 1000
Canton 1000
Garden City 1000
Inkster 1000
Allen Park 1000
Melvindale 1000
River Rouge 1000
Wayne 1000
Lincoln Park 1000
Taylor 1000
Ecorse 1000
Romulus 1000
Van Buren 1000
Wyandotte 1000
Southgate 1000
Belleville 1000
Grosse Ile 1000
Riverview 1000
Huron 1000
Trenton 1000
Sumpter 1000
Woodhaven 1000
Gibraltar 1000
Brownstown 1000
Rockwood 1000
Liberty 1000
Greenwood 1000
Wexford 1000
Hanover 1000
Cedar Creek 1000
Manton 1000
Colfax 1000
Antioch 1000
Springville 1000
Haring 1000
Selma 1000
Boon 1000
Slagle 1000
Cadillac 1000
Clam Lake 1000
Cherry Grove 1000
Henderson 1000
South Branch 1000
Holland 1000
Midland 1000
Niles 1000
Grand Ledge 1000
Lansing 1000
Traverse City 1000
East Lansing 1000
Clare 1000
Fenton 1000
Memphis 1000
Flat Rock 1000
Milan 1000
Richmond 1000
Brown City 1000
Ovid 1000
South Haven 1000
Grosse Pointe Shores 1000
Northville 1000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment