Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/net/RegisteredDomain.java
38829 views
1
/*
2
* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
package sun.net;
26
27
import java.util.Arrays;
28
import java.util.HashMap;
29
import java.util.HashSet;
30
import java.util.List;
31
import java.util.Map;
32
import java.util.Set;
33
34
/*
35
* WARNING: This class may contain out-of-date information. It should be
36
* updated or replaced with an appropriate implementation. See
37
* sun.security.util.RegisteredDomain for more information.
38
*
39
* The naming tables listed below were gathered from publicly available data such as
40
* the subdomain registration websites listed for each top-level domain by the Internet
41
* Assigned Numbers Authority and the website of the Internet Corporation for Assigned Names
42
* and Numbers as well as Wikipedia.
43
*/
44
45
public class RegisteredDomain {
46
47
// XX.AA
48
private static Set<String> top1Set = new HashSet<String>(Arrays.asList("asia", "biz", "cat", "coop",
49
"edu", "info", "gov", "jobs", "travel", "am", "aq", "ax", "cc", "cf", "cg", "ch", "cv", "cz",
50
"de", "dj", "dk", "fm", "fo", "ga", "gd", "gf", "gl", "gm", "gq", "gs", "gw", "hm",
51
"li", "lu", "md", "mh", "mil", "mobi", "mq", "ms", "ms", "ne", "nl", "nu", "si",
52
"sm", "sr", "su", "tc", "td", "tf", "tg", "tk", "tm", "tv", "va", "vg",
53
/* ae */ "xn--mgbaam7a8h", /* cn s */ "xn--fiqs8s", /* cn t */ "xn--fiqz9s",
54
/* eg */ "xn--wgbh1c", /* hk */ "xn--j6w193g", /* jo */ "xn--mgbayh7gpa",
55
/* lk */ "xn--fzc2c9e2c", /* ps */ "xn--ygbi2ammx", /* ru */ "xn--p1ai",
56
/* qa */ "xn--wgbl6a", /* sa */ "xn--mgberp4a5d4ar", /* sg */ "xn--yfro4i67o",
57
/* th */ "xn--o3cw4h", /* tn */ "xn--pgbs0dh", /* tw s */ "xn--kpry57d",
58
/* tw */ "xn--kprw13d", /* sg tamil */ "xn--clchc0ea0b2g2a9gcd"));
59
60
// common pattern: XX.AA or XX.GOV.AA
61
private static Set<String> top2Set = new HashSet<String>(Arrays.asList("as", "bf", "cd", "cx",
62
"ie", "lt", "mr", "tl"));
63
64
// common pattern: XX.AA or XX.COM.AA or XX.EDU.AA or XX.NET.AA or XX.ORG.AA or XX.GOV.AA
65
private static Set<String> top4Set = new HashSet<String>(Arrays.asList("af", "bm", "bs", "bt",
66
"bz", "dm", "ky", "lb", "lr", "mo", "sc", "sl", "ws"));
67
68
// AA or less than 3 other XX.BB.AA possible matches
69
private static Set<String> top3Set = new HashSet<String>(Arrays.asList("ad", "aw", "be", "bw",
70
"cl", "fi", "int", "io", "mc"));
71
72
// AA.UK exceptions
73
private static Set<String> ukSet = new HashSet<String>(Arrays.asList( "bl", "british-library",
74
"jet", "nhs", "nls", "parliament", "mod", "police"));
75
76
// AA.AR exceptions
77
private static Set<String> arSet = new HashSet<String>(Arrays.asList( "argentina", "educ",
78
"gobiernoelectronico", "nic", "promocion", "retina", "uba"));
79
80
// AA.OM exceptions
81
private static Set<String> omSet = new HashSet<String>(Arrays.asList("mediaphone", "nawrastelecom",
82
"nawras", "omanmobile", "omanpost", "omantel", "rakpetroleum", "siemens", "songfest",
83
"statecouncil", "shura", "peie", "omran", "omnic", "omanet", "oman", "muriya", "kom"));
84
85
// any XX.BB.AA
86
private static Set<String> top5Set = new HashSet<String>(Arrays.asList("au", "arpa", "bd", "bn", "ck",
87
"cy", "er", "et", "fj", "fk", "gt", "gu", "il", "jm", "ke", "kh", "kw",
88
"mm", "mt", "mz", "ni", "np", "nz", "pg", "sb", "sv", "tz", "uy", "ve", "ye",
89
"za", "zm", "zw"));
90
91
// XX.CC.BB.JP
92
private static Set<String> jpSet = new HashSet<String>(Arrays.asList("aichi", "akita", "aomori",
93
"chiba", "ehime", "fukui", "fukuoka", "fukushima", "gifu", "gunma", "hiroshima", "hokkaido",
94
"hyogo", "ibaraki", "ishikawa", "iwate", "kagawa", "kagoshima", "kanagawa", "kawasaki",
95
"kitakyushu", "kobe", "kochi", "kumamoto", "kyoto", "mie", "miyagi", "miyazaki", "nagano",
96
"nagasaki", "nagoya", "nara", "niigata", "oita", "okayama", "okinawa", "osaka", "saga",
97
"saitama", "sapporo", "sendai", "shiga", "shimane", "shizuoka", "tochigi", "tokushima",
98
"tokyo", "tottori", "toyama", "wakayama", "yamagata", "yamaguchi", "yamanashi", "yokohama"));
99
100
// CC.BB.JP exceptions
101
private static Set<String> jp2Set = new HashSet<String>(Arrays.asList("metro.tokyo.jp",
102
"pref.aichi.jp", "pref.akita.jp", "pref.aomori.jp", "pref.chiba.jp", "pref.ehime.jp",
103
"pref.fukui.jp", "pref.fukuoka.jp", "pref.fukushima.jp", "pref.gifu.jp", "pref.gunma.jp",
104
"pref.hiroshima.jp", "pref.hokkaido.jp", "pref.hyogo.jp", "pref.ibaraki.jp", "pref.ishikawa.jp",
105
"pref.iwate.jp", "pref.kagawa.jp", "pref.kagoshima.jp", "pref.kanagawa.jp", "pref.kochi.jp",
106
"pref.kumamoto.jp", "pref.kyoto.jp", "pref.mie.jp", "pref.miyagi.jp", "pref.miyazaki.jp",
107
"pref.nagano.jp", "pref.nagasaki.jp", "pref.nara.jp", "pref.niigata.jp", "pref.oita.jp",
108
"pref.okayama.jp", "pref.okinawa.jp", "pref.osaka.jp", "pref.saga.jp", "pref.saitama.jp",
109
"pref.shiga.jp", "pref.shimane.jp", "pref.shizuoka.jp", "pref.tochigi.jp", "pref.tokushima.jp",
110
"pref.tottori.jp", "pref.toyama.jp", "pref.wakayama.jp", "pref.yamagata.jp", "pref.yamaguchi.jp",
111
"pref.yamanashi.jp", "city.chiba.jp", "city.fukuoka.jp", "city.hamamatsu.jp", "city.hiroshima.jp", "city.kawasaki.jp",
112
"city.kitakyushu.jp", "city.kobe.jp", "city.kyoto.jp", "city.nagoya.jp", "city.niigata.jp",
113
"city.okayama.jp", "city.osaka.jp", "city.sagamihara.jp", "city.saitama.jp", "city.sapporo.jp", "city.sendai.jp",
114
"city.shizuoka.jp", "city.yokohama.jp"));
115
116
private static Set<String> usStateSet = new HashSet<String>(Arrays.asList("ak",
117
"al", "ar", "as", "az", "ca", "co", "ct", "dc", "de", "fl", "ga", "gu", "hi", "ia",
118
"id", "il", "in", "ks", "ky", "la", "ma", "md", "me", "mi", "mn", "mo", "ms", "mt",
119
"nc", "nd", "ne", "nh", "nj", "nm", "nv", "ny", "oh", "ok", "or", "pa", "pr", "ri",
120
"sc", "sd", "tn", "tx", "ut", "vi", "vt", "va", "wa", "wi", "wv", "wy"));
121
122
private static Set<String> usSubStateSet = new HashSet<String>(Arrays.asList("state",
123
"lib", "k12", "cc", "tec", "gen", "cog", "mus", "dst"));
124
125
private static Map<String,Set<String>> topMap = new HashMap<>();
126
private static Map<String,Set<String>> top3Map = new HashMap<>();
127
128
static {
129
/*
130
* XX.AA or XX.BB.AA
131
*/
132
topMap.put("ac", new HashSet<String>(Arrays.asList("com", "co", "edu", "gov", "net", "mil", "org")));
133
topMap.put("ae", new HashSet<String>(Arrays.asList("co", "net", "org", "sch", "ac", "gov", "mil")));
134
topMap.put("aero", new HashSet<String>(Arrays.asList("accident-investigation",
135
"accident-prevention", "aerobatic", "aeroclub", "aerodrome", "agents", "aircraft",
136
"airline", "airport", "air-surveillance", "airtraffic", "air-traffic-control",
137
"ambulance", "amusement", "association", "author", "ballooning", "broker", "caa",
138
"cargo", "catering", "certification", "championship", "charter", "civilaviation",
139
"club", "conference", "consultant", "consulting", "control", "council", "crew",
140
"design", "dgca", "educator", "emergency", "engine", "engineer", "entertainment",
141
"equipment", "exchange", "express", "federation", "flight", "freight", "fuel",
142
"gliding", "government", "groundhandling", "group", "hanggliding", "homebuilt",
143
"insurance", "journal", "journalist", "leasing", "logistics", "magazine",
144
"maintenance", "marketplace", "media", "microlight", "modelling", "navigation",
145
"parachuting", "paragliding", "passenger-association", "pilot", "press", "production",
146
"recreation", "repbody", "res", "research", "rotorcraft", "safety", "scientist",
147
"services", "show", "skydiving", "software", "student", "taxi", "trader", "trading",
148
"trainer", "union", "workinggroup", "works" )));
149
topMap.put( "ag", new HashSet<String>(Arrays.asList("com", "org", "net", "co", "nom")));
150
topMap.put( "ai", new HashSet<String>(Arrays.asList("off", "com", "net", "org")));
151
topMap.put( "al", new HashSet<String>(Arrays.asList("com", "edu", "gov", "mil", "net", "org")));
152
topMap.put( "an", new HashSet<String>(Arrays.asList("com")));
153
topMap.put( "ao", new HashSet<String>(Arrays.asList("ed", "gv", "og", "co", "pb", "it")));
154
topMap.put( "at", new HashSet<String>(Arrays.asList("ac", "co", "gv", "or", "biz", "info", "priv")));
155
topMap.put( "az", new HashSet<String>(Arrays.asList("com", "net", "int", "gov", "org", "edu", "info",
156
"pp", "mil", "name", "biz")));
157
topMap.put( "ba", new HashSet<String>(Arrays.asList("org", "net", "edu", "gov", "mil", "unbi",
158
"unmo", "unsa", "untz", "unze", "co", "com", "rs")));
159
topMap.put( "bb", new HashSet<String>(Arrays.asList("biz", "com", "edu", "gov", "info", "net", "org",
160
"store")));
161
topMap.put( "bg", new HashSet<String>(Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
162
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1",
163
"2", "3", "4", "5", "6", "7", "8", "9")));
164
topMap.put( "bh", new HashSet<String>(Arrays.asList("com", "info", "cc", "edu", "biz", "net",
165
"org", "gov")));
166
topMap.put( "bi", new HashSet<String>(Arrays.asList("co", "com", "edu", "gov", "info", "or", "org")));
167
topMap.put( "bj", new HashSet<String>(Arrays.asList("asso", "barreau", "com", "edu", "gouv", "gov", "mil")));
168
topMap.put( "bo", new HashSet<String>(Arrays.asList("com", "edu", "gov", "gob", "int", "org", "net",
169
"mil", "tv")));
170
topMap.put( "br", new HashSet<String>(Arrays.asList("adm", "adv", "agr", "am", "arq", "art", "ato",
171
"b", "bio", "blog", "bmd", "cim", "cng", "cnt", "com", "coop", "ecn", "edu", "emp", "eng",
172
"esp", "etc", "eti", "far", "flog", "fm", "fnd", "fot", "fst", "g12", "ggf", "gov",
173
"imb", "ind", "inf", "jor", "jus", "lel", "mat", "med", "mil", "mus", "net", "nom",
174
"not", "ntr", "odo", "org", "ppg", "pro", "psc", "psi", "qsl", "radio", "rec", "slg",
175
"srv", "taxi", "teo", "tmp", "trd", "tur", "tv", "vet", "vlog", "wiki", "zlg")));
176
topMap.put( "bw", new HashSet<String>(Arrays.asList("co", "gov", "org")));
177
topMap.put( "by", new HashSet<String>(Arrays.asList("gov", "mil", "com", "of")));
178
topMap.put( "ca", new HashSet<String>(Arrays.asList("ab", "bc", "mb", "nb", "nf",
179
"nl", "ns", "nt", "nu", "on", "pe", "qc", "sk", "yk", "gc")));
180
topMap.put( "ci", new HashSet<String>(Arrays.asList("org", "or", "com", "co", "edu",
181
"ed", "ac", "net", "go", "asso", "xn--aroport-bya", "int",
182
"presse", "md", "gouv")));
183
topMap.put( "com", new HashSet<String>(Arrays.asList("ad", "ar", "br", "cn", "de", "eu", "gb",
184
"gr", "hu", "jpn", "kr", "no", "qc", "ru", "sa", "se", "uk", "us", "uy", "za")));
185
topMap.put( "cm", new HashSet<String>(Arrays.asList("co", "com", "gov", "net")));
186
topMap.put( "cn", new HashSet<String>(Arrays.asList("ac", "com", "edu", "gov", "net",
187
"org", "mil", "xn--55qx5d", "xn--io0a7i",
188
"ah", "bj", "cq", "fj", "gd", "gs", "gz", "gx",
189
"ha", "hb", "he", "hi", "hl", "hn", "jl", "js", "jx", "ln", "nm", "nx", "qh",
190
"sc", "sd", "sh", "sn", "sx", "tj", "xj", "xz", "yn", "zj", "hk", "mo", "tw")));
191
topMap.put( "co", new HashSet<String>(Arrays.asList("arts", "com", "edu", "firm", "gov", "info",
192
"int", "mil", "net", "nom", "org", "rec", "web")));
193
topMap.put( "cr", new HashSet<String>(Arrays.asList("ac", "co", "ed", "fi", "go", "or", "sa")));
194
topMap.put( "cu", new HashSet<String>(Arrays.asList("com", "edu", "org", "net", "gov", "inf")));
195
topMap.put( "do", new HashSet<String>(Arrays.asList("com", "edu", "org", "net", "gov", "gob",
196
"web", "art", "sld", "mil")));
197
topMap.put( "dz", new HashSet<String>(Arrays.asList("com", "org", "net", "gov", "edu", "asso",
198
"pol", "art")));
199
topMap.put( "ec", new HashSet<String>(Arrays.asList("com", "info", "net", "fin", "k12", "med",
200
"pro", "org", "edu", "gov", "gob", "mil")));
201
topMap.put( "ee", new HashSet<String>(Arrays.asList("edu", "gov", "riik", "lib", "med", "com",
202
"pri", "aip", "org", "fie")));
203
topMap.put( "eg", new HashSet<String>(Arrays.asList("com", "edu", "eun", "gov", "mil", "name",
204
"net", "org", "sci")));
205
topMap.put( "es", new HashSet<String>(Arrays.asList("com", "nom", "org", "gob", "edu")));
206
topMap.put( "eu", new HashSet<String>(Arrays.asList("europa")));
207
topMap.put( "fr", new HashSet<String>(Arrays.asList("com", "asso", "nom", "prd", "presse",
208
"tm", "aeroport", "assedic", "avocat", "avoues", "cci", "chambagri",
209
"chirurgiens-dentistes", "experts-comptables", "geometre-expert", "gouv", "greta",
210
"huissier-justice", "medecin", "notaires", "pharmacien", "port", "veterinaire")));
211
topMap.put( "ge", new HashSet<String>(Arrays.asList("com", "edu", "gov", "org", "mil", "net", "pvt")));
212
topMap.put( "gg", new HashSet<String>(Arrays.asList("co", "org", "net", "sch", "gov")));
213
topMap.put( "gh", new HashSet<String>(Arrays.asList("com", "edu", "gov", "org", "mil")));
214
topMap.put( "gi", new HashSet<String>(Arrays.asList("com", "ltd", "gov", "mod", "edu", "org")));
215
topMap.put( "gn", new HashSet<String>(Arrays.asList("ac", "com", "edu", "gov", "org", "net")));
216
topMap.put( "gp", new HashSet<String>(Arrays.asList("com", "net", "mobi", "edu", "org", "asso")));
217
topMap.put( "gr", new HashSet<String>(Arrays.asList("com", "co", "net", "edu", "org", "gov",
218
"mil", "mod", "sch")));
219
topMap.put( "gy", new HashSet<String>(Arrays.asList("co", "com", "net", "org", "edu", "gov")));
220
topMap.put( "hk", new HashSet<String>(Arrays.asList("com", "edu", "gov", "idv", "net", "org",
221
/* com */ "xn--55qx5d", /* edu */ "xn--wcvs22d", /* gov */"xn--mxtq1m",
222
/* idv */ "xn--gmqw5a", /* net */ "xn--od0alg", /*org*/ "xn--uc0atv")));
223
topMap.put( /* hk */ "xn--j6w193g", new HashSet<String>(Arrays.asList(
224
/* com */ "xn--55qx5d", /* edu */ "xn--wcvs22d", /* gov */"xn--mxtq1m",
225
/* idv */ "xn--gmqw5a", /* net */ "xn--od0alg", /*org*/ "xn--uc0atv")));
226
topMap.put( "hn", new HashSet<String>(Arrays.asList("com", "edu", "org", "net", "mil", "gob")));
227
topMap.put( "hr", new HashSet<String>(Arrays.asList("iz.hr", "from.hr", "name.hr", "com.hr")));
228
topMap.put( "ht", new HashSet<String>(Arrays.asList("com", "shop", "firm", "info", "adult",
229
"net", "pro", "org", "med", "art", "coop", "pol", "asso", "edu", "rel", "gouv", "perso")));
230
topMap.put( "hu", new HashSet<String>(Arrays.asList("co", "info", "org", "priv", "sport", "tm",
231
"2000", "agrar", "bolt", "casino", "city", "erotica", "erotika", "film", "forum",
232
"games", "hotel", "ingatlan", "jogasz", "konyvelo", "lakas", "media", "news", "reklam",
233
"sex", "shop", "suli", "szex", "tozsde", "utazas", "video")));
234
topMap.put( "id", new HashSet<String>(Arrays.asList("ac", "co", "go", "mil", "net", "or", "sch",
235
"web")));
236
topMap.put( "im", new HashSet<String>(Arrays.asList("co.im", "com", "net.im", "gov.im", "org.im",
237
"ac.im")));
238
topMap.put( "in", new HashSet<String>(Arrays.asList("co", "firm", "ernet", "net", "org", "gen", "ind",
239
"nic", "ac", "edu", "res", "gov", "mil")));
240
topMap.put( "iq", new HashSet<String>(Arrays.asList("gov", "edu", "mil", "com", "org", "net" )));
241
topMap.put( "ir", new HashSet<String>(Arrays.asList("ac", "co", "gov", "id", "net", "org", "sch"
242
)));
243
topMap.put( "is", new HashSet<String>(Arrays.asList("net", "com", "edu", "gov", "org", "int")));
244
topMap.put( "it", new HashSet<String>(Arrays.asList("gov", "edu", "agrigento", "ag", "alessandria",
245
"al", "ancona", "an", "aosta", "aoste", "ao", "arezzo", "ar", "ascoli-piceno",
246
"ascolipiceno", "ap", "asti", "at", "avellino", "av", "bari", "ba",
247
"andria-barletta-trani", "andriabarlettatrani", "trani-barletta-andria",
248
"tranibarlettaandria", "barletta-trani-andria", "barlettatraniandria",
249
"andria-trani-barletta", "andriatranibarletta", "trani-andria-barletta",
250
"traniandriabarletta", "bt", "belluno", "bl", "benevento", "bn", "bergamo", "bg",
251
"biella", "bi", "bologna", "bo", "bolzano", "bozen", "balsan", "alto-adige",
252
"altoadige", "suedtirol", "bz", "brescia", "bs", "brindisi", "br", "cagliari",
253
"ca", "caltanissetta", "cl", "campobasso", "cb", "carboniaiglesias", "carbonia-iglesias",
254
"iglesias-carbonia", "iglesiascarbonia", "ci", "caserta", "ce", "catania", "ct",
255
"catanzaro", "cz", "chieti", "ch", "como", "co", "cosenza", "cs", "cremona", "cr",
256
"crotone", "kr", "cuneo", "cn", "dell-ogliastra", "dellogliastra", "ogliastra", "og",
257
"enna", "en", "ferrara", "fe", "fermo", "fm", "firenze", "florence", "fi", "foggia",
258
"fg", "forli-cesena", "forlicesena", "cesena-forli", "cesenaforli", "fc", "frosinone",
259
"fr", "genova", "genoa", "ge", "gorizia", "go", "grosseto", "gr", "imperia", "im",
260
"isernia", "is", "laquila", "aquila", "aq", "la-spezia", "laspezia", "sp", "latina",
261
"lt", "lecce", "le", "lecco", "lc", "livorno", "li", "lodi", "lo", "lucca", "lu",
262
"macerata", "mc", "mantova", "mn", "massa-carrara", "massacarrara", "carrara-massa",
263
"carraramassa", "ms", "matera", "mt", "medio-campidano", "mediocampidano",
264
"campidano-medio", "campidanomedio", "vs", "messina", "me", "milano", "milan",
265
"mi", "modena", "mo", "monza", "monza-brianza", "monzabrianza", "monzaebrianza",
266
"monzaedellabrianza", "monza-e-della-brianza", "mb", "napoli", "naples", "na",
267
"novara", "no", "nuoro", "nu", "oristano", "or", "padova", "padua", "pd", "palermo",
268
"pa", "parma", "pr", "pavia", "pv", "perugia", "pg", "pescara", "pe", "pesaro-urbino",
269
"pesarourbino", "urbino-pesaro", "urbinopesaro", "pu", "piacenza", "pc", "pisa",
270
"pi", "pistoia", "pt", "pordenone", "pn", "potenza", "pz", "prato", "po", "ragusa",
271
"rg", "ravenna", "ra", "reggio-calabria", "reggiocalabria", "rc", "reggio-emilia",
272
"reggioemilia", "re", "rieti", "ri", "rimini", "rn", "roma", "rome", "rm", "rovigo",
273
"ro", "salerno", "sa", "sassari", "ss", "savona", "sv", "siena", "si", "siracusa",
274
"sr", "sondrio", "so", "taranto", "ta", "tempio-olbia", "tempioolbia", "olbia-tempio",
275
"olbiatempio", "ot", "teramo", "te", "terni", "tr", "torino", "turin", "to",
276
"trapani", "tp", "trento", "trentino", "tn", "treviso", "tv", "trieste", "ts",
277
"udine", "ud", "varese", "va", "venezia", "venice", "ve", "verbania", "vb",
278
"vercelli", "vc", "verona", "vr", "vibo-valentia", "vibovalentia", "vv", "vicenza",
279
"vi", "viterbo", "vt")));
280
topMap.put( "je", new HashSet<String>(Arrays.asList("co", "org", "net", "sch", "gov")));
281
topMap.put( "jo", new HashSet<String>(Arrays.asList("com", "org", "net", "edu", "sch",
282
"gov", "mil", "name")));
283
topMap.put( "jp", new HashSet<String>(Arrays.asList("ac", "ad", "co", "ed", "go", "gr", "lg",
284
"ne", "or")));
285
topMap.put( "kg", new HashSet<String>(Arrays.asList("org", "net", "com", "edu", "gov", "mil")));
286
topMap.put( "ki", new HashSet<String>(Arrays.asList("edu", "biz", "net", "org", "gov",
287
"info", "com")));
288
topMap.put( "km", new HashSet<String>(Arrays.asList("org", "nom", "gov", "prd", "tm", "edu",
289
"mil", "ass", "com", "coop", "asso", "presse", "medecin", "notaires", "pharmaciens",
290
"veterinaire", "gouv")));
291
topMap.put( "kn", new HashSet<String>(Arrays.asList("net", "org", "edu", "gov")));
292
topMap.put( "kp", new HashSet<String>(Arrays.asList("com", "edu", "gov", "org", "rep", "tra")));
293
topMap.put( "kr", new HashSet<String>(Arrays.asList("ac", "co", "es", "go", "hs", "kg", "mil",
294
"ms", "ne", "or", "pe", "re", "sc", "busan", "chungbuk", "chungnam", "daegu",
295
"daejeon", "gangwon", "gwangju", "gyeongbuk", "gyeonggi", "gyeongnam", "incheon",
296
"jeju", "jeonbuk", "jeonnam", "seoul", "ulsan")));
297
topMap.put( "kz", new HashSet<String>(Arrays.asList("org", "edu", "net", "gov", "mil", "com")));
298
topMap.put( "la", new HashSet<String>(Arrays.asList("int", "net", "info", "edu", "gov", "per",
299
"com", "org", "c")));
300
topMap.put( "lc", new HashSet<String>(Arrays.asList("com", "net", "co", "org", "edu", "gov",
301
"l.lc", "p.lc")));
302
topMap.put( "lk", new HashSet<String>(Arrays.asList("gov", "sch", "net", "int", "com", "org",
303
"edu", "ngo", "soc", "web", "ltd", "assn", "grp", "hotel")));
304
topMap.put( "ls", new HashSet<String>(Arrays.asList("co", "gov", "ac", "org")));
305
topMap.put( "lv", new HashSet<String>(Arrays.asList("com", "edu", "gov", "org", "mil",
306
"id", "net", "asn", "conf")));
307
topMap.put( "ly", new HashSet<String>(Arrays.asList("com", "net", "gov", "plc", "edu", "sch",
308
"med", "org", "id")));
309
topMap.put( "ma", new HashSet<String>(Arrays.asList("co", "net", "gov", "org", "ac", "press")));
310
topMap.put( "me", new HashSet<String>(Arrays.asList("co", "net", "org", "edu", "ac", "gov",
311
"its", "priv")));
312
topMap.put( "mg", new HashSet<String>(Arrays.asList("org", "nom", "gov", "prd", "tm",
313
"edu", "mil", "com")));
314
topMap.put( "mk", new HashSet<String>(Arrays.asList("com", "org", "net", "edu", "gov", "inf",
315
"name", "pro")));
316
topMap.put( "ml", new HashSet<String>(Arrays.asList("com", "edu", "gouv", "gov", "net",
317
"org", "presse")));
318
topMap.put( "mn", new HashSet<String>(Arrays.asList("gov", "edu", "org")));
319
topMap.put( "mp", new HashSet<String>(Arrays.asList("gov", "co", "org")));
320
topMap.put( "mu", new HashSet<String>(Arrays.asList("com", "net", "org", "gov", "ac",
321
"co", "or")));
322
topMap.put( "museum", new HashSet<String>(Arrays.asList("academy", "agriculture", "air",
323
"airguard", "alabama", "alaska", "amber", "ambulance", "american", "americana",
324
"americanantiques", "americanart", "amsterdam", "and", "annefrank", "anthro",
325
"anthropology", "antiques", "aquarium", "arboretum", "archaeological", "archaeology",
326
"architecture", "art", "artanddesign", "artcenter", "artdeco", "arteducation",
327
"artgallery", "arts", "artsandcrafts", "asmatart", "assassination", "assisi",
328
"association", "astronomy", "atlanta", "austin", "australia", "automotive", "aviation",
329
"axis", "badajoz", "baghdad", "bahn", "bale", "baltimore", "barcelona", "baseball",
330
"basel", "baths", "bauern", "beauxarts", "beeldengeluid", "bellevue", "bergbau",
331
"berkeley", "berlin", "bern", "bible", "bilbao", "bill", "birdart", "birthplace",
332
"bonn", "boston", "botanical", "botanicalgarden", "botanicgarden", "botany",
333
"brandywinevalley", "brasil", "bristol", "british", "britishcolumbia", "broadcast",
334
"brunel", "brussel", "brussels", "bruxelles", "building", "burghof", "bus", "bushey",
335
"cadaques", "california", "cambridge", "can", "canada", "capebreton", "carrier",
336
"cartoonart", "casadelamoneda", "castle", "castres", "celtic", "center", "chattanooga",
337
"cheltenham", "chesapeakebay", "chicago", "children", "childrens", "childrensgarden",
338
"chiropractic", "chocolate", "christiansburg", "cincinnati", "cinema", "circus",
339
"civilisation", "civilization", "civilwar", "clinton", "clock", "coal", "coastaldefence",
340
"cody", "coldwar", "collection", "colonialwilliamsburg", "coloradoplateau", "columbia",
341
"columbus", "communication", "communications", "community", "computer",
342
"computerhistory", "xn--comunicaes-v6a2o", "contemporary", "contemporaryart",
343
"convent", "copenhagen", "corporation", "xn--correios-e-telecomunicaes-ghc29a",
344
"corvette", "costume", "countryestate", "county", "crafts", "cranbrook", "creation",
345
"cultural", "culturalcenter", "culture", "cyber", "cymru", "dali", "dallas", "database",
346
"ddr", "decorativearts", "delaware", "delmenhorst", "denmark", "depot", "design",
347
"detroit", "dinosaur", "discovery", "dolls", "donostia", "durham", "eastafrica",
348
"eastcoast", "education", "educational", "egyptian", "eisenbahn", "elburg",
349
"elvendrell", "embroidery", "encyclopedic", "england", "entomology", "environment",
350
"environmentalconservation", "epilepsy", "essex", "estate", "ethnology", "exeter",
351
"exhibition", "family", "farm", "farmequipment", "farmers", "farmstead", "field",
352
"figueres", "filatelia", "film", "fineart", "finearts", "finland", "flanders", "florida",
353
"force", "fortmissoula", "fortworth", "foundation", "francaise", "frankfurt",
354
"franziskaner", "freemasonry", "freiburg", "fribourg", "frog", "fundacio", "furniture",
355
"gallery", "garden", "gateway", "geelvinck", "gemological", "geology", "georgia",
356
"giessen", "glas", "glass", "gorge", "grandrapids", "graz", "guernsey", "halloffame",
357
"hamburg", "handson", "harvestcelebration", "hawaii", "health", "heimatunduhren",
358
"hellas", "helsinki", "hembygdsforbund", "heritage", "histoire", "historical",
359
"historicalsociety", "historichouses", "historisch", "historisches", "history",
360
"historyofscience", "horology", "house", "humanities", "illustration", "imageandsound",
361
"indian", "indiana", "indianapolis", "indianmarket", "intelligence", "interactive",
362
"iraq", "iron", "isleofman", "jamison", "jefferson", "jerusalem", "jewelry",
363
"jewish", "jewishart", "jfk", "journalism", "judaica", "judygarland", "juedisches",
364
"juif", "karate", "karikatur", "kids", "koebenhavn", "koeln", "kunst", "kunstsammlung",
365
"kunstunddesign", "labor", "labour", "lajolla", "lancashire", "landes", "lans",
366
"xn--lns-qla", "larsson", "lewismiller", "lincoln", "linz", "living", "livinghistory",
367
"localhistory", "london", "losangeles", "louvre", "loyalist", "lucerne", "luxembourg",
368
"luzern", "mad", "madrid", "mallorca", "manchester", "mansion", "mansions", "manx",
369
"marburg", "maritime", "maritimo", "maryland", "marylhurst", "media", "medical",
370
"medizinhistorisches", "meeres", "memorial", "mesaverde", "michigan", "midatlantic",
371
"military", "mill", "miners", "mining", "minnesota", "missile", "missoula", "modern",
372
"moma", "money", "monmouth", "monticello", "montreal", "moscow", "motorcycle", "muenchen",
373
"muenster", "mulhouse", "muncie", "museet", "museumcenter", "museumvereniging", "music",
374
"national", "nationalfirearms", "nationalheritage", "nativeamerican", "naturalhistory",
375
"naturalhistorymuseum", "naturalsciences", "nature", "naturhistorisches",
376
"natuurwetenschappen", "naumburg", "naval", "nebraska", "neues", "newhampshire",
377
"newjersey", "newmexico", "newport", "newspaper", "newyork", "niepce", "norfolk",
378
"north", "nrw", "nuernberg", "nuremberg", "nyc", "nyny", "oceanographic",
379
"oceanographique", "omaha", "online", "ontario", "openair", "oregon", "oregontrail",
380
"otago", "oxford", "pacific", "paderborn", "palace", "paleo", "palmsprings", "panama",
381
"paris", "pasadena", "pharmacy", "philadelphia", "philadelphiaarea", "philately",
382
"phoenix", "photography", "pilots", "pittsburgh", "planetarium", "plantation",
383
"plants", "plaza", "portal", "portland", "portlligat", "posts-and-telecommunications",
384
"preservation", "presidio", "press", "project", "public", "pubol", "quebec",
385
"railroad", "railway", "research", "resistance", "riodejaneiro", "rochester", "rockart",
386
"roma", "russia", "saintlouis", "salem", "salvadordali", "salzburg", "sandiego",
387
"sanfrancisco", "santabarbara", "santacruz", "santafe", "saskatchewan", "satx",
388
"savannahga", "schlesisches", "schoenbrunn", "schokoladen", "school", "schweiz",
389
"science", "scienceandhistory", "scienceandindustry", "sciencecenter", "sciencecenters",
390
"science-fiction", "sciencehistory", "sciences", "sciencesnaturelles", "scotland",
391
"seaport", "settlement", "settlers", "shell", "sherbrooke", "sibenik", "silk", "ski",
392
"skole", "society", "sologne", "soundandvision", "southcarolina", "southwest", "space",
393
"spy", "square", "stadt", "stalbans", "starnberg", "state", "stateofdelaware",
394
"station", "steam", "steiermark", "stjohn", "stockholm", "stpetersburg", "stuttgart",
395
"suisse", "surgeonshall", "surrey", "svizzera", "sweden", "sydney", "tank", "tcm",
396
"technology", "telekommunikation", "television", "texas", "textile", "theater",
397
"time", "timekeeping", "topology", "torino", "touch", "town", "transport", "tree",
398
"trolley", "trust", "trustee", "uhren", "ulm", "undersea", "university", "usa",
399
"usantiques", "usarts", "uscountryestate", "usculture", "usdecorativearts", "usgarden",
400
"ushistory", "ushuaia", "uslivinghistory", "utah", "uvic", "valley", "vantaa",
401
"versailles", "viking", "village", "virginia", "virtual", "virtuel", "vlaanderen",
402
"volkenkunde", "wales", "wallonie", "war", "washingtondc", "watchandclock",
403
"watch-and-clock", "western", "westfalen", "whaling", "wildlife", "williamsburg",
404
"windmill", "workshop", "york", "yorkshire", "yosemite", "youth", "zoological",
405
"zoology", "xn--9dbhblg6di", "xn--h1aegh")));
406
topMap.put( "mv", new HashSet<String>(Arrays.asList("aero", "biz", "com", "coop", "edu", "gov",
407
"info", "int", "mil", "museum", "name", "net", "org", "pro")));
408
topMap.put( "mw", new HashSet<String>(Arrays.asList("ac", "biz", "co", "com", "coop", "edu",
409
"gov", "int", "museum", "net", "org")));
410
topMap.put( "mx", new HashSet<String>(Arrays.asList("com", "org", "gob", "edu", "net")));
411
topMap.put( "my", new HashSet<String>(Arrays.asList("com", "net", "org", "gov", "edu",
412
"mil", "name", "sch")));
413
topMap.put( "na", new HashSet<String>(Arrays.asList("co", "com", "org", "edu", "edunet", "net",
414
"alt", "biz", "info")));
415
topMap.put( "nc", new HashSet<String>(Arrays.asList("asso", "nom")));
416
topMap.put( "net", new HashSet<String>(Arrays.asList("gb", "se", "uk", "za")));
417
topMap.put( "ng", new HashSet<String>(Arrays.asList("name", "sch", "mil", "mobi", "com",
418
"edu", "gov", "net", "org")));
419
topMap.put( "nf", new HashSet<String>(Arrays.asList("com", "net", "per", "rec", "web",
420
"arts", "firm", "info", "other", "store")));
421
topMap.put( "no", new HashSet<String>(Arrays.asList("fhs", "vgs", "fylkesbibl", "folkebibl",
422
"museum", "idrett", "priv", "mil", "stat", "dep", "kommune", "herad", "aa",
423
"ah", "bu", "fm", "hl", "hm", "jan-mayen", "mr", "nl", "nt", "of", "ol", "oslo",
424
"rl", "sf", "st", "svalbard", "tm", "tr", "va", "vf", "akrehamn",
425
"xn--krehamn-dxa", "algard", "xn--lgrd-poac", "arna", "brumunddal",
426
"bryne", "bronnoysund", "xn--brnnysund-m8ac", "drobak",
427
"xn--drbak-wua", "egersund", "fetsund", "floro", "xn--flor-jra",
428
"fredrikstad", "hokksund", "honefoss", "xn--hnefoss-q1a",
429
"jessheim", "jorpeland", "xn--jrpeland-54a", "kirkenes", "kopervik",
430
"krokstadelva", "langevag", "xn--langevg-jxa", "leirvik", "mjondalen",
431
"xn--mjndalen-64a", "mo-i-rana", "mosjoen", "xn--mosjen-eya",
432
"nesoddtangen", "orkanger", "osoyro", "xn--osyro-wua",
433
"raholt", "xn--rholt-mra", "sandnessjoen", "xn--sandnessjen-ogb",
434
"skedsmokorset", "slattum", "spjelkavik", "stathelle", "stavern", "stjordalshalsen",
435
"xn--stjrdalshalsen-sqb", "tananger", "tranby", "vossevangen", "tranby",
436
"vossevangen", "afjord", "xn--fjord-lra", "agdenes", "al",
437
"xn--l-1fa", "alesund", "xn--lesund-hua",
438
"alstahaug", "alta", "xn--lt-liac", "alaheadju",
439
"xn--laheadju-7ya", "alvdal", "amli", "xn--mli-tla",
440
"amot", "xn--mot-tla", "andebu", "andoy", "xn--andy-ira",
441
"andasuolo", "ardal", "xn--rdal-poa", "aremark", "arendal",
442
"xn--s-1fa", "aseral", "xn--seral-lra",
443
"asker", "askim", "askvoll", "askoy", "xn--asky-ira",
444
"asnes", "xn--snes-poa", "audnedaln", "aukra", "aure", "aurland",
445
"aurskog-holand", "xn--aurskog-hland-jnb",
446
"austevoll", "austrheim", "averoy", "xn--avery-yua",
447
"balestrand", "ballangen", "balat", "xn--blt-elab",
448
"balsfjord", "bahccavuotna", "xn--bhccavuotna-k7a",
449
"bamble", "bardu", "beardu", "beiarn", "bajddar", "xn--bjddar-pta",
450
"baidar", "xn--bidr-5nac", "berg", "bergen", "berlevag", "xn--berlevg-jxa",
451
"bearalvahki", "xn--bearalvhki-y4a", "bindal", "birkenes", "bjarkoy",
452
"xn--bjarky-fya", "bjerkreim", "bjugn", "bodo", "xn--bod-2na",
453
"badaddja", "xn--bdddj-mrabd", "budejju", "bokn",
454
"bremanger", "bronnoy", "xn--brnny-wuac", "bygland",
455
"bykle", "barum", "xn--brum-voa", "bievat", "xn--bievt-0qa",
456
"bomlo", "xn--bmlo-gra", "batsfjord", "xn--btsfjord-9za", "bahcavuotna",
457
"xn--bhcavuotna-s4a", "dovre", "drammen", "drangedal", "dyroy",
458
"xn--dyry-ira", "donna", "xn--dnna-gra",
459
"eid", "eidfjord", "eidsberg", "eidskog", "eidsvoll", "eigersund", "elverum",
460
"enebakk", "engerdal", "etne", "etnedal", "evenes", "evenassi",
461
"xn--eveni-0qa01ga", "evje-og-hornnes", "farsund", "fauske",
462
"fuossko", "fuoisku", "fedje", "fet", "finnoy", "xn--finny-yua",
463
"fitjar", "fjaler", "fjell", "flakstad", "flatanger", "flekkefjord", "flesberg",
464
"flora", "fla", "xn--fl-zia", "folldal", "forsand", "fosnes", "frei",
465
"frogn", "froland", "frosta", "frana", "xn--frna-woa",
466
"froya", "xn--frya-hra", "fusa", "fyresdal", "forde",
467
"xn--frde-gra", "gamvik", "gangaviika", "xn--ggaviika-8ya47h",
468
"gaular", "gausdal", "gildeskal", "xn--gildeskl-g0a",
469
"giske", "gjemnes", "gjerdrum", "gjerstad", "gjesdal", "gjovik",
470
"xn--gjvik-wua", "gloppen", "gol", "gran", "grane", "granvin",
471
"gratangen", "grimstad", "grong", "kraanghke", "xn--kranghke-b0a",
472
"grue", "gulen", "hadsel", "halden", "halsa", "hamar", "hamaroy", "habmer",
473
"xn--hbmer-xqa", "hapmir", "xn--hpmir-xqa",
474
"hammerfest", "hammarfeasta", "xn--hmmrfeasta-s4ac",
475
"haram", "hareid", "harstad", "hasvik", "aknoluokta", "xn--koluokta-7ya57h",
476
"hattfjelldal", "aarborte", "haugesund", "hemne", "hemnes", "hemsedal",
477
"hitra", "hjartdal", "hjelmeland",
478
"hobol", "xn--hobl-ira", "hof", "hol", "hole", "holmestrand", "holtalen",
479
"xn--holtlen-hxa", "hornindal", "horten", "hurdal", "hurum", "hvaler",
480
"hyllestad", "hagebostad", "xn--hgebostad-g3a", "hoyanger",
481
"xn--hyanger-q1a", "hoylandet", "xn--hylandet-54a",
482
"ha", "xn--h-2fa", "ibestad", "inderoy", "xn--indery-fya",
483
"iveland", "jevnaker", "jondal", "jolster", "xn--jlster-bya",
484
"karasjok", "karasjohka", "xn--krjohka-hwab49j",
485
"karlsoy", "galsa", "xn--gls-elac", "karmoy",
486
"xn--karmy-yua", "kautokeino", "guovdageaidnu", "klepp", "klabu",
487
"xn--klbu-woa", "kongsberg", "kongsvinger", "kragero", "xn--krager-gya",
488
"kristiansand", "kristiansund", "krodsherad", "xn--krdsherad-m8a",
489
"kvalsund", "rahkkeravju", "xn--rhkkervju-01af",
490
"kvam", "kvinesdal", "kvinnherad", "kviteseid", "kvitsoy", "xn--kvitsy-fya",
491
"kvafjord", "xn--kvfjord-nxa", "giehtavuoatna", "kvanangen",
492
"xn--kvnangen-k0a", "navuotna", "xn--nvuotna-hwa",
493
"kafjord", "xn--kfjord-iua", "gaivuotna", "xn--givuotna-8ya",
494
"larvik", "lavangen", "lavagis", "loabat", "xn--loabt-0qa",
495
"lebesby", "davvesiida", "leikanger", "leirfjord", "leka", "leksvik", "lenvik",
496
"leangaviika", "xn--leagaviika-52b", "lesja", "levanger", "lier", "lierne",
497
"lillehammer", "lillesand", "lindesnes", "lindas", "xn--linds-pra",
498
"lom", "loppa", "lahppi", "xn--lhppi-xqa", "lund", "lunner", "luroy",
499
"xn--lury-ira", "luster", "lyngdal", "lyngen", "ivgu", "lardal", "lerdal",
500
"xn--lrdal-sra", "lodingen", "xn--ldingen-q1a", "lorenskog",
501
"xn--lrenskog-54a", "loten", "xn--lten-gra", "malvik",
502
"masoy", "xn--msy-ula0h", "muosat", "xn--muost-0qa",
503
"mandal", "marker", "marnardal", "masfjorden", "meland", "meldal", "melhus",
504
"meloy", "xn--mely-ira", "meraker", "xn--merker-kua", "moareke",
505
"xn--moreke-jua", "midsund", "midtre-gauldal", "modalen", "modum",
506
"molde", "moskenes", "moss", "mosvik", "malselv", "xn--mlselv-iua",
507
"malatvuopmi", "xn--mlatvuopmi-s4a", "namdalseid", "aejrie", "namsos",
508
"namsskogan", "naamesjevuemie", "xn--nmesjevuemie-tcba",
509
"laakesvuemie", "nannestad", "narvik", "narviika", "naustdal", "nedre-eiker",
510
"nesna", "nesodden", "nesseby", "unjarga", "xn--unjrga-rta", "nesset",
511
"nissedal", "nittedal", "nord-aurdal", "nord-fron", "nord-odal", "norddal",
512
"nordkapp", "davvenjarga", "xn--davvenjrga-y4a", "nordre-land",
513
"nordreisa", "raisa", "xn--risa-5na", "nore-og-uvdal", "notodden", "naroy",
514
"xn--nry-yla5g", "notteroy", "xn--nttery-byae",
515
"odda", "oksnes", "xn--ksnes-uua", "oppdal", "oppegard",
516
"xn--oppegrd-ixa", "orkdal", "orland", "xn--rland-uua",
517
"orskog", "xn--rskog-uua", "orsta", "xn--rsta-fra",
518
"os.hedmark", "os.hordaland", "osen", "osteroy", "xn--ostery-fya",
519
"ostre-toten", "xn--stre-toten-zcb", "overhalla", "ovre-eiker",
520
"xn--vre-eiker-k8a", "oyer", "xn--yer-zna",
521
"oygarden", "xn--ygarden-p1a", "oystre-slidre", "xn--ystre-slidre-ujb",
522
"porsanger", "porsangu", "xn--porsgu-sta26f", "porsgrunn",
523
"radoy", "xn--rady-ira", "rakkestad", "rana", "ruovat", "randaberg",
524
"rauma", "rendalen", "rennebu", "rennesoy", "xn--rennesy-v1a",
525
"rindal", "ringebu", "ringerike", "ringsaker", "rissa", "risor",
526
"xn--risr-ira", "roan", "rollag", "rygge", "ralingen", "xn--rlingen-mxa",
527
"rodoy", "xn--rdy-0nab", "romskog", "xn--rmskog-bya",
528
"roros", "xn--rros-gra", "rost", "xn--rst-0na",
529
"royken", "xn--ryken-vua", "royrvik", "xn--ryrvik-bya",
530
"rade", "xn--rde-ula", "salangen", "siellak", "saltdal", "salat",
531
"xn--slt-elab", "xn--slat-5na", "samnanger",
532
"sandefjord", "sandnes", "sandoy", "xn--sandy-yua", "sarpsborg",
533
"sauda", "sauherad", "sel", "selbu", "selje", "seljord", "sigdal", "siljan",
534
"sirdal", "skaun", "skedsmo", "ski", "skien", "skiptvet", "skjervoy",
535
"xn--skjervy-v1a", "skierva", "xn--skierv-uta",
536
"skjak", "xn--skjk-soa", "skodje", "skanland", "xn--sknland-fxa",
537
"skanit", "xn--sknit-yqa", "smola", "xn--smla-hra",
538
"snillfjord", "snasa", "xn--snsa-roa", "snoasa", "snaase",
539
"xn--snase-nra", "sogndal", "sokndal", "sola", "solund", "songdalen",
540
"sortland", "spydeberg", "stange", "stavanger", "steigen", "steinkjer",
541
"stjordal", "xn--stjrdal-s1a", "stokke", "stor-elvdal", "stord", "stordal",
542
"storfjord", "omasvuotna", "strand", "stranda", "stryn", "sula", "suldal",
543
"sund", "sunndal", "surnadal", "sveio", "svelvik", "sykkylven", "sogne",
544
"xn--sgne-gra", "somna", "xn--smna-gra", "sondre-land",
545
"xn--sndre-land-0cb", "sor-aurdal", "xn--sr-aurdal-l8a",
546
"sor-fron", "xn--sr-fron-q1a", "sor-odal", "xn--sr-odal-q1a",
547
"sor-varanger", "xn--sr-varanger-ggb", "matta-varjjat",
548
"xn--mtta-vrjjat-k7af", "sorfold", "xn--srfold-bya",
549
"sorreisa", "xn--srreisa-q1a", "sorum", "xn--srum-gra",
550
"tana", "deatnu", "time", "tingvoll", "tinn", "tjeldsund", "dielddanuorri",
551
"tjome", "xn--tjme-hra", "tokke", "tolga", "torsken", "tranoy",
552
"xn--trany-yua", "tromso", "xn--troms-zua", "tromsa", "romsa",
553
"trondheim", "troandin", "trysil", "trana", "xn--trna-woa",
554
"trogstad", "xn--trgstad-r1a", "tvedestrand", "tydal", "tynset",
555
"tysfjord", "divtasvuodna", "divttasvuotna", "tysnes", "tysvar",
556
"xn--tysvr-vra", "tonsberg", "xn--tnsberg-q1a",
557
"ullensaker", "ullensvang", "ulvik", "utsira", "vadso", "xn--vads-jra",
558
"cahcesuolo", "xn--hcesuolo-7ya35b", "vaksdal", "valle", "vang",
559
"vanylven", "vardo", "xn--vard-jra", "varggat", "xn--vrggt-xqad",
560
"vefsn", "vaapste", "vega", "vegarshei", "xn--vegrshei-c0a", "vennesla",
561
"verdal", "verran", "vestby", "vestnes", "vestre-slidre", "vestre-toten",
562
"vestvagoy", "xn--vestvgy-ixa6o", "vevelstad", "vik", "vikna",
563
"vindafjord", "volda", "voss", "varoy", "xn--vry-yla5g",
564
"vagan", "xn--vgan-qoa", "voagat", "vagsoy", "xn--vgsy-qoa0j",
565
"vaga", "xn--vg-yiab")));
566
567
topMap.put( "nr", new HashSet<String>(Arrays.asList("biz", "info", "gov", "edu", "org",
568
"net", "com", "co")));
569
topMap.put( "pa", new HashSet<String>(Arrays.asList("ac", "gob", "com", "org",
570
"sld", "edu", "net", "ing", "abo", "med", "nom")));
571
topMap.put( "pe", new HashSet<String>(Arrays.asList("edu", "gob", "nom", "mil", "org", "com",
572
"net", "sld")));
573
topMap.put( "pf", new HashSet<String>(Arrays.asList( "com")));
574
topMap.put( "ph", new HashSet<String>(Arrays.asList("com", "net", "org", "gov", "edu", "ngo", "mil")));
575
topMap.put( "pk", new HashSet<String>(Arrays.asList("com", "net", "edu", "org", "fam", "biz",
576
"web", "gov", "gob", "gok", "gon", "gop", "gos", "gog", "gkp", "info")));
577
topMap.put( "pl", new HashSet<String>(Arrays.asList("aid", "agro", "atm", "auto", "biz", "com",
578
"edu", "gmina", "gsm", "info", "mail", "miasta", "media", "mil", "net", "nieruchomosci",
579
"nom", "org", "pc", "powiat", "priv", "realestate", "rel", "sex", "shop", "sklep",
580
"sos", "szkola", "targi", "tm", "tourism", "travel", "turystyka", "art",
581
"gov", "ngo", "augustow", "babia-gora", "bedzin", "beskidy",
582
"bialowieza", "bialystok", "bielawa", "bieszczady", "boleslawiec", "bydgoszcz",
583
"bytom", "cieszyn", "czeladz", "czest", "dlugoleka", "elblag", "elk", "glogow",
584
"gniezno", "gorlice", "grajewo", "ilawa", "jaworzno", "jelenia-gora", "jgora",
585
"kalisz", "kazimierz-dolny", "karpacz", "kartuzy", "kaszuby", "katowice", "kepno",
586
"ketrzyn", "klodzko", "kobierzyce", "kolobrzeg", "konin", "konskowola", "kutno",
587
"lapy", "lebork", "legnica", "lezajsk", "limanowa", "lomza", "lowicz", "lubin",
588
"lukow", "malbork", "malopolska", "mazowsze", "mazury", "mielec", "mielno", "mragowo",
589
"naklo", "nowaruda", "nysa", "olawa", "olecko", "olkusz", "olsztyn", "opoczno",
590
"opole", "ostroda", "ostroleka", "ostrowiec", "ostrowwlkp", "pila", "pisz", "podhale",
591
"podlasie", "polkowice", "pomorze", "pomorskie", "prochowice", "pruszkow", "przeworsk",
592
"pulawy", "radom", "rawa-maz", "rybnik", "rzeszow", "sanok", "sejny", "siedlce",
593
"slask", "slupsk", "sosnowiec", "stalowa-wola", "skoczow", "starachowice", "stargard",
594
"suwalki", "swidnica", "swiebodzin", "swinoujscie", "szczecin", "szczytno", "tarnobrzeg",
595
"tgory", "turek", "tychy", "ustka", "walbrzych", "warmia", "warszawa", "waw",
596
"wegrow", "wielun", "wlocl", "wloclawek", "wodzislaw", "wolomin", "wroclaw",
597
"zachpomor", "zagan", "zarow", "zgora", "zgorzelec", "gda", "gdansk",
598
"krakow", "poznan", "wroc", "co",
599
"lodz", "lublin", "torun")));
600
topMap.put( "pn", new HashSet<String>(Arrays.asList("gov", "co", "org", "edu", "net")));
601
topMap.put( "pr", new HashSet<String>(Arrays.asList("com", "net", "org", "gov", "edu", "isla",
602
"pro", "biz", "info", "name", "est", "prof", "ac", "gobierno")));
603
topMap.put( "pro", new HashSet<String>(Arrays.asList("aca", "bar", "cpa", "jur", "law",
604
"med", "eng")));
605
topMap.put( "ps", new HashSet<String>(Arrays.asList("edu", "gov", "sec", "plo", "com", "org", "net")));
606
topMap.put( "pt", new HashSet<String>(Arrays.asList("net", "gov", "org", "edu", "int", "publ",
607
"com", "nome")));
608
topMap.put( "pw", new HashSet<String>(Arrays.asList("co", "ne", "or", "ed", "go", "belau")));
609
topMap.put( "qa", new HashSet<String>(Arrays.asList("com", "net", "org", "gov", "edu", "mil")));
610
topMap.put( "re", new HashSet<String>(Arrays.asList("com", "asso", "nom")));
611
topMap.put( "ro", new HashSet<String>(Arrays.asList("com", "org", "tm", "nt", "nom", "info",
612
"rec", "arts", "firm", "store", "www")));
613
topMap.put( "rs", new HashSet<String>(Arrays.asList("co", "org", "edu", "ac", "gov", "in")));
614
topMap.put( "ru", new HashSet<String>(Arrays.asList("ac", "com", "edu", "int", "net", "org",
615
"pp", "adygeya", "altai", "amur", "arkhangelsk", "astrakhan", "bashkiria",
616
"belgorod", "bir", "bryansk", "buryatia", "cap", "cbg", "chel", "chelyabinsk", "chita",
617
"chukotka", "dagestan", "e-burg", "grozny", "irkutsk",
618
"ivanovo", "izhevsk", "jar", "joshkar-ola", "kalmykia", "kaluga", "kamchatka",
619
"karelia", "kazan", "kchr", "kemerovo", "khabarovsk", "khakassia", "khv", "kirov",
620
"koenig", "komi", "kostroma", "krasnoyarsk", "kuban", "kurgan", "kursk", "lipetsk",
621
"magadan", "mari", "mari-el", "marine", "mordovia", "mosreg", "msk", "murmansk",
622
"nalchik", "nnov", "nov", "novosibirsk", "nsk", "omsk", "orenburg", "oryol",
623
"palana", "penza", "perm", "pskov", "ptz", "rnd", "ryazan", "sakhalin", "samara",
624
"saratov", "simbirsk", "smolensk", "spb", "stavropol", "stv", "surgut", "tambov",
625
"tatarstan", "tom", "tomsk", "tsaritsyn", "tsk", "tula", "tuva", "tver", "tyumen",
626
"udm", "udmurtia", "ulan-ude", "vladikavkaz", "vladimir", "vladivostok", "volgograd",
627
"vologda", "voronezh", "vrn", "vyatka", "yakutia", "yamal", "yaroslavl",
628
"yekaterinburg", "yuzhno-sakhalinsk", "amursk", "baikal", "cmw", "fareast",
629
"jamal", "kms", "k-uralsk", "kustanai", "kuzbass", "magnitka", "mytis",
630
"nakhodka", "nkz", "norilsk", "oskol", "pyatigorsk", "rubtsovsk", "snz", "syzran",
631
"vdonsk", "zgrad", "gov", "mil", "test")));
632
topMap.put( "rw", new HashSet<String>(Arrays.asList("gov", "net", "edu", "ac", "com", "co",
633
"int", "mil", "gouv")));
634
topMap.put( "sa", new HashSet<String>(Arrays.asList("com", "net", "org", "gov", "med", "pub",
635
"edu", "sch")));
636
topMap.put( "sd", new HashSet<String>(Arrays.asList("com", "net", "org", "edu", "med", "gov",
637
"info", "tv")));
638
topMap.put( "se", new HashSet<String>(Arrays.asList("a", "ac", "b", "bd", "brand", "c", "d",
639
"e", "f", "fh", "fhsk", "fhv", "g", "h", "i", "k", "komforb", "kommunalforbund",
640
"komvux", "l", "lanarb", "lanbib", "m", "n", "naturbruksgymn", "o", "org", "p", "parti",
641
"pp", "press", "r", "s", "sshn", "t", "tm", "u", "w", "x", "y", "z")));
642
topMap.put( "sg", new HashSet<String>(Arrays.asList("com", "net", "org", "gov", "edu", "per")));
643
topMap.put( "sh", new HashSet<String>(Arrays.asList("co", "com", "net", "org", "gov", "edu", "nom")));
644
topMap.put( "sk", new HashSet<String>(Arrays.asList("gov", "edu")));
645
topMap.put( "sn", new HashSet<String>(Arrays.asList("art", "com", "edu", "gouv", "org", "perso",
646
"univ")));
647
topMap.put( "so", new HashSet<String>(Arrays.asList("com", "net", "org")));
648
topMap.put( "sr", new HashSet<String>(Arrays.asList("co", "com", "consulado", "edu", "embaixada",
649
"gov", "mil", "net", "org", "principe", "saotome", "store")));
650
topMap.put( "sy", new HashSet<String>(Arrays.asList("edu", "gov", "net", "mil", "com", "org", "news")));
651
topMap.put( "sz", new HashSet<String>(Arrays.asList("co", "ac", "org")));
652
topMap.put( "th", new HashSet<String>(Arrays.asList("ac", "co", "go", "in", "mi", "net", "or")));
653
topMap.put( "tj", new HashSet<String>(Arrays.asList("ac", "biz", "co", "com", "edu", "go", "gov",
654
"int", "mil", "name", "net", "nic", "org", "test", "web")));
655
topMap.put( "tn", new HashSet<String>(Arrays.asList("com", "ens", "fin", "gov", "ind", "intl",
656
"nat", "net", "org", "info", "perso", "tourism", "edunet", "rnrt", "rns", "rnu",
657
"mincom", "agrinet", "defense", "turen")));
658
topMap.put( "to", new HashSet<String>(Arrays.asList("gov")));
659
topMap.put( "tt", new HashSet<String>(Arrays.asList("co", "com", "org", "net", "biz", "info",
660
"pro", "int", "coop", "jobs", "mobi", "travel", "museum", "aero", "name", "gov",
661
"edu", "cat", "tel", "mil")));
662
topMap.put( "tw", new HashSet<String>(Arrays.asList("edu", "gov", "mil", "com", "net", "org",
663
"idv", "game", "ebiz", "club", "xn--zf0ao64a", "xn--uc0atv", "xn--czrw28b")));
664
topMap.put( "ua", new HashSet<String>(Arrays.asList("com", "edu", "gov", "in", "net", "org",
665
"cherkassy", "chernigov", "chernovtsy", "ck", "cn", "crimea", "cv", "dn",
666
"dnepropetrovsk", "donetsk", "dp", "if", "ivano-frankivsk", "kh", "kharkov",
667
"kherson", "kiev", "kirovograd", "km", "kr", "ks", "lg",
668
"lugansk", "lutsk", "lviv", "mk", "nikolaev", "od", "odessa", "pl", "poltava",
669
"rovno", "rv", "sebastopol", "sumy", "te", "ternopil", "uzhgorod", "vinnica", "vn",
670
"zaporizhzhe", "zp", "zhitomir", "zt", "cr", "lt", "lv", "sb", "sm", "tr",
671
"co", "biz", "in", "ne", "pp", "uz", "dominic")));
672
topMap.put( "ug", new HashSet<String>(Arrays.asList("co", "ac", "sc", "go", "ne", "or", "org", "com")));
673
topMap.put( "us", new HashSet<String>(Arrays.asList("dni", "fed", "isa", "kids", "nsn", "kyschools")));
674
topMap.put( "uz", new HashSet<String>(Arrays.asList("co", "com", "org", "gov", "ac", "edu", "int", "pp", "net")));
675
topMap.put( "vc", new HashSet<String>(Arrays.asList("com", "net", "org", "gov")));
676
topMap.put( "vi", new HashSet<String>(Arrays.asList("co", "com", "k12", "net", "org")));
677
topMap.put( "vn", new HashSet<String>(Arrays.asList( "com", "net", "org", "edu", "gov", "int",
678
"ac", "biz", "info", "name", "pro", "health")));
679
topMap.put( "vu", new HashSet<String>(Arrays.asList("co", "com", "net", "org", "edu", "gov", "de")));
680
topMap.put("org", new HashSet<String>(Arrays.asList("ae", "za")));
681
topMap.put("pro", new HashSet<String>(Arrays.asList("aca", "bar", "cpa", "jur", "law", "med", "eng")));
682
683
top3Map.put("au", new HashSet<String>(Arrays.asList("act.edu.au", "eq.edu.au",
684
"nsw.edu.au", "nt.edu.au", "qld.edu.au", "sa.edu.au", "tas.edu.au", "vic.edu.au",
685
"wa.edu.au", "act.gov.au", "nsw.gov.au", "nt.gov.au", "qld.gov.au", "sa.gov.au",
686
"tas.gov.au", "vic.gov.au", "wa.gov.au")));
687
top3Map.put("im", new HashSet<String>(Arrays.asList("ltd.co.im", "plc.co.im")));
688
top3Map.put("no", new HashSet<String>(Arrays.asList("gs.aa.no", "gs.ah.no", "gs.bu.no",
689
"gs.fm.no", "gs.hl.no", "gs.hm.no", "gs.jan-mayen.no", "gs.mr.no", "gs.nl.no",
690
"gs.nt.no", "gs.of.no", "gs.ol.no", "gs.oslo.no", "gs.rl.no", "gs.sf.no",
691
"gs.st.no", "gs.svalbard.no", "gs.tm.no", "gs.tr.no", "gs.va.no", "gs.vf.no",
692
"bo.telemark.no", "xn--b-5ga.telemark.no", "bo.nordland.no",
693
"xn--b-5ga.nordland.no", "heroy.more-og-romsdal.no",
694
"xn--hery-ira.xn--mre-og-romsdal-qqb.no", "heroy.nordland.no",
695
"xn--hery-ira.nordland.no", "nes.akershus.no", "nes.buskerud.no",
696
"os.hedmark.no", "os.hordaland.no",
697
"sande.more-og-romsdal.no", "sande.xn--mre-og-romsdal-qqb.no",
698
"sande.vestfold.no", "valer.ostfold.no", "xn--vler-qoa.xn--stfold-9xa.no",
699
"valer.hedmark.no", "xn--vler-qoa.hedmark.no")));
700
top3Map.put("tr", new HashSet<String>(Arrays.asList("gov.nc.tr")));
701
}
702
703
/**
704
* Returns a {@code sun.security.util.RegisteredDomain} representing the
705
* registered part of the specified domain.
706
*
707
* @param domain the domain name
708
* @return a {@code sun.security.util.RegisteredDomain} or null
709
* if the domain is unknown or not registerable
710
* @throws NullPointerException if domain is null
711
*/
712
public static sun.security.util.RegisteredDomain registeredDomain(String domain) {
713
String name = getRegisteredDomain(domain);
714
if (name.equals(domain)) {
715
return null;
716
}
717
return new sun.security.util.RegisteredDomain() {
718
private String rname = name;
719
@Override
720
public String name() {
721
return rname;
722
}
723
@Override
724
public sun.security.util.RegisteredDomain.Type type() {
725
return sun.security.util.RegisteredDomain.Type.ICANN;
726
}
727
@Override
728
public String publicSuffix() {
729
return rname.substring(rname.indexOf(".") + 1);
730
}
731
};
732
}
733
734
/*
735
* Return the registered part of a qualified domain
736
* name or the original if no match is found.
737
*/
738
public static String getRegisteredDomain(String cname) {
739
int dot;
740
741
/*
742
* If one dot or less than just return.
743
*/
744
dot = cname.lastIndexOf('.');
745
if (dot == -1)
746
return cname;
747
if (dot == 0)
748
return "";
749
if (dot == cname.length() - 1) {
750
cname = cname.substring(0, cname.length() -1);
751
dot = cname.lastIndexOf('.');
752
if (dot == -1)
753
return cname;
754
if (dot == 0)
755
return "";
756
}
757
if (dot == cname.length() - 1)
758
return "";
759
760
/*
761
* Break it up into seperate labels.
762
*/
763
int second = cname.lastIndexOf('.', dot - 1);
764
if (second == -1)
765
return cname;
766
if (second == 0)
767
return "";
768
int third = cname.lastIndexOf('.', second - 1);
769
int fourth = -1;
770
if (third > 0) {
771
fourth = cname.lastIndexOf('.', third - 1);
772
}
773
int fifth = -1;
774
if (fourth > 0) {
775
fifth = cname.lastIndexOf('.', fourth - 1);
776
}
777
String s = cname.substring(dot + 1);
778
String s2 = cname.substring(second + 1, dot);
779
780
/*
781
* Look for longest matches first.
782
* XX.PVT.K12.MA.US etc.
783
*/
784
if (fourth != -1 && s.equals("us") && usStateSet.contains(s2)) {
785
String s3 = cname.substring(third + 1, second);
786
String s4 = cname.substring(fourth + 1, third);
787
if (s3.equals("k12")) {
788
if (s2.equals("ma") && (s4.equals("chtr") || s4.equals("paroch"))) {
789
return cname.substring(fifth + 1);
790
} else if (s4.equals("pvt")) {
791
return cname.substring(fifth + 1);
792
}
793
}
794
}
795
796
/*
797
* XX.K12.MA.US.
798
*/
799
String str = cname.substring(third + 1);
800
if (third != -1) {
801
Set<String> set = top3Map.get(s);
802
if (set != null) {
803
if (set.contains(str)) {
804
return cname.substring(fourth + 1);
805
}
806
} else if (s.equals("us") && usStateSet.contains(s2)) {
807
// check for known third level labels
808
String s3 = cname.substring(third + 1, second);
809
if (usSubStateSet.contains(s3)) {
810
return fourth != -1? cname.substring(fourth + 1): cname;
811
} else {
812
return cname.substring(third + 1);
813
}
814
} else if (s.equals("uk")) {
815
if (s2.equals("sch")) {
816
return cname.substring(fourth + 1);
817
}
818
} else if (s.equals("jp")) {
819
if (jpSet.contains(s2)) {
820
if (jp2Set.contains(str)) {
821
return cname.substring(third + 1);
822
}
823
return cname.substring(fourth + 1);
824
}
825
}
826
}
827
828
/*
829
* PREF.AKITA.JP etc.
830
*/
831
if (jp2Set.contains(str)) {
832
return cname.substring(third + 1);
833
}
834
835
/*
836
* XX.MA.US.
837
*/
838
Set<String> topSet = topMap.get(s);
839
if (topSet != null) {
840
if (topSet.contains(s2)) {
841
return cname.substring(third + 1);
842
}
843
if (!((s.equals("us") && usStateSet.contains(s2)) || (s.equals("jp") && jpSet.contains(s2)))) {
844
return cname.substring(second + 1);
845
}
846
} else if (top2Set.contains(s)) {
847
if (s2.equals("gov")) {
848
return cname.substring(third + 1);
849
}
850
return cname.substring(second + 1);
851
} else if (top3Set.contains(s)) {
852
if (s.equals("ad") && s2.equals("nom") ||
853
s.equals("aw") && s2.equals("com") ||
854
s.equals("be") && s2.equals("ac") ||
855
s.equals("cl") && s2.equals("gov") ||
856
s.equals("cl") && s2.equals("gob") ||
857
s.equals("fi") && s2.equals("aland") ||
858
s.equals("int") && s2.equals("eu") ||
859
s.equals("io") && s2.equals("com") ||
860
s.equals("mc") && s2.equals("tm") ||
861
s.equals("mc") && s2.equals("asso") ||
862
s.equals("vc") && s2.equals("com")) {
863
return cname.substring(third + 1);
864
}
865
return cname.substring(second + 1);
866
} else if (top4Set.contains(s)) {
867
if (s2.equals("com") || s2.equals("edu") || s2.equals("gov") ||
868
s2.equals("net") || s2.equals("org")) {
869
return cname.substring(third + 1);
870
}
871
return cname.substring(second + 1);
872
} else if (top5Set.contains(s)) {
873
return cname.substring(third + 1);
874
}
875
876
/*
877
* BB.AA exception cases.
878
*/
879
if (s.equals("tr")) {
880
if (!s2.equals("nic") && !s2.equals("tsk")) {
881
return cname.substring(third + 1);
882
}
883
return cname.substring(second + 1);
884
} else if (s.equals("uk")) {
885
if (!ukSet.contains(s2)) {
886
return cname.substring(third + 1);
887
}
888
return cname.substring(second + 1);
889
} else if (s.equals("ar")) {
890
if (!arSet.contains(s2)) {
891
return cname.substring(third + 1);
892
}
893
return cname.substring(second + 1);
894
} else if (s.equals("om")) {
895
if (!omSet.contains(s2)) {
896
return cname.substring(third + 1);
897
}
898
return cname.substring(second + 1);
899
}
900
901
/*
902
* XX.AA
903
*/
904
if (top1Set.contains(s)) {
905
return cname.substring(second + 1);
906
}
907
908
/*
909
* Nothing matched so we can't shorten the string.
910
*/
911
return cname;
912
}
913
}
914
915