Browse Source

publicsuffix: strip generated comments; automatically scrape git version.

Also follow the "go generate" convention, and have the generation
command be a bare "go run gen.go" without any need for explicit flags.

Stripping the for-debugging comments shrinks the generated table.go file
from 538K to 139K.

Also update table to latest list from publicsuffix.org:
revision ea9f4f9c51f5bfc5c85a41a5637ab671c07c542a
(2016-05-31T18:30:56Z)

Change-Id: Ib59366106e0142fd65a2102e73d6a9a29e53930e
Reviewed-on: https://go-review.googlesource.com/23930
Reviewed-by: Andrew Gerrand <adg@golang.org>
Nigel Tao 9 years ago
parent
commit
3f122ce3db
4 changed files with 8846 additions and 8357 deletions
  1. 87 37
      publicsuffix/gen.go
  2. 2 0
      publicsuffix/list.go
  3. 8467 8314
      publicsuffix/table.go
  4. 290 6
      publicsuffix/table_test.go

+ 87 - 37
publicsuffix/gen.go

@@ -6,19 +6,17 @@
 
 package main
 
-// This program generates table.go and table_test.go.
-// Invoke as:
+// This program generates table.go and table_test.go based on the authoritative
+// public suffix list at https://publicsuffix.org/list/effective_tld_names.dat
 //
-//	go run gen.go -version "xxx"       >table.go
-//	go run gen.go -version "xxx" -test >table_test.go
-//
-// Pass -v to print verbose progress information.
-//
-// The version is derived from information found at
+// The version is derived from
+// https://api.github.com/repos/publicsuffix/list/commits?path=public_suffix_list.dat
+// and a human-readable form is at
 // https://github.com/publicsuffix/list/commits/master/public_suffix_list.dat
 //
 // To fetch a particular git revision, such as 5c70ccd250, pass
 // -url "https://raw.githubusercontent.com/publicsuffix/list/5c70ccd250/public_suffix_list.dat"
