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