# -*- coding: utf-8 -*-

#
# Detect registered domains with reg-dom-libs
# http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat
#
# For LICENCE, see http://www.dkim-reputation.org/regdom-libs/
#
# Python port by Lorenzo Bolla <lbolla@gmail.com>
#

from urlparse import urlparse


__all__ = ['getRegisteredDomain', 'getRegisteredDomainFromURL']


tldTree = {'ac': {'com': {},
'ed': {},
'gov': {},
'net': {},
'mil': {},
'org': {}},
'ad': {'nom': {}},
'ae': {'co': {},
'net': {},
'org': {},
'sch': {},
'ac': {},
'gov': {},
'mil': {}},
'aero': {'accident-investigation': {},
'accident-prevention': {},
'aerobatic': {},
'aeroclub': {},
'aerodrome': {},
'agents': {},
'aircraft': {},
'airline': {},
'airport': {},
'air-surveillance': {},
'airtraffic': {},
'air-traffic-control': {},
'ambulance': {},
'amusement': {},
'association': {},
'author': {},
'ballooning': {},
'broker': {},
'caa': {},
'cargo': {},
'catering': {},
'certification': {},
'championship': {},
'charter': {},
'civilaviation': {},
'club': {},
'conference': {},
'consultant': {},
'consulting': {},
'control': {},
'council': {},
'crew': {},
'design': {},
'dgca': {},
'educator': {},
'emergency': {},
'engine': {},
'engineer': {},
'entertainment': {},
'equipment': {},
'exchange': {},
'express': {},
'federation': {},
'flight': {},
'freight': {},
'fuel': {},
'gliding': {},
'government': {},
'groundhandling': {},
'group': {},
'hanggliding': {},
'homebuilt': {},
'insurance': {},
'journal': {},
'journalist': {},
'leasing': {},
'logistics': {},
'magazine': {},
'maintenance': {},
'marketplace': {},
'media': {},
'microlight': {},
'modelling': {},
'navigation': {},
'parachuting': {},
'paragliding': {},
'passenger-association': {},
'pilot': {},
'press': {},
'production': {},
'recreation': {},
'repbody': {},
'res': {},
'research': {},
'rotorcraft': {},
'safety': {},
'scientist': {},
'services': {},
'show': {},
'skydiving': {},
'software': {},
'student': {},
'taxi': {},
'trader': {},
'trading': {},
'trainer': {},
'union': {},
'workinggroup': {},
'works': {}},
'af': {'gov': {},
'com': {},
'org': {},
'net': {},
'ed': {}},
'ag': {'com': {},
'org': {},
'net': {},
'co': {},
'nom': {}},
'ai': {'off': {},
'com': {},
'net': {},
'org': {}},
'al': {'com': {},
'ed': {},
'gov': {},
'mil': {},
'net': {},
'org': {}},
'am': {},
'an': {'com': {},
'net': {},
'org': {},
'ed': {}},
'ao': {'ed': {},
'gv': {},
'og': {},
'co': {},
'pb': {},
'it': {}},
'aq': {},
'ar': {'*': {},
'congresodelalengua3': {'!': {}},
'educ': {'!': {}},
'gobiernoelectronico': {'!': {}},
'mecon': {'!': {}},
'nacion': {'!': {}},
'nic': {'!': {}},
'promocion': {'!': {}},
'retina': {'!': {}},
'uba': {'!': {}}},
'arpa': {'e164': {},
'in-addr': {},
'ip6': {},
'iris': {},
'uri': {},
'urn': {}},
'as': {'gov': {}},
'asia': {},
'at': {'ac': {},
'co': {},
'gv': {},
'or': {},
'biz': {},
'info': {},
'priv': {}},
'a': {'*': {},
'ed': {'act': {},
'nsw': {},
'nt': {},
'qld': {},
'sa': {},
'tas': {},
'vic': {},
'wa': {}},
'gov': {'act': {},
'nt': {},
'qld': {},
'sa': {},
'tas': {},
'vic': {},
'wa': {}},
'act': {},
'nsw': {},
'nt': {},
'qld': {},
'sa': {},
'tas': {},
'vic': {},
'wa': {}},
'aw': {'com': {}},
'ax': {},
'az': {'com': {},
'net': {},
'int': {},
'gov': {},
'org': {},
'ed': {},
'info': {},
'pp': {},
'mil': {},
'name': {},
'pro': {},
'biz': {}},
'ba': {'org': {},
'net': {},
'ed': {},
'gov': {},
'mil': {},
'unsa': {},
'unbi': {},
'co': {},
'com': {},
'rs': {}},
'bb': {'biz': {},
'com': {},
'ed': {},
'gov': {},
'info': {},
'net': {},
'org': {},
'store': {}},
'bd': {'*': {}},
'be': {'ac': {}},
'bf': {'gov': {}},
'bg': {'a': {},
'b': {},
'c': {},
'd': {},
'e': {},
'f': {},
'g': {},
'h': {},
'i': {},
'j': {},
'k': {},
'l': {},
'm': {},
'n': {},
'o': {},
'p': {},
'q': {},
'r': {},
's': {},
't': {},
'': {},
'v': {},
'w': {},
'x': {},
'y': {},
'z': {},
'0': {},
'1': {},
'2': {},
'3': {},
'4': {},
'5': {},
'6': {},
'7': {},
'8': {},
'9': {}},
'bh': {'com': {},
'ed': {},
'net': {},
'org': {},
'gov': {}},
'bi': {'co': {},
'com': {},
'ed': {},
'or': {},
'org': {}},
'biz': {},
'bj': {'asso': {},
'barrea': {},
'gouv': {}},
'bm': {'com': {},
'ed': {},
'gov': {},
'net': {},
'org': {}},
'bn': {'*': {}},
'bo': {'com': {},
'ed': {},
'gov': {},
'gob': {},
'int': {},
'org': {},
'net': {},
'mil': {},
'tv': {}},
'br': {'adm': {},
'adv': {},
'agr': {},
'am': {},
'arq': {},
'art': {},
'ato': {},
'bio': {},
'blog': {},
'bmd': {},
'can': {},
'cim': {},
'cng': {},
'cnt': {},
'com': {},
'coop': {},
'ecn': {},
'ed': {},
'eng': {},
'esp': {},
'etc': {},
'eti': {},
'far': {},
'flog': {},
'fm': {},
'fnd': {},
'fot': {},
'fst': {},
'g12': {},
'ggf': {},
'gov': {},
'imb': {},
'ind': {},
'inf': {},
'jor': {},
'jus': {},
'lel': {},
'mat': {},
'med': {},
'mil': {},
'mus': {},
'net': {},
'nom': {},
'not': {},
'ntr': {},
'odo': {},
'org': {},
'ppg': {},
'pro': {},
'psc': {},
'psi': {},
'qsl': {},
'rec': {},
'slg': {},
'srv': {},
'tmp': {},
'trd': {},
'tur': {},
'tv': {},
'vet': {},
'vlog': {},
'wiki': {},
'zlg': {}},
'bs': {'com': {},
'net': {},
'org': {},
'ed': {},
'gov': {}},
'bt': {'com': {},
'ed': {},
'gov': {},
'net': {},
'org': {}},
'bw': {'co': {},
'org': {}},
'by': {'gov': {},
'mil': {},
'com': {},
'of': {}},
'bz': {'com': {},
'net': {},
'org': {},
'ed': {},
'gov': {}},
'ca': {'ab': {},
'bc': {},
'mb': {},
'nb': {},
'nf': {},
'nl': {},
'ns': {},
'nt': {},
'n': {},
'on': {},
'pe': {},
'qc': {},
'sk': {},
'yk': {},
'gc': {}},
'cat': {},
'cc': {},
'cd': {'gov': {}},
'cf': {},
'cg': {},
'ch': {},
'ci': {'org': {},
'or': {},
'com': {},
'co': {},
'ed': {},
'ed': {},
'ac': {},
'net': {},
'go': {},
'asso': {},
'aéroport': {},
'int': {},
'presse': {},
'md': {},
'gouv': {}},
'ck': {'*': {}},
'cl': {'gov': {},
'gob': {}},
'cm': {'gov': {}},
'cn': {'ac': {},
'com': {},
'ed': {},
'gov': {},
'net': {},
'org': {},
'mil': {},
'公司': {},
'网络': {},
'網絡': {},
'ah': {},
'bj': {},
'cq': {},
'fj': {},
'gd': {},
'gs': {},
'gz': {},
'gx': {},
'ha': {},
'hb': {},
'he': {},
'hi': {},
'hl': {},
'hn': {},
'jl': {},
'js': {},
'jx': {},
'ln': {},
'nm': {},
'nx': {},
'qh': {},
'sc': {},
'sd': {},
'sh': {},
'sn': {},
'sx': {},
'tj': {},
'xj': {},
'xz': {},
'yn': {},
'zj': {},
'hk': {},
'mo': {},
'tw': {}},
'co': {'arts': {},
'com': {},
'ed': {},
'firm': {},
'gov': {},
'info': {},
'int': {},
'mil': {},
'net': {},
'nom': {},
'org': {},
'rec': {},
'web': {}},
'com': {'ar': {},
'br': {},
'cn': {},
'de': {},
'e': {},
'gb': {},
'h': {},
'jpn': {},
'kr': {},
'no': {},
'qc': {},
'r': {},
'sa': {},
'se': {},
'uk': {},
'us': {},
'uy': {},
'za': {},
'operaunite': {},
'appspot': {}},
'coop': {},
'cr': {'ac': {},
'co': {},
'ed': {},
'fi': {},
'go': {},
'or': {},
'sa': {}},
'c': {'com': {},
'ed': {},
'org': {},
'net': {},
'gov': {},
'inf': {}},
'cv': {},
'cx': {'gov': {}},
'cy': {'*': {}},
'cz': {},
'de': {},
'dj': {},
'dk': {},
'dm': {'com': {},
'net': {},
'org': {},
'ed': {},
'gov': {}},
'do': {'*': {}},
'dz': {'com': {},
'org': {},
'net': {},
'gov': {},
'ed': {},
'asso': {},
'pol': {},
'art': {}},
'ec': {'com': {},
'info': {},
'net': {},
'fin': {},
'k12': {},
'med': {},
'pro': {},
'org': {},
'ed': {},
'gov': {},
'gob': {},
'mil': {}},
'ed': {},
'ee': {'ed': {},
'gov': {},
'riik': {},
'lib': {},
'med': {},
'com': {},
'pri': {},
'aip': {},
'org': {},
'fie': {}},
'eg': {'*': {}},
'er': {'*': {}},
'es': {'com': {},
'nom': {},
'org': {},
'gob': {},
'ed': {}},
'et': {'*': {}},
'e': {},
'fi': {'aland': {},
'iki': {}},
'fj': {'*': {}},
'fk': {'*': {}},
'fm': {},
'fo': {},
'fr': {'com': {},
'asso': {},
'nom': {},
'prd': {},
'presse': {},
'tm': {},
'aeroport': {},
'assedic': {},
'avocat': {},
'avoues': {},
'cci': {},
'chambagri': {},
'chirurgiens-dentistes': {},
'experts-comptables': {},
'geometre-expert': {},
'gouv': {},
'greta': {},
'huissier-justice': {},
'medecin': {},
'notaires': {},
'pharmacien': {},
'port': {},
'veterinaire': {}},
'ga': {},
'gd': {},
'ge': {'com': {},
'ed': {},
'gov': {},
'org': {},
'mil': {},
'net': {},
'pvt': {}},
'gf': {},
'gg': {'co': {},
'org': {},
'net': {},
'sch': {},
'gov': {}},
'gh': {'com': {},
'ed': {},
'gov': {},
'org': {},
'mil': {}},
'gi': {'com': {},
'ltd': {},
'gov': {},
'mod': {},
'ed': {},
'org': {}},
'gl': {},
'gm': {},
'gn': {'ac': {},
'com': {},
'ed': {},
'gov': {},
'org': {},
'net': {}},
'gov': {},
'gp': {'com': {},
'net': {},
'mobi': {},
'ed': {},
'org': {},
'asso': {}},
'gq': {},
'gr': {'com': {},
'ed': {},
'net': {},
'org': {},
'gov': {}},
'gs': {},
'gt': {'*': {}},
'g': {'*': {}},
'gw': {},
'gy': {'co': {},
'com': {},
'net': {}},
'hk': {'com': {},
'ed': {},
'gov': {},
'idv': {},
'net': {},
'org': {},
'公司': {},
'教育': {},
'敎育': {},
'政府': {},
'個人': {},
'个人': {},
'箇人': {},
'網络': {},
'网络': {},
'组織': {},
'網絡': {},
'网絡': {},
'组织': {},
'組織': {},
'組织': {}},
'hm': {},
'hn': {'com': {},
'ed': {},
'org': {},
'net': {},
'mil': {},
'gob': {}},
'hr': {'iz': {},
'from': {},
'name': {},
'com': {}},
'ht': {'com': {},
'shop': {},
'firm': {},
'info': {},
'adult': {},
'net': {},
'pro': {},
'org': {},
'med': {},
'art': {},
'coop': {},
'pol': {},
'asso': {},
'ed': {},
'rel': {},
'gouv': {},
'perso': {}},
'h': {'co': {},
'info': {},
'org': {},
'priv': {},
'sport': {},
'tm': {},
'2000': {},
'agrar': {},
'bolt': {},
'casino': {},
'city': {},
'erotica': {},
'erotika': {},
'film': {},
'forum': {},
'games': {},
'hotel': {},
'ingatlan': {},
'jogasz': {},
'konyvelo': {},
'lakas': {},
'media': {},
'news': {},
'reklam': {},
'sex': {},
'shop': {},
'suli': {},
'szex': {},
'tozsde': {},
'utazas': {},
'video': {}},
'id': {'ac': {},
'co': {},
'go': {},
'mil': {},
'net': {},
'or': {},
'sch': {},
'web': {}},
'ie': {'gov': {}},
'il': {'*': {}},
'im': {'co': {'ltd': {},
'plc': {}},
'net': {},
'gov': {},
'org': {},
'nic': {},
'ac': {}},
'in': {'co': {},
'firm': {},
'net': {},
'org': {},
'gen': {},
'ind': {},
'nic': {},
'ac': {},
'ed': {},
'res': {},
'gov': {},
'mil': {}},
'info': {},
'int': {'e': {}},
'io': {'com': {}},
'iq': {'gov': {},
'ed': {},
'mil': {},
'com': {},
'org': {},
'net': {}},
'ir': {'ac': {},
'co': {},
'gov': {},
'id': {},
'net': {},
'org': {},
'sch': {},
'ایران': {},
'ايران': {}},
'is': {'net': {},
'com': {},
'ed': {},
'gov': {},
'org': {},
'int': {}},
'it': {'gov': {},
'ed': {},
'agrigento': {},
'ag': {},
'alessandria': {},
'al': {},
'ancona': {},
'an': {},
'aosta': {},
'aoste': {},
'ao': {},
'arezzo': {},
'ar': {},
'ascoli-piceno': {},
'ascolipiceno': {},
'ap': {},
'asti': {},
'at': {},
'avellino': {},
'av': {},
'bari': {},
'ba': {},
'andria-barletta-trani': {},
'andriabarlettatrani': {},
'trani-barletta-andria': {},
'tranibarlettaandria': {},
'barletta-trani-andria': {},
'barlettatraniandria': {},
'andria-trani-barletta': {},
'andriatranibarletta': {},
'trani-andria-barletta': {},
'traniandriabarletta': {},
'bt': {},
'belluno': {},
'bl': {},
'benevento': {},
'bn': {},
'bergamo': {},
'bg': {},
'biella': {},
'bi': {},
'bologna': {},
'bo': {},
'bolzano': {},
'bozen': {},
'balsan': {},
'alto-adige': {},
'altoadige': {},
'suedtirol': {},
'bz': {},
'brescia': {},
'bs': {},
'brindisi': {},
'br': {},
'cagliari': {},
'ca': {},
'caltanissetta': {},
'cl': {},
'campobasso': {},
'cb': {},
'carboniaiglesias': {},
'carbonia-iglesias': {},
'iglesias-carbonia': {},
'iglesiascarbonia': {},
'ci': {},
'caserta': {},
'ce': {},
'catania': {},
'ct': {},
'catanzaro': {},
'cz': {},
'chieti': {},
'ch': {},
'como': {},
'co': {},
'cosenza': {},
'cs': {},
'cremona': {},
'cr': {},
'crotone': {},
'kr': {},
'cuneo': {},
'cn': {},
'dell-ogliastra': {},
'dellogliastra': {},
'ogliastra': {},
'og': {},
'enna': {},
'en': {},
'ferrara': {},
'fe': {},
'fermo': {},
'fm': {},
'firenze': {},
'florence': {},
'fi': {},
'foggia': {},
'fg': {},
'forli-cesena': {},
'forlicesena': {},
'cesena-forli': {},
'cesenaforli': {},
'fc': {},
'frosinone': {},
'fr': {},
'genova': {},
'genoa': {},
'ge': {},
'gorizia': {},
'go': {},
'grosseto': {},
'gr': {},
'imperia': {},
'im': {},
'isernia': {},
'is': {},
'laquila': {},
'aquila': {},
'aq': {},
'la-spezia': {},
'laspezia': {},
'sp': {},
'latina': {},
'lt': {},
'lecce': {},
'le': {},
'lecco': {},
'lc': {},
'livorno': {},
'li': {},
'lodi': {},
'lo': {},
'lucca': {},
'l': {},
'macerata': {},
'mc': {},
'mantova': {},
'mn': {},
'massa-carrara': {},
'massacarrara': {},
'carrara-massa': {},
'carraramassa': {},
'ms': {},
'matera': {},
'mt': {},
'medio-campidano': {},
'mediocampidano': {},
'campidano-medio': {},
'campidanomedio': {},
'vs': {},
'messina': {},
'me': {},
'milano': {},
'milan': {},
'mi': {},
'modena': {},
'mo': {},
'monza': {},
'monza-brianza': {},
'monzabrianza': {},
'monzaebrianza': {},
'monzaedellabrianza': {},
'monza-e-della-brianza': {},
'mb': {},
'napoli': {},
'naples': {},
'na': {},
'novara': {},
'no': {},
'nuoro': {},
'n': {},
'oristano': {},
'or': {},
'padova': {},
'padua': {},
'pd': {},
'palermo': {},
'pa': {},
'parma': {},
'pr': {},
'pavia': {},
'pv': {},
'perugia': {},
'pg': {},
'pescara': {},
'pe': {},
'pesaro-urbino': {},
'pesarourbino': {},
'urbino-pesaro': {},
'urbinopesaro': {},
'p': {},
'piacenza': {},
'pc': {},
'pisa': {},
'pi': {},
'pistoia': {},
'pt': {},
'pordenone': {},
'pn': {},
'potenza': {},
'pz': {},
'prato': {},
'po': {},
'ragusa': {},
'rg': {},
'ravenna': {},
'ra': {},
'reggio-calabria': {},
'reggiocalabria': {},
'rc': {},
'reggio-emilia': {},
'reggioemilia': {},
're': {},
'rieti': {},
'ri': {},
'rimini': {},
'rn': {},
'roma': {},
'rome': {},
'rm': {},
'rovigo': {},
'ro': {},
'salerno': {},
'sa': {},
'sassari': {},
'ss': {},
'savona': {},
'sv': {},
'siena': {},
'si': {},
'siracusa': {},
'sr': {},
'sondrio': {},
'so': {},
'taranto': {},
'ta': {},
'tempio-olbia': {},
'tempioolbia': {},
'olbia-tempio': {},
'olbiatempio': {},
'ot': {},
'teramo': {},
'te': {},
'terni': {},
'tr': {},
'torino': {},
'turin': {},
'to': {},
'trapani': {},
'tp': {},
'trento': {},
'trentino': {},
'tn': {},
'treviso': {},
'tv': {},
'trieste': {},
'ts': {},
'udine': {},
'ud': {},
'varese': {},
'va': {},
'venezia': {},
'venice': {},
've': {},
'verbania': {},
'vb': {},
'vercelli': {},
'vc': {},
'verona': {},
'vr': {},
'vibo-valentia': {},
'vibovalentia': {},
'vv': {},
'vicenza': {},
'vi': {},
'viterbo': {},
'vt': {}},
'je': {'co': {},
'org': {},
'net': {},
'sch': {},
'gov': {}},
'jm': {'*': {}},
'jo': {'com': {},
'org': {},
'net': {},
'ed': {},
'sch': {},
'gov': {},
'mil': {},
'name': {}},
'jobs': {},
'jp': {'ac': {},
'ad': {},
'co': {},
'ed': {},
'go': {},
'gr': {},
'lg': {},
'ne': {},
'or': {},
'aichi': {'*': {},
'pref': {'!': {}}},
'akita': {'*': {},
'pref': {'!': {}}},
'aomori': {'*': {},
'pref': {'!': {}}},
'chiba': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'ehime': {'*': {},
'pref': {'!': {}}},
'fukui': {'*': {},
'pref': {'!': {}}},
'fukuoka': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'fukushima': {'*': {},
'pref': {'!': {}}},
'gif': {'*': {},
'pref': {'!': {}}},
'gunma': {'*': {},
'pref': {'!': {}}},
'hiroshima': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'hokkaido': {'*': {},
'pref': {'!': {}}},
'hyogo': {'*': {},
'pref': {'!': {}}},
'ibaraki': {'*': {},
'pref': {'!': {}}},
'ishikawa': {'*': {},
'pref': {'!': {}}},
'iwate': {'*': {},
'pref': {'!': {}}},
'kagawa': {'*': {},
'pref': {'!': {}}},
'kagoshima': {'*': {},
'pref': {'!': {}}},
'kanagawa': {'*': {},
'pref': {'!': {}}},
'kawasaki': {'*': {},
'city': {'!': {}}},
'kitakyush': {'*': {},
'city': {'!': {}}},
'kobe': {'*': {},
'city': {'!': {}}},
'kochi': {'*': {},
'pref': {'!': {}}},
'kumamoto': {'*': {},
'pref': {'!': {}}},
'kyoto': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'mie': {'*': {},
'pref': {'!': {}}},
'miyagi': {'*': {},
'pref': {'!': {}}},
'miyazaki': {'*': {},
'pref': {'!': {}}},
'nagano': {'*': {},
'pref': {'!': {}}},
'nagasaki': {'*': {},
'pref': {'!': {}}},
'nagoya': {'*': {},
'city': {'!': {}}},
'nara': {'*': {},
'pref': {'!': {}}},
'niigata': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'oita': {'*': {},
'pref': {'!': {}}},
'okayama': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'okinawa': {'*': {},
'pref': {'!': {}}},
'osaka': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'saga': {'*': {},
'pref': {'!': {}}},
'saitama': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'sapporo': {'*': {},
'city': {'!': {}}},
'sendai': {'*': {},
'city': {'!': {}}},
'shiga': {'*': {},
'pref': {'!': {}}},
'shimane': {'*': {},
'pref': {'!': {}}},
'shizuoka': {'*': {},
'pref': {'!': {}},
'city': {'!': {}}},
'tochigi': {'*': {},
'pref': {'!': {}}},
'tokushima': {'*': {},
'pref': {'!': {}}},
'tokyo': {'*': {},
'metro': {'!': {}}},
'tottori': {'*': {},
'pref': {'!': {}}},
'toyama': {'*': {},
'pref': {'!': {}}},
'wakayama': {'*': {},
'pref': {'!': {}}},
'yamagata': {'*': {},
'pref': {'!': {}}},
'yamaguchi': {'*': {},
'pref': {'!': {}}},
'yamanashi': {'*': {},
'pref': {'!': {}}},
'yokohama': {'*': {},
'city': {'!': {}}}},
'ke': {'*': {}},
'kg': {'org': {},
'net': {},
'com': {},
'ed': {},
'gov': {},
'mil': {}},
'kh': {'*': {}},
'ki': {'ed': {},
'biz': {},
'net': {},
'org': {},
'gov': {},
'info': {},
'com': {}},
'km': {'org': {},
'nom': {},
'gov': {},
'prd': {},
'tm': {},
'ed': {},
'mil': {},
'ass': {},
'com': {},
'coop': {},
'asso': {},
'presse': {},
'medecin': {},
'notaires': {},
'pharmaciens': {},
'veterinaire': {},
'gouv': {}},
'kn': {'net': {},
'org': {},
'ed': {},
'gov': {}},
'kp': {'com': {},
'ed': {},
'gov': {},
'org': {},
'rep': {},
'tra': {}},
'kr': {'ac': {},
'co': {},
'es': {},
'go': {},
'hs': {},
'kg': {},
'mil': {},
'ms': {},
'ne': {},
'or': {},
'pe': {},
're': {},
'sc': {},
'busan': {},
'chungbuk': {},
'chungnam': {},
'daeg': {},
'daejeon': {},
'gangwon': {},
'gwangj': {},
'gyeongbuk': {},
'gyeonggi': {},
'gyeongnam': {},
'incheon': {},
'jej': {},
'jeonbuk': {},
'jeonnam': {},
'seoul': {},
'ulsan': {}},
'kw': {'*': {}},
'ky': {'ed': {},
'gov': {},
'com': {},
'org': {},
'net': {}},
'kz': {'org': {},
'ed': {},
'net': {},
'gov': {},
'mil': {},
'com': {}},
'la': {'int': {},
'net': {},
'info': {},
'ed': {},
'gov': {},
'per': {},
'com': {},
'org': {},
'c': {}},
'lb': {'com': {},
'ed': {},
'gov': {},
'net': {},
'org': {}},
'lc': {'com': {},
'net': {},
'co': {},
'org': {},
'ed': {},
'gov': {}},
'li': {},
'lk': {'gov': {},
'sch': {},
'net': {},
'int': {},
'com': {},
'org': {},
'ed': {},
'ngo': {},
'soc': {},
'web': {},
'ltd': {},
'assn': {},
'grp': {},
'hotel': {}},
'local': {},
'lr': {'com': {},
'ed': {},
'gov': {},
'org': {},
'net': {}},
'ls': {'co': {},
'org': {}},
'lt': {'gov': {}},
'l': {},
'lv': {'com': {},
'ed': {},
'gov': {},
'org': {},
'mil': {},
'id': {},
'net': {},
'asn': {},
'conf': {}},
'ly': {'com': {},
'net': {},
'gov': {},
'plc': {},
'ed': {},
'sch': {},
'med': {},
'org': {},
'id': {}},
'ma': {'co': {},
'net': {},
'gov': {},
'org': {},
'ac': {},
'press': {}},
'mc': {'tm': {},
'asso': {}},
'md': {},
'me': {'co': {},
'net': {},
'org': {},
'ed': {},
'ac': {},
'gov': {},
'its': {},
'priv': {}},
'mg': {'org': {},
'nom': {},
'gov': {},
'prd': {},
'tm': {},
'ed': {},
'mil': {},
'com': {}},
'mh': {},
'mil': {},
'mk': {'com': {},
'org': {},
'net': {},
'ed': {},
'gov': {},
'inf': {},
'name': {}},
'ml': {'com': {},
'ed': {},
'gouv': {},
'gov': {},
'net': {},
'org': {},
'presse': {}},
'mm': {'*': {}},
'mn': {'gov': {},
'ed': {},
'org': {}},
'mo': {'com': {},
'net': {},
'org': {},
'ed': {},
'gov': {}},
'mobi': {},
'mp': {},
'mq': {},
'mr': {'gov': {}},
'ms': {},
'mt': {'*': {}},
'm': {'com': {},
'net': {},
'org': {},
'gov': {},
'ac': {},
'co': {},
'or': {}},
'museum': {'academy': {},
'agriculture': {},
'air': {},
'airguard': {},
'alabama': {},
'alaska': {},
'amber': {},
'ambulance': {},
'american': {},
'americana': {},
'americanantiques': {},
'americanart': {},
'amsterdam': {},
'and': {},
'annefrank': {},
'anthro': {},
'anthropology': {},
'antiques': {},
'aquarium': {},
'arboretum': {},
'archaeological': {},
'archaeology': {},
'architecture': {},
'art': {},
'artanddesign': {},
'artcenter': {},
'artdeco': {},
'arteducation': {},
'artgallery': {},
'arts': {},
'artsandcrafts': {},
'asmatart': {},
'assassination': {},
'assisi': {},
'association': {},
'astronomy': {},
'atlanta': {},
'austin': {},
'australia': {},
'automotive': {},
'aviation': {},
'axis': {},
'badajoz': {},
'baghdad': {},
'bahn': {},
'bale': {},
'baltimore': {},
'barcelona': {},
'baseball': {},
'basel': {},
'baths': {},
'bauern': {},
'beauxarts': {},
'beeldengeluid': {},
'bellevue': {},
'bergba': {},
'berkeley': {},
'berlin': {},
'bern': {},
'bible': {},
'bilbao': {},
'bill': {},
'birdart': {},
'birthplace': {},
'bonn': {},
'boston': {},
'botanical': {},
'botanicalgarden': {},
'botanicgarden': {},
'botany': {},
'brandywinevalley': {},
'brasil': {},
'bristol': {},
'british': {},
'britishcolumbia': {},
'broadcast': {},
'brunel': {},
'brussel': {},
'brussels': {},
'bruxelles': {},
'building': {},
'burghof': {},
'bus': {},
'bushey': {},
'cadaques': {},
'california': {},
'cambridge': {},
'can': {},
'canada': {},
'capebreton': {},
'carrier': {},
'cartoonart': {},
'casadelamoneda': {},
'castle': {},
'castres': {},
'celtic': {},
'center': {},
'chattanooga': {},
'cheltenham': {},
'chesapeakebay': {},
'chicago': {},
'children': {},
'childrens': {},
'childrensgarden': {},
'chiropractic': {},
'chocolate': {},
'christiansburg': {},
'cincinnati': {},
'cinema': {},
'circus': {},
'civilisation': {},
'civilization': {},
'civilwar': {},
'clinton': {},
'clock': {},
'coal': {},
'coastaldefence': {},
'cody': {},
'coldwar': {},
'collection': {},
'colonialwilliamsburg': {},
'coloradoplatea': {},
'columbia': {},
'columbus': {},
'communication': {},
'communications': {},
'community': {},
'computer': {},
'computerhistory': {},
'comunicações': {},
'contemporary': {},
'contemporaryart': {},
'convent': {},
'copenhagen': {},
'corporation': {},
'correios-e-telecomunicações': {},
'corvette': {},
'costume': {},
'countryestate': {},
'county': {},
'crafts': {},
'cranbrook': {},
'creation': {},
'cultural': {},
'culturalcenter': {},
'culture': {},
'cyber': {},
'cymr': {},
'dali': {},
'dallas': {},
'database': {},
'ddr': {},
'decorativearts': {},
'delaware': {},
'delmenhorst': {},
'denmark': {},
'depot': {},
'design': {},
'detroit': {},
'dinosaur': {},
'discovery': {},
'dolls': {},
'donostia': {},
'durham': {},
'eastafrica': {},
'eastcoast': {},
'education': {},
'educational': {},
'egyptian': {},
'eisenbahn': {},
'elburg': {},
'elvendrell': {},
'embroidery': {},
'encyclopedic': {},
'england': {},
'entomology': {},
'environment': {},
'environmentalconservation': {},
'epilepsy': {},
'essex': {},
'estate': {},
'ethnology': {},
'exeter': {},
'exhibition': {},
'family': {},
'farm': {},
'farmequipment': {},
'farmers': {},
'farmstead': {},
'field': {},
'figueres': {},
'filatelia': {},
'film': {},
'fineart': {},
'finearts': {},
'finland': {},
'flanders': {},
'florida': {},
'force': {},
'fortmissoula': {},
'fortworth': {},
'foundation': {},
'francaise': {},
'frankfurt': {},
'franziskaner': {},
'freemasonry': {},
'freiburg': {},
'fribourg': {},
'frog': {},
'fundacio': {},
'furniture': {},
'gallery': {},
'garden': {},
'gateway': {},
'geelvinck': {},
'gemological': {},
'geology': {},
'georgia': {},
'giessen': {},
'glas': {},
'glass': {},
'gorge': {},
'grandrapids': {},
'graz': {},
'guernsey': {},
'halloffame': {},
'hamburg': {},
'handson': {},
'harvestcelebration': {},
'hawaii': {},
'health': {},
'heimatunduhren': {},
'hellas': {},
'helsinki': {},
'hembygdsforbund': {},
'heritage': {},
'histoire': {},
'historical': {},
'historicalsociety': {},
'historichouses': {},
'historisch': {},
'historisches': {},
'history': {},
'historyofscience': {},
'horology': {},
'house': {},
'humanities': {},
'illustration': {},
'imageandsound': {},
'indian': {},
'indiana': {},
'indianapolis': {},
'indianmarket': {},
'intelligence': {},
'interactive': {},
'iraq': {},
'iron': {},
'isleofman': {},
'jamison': {},
'jefferson': {},
'jerusalem': {},
'jewelry': {},
'jewish': {},
'jewishart': {},
'jfk': {},
'journalism': {},
'judaica': {},
'judygarland': {},
'juedisches': {},
'juif': {},
'karate': {},
'karikatur': {},
'kids': {},
'koebenhavn': {},
'koeln': {},
'kunst': {},
'kunstsammlung': {},
'kunstunddesign': {},
'labor': {},
'labour': {},
'lajolla': {},
'lancashire': {},
'landes': {},
'lans': {},
'läns': {},
'larsson': {},
'lewismiller': {},
'lincoln': {},
'linz': {},
'living': {},
'livinghistory': {},
'localhistory': {},
'london': {},
'losangeles': {},
'louvre': {},
'loyalist': {},
'lucerne': {},
'luxembourg': {},
'luzern': {},
'mad': {},
'madrid': {},
'mallorca': {},
'manchester': {},
'mansion': {},
'mansions': {},
'manx': {},
'marburg': {},
'maritime': {},
'maritimo': {},
'maryland': {},
'marylhurst': {},
'media': {},
'medical': {},
'medizinhistorisches': {},
'meeres': {},
'memorial': {},
'mesaverde': {},
'michigan': {},
'midatlantic': {},
'military': {},
'mill': {},
'miners': {},
'mining': {},
'minnesota': {},
'missile': {},
'missoula': {},
'modern': {},
'moma': {},
'money': {},
'monmouth': {},
'monticello': {},
'montreal': {},
'moscow': {},
'motorcycle': {},
'muenchen': {},
'muenster': {},
'mulhouse': {},
'muncie': {},
'museet': {},
'museumcenter': {},
'museumvereniging': {},
'music': {},
'national': {},
'nationalfirearms': {},
'nationalheritage': {},
'nativeamerican': {},
'naturalhistory': {},
'naturalhistorymuseum': {},
'naturalsciences': {},
'nature': {},
'naturhistorisches': {},
'natuurwetenschappen': {},
'naumburg': {},
'naval': {},
'nebraska': {},
'neues': {},
'newhampshire': {},
'newjersey': {},
'newmexico': {},
'newport': {},
'newspaper': {},
'newyork': {},
'niepce': {},
'norfolk': {},
'north': {},
'nrw': {},
'nuernberg': {},
'nuremberg': {},
'nyc': {},
'nyny': {},
'oceanographic': {},
'oceanographique': {},
'omaha': {},
'online': {},
'ontario': {},
'openair': {},
'oregon': {},
'oregontrail': {},
'otago': {},
'oxford': {},
'pacific': {},
'paderborn': {},
'palace': {},
'paleo': {},
'palmsprings': {},
'panama': {},
'paris': {},
'pasadena': {},
'pharmacy': {},
'philadelphia': {},
'philadelphiaarea': {},
'philately': {},
'phoenix': {},
'photography': {},
'pilots': {},
'pittsburgh': {},
'planetarium': {},
'plantation': {},
'plants': {},
'plaza': {},
'portal': {},
'portland': {},
'portlligat': {},
'posts-and-telecommunications': {},
'preservation': {},
'presidio': {},
'press': {},
'project': {},
'public': {},
'pubol': {},
'quebec': {},
'railroad': {},
'railway': {},
'research': {},
'resistance': {},
'riodejaneiro': {},
'rochester': {},
'rockart': {},
'roma': {},
'russia': {},
'saintlouis': {},
'salem': {},
'salvadordali': {},
'salzburg': {},
'sandiego': {},
'sanfrancisco': {},
'santabarbara': {},
'santacruz': {},
'santafe': {},
'saskatchewan': {},
'satx': {},
'savannahga': {},
'schlesisches': {},
'schoenbrunn': {},
'schokoladen': {},
'school': {},
'schweiz': {},
'science': {},
'scienceandhistory': {},
'scienceandindustry': {},
'sciencecenter': {},
'sciencecenters': {},
'science-fiction': {},
'sciencehistory': {},
'sciences': {},
'sciencesnaturelles': {},
'scotland': {},
'seaport': {},
'settlement': {},
'settlers': {},
'shell': {},
'sherbrooke': {},
'sibenik': {},
'silk': {},
'ski': {},
'skole': {},
'society': {},
'sologne': {},
'soundandvision': {},
'southcarolina': {},
'southwest': {},
'space': {},
'spy': {},
'square': {},
'stadt': {},
'stalbans': {},
'starnberg': {},
'state': {},
'stateofdelaware': {},
'station': {},
'steam': {},
'steiermark': {},
'stjohn': {},
'stockholm': {},
'stpetersburg': {},
'stuttgart': {},
'suisse': {},
'surgeonshall': {},
'surrey': {},
'svizzera': {},
'sweden': {},
'sydney': {},
'tank': {},
'tcm': {},
'technology': {},
'telekommunikation': {},
'television': {},
'texas': {},
'textile': {},
'theater': {},
'time': {},
'timekeeping': {},
'topology': {},
'torino': {},
'touch': {},
'town': {},
'transport': {},
'tree': {},
'trolley': {},
'trust': {},
'trustee': {},
'uhren': {},
'ulm': {},
'undersea': {},
'university': {},
'usa': {},
'usantiques': {},
'usarts': {},
'uscountryestate': {},
'usculture': {},
'usdecorativearts': {},
'usgarden': {},
'ushistory': {},
'ushuaia': {},
'uslivinghistory': {},
'utah': {},
'uvic': {},
'valley': {},
'vantaa': {},
'versailles': {},
'viking': {},
'village': {},
'virginia': {},
'virtual': {},
'virtuel': {},
'vlaanderen': {},
'volkenkunde': {},
'wales': {},
'wallonie': {},
'war': {},
'washingtondc': {},
'watchandclock': {},
'watch-and-clock': {},
'western': {},
'westfalen': {},
'whaling': {},
'wildlife': {},
'williamsburg': {},
'windmill': {},
'workshop': {},
'york': {},
'yorkshire': {},
'yosemite': {},
'youth': {},
'zoological': {},
'zoology': {},
'ירושלים': {},
'иком': {}},
'mv': {'aero': {},
'biz': {},
'com': {},
'coop': {},
'ed': {},
'gov': {},
'info': {},
'int': {},
'mil': {},
'museum': {},
'name': {},
'net': {},
'org': {},
'pro': {}},
'mw': {'ac': {},
'biz': {},
'co': {},
'com': {},
'coop': {},
'ed': {},
'gov': {},
'int': {},
'museum': {},
'net': {},
'org': {}},
'mx': {'com': {},
'org': {},
'gob': {},
'ed': {},
'net': {}},
'my': {'com': {},
'net': {},
'org': {},
'gov': {},
'ed': {},
'mil': {},
'name': {}},
'mz': {'*': {}},
'na': {'info': {},
'pro': {},
'name': {},
'school': {},
'or': {},
'dr': {},
'us': {},
'mx': {},
'ca': {},
'in': {},
'cc': {},
'tv': {},
'ws': {},
'mobi': {},
'co': {},
'com': {},
'org': {}},
'name': {},
'nc': {'asso': {}},
'ne': {},
'net': {'gb': {},
'se': {},
'uk': {},
'za': {}},
'nf': {'com': {},
'net': {},
'per': {},
'rec': {},
'web': {},
'arts': {},
'firm': {},
'info': {},
'other': {},
'store': {}},
'ng': {'ac': {},
'com': {},
'ed': {},
'gov': {},
'net': {},
'org': {}},
'ni': {'*': {}},
'nl': {'bv': {}},
'no': {'fhs': {},
'vgs': {},
'fylkesbibl': {},
'folkebibl': {},
'museum': {},
'idrett': {},
'priv': {},
'mil': {},
'stat': {},
'dep': {},
'kommune': {},
'herad': {},
'aa': {'gs': {}},
'ah': {'gs': {}},
'b': {'gs': {}},
'fm': {'gs': {}},
'hl': {'gs': {}},
'hm': {'gs': {}},
'jan-mayen': {'gs': {}},
'mr': {'gs': {}},
'nl': {'gs': {}},
'nt': {'gs': {}},
'of': {'gs': {}},
'ol': {'gs': {}},
'oslo': {'gs': {}},
'rl': {'gs': {}},
'sf': {'gs': {}},
'st': {'gs': {}},
'svalbard': {'gs': {}},
'tm': {'gs': {}},
'tr': {'gs': {}},
'va': {'gs': {}},
'vf': {'gs': {}},
'akrehamn': {},
'åkrehamn': {},
'algard': {},
'ålgård': {},
'arna': {},
'brumunddal': {},
'bryne': {},
'bronnoysund': {},
'brønnøysund': {},
'drobak': {},
'drøbak': {},
'egersund': {},
'fetsund': {},
'floro': {},
'florø': {},
'fredrikstad': {},
'hokksund': {},
'honefoss': {},
'hønefoss': {},
'jessheim': {},
'jorpeland': {},
'jørpeland': {},
'kirkenes': {},
'kopervik': {},
'krokstadelva': {},
'langevag': {},
'langevåg': {},
'leirvik': {},
'mjondalen': {},
'mjøndalen': {},
'mo-i-rana': {},
'mosjoen': {},
'mosjøen': {},
'nesoddtangen': {},
'orkanger': {},
'osoyro': {},
'osøyro': {},
'raholt': {},
'råholt': {},
'sandnessjoen': {},
'sandnessjøen': {},
'skedsmokorset': {},
'slattum': {},
'spjelkavik': {},
'stathelle': {},
'stavern': {},
'stjordalshalsen': {},
'stjørdalshalsen': {},
'tananger': {},
'tranby': {},
'vossevangen': {},
'afjord': {},
'åfjord': {},
'agdenes': {},
'al': {},
'ål': {},
'alesund': {},
'ålesund': {},
'alstahaug': {},
'alta': {},
'áltá': {},
'alaheadj': {},
'álaheadj': {},
'alvdal': {},
'amli': {},
'åmli': {},
'amot': {},
'åmot': {},
'andeb': {},
'andoy': {},
'andøy': {},
'andasuolo': {},
'ardal': {},
'årdal': {},
'aremark': {},
'arendal': {},
'ås': {},
'aseral': {},
'åseral': {},
'asker': {},
'askim': {},
'askvoll': {},
'askoy': {},
'askøy': {},
'asnes': {},
'åsnes': {},
'audnedaln': {},
'aukra': {},
'aure': {},
'aurland': {},
'aurskog-holand': {},
'aurskog-høland': {},
'austevoll': {},
'austrheim': {},
'averoy': {},
'averøy': {},
'balestrand': {},
'ballangen': {},
'balat': {},
'bálát': {},
'balsfjord': {},
'bahccavuotna': {},
'báhccavuotna': {},
'bamble': {},
'bard': {},
'beard': {},
'beiarn': {},
'bajddar': {},
'bájddar': {},
'baidar': {},
'báidár': {},
'berg': {},
'bergen': {},
'berlevag': {},
'berlevåg': {},
'bearalvahki': {},
'bearalváhki': {},
'bindal': {},
'birkenes': {},
'bjarkoy': {},
'bjarkøy': {},
'bjerkreim': {},
'bjugn': {},
'bodo': {},
'bodø': {},
'badaddja': {},
'bådåddjå': {},
'budejj': {},
'bokn': {},
'bremanger': {},
'bronnoy': {},
'brønnøy': {},
'bygland': {},
'bykle': {},
'barum': {},
'bærum': {},
'telemark': {'bo': {},
'bø': {}},
'nordland': {'bo': {},
'bø': {},
'heroy': {},
'herøy': {}},
'bievat': {},
'bievát': {},
'bomlo': {},
'bømlo': {},
'batsfjord': {},
'båtsfjord': {},
'bahcavuotna': {},
'báhcavuotna': {},
'dovre': {},
'drammen': {},
'drangedal': {},
'dyroy': {},
'dyrøy': {},
'donna': {},
'dønna': {},
'eid': {},
'eidfjord': {},
'eidsberg': {},
'eidskog': {},
'eidsvoll': {},
'eigersund': {},
'elverum': {},
'enebakk': {},
'engerdal': {},
'etne': {},
'etnedal': {},
'evenes': {},
'evenassi': {},
'evenášši': {},
'evje-og-hornnes': {},
'farsund': {},
'fauske': {},
'fuossko': {},
'fuoisk': {},
'fedje': {},
'fet': {},
'finnoy': {},
'finnøy': {},
'fitjar': {},
'fjaler': {},
'fjell': {},
'flakstad': {},
'flatanger': {},
'flekkefjord': {},
'flesberg': {},
'flora': {},
'fla': {},
'flå': {},
'folldal': {},
'forsand': {},
'fosnes': {},
'frei': {},
'frogn': {},
'froland': {},
'frosta': {},
'frana': {},
'fræna': {},
'froya': {},
'frøya': {},
'fusa': {},
'fyresdal': {},
'forde': {},
'førde': {},
'gamvik': {},
'gangaviika': {},
'gáŋgaviika': {},
'gaular': {},
'gausdal': {},
'gildeskal': {},
'gildeskål': {},
'giske': {},
'gjemnes': {},
'gjerdrum': {},
'gjerstad': {},
'gjesdal': {},
'gjovik': {},
'gjøvik': {},
'gloppen': {},
'gol': {},
'gran': {},
'grane': {},
'granvin': {},
'gratangen': {},
'grimstad': {},
'grong': {},
'kraanghke': {},
'kråanghke': {},
'grue': {},
'gulen': {},
'hadsel': {},
'halden': {},
'halsa': {},
'hamar': {},
'hamaroy': {},
'habmer': {},
'hábmer': {},
'hapmir': {},
'hápmir': {},
'hammerfest': {},
'hammarfeasta': {},
'hámmárfeasta': {},
'haram': {},
'hareid': {},
'harstad': {},
'hasvik': {},
'aknoluokta': {},
'ákŋoluokta': {},
'hattfjelldal': {},
'aarborte': {},
'haugesund': {},
'hemne': {},
'hemnes': {},
'hemsedal': {},
'more-og-romsdal': {'heroy': {},
'sande': {}},
'møre-og-romsdal': {'herøy': {},
'sande': {}},
'hitra': {},
'hjartdal': {},
'hjelmeland': {},
'hobol': {},
'hobøl': {},
'hof': {},
'hol': {},
'hole': {},
'holmestrand': {},
'holtalen': {},
'holtålen': {},
'hornindal': {},
'horten': {},
'hurdal': {},
'hurum': {},
'hvaler': {},
'hyllestad': {},
'hagebostad': {},
'hægebostad': {},
'hoyanger': {},
'høyanger': {},
'hoylandet': {},
'høylandet': {},
'ha': {},
'hå': {},
'ibestad': {},
'inderoy': {},
'inderøy': {},
'iveland': {},
'jevnaker': {},
'jondal': {},
'jolster': {},
'jølster': {},
'karasjok': {},
'karasjohka': {},
'kárášjohka': {},
'karlsoy': {},
'galsa': {},
'gálsá': {},
'karmoy': {},
'karmøy': {},
'kautokeino': {},
'guovdageaidn': {},
'klepp': {},
'klab': {},
'klæb': {},
'kongsberg': {},
'kongsvinger': {},
'kragero': {},
'kragerø': {},
'kristiansand': {},
'kristiansund': {},
'krodsherad': {},
'krødsherad': {},
'kvalsund': {},
'rahkkeravj': {},
'ráhkkerávj': {},
'kvam': {},
'kvinesdal': {},
'kvinnherad': {},
'kviteseid': {},
'kvitsoy': {},
'kvitsøy': {},
'kvafjord': {},
'kvæfjord': {},
'giehtavuoatna': {},
'kvanangen': {},
'kvænangen': {},
'navuotna': {},
'návuotna': {},
'kafjord': {},
'kåfjord': {},
'gaivuotna': {},
'gáivuotna': {},
'larvik': {},
'lavangen': {},
'lavagis': {},
'loabat': {},
'loabát': {},
'lebesby': {},
'davvesiida': {},
'leikanger': {},
'leirfjord': {},
'leka': {},
'leksvik': {},
'lenvik': {},
'leangaviika': {},
'leaŋgaviika': {},
'lesja': {},
'levanger': {},
'lier': {},
'lierne': {},
'lillehammer': {},
'lillesand': {},
'lindesnes': {},
'lindas': {},
'lindås': {},
'lom': {},
'loppa': {},
'lahppi': {},
'láhppi': {},
'lund': {},
'lunner': {},
'luroy': {},
'lurøy': {},
'luster': {},
'lyngdal': {},
'lyngen': {},
'ivg': {},
'lardal': {},
'lerdal': {},
'lærdal': {},
'lodingen': {},
'lødingen': {},
'lorenskog': {},
'lørenskog': {},
'loten': {},
'løten': {},
'malvik': {},
'masoy': {},
'måsøy': {},
'muosat': {},
'muosát': {},
'mandal': {},
'marker': {},
'marnardal': {},
'masfjorden': {},
'meland': {},
'meldal': {},
'melhus': {},
'meloy': {},
'meløy': {},
'meraker': {},
'meråker': {},
'moareke': {},
'moåreke': {},
'midsund': {},
'midtre-gauldal': {},
'modalen': {},
'modum': {},
'molde': {},
'moskenes': {},
'moss': {},
'mosvik': {},
'malselv': {},
'målselv': {},
'malatvuopmi': {},
'málatvuopmi': {},
'namdalseid': {},
'aejrie': {},
'namsos': {},
'namsskogan': {},
'naamesjevuemie': {},
'nååmesjevuemie': {},
'laakesvuemie': {},
'nannestad': {},
'narvik': {},
'narviika': {},
'naustdal': {},
'nedre-eiker': {},
'akershus': {'nes': {}},
'buskerud': {'nes': {}},
'nesna': {},
'nesodden': {},
'nesseby': {},
'unjarga': {},
'unjárga': {},
'nesset': {},
'nissedal': {},
'nittedal': {},
'nord-aurdal': {},
'nord-fron': {},
'nord-odal': {},
'norddal': {},
'nordkapp': {},
'davvenjarga': {},
'davvenjárga': {},
'nordre-land': {},
'nordreisa': {},
'raisa': {},
'ráisa': {},
'nore-og-uvdal': {},
'notodden': {},
'naroy': {},
'nærøy': {},
'notteroy': {},
'nøtterøy': {},
'odda': {},
'oksnes': {},
'øksnes': {},
'oppdal': {},
'oppegard': {},
'oppegård': {},
'orkdal': {},
'orland': {},
'ørland': {},
'orskog': {},
'ørskog': {},
'orsta': {},
'ørsta': {},
'hedmark': {'os': {},
'valer': {},
'våler': {}},
'hordaland': {'os': {}},
'osen': {},
'osteroy': {},
'osterøy': {},
'ostre-toten': {},
'østre-toten': {},
'overhalla': {},
'ovre-eiker': {},
'øvre-eiker': {},
'oyer': {},
'øyer': {},
'oygarden': {},
'øygarden': {},
'oystre-slidre': {},
'øystre-slidre': {},
'porsanger': {},
'porsang': {},
'porsáŋg': {},
'porsgrunn': {},
'radoy': {},
'radøy': {},
'rakkestad': {},
'rana': {},
'ruovat': {},
'randaberg': {},
'rauma': {},
'rendalen': {},
'renneb': {},
'rennesoy': {},
'rennesøy': {},
'rindal': {},
'ringeb': {},
'ringerike': {},
'ringsaker': {},
'rissa': {},
'risor': {},
'risør': {},
'roan': {},
'rollag': {},
'rygge': {},
'ralingen': {},
'rælingen': {},
'rodoy': {},
'rødøy': {},
'romskog': {},
'rømskog': {},
'roros': {},
'røros': {},
'rost': {},
'røst': {},
'royken': {},
'røyken': {},
'royrvik': {},
'røyrvik': {},
'rade': {},
'råde': {},
'salangen': {},
'siellak': {},
'saltdal': {},
'salat': {},
'sálát': {},
'sálat': {},
'samnanger': {},
'vestfold': {'sande': {}},
'sandefjord': {},
'sandnes': {},
'sandoy': {},
'sandøy': {},
'sarpsborg': {},
'sauda': {},
'sauherad': {},
'sel': {},
'selb': {},
'selje': {},
'seljord': {},
'sigdal': {},
'siljan': {},
'sirdal': {},
'skaun': {},
'skedsmo': {},
'ski': {},
'skien': {},
'skiptvet': {},
'skjervoy': {},
'skjervøy': {},
'skierva': {},
'skiervá': {},
'skjak': {},
'skjåk': {},
'skodje': {},
'skanland': {},
'skånland': {},
'skanit': {},
'skánit': {},
'smola': {},
'smøla': {},
'snillfjord': {},
'snasa': {},
'snåsa': {},
'snoasa': {},
'snaase': {},
'snåase': {},
'sogndal': {},
'sokndal': {},
'sola': {},
'solund': {},
'songdalen': {},
'sortland': {},
'spydeberg': {},
'stange': {},
'stavanger': {},
'steigen': {},
'steinkjer': {},
'stjordal': {},
'stjørdal': {},
'stokke': {},
'stor-elvdal': {},
'stord': {},
'stordal': {},
'storfjord': {},
'omasvuotna': {},
'strand': {},
'stranda': {},
'stryn': {},
'sula': {},
'suldal': {},
'sund': {},
'sunndal': {},
'surnadal': {},
'sveio': {},
'svelvik': {},
'sykkylven': {},
'sogne': {},
'søgne': {},
'somna': {},
'sømna': {},
'sondre-land': {},
'søndre-land': {},
'sor-aurdal': {},
'sør-aurdal': {},
'sor-fron': {},
'sør-fron': {},
'sor-odal': {},
'sør-odal': {},
'sor-varanger': {},
'sør-varanger': {},
'matta-varjjat': {},
'mátta-várjjat': {},
'sorfold': {},
'sørfold': {},
'sorreisa': {},
'sørreisa': {},
'sorum': {},
'sørum': {},
'tana': {},
'deatn': {},
'time': {},
'tingvoll': {},
'tinn': {},
'tjeldsund': {},
'dielddanuorri': {},
'tjome': {},
'tjøme': {},
'tokke': {},
'tolga': {},
'torsken': {},
'tranoy': {},
'tranøy': {},
'tromso': {},
'tromsø': {},
'tromsa': {},
'romsa': {},
'trondheim': {},
'troandin': {},
'trysil': {},
'trana': {},
'træna': {},
'trogstad': {},
'trøgstad': {},
'tvedestrand': {},
'tydal': {},
'tynset': {},
'tysfjord': {},
'divtasvuodna': {},
'divttasvuotna': {},
'tysnes': {},
'tysvar': {},
'tysvær': {},
'tonsberg': {},
'tønsberg': {},
'ullensaker': {},
'ullensvang': {},
'ulvik': {},
'utsira': {},
'vadso': {},
'vadsø': {},
'cahcesuolo': {},
'čáhcesuolo': {},
'vaksdal': {},
'valle': {},
'vang': {},
'vanylven': {},
'vardo': {},
'vardø': {},
'varggat': {},
'várggát': {},
'vefsn': {},
'vaapste': {},
'vega': {},
'vegarshei': {},
'vegårshei': {},
'vennesla': {},
'verdal': {},
'verran': {},
'vestby': {},
'vestnes': {},
'vestre-slidre': {},
'vestre-toten': {},
'vestvagoy': {},
'vestvågøy': {},
'vevelstad': {},
'vik': {},
'vikna': {},
'vindafjord': {},
'volda': {},
'voss': {},
'varoy': {},
'værøy': {},
'vagan': {},
'vågan': {},
'voagat': {},
'vagsoy': {},
'vågsøy': {},
'vaga': {},
'vågå': {},
'ostfold': {'valer': {}},
'østfold': {'våler': {}}},
'np': {'*': {}},
'nr': {'biz': {},
'info': {},
'gov': {},
'ed': {},
'org': {},
'net': {},
'com': {}},
'n': {},
'nz': {'*': {}},
'om': {'*': {},
'mediaphone': {'!': {}},
'nawrastelecom': {'!': {}},
'nawras': {'!': {}},
'omanmobile': {'!': {}},
'omanpost': {'!': {}},
'omantel': {'!': {}},
'rakpetroleum': {'!': {}},
'siemens': {'!': {}},
'songfest': {'!': {}},
'statecouncil': {'!': {}}},
'org': {'ae': {},
'za': {}},
'pa': {'ac': {},
'gob': {},
'com': {},
'org': {},
'sld': {},
'ed': {},
'net': {},
'ing': {},
'abo': {},
'med': {},
'nom': {}},
'pe': {'ed': {},
'gob': {},
'nom': {},
'mil': {},
'org': {},
'com': {},
'net': {}},
'pf': {'com': {},
'org': {},
'ed': {}},
'pg': {'*': {}},
'ph': {'com': {},
'net': {},
'org': {},
'gov': {},
'ed': {},
'ngo': {},
'mil': {},
'i': {}},
'pk': {'com': {},
'net': {},
'ed': {},
'org': {},
'fam': {},
'biz': {},
'web': {},
'gov': {},
'gob': {},
'gok': {},
'gon': {},
'gop': {},
'gos': {},
'info': {}},
'pl': {'aid': {},
'agro': {},
'atm': {},
'auto': {},
'biz': {},
'com': {},
'ed': {},
'gmina': {},
'gsm': {},
'info': {},
'mail': {},
'miasta': {},
'media': {},
'mil': {},
'net': {},
'nieruchomosci': {},
'nom': {},
'org': {},
'pc': {},
'powiat': {},
'priv': {},
'realestate': {},
'rel': {},
'sex': {},
'shop': {},
'sklep': {},
'sos': {},
'szkola': {},
'targi': {},
'tm': {},
'tourism': {},
'travel': {},
'turystyka': {},
'6bone': {},
'art': {},
'mbone': {},
'gov': {'uw': {},
'um': {},
'ug': {},
'upow': {},
'starostwo': {},
'so': {},
'sr': {},
'po': {},
'pa': {}},
'ngo': {},
'irc': {},
'usenet': {},
'augustow': {},
'babia-gora': {},
'bedzin': {},
'beskidy': {},
'bialowieza': {},
'bialystok': {},
'bielawa': {},
'bieszczady': {},
'boleslawiec': {},
'bydgoszcz': {},
'bytom': {},
'cieszyn': {},
'czeladz': {},
'czest': {},
'dlugoleka': {},
'elblag': {},
'elk': {},
'glogow': {},
'gniezno': {},
'gorlice': {},
'grajewo': {},
'ilawa': {},
'jaworzno': {},
'jelenia-gora': {},
'jgora': {},
'kalisz': {},
'kazimierz-dolny': {},
'karpacz': {},
'kartuzy': {},
'kaszuby': {},
'katowice': {},
'kepno': {},
'ketrzyn': {},
'klodzko': {},
'kobierzyce': {},
'kolobrzeg': {},
'konin': {},
'konskowola': {},
'kutno': {},
'lapy': {},
'lebork': {},
'legnica': {},
'lezajsk': {},
'limanowa': {},
'lomza': {},
'lowicz': {},
'lubin': {},
'lukow': {},
'malbork': {},
'malopolska': {},
'mazowsze': {},
'mazury': {},
'mielec': {},
'mielno': {},
'mragowo': {},
'naklo': {},
'nowaruda': {},
'nysa': {},
'olawa': {},
'olecko': {},
'olkusz': {},
'olsztyn': {},
'opoczno': {},
'opole': {},
'ostroda': {},
'ostroleka': {},
'ostrowiec': {},
'ostrowwlkp': {},
'pila': {},
'pisz': {},
'podhale': {},
'podlasie': {},
'polkowice': {},
'pomorze': {},
'pomorskie': {},
'prochowice': {},
'pruszkow': {},
'przeworsk': {},
'pulawy': {},
'radom': {},
'rawa-maz': {},
'rybnik': {},
'rzeszow': {},
'sanok': {},
'sejny': {},
'siedlce': {},
'slask': {},
'slupsk': {},
'sosnowiec': {},
'stalowa-wola': {},
'skoczow': {},
'starachowice': {},
'stargard': {},
'suwalki': {},
'swidnica': {},
'swiebodzin': {},
'swinoujscie': {},
'szczecin': {},
'szczytno': {},
'tarnobrzeg': {},
'tgory': {},
'turek': {},
'tychy': {},
'ustka': {},
'walbrzych': {},
'warmia': {},
'warszawa': {},
'waw': {},
'wegrow': {},
'wielun': {},
'wlocl': {},
'wloclawek': {},
'wodzislaw': {},
'wolomin': {},
'wroclaw': {},
'zachpomor': {},
'zagan': {},
'zarow': {},
'zgora': {},
'zgorzelec': {},
'gda': {},
'gdansk': {},
'gdynia': {},
'med': {},
'sopot': {},
'gliwice': {},
'krakow': {},
'poznan': {},
'wroc': {},
'zakopane': {},
'co': {}},
'pn': {'gov': {},
'co': {},
'org': {},
'ed': {},
'net': {}},
'pr': {'com': {},
'net': {},
'org': {},
'gov': {},
'ed': {},
'isla': {},
'pro': {},
'biz': {},
'info': {},
'name': {},
'est': {},
'prof': {},
'ac': {}},
'pro': {'aca': {},
'bar': {},
'cpa': {},
'jur': {},
'law': {},
'med': {},
'eng': {}},
'ps': {'ed': {},
'gov': {},
'sec': {},
'plo': {},
'com': {},
'org': {},
'net': {}},
'pt': {'net': {},
'gov': {},
'org': {},
'ed': {},
'int': {},
'publ': {},
'com': {},
'nome': {}},
'pw': {'co': {},
'ne': {},
'or': {},
'ed': {},
'go': {},
'bela': {}},
'py': {'*': {}},
'qa': {'*': {}},
're': {'com': {},
'asso': {},
'nom': {}},
'ro': {'com': {},
'org': {},
'tm': {},
'nt': {},
'nom': {},
'info': {},
'rec': {},
'arts': {},
'firm': {},
'store': {},
'www': {}},
'rs': {'co': {},
'org': {},
'ed': {},
'ac': {},
'gov': {},
'in': {}},
'r': {'ac': {},
'com': {},
'ed': {},
'int': {},
'net': {},
'org': {},
'pp': {},
'adygeya': {},
'altai': {},
'amur': {},
'arkhangelsk': {},
'astrakhan': {},
'bashkiria': {},
'belgorod': {},
'bir': {},
'bryansk': {},
'buryatia': {},
'cbg': {},
'chel': {},
'chelyabinsk': {},
'chita': {},
'chukotka': {},
'chuvashia': {},
'dagestan': {},
'dudinka': {},
'e-burg': {},
'grozny': {},
'irkutsk': {},
'ivanovo': {},
'izhevsk': {},
'jar': {},
'joshkar-ola': {},
'kalmykia': {},
'kaluga': {},
'kamchatka': {},
'karelia': {},
'kazan': {},
'kchr': {},
'kemerovo': {},
'khabarovsk': {},
'khakassia': {},
'khv': {},
'kirov': {},
'koenig': {},
'komi': {},
'kostroma': {},
'krasnoyarsk': {},
'kuban': {},
'kurgan': {},
'kursk': {},
'lipetsk': {},
'magadan': {},
'mari': {},
'mari-el': {},
'marine': {},
'mordovia': {},
'mosreg': {},
'msk': {},
'murmansk': {},
'nalchik': {},
'nnov': {},
'nov': {},
'novosibirsk': {},
'nsk': {},
'omsk': {},
'orenburg': {},
'oryol': {},
'palana': {},
'penza': {},
'perm': {},
'pskov': {},
'ptz': {},
'rnd': {},
'ryazan': {},
'sakhalin': {},
'samara': {},
'saratov': {},
'simbirsk': {},
'smolensk': {},
'spb': {},
'stavropol': {},
'stv': {},
'surgut': {},
'tambov': {},
'tatarstan': {},
'tom': {},
'tomsk': {},
'tsaritsyn': {},
'tsk': {},
'tula': {},
'tuva': {},
'tver': {},
'tyumen': {},
'udm': {},
'udmurtia': {},
'ulan-ude': {},
'vladikavkaz': {},
'vladimir': {},
'vladivostok': {},
'volgograd': {},
'vologda': {},
'voronezh': {},
'vrn': {},
'vyatka': {},
'yakutia': {},
'yamal': {},
'yaroslavl': {},
'yekaterinburg': {},
'yuzhno-sakhalinsk': {},
'amursk': {},
'baikal': {},
'cmw': {},
'fareast': {},
'jamal': {},
'kms': {},
'k-uralsk': {},
'kustanai': {},
'kuzbass': {},
'magnitka': {},
'mytis': {},
'nakhodka': {},
'nkz': {},
'norilsk': {},
'oskol': {},
'pyatigorsk': {},
'rubtsovsk': {},
'snz': {},
'syzran': {},
'vdonsk': {},
'zgrad': {},
'gov': {},
'mil': {},
'test': {}},
'rw': {'gov': {},
'net': {},
'ed': {},
'ac': {},
'com': {},
'co': {},
'int': {},
'mil': {},
'gouv': {}},
'sa': {'com': {},
'net': {},
'org': {},
'gov': {},
'med': {},
'pub': {},
'ed': {},
'sch': {}},
'sb': {'com': {},
'ed': {},
'gov': {},
'net': {},
'org': {}},
'sc': {'com': {},
'gov': {},
'net': {},
'org': {},
'ed': {}},
'sd': {'com': {},
'net': {},
'org': {},
'ed': {},
'med': {},
'gov': {},
'info': {}},
'se': {'a': {},
'ac': {},
'b': {},
'bd': {},
'brand': {},
'c': {},
'd': {},
'e': {},
'f': {},
'fh': {},
'fhsk': {},
'fhv': {},
'g': {},
'h': {},
'i': {},
'k': {},
'komforb': {},
'kommunalforbund': {},
'komvux': {},
'l': {},
'lanbib': {},
'm': {},
'n': {},
'naturbruksgymn': {},
'o': {},
'org': {},
'p': {},
'parti': {},
'pp': {},
'press': {},
'r': {},
's': {},
'sshn': {},
't': {},
'tm': {},
'': {},
'w': {},
'x': {},
'y': {},
'z': {}},
'sg': {'com': {},
'net': {},
'org': {},
'gov': {},
'ed': {},
'per': {}},
'sh': {},
'si': {},
'sk': {},
'sl': {'com': {},
'net': {},
'ed': {},
'gov': {},
'org': {}},
'sm': {},
'sn': {'art': {},
'com': {},
'ed': {},
'gouv': {},
'org': {},
'perso': {},
'univ': {}},
'so': {'com': {},
'net': {},
'org': {}},
'sr': {},
'st': {'co': {},
'com': {},
'consulado': {},
'ed': {},
'embaixada': {},
'gov': {},
'mil': {},
'net': {},
'org': {},
'principe': {},
'saotome': {},
'store': {}},
's': {},
'sv': {'*': {}},
'sy': {'ed': {},
'gov': {},
'net': {},
'mil': {},
'com': {},
'org': {}},
'sz': {'co': {},
'ac': {},
'org': {}},
'tc': {},
'td': {},
'tel': {},
'tf': {},
'tg': {},
'th': {'ac': {},
'co': {},
'go': {},
'in': {},
'mi': {},
'net': {},
'or': {}},
'tj': {'ac': {},
'biz': {},
'co': {},
'com': {},
'ed': {},
'go': {},
'gov': {},
'int': {},
'mil': {},
'name': {},
'net': {},
'nic': {},
'org': {},
'test': {},
'web': {}},
'tk': {},
'tl': {'gov': {}},
'tm': {},
'tn': {'com': {},
'ens': {},
'fin': {},
'gov': {},
'ind': {},
'intl': {},
'nat': {},
'net': {},
'org': {},
'info': {},
'perso': {},
'tourism': {},
'edunet': {},
'rnrt': {},
'rns': {},
'rn': {},
'mincom': {},
'agrinet': {},
'defense': {},
'turen': {}},
'to': {'com': {},
'gov': {},
'net': {},
'org': {},
'ed': {},
'mil': {}},
'tr': {'*': {},
'nic': {'!': {}},
'tsk': {'!': {}},
'nc': {'gov': {}}},
'travel': {},
'tt': {'co': {},
'com': {},
'org': {},
'net': {},
'biz': {},
'info': {},
'pro': {},
'int': {},
'coop': {},
'jobs': {},
'mobi': {},
'travel': {},
'museum': {},
'aero': {},
'name': {},
'gov': {},
'ed': {}},
'tv': {},
'tw': {'ed': {},
'gov': {},
'mil': {},
'com': {},
'net': {},
'org': {},
'idv': {},
'game': {},
'ebiz': {},
'club': {},
'網路': {},
'組織': {},
'商業': {}},
'tz': {'ac': {},
'co': {},
'go': {},
'mil': {},
'ne': {},
'or': {},
'sc': {}},
'ua': {'com': {},
'ed': {},
'gov': {},
'in': {},
'net': {},
'org': {},
'cherkassy': {},
'chernigov': {},
'chernovtsy': {},
'ck': {},
'cn': {},
'crimea': {},
'cv': {},
'dn': {},
'dnepropetrovsk': {},
'donetsk': {},
'dp': {},
'if': {},
'ivano-frankivsk': {},
'kh': {},
'kharkov': {},
'kherson': {},
'khmelnitskiy': {},
'kiev': {},
'kirovograd': {},
'km': {},
'kr': {},
'ks': {},
'kv': {},
'lg': {},
'lugansk': {},
'lutsk': {},
'lviv': {},
'mk': {},
'nikolaev': {},
'od': {},
'odessa': {},
'pl': {},
'poltava': {},
'rovno': {},
'rv': {},
'sebastopol': {},
'sumy': {},
'te': {},
'ternopil': {},
'uzhgorod': {},
'vinnica': {},
'vn': {},
'zaporizhzhe': {},
'zp': {},
'zhitomir': {},
'zt': {}},
'ug': {'co': {},
'ac': {},
'sc': {},
'go': {},
'ne': {},
'or': {}},
'uk': {'*': {},
'sch': {'*': {}},
'bl': {'!': {}},
'british-library': {'!': {}},
'icnet': {'!': {}},
'jet': {'!': {}},
'nel': {'!': {}},
'nhs': {'!': {}},
'nls': {'!': {}},
'national-library-scotland': {'!': {}},
'parliament': {'!': {}}},
'us': {'dni': {},
'fed': {},
'isa': {},
'kids': {},
'nsn': {},
'ak': {'k12': {},
'cc': {},
'lib': {}},
'al': {'k12': {},
'cc': {},
'lib': {}},
'ar': {'k12': {},
'cc': {},
'lib': {}},
'as': {'k12': {},
'cc': {},
'lib': {}},
'az': {'k12': {},
'cc': {},
'lib': {}},
'ca': {'k12': {},
'cc': {},
'lib': {}},
'co': {'k12': {},
'cc': {},
'lib': {}},
'ct': {'k12': {},
'cc': {},
'lib': {}},
'dc': {'k12': {},
'cc': {},
'lib': {}},
'de': {'k12': {},
'cc': {},
'lib': {}},
'fl': {'k12': {},
'cc': {},
'lib': {}},
'ga': {'k12': {},
'cc': {},
'lib': {}},
'g': {'k12': {},
'cc': {},
'lib': {}},
'hi': {'cc': {},
'lib': {}},
'ia': {'k12': {},
'cc': {},
'lib': {}},
'id': {'k12': {},
'cc': {},
'lib': {}},
'il': {'k12': {},
'cc': {},
'lib': {}},
'in': {'k12': {},
'cc': {},
'lib': {}},
'ks': {'k12': {},
'cc': {},
'lib': {}},
'ky': {'k12': {},
'cc': {},
'lib': {}},
'la': {'k12': {},
'cc': {},
'lib': {}},
'ma': {'k12': {'pvt': {},
'chtr': {},
'paroch': {}},
'cc': {},
'lib': {}},
'md': {'k12': {},
'cc': {},
'lib': {}},
'me': {'k12': {},
'cc': {},
'lib': {}},
'mi': {'k12': {},
'cc': {},
'lib': {}},
'mn': {'k12': {},
'cc': {},
'lib': {}},
'mo': {'k12': {},
'cc': {},
'lib': {}},
'ms': {'k12': {},
'cc': {},
'lib': {}},
'mt': {'k12': {},
'cc': {},
'lib': {}},
'nc': {'k12': {},
'cc': {},
'lib': {}},
'nd': {'k12': {},
'cc': {},
'lib': {}},
'ne': {'k12': {},
'cc': {},
'lib': {}},
'nh': {'k12': {},
'cc': {},
'lib': {}},
'nj': {'k12': {},
'cc': {},
'lib': {}},
'nm': {'k12': {},
'cc': {},
'lib': {}},
'nv': {'k12': {},
'cc': {},
'lib': {}},
'ny': {'k12': {},
'cc': {},
'lib': {}},
'oh': {'k12': {},
'cc': {},
'lib': {}},
'ok': {'k12': {},
'cc': {},
'lib': {}},
'or': {'k12': {},
'cc': {},
'lib': {}},
'pa': {'k12': {},
'cc': {},
'lib': {}},
'pr': {'k12': {},
'cc': {},
'lib': {}},
'ri': {'k12': {},
'cc': {},
'lib': {}},
'sc': {'k12': {},
'cc': {},
'lib': {}},
'sd': {'k12': {},
'cc': {},
'lib': {}},
'tn': {'k12': {},
'cc': {},
'lib': {}},
'tx': {'k12': {},
'cc': {},
'lib': {}},
'ut': {'k12': {},
'cc': {},
'lib': {}},
'vi': {'k12': {},
'cc': {},
'lib': {}},
'vt': {'k12': {},
'cc': {},
'lib': {}},
'va': {'k12': {},
'cc': {},
'lib': {}},
'wa': {'k12': {},
'cc': {},
'lib': {}},
'wi': {'k12': {},
'cc': {},
'lib': {}},
'wv': {'k12': {},
'cc': {},
'lib': {}},
'wy': {'k12': {},
'cc': {},
'lib': {}}},
'uy': {'*': {}},
'uz': {'com': {},
'co': {}},
'va': {},
'vc': {'com': {},
'net': {},
'org': {},
'gov': {},
'mil': {},
'ed': {}},
've': {'*': {}},
'vg': {},
'vi': {'co': {},
'com': {},
'k12': {},
'net': {},
'org': {}},
'vn': {'com': {},
'net': {},
'org': {},
'ed': {},
'gov': {},
'int': {},
'ac': {},
'biz': {},
'info': {},
'name': {},
'pro': {},
'health': {}},
'v': {},
'ws': {'com': {},
'net': {},
'org': {},
'gov': {},
'ed': {}},
'امارات': {},
'中国': {},
'中國': {},
'مصر': {},
'香港': {},
'الاردن': {},
'ලංකා': {},
'இலங்கை': {},
'فلسطين': {},
'рф': {},
'قطر': {},
'السعودية': {},
'新加坡': {},
'சிங்கப்பூர்': {},
'ไทย': {},
'تونس': {},
'台灣': {},
'台湾': {},
'ye': {'*': {}},
'y': {'*': {}},
'za': {'*': {}},
'zm': {'*': {}},
'zw': {'*': {}}}