+// and -version "an explicit version string".
 
 import (
 	"bufio"
@@ -27,6 +25,7 @@ import (
 	"fmt"
 	"go/format"
 	"io"
+	"io/ioutil"
 	"net/http"
 	"os"
 	"regexp"
@@ -91,24 +90,30 @@ func nodeTypeStr(n int) string {
 	panic("unreachable")
 }
 
+const (
+	defaultURL   = "https://publicsuffix.org/list/effective_tld_names.dat"
+	gitCommitURL = "https://api.github.com/repos/publicsuffix/list/commits?path=public_suffix_list.dat"
+)
+
 var (
 	labelEncoding = map[string]uint32{}
 	labelsList    = []string{}
 	labelsMap     = map[string]bool{}
 	rules         = []string{}
 
-	// validSuffix is used to check that the entries in the public suffix list
-	// are in canonical form (after Punycode encoding). Specifically, capital
-	// letters are not allowed.
-	validSuffix = regexp.MustCompile(`^[a-z0-9_\!\*\-\.]+$`)
-
-	subset = flag.Bool("subset", false, "generate only a subset of the full table, for debugging")
-	url    = flag.String("url",
-		"https://publicsuffix.org/list/effective_tld_names.dat",
-		"URL of the publicsuffix.org list. If empty, stdin is read instead")
-	v       = flag.Bool("v", false, "verbose output (to stderr)")
-	version = flag.String("version", "", "the effective_tld_names.dat version")
-	test    = flag.Bool("test", false, "generate table_test.go")
+	// validSuffixRE is used to check that the entries in the public suffix
+	// list are in canonical form (after Punycode encoding). Specifically,
+	// capital letters are not allowed.
+	validSuffixRE = regexp.MustCompile(`^[a-z0-9_\!\*\-\.]+$`)
+
+	shaRE  = regexp.MustCompile(`"sha":"([^"]+)"`)
+	dateRE = regexp.MustCompile(`"committer":{[^{]+"date":"([^"]+)"`)
+
+	comments = flag.Bool("comments", false, "generate table.go comments, for debugging")
+	subset   = flag.Bool("subset", false, "generate only a subset of the full table, for debugging")
+	url      = flag.String("url", defaultURL, "URL of the publicsuffix.org list. If empty, stdin is read instead")
+	v        = flag.Bool("v", false, "verbose output (to stderr)")
+	version  = flag.String("version", "", "the effective_tld_names.dat version")
 )
 
 func main() {
@@ -127,7 +132,14 @@ func main1() error {
 		return fmt.Errorf("not enough bits to encode the children table")
 	}
 	if *version == "" {
-		return fmt.Errorf("-version was not specified")
+		if *url != defaultURL {
+			return fmt.Errorf("-version was not specified, and the -url is not the default one")
+		}
+		sha, date, err := gitCommit()
+		if err != nil {
+			return err
+		}
+		*version = fmt.Sprintf("publicsuffix.org's public_suffix_list.dat, git revision %s (%s)", sha, date)
 	}
 	var r io.Reader = os.Stdin
 	if *url != "" {
@@ -144,7 +156,6 @@ func main1() error {
 
 	var root node
 	icann := false
-	buf := new(bytes.Buffer)
 	br := bufio.NewReader(r)
 	for {
 		s, err := br.ReadString('\n')
@@ -170,7 +181,7 @@ func main1() error {
 		if err != nil {
 			return err
 		}
-		if !validSuffix.MatchString(s) {
+		if !validSuffixRE.MatchString(s) {
 			return fmt.Errorf("bad publicsuffix.org list data: %q", s)
 		}
 
@@ -228,20 +239,50 @@ func main1() error {
 	}
 	sort.Strings(labelsList)
 
-	p := printReal
-	if *test {
-		p = printTest
+	if err := generate(printReal, &root, "table.go"); err != nil {
+		return err
 	}
-	if err := p(buf, &root); err != nil {
+	if err := generate(printTest, &root, "table_test.go"); err != nil {
 		return err
 	}
+	return nil
+}
 
+func generate(p func(io.Writer, *node) error, root *node, filename string) error {
+	buf := new(bytes.Buffer)
+	if err := p(buf, root); err != nil {
+		return err
+	}
 	b, err := format.Source(buf.Bytes())
 	if err != nil {
 		return err
 	}
-	_, err = os.Stdout.Write(b)
-	return err
+	return ioutil.WriteFile(filename, b, 0644)
+}
+
+func gitCommit() (sha, date string, retErr error) {
+	res, err := http.Get(gitCommitURL)
+	if err != nil {
+		return "", "", err
+	}
+	if res.StatusCode != http.StatusOK {
+		return "", "", fmt.Errorf("bad GET status for %s: %d", gitCommitURL, res.Status)
+	}
+	defer res.Body.Close()
+	b, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		return "", "", err
+	}
+	if m := shaRE.FindSubmatch(b); m != nil {
+		sha = string(m[1])
+	}
+	if m := dateRE.FindSubmatch(b); m != nil {
+		date = string(m[1])
+	}
+	if sha == "" || date == "" {
+		retErr = fmt.Errorf("could not find commit SHA and date in %s", gitCommitURL)
+	}
+	return sha, date, retErr
 }
 
 func printTest(w io.Writer, n *node) error {
@@ -330,8 +371,9 @@ const numTLD = %d
 // encodes the node's children, wildcard bit and node type (as an index into
 // the children array), ICANN bit and text.
 //
-// In the //-comment after each node's data, the nodes indexes of the children
-// are formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The
+// If the table was generated with the -comments flag, there is a //-comment
+// after each node's data. In it is the nodes-array indexes of the children,
+// formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The
 // nodeType is printed as + for normal, ! for exception, and o for parent-only
 // nodes that have children but don't match a domain label in their own right.
 // An I denotes an ICANN domain.
@@ -374,8 +416,12 @@ var children=[...]uint32{
 		}
 		nodeType := int(c>>(childrenBitsLo+childrenBitsHi)) & (1<<childrenBitsNodeType - 1)
 		wildcard := c>>(childrenBitsLo+childrenBitsHi+childrenBitsNodeType) != 0
-		fmt.Fprintf(w, "0x%08x, // c0x%04x (%s)%s %s\n",
-			c, i, s, wildcardStr(wildcard), nodeTypeStr(nodeType))
+		if *comments {
+			fmt.Fprintf(w, "0x%08x, // c0x%04x (%s)%s %s\n",
+				c, i, s, wildcardStr(wildcard), nodeTypeStr(nodeType))
+		} else {
+			fmt.Fprintf(w, "0x%08x,\n", c)
+		}
 	}
 	fmt.Fprintf(w, "}\n\n")
 	fmt.Fprintf(w, "// max children %d (capacity %d)\n", maxChildren, 1<<nodesBitsChildren-1)
@@ -508,10 +554,14 @@ func printNode(w io.Writer, n *node) error {
 			encoding |= 1 << (nodesBitsTextLength + nodesBitsTextOffset)
 		}
 		encoding |= uint32(c.childrenIndex) << (nodesBitsTextLength + nodesBitsTextOffset + nodesBitsICANN)
-		fmt.Fprintf(w, "0x%08x, // n0x%04x c0x%04x (%s)%s %s %s %s\n",
-			encoding, c.nodesIndex, c.childrenIndex, s, wildcardStr(c.wildcard),
-			nodeTypeStr(c.nodeType), icannStr(c.icann), c.label,
-		)
+		if *comments {
+			fmt.Fprintf(w, "0x%08x, // n0x%04x c0x%04x (%s)%s %s %s %s\n",
+				encoding, c.nodesIndex, c.childrenIndex, s, wildcardStr(c.wildcard),
+				nodeTypeStr(c.nodeType), icannStr(c.icann), c.label,
+			)
+		} else {
+			fmt.Fprintf(w, "0x%08x,\n", encoding)
+		}
 	}
 	return nil
 }

+ 2 - 0
publicsuffix/list.go

@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+//go:generate go run gen.go
+
 // Package publicsuffix provides a public suffix list based on data from
 // http://publicsuffix.org/. A public suffix is one under which Internet users
 // can directly register names.

File diff suppressed because it is too large
+ 8467 - 8314
publicsuffix/table.go


+ 290 - 6
publicsuffix/table_test.go

@@ -2300,7 +2300,6 @@ var rules = [...]string{
 	"kakuda.miyagi.jp",
 	"kami.miyagi.jp",
 	"kawasaki.miyagi.jp",
-	"kesennuma.miyagi.jp",
 	"marumori.miyagi.jp",
 	"matsushima.miyagi.jp",
 	"minamisanriku.miyagi.jp",
@@ -5975,6 +5974,7 @@ var rules = [...]string{
 	"xn--fiqz9s",
 	"xn--lgbbat1ad8j",
 	"xn--wgbh1c",
+	"xn--e1a4c",
 	"xn--node",
 	"xn--qxam",
 	"xn--j6w193g",
@@ -6047,7 +6047,18 @@ var rules = [...]string{
 	"school.za",
 	"tm.za",
 	"web.za",
-	"*.zm",
+	"zm",
+	"ac.zm",
+	"biz.zm",
+	"co.zm",
+	"com.zm",
+	"edu.zm",
+	"gov.zm",
+	"info.zm",
+	"mil.zm",
+	"net.zm",
+	"org.zm",
+	"sch.zm",
 	"*.zw",
 	"aaa",
 	"aarp",
@@ -6110,6 +6121,7 @@ var rules = [...]string{
 	"aramco",
 	"archi",
 	"army",
+	"art",
 	"arte",
 	"asda",
 	"associates",
@@ -6208,6 +6220,7 @@ var rules = [...]string{
 	"cal",
 	"call",
 	"calvinklein",
+	"cam",
 	"camera",
 	"camp",
 	"cancerresearch",
@@ -6423,6 +6436,7 @@ var rules = [...]string{
 	"flsmidth",
 	"fly",
 	"foo",
+	"food",
 	"foodnetwork",
 	"football",
 	"ford",
@@ -6530,6 +6544,7 @@ var rules = [...]string{
 	"hosting",
 	"hot",
 	"hoteles",
+	"hotels",
 	"hotmail",
 	"house",
 	"how",
@@ -6956,6 +6971,8 @@ var rules = [...]string{
 	"shia",
 	"shiksha",
 	"shoes",
+	"shop",
+	"shopping",
 	"shouji",
 	"show",
 	"showtime",
@@ -7269,6 +7286,8 @@ var rules = [...]string{
 	"zippo",
 	"zone",
 	"zuerich",
+	"*.compute.estate",
+	"*.alces.network",
 	"cloudfront.net",
 	"ap-northeast-1.compute.amazonaws.com",
 	"ap-northeast-2.compute.amazonaws.com",
@@ -7306,6 +7325,8 @@ var rules = [...]string{
 	"s3.ap-northeast-2.amazonaws.com",
 	"s3.cn-north-1.amazonaws.com.cn",
 	"s3.eu-central-1.amazonaws.com",
+	"on-aptible.com",
+	"myfritz.net",
 	"betainabox.com",
 	"ae.org",
 	"ar.com",
@@ -7336,12 +7357,12 @@ var rules = [...]string{
 	"za.bz",
 	"za.com",
 	"africa.com",
-	"xenapponazure.com",
 	"gr.com",
 	"in.net",
 	"us.org",
 	"co.com",
 	"c.la",
+	"xenapponazure.com",
 	"cloudcontrolled.com",
 	"cloudcontrolapp.com",
 	"co.ca",
@@ -7355,9 +7376,21 @@ var rules = [...]string{
 	"co.no",
 	"*.platform.sh",
 	"cupcake.is",
+	"cyon.link",
+	"cyon.site",
+	"daplie.me",
+	"biz.dk",
+	"co.dk",
+	"firm.dk",
+	"reg.dk",
+	"store.dk",
+	"dedyn.io",
+	"dnshome.de",
 	"dreamhosters.com",
 	"mydrobo.com",
 	"duckdns.org",
+	"dy.fi",
+	"tunk.org",
 	"dyndns-at-home.com",
 	"dyndns-at-work.com",
 	"dyndns-blog.com",
@@ -7638,6 +7671,7 @@ var rules = [...]string{
 	"worse-than.tv",
 	"writesthisblog.com",
 	"dynv6.net",
+	"e4.cz",
 	"eu.org",
 	"al.eu.org",
 	"asso.eu.org",
@@ -7702,6 +7736,12 @@ var rules = [...]string{
 	"global.prod.fastly.net",
 	"firebaseapp.com",
 	"flynnhub.com",
+	"freebox-os.com",
+	"freeboxos.com",
+	"fbx-os.fr",
+	"fbxos.fr",
+	"freebox-os.fr",
+	"freeboxos.fr",
 	"service.gov.uk",
 	"github.io",
 	"githubusercontent.com",
@@ -7711,6 +7751,8 @@ var rules = [...]string{
 	"gist.githubcloud.com",
 	"*.githubcloudusercontent.com",
 	"ro.com",
+	"goip.de",
+	"*.0emm.com",
 	"appspot.com",
 	"blogspot.ae",
 	"blogspot.al",
@@ -7807,10 +7849,100 @@ var rules = [...]string{
 	"4u.com",
 	"ngrok.io",
 	"nfshost.com",
+	"nsupdate.info",
+	"nerdpol.ovh",
+	"blogsyte.com",
+	"brasilia.me",
+	"cable-modem.org",
+	"ciscofreak.com",
+	"collegefan.org",
+	"couchpotatofries.org",
+	"damnserver.com",
+	"ddns.me",
+	"ditchyourip.com",
+	"dnsfor.me",
+	"dnsiskinky.com",
+	"dvrcam.info",
+	"dynns.com",
+	"eating-organic.net",
+	"fantasyleague.cc",
+	"geekgalaxy.com",
+	"golffan.us",
+	"health-carereform.com",
+	"homesecuritymac.com",
+	"homesecuritypc.com",
+	"hopto.me",
+	"ilovecollege.info",
+	"loginto.me",
+	"mlbfan.org",
+	"mmafan.biz",
+	"myactivedirectory.com",
+	"mydissent.net",
+	"myeffect.net",
+	"mymediapc.net",
+	"mypsx.net",
+	"mysecuritycamera.com",
+	"mysecuritycamera.net",
+	"mysecuritycamera.org",
+	"net-freaks.com",
+	"nflfan.org",
+	"nhlfan.net",
+	"no-ip.ca",
+	"no-ip.co.uk",
+	"no-ip.net",
+	"noip.us",
+	"onthewifi.com",
+	"pgafan.net",
+	"point2this.com",
+	"pointto.us",
+	"privatizehealthinsurance.net",
+	"quicksytes.com",
+	"read-books.org",
+	"securitytactics.com",
+	"serveexchange.com",
+	"servehumour.com",
+	"servep2p.com",
+	"servesarcasm.com",
+	"stufftoread.com",
+	"ufcfan.org",
+	"unusualperson.com",
+	"workisboring.com",
+	"3utilities.com",
+	"bounceme.net",
+	"ddns.net",
+	"ddnsking.com",
+	"gotdns.ch",
+	"hopto.org",
+	"myftp.biz",
+	"myftp.org",
+	"myvnc.com",
+	"no-ip.biz",
+	"no-ip.info",
+	"no-ip.org",
+	"noip.me",
+	"redirectme.net",
+	"servebeer.com",
+	"serveblog.net",
+	"servecounterstrike.com",
+	"serveftp.com",
+	"servegame.com",
+	"servehalflife.com",
+	"servehttp.com",
+	"serveirc.com",
+	"serveminecraft.net",
+	"servemp3.com",
+	"servepics.com",
+	"servequake.com",
+	"sytes.net",
+	"webhop.me",
+	"zapto.org",
 	"nyc.mn",
 	"nid.io",
 	"operaunite.com",
 	"outsystemscloud.com",
+	"ownprovider.com",
+	"oy.lc",
+	"pgfog.com",
 	"pagefrontapp.com",
 	"art.pl",
 	"gliwice.pl",
@@ -7818,14 +7950,17 @@ var rules = [...]string{
 	"poznan.pl",
 	"wroc.pl",
 	"zakopane.pl",
-	"pantheon.io",
+	"pantheonsite.io",
 	"gotpantheon.com",
+	"mypep.link",
 	"xen.prgmr.com",
 	"priv.at",
+	"chirurgiens-dentistes-en-france.fr",
 	"qa2.com",
 	"rackmaze.com",
 	"rackmaze.net",
 	"rhcloud.com",
+	"hzc.io",
 	"sandcats.io",
 	"biz.ua",
 	"co.ua",
@@ -7833,6 +7968,10 @@ var rules = [...]string{
 	"sinaapp.com",
 	"vipsinaapp.com",
 	"1kapp.com",
+	"bounty-full.com",
+	"alpha.bounty-full.com",
+	"beta.bounty-full.com",
+	"spacekit.io",
 	"diskstation.me",
 	"dscloud.biz",
 	"dscloud.me",
@@ -7851,10 +7990,13 @@ var rules = [...]string{
 	"gdynia.pl",
 	"med.pl",
 	"sopot.pl",
+	"bloxcms.com",
+	"townnews-staging.com",
 	"hk.com",
 	"hk.org",
 	"ltd.hk",
 	"inc.hk",
+	"router.management",
 	"yolasite.com",
 	"za.net",
 	"za.org",
@@ -7935,6 +8077,7 @@ var nodeLabels = [...]string{
 	"archi",
 	"army",
 	"arpa",
+	"art",
 	"arte",
 	"as",
 	"asda",
@@ -8061,6 +8204,7 @@ var nodeLabels = [...]string{
 	"cal",
 	"call",
 	"calvinklein",
+	"cam",
 	"camera",
 	"camp",
 	"cancerresearch",
@@ -8316,6 +8460,7 @@ var nodeLabels = [...]string{
 	"fm",
 	"fo",
 	"foo",
+	"food",
 	"foodnetwork",
 	"football",
 	"ford",
@@ -8447,6 +8592,7 @@ var nodeLabels = [...]string{
 	"hosting",
 	"hot",
 	"hoteles",
+	"hotels",
 	"hotmail",
 	"house",
 	"how",
@@ -8985,6 +9131,8 @@ var nodeLabels = [...]string{
 	"shia",
 	"shiksha",
 	"shoes",
+	"shop",
+	"shopping",
 	"shouji",
 	"show",
 	"showtime",
@@ -9275,6 +9423,7 @@ var nodeLabels = [...]string{
 	"xn--czru2d",
 	"xn--d1acj3b",
 	"xn--d1alf",
+	"xn--e1a4c",
 	"xn--eckvdtc9d",
 	"xn--efvy88h",
 	"xn--estv75g",
@@ -9683,6 +9832,9 @@ var nodeLabels = [...]string{
 	"for-more",
 	"for-some",
 	"for-the",
+	"mmafan",
+	"myftp",
+	"no-ip",
 	"selfip",
 	"webhop",
 	"asso",
@@ -9806,6 +9958,7 @@ var nodeLabels = [...]string{
 	"nb",
 	"nf",
 	"nl",
+	"no-ip",
 	"ns",
 	"nt",
 	"nu",
@@ -9814,6 +9967,7 @@ var nodeLabels = [...]string{
 	"qc",
 	"sk",
 	"yk",
+	"fantasyleague",
 	"ftpaccess",
 	"game-server",
 	"myphotos",
@@ -9821,6 +9975,7 @@ var nodeLabels = [...]string{
 	"gov",
 	"blogspot",
 	"blogspot",
+	"gotdns",
 	"ac",
 	"asso",
 	"co",
@@ -9910,7 +10065,9 @@ var nodeLabels = [...]string{
 	"rec",
 	"web",
 	"blogspot",
+	"0emm",
 	"1kapp",
+	"3utilities",
 	"4u",
 	"africa",
 	"amazonaws",
@@ -9919,16 +10076,24 @@ var nodeLabels = [...]string{
 	"betainabox",
 	"blogdns",
 	"blogspot",
+	"blogsyte",
+	"bloxcms",
+	"bounty-full",
 	"br",
 	"cechire",
+	"ciscofreak",
 	"cloudcontrolapp",
 	"cloudcontrolled",
 	"cn",
 	"co",
 	"codespot",
+	"damnserver",
+	"ddnsking",
 	"de",
+	"ditchyourip",
 	"dnsalias",
 	"dnsdojo",
+	"dnsiskinky",
 	"doesntexist",
 	"dontexist",
 	"doomdns",
@@ -9950,6 +10115,7 @@ var nodeLabels = [...]string{
 	"dyndns-web",
 	"dyndns-wiki",
 	"dyndns-work",
+	"dynns",
 	"elasticbeanstalk",
 	"est-a-la-maison",
 	"est-a-la-masion",
@@ -9960,6 +10126,8 @@ var nodeLabels = [...]string{
 	"fbsbx",
 	"firebaseapp",
 	"flynnhub",
+	"freebox-os",
+	"freeboxos",
 	"from-ak",
 	"from-al",
 	"from-ar",
@@ -10008,6 +10176,7 @@ var nodeLabels = [...]string{
 	"from-wv",
 	"from-wy",
 	"gb",
+	"geekgalaxy",
 	"getmyip",
 	"githubcloud",
 	"githubcloudusercontent",
@@ -10017,11 +10186,14 @@ var nodeLabels = [...]string{
 	"gotdns",
 	"gotpantheon",
 	"gr",
+	"health-carereform",
 	"herokuapp",
 	"herokussl",
 	"hk",
 	"hobby-site",
 	"homelinux",
+	"homesecuritymac",
+	"homesecuritypc",
 	"homeunix",
 	"hu",
 	"iamallama",
@@ -10088,17 +10260,27 @@ var nodeLabels = [...]string{
 	"likes-pie",
 	"likescandy",
 	"mex",
+	"myactivedirectory",
 	"mydrobo",
+	"mysecuritycamera",
+	"myvnc",
 	"neat-url",
+	"net-freaks",
 	"nfshost",
 	"no",
+	"on-aptible",
+	"onthewifi",
 	"operaunite",
 	"outsystemscloud",
+	"ownprovider",
 	"pagefrontapp",
 	"pagespeedmobilizer",
+	"pgfog",
+	"point2this",
 	"prgmr",
 	"qa2",
 	"qc",
+	"quicksytes",
 	"rackmaze",
 	"rhcloud",
 	"ro",
@@ -10106,20 +10288,39 @@ var nodeLabels = [...]string{
 	"sa",
 	"saves-the-whales",
 	"se",
+	"securitytactics",
 	"selfip",
 	"sells-for-less",
 	"sells-for-u",
 	"servebbs",
+	"servebeer",
+	"servecounterstrike",
+	"serveexchange",
+	"serveftp",
+	"servegame",
+	"servehalflife",
+	"servehttp",
+	"servehumour",
+	"serveirc",
+	"servemp3",
+	"servep2p",
+	"servepics",
+	"servequake",
+	"servesarcasm",
 	"simple-url",
 	"sinaapp",
 	"space-to-rent",
+	"stufftoread",
 	"teaches-yoga",
+	"townnews-staging",
 	"uk",
+	"unusualperson",
 	"us",
 	"uy",
 	"vipsinaapp",
 	"withgoogle",
 	"withyoutube",
+	"workisboring",
 	"writesthisblog",
 	"xenapponazure",
 	"yolasite",
@@ -10158,6 +10359,8 @@ var nodeLabels = [...]string{
 	"z-1",
 	"z-2",
 	"s3",
+	"alpha",
+	"beta",
 	"apps",
 	"api",
 	"ext",
@@ -10199,15 +10402,23 @@ var nodeLabels = [...]string{
 	"blogspot",
 	"blogspot",
 	"co",
+	"e4",
 	"blogspot",
 	"com",
+	"dnshome",
 	"fuettertdasnetz",
+	"goip",
 	"isteingeek",
 	"istmein",
 	"lebtimnetz",
 	"leitungsen",
 	"traeumtgerade",
+	"biz",
 	"blogspot",
+	"co",
+	"firm",
+	"reg",
+	"store",
 	"com",
 	"edu",
 	"gov",
@@ -10270,6 +10481,7 @@ var nodeLabels = [...]string{
 	"nom",
 	"org",
 	"blogspot",
+	"compute",
 	"biz",
 	"com",
 	"edu",
@@ -10280,6 +10492,7 @@ var nodeLabels = [...]string{
 	"org",
 	"aland",
 	"blogspot",
+	"dy",
 	"iki",
 	"aeroport",
 	"assedic",
@@ -10290,8 +10503,13 @@ var nodeLabels = [...]string{
 	"cci",
 	"chambagri",
 	"chirurgiens-dentistes",
+	"chirurgiens-dentistes-en-france",
 	"com",
 	"experts-comptables",
+	"fbx-os",
+	"fbxos",
+	"freebox-os",
+	"freeboxos",
 	"geometre-expert",
 	"gouv",
 	"greta",
@@ -10493,21 +10711,28 @@ var nodeLabels = [...]string{
 	"res",
 	"barrel-of-knowledge",
 	"barrell-of-knowledge",
+	"dvrcam",
 	"dyndns",
 	"for-our",
 	"groks-the",
 	"groks-this",
 	"here-for-more",
+	"ilovecollege",
 	"knowsitall",
+	"no-ip",
+	"nsupdate",
 	"selfip",
 	"webhop",
 	"eu",
 	"com",
+	"dedyn",
 	"github",
+	"hzc",
 	"ngrok",
 	"nid",
-	"pantheon",
+	"pantheonsite",
 	"sandcats",
+	"spacekit",
 	"com",
 	"edu",
 	"gov",
@@ -11917,7 +12142,6 @@ var nodeLabels = [...]string{
 	"kakuda",
 	"kami",
 	"kawasaki",
-	"kesennuma",
 	"marumori",
 	"matsushima",
 	"minamisanriku",
@@ -12809,7 +13033,10 @@ var nodeLabels = [...]string{
 	"gov",
 	"net",
 	"org",
+	"oy",
 	"blogspot",
+	"cyon",
+	"mypep",
 	"ac",
 	"assn",
 	"com",
@@ -12859,22 +13086,31 @@ var nodeLabels = [...]string{
 	"net",
 	"org",
 	"press",
+	"router",
 	"asso",
 	"tm",
 	"blogspot",
 	"ac",
+	"brasilia",
 	"co",
+	"daplie",
+	"ddns",
 	"diskstation",
+	"dnsfor",
 	"dscloud",
 	"edu",
 	"gov",
+	"hopto",
 	"i234",
 	"its",
+	"loginto",
 	"myds",
 	"net",
+	"noip",
 	"org",
 	"priv",
 	"synology",
+	"webhop",
 	"co",
 	"com",
 	"edu",
@@ -13542,6 +13778,7 @@ var nodeLabels = [...]string{
 	"azure-mobile",
 	"azurewebsites",
 	"blogdns",
+	"bounceme",
 	"broke-it",
 	"buyshouses",
 	"cdn77",
@@ -13549,6 +13786,7 @@ var nodeLabels = [...]string{
 	"cloudapp",
 	"cloudfront",
 	"cloudfunctions",
+	"ddns",
 	"dnsalias",
 	"dnsdojo",
 	"does-it",
@@ -13557,6 +13795,7 @@ var nodeLabels = [...]string{
 	"dynalias",
 	"dynathome",
 	"dynv6",
+	"eating-organic",
 	"endofinternet",
 	"familyds",
 	"fastly",
@@ -13579,15 +13818,29 @@ var nodeLabels = [...]string{
 	"isa-geek",
 	"jp",
 	"kicks-ass",
+	"mydissent",
+	"myeffect",
+	"myfritz",
+	"mymediapc",
+	"mypsx",
+	"mysecuritycamera",
+	"nhlfan",
+	"no-ip",
 	"office-on-the",
+	"pgafan",
 	"podzone",
+	"privatizehealthinsurance",
 	"rackmaze",
+	"redirectme",
 	"scrapper-site",
 	"se",
 	"selfip",
 	"sells-it",
 	"servebbs",
+	"serveblog",
 	"serveftp",
+	"serveminecraft",
+	"sytes",
 	"thruhere",
 	"uk",
 	"webhop",
@@ -13600,6 +13853,7 @@ var nodeLabels = [...]string{
 	"a",
 	"b",
 	"global",
+	"alces",
 	"arts",
 	"com",
 	"firm",
@@ -14445,8 +14699,11 @@ var nodeLabels = [...]string{
 	"blogsite",
 	"bmoattachments",
 	"boldlygoingnowhere",
+	"cable-modem",
 	"cdn77",
 	"cdn77-secure",
+	"collegefan",
+	"couchpotatofries",
 	"dnsalias",
 	"dnsdojo",
 	"doesntexist",
@@ -14470,6 +14727,7 @@ var nodeLabels = [...]string{
 	"homeftp",
 	"homelinux",
 	"homeunix",
+	"hopto",
 	"is-a-bruinsfan",
 	"is-a-candidate",
 	"is-a-celticsfan",
@@ -14490,7 +14748,13 @@ var nodeLabels = [...]string{
 	"isa-geek",
 	"kicks-ass",
 	"misconfused",
+	"mlbfan",
+	"myftp",
+	"mysecuritycamera",
+	"nflfan",
+	"no-ip",
 	"podzone",
+	"read-books",
 	"readmyblog",
 	"selfip",
 	"sellsyourhome",
@@ -14498,9 +14762,12 @@ var nodeLabels = [...]string{
 	"serveftp",
 	"servegame",
 	"stuff-4-sale",
+	"tunk",
+	"ufcfan",
 	"us",
 	"webhop",
 	"za",
+	"zapto",
 	"c",
 	"rsc",
 	"origin",
@@ -14562,6 +14829,7 @@ var nodeLabels = [...]string{
 	"tr",
 	"uk",
 	"us",
+	"nerdpol",
 	"abo",
 	"ac",
 	"com",
@@ -15130,6 +15398,7 @@ var nodeLabels = [...]string{
 	"org",
 	"platform",
 	"blogspot",
+	"cyon",
 	"blogspot",
 	"com",
 	"edu",
@@ -15434,6 +15703,7 @@ var nodeLabels = [...]string{
 	"police",
 	"sch",
 	"blogspot",
+	"no-ip",
 	"service",
 	"ak",
 	"al",
@@ -15449,6 +15719,7 @@ var nodeLabels = [...]string{
 	"fed",
 	"fl",
 	"ga",
+	"golffan",
 	"gu",
 	"hi",
 	"ia",
@@ -15476,6 +15747,7 @@ var nodeLabels = [...]string{
 	"nh",
 	"nj",
 	"nm",
+	"noip",
 	"nsn",
 	"nv",
 	"ny",
@@ -15483,6 +15755,7 @@ var nodeLabels = [...]string{
 	"ok",
 	"or",
 	"pa",
+	"pointto",
 	"pr",
 	"ri",
 	"sc",
@@ -15748,4 +16021,15 @@ var nodeLabels = [...]string{
 	"tm",
 	"web",
 	"blogspot",
+	"ac",
+	"biz",
+	"co",
+	"com",
+	"edu",
+	"gov",
+	"info",
+	"mil",
+	"net",
+	"org",
+	"sch",
 }

Some files were not shown because too many files changed in this diff