def getRegisteredDomainFromURL(url):
    return getRegisteredDomain(urlparse(url).hostname)


def getRegisteredDomain(signingDomain):
    """Remove subdomains from a signing domain to get the registered domain.

    dkim-reputation.org blocks signing domains on the level of registered
    domains to rate senders who use e.g. a.spamdomain.tld, b.spamdomain.tld,
    ... under the most common identifier - the registered domain - finally.

    """

    signingDomainParts = signingDomain.split('.')

    result = findRegisteredDomain(signingDomainParts, tldTree)

    if not result:
        # this is an invalid domain name
        return None

    # assure there is at least 1 TLD in the stripped signing domain
    if '.' not in result:
        cnt = len(signingDomainParts)
        if (cnt == 1 or len(signingDomainParts) < cnt + 2):
            return None
        return signingDomainParts[cnt - 2] + '.' + signingDomainParts[cnt - 1]
    return result


def findRegisteredDomain(remainingSigningDomainParts, treeNode):
    """Recursive helper method."""

    if remainingSigningDomainParts:
        sub = remainingSigningDomainParts.pop()
    else:
        sub = None

    result = None
    if '!' in treeNode:
        return '#'
    elif sub in treeNode:
        result = findRegisteredDomain(
                remainingSigningDomainParts,
                treeNode[sub])
    elif '*' in treeNode:
        result = findRegisteredDomain(
                remainingSigningDomainParts,
                treeNode['*'])
    else:
        return sub

    if result == '#':
        return sub
    elif result:
        return result + '.' + sub
    return None


def test_getRegisteredDomain():
    fqdns = [
            ("registered.com", "registered.com"),
            ("sub.registered.com", "registered.com"),
            ("parliament.uk", "parliament.uk"),
            ("sub.registered.valid.uk", "registered.valid.uk"),
            ("registered.somedom.kyoto.jp", "registered.somedom.kyoto.jp"),
            ("invalid-fqdn", "None"),
            ("org", "None"),
            ("academy.museum", "None"),
            ("sub.academy.museum", "sub.academy.museum"),
            ("subsub.sub.academy.museum", "sub.academy.museum"),
            ("sub.nic.pa", "nic.pa"),
            ("registered.sb", "registered.sb"),
            ("sub.registered.sb", "registered.sb"),
            ("subsub.registered.something.zw", "registered.something.zw"),
            ("subsub.registered.9.bg", "registered.9.bg"),
            ("registered.co.bi", "registered.co.bi"),
            ("sub.registered.bi", "registered.bi"),
            ("subsub.registered.ee", "registered.ee"),
            ]

    for fqdn, expected in fqdns:
        assert str(getRegisteredDomain(fqdn)) == expected, '%s failed' % fqdn


if __name__ == '__main__':
    test_getRegisteredDomain()
