diff --git a/Makefile b/Makefile
index be684c1f..b4b173e7 100644
--- a/Makefile
+++ b/Makefile
@@ -106,7 +106,9 @@ go_vendor_dependencies:
$(GOGETTER) github.com/mozilla/masche/memsearch
$(GOGETTER) github.com/mozilla/masche/process
$(GOGETTER) github.com/mozilla/scribe/src/scribe
- $(GOGETTER) github.com/oschwald/geoip2-golang
+ # go 1.5 vendoring and submodules don't work well, so comment this deps out
+ # https://github.com/oschwald/geoip2-golang/issues/13
+ #$(GOGETTER) github.com/oschwald/geoip2-golang
$(GOGETTER) github.com/streadway/amqp
$(GOGETTER) github.com/gorhill/cronexpr
$(GOGETTER) golang.org/x/crypto/openpgp
diff --git a/vendor/github.com/golang/sys/unix/mkerrors.sh b/vendor/github.com/golang/sys/unix/mkerrors.sh
index 77c48048..785855f0 100755
--- a/vendor/github.com/golang/sys/unix/mkerrors.sh
+++ b/vendor/github.com/golang/sys/unix/mkerrors.sh
@@ -12,11 +12,16 @@ export LC_ALL=C
export LC_CTYPE=C
if test -z "$GOARCH" -o -z "$GOOS"; then
- echo 1>&2 "GOARCH or GOOS not defined in environment"
- exit 1
+ echo 1>&2 "GOARCH or GOOS not defined in environment"
+ exit 1
fi
-CC=${CC:-gcc}
+CC=${CC:-cc}
+
+if [[ "$GOOS" -eq "solaris" ]]; then
+ # Assumes GNU versions of utilities in PATH.
+ export PATH=/usr/gnu/bin:$PATH
+fi
uname=$(uname)
@@ -200,6 +205,7 @@ includes_OpenBSD='
'
includes_SunOS='
+#include
#include
#include
#include
@@ -303,6 +309,9 @@ ccflags="$@"
$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ ||
$2 ~ /^SIOC/ ||
$2 ~ /^TIOC/ ||
+ $2 ~ /^TCGET/ ||
+ $2 ~ /^TCSET/ ||
+ $2 ~ /^TC(FLSH|SBRK|XONC)$/ ||
$2 !~ "RTF_BITS" &&
$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||
$2 ~ /^BIOC/ ||
diff --git a/vendor/github.com/golang/sys/unix/mksyscall_solaris.pl b/vendor/github.com/golang/sys/unix/mksyscall_solaris.pl
index f17b6125..06bade76 100755
--- a/vendor/github.com/golang/sys/unix/mksyscall_solaris.pl
+++ b/vendor/github.com/golang/sys/unix/mksyscall_solaris.pl
@@ -110,9 +110,9 @@ while(<>) {
$sysname =~ y/A-Z/a-z/; # All libc functions are lowercase.
# Runtime import of function to allow cross-platform builds.
- $dynimports .= "//go:cgo_import_dynamic ${modname}_${sysname} ${sysname} \"$modname.so\"\n";
+ $dynimports .= "//go:cgo_import_dynamic libc_${sysname} ${sysname} \"$modname.so\"\n";
# Link symbol to proc address variable.
- $linknames .= "//go:linkname ${sysvarname} ${modname}_${sysname}\n";
+ $linknames .= "//go:linkname ${sysvarname} libc_${sysname}\n";
# Library proc address variable.
push @vars, $sysvarname;
diff --git a/vendor/github.com/golang/sys/unix/sockcmsg_unix.go b/vendor/github.com/golang/sys/unix/sockcmsg_unix.go
index 6668bec7..70af5a72 100644
--- a/vendor/github.com/golang/sys/unix/sockcmsg_unix.go
+++ b/vendor/github.com/golang/sys/unix/sockcmsg_unix.go
@@ -77,10 +77,10 @@ func UnixRights(fds ...int) []byte {
h.Level = SOL_SOCKET
h.Type = SCM_RIGHTS
h.SetLen(CmsgLen(datalen))
- data := uintptr(cmsgData(h))
+ data := cmsgData(h)
for _, fd := range fds {
- *(*int32)(unsafe.Pointer(data)) = int32(fd)
- data += 4
+ *(*int32)(data) = int32(fd)
+ data = unsafe.Pointer(uintptr(data) + 4)
}
return b
}
diff --git a/vendor/github.com/golang/sys/unix/syscall_bsd.go b/vendor/github.com/golang/sys/unix/syscall_bsd.go
index 9679dec8..e9671764 100644
--- a/vendor/github.com/golang/sys/unix/syscall_bsd.go
+++ b/vendor/github.com/golang/sys/unix/syscall_bsd.go
@@ -450,16 +450,34 @@ func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err e
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
-func Sysctl(name string) (value string, err error) {
+// sysctlmib translates name to mib number and appends any additional args.
+func sysctlmib(name string, args ...int) ([]_C_int, error) {
// Translate name to mib number.
mib, err := nametomib(name)
+ if err != nil {
+ return nil, err
+ }
+
+ for _, a := range args {
+ mib = append(mib, _C_int(a))
+ }
+
+ return mib, nil
+}
+
+func Sysctl(name string) (string, error) {
+ return SysctlArgs(name)
+}
+
+func SysctlArgs(name string, args ...int) (string, error) {
+ mib, err := sysctlmib(name, args...)
if err != nil {
return "", err
}
// Find size.
n := uintptr(0)
- if err = sysctl(mib, nil, &n, nil, 0); err != nil {
+ if err := sysctl(mib, nil, &n, nil, 0); err != nil {
return "", err
}
if n == 0 {
@@ -468,7 +486,7 @@ func Sysctl(name string) (value string, err error) {
// Read into buffer of that size.
buf := make([]byte, n)
- if err = sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
return "", err
}
@@ -479,17 +497,19 @@ func Sysctl(name string) (value string, err error) {
return string(buf[0:n]), nil
}
-func SysctlUint32(name string) (value uint32, err error) {
- // Translate name to mib number.
- mib, err := nametomib(name)
+func SysctlUint32(name string) (uint32, error) {
+ return SysctlUint32Args(name)
+}
+
+func SysctlUint32Args(name string, args ...int) (uint32, error) {
+ mib, err := sysctlmib(name, args...)
if err != nil {
return 0, err
}
- // Read into buffer of that size.
n := uintptr(4)
buf := make([]byte, 4)
- if err = sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
return 0, err
}
if n != 4 {
@@ -498,6 +518,49 @@ func SysctlUint32(name string) (value uint32, err error) {
return *(*uint32)(unsafe.Pointer(&buf[0])), nil
}
+func SysctlUint64(name string, args ...int) (uint64, error) {
+ mib, err := sysctlmib(name, args...)
+ if err != nil {
+ return 0, err
+ }
+
+ n := uintptr(8)
+ buf := make([]byte, 8)
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ return 0, err
+ }
+ if n != 8 {
+ return 0, EIO
+ }
+ return *(*uint64)(unsafe.Pointer(&buf[0])), nil
+}
+
+func SysctlRaw(name string, args ...int) ([]byte, error) {
+ mib, err := sysctlmib(name, args...)
+ if err != nil {
+ return nil, err
+ }
+
+ // Find size.
+ n := uintptr(0)
+ if err := sysctl(mib, nil, &n, nil, 0); err != nil {
+ return nil, err
+ }
+ if n == 0 {
+ return nil, nil
+ }
+
+ // Read into buffer of that size.
+ buf := make([]byte, n)
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ return nil, err
+ }
+
+ // The actual call may return less than the original reported required
+ // size so ensure we deal with that.
+ return buf[:n], nil
+}
+
//sys utimes(path string, timeval *[2]Timeval) (err error)
func Utimes(path string, tv []Timeval) error {
diff --git a/vendor/github.com/golang/sys/unix/syscall_bsd_test.go b/vendor/github.com/golang/sys/unix/syscall_bsd_test.go
index 55d88430..0bcd741f 100644
--- a/vendor/github.com/golang/sys/unix/syscall_bsd_test.go
+++ b/vendor/github.com/golang/sys/unix/syscall_bsd_test.go
@@ -33,3 +33,10 @@ func TestGetfsstat(t *testing.T) {
}
}
}
+
+func TestSysctlRaw(t *testing.T) {
+ _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid())
+ if err != nil {
+ t.Fatal(err)
+ }
+}
diff --git a/vendor/github.com/golang/sys/unix/syscall_freebsd_test.go b/vendor/github.com/golang/sys/unix/syscall_freebsd_test.go
new file mode 100644
index 00000000..6171a017
--- /dev/null
+++ b/vendor/github.com/golang/sys/unix/syscall_freebsd_test.go
@@ -0,0 +1,20 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build freebsd
+
+package unix_test
+
+import (
+ "testing"
+
+ "golang.org/x/sys/unix"
+)
+
+func TestSysctUint64(t *testing.T) {
+ _, err := unix.SysctlUint64("vm.max_kernel_address")
+ if err != nil {
+ t.Fatal(err)
+ }
+}
diff --git a/vendor/github.com/golang/sys/unix/syscall_linux.go b/vendor/github.com/golang/sys/unix/syscall_linux.go
index 9df71957..d3ee5d2c 100644
--- a/vendor/github.com/golang/sys/unix/syscall_linux.go
+++ b/vendor/github.com/golang/sys/unix/syscall_linux.go
@@ -886,6 +886,7 @@ func Getpgrp() (pid int) {
//sys Pause() (err error)
//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
//sysnb prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) = SYS_PRLIMIT64
+//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
//sys read(fd int, p []byte) (n int, err error)
//sys Removexattr(path string, attr string) (err error)
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
@@ -1022,7 +1023,6 @@ func Munmap(b []byte) (err error) {
// Personality
// Poll
// Ppoll
-// Prctl
// Pselect6
// Ptrace
// Putpmsg
diff --git a/vendor/github.com/golang/sys/unix/syscall_solaris.go b/vendor/github.com/golang/sys/unix/syscall_solaris.go
index ab54718f..00837326 100644
--- a/vendor/github.com/golang/sys/unix/syscall_solaris.go
+++ b/vendor/github.com/golang/sys/unix/syscall_solaris.go
@@ -13,6 +13,7 @@
package unix
import (
+ "sync/atomic"
"syscall"
"unsafe"
)
@@ -138,6 +139,8 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), sl, nil
}
+//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname
+
func Getsockname(fd int) (sa Sockaddr, err error) {
var rsa RawSockaddrAny
var len _Socklen = SizeofSockaddrAny
@@ -147,12 +150,23 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
return anyToSockaddr(&rsa)
}
-// The const provides a compile-time constant so clients
-// can adjust to whether there is a working Getwd and avoid
-// even linking this function into the binary. See ../os/getwd.go.
-const ImplementsGetwd = false
+const ImplementsGetwd = true
-func Getwd() (string, error) { return "", ENOTSUP }
+//sys Getcwd(buf []byte) (n int, err error)
+
+func Getwd() (wd string, err error) {
+ var buf [PathMax]byte
+ // Getcwd will return an error if it failed for any reason.
+ _, err = Getcwd(buf[0:])
+ if err != nil {
+ return "", err
+ }
+ n := clen(buf[:])
+ if n < 1 {
+ return "", EINVAL
+ }
+ return string(buf[:n]), nil
+}
/*
* Wrapped
@@ -163,21 +177,20 @@ func Getwd() (string, error) { return "", ENOTSUP }
func Getgroups() (gids []int, err error) {
n, err := getgroups(0, nil)
- if err != nil {
- return nil, err
- }
- if n == 0 {
- return nil, nil
- }
-
- // Sanity check group count. Max is 16 on BSD.
- if n < 0 || n > 1000 {
+ // Check for error and sanity check group count. Newer versions of
+ // Solaris allow up to 1024 (NGROUPS_MAX).
+ if n < 0 || n > 1024 {
+ if err != nil {
+ return nil, err
+ }
return nil, EINVAL
+ } else if n == 0 {
+ return nil, nil
}
a := make([]_Gid_t, n)
n, err = getgroups(n, &a[0])
- if err != nil {
+ if n == -1 {
return nil, err
}
gids = make([]int, n)
@@ -276,19 +289,38 @@ func Gethostname() (name string, err error) {
return name, err
}
+//sys utimes(path string, times *[2]Timeval) (err error)
+
+func Utimes(path string, tv []Timeval) (err error) {
+ if tv == nil {
+ return utimes(path, nil)
+ }
+ if len(tv) != 2 {
+ return EINVAL
+ }
+ return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
+//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error)
+
func UtimesNano(path string, ts []Timespec) error {
if ts == nil {
- return Utimes(path, nil)
+ return utimensat(AT_FDCWD, path, nil, 0)
}
if len(ts) != 2 {
return EINVAL
}
- var tv [2]Timeval
- for i := 0; i < 2; i++ {
- tv[i].Sec = ts[i].Sec
- tv[i].Usec = ts[i].Nsec / 1000
+ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
+}
+
+func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
+ if ts == nil {
+ return utimensat(dirfd, path, nil, flags)
}
- return Utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+ if len(ts) != 2 {
+ return EINVAL
+ }
+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
}
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
@@ -302,6 +334,35 @@ func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
return nil
}
+//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error)
+
+func Futimesat(dirfd int, path string, tv []Timeval) error {
+ pathp, err := BytePtrFromString(path)
+ if err != nil {
+ return err
+ }
+ if tv == nil {
+ return futimesat(dirfd, pathp, nil)
+ }
+ if len(tv) != 2 {
+ return EINVAL
+ }
+ return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
+// Solaris doesn't have an futimes function because it allows NULL to be
+// specified as the path for futimesat. However, Go doesn't like
+// NULL-style string interfaces, so this simple wrapper is provided.
+func Futimes(fd int, tv []Timeval) error {
+ if tv == nil {
+ return futimesat(fd, nil, nil)
+ }
+ if len(tv) != 2 {
+ return EINVAL
+ }
+ return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_UNIX:
@@ -350,7 +411,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
var rsa RawSockaddrAny
var len _Socklen = SizeofSockaddrAny
nfd, err = accept(fd, &rsa, &len)
- if err != nil {
+ if nfd == -1 {
return
}
sa, err = anyToSockaddr(&rsa)
@@ -361,6 +422,8 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
return
}
+//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.recvmsg
+
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
var msg Msghdr
var rsa RawSockaddrAny
@@ -382,7 +445,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
}
msg.Iov = &iov
msg.Iovlen = 1
- if n, err = recvmsg(fd, &msg, flags); err != nil {
+ if n, err = recvmsg(fd, &msg, flags); n == -1 {
return
}
oobn = int(msg.Accrightslen)
@@ -437,6 +500,67 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
return n, nil
}
+//sys acct(path *byte) (err error)
+
+func Acct(path string) (err error) {
+ if len(path) == 0 {
+ // Assume caller wants to disable accounting.
+ return acct(nil)
+ }
+
+ pathp, err := BytePtrFromString(path)
+ if err != nil {
+ return err
+ }
+ return acct(pathp)
+}
+
+/*
+ * Expose the ioctl function
+ */
+
+//sys ioctl(fd int, req int, arg uintptr) (err error)
+
+func IoctlSetInt(fd int, req int, value int) (err error) {
+ return ioctl(fd, req, uintptr(value))
+}
+
+func IoctlSetWinsize(fd int, req int, value *Winsize) (err error) {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+func IoctlSetTermios(fd int, req int, value *Termios) (err error) {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+func IoctlSetTermio(fd int, req int, value *Termio) (err error) {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+func IoctlGetInt(fd int, req int) (int, error) {
+ var value int
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return value, err
+}
+
+func IoctlGetWinsize(fd int, req int) (*Winsize, error) {
+ var value Winsize
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
+func IoctlGetTermios(fd int, req int) (*Termios, error) {
+ var value Termios
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
+func IoctlGetTermio(fd int, req int) (*Termio, error) {
+ var value Termio
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
/*
* Exposed directly
*/
@@ -447,21 +571,29 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys Chown(path string, uid int, gid int) (err error)
//sys Chroot(path string) (err error)
//sys Close(fd int) (err error)
+//sys Creat(path string, mode uint32) (fd int, err error)
//sys Dup(fd int) (nfd int, err error)
+//sys Dup2(oldfd int, newfd int) (err error)
//sys Exit(code int)
//sys Fchdir(fd int) (err error)
//sys Fchmod(fd int, mode uint32) (err error)
+//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fchown(fd int, uid int, gid int) (err error)
+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
+//sys Fdatasync(fd int) (err error)
//sys Fpathconf(fd int, name int) (val int, err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error)
//sysnb Getgid() (gid int)
//sysnb Getpid() (pid int)
+//sysnb Getpgid(pid int) (pgid int, err error)
+//sysnb Getpgrp() (pgid int, err error)
//sys Geteuid() (euid int)
//sys Getegid() (egid int)
//sys Getppid() (ppid int)
//sys Getpriority(which int, who int) (n int, err error)
//sysnb Getrlimit(which int, lim *Rlimit) (err error)
+//sysnb Getrusage(who int, rusage *Rusage) (err error)
//sysnb Gettimeofday(tv *Timeval) (err error)
//sysnb Getuid() (uid int)
//sys Kill(pid int, signum syscall.Signal) (err error)
@@ -471,20 +603,33 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys Lstat(path string, stat *Stat_t) (err error)
//sys Madvise(b []byte, advice int) (err error)
//sys Mkdir(path string, mode uint32) (err error)
+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
+//sys Mkfifo(path string, mode uint32) (err error)
+//sys Mkfifoat(dirfd int, path string, mode uint32) (err error)
//sys Mknod(path string, mode uint32, dev int) (err error)
+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
+//sys Mlock(b []byte) (err error)
+//sys Mlockall(flags int) (err error)
+//sys Mprotect(b []byte, prot int) (err error)
+//sys Munlock(b []byte) (err error)
+//sys Munlockall() (err error)
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys Open(path string, mode int, perm uint32) (fd int, err error)
+//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
//sys Pathconf(path string, name int) (val int, err error)
+//sys Pause() (err error)
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys read(fd int, p []byte) (n int, err error)
//sys Readlink(path string, buf []byte) (n int, err error)
//sys Rename(from string, to string) (err error)
+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys Rmdir(path string) (err error)
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek
//sysnb Setegid(egid int) (err error)
//sysnb Seteuid(euid int) (err error)
//sysnb Setgid(gid int) (err error)
+//sys Sethostname(p []byte) (err error)
//sysnb Setpgid(pid int, pgid int) (err error)
//sys Setpriority(which int, who int, prio int) (err error)
//sysnb Setregid(rgid int, egid int) (err error)
@@ -496,12 +641,17 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys Stat(path string, stat *Stat_t) (err error)
//sys Symlink(path string, link string) (err error)
//sys Sync() (err error)
+//sysnb Times(tms *Tms) (ticks uintptr, err error)
//sys Truncate(path string, length int64) (err error)
//sys Fsync(fd int) (err error)
//sys Ftruncate(fd int, length int64) (err error)
-//sys Umask(newmask int) (oldmask int)
+//sys Umask(mask int) (oldmask int)
+//sysnb Uname(buf *Utsname) (err error)
+//sys Unmount(target string, flags int) (err error) = libc.umount
//sys Unlink(path string) (err error)
-//sys Utimes(path string, times *[2]Timeval) (err error)
+//sys Unlinkat(dirfd int, path string) (err error)
+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
+//sys Utime(path string, buf *Utimbuf) (err error)
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.bind
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.connect
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
@@ -512,10 +662,8 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys write(fd int, p []byte) (n int, err error)
//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.getsockopt
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername
-//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname
//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom
-//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.recvmsg
func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0)
@@ -548,3 +696,18 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e
func Munmap(b []byte) (err error) {
return mapper.Munmap(b)
}
+
+//sys sysconf(name int) (n int64, err error)
+
+// pageSize caches the value of Getpagesize, since it can't change
+// once the system is booted.
+var pageSize int64 // accessed atomically
+
+func Getpagesize() int {
+ n := atomic.LoadInt64(&pageSize)
+ if n == 0 {
+ n, _ = sysconf(_SC_PAGESIZE)
+ atomic.StoreInt64(&pageSize, n)
+ }
+ return int(n)
+}
diff --git a/vendor/github.com/golang/sys/unix/syscall_solaris_amd64.go b/vendor/github.com/golang/sys/unix/syscall_solaris_amd64.go
index 9c173cd5..2e44630c 100644
--- a/vendor/github.com/golang/sys/unix/syscall_solaris_amd64.go
+++ b/vendor/github.com/golang/sys/unix/syscall_solaris_amd64.go
@@ -6,8 +6,6 @@
package unix
-func Getpagesize() int { return 4096 }
-
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
func NsecToTimespec(nsec int64) (ts Timespec) {
diff --git a/vendor/github.com/golang/sys/unix/types_solaris.go b/vendor/github.com/golang/sys/unix/types_solaris.go
index 753c7996..6ad50eab 100644
--- a/vendor/github.com/golang/sys/unix/types_solaris.go
+++ b/vendor/github.com/golang/sys/unix/types_solaris.go
@@ -15,10 +15,17 @@ package unix
/*
#define KERNEL
+// These defines ensure that builds done on newer versions of Solaris are
+// backwards-compatible with older versions of Solaris and
+// OpenSolaris-based derivatives.
+#define __USE_SUNOS_SOCKETS__ // msghdr
+#define __USE_LEGACY_PROTOTYPES__ // iovec
#include
#include
+#include
#include
#include
+#include
#include
#include
#include
@@ -30,7 +37,9 @@ package unix
#include
#include
#include
+#include
#include
+#include
#include
#include
#include
@@ -40,6 +49,8 @@ package unix
#include
#include
#include
+#include
+#include
enum {
sizeofPtr = sizeof(void*),
@@ -69,6 +80,7 @@ const (
sizeofInt = C.sizeof_int
sizeofLong = C.sizeof_long
sizeofLongLong = C.sizeof_longlong
+ PathMax = C.PATH_MAX
)
// Basic types
@@ -88,6 +100,10 @@ type Timeval C.struct_timeval
type Timeval32 C.struct_timeval32
+type Tms C.struct_tms
+
+type Utimbuf C.struct_utimbuf
+
// Processes
type Rusage C.struct_rusage
@@ -175,6 +191,20 @@ const (
type FdSet C.fd_set
+// Misc
+
+type Utsname C.struct_utsname
+
+type Ustat_t C.struct_ustat
+
+const (
+ AT_FDCWD = C.AT_FDCWD
+ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
+ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
+ AT_REMOVEDIR = C.AT_REMOVEDIR
+ AT_EACCESS = C.AT_EACCESS
+)
+
// Routing and interface messages
const (
@@ -217,6 +247,14 @@ type BpfTimeval C.struct_bpf_timeval
type BpfHdr C.struct_bpf_hdr
+// sysconf information
+
+const _SC_PAGESIZE = C._SC_PAGESIZE
+
// Terminal handling
type Termios C.struct_termios
+
+type Termio C.struct_termio
+
+type Winsize C.struct_winsize
diff --git a/vendor/github.com/golang/sys/unix/zerrors_freebsd_386.go b/vendor/github.com/golang/sys/unix/zerrors_freebsd_386.go
index 3c2a5bfc..7b95751c 100644
--- a/vendor/github.com/golang/sys/unix/zerrors_freebsd_386.go
+++ b/vendor/github.com/golang/sys/unix/zerrors_freebsd_386.go
@@ -225,6 +225,20 @@ const (
BRKINT = 0x2
CFLUSH = 0xf
CLOCAL = 0x8000
+ CLOCK_MONOTONIC = 0x4
+ CLOCK_MONOTONIC_FAST = 0xc
+ CLOCK_MONOTONIC_PRECISE = 0xb
+ CLOCK_PROCESS_CPUTIME_ID = 0xf
+ CLOCK_PROF = 0x2
+ CLOCK_REALTIME = 0x0
+ CLOCK_REALTIME_FAST = 0xa
+ CLOCK_REALTIME_PRECISE = 0x9
+ CLOCK_SECOND = 0xd
+ CLOCK_THREAD_CPUTIME_ID = 0xe
+ CLOCK_UPTIME = 0x5
+ CLOCK_UPTIME_FAST = 0x8
+ CLOCK_UPTIME_PRECISE = 0x7
+ CLOCK_VIRTUAL = 0x1
CREAD = 0x800
CS5 = 0x0
CS6 = 0x100
diff --git a/vendor/github.com/golang/sys/unix/zerrors_freebsd_amd64.go b/vendor/github.com/golang/sys/unix/zerrors_freebsd_amd64.go
index 3b3f7a9d..e48e7799 100644
--- a/vendor/github.com/golang/sys/unix/zerrors_freebsd_amd64.go
+++ b/vendor/github.com/golang/sys/unix/zerrors_freebsd_amd64.go
@@ -225,6 +225,20 @@ const (
BRKINT = 0x2
CFLUSH = 0xf
CLOCAL = 0x8000
+ CLOCK_MONOTONIC = 0x4
+ CLOCK_MONOTONIC_FAST = 0xc
+ CLOCK_MONOTONIC_PRECISE = 0xb
+ CLOCK_PROCESS_CPUTIME_ID = 0xf
+ CLOCK_PROF = 0x2
+ CLOCK_REALTIME = 0x0
+ CLOCK_REALTIME_FAST = 0xa
+ CLOCK_REALTIME_PRECISE = 0x9
+ CLOCK_SECOND = 0xd
+ CLOCK_THREAD_CPUTIME_ID = 0xe
+ CLOCK_UPTIME = 0x5
+ CLOCK_UPTIME_FAST = 0x8
+ CLOCK_UPTIME_PRECISE = 0x7
+ CLOCK_VIRTUAL = 0x1
CREAD = 0x800
CS5 = 0x0
CS6 = 0x100
diff --git a/vendor/github.com/golang/sys/unix/zerrors_solaris_amd64.go b/vendor/github.com/golang/sys/unix/zerrors_solaris_amd64.go
index afdf7c56..a08922b9 100644
--- a/vendor/github.com/golang/sys/unix/zerrors_solaris_amd64.go
+++ b/vendor/github.com/golang/sys/unix/zerrors_solaris_amd64.go
@@ -161,6 +161,14 @@ const (
BRKINT = 0x2
CFLUSH = 0xf
CLOCAL = 0x800
+ CLOCK_HIGHRES = 0x4
+ CLOCK_LEVEL = 0xa
+ CLOCK_MONOTONIC = 0x4
+ CLOCK_PROCESS_CPUTIME_ID = 0x5
+ CLOCK_PROF = 0x2
+ CLOCK_REALTIME = 0x3
+ CLOCK_THREAD_CPUTIME_ID = 0x2
+ CLOCK_VIRTUAL = 0x1
CREAD = 0x80
CS5 = 0x0
CS6 = 0x10
@@ -168,6 +176,7 @@ const (
CS8 = 0x30
CSIZE = 0x30
CSTART = 0x11
+ CSTATUS = 0x14
CSTOP = 0x13
CSTOPB = 0x40
CSUSP = 0x1a
@@ -757,9 +766,7 @@ const (
SIOCDARP = -0x7fdb96e0
SIOCDELMULTI = -0x7fdf96ce
SIOCDELRT = -0x7fcf8df5
- SIOCDIPSECONFIG = -0x7ffb9669
SIOCDXARP = -0x7fff9658
- SIOCFIPSECONFIG = -0x7ffb966b
SIOCGARP = -0x3fdb96e1
SIOCGDSTINFO = -0x3fff965c
SIOCGENADDR = -0x3fdf96ab
@@ -821,7 +828,6 @@ const (
SIOCLIFGETND = -0x3f879672
SIOCLIFREMOVEIF = -0x7f879692
SIOCLIFSETND = -0x7f879671
- SIOCLIPSECONFIG = -0x7ffb9668
SIOCLOWER = -0x7fdf96d7
SIOCSARP = -0x7fdb96e2
SIOCSCTPGOPT = -0x3fef9653
@@ -844,7 +850,6 @@ const (
SIOCSIFNETMASK = -0x7fdf96e6
SIOCSIP6ADDRPOLICY = -0x7fff965d
SIOCSIPMSFILTER = -0x7ffb964b
- SIOCSIPSECONFIG = -0x7ffb966a
SIOCSLGETREQ = -0x3fdf96b9
SIOCSLIFADDR = -0x7f879690
SIOCSLIFBRDADDR = -0x7f879684
@@ -951,6 +956,8 @@ const (
SO_VRRP = 0x1017
SO_WROFF = 0x2
TCFLSH = 0x5407
+ TCGETA = 0x5401
+ TCGETS = 0x540d
TCIFLUSH = 0x0
TCIOFLUSH = 0x2
TCOFLUSH = 0x1
@@ -977,6 +984,14 @@ const (
TCP_RTO_MAX = 0x1b
TCP_RTO_MIN = 0x1a
TCSAFLUSH = 0x5410
+ TCSBRK = 0x5405
+ TCSETA = 0x5402
+ TCSETAF = 0x5404
+ TCSETAW = 0x5403
+ TCSETS = 0x540e
+ TCSETSF = 0x5410
+ TCSETSW = 0x540f
+ TCXONC = 0x5406
TIOC = 0x5400
TIOCCBRK = 0x747a
TIOCCDTR = 0x7478
@@ -1052,6 +1067,7 @@ const (
VQUIT = 0x1
VREPRINT = 0xc
VSTART = 0x8
+ VSTATUS = 0x10
VSTOP = 0x9
VSUSP = 0xa
VSWTCH = 0x7
@@ -1215,6 +1231,7 @@ const (
SIGFREEZE = syscall.Signal(0x22)
SIGHUP = syscall.Signal(0x1)
SIGILL = syscall.Signal(0x4)
+ SIGINFO = syscall.Signal(0x29)
SIGINT = syscall.Signal(0x2)
SIGIO = syscall.Signal(0x16)
SIGIOT = syscall.Signal(0x6)
@@ -1415,4 +1432,5 @@ var signals = [...]string{
38: "resource Control Exceeded",
39: "reserved for JVM 1",
40: "reserved for JVM 2",
+ 41: "information Request",
}
diff --git a/vendor/github.com/golang/sys/unix/zsyscall_linux_386.go b/vendor/github.com/golang/sys/unix/zsyscall_linux_386.go
index 81ae498a..ff6c39dc 100644
--- a/vendor/github.com/golang/sys/unix/zsyscall_linux_386.go
+++ b/vendor/github.com/golang/sys/unix/zsyscall_linux_386.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/github.com/golang/sys/unix/zsyscall_linux_amd64.go b/vendor/github.com/golang/sys/unix/zsyscall_linux_amd64.go
index 2adb9284..c2438522 100644
--- a/vendor/github.com/golang/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/github.com/golang/sys/unix/zsyscall_linux_amd64.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/github.com/golang/sys/unix/zsyscall_linux_arm.go b/vendor/github.com/golang/sys/unix/zsyscall_linux_arm.go
index ca00ed3d..dd66c975 100644
--- a/vendor/github.com/golang/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/github.com/golang/sys/unix/zsyscall_linux_arm.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/github.com/golang/sys/unix/zsyscall_linux_arm64.go b/vendor/github.com/golang/sys/unix/zsyscall_linux_arm64.go
index 8eafcebc..d0a6ed82 100644
--- a/vendor/github.com/golang/sys/unix/zsyscall_linux_arm64.go
+++ b/vendor/github.com/golang/sys/unix/zsyscall_linux_arm64.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64.go b/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64.go
index 008a5263..f58a3ff2 100644
--- a/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64le.go b/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64le.go
index d91f763a..22fc7a45 100644
--- a/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/github.com/golang/sys/unix/zsyscall_linux_ppc64le.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/github.com/golang/sys/unix/zsyscall_solaris_amd64.go b/vendor/github.com/golang/sys/unix/zsyscall_solaris_amd64.go
index 95cb1f65..8d2a8365 100644
--- a/vendor/github.com/golang/sys/unix/zsyscall_solaris_amd64.go
+++ b/vendor/github.com/golang/sys/unix/zsyscall_solaris_amd64.go
@@ -10,11 +10,19 @@ import (
"unsafe"
)
+//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so"
+//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"
//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"
//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"
+//go:cgo_import_dynamic libc_utimes utimes "libc.so"
+//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
-//go:cgo_import_dynamic libsocket_accept accept "libsocket.so"
-//go:cgo_import_dynamic libsocket_sendmsg sendmsg "libsocket.so"
+//go:cgo_import_dynamic libc_futimesat futimesat "libc.so"
+//go:cgo_import_dynamic libc_accept accept "libsocket.so"
+//go:cgo_import_dynamic libc_recvmsg recvmsg "libsocket.so"
+//go:cgo_import_dynamic libc_sendmsg sendmsg "libsocket.so"
+//go:cgo_import_dynamic libc_acct acct "libc.so"
+//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
//go:cgo_import_dynamic libc_access access "libc.so"
//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"
//go:cgo_import_dynamic libc_chdir chdir "libc.so"
@@ -22,44 +30,65 @@ import (
//go:cgo_import_dynamic libc_chown chown "libc.so"
//go:cgo_import_dynamic libc_chroot chroot "libc.so"
//go:cgo_import_dynamic libc_close close "libc.so"
+//go:cgo_import_dynamic libc_creat creat "libc.so"
//go:cgo_import_dynamic libc_dup dup "libc.so"
+//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"
//go:cgo_import_dynamic libc_exit exit "libc.so"
//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"
//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"
+//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"
//go:cgo_import_dynamic libc_fchown fchown "libc.so"
+//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"
+//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so"
//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"
//go:cgo_import_dynamic libc_fstat fstat "libc.so"
//go:cgo_import_dynamic libc_getdents getdents "libc.so"
//go:cgo_import_dynamic libc_getgid getgid "libc.so"
//go:cgo_import_dynamic libc_getpid getpid "libc.so"
+//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"
+//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"
//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"
//go:cgo_import_dynamic libc_getegid getegid "libc.so"
//go:cgo_import_dynamic libc_getppid getppid "libc.so"
//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"
//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"
+//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"
//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"
//go:cgo_import_dynamic libc_getuid getuid "libc.so"
//go:cgo_import_dynamic libc_kill kill "libc.so"
//go:cgo_import_dynamic libc_lchown lchown "libc.so"
//go:cgo_import_dynamic libc_link link "libc.so"
-//go:cgo_import_dynamic libsocket_listen listen "libsocket.so"
+//go:cgo_import_dynamic libc_listen listen "libsocket.so"
//go:cgo_import_dynamic libc_lstat lstat "libc.so"
//go:cgo_import_dynamic libc_madvise madvise "libc.so"
//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
+//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"
+//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"
+//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"
//go:cgo_import_dynamic libc_mknod mknod "libc.so"
+//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"
+//go:cgo_import_dynamic libc_mlock mlock "libc.so"
+//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"
+//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"
+//go:cgo_import_dynamic libc_munlock munlock "libc.so"
+//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"
//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"
//go:cgo_import_dynamic libc_open open "libc.so"
+//go:cgo_import_dynamic libc_openat openat "libc.so"
//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"
+//go:cgo_import_dynamic libc_pause pause "libc.so"
//go:cgo_import_dynamic libc_pread pread "libc.so"
//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"
//go:cgo_import_dynamic libc_read read "libc.so"
//go:cgo_import_dynamic libc_readlink readlink "libc.so"
//go:cgo_import_dynamic libc_rename rename "libc.so"
+//go:cgo_import_dynamic libc_renameat renameat "libc.so"
//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"
//go:cgo_import_dynamic libc_lseek lseek "libc.so"
//go:cgo_import_dynamic libc_setegid setegid "libc.so"
//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"
//go:cgo_import_dynamic libc_setgid setgid "libc.so"
+//go:cgo_import_dynamic libc_sethostname sethostname "libc.so"
//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"
//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"
//go:cgo_import_dynamic libc_setregid setregid "libc.so"
@@ -67,36 +96,48 @@ import (
//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so"
//go:cgo_import_dynamic libc_setsid setsid "libc.so"
//go:cgo_import_dynamic libc_setuid setuid "libc.so"
-//go:cgo_import_dynamic libsocket_shutdown shutdown "libsocket.so"
+//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so"
//go:cgo_import_dynamic libc_stat stat "libc.so"
//go:cgo_import_dynamic libc_symlink symlink "libc.so"
//go:cgo_import_dynamic libc_sync sync "libc.so"
+//go:cgo_import_dynamic libc_times times "libc.so"
//go:cgo_import_dynamic libc_truncate truncate "libc.so"
//go:cgo_import_dynamic libc_fsync fsync "libc.so"
//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"
//go:cgo_import_dynamic libc_umask umask "libc.so"
+//go:cgo_import_dynamic libc_uname uname "libc.so"
+//go:cgo_import_dynamic libc_umount umount "libc.so"
//go:cgo_import_dynamic libc_unlink unlink "libc.so"
-//go:cgo_import_dynamic libc_utimes utimes "libc.so"
-//go:cgo_import_dynamic libsocket_bind bind "libsocket.so"
-//go:cgo_import_dynamic libsocket_connect connect "libsocket.so"
+//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"
+//go:cgo_import_dynamic libc_ustat ustat "libc.so"
+//go:cgo_import_dynamic libc_utime utime "libc.so"
+//go:cgo_import_dynamic libc_bind bind "libsocket.so"
+//go:cgo_import_dynamic libc_connect connect "libsocket.so"
//go:cgo_import_dynamic libc_mmap mmap "libc.so"
//go:cgo_import_dynamic libc_munmap munmap "libc.so"
-//go:cgo_import_dynamic libsocket_sendto sendto "libsocket.so"
-//go:cgo_import_dynamic libsocket_socket socket "libsocket.so"
-//go:cgo_import_dynamic libsocket_socketpair socketpair "libsocket.so"
+//go:cgo_import_dynamic libc_sendto sendto "libsocket.so"
+//go:cgo_import_dynamic libc_socket socket "libsocket.so"
+//go:cgo_import_dynamic libc_socketpair socketpair "libsocket.so"
//go:cgo_import_dynamic libc_write write "libc.so"
-//go:cgo_import_dynamic libsocket_getsockopt getsockopt "libsocket.so"
-//go:cgo_import_dynamic libsocket_getpeername getpeername "libsocket.so"
-//go:cgo_import_dynamic libsocket_getsockname getsockname "libsocket.so"
-//go:cgo_import_dynamic libsocket_setsockopt setsockopt "libsocket.so"
-//go:cgo_import_dynamic libsocket_recvfrom recvfrom "libsocket.so"
-//go:cgo_import_dynamic libsocket_recvmsg recvmsg "libsocket.so"
+//go:cgo_import_dynamic libc_getsockopt getsockopt "libsocket.so"
+//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
+//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
+//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
+//go:cgo_import_dynamic libc_sysconf sysconf "libc.so"
+//go:linkname procgetsockname libc_getsockname
+//go:linkname procGetcwd libc_getcwd
//go:linkname procgetgroups libc_getgroups
//go:linkname procsetgroups libc_setgroups
+//go:linkname procutimes libc_utimes
+//go:linkname procutimensat libc_utimensat
//go:linkname procfcntl libc_fcntl
-//go:linkname procaccept libsocket_accept
-//go:linkname procsendmsg libsocket_sendmsg
+//go:linkname procfutimesat libc_futimesat
+//go:linkname procaccept libc_accept
+//go:linkname procrecvmsg libc_recvmsg
+//go:linkname procsendmsg libc_sendmsg
+//go:linkname procacct libc_acct
+//go:linkname procioctl libc_ioctl
//go:linkname procAccess libc_access
//go:linkname procAdjtime libc_adjtime
//go:linkname procChdir libc_chdir
@@ -104,44 +145,65 @@ import (
//go:linkname procChown libc_chown
//go:linkname procChroot libc_chroot
//go:linkname procClose libc_close
+//go:linkname procCreat libc_creat
//go:linkname procDup libc_dup
+//go:linkname procDup2 libc_dup2
//go:linkname procExit libc_exit
//go:linkname procFchdir libc_fchdir
//go:linkname procFchmod libc_fchmod
+//go:linkname procFchmodat libc_fchmodat
//go:linkname procFchown libc_fchown
+//go:linkname procFchownat libc_fchownat
+//go:linkname procFdatasync libc_fdatasync
//go:linkname procFpathconf libc_fpathconf
//go:linkname procFstat libc_fstat
//go:linkname procGetdents libc_getdents
//go:linkname procGetgid libc_getgid
//go:linkname procGetpid libc_getpid
+//go:linkname procGetpgid libc_getpgid
+//go:linkname procGetpgrp libc_getpgrp
//go:linkname procGeteuid libc_geteuid
//go:linkname procGetegid libc_getegid
//go:linkname procGetppid libc_getppid
//go:linkname procGetpriority libc_getpriority
//go:linkname procGetrlimit libc_getrlimit
+//go:linkname procGetrusage libc_getrusage
//go:linkname procGettimeofday libc_gettimeofday
//go:linkname procGetuid libc_getuid
//go:linkname procKill libc_kill
//go:linkname procLchown libc_lchown
//go:linkname procLink libc_link
-//go:linkname proclisten libsocket_listen
+//go:linkname proclisten libc_listen
//go:linkname procLstat libc_lstat
//go:linkname procMadvise libc_madvise
//go:linkname procMkdir libc_mkdir
+//go:linkname procMkdirat libc_mkdirat
+//go:linkname procMkfifo libc_mkfifo
+//go:linkname procMkfifoat libc_mkfifoat
//go:linkname procMknod libc_mknod
+//go:linkname procMknodat libc_mknodat
+//go:linkname procMlock libc_mlock
+//go:linkname procMlockall libc_mlockall
+//go:linkname procMprotect libc_mprotect
+//go:linkname procMunlock libc_munlock
+//go:linkname procMunlockall libc_munlockall
//go:linkname procNanosleep libc_nanosleep
//go:linkname procOpen libc_open
+//go:linkname procOpenat libc_openat
//go:linkname procPathconf libc_pathconf
+//go:linkname procPause libc_pause
//go:linkname procPread libc_pread
//go:linkname procPwrite libc_pwrite
//go:linkname procread libc_read
//go:linkname procReadlink libc_readlink
//go:linkname procRename libc_rename
+//go:linkname procRenameat libc_renameat
//go:linkname procRmdir libc_rmdir
//go:linkname proclseek libc_lseek
//go:linkname procSetegid libc_setegid
//go:linkname procSeteuid libc_seteuid
//go:linkname procSetgid libc_setgid
+//go:linkname procSethostname libc_sethostname
//go:linkname procSetpgid libc_setpgid
//go:linkname procSetpriority libc_setpriority
//go:linkname procSetregid libc_setregid
@@ -149,37 +211,49 @@ import (
//go:linkname procSetrlimit libc_setrlimit
//go:linkname procSetsid libc_setsid
//go:linkname procSetuid libc_setuid
-//go:linkname procshutdown libsocket_shutdown
+//go:linkname procshutdown libc_shutdown
//go:linkname procStat libc_stat
//go:linkname procSymlink libc_symlink
//go:linkname procSync libc_sync
+//go:linkname procTimes libc_times
//go:linkname procTruncate libc_truncate
//go:linkname procFsync libc_fsync
//go:linkname procFtruncate libc_ftruncate
//go:linkname procUmask libc_umask
+//go:linkname procUname libc_uname
+//go:linkname procumount libc_umount
//go:linkname procUnlink libc_unlink
-//go:linkname procUtimes libc_utimes
-//go:linkname procbind libsocket_bind
-//go:linkname procconnect libsocket_connect
+//go:linkname procUnlinkat libc_unlinkat
+//go:linkname procUstat libc_ustat
+//go:linkname procUtime libc_utime
+//go:linkname procbind libc_bind
+//go:linkname procconnect libc_connect
//go:linkname procmmap libc_mmap
//go:linkname procmunmap libc_munmap
-//go:linkname procsendto libsocket_sendto
-//go:linkname procsocket libsocket_socket
-//go:linkname procsocketpair libsocket_socketpair
+//go:linkname procsendto libc_sendto
+//go:linkname procsocket libc_socket
+//go:linkname procsocketpair libc_socketpair
//go:linkname procwrite libc_write
-//go:linkname procgetsockopt libsocket_getsockopt
-//go:linkname procgetpeername libsocket_getpeername
-//go:linkname procgetsockname libsocket_getsockname
-//go:linkname procsetsockopt libsocket_setsockopt
-//go:linkname procrecvfrom libsocket_recvfrom
-//go:linkname procrecvmsg libsocket_recvmsg
+//go:linkname procgetsockopt libc_getsockopt
+//go:linkname procgetpeername libc_getpeername
+//go:linkname procsetsockopt libc_setsockopt
+//go:linkname procrecvfrom libc_recvfrom
+//go:linkname procsysconf libc_sysconf
var (
+ procgetsockname,
+ procGetcwd,
procgetgroups,
procsetgroups,
+ procutimes,
+ procutimensat,
procfcntl,
+ procfutimesat,
procaccept,
+ procrecvmsg,
procsendmsg,
+ procacct,
+ procioctl,
procAccess,
procAdjtime,
procChdir,
@@ -187,21 +261,29 @@ var (
procChown,
procChroot,
procClose,
+ procCreat,
procDup,
+ procDup2,
procExit,
procFchdir,
procFchmod,
+ procFchmodat,
procFchown,
+ procFchownat,
+ procFdatasync,
procFpathconf,
procFstat,
procGetdents,
procGetgid,
procGetpid,
+ procGetpgid,
+ procGetpgrp,
procGeteuid,
procGetegid,
procGetppid,
procGetpriority,
procGetrlimit,
+ procGetrusage,
procGettimeofday,
procGetuid,
procKill,
@@ -211,20 +293,33 @@ var (
procLstat,
procMadvise,
procMkdir,
+ procMkdirat,
+ procMkfifo,
+ procMkfifoat,
procMknod,
+ procMknodat,
+ procMlock,
+ procMlockall,
+ procMprotect,
+ procMunlock,
+ procMunlockall,
procNanosleep,
procOpen,
+ procOpenat,
procPathconf,
+ procPause,
procPread,
procPwrite,
procread,
procReadlink,
procRename,
+ procRenameat,
procRmdir,
proclseek,
procSetegid,
procSeteuid,
procSetgid,
+ procSethostname,
procSetpgid,
procSetpriority,
procSetregid,
@@ -236,12 +331,17 @@ var (
procStat,
procSymlink,
procSync,
+ procTimes,
procTruncate,
procFsync,
procFtruncate,
procUmask,
+ procUname,
+ procumount,
procUnlink,
- procUtimes,
+ procUnlinkat,
+ procUstat,
+ procUtime,
procbind,
procconnect,
procmmap,
@@ -252,12 +352,32 @@ var (
procwrite,
procgetsockopt,
procgetpeername,
- procgetsockname,
procsetsockopt,
procrecvfrom,
- procrecvmsg syscallFunc
+ procsysconf syscallFunc
)
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Getcwd(buf []byte) (n int, err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
n = int(r0)
@@ -275,6 +395,34 @@ func setgroups(ngid int, gid *_Gid_t) (err error) {
return
}
+func utimes(path string, times *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func fcntl(fd int, cmd int, arg int) (val int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
val = int(r0)
@@ -284,6 +432,14 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
return
}
+func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
fd = int(r0)
@@ -293,6 +449,15 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
return
}
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
n = int(r0)
@@ -302,6 +467,22 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func acct(path *byte) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func ioctl(fd int, req int, arg uintptr) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -388,6 +569,21 @@ func Close(fd int) (err error) {
return
}
+func Creat(path string, mode uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ fd = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Dup(fd int) (nfd int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)
nfd = int(r0)
@@ -397,6 +593,14 @@ func Dup(fd int) (nfd int, err error) {
return
}
+func Dup2(oldfd int, newfd int) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Exit(code int) {
sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)
return
@@ -418,6 +622,20 @@ func Fchmod(fd int, mode uint32) (err error) {
return
}
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Fchown(fd int, uid int, gid int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
if e1 != 0 {
@@ -426,6 +644,28 @@ func Fchown(fd int, uid int, gid int) (err error) {
return
}
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Fdatasync(fd int) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Fpathconf(fd int, name int) (val int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)
val = int(r0)
@@ -468,6 +708,24 @@ func Getpid() (pid int) {
return
}
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Getpgrp() (pgid int, err error) {
+ r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Geteuid() (euid int) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)
euid = int(r0)
@@ -503,6 +761,14 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
return
}
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Gettimeofday(tv *Timeval) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -607,6 +873,48 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -621,6 +929,72 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Munlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Munlockall() (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)
if e1 != 0 {
@@ -644,6 +1018,21 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
+func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
+ use(unsafe.Pointer(_p0))
+ fd = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -659,6 +1048,14 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
+func Pause() (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Pread(fd int, p []byte, offset int64) (n int, err error) {
var _p0 *byte
if len(p) > 0 {
@@ -737,6 +1134,26 @@ func Rename(from string, to string) (err error) {
return
}
+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ use(unsafe.Pointer(_p0))
+ use(unsafe.Pointer(_p1))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Rmdir(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -784,6 +1201,18 @@ func Setgid(gid int) (err error) {
return
}
+func Sethostname(p []byte) (err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Setpgid(pid int, pgid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
if e1 != 0 {
@@ -891,6 +1320,15 @@ func Sync() (err error) {
return
}
+func Times(tms *Tms) (ticks uintptr, err error) {
+ r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)
+ ticks = uintptr(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Truncate(path string, length int64) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -921,12 +1359,34 @@ func Ftruncate(fd int, length int64) (err error) {
return
}
-func Umask(newmask int) (oldmask int) {
- r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(newmask), 0, 0, 0, 0, 0)
+func Umask(mask int) (oldmask int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
oldmask = int(r0)
return
}
+func Uname(buf *Utsname) (err error) {
+ _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Unmount(target string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(target)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Unlink(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -941,13 +1401,35 @@ func Unlink(path string) (err error) {
return
}
-func Utimes(path string, times *[2]Timeval) (err error) {
+func Unlinkat(dirfd int, path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
return
}
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Ustat(dev int, ubuf *Ustat_t) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Utime(path string, buf *Utimbuf) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0)
use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
@@ -1046,14 +1528,6 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
return
}
-func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
- if e1 != 0 {
- err = e1
- }
- return
-}
-
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
if e1 != 0 {
@@ -1075,9 +1549,9 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
return
}
-func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
- n = int(r0)
+func sysconf(name int) (n int64, err error) {
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsysconf)), 1, uintptr(name), 0, 0, 0, 0, 0)
+ n = int64(r0)
if e1 != 0 {
err = e1
}
diff --git a/vendor/github.com/golang/sys/unix/ztypes_freebsd_386.go b/vendor/github.com/golang/sys/unix/ztypes_freebsd_386.go
index 330c0e63..8cf30947 100644
--- a/vendor/github.com/golang/sys/unix/ztypes_freebsd_386.go
+++ b/vendor/github.com/golang/sys/unix/ztypes_freebsd_386.go
@@ -1,8 +1,7 @@
+// +build 386,freebsd
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go
-// +build 386,freebsd
-
package unix
const (
@@ -140,6 +139,15 @@ type Fsid struct {
Val [2]int32
}
+const (
+ FADV_NORMAL = 0x0
+ FADV_RANDOM = 0x1
+ FADV_SEQUENTIAL = 0x2
+ FADV_WILLNEED = 0x3
+ FADV_DONTNEED = 0x4
+ FADV_NOREUSE = 0x5
+)
+
type RawSockaddrInet4 struct {
Len uint8
Family uint8
diff --git a/vendor/github.com/golang/sys/unix/ztypes_freebsd_amd64.go b/vendor/github.com/golang/sys/unix/ztypes_freebsd_amd64.go
index 93395924..e5feb207 100644
--- a/vendor/github.com/golang/sys/unix/ztypes_freebsd_amd64.go
+++ b/vendor/github.com/golang/sys/unix/ztypes_freebsd_amd64.go
@@ -1,8 +1,7 @@
+// +build amd64,freebsd
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go
-// +build amd64,freebsd
-
package unix
const (
@@ -140,6 +139,15 @@ type Fsid struct {
Val [2]int32
}
+const (
+ FADV_NORMAL = 0x0
+ FADV_RANDOM = 0x1
+ FADV_SEQUENTIAL = 0x2
+ FADV_WILLNEED = 0x3
+ FADV_DONTNEED = 0x4
+ FADV_NOREUSE = 0x5
+)
+
type RawSockaddrInet4 struct {
Len uint8
Family uint8
diff --git a/vendor/github.com/golang/sys/unix/ztypes_solaris_amd64.go b/vendor/github.com/golang/sys/unix/ztypes_solaris_amd64.go
index 45e9f422..b3b928a5 100644
--- a/vendor/github.com/golang/sys/unix/ztypes_solaris_amd64.go
+++ b/vendor/github.com/golang/sys/unix/ztypes_solaris_amd64.go
@@ -1,8 +1,7 @@
+// +build amd64,solaris
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_solaris.go
-// +build amd64,solaris
-
package unix
const (
@@ -11,6 +10,7 @@ const (
sizeofInt = 0x4
sizeofLong = 0x8
sizeofLongLong = 0x8
+ PathMax = 0x400
)
type (
@@ -35,6 +35,18 @@ type Timeval32 struct {
Usec int32
}
+type Tms struct {
+ Utime int64
+ Stime int64
+ Cutime int64
+ Cstime int64
+}
+
+type Utimbuf struct {
+ Actime int64
+ Modtime int64
+}
+
type Rusage struct {
Utime Timeval
Stime Timeval
@@ -230,6 +242,30 @@ type FdSet struct {
Bits [1024]int64
}
+type Utsname struct {
+ Sysname [257]int8
+ Nodename [257]int8
+ Release [257]int8
+ Version [257]int8
+ Machine [257]int8
+}
+
+type Ustat_t struct {
+ Tfree int64
+ Tinode uint64
+ Fname [6]int8
+ Fpack [6]int8
+ Pad_cgo_0 [4]byte
+}
+
+const (
+ AT_FDCWD = 0xffd19553
+ AT_SYMLINK_NOFOLLOW = 0x1000
+ AT_SYMLINK_FOLLOW = 0x2000
+ AT_REMOVEDIR = 0x1
+ AT_EACCESS = 0x4
+)
+
const (
SizeofIfMsghdr = 0x54
SizeofIfData = 0x44
@@ -357,6 +393,8 @@ type BpfHdr struct {
Pad_cgo_0 [2]byte
}
+const _SC_PAGESIZE = 0xb
+
type Termios struct {
Iflag uint32
Oflag uint32
@@ -365,3 +403,20 @@ type Termios struct {
Cc [19]uint8
Pad_cgo_0 [1]byte
}
+
+type Termio struct {
+ Iflag uint16
+ Oflag uint16
+ Cflag uint16
+ Lflag uint16
+ Line int8
+ Cc [8]uint8
+ Pad_cgo_0 [1]byte
+}
+
+type Winsize struct {
+ Row uint16
+ Col uint16
+ Xpixel uint16
+ Ypixel uint16
+}
diff --git a/vendor/github.com/gorilla/mux/.travis.yml b/vendor/github.com/gorilla/mux/.travis.yml
index f983b60c..83ab8f59 100644
--- a/vendor/github.com/gorilla/mux/.travis.yml
+++ b/vendor/github.com/gorilla/mux/.travis.yml
@@ -1,8 +1,14 @@
language: go
sudo: false
-
go:
- 1.3
- 1.4
- 1.5
- tip
+install:
+ - go get golang.org/x/tools/cmd/vet
+script:
+ - go get -t -v ./...
+ - diff -u <(echo -n) <(gofmt -d -s .)
+ - go tool vet .
+ - go test -v -race ./...
diff --git a/vendor/github.com/gorilla/mux/mux.go b/vendor/github.com/gorilla/mux/mux.go
index 002051fc..68c4ea5d 100644
--- a/vendor/github.com/gorilla/mux/mux.go
+++ b/vendor/github.com/gorilla/mux/mux.go
@@ -70,7 +70,7 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
// Clean path to canonical form and redirect.
if p := cleanPath(req.URL.Path); p != req.URL.Path {
- // Added 3 lines (Philip Schlump) - It was droping the query string and #whatever from query.
+ // Added 3 lines (Philip Schlump) - It was dropping the query string and #whatever from query.
// This matches with fix in go 1.2 r.c. 4 for same problem. Go Issue:
// http://code.google.com/p/go/issues/detail?id=5252
url := *req.URL
@@ -365,6 +365,8 @@ func uniqueVars(s1, s2 []string) error {
return nil
}
+// checkPairs returns the count of strings passed in, and an error if
+// the count is not an even number.
func checkPairs(pairs ...string) (int, error) {
length := len(pairs)
if length%2 != 0 {
@@ -374,7 +376,8 @@ func checkPairs(pairs ...string) (int, error) {
return length, nil
}
-// mapFromPairs converts variadic string parameters to a string map.
+// mapFromPairsToString converts variadic string parameters to a
+// string to string map.
func mapFromPairsToString(pairs ...string) (map[string]string, error) {
length, err := checkPairs(pairs...)
if err != nil {
@@ -387,6 +390,8 @@ func mapFromPairsToString(pairs ...string) (map[string]string, error) {
return m, nil
}
+// mapFromPairsToRegex converts variadic string paramers to a
+// string to regex map.
func mapFromPairsToRegex(pairs ...string) (map[string]*regexp.Regexp, error) {
length, err := checkPairs(pairs...)
if err != nil {
diff --git a/vendor/github.com/gorilla/mux/mux_test.go b/vendor/github.com/gorilla/mux/mux_test.go
index 5732d2da..d1eae926 100644
--- a/vendor/github.com/gorilla/mux/mux_test.go
+++ b/vendor/github.com/gorilla/mux/mux_test.go
@@ -1077,7 +1077,7 @@ func TestWalkSingleDepth(t *testing.T) {
return SkipRouter
}
if len(ancestors) != depths[i] {
- t.Errorf(`Expected depth of %d at i = %d; got "%s"`, depths[i], i, len(ancestors))
+ t.Errorf(`Expected depth of %d at i = %d; got "%d"`, depths[i], i, len(ancestors))
}
if matcher.template != "/"+paths[i] {
t.Errorf(`Expected "/%s" at i = %d; got "%s"`, paths[i], i, matcher.template)
diff --git a/vendor/github.com/lib/pq/.travis.yml b/vendor/github.com/lib/pq/.travis.yml
index 9bf68373..6b8eb405 100644
--- a/vendor/github.com/lib/pq/.travis.yml
+++ b/vendor/github.com/lib/pq/.travis.yml
@@ -5,6 +5,7 @@ go:
- 1.2
- 1.3
- 1.4
+ - 1.5
- tip
before_install:
diff --git a/vendor/github.com/lib/pq/copy.go b/vendor/github.com/lib/pq/copy.go
index e44fa48a..101f1113 100644
--- a/vendor/github.com/lib/pq/copy.go
+++ b/vendor/github.com/lib/pq/copy.go
@@ -215,9 +215,7 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) {
}
if len(v) == 0 {
- err = ci.Close()
- ci.closed = true
- return nil, err
+ return nil, ci.Close()
}
numValues := len(v)
@@ -240,9 +238,10 @@ func (ci *copyin) Exec(v []driver.Value) (r driver.Result, err error) {
}
func (ci *copyin) Close() (err error) {
- if ci.closed {
- return errCopyInClosed
+ if ci.closed { // Don't do anything, we're already closed
+ return nil
}
+ ci.closed = true
if ci.cn.bad {
return driver.ErrBadConn
diff --git a/vendor/github.com/mozilla/scribe/Makefile b/vendor/github.com/mozilla/scribe/Makefile
index 7e69d58b..2b3f6f67 100644
--- a/vendor/github.com/mozilla/scribe/Makefile
+++ b/vendor/github.com/mozilla/scribe/Makefile
@@ -1,10 +1,16 @@
-PROJS = scribe scribecmd evrtest
+PROJS = scribe scribecmd evrtest ubuntu-cve-tracker parse-nasltokens
GO = GOPATH=$(shell pwd):$(shell go env GOROOT)/bin go
export SCRIBECMD = $(shell pwd)/bin/scribecmd
export EVRTESTCMD = $(shell pwd)/bin/evrtest
all: $(PROJS)
+ubuntu-cve-tracker:
+ $(GO) install ubuntu-cve-tracker
+
+parse-nasltokens:
+ $(GO) install parse-nasltokens
+
evrtest:
$(GO) install evrtest
diff --git a/vendor/github.com/mozilla/scribe/src/parse-nasltokens/main.go b/vendor/github.com/mozilla/scribe/src/parse-nasltokens/main.go
new file mode 100644
index 00000000..8d7e8008
--- /dev/null
+++ b/vendor/github.com/mozilla/scribe/src/parse-nasltokens/main.go
@@ -0,0 +1,174 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+// Contributor:
+// - Aaron Meihm ameihm@mozilla.com
+
+// Parse the output of nasltokens to generate scribe checks
+package main
+
+import (
+ "bufio"
+ "encoding/json"
+ "flag"
+ "fmt"
+ "os"
+ "scribe"
+ "strings"
+)
+
+type checkEntry struct {
+ dist string
+ pkgname string
+ version string
+ op string
+}
+
+type releaseProfile struct {
+ fdir string
+ fname string
+ expression string
+}
+
+var rProfileUbuntu = releaseProfile{
+ fdir: "/etc",
+ fname: "lsb-release",
+ expression: "DISTRIB_RELEASE=(\\d{1,2}\\.\\d{1,2})",
+}
+
+var rProfileRedHat = releaseProfile{
+ fdir: "/etc",
+ fname: "redhat-release",
+ expression: "release (\\d)\\.",
+}
+
+type releaseInformation struct {
+ nasldist string
+ identifier string
+ lsbmatch string
+ defid string
+ profile *releaseProfile
+}
+
+var releaseList = []releaseInformation{
+ {"UBUNTU14.10", "utopic", "14.10", "", &rProfileUbuntu},
+ {"UBUNTU15.04", "vivid", "15.04", "", &rProfileUbuntu},
+ {"UBUNTU14.04 LTS", "trusty", "14.04", "", &rProfileUbuntu},
+ {"UBUNTU12.04 LTS", "precise", "12.04", "", &rProfileUbuntu},
+ {"UBUNTU10.04 LTS", "lucid", "10.04", "", &rProfileUbuntu},
+ {"RHENT_7", "rh7", "7", "", &rProfileRedHat},
+ {"RHENT_6", "rh6", "6", "", &rProfileRedHat},
+ {"RHENT_5", "rh5", "5", "", &rProfileRedHat},
+}
+
+func addReleaseDefinition(o *scribe.Document, rinfo *releaseInformation) {
+ identifier := fmt.Sprintf("reldef-%v", rinfo.identifier)
+ rinfo.defid = identifier
+
+ obj := scribe.Object{}
+ obj.Object = identifier + "-object"
+ obj.FileContent.Path = rinfo.profile.fdir
+ obj.FileContent.File = rinfo.profile.fname
+ obj.FileContent.Expression = rinfo.profile.expression
+
+ test := scribe.Test{}
+ test.TestID = identifier + "-test"
+ test.Object = obj.Object
+ test.EMatch.Value = rinfo.lsbmatch
+
+ o.Tests = append(o.Tests, test)
+ o.Objects = append(o.Objects, obj)
+}
+
+func addReleaseDefinitions(o *scribe.Document) {
+ for x := range releaseList {
+ addReleaseDefinition(o, &releaseList[x])
+ }
+}
+
+func getReleaseDefinition(nasldist string) string {
+ for _, x := range releaseList {
+ if nasldist == x.nasldist {
+ return x.defid
+ }
+ }
+ return ""
+}
+
+func addDefinition(o *scribe.Document, prefix string, check checkEntry) {
+ // Don't create a definition for anything that is not in our release
+ // list.
+ reldefid := getReleaseDefinition(check.dist)
+ if reldefid == "" {
+ return
+ }
+
+ // Create an object definition for the package
+ objid := fmt.Sprintf("%v-object", prefix)
+ obj := scribe.Object{}
+ obj.Object = objid
+ obj.Package.Name = check.pkgname
+
+ // Create a test
+ testid := fmt.Sprintf("%v-test", prefix)
+ test := scribe.Test{}
+ test.TestID = testid
+ test.Object = obj.Object
+ test.EVR.Value = check.version
+ test.EVR.Operation = check.op
+ disttestref := fmt.Sprintf("%v-test", reldefid)
+ test.If = append(test.If, disttestref)
+
+ o.Tests = append(o.Tests, test)
+ o.Objects = append(o.Objects, obj)
+}
+
+func processEntries(fpath string) {
+ root := scribe.Document{}
+
+ addReleaseDefinitions(&root)
+
+ fd, err := os.Open(fpath)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+ defer fd.Close()
+
+ scanner := bufio.NewScanner(fd)
+ lv := 0
+ for scanner.Scan() {
+ lv++
+ tokens := strings.Split(scanner.Text(), "|")
+ ce := checkEntry{}
+ ce.dist = strings.Trim(tokens[0], "\"")
+ ce.pkgname = strings.Trim(tokens[1], "\"")
+ ce.op = tokens[2]
+ ce.version = strings.Trim(tokens[3], "\"")
+ prefix := fmt.Sprintf("%v-%v", lv, ce.pkgname)
+ addDefinition(&root, prefix, ce)
+ }
+ if err = scanner.Err(); err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+
+ buf, err := json.MarshalIndent(&root, "", " ")
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "error: %v\n", err)
+ os.Exit(1)
+ }
+ fmt.Fprintf(os.Stdout, "%v\n", string(buf))
+}
+
+func main() {
+ flag.Parse()
+ args := flag.Args()
+ if len(args) < 1 {
+ fmt.Fprintf(os.Stderr, "specify path to nasltokens output\n")
+ os.Exit(1)
+ }
+
+ processEntries(args[0])
+}
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/document.go b/vendor/github.com/mozilla/scribe/src/scribe/document.go
index 3122ecc8..4cedb0a1 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/document.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/document.go
@@ -14,9 +14,9 @@ import (
// A scribe document. Contains all tests and other information used to execute
// the document.
type Document struct {
- Variables []variable `json:"variables"`
- Objects []object `json:"objects"`
- Tests []test `json:"tests"`
+ Variables []Variable `json:"variables,omitempty"`
+ Objects []Object `json:"objects,omitempty"`
+ Tests []Test `json:"tests,omitempty"`
}
// Validate a scribe document for consistency. This identifies any errors in
@@ -71,7 +71,7 @@ func (d *Document) prepareObjects() error {
}
func (d *Document) objectPrepared(obj string) (bool, error) {
- var objptr *object
+ var objptr *Object
for i := range d.Objects {
if d.Objects[i].Object == obj {
objptr = &d.Objects[i]
@@ -98,7 +98,7 @@ func (d *Document) runTests() error {
}
// Return a pointer to a test instance of the test whose identifier matches
-func (d *Document) getTest(testid string) (*test, error) {
+func (d *Document) getTest(testid string) (*Test, error) {
for i := range d.Tests {
if d.Tests[i].TestID == testid {
return &d.Tests[i], nil
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/evr.go b/vendor/github.com/mozilla/scribe/src/scribe/evr.go
index 4cbd2363..e42ce902 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/evr.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/evr.go
@@ -11,12 +11,12 @@ import (
"fmt"
)
-type evrtest struct {
- Operation string `json:"operation"`
- Value string `json:"value"`
+type EVRTest struct {
+ Operation string `json:"operation,omitempty"`
+ Value string `json:"value,omitempty"`
}
-func (e *evrtest) evaluate(c evaluationCriteria) (ret evaluationResult, err error) {
+func (e *EVRTest) evaluate(c evaluationCriteria) (ret evaluationResult, err error) {
debugPrint("evaluate(): evr %v \"%v\", %v \"%v\"\n", c.identifier, c.testValue, e.Operation, e.Value)
evrop := evrLookupOperation(e.Operation)
if evrop == EVROP_UNKNOWN {
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/exactmatch.go b/vendor/github.com/mozilla/scribe/src/scribe/exactmatch.go
index 61496e20..8441d572 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/exactmatch.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/exactmatch.go
@@ -7,11 +7,11 @@
package scribe
-type exactmatch struct {
- Value string `json:"value"`
+type ExactMatch struct {
+ Value string `json:"value,omitempty"`
}
-func (e *exactmatch) evaluate(c evaluationCriteria) (ret evaluationResult, err error) {
+func (e *ExactMatch) evaluate(c evaluationCriteria) (ret evaluationResult, err error) {
debugPrint("evaluate(): exactmatch %v \"%v\", \"%v\"\n", c.identifier, c.testValue, e.Value)
ret.criteria = c
if c.testValue == e.Value {
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/filecontent.go b/vendor/github.com/mozilla/scribe/src/scribe/filecontent.go
index 47ff0db2..6304f0f2 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/filecontent.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/filecontent.go
@@ -18,13 +18,13 @@ import (
"regexp"
)
-type filecontent struct {
- Path string `json:"path"`
- File string `json:"file"`
- Expression string `json:"expression"`
- Concat string `json:"concat"`
+type FileContent struct {
+ Path string `json:"path,omitempty"`
+ File string `json:"file,omitempty"`
+ Expression string `json:"expression,omitempty"`
+ Concat string `json:"concat,omitempty"`
- ImportChain []string `json:"import-chain"`
+ ImportChain []string `json:"import-chain,omitempty"`
matches []contentMatch
}
@@ -39,7 +39,7 @@ type matchLine struct {
groups []string
}
-func (f *filecontent) validate(d *Document) error {
+func (f *FileContent) validate(d *Document) error {
if len(f.Path) == 0 {
return fmt.Errorf("filecontent path must be set")
}
@@ -64,7 +64,7 @@ func (f *filecontent) validate(d *Document) error {
return nil
}
-func (f *filecontent) fireChains(d *Document) ([]evaluationCriteria, error) {
+func (f *FileContent) fireChains(d *Document) ([]evaluationCriteria, error) {
if len(f.ImportChain) == 0 {
return nil, nil
}
@@ -85,12 +85,12 @@ func (f *filecontent) fireChains(d *Document) ([]evaluationCriteria, error) {
}
ret := make([]evaluationCriteria, 0)
for _, x := range uids {
- varlist := make([]variable, 0)
+ varlist := make([]Variable, 0)
debugPrint("fireChains(): run for \"%v\"\n", x)
// Build our variable list for the filecontent chain import.
dirent, _ := path.Split(x)
- newvar := variable{Key: "chain_root", Value: dirent}
+ newvar := Variable{Key: "chain_root", Value: dirent}
varlist = append(varlist, newvar)
// Execute each chain entry in order for each identifier.
@@ -121,7 +121,7 @@ func (f *filecontent) fireChains(d *Document) ([]evaluationCriteria, error) {
return ret, nil
}
-func (f *filecontent) mergeCriteria(c []evaluationCriteria) {
+func (f *FileContent) mergeCriteria(c []evaluationCriteria) {
for _, x := range c {
nml := matchLine{}
nml.groups = make([]string, 0)
@@ -133,19 +133,19 @@ func (f *filecontent) mergeCriteria(c []evaluationCriteria) {
}
}
-func (f *filecontent) isChain() bool {
+func (f *FileContent) isChain() bool {
if hasChainVariables(f.Path) {
return true
}
return false
}
-func (f *filecontent) expandVariables(v []variable) {
+func (f *FileContent) expandVariables(v []Variable) {
f.Path = variableExpansion(v, f.Path)
f.File = variableExpansion(v, f.File)
}
-func (f *filecontent) getCriteria() (ret []evaluationCriteria) {
+func (f *FileContent) getCriteria() (ret []evaluationCriteria) {
for _, x := range f.matches {
for _, y := range x.matches {
for _, z := range y.groups {
@@ -162,7 +162,7 @@ func (f *filecontent) getCriteria() (ret []evaluationCriteria) {
return ret
}
-func (f *filecontent) prepare() error {
+func (f *FileContent) prepare() error {
debugPrint("prepare(): analyzing file system, path %v, file \"%v\"\n", f.Path, f.File)
sfl := newSimpleFileLocator()
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/filename.go b/vendor/github.com/mozilla/scribe/src/scribe/filename.go
index 60b94272..1477f178 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/filename.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/filename.go
@@ -13,9 +13,9 @@ import (
"regexp"
)
-type filename struct {
- Path string `json:"path"`
- File string `json:"file"`
+type FileName struct {
+ Path string `json:"path,omitempty"`
+ File string `json:"file,omitempty"`
matches []nameMatch
}
@@ -25,18 +25,18 @@ type nameMatch struct {
match string
}
-func (f *filename) isChain() bool {
+func (f *FileName) isChain() bool {
return false
}
-func (f *filename) fireChains(d *Document) ([]evaluationCriteria, error) {
+func (f *FileName) fireChains(d *Document) ([]evaluationCriteria, error) {
return nil, nil
}
-func (f *filename) mergeCriteria(c []evaluationCriteria) {
+func (f *FileName) mergeCriteria(c []evaluationCriteria) {
}
-func (f *filename) validate(d *Document) error {
+func (f *FileName) validate(d *Document) error {
if len(f.Path) == 0 {
return fmt.Errorf("filename path must be set")
}
@@ -46,11 +46,11 @@ func (f *filename) validate(d *Document) error {
return nil
}
-func (f *filename) expandVariables(v []variable) {
+func (f *FileName) expandVariables(v []Variable) {
f.Path = variableExpansion(v, f.Path)
}
-func (f *filename) getCriteria() (ret []evaluationCriteria) {
+func (f *FileName) getCriteria() (ret []evaluationCriteria) {
for _, x := range f.matches {
n := evaluationCriteria{}
n.identifier = x.path
@@ -60,7 +60,7 @@ func (f *filename) getCriteria() (ret []evaluationCriteria) {
return ret
}
-func (f *filename) prepare() error {
+func (f *FileName) prepare() error {
debugPrint("prepare(): analyzing file system, path %v, file \"%v\"\n", f.Path, f.File)
sfl := newSimpleFileLocator()
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/hasline.go b/vendor/github.com/mozilla/scribe/src/scribe/hasline.go
index b0b7a506..53075b0b 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/hasline.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/hasline.go
@@ -12,10 +12,10 @@ import (
"regexp"
)
-type hasline struct {
- Path string `json:"path"`
- File string `json:"file"`
- Expression string `json:"expression"`
+type HasLine struct {
+ Path string `json:"path,omitempty"`
+ File string `json:"file,omitempty"`
+ Expression string `json:"expression,omitempty"`
matches []haslineStatus
}
@@ -25,7 +25,7 @@ type haslineStatus struct {
found bool
}
-func (h *hasline) validate(d *Document) error {
+func (h *HasLine) validate(d *Document) error {
if len(h.Path) == 0 {
return fmt.Errorf("hasline path must be set")
}
@@ -46,23 +46,23 @@ func (h *hasline) validate(d *Document) error {
return nil
}
-func (h *hasline) mergeCriteria(c []evaluationCriteria) {
+func (h *HasLine) mergeCriteria(c []evaluationCriteria) {
}
-func (h *hasline) fireChains(d *Document) ([]evaluationCriteria, error) {
+func (h *HasLine) fireChains(d *Document) ([]evaluationCriteria, error) {
return nil, nil
}
-func (h *hasline) isChain() bool {
+func (h *HasLine) isChain() bool {
return false
}
-func (h *hasline) expandVariables(v []variable) {
+func (h *HasLine) expandVariables(v []Variable) {
h.Path = variableExpansion(v, h.Path)
h.File = variableExpansion(v, h.File)
}
-func (h *hasline) getCriteria() (ret []evaluationCriteria) {
+func (h *HasLine) getCriteria() (ret []evaluationCriteria) {
for _, x := range h.matches {
n := evaluationCriteria{}
n.identifier = x.path
@@ -72,7 +72,7 @@ func (h *hasline) getCriteria() (ret []evaluationCriteria) {
return ret
}
-func (h *hasline) prepare() error {
+func (h *HasLine) prepare() error {
debugPrint("prepare(): analyzing file system, path %v, file \"%v\"\n", h.Path, h.File)
sfl := newSimpleFileLocator()
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/object.go b/vendor/github.com/mozilla/scribe/src/scribe/object.go
index d646e2df..c2c7fa96 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/object.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/object.go
@@ -11,13 +11,13 @@ import (
"fmt"
)
-type object struct {
+type Object struct {
Object string `json:"object"`
- FileContent filecontent `json:"filecontent"`
- FileName filename `json:"filename"`
- Package pkg `json:"package"`
- Raw raw `json:"raw"`
- HasLine hasline `json:"hasline"`
+ FileContent FileContent `json:"filecontent"`
+ FileName FileName `json:"filename"`
+ Package Pkg `json:"package"`
+ Raw Raw `json:"raw"`
+ HasLine HasLine `json:"hasline"`
isChain bool // True if object is part of an import chain.
prepared bool // True if object has been prepared.
@@ -28,13 +28,13 @@ type genericSource interface {
prepare() error
getCriteria() []evaluationCriteria
isChain() bool
- expandVariables([]variable)
+ expandVariables([]Variable)
validate(d *Document) error
mergeCriteria([]evaluationCriteria)
fireChains(*Document) ([]evaluationCriteria, error)
}
-func (o *object) validate(d *Document) error {
+func (o *Object) validate(d *Document) error {
if len(o.Object) == 0 {
return fmt.Errorf("an object in document has no identifier")
}
@@ -49,11 +49,11 @@ func (o *object) validate(d *Document) error {
return nil
}
-func (o *object) markChain() {
+func (o *Object) markChain() {
o.isChain = o.getSourceInterface().isChain()
}
-func (o *object) getSourceInterface() genericSource {
+func (o *Object) getSourceInterface() genericSource {
if o.Package.Name != "" {
return &o.Package
} else if o.FileContent.Path != "" {
@@ -68,7 +68,7 @@ func (o *object) getSourceInterface() genericSource {
return nil
}
-func (o *object) fireChains(d *Document) error {
+func (o *Object) fireChains(d *Document) error {
si := o.getSourceInterface()
// We only fire chains on root object types, not on chain entries
// themselves.
@@ -92,7 +92,7 @@ func (o *object) fireChains(d *Document) error {
return nil
}
-func (o *object) prepare(d *Document) error {
+func (o *Object) prepare(d *Document) error {
if o.isChain {
debugPrint("prepare(): skipping chain object \"%v\"\n", o.Object)
return nil
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/package.go b/vendor/github.com/mozilla/scribe/src/scribe/package.go
index d65352fa..6846956d 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/package.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/package.go
@@ -11,8 +11,8 @@ import (
"fmt"
)
-type pkg struct {
- Name string `json:"name"`
+type Pkg struct {
+ Name string `json:"name,omitempty"`
pkgInfo []packageInfo
}
@@ -21,25 +21,25 @@ type packageInfo struct {
Version string
}
-func (p *pkg) isChain() bool {
+func (p *Pkg) isChain() bool {
return false
}
-func (p *pkg) validate(d *Document) error {
+func (p *Pkg) validate(d *Document) error {
if len(p.Name) == 0 {
return fmt.Errorf("package must specify name")
}
return nil
}
-func (p *pkg) fireChains(d *Document) ([]evaluationCriteria, error) {
+func (p *Pkg) fireChains(d *Document) ([]evaluationCriteria, error) {
return nil, nil
}
-func (p *pkg) mergeCriteria(c []evaluationCriteria) {
+func (p *Pkg) mergeCriteria(c []evaluationCriteria) {
}
-func (p *pkg) getCriteria() (ret []evaluationCriteria) {
+func (p *Pkg) getCriteria() (ret []evaluationCriteria) {
for _, x := range p.pkgInfo {
n := evaluationCriteria{}
n.identifier = x.Name
@@ -49,7 +49,7 @@ func (p *pkg) getCriteria() (ret []evaluationCriteria) {
return ret
}
-func (p *pkg) prepare() error {
+func (p *Pkg) prepare() error {
debugPrint("prepare(): preparing information for package \"%v\"\n", p.Name)
p.pkgInfo = make([]packageInfo, 0)
ret := getPackage(p.Name)
@@ -62,6 +62,6 @@ func (p *pkg) prepare() error {
return nil
}
-func (p *pkg) expandVariables(v []variable) {
+func (p *Pkg) expandVariables(v []Variable) {
p.Name = variableExpansion(v, p.Name)
}
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/raw.go b/vendor/github.com/mozilla/scribe/src/scribe/raw.go
index 43f8f8d7..7e731bb6 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/raw.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/raw.go
@@ -11,27 +11,27 @@ import (
"fmt"
)
-type raw struct {
- Identifiers []rawIdentifiers `json:"identifiers"`
+type Raw struct {
+ Identifiers []RawIdentifiers `json:"identifiers,omitempty"`
}
-type rawIdentifiers struct {
- Identifier string `json:"identifier"`
- Value string `json:"value"`
+type RawIdentifiers struct {
+ Identifier string `json:"identifier,omitempty"`
+ Value string `json:"value,omitempty"`
}
-func (r *raw) isChain() bool {
+func (r *Raw) isChain() bool {
return false
}
-func (r *raw) fireChains(d *Document) ([]evaluationCriteria, error) {
+func (r *Raw) fireChains(d *Document) ([]evaluationCriteria, error) {
return nil, nil
}
-func (r *raw) mergeCriteria(c []evaluationCriteria) {
+func (r *Raw) mergeCriteria(c []evaluationCriteria) {
}
-func (r *raw) validate(d *Document) error {
+func (r *Raw) validate(d *Document) error {
if len(r.Identifiers) == 0 {
return fmt.Errorf("at least one identifier must be present")
}
@@ -43,7 +43,7 @@ func (r *raw) validate(d *Document) error {
return nil
}
-func (r *raw) getCriteria() []evaluationCriteria {
+func (r *Raw) getCriteria() []evaluationCriteria {
ret := make([]evaluationCriteria, 0)
for _, x := range r.Identifiers {
nc := evaluationCriteria{}
@@ -54,9 +54,9 @@ func (r *raw) getCriteria() []evaluationCriteria {
return ret
}
-func (r *raw) prepare() error {
+func (r *Raw) prepare() error {
return nil
}
-func (r *raw) expandVariables(v []variable) {
+func (r *Raw) expandVariables(v []Variable) {
}
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/regexp.go b/vendor/github.com/mozilla/scribe/src/scribe/regexp.go
index ee65c976..5a55afa8 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/regexp.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/regexp.go
@@ -11,11 +11,11 @@ import (
"regexp"
)
-type regex struct {
- Value string `json:"value"`
+type Regex struct {
+ Value string `json:"value,omitempty"`
}
-func (r *regex) evaluate(c evaluationCriteria) (ret evaluationResult, err error) {
+func (r *Regex) evaluate(c evaluationCriteria) (ret evaluationResult, err error) {
var re *regexp.Regexp
debugPrint("evaluate(): regexp %v \"%v\", \"%v\"\n", c.identifier, c.testValue, r.Value)
re, err = regexp.Compile(r.Value)
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/result.go b/vendor/github.com/mozilla/scribe/src/scribe/result.go
index 6aeed8ea..57b4ab29 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/result.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/result.go
@@ -16,7 +16,8 @@ import (
// Describes the results of a test. The type can be marshaled into a JSON
// string as required.
type TestResult struct {
- TestID string `json:"testid"` // The identifier for the test.
+ TestID string `json:"testid"` // The identifier for the test.
+ Tags []string `json:"tags,omitempty"` // Tags for the test.
IsError bool `json:"iserror"` // True of error is encountered during evaluation.
Error string `json:"error"` // Error associated with test.
@@ -44,6 +45,7 @@ func GetResults(d *Document, name string) (TestResult, error) {
}
ret := TestResult{}
ret.TestID = t.TestID
+ ret.Tags = t.Tags
if t.err != nil {
ret.Error = fmt.Sprintf("%v", t.err)
ret.IsError = true
@@ -75,6 +77,18 @@ func (r *TestResult) SingleLineResults() []string {
}
}
buf := fmt.Sprintf("master %v name:\"%v\" hastrue:%v error:\"%v\"", rs, r.TestID, r.HasTrueResults, r.Error)
+ if len(r.Tags) > 0 {
+ buf += " tags:["
+ f := false
+ for _, x := range r.Tags {
+ if f {
+ buf += ","
+ }
+ buf += fmt.Sprintf("\"%v\"", x)
+ f = true
+ }
+ buf += "]"
+ }
lns = append(lns, buf)
for _, x := range r.Results {
@@ -113,6 +127,11 @@ func (r *TestResult) String() string {
}
lns = append(lns, buf)
}
+ if len(r.Tags) > 0 {
+ for _, x := range r.Tags {
+ lns = append(lns, fmt.Sprintf("\ttag: %v", x))
+ }
+ }
if r.IsError {
buf := fmt.Sprintf("\t[error] error: %v", r.Error)
lns = append(lns, buf)
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/test.go b/vendor/github.com/mozilla/scribe/src/scribe/test.go
index 5364ef60..04943de3 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/test.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/test.go
@@ -9,17 +9,20 @@ package scribe
import (
"fmt"
+ "strings"
)
-type test struct {
+type Test struct {
TestID string `json:"test"` // The ID for this test.
Object string `json:"object"` // The object this test references.
Description string `json:"description,omitempty"`
// Evaluators
- EVR evrtest `json:"evr,omitempty"` // EVR version comparison
- Regexp regex `json:"regexp,omitempty"` // Regular expression comparison
- EMatch exactmatch `json:"exactmatch,omitempty"` // Exact string match
+ EVR EVRTest `json:"evr,omitempty"` // EVR version comparison
+ Regexp Regex `json:"regexp,omitempty"` // Regular expression comparison
+ EMatch ExactMatch `json:"exactmatch,omitempty"` // Exact string match
+
+ Tags []string `json:"tags,omitempty"` // Tags associated with the test
If []string `json:"if,omitempty"` // Slice of test names for dependencies
@@ -67,7 +70,7 @@ type genericEvaluator interface {
evaluate(evaluationCriteria) (evaluationResult, error)
}
-func (t *test) validate(d *Document) error {
+func (t *Test) validate(d *Document) error {
if len(t.TestID) == 0 {
return fmt.Errorf("a test in document has no identifier")
}
@@ -83,10 +86,16 @@ func (t *test) validate(d *Document) error {
return fmt.Errorf("%v: test cannot reference itself", t.TestID)
}
}
+ // Ensure the tags only contain valid characters
+ for _, x := range t.Tags {
+ if strings.ContainsRune(x, '"') {
+ return fmt.Errorf("%v: test tag cannot contain quote", t.TestID)
+ }
+ }
return nil
}
-func (t *test) getEvaluationInterface() genericEvaluator {
+func (t *Test) getEvaluationInterface() genericEvaluator {
if t.EVR.Value != "" {
return &t.EVR
} else if t.Regexp.Value != "" {
@@ -100,7 +109,7 @@ func (t *test) getEvaluationInterface() genericEvaluator {
return &noop{}
}
-func (t *test) errorHandler(d *Document) error {
+func (t *Test) errorHandler(d *Document) error {
if sRuntime.excall == nil {
return t.err
}
@@ -114,7 +123,7 @@ func (t *test) errorHandler(d *Document) error {
return t.err
}
-func (t *test) runTest(d *Document) error {
+func (t *Test) runTest(d *Document) error {
if t.evaluated {
return nil
}
diff --git a/vendor/github.com/mozilla/scribe/src/scribe/variable.go b/vendor/github.com/mozilla/scribe/src/scribe/variable.go
index 0f6e8435..876d935e 100644
--- a/vendor/github.com/mozilla/scribe/src/scribe/variable.go
+++ b/vendor/github.com/mozilla/scribe/src/scribe/variable.go
@@ -11,12 +11,12 @@ import (
"regexp"
)
-type variable struct {
+type Variable struct {
Key string `json:"key"`
Value string `json:"value"`
}
-func variableExpansion(v []variable, in string) string {
+func variableExpansion(v []Variable, in string) string {
res := in
for _, x := range v {
s := "\\$\\{" + x.Key + "\\}"
diff --git a/vendor/github.com/mozilla/scribe/src/ubuntu-cve-tracker/main.go b/vendor/github.com/mozilla/scribe/src/ubuntu-cve-tracker/main.go
new file mode 100644
index 00000000..1a0cbcbe
--- /dev/null
+++ b/vendor/github.com/mozilla/scribe/src/ubuntu-cve-tracker/main.go
@@ -0,0 +1,288 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+//
+// Contributor:
+// - Aaron Meihm ameihm@mozilla.com
+
+// Generate scribe policy checks using data in the Ubuntu CVE tracker
+// repository.
+package main
+
+import (
+ "bufio"
+ "encoding/json"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "path"
+ "regexp"
+ "scribe"
+ "strings"
+ "unicode"
+)
+
+type distPatchInfo map[string]string
+
+type cveEntry struct {
+ cveID string
+ pkgMap map[string]distPatchInfo
+}
+
+type releaseInformation struct {
+ identifier string
+ lsbmatch string
+ defid string
+}
+
+var releaseList = []releaseInformation{
+ {"utopic", "14.10", ""},
+ {"vivid", "15.04", ""},
+ {"trusty", "14.04", ""},
+ {"precise", "12.04", ""},
+ {"lucid", "10.04", ""},
+}
+
+var entries []cveEntry
+var matchFilter *regexp.Regexp
+
+// The hackTranslate* functions perform conversion on name and version
+// strings if the package name is either "linux" or begins with "linux-". If
+// this is the case, linux in the package name is translated to be
+// "linux-image-generic". Additionally, the upload revision element if
+// present in the version string is removed. This allows a comparison of
+// the version to occur against a known package name (linux-image-generic),
+// instead of requiring resolution of whatever the most recent installed
+// kernel image package is which will be named linux-image--generic.
+func hackTranslateName(pkgname string) string {
+ if pkgname != "linux" && !strings.HasPrefix(pkgname, "linux-") {
+ return pkgname
+ }
+ return strings.Replace(pkgname, "linux", "linux-image-generic", 1)
+}
+
+func hackTranslateVersion(pkgname string, ver string) string {
+ if !strings.HasPrefix(pkgname, "linux-image-generic") {
+ return ver
+ }
+
+ ffunc := func(c rune) bool {
+ if c == '-' {
+ return true
+ }
+ return false
+ }
+ f := strings.FieldsFunc(ver, ffunc)
+ if len(f) != 2 {
+ return ver
+ }
+ ret := f[1]
+ idx := strings.Index(ret, ".")
+ if idx == -1 {
+ return ver
+ }
+ idx2 := idx + 1
+ for _, c := range ret[idx2:] {
+ if !unicode.IsDigit(c) {
+ break
+ }
+ idx2++
+ }
+ ret = f[0] + "." + ret[:idx] + ret[idx2:]
+
+ return ret
+}
+
+func addReleaseDefinition(o *scribe.Document, rinfo *releaseInformation) {
+ identifier := fmt.Sprintf("reldef-%v", rinfo.identifier)
+ rinfo.defid = identifier
+
+ obj := scribe.Object{}
+ obj.Object = identifier + "-object"
+ obj.FileContent.Path = "/etc"
+ obj.FileContent.File = "^lsb-release$"
+ obj.FileContent.Expression = "DISTRIB_RELEASE=(\\d{1,2}\\.\\d{1,2})"
+
+ test := scribe.Test{}
+ test.TestID = identifier + "-test"
+ test.Object = obj.Object
+ test.EMatch.Value = rinfo.lsbmatch
+
+ o.Tests = append(o.Tests, test)
+ o.Objects = append(o.Objects, obj)
+}
+
+func addReleaseDefinitions(o *scribe.Document) {
+ for x := range releaseList {
+ addReleaseDefinition(o, &releaseList[x])
+ }
+}
+
+func getReleaseDefinition(dist string) string {
+ for _, x := range releaseList {
+ if dist == x.identifier {
+ return x.defid
+ }
+ }
+ return ""
+}
+
+func parseEntryFile(fpath string) (ret cveEntry) {
+ const (
+ _ = iota
+ INNER_NONE
+ INNER_PATCH
+ )
+ fd, err := os.Open(fpath)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+ defer func() {
+ fd.Close()
+ }()
+
+ scanner := bufio.NewScanner(fd)
+ parserMode := INNER_NONE
+ curPkgName := ""
+ ret.cveID = path.Base(fpath)
+ ret.pkgMap = make(map[string]distPatchInfo)
+ for scanner.Scan() {
+ tokens := strings.Fields(scanner.Text())
+ if len(tokens) == 0 {
+ parserMode = INNER_NONE
+ curPkgName = ""
+ continue
+ }
+
+ if strings.HasPrefix(tokens[0], "Patches_") {
+ parserMode = INNER_PATCH
+ curPkgName = strings.TrimPrefix(tokens[0], "Patches_")
+ curPkgName = strings.TrimRight(curPkgName, ":")
+ curPkgName = hackTranslateName(curPkgName)
+ ret.pkgMap[curPkgName] = make(map[string]string)
+ continue
+ }
+
+ if parserMode == INNER_PATCH {
+ if len(tokens) < 2 {
+ continue
+ }
+ idx := strings.Index(tokens[0], "_")
+ if idx == -1 {
+ continue
+ }
+ distname := tokens[0][:idx]
+ if tokens[1] == "released" && len(tokens) > 2 {
+ patchver := tokens[2]
+ patchver = strings.Trim(patchver, "()")
+ patchver = hackTranslateVersion(curPkgName, patchver)
+ ret.pkgMap[curPkgName][distname] = patchver
+ }
+ }
+ }
+ if err = scanner.Err(); err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+
+ return
+}
+
+func loadEntries(dirpath string) {
+ dirents, err := ioutil.ReadDir(dirpath)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+ for _, i := range dirents {
+ if !strings.HasPrefix(i.Name(), "CVE-") {
+ continue
+ }
+ if matchFilter != nil {
+ if !matchFilter.MatchString(i.Name()) {
+ continue
+ }
+ }
+ fname := path.Join(dirpath, i.Name())
+ entries = append(entries, parseEntryFile(fname))
+ }
+}
+
+func addDefinition(o *scribe.Document, prefix string, pkgname string, dist string, cve cveEntry) {
+ // Don't create a definition for anything that is not in our release
+ // list.
+ reldefid := getReleaseDefinition(dist)
+ if reldefid == "" {
+ return
+ }
+
+ // Create an object definition for the package
+ objid := fmt.Sprintf("%v-object", prefix)
+ obj := scribe.Object{}
+ obj.Object = objid
+ obj.Package.Name = pkgname
+
+ // Create a test
+ testid := fmt.Sprintf("%v-test", prefix)
+ test := scribe.Test{}
+ test.TestID = testid
+ test.Object = obj.Object
+ test.EVR.Value = cve.pkgMap[pkgname][dist]
+ test.EVR.Operation = "<"
+ disttestref := fmt.Sprintf("reldef-%v-test", dist)
+ test.If = append(test.If, disttestref)
+
+ o.Tests = append(o.Tests, test)
+ o.Objects = append(o.Objects, obj)
+}
+
+func processEntries() {
+ root := scribe.Document{}
+
+ addReleaseDefinitions(&root)
+
+ for i, ent := range entries {
+ for x := range ent.pkgMap {
+ for y := range ent.pkgMap[x] {
+ prefix := fmt.Sprintf("ubuntu-%v-%v-%v", i, x, y)
+ addDefinition(&root, prefix, x, y, ent)
+ }
+ }
+ }
+
+ buf, err := json.MarshalIndent(&root, "", " ")
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "error: %v\n", err)
+ os.Exit(1)
+ }
+ fmt.Fprintf(os.Stdout, "%v\n", string(buf))
+}
+
+func main() {
+ var fMatch string
+
+ flag.StringVar(&fMatch, "i", "", "filter regexp")
+ flag.Parse()
+ args := flag.Args()
+ if len(args) < 1 {
+ fmt.Fprintf(os.Stderr, "specify path to ubuntu-cve-tracker directory\n")
+ os.Exit(1)
+ }
+
+ fm, err := regexp.Compile(fMatch)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ os.Exit(1)
+ }
+ matchFilter = fm
+
+ entries = make([]cveEntry, 0)
+
+ procdir := path.Join(args[0], "active")
+ loadEntries(procdir)
+ procdir = path.Join(args[0], "retired")
+ loadEntries(procdir)
+ processEntries()
+}
diff --git a/vendor/github.com/mozilla/scribe/test/Makefile b/vendor/github.com/mozilla/scribe/test/Makefile
index edfee863..13307646 100644
--- a/vendor/github.com/mozilla/scribe/test/Makefile
+++ b/vendor/github.com/mozilla/scribe/test/Makefile
@@ -1,4 +1,5 @@
-TESTDIRS = filecontent filename package concat raw import-chain hasline evrtest
+TESTDIRS = filecontent filename package concat raw import-chain hasline tags \
+ evrtest
all:
diff --git a/vendor/github.com/mozilla/scribe/test/tags/Makefile b/vendor/github.com/mozilla/scribe/test/tags/Makefile
new file mode 100644
index 00000000..df69fd41
--- /dev/null
+++ b/vendor/github.com/mozilla/scribe/test/tags/Makefile
@@ -0,0 +1,13 @@
+all:
+
+runtests: test.json
+ifndef SCRIBECMD
+ $(error SCRIBECMD is undefined, tests must be ran from the root of the repository)
+endif
+ $(SCRIBECMD) -e -f test.json; \
+
+test.json: test-template.json
+ cat test-template.json | sed 's,REPLACE_IN_MAKEFILE,$(shell pwd),' > test.json
+
+clean:
+ rm -f test.json
diff --git a/vendor/github.com/mozilla/scribe/test/tags/data/file0.txt b/vendor/github.com/mozilla/scribe/test/tags/data/file0.txt
new file mode 100644
index 00000000..9daeafb9
--- /dev/null
+++ b/vendor/github.com/mozilla/scribe/test/tags/data/file0.txt
@@ -0,0 +1 @@
+test
diff --git a/vendor/github.com/mozilla/scribe/test/tags/data/file1.txt b/vendor/github.com/mozilla/scribe/test/tags/data/file1.txt
new file mode 100644
index 00000000..9daeafb9
--- /dev/null
+++ b/vendor/github.com/mozilla/scribe/test/tags/data/file1.txt
@@ -0,0 +1 @@
+test
diff --git a/vendor/github.com/mozilla/scribe/test/tags/data/file2.txt b/vendor/github.com/mozilla/scribe/test/tags/data/file2.txt
new file mode 100644
index 00000000..ad3e35e3
--- /dev/null
+++ b/vendor/github.com/mozilla/scribe/test/tags/data/file2.txt
@@ -0,0 +1,2 @@
+
+data
diff --git a/vendor/github.com/mozilla/scribe/test/tags/test-template.json b/vendor/github.com/mozilla/scribe/test/tags/test-template.json
new file mode 100644
index 00000000..71960c2f
--- /dev/null
+++ b/vendor/github.com/mozilla/scribe/test/tags/test-template.json
@@ -0,0 +1,31 @@
+{
+ "variables": [
+ { "key": "root", "value": "REPLACE_IN_MAKEFILE" }
+ ],
+
+ "objects": [
+ {
+ "object": "file-hasline",
+ "hasline": {
+ "path": "${root}",
+ "file": ".*\\.txt",
+ "expression": ".*test.*"
+ }
+ }
+ ],
+
+ "tests": [
+ {
+ "test": "files-without-line",
+ "tags": [
+ "tag1",
+ "Another tag with spaces"
+ ],
+ "expectedresult": true,
+ "object": "file-hasline",
+ "exactmatch": {
+ "value": "false"
+ }
+ }
+ ]
+}
diff --git a/vendor/github.com/oschwald/geoip2-golang/.travis.yml b/vendor/github.com/oschwald/geoip2-golang/.travis.yml
index 7e1922fe..0d69d894 100644
--- a/vendor/github.com/oschwald/geoip2-golang/.travis.yml
+++ b/vendor/github.com/oschwald/geoip2-golang/.travis.yml
@@ -10,6 +10,8 @@ go:
- tip
install:
- - go get github.com/oschwald/maxminddb-golang
- - go get launchpad.net/gocheck
+ - go get -v ./...
+ # "go get" on 1.1 doesn't get test dependencies apparently.
+ - go get gopkg.in/check.v1
+sudo: false
diff --git a/vendor/github.com/oschwald/geoip2-golang/README.md b/vendor/github.com/oschwald/geoip2-golang/README.md
index 1aeddfda..7a3c22a0 100644
--- a/vendor/github.com/oschwald/geoip2-golang/README.md
+++ b/vendor/github.com/oschwald/geoip2-golang/README.md
@@ -87,4 +87,4 @@ with your changes.
## License ##
-This is free software, licensed under the Apache License, Version 2.0.
+This is free software, licensed under the ISC license.
diff --git a/vendor/github.com/oschwald/geoip2-golang/reader.go b/vendor/github.com/oschwald/geoip2-golang/reader.go
index b245031f..45d642be 100644
--- a/vendor/github.com/oschwald/geoip2-golang/reader.go
+++ b/vendor/github.com/oschwald/geoip2-golang/reader.go
@@ -88,6 +88,16 @@ type Country struct {
} `maxminddb:"traits"`
}
+// The AnonymousIP structure corresponds to the data in the GeoIP2
+// Anonymous IP database.
+type AnonymousIP struct {
+ IsAnonymous bool `maxminddb:"is_anonymous"`
+ IsAnonymousVPN bool `maxminddb:"is_anonymous_vpn"`
+ IsHostingProvider bool `maxminddb:"is_hosting_provider"`
+ IsPublicProxy bool `maxminddb:"is_public_proxy"`
+ IsTorExitNode bool `maxminddb:"is_tor_exit_node"`
+}
+
// The ConnectionType structure corresponds to the data in the GeoIP2
// Connection-Type database.
type ConnectionType struct {
@@ -147,6 +157,14 @@ func (r *Reader) Country(ipAddress net.IP) (*Country, error) {
return &country, err
}
+// AnonymousIP takes an IP address as a net.IP struct and returns a
+// AnonymousIP struct and/or an error.
+func (r *Reader) AnonymousIP(ipAddress net.IP) (*AnonymousIP, error) {
+ var anonIP AnonymousIP
+ err := r.mmdbReader.Lookup(ipAddress, &anonIP)
+ return &anonIP, err
+}
+
// ConnectionType takes an IP address as a net.IP struct and returns a
// ConnectionType struct and/or an error
func (r *Reader) ConnectionType(ipAddress net.IP) (*ConnectionType, error) {
@@ -172,13 +190,13 @@ func (r *Reader) ISP(ipAddress net.IP) (*ISP, error) {
}
// Metadata takes no arguments and returns a struct containing metadata about
-// the Maxmind database in use by the Reader.
+// the MaxMind database in use by the Reader.
func (r *Reader) Metadata() maxminddb.Metadata {
return r.mmdbReader.Metadata
}
// Close unmaps the database file from virtual memory and returns the
// resources to the system.
-func (r *Reader) Close() {
- r.mmdbReader.Close()
+func (r *Reader) Close() error {
+ return r.mmdbReader.Close()
}
diff --git a/vendor/github.com/oschwald/geoip2-golang/reader_test.go b/vendor/github.com/oschwald/geoip2-golang/reader_test.go
index 05f8bbd1..51d28eaf 100644
--- a/vendor/github.com/oschwald/geoip2-golang/reader_test.go
+++ b/vendor/github.com/oschwald/geoip2-golang/reader_test.go
@@ -2,11 +2,12 @@ package geoip2
import (
"fmt"
- . "launchpad.net/gocheck"
"math/rand"
"net"
"testing"
"time"
+
+ . "gopkg.in/check.v1"
)
func TestGeoIP2(t *testing.T) { TestingT(t) }
@@ -32,15 +33,15 @@ func (s *MySuite) TestReader(c *C) {
m := reader.Metadata()
c.Assert(m.BinaryFormatMajorVersion, Equals, uint(2))
c.Assert(m.BinaryFormatMinorVersion, Equals, uint(0))
- c.Assert(m.BuildEpoch, Equals, uint(1403110838))
- c.Assert(m.DatabaseType, Equals, "GeoIP2 City")
+ c.Assert(m.BuildEpoch, Equals, uint(1436981935))
+ c.Assert(m.DatabaseType, Equals, "GeoIP2-City")
c.Assert(m.Description, DeepEquals, map[string]string{
"en": "GeoIP2 City Test Database (a small sample of real GeoIP2 data)",
"zh": "小型数据库",
})
c.Assert(m.IPVersion, Equals, uint(6))
c.Assert(m.Languages, DeepEquals, []string{"en", "zh"})
- c.Assert(m.NodeCount, Equals, uint(1218))
+ c.Assert(m.NodeCount, Equals, uint(1240))
c.Assert(m.RecordSize, Equals, uint(28))
c.Assert(record.City.GeoNameID, Equals, uint(2643743))
@@ -179,6 +180,29 @@ func (s *MySuite) TestISP(c *C) {
}
+func (s *MySuite) TestAnonymousIP(c *C) {
+ reader, err := Open("test-data/test-data/GeoIP2-Anonymous-IP-Test.mmdb")
+ if err != nil {
+ c.Log(err)
+ c.Fail()
+ }
+ defer reader.Close()
+
+ record, err := reader.AnonymousIP(net.ParseIP("1.2.0.0"))
+ if err != nil {
+ c.Log(err)
+ c.Fail()
+ }
+
+ c.Assert(record.IsAnonymous, Equals, true)
+
+ c.Assert(record.IsAnonymousVPN, Equals, true)
+ c.Assert(record.IsHostingProvider, Equals, false)
+ c.Assert(record.IsPublicProxy, Equals, false)
+ c.Assert(record.IsTorExitNode, Equals, false)
+
+}
+
func BenchmarkMaxMindDB(b *testing.B) {
db, err := Open("GeoLite2-City.mmdb")
if err != nil {
diff --git a/vendor/github.com/streadway/amqp/README.md b/vendor/github.com/streadway/amqp/README.md
index c4291fb6..7869af81 100644
--- a/vendor/github.com/streadway/amqp/README.md
+++ b/vendor/github.com/streadway/amqp/README.md
@@ -14,7 +14,7 @@ enhancements.
# Goals
-Provide an functional interface that closely represents the AMQP 0.9.1 model
+Provide a functional interface that closely represents the AMQP 0.9.1 model
targeted to RabbitMQ as a server. This includes the minimum necessary to
interact the semantics of the protocol.
diff --git a/vendor/github.com/streadway/amqp/_examples/pubsub/pubsub.go b/vendor/github.com/streadway/amqp/_examples/pubsub/pubsub.go
index 109af240..29b4a53a 100644
--- a/vendor/github.com/streadway/amqp/_examples/pubsub/pubsub.go
+++ b/vendor/github.com/streadway/amqp/_examples/pubsub/pubsub.go
@@ -91,7 +91,7 @@ func publish(sessions chan chan session, messages <-chan message) {
running bool
reading = messages
pending = make(chan message, 1)
- confirm = make(amqp.Confirmation, 1)
+ confirm = make(chan amqp.Confirmation, 1)
)
for session := range sessions {
diff --git a/vendor/github.com/streadway/amqp/channel.go b/vendor/github.com/streadway/amqp/channel.go
index 9cf93b4d..8976fa90 100644
--- a/vendor/github.com/streadway/amqp/channel.go
+++ b/vendor/github.com/streadway/amqp/channel.go
@@ -197,7 +197,15 @@ func (me *Channel) sendOpen(msg message) (err error) {
if content, ok := msg.(messageWithContent); ok {
props, body := content.getContent()
class, _ := content.id()
- size := me.connection.Config.FrameSize - frameHeaderSize
+
+ // catch client max frame size==0 and server max frame size==0
+ // set size to length of what we're trying to publish
+ var size int
+ if me.connection.Config.FrameSize > 0 {
+ size = me.connection.Config.FrameSize - frameHeaderSize
+ } else {
+ size = len(body)
+ }
if err = me.connection.send(&methodFrame{
ChannelId: me.id,
@@ -215,6 +223,7 @@ func (me *Channel) sendOpen(msg message) (err error) {
return
}
+ // chunk body into size (max frame size - frame header size)
for i, j := 0, size; i < len(body); i, j = j, j+size {
if j > len(body) {
j = len(body)
diff --git a/vendor/github.com/streadway/amqp/client_test.go b/vendor/github.com/streadway/amqp/client_test.go
index be816bc3..23acc974 100644
--- a/vendor/github.com/streadway/amqp/client_test.go
+++ b/vendor/github.com/streadway/amqp/client_test.go
@@ -527,6 +527,50 @@ func TestPublishBodySliceIssue74(t *testing.T) {
<-done
}
+// Should not panic when server and client have frame_size of 0
+func TestPublishZeroFrameSizeIssue161(t *testing.T) {
+ rwc, srv := newSession(t)
+ defer rwc.Close()
+
+ const frameSize = 0
+ const publishings = 1
+ done := make(chan bool)
+
+ go func() {
+ srv.connectionOpen()
+ srv.channelOpen(1)
+
+ for i := 0; i < publishings; i++ {
+ srv.recv(1, &basicPublish{})
+ }
+
+ done <- true
+ }()
+
+ cfg := defaultConfig()
+ cfg.FrameSize = frameSize
+
+ c, err := Open(rwc, cfg)
+
+ // override the tuned framesize with a hard 0, as would happen when rabbit is configured with 0
+ c.Config.FrameSize = frameSize
+
+ if err != nil {
+ t.Fatalf("could not create connection: %v (%s)", c, err)
+ }
+
+ ch, err := c.Channel()
+ if err != nil {
+ t.Fatalf("could not open channel: %v (%s)", ch, err)
+ }
+
+ for i := 0; i < publishings; i++ {
+ go ch.Publish("", "q", false, false, Publishing{Body: []byte("anything")})
+ }
+
+ <-done
+}
+
func TestPublishAndShutdownDeadlockIssue84(t *testing.T) {
rwc, srv := newSession(t)
defer rwc.Close()
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go
index 7dff6552..4b1105b6 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go
@@ -22,20 +22,17 @@ const maxSessionKeySizeInBytes = 64
// 4880, section 5.3.
type SymmetricKeyEncrypted struct {
CipherFunc CipherFunction
- Encrypted bool
- Key []byte // Empty unless Encrypted is false.
s2k func(out, in []byte)
encryptedKey []byte
}
const symmetricKeyEncryptedVersion = 4
-func (ske *SymmetricKeyEncrypted) parse(r io.Reader) (err error) {
+func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error {
// RFC 4880, section 5.3.
var buf [2]byte
- _, err = readFull(r, buf[:])
- if err != nil {
- return
+ if _, err := readFull(r, buf[:]); err != nil {
+ return err
}
if buf[0] != symmetricKeyEncryptedVersion {
return errors.UnsupportedError("SymmetricKeyEncrypted version")
@@ -46,9 +43,10 @@ func (ske *SymmetricKeyEncrypted) parse(r io.Reader) (err error) {
return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(buf[1])))
}
+ var err error
ske.s2k, err = s2k.Parse(r)
if err != nil {
- return
+ return err
}
encryptedKey := make([]byte, maxSessionKeySizeInBytes)
@@ -56,9 +54,9 @@ func (ske *SymmetricKeyEncrypted) parse(r io.Reader) (err error) {
// out. If it exists then we limit it to maxSessionKeySizeInBytes.
n, err := readFull(r, encryptedKey)
if err != nil && err != io.ErrUnexpectedEOF {
- return
+ return err
}
- err = nil
+
if n != 0 {
if n == maxSessionKeySizeInBytes {
return errors.UnsupportedError("oversized encrypted session key")
@@ -66,42 +64,35 @@ func (ske *SymmetricKeyEncrypted) parse(r io.Reader) (err error) {
ske.encryptedKey = encryptedKey[:n]
}
- ske.Encrypted = true
-
- return
+ return nil
}
-// Decrypt attempts to decrypt an encrypted session key. If it returns nil,
-// ske.Key will contain the session key.
-func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) error {
- if !ske.Encrypted {
- return nil
- }
-
+// Decrypt attempts to decrypt an encrypted session key and returns the key and
+// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data
+// packet.
+func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunction, error) {
key := make([]byte, ske.CipherFunc.KeySize())
ske.s2k(key, passphrase)
if len(ske.encryptedKey) == 0 {
- ske.Key = key
- } else {
- // the IV is all zeros
- iv := make([]byte, ske.CipherFunc.blockSize())
- c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv)
- c.XORKeyStream(ske.encryptedKey, ske.encryptedKey)
- ske.CipherFunc = CipherFunction(ske.encryptedKey[0])
- if ske.CipherFunc.blockSize() == 0 {
- return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(ske.CipherFunc)))
- }
- ske.CipherFunc = CipherFunction(ske.encryptedKey[0])
- ske.Key = ske.encryptedKey[1:]
- if len(ske.Key)%ske.CipherFunc.blockSize() != 0 {
- ske.Key = nil
- return errors.StructuralError("length of decrypted key not a multiple of block size")
- }
+ return key, ske.CipherFunc, nil
}
- ske.Encrypted = false
- return nil
+ // the IV is all zeros
+ iv := make([]byte, ske.CipherFunc.blockSize())
+ c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv)
+ plaintextKey := make([]byte, len(ske.encryptedKey))
+ c.XORKeyStream(plaintextKey, ske.encryptedKey)
+ cipherFunc := CipherFunction(plaintextKey[0])
+ if cipherFunc.blockSize() == 0 {
+ return nil, ske.CipherFunc, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc)))
+ }
+ plaintextKey = plaintextKey[1:]
+ if l := len(plaintextKey); l == 0 || l%cipherFunc.blockSize() != 0 {
+ return nil, cipherFunc, errors.StructuralError("length of decrypted key not a multiple of block size")
+ }
+
+ return plaintextKey, cipherFunc, nil
}
// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w. The
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go
index dd983cb3..19538df7 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go
@@ -24,7 +24,7 @@ func TestSymmetricKeyEncrypted(t *testing.T) {
t.Error("didn't find SymmetricKeyEncrypted packet")
return
}
- err = ske.Decrypt([]byte("password"))
+ key, cipherFunc, err := ske.Decrypt([]byte("password"))
if err != nil {
t.Error(err)
return
@@ -40,7 +40,7 @@ func TestSymmetricKeyEncrypted(t *testing.T) {
t.Error("didn't find SymmetricallyEncrypted packet")
return
}
- r, err := se.Decrypt(ske.CipherFunc, ske.Key)
+ r, err := se.Decrypt(cipherFunc, key)
if err != nil {
t.Error(err)
return
@@ -64,8 +64,9 @@ const symmetricallyEncryptedContentsHex = "cb1062004d14c4df636f6e74656e74732e0a"
func TestSerializeSymmetricKeyEncrypted(t *testing.T) {
buf := bytes.NewBuffer(nil)
passphrase := []byte("testing")
+ const cipherFunc = CipherAES128
config := &Config{
- DefaultCipher: CipherAES128,
+ DefaultCipher: cipherFunc,
}
key, err := SerializeSymmetricKeyEncrypted(buf, passphrase, config)
@@ -85,18 +86,18 @@ func TestSerializeSymmetricKeyEncrypted(t *testing.T) {
return
}
- if !ske.Encrypted {
- t.Errorf("SKE not encrypted but should be")
- }
if ske.CipherFunc != config.DefaultCipher {
t.Errorf("SKE cipher function is %d (expected %d)", ske.CipherFunc, config.DefaultCipher)
}
- err = ske.Decrypt(passphrase)
+ parsedKey, parsedCipherFunc, err := ske.Decrypt(passphrase)
if err != nil {
t.Errorf("failed to decrypt reparsed SKE: %s", err)
return
}
- if !bytes.Equal(key, ske.Key) {
- t.Errorf("keys don't match after Decrpyt: %x (original) vs %x (parsed)", key, ske.Key)
+ if !bytes.Equal(key, parsedKey) {
+ t.Errorf("keys don't match after Decrypt: %x (original) vs %x (parsed)", key, parsedKey)
+ }
+ if parsedCipherFunc != cipherFunc {
+ t.Errorf("cipher function doesn't match after Decrypt: %d (original) vs %d (parsed)", cipherFunc, parsedCipherFunc)
}
}
diff --git a/vendor/golang.org/x/crypto/openpgp/read.go b/vendor/golang.org/x/crypto/openpgp/read.go
index a6cecc52..dfffc398 100644
--- a/vendor/golang.org/x/crypto/openpgp/read.go
+++ b/vendor/golang.org/x/crypto/openpgp/read.go
@@ -196,9 +196,9 @@ FindKey:
// Try the symmetric passphrase first
if len(symKeys) != 0 && passphrase != nil {
for _, s := range symKeys {
- err = s.Decrypt(passphrase)
- if err == nil && !s.Encrypted {
- decrypted, err = se.Decrypt(s.CipherFunc, s.Key)
+ key, cipherFunc, err := s.Decrypt(passphrase)
+ if err == nil {
+ decrypted, err = se.Decrypt(cipherFunc, key)
if err != nil && err != errors.ErrKeyIncorrect {
return nil, err
}
diff --git a/vendor/golang.org/x/crypto/openpgp/read_test.go b/vendor/golang.org/x/crypto/openpgp/read_test.go
index 52f942c7..7524a02e 100644
--- a/vendor/golang.org/x/crypto/openpgp/read_test.go
+++ b/vendor/golang.org/x/crypto/openpgp/read_test.go
@@ -243,7 +243,7 @@ func TestUnspecifiedRecipient(t *testing.T) {
}
func TestSymmetricallyEncrypted(t *testing.T) {
- expected := "Symmetrically encrypted.\n"
+ firstTimeCalled := true
prompt := func(keys []Key, symmetric bool) ([]byte, error) {
if len(keys) != 0 {
@@ -254,6 +254,11 @@ func TestSymmetricallyEncrypted(t *testing.T) {
t.Errorf("symmetric is not set")
}
+ if firstTimeCalled {
+ firstTimeCalled = false
+ return []byte("wrongpassword"), nil
+ }
+
return []byte("password"), nil
}
@@ -273,6 +278,7 @@ func TestSymmetricallyEncrypted(t *testing.T) {
t.Errorf("LiteralData.Time is %d, want %d", md.LiteralData.Time, expectedCreationTime)
}
+ const expected = "Symmetrically encrypted.\n"
if string(contents) != expected {
t.Errorf("contents got: %s want: %s", string(contents), expected)
}
diff --git a/vendor/golang.org/x/crypto/otr/otr.go b/vendor/golang.org/x/crypto/otr/otr.go
index 0d18a60d..f872a9d7 100644
--- a/vendor/golang.org/x/crypto/otr/otr.go
+++ b/vendor/golang.org/x/crypto/otr/otr.go
@@ -417,12 +417,11 @@ func (c *Conversation) Receive(in []byte) (out []byte, encrypted bool, change Se
change = SMPSecretNeeded
c.smp.saved = &inTLV
return
- } else if err == smpFailureError {
+ }
+ if err == smpFailureError {
err = nil
change = SMPFailed
- return
- }
- if complete {
+ } else if complete {
change = SMPComplete
}
if reply.typ != 0 {
diff --git a/vendor/golang.org/x/crypto/pkcs12/bmp-string.go b/vendor/golang.org/x/crypto/pkcs12/bmp-string.go
new file mode 100644
index 00000000..284d2a68
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/bmp-string.go
@@ -0,0 +1,50 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "errors"
+ "unicode/utf16"
+)
+
+// bmpString returns s encoded in UCS-2 with a zero terminator.
+func bmpString(s string) ([]byte, error) {
+ // References:
+ // https://tools.ietf.org/html/rfc7292#appendix-B.1
+ // http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane
+ // - non-BMP characters are encoded in UTF 16 by using a surrogate pair of 16-bit codes
+ // EncodeRune returns 0xfffd if the rune does not need special encoding
+ // - the above RFC provides the info that BMPStrings are NULL terminated.
+
+ ret := make([]byte, 0, 2*len(s)+2)
+
+ for _, r := range s {
+ if t, _ := utf16.EncodeRune(r); t != 0xfffd {
+ return nil, errors.New("pkcs12: string contains characters that cannot be encoded in UCS-2")
+ }
+ ret = append(ret, byte(r/256), byte(r%256))
+ }
+
+ return append(ret, 0, 0), nil
+}
+
+func decodeBMPString(bmpString []byte) (string, error) {
+ if len(bmpString)%2 != 0 {
+ return "", errors.New("pkcs12: odd-length BMP string")
+ }
+
+ // strip terminator if present
+ if l := len(bmpString); l >= 2 && bmpString[l-1] == 0 && bmpString[l-2] == 0 {
+ bmpString = bmpString[:l-2]
+ }
+
+ s := make([]uint16, 0, len(bmpString)/2)
+ for len(bmpString) > 0 {
+ s = append(s, uint16(bmpString[0])<<8+uint16(bmpString[1]))
+ bmpString = bmpString[2:]
+ }
+
+ return string(utf16.Decode(s)), nil
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go b/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go
new file mode 100644
index 00000000..7fca55f4
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go
@@ -0,0 +1,63 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "bytes"
+ "encoding/hex"
+ "testing"
+)
+
+var bmpStringTests = []struct {
+ in string
+ expectedHex string
+ shouldFail bool
+}{
+ {"", "0000", false},
+ // Example from https://tools.ietf.org/html/rfc7292#appendix-B.
+ {"Beavis", "0042006500610076006900730000", false},
+ // Some characters from the "Letterlike Symbols Unicode block".
+ {"\u2115 - Double-struck N", "21150020002d00200044006f00750062006c0065002d00730074007200750063006b0020004e0000", false},
+ // any character outside the BMP should trigger an error.
+ {"\U0001f000 East wind (Mahjong)", "", true},
+}
+
+func TestBMPString(t *testing.T) {
+ for i, test := range bmpStringTests {
+ expected, err := hex.DecodeString(test.expectedHex)
+ if err != nil {
+ t.Fatalf("#%d: failed to decode expectation", i)
+ }
+
+ out, err := bmpString(test.in)
+ if err == nil && test.shouldFail {
+ t.Errorf("#%d: expected to fail, but produced %x", i, out)
+ continue
+ }
+
+ if err != nil && !test.shouldFail {
+ t.Errorf("#%d: failed unexpectedly: %s", i, err)
+ continue
+ }
+
+ if !test.shouldFail {
+ if !bytes.Equal(out, expected) {
+ t.Errorf("#%d: expected %s, got %x", i, test.expectedHex, out)
+ continue
+ }
+
+ roundTrip, err := decodeBMPString(out)
+ if err != nil {
+ t.Errorf("#%d: decoding output gave an error: %s", i, err)
+ continue
+ }
+
+ if roundTrip != test.in {
+ t.Errorf("#%d: decoding output resulted in %q, but it should have been %q", i, roundTrip, test.in)
+ continue
+ }
+ }
+ }
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto.go b/vendor/golang.org/x/crypto/pkcs12/crypto.go
new file mode 100644
index 00000000..4bd4470e
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/crypto.go
@@ -0,0 +1,131 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "bytes"
+ "crypto/cipher"
+ "crypto/des"
+ "crypto/x509/pkix"
+ "encoding/asn1"
+ "errors"
+
+ "golang.org/x/crypto/pkcs12/internal/rc2"
+)
+
+var (
+ oidPBEWithSHAAnd3KeyTripleDESCBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3})
+ oidPBEWithSHAAnd40BitRC2CBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 6})
+)
+
+// pbeCipher is an abstraction of a PKCS#12 cipher.
+type pbeCipher interface {
+ // create returns a cipher.Block given a key.
+ create(key []byte) (cipher.Block, error)
+ // deriveKey returns a key derived from the given password and salt.
+ deriveKey(salt, password []byte, iterations int) []byte
+ // deriveKey returns an IV derived from the given password and salt.
+ deriveIV(salt, password []byte, iterations int) []byte
+}
+
+type shaWithTripleDESCBC struct{}
+
+func (shaWithTripleDESCBC) create(key []byte) (cipher.Block, error) {
+ return des.NewTripleDESCipher(key)
+}
+
+func (shaWithTripleDESCBC) deriveKey(salt, password []byte, iterations int) []byte {
+ return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 24)
+}
+
+func (shaWithTripleDESCBC) deriveIV(salt, password []byte, iterations int) []byte {
+ return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8)
+}
+
+type shaWith40BitRC2CBC struct{}
+
+func (shaWith40BitRC2CBC) create(key []byte) (cipher.Block, error) {
+ return rc2.New(key, len(key)*8)
+}
+
+func (shaWith40BitRC2CBC) deriveKey(salt, password []byte, iterations int) []byte {
+ return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 5)
+}
+
+func (shaWith40BitRC2CBC) deriveIV(salt, password []byte, iterations int) []byte {
+ return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8)
+}
+
+type pbeParams struct {
+ Salt []byte
+ Iterations int
+}
+
+func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher.BlockMode, int, error) {
+ var cipherType pbeCipher
+
+ switch {
+ case algorithm.Algorithm.Equal(oidPBEWithSHAAnd3KeyTripleDESCBC):
+ cipherType = shaWithTripleDESCBC{}
+ case algorithm.Algorithm.Equal(oidPBEWithSHAAnd40BitRC2CBC):
+ cipherType = shaWith40BitRC2CBC{}
+ default:
+ return nil, 0, NotImplementedError("algorithm " + algorithm.Algorithm.String() + " is not supported")
+ }
+
+ var params pbeParams
+ if err := unmarshal(algorithm.Parameters.FullBytes, ¶ms); err != nil {
+ return nil, 0, err
+ }
+
+ key := cipherType.deriveKey(params.Salt, password, params.Iterations)
+ iv := cipherType.deriveIV(params.Salt, password, params.Iterations)
+
+ block, err := cipherType.create(key)
+ if err != nil {
+ return nil, 0, err
+ }
+
+ return cipher.NewCBCDecrypter(block, iv), block.BlockSize(), nil
+}
+
+func pbDecrypt(info decryptable, password []byte) (decrypted []byte, err error) {
+ cbc, blockSize, err := pbDecrypterFor(info.Algorithm(), password)
+ if err != nil {
+ return nil, err
+ }
+
+ encrypted := info.Data()
+ if len(encrypted) == 0 {
+ return nil, errors.New("pkcs12: empty encrypted data")
+ }
+ if len(encrypted)%blockSize != 0 {
+ return nil, errors.New("pkcs12: input is not a multiple of the block size")
+ }
+ decrypted = make([]byte, len(encrypted))
+ cbc.CryptBlocks(decrypted, encrypted)
+
+ psLen := int(decrypted[len(decrypted)-1])
+ if psLen == 0 || psLen > blockSize {
+ return nil, ErrDecryption
+ }
+
+ if len(decrypted) < psLen {
+ return nil, ErrDecryption
+ }
+ ps := decrypted[len(decrypted)-psLen:]
+ decrypted = decrypted[:len(decrypted)-psLen]
+ if bytes.Compare(ps, bytes.Repeat([]byte{byte(psLen)}, psLen)) != 0 {
+ return nil, ErrDecryption
+ }
+
+ return
+}
+
+// decryptable abstracts a object that contains ciphertext.
+type decryptable interface {
+ Algorithm() pkix.AlgorithmIdentifier
+ Data() []byte
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto_test.go b/vendor/golang.org/x/crypto/pkcs12/crypto_test.go
new file mode 100644
index 00000000..eb4dae8f
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/crypto_test.go
@@ -0,0 +1,125 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "bytes"
+ "crypto/x509/pkix"
+ "encoding/asn1"
+ "testing"
+)
+
+var sha1WithTripleDES = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3})
+
+func TestPbDecrypterFor(t *testing.T) {
+ params, _ := asn1.Marshal(pbeParams{
+ Salt: []byte{1, 2, 3, 4, 5, 6, 7, 8},
+ Iterations: 2048,
+ })
+ alg := pkix.AlgorithmIdentifier{
+ Algorithm: asn1.ObjectIdentifier([]int{1, 2, 3}),
+ Parameters: asn1.RawValue{
+ FullBytes: params,
+ },
+ }
+
+ pass, _ := bmpString("Sesame open")
+
+ _, _, err := pbDecrypterFor(alg, pass)
+ if _, ok := err.(NotImplementedError); !ok {
+ t.Errorf("expected not implemented error, got: %T %s", err, err)
+ }
+
+ alg.Algorithm = sha1WithTripleDES
+ cbc, blockSize, err := pbDecrypterFor(alg, pass)
+ if err != nil {
+ t.Errorf("unexpected error from pbDecrypterFor %v", err)
+ }
+ if blockSize != 8 {
+ t.Errorf("unexpected block size %d, wanted 8", blockSize)
+ }
+
+ plaintext := []byte{1, 2, 3, 4, 5, 6, 7, 8}
+ expectedCiphertext := []byte{185, 73, 135, 249, 137, 1, 122, 247}
+ ciphertext := make([]byte, len(plaintext))
+ cbc.CryptBlocks(ciphertext, plaintext)
+
+ if bytes.Compare(ciphertext, expectedCiphertext) != 0 {
+ t.Errorf("bad ciphertext, got %x but wanted %x", ciphertext, expectedCiphertext)
+ }
+}
+
+var pbDecryptTests = []struct {
+ in []byte
+ expected []byte
+ expectedError error
+}{
+ {
+ []byte("\x33\x73\xf3\x9f\xda\x49\xae\xfc\xa0\x9a\xdf\x5a\x58\xa0\xea\x46"), // 7 padding bytes
+ []byte("A secret!"),
+ nil,
+ },
+ {
+ []byte("\x33\x73\xf3\x9f\xda\x49\xae\xfc\x96\x24\x2f\x71\x7e\x32\x3f\xe7"), // 8 padding bytes
+ []byte("A secret"),
+ nil,
+ },
+ {
+ []byte("\x35\x0c\xc0\x8d\xab\xa9\x5d\x30\x7f\x9a\xec\x6a\xd8\x9b\x9c\xd9"), // 9 padding bytes, incorrect
+ nil,
+ ErrDecryption,
+ },
+ {
+ []byte("\xb2\xf9\x6e\x06\x60\xae\x20\xcf\x08\xa0\x7b\xd9\x6b\x20\xef\x41"), // incorrect padding bytes: [ ... 0x04 0x02 ]
+ nil,
+ ErrDecryption,
+ },
+}
+
+func TestPbDecrypt(t *testing.T) {
+ for i, test := range pbDecryptTests {
+ decryptable := testDecryptable{
+ data: test.in,
+ algorithm: pkix.AlgorithmIdentifier{
+ Algorithm: sha1WithTripleDES,
+ Parameters: pbeParams{
+ Salt: []byte("\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8"),
+ Iterations: 4096,
+ }.RawASN1(),
+ },
+ }
+ password, _ := bmpString("sesame")
+
+ plaintext, err := pbDecrypt(decryptable, password)
+ if err != test.expectedError {
+ t.Errorf("#%d: got error %q, but wanted %q", i, err, test.expectedError)
+ continue
+ }
+
+ if !bytes.Equal(plaintext, test.expected) {
+ t.Errorf("#%d: got %x, but wanted %x", i, plaintext, test.expected)
+ }
+ }
+}
+
+type testDecryptable struct {
+ data []byte
+ algorithm pkix.AlgorithmIdentifier
+}
+
+func (d testDecryptable) Algorithm() pkix.AlgorithmIdentifier { return d.algorithm }
+func (d testDecryptable) Data() []byte { return d.data }
+
+func (params pbeParams) RawASN1() (raw asn1.RawValue) {
+ asn1Bytes, err := asn1.Marshal(params)
+ if err != nil {
+ panic(err)
+ }
+ _, err = asn1.Unmarshal(asn1Bytes, &raw)
+ if err != nil {
+ panic(err)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/errors.go b/vendor/golang.org/x/crypto/pkcs12/errors.go
new file mode 100644
index 00000000..7377ce6f
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/errors.go
@@ -0,0 +1,23 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import "errors"
+
+var (
+ // ErrDecryption represents a failure to decrypt the input.
+ ErrDecryption = errors.New("pkcs12: decryption error, incorrect padding")
+
+ // ErrIncorrectPassword is returned when an incorrect password is detected.
+ // Usually, P12/PFX data is signed to be able to verify the password.
+ ErrIncorrectPassword = errors.New("pkcs12: decryption password incorrect")
+)
+
+// NotImplementedError indicates that the input is not currently supported.
+type NotImplementedError string
+
+func (e NotImplementedError) Error() string {
+ return "pkcs12: " + string(e)
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go
new file mode 100644
index 00000000..3347f338
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go
@@ -0,0 +1,27 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package rc2
+
+import (
+ "testing"
+)
+
+func BenchmarkEncrypt(b *testing.B) {
+ r, _ := New([]byte{0, 0, 0, 0, 0, 0, 0, 0}, 64)
+ b.ResetTimer()
+ var src [8]byte
+ for i := 0; i < b.N; i++ {
+ r.Encrypt(src[:], src[:])
+ }
+}
+
+func BenchmarkDecrypt(b *testing.B) {
+ r, _ := New([]byte{0, 0, 0, 0, 0, 0, 0, 0}, 64)
+ b.ResetTimer()
+ var src [8]byte
+ for i := 0; i < b.N; i++ {
+ r.Decrypt(src[:], src[:])
+ }
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go
new file mode 100644
index 00000000..8c709025
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go
@@ -0,0 +1,274 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package rc2 implements the RC2 cipher
+/*
+https://www.ietf.org/rfc/rfc2268.txt
+http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf
+
+This code is licensed under the MIT license.
+*/
+package rc2
+
+import (
+ "crypto/cipher"
+ "encoding/binary"
+)
+
+// The rc2 block size in bytes
+const BlockSize = 8
+
+type rc2Cipher struct {
+ k [64]uint16
+}
+
+// New returns a new rc2 cipher with the given key and effective key length t1
+func New(key []byte, t1 int) (cipher.Block, error) {
+ // TODO(dgryski): error checking for key length
+ return &rc2Cipher{
+ k: expandKey(key, t1),
+ }, nil
+}
+
+func (*rc2Cipher) BlockSize() int { return BlockSize }
+
+var piTable = [256]byte{
+ 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d,
+ 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2,
+ 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32,
+ 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82,
+ 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc,
+ 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26,
+ 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03,
+ 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7,
+ 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a,
+ 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec,
+ 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39,
+ 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31,
+ 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9,
+ 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9,
+ 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e,
+ 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad,
+}
+
+func expandKey(key []byte, t1 int) [64]uint16 {
+
+ l := make([]byte, 128)
+ copy(l, key)
+
+ var t = len(key)
+ var t8 = (t1 + 7) / 8
+ var tm = byte(255 % uint(1<<(8+uint(t1)-8*uint(t8))))
+
+ for i := len(key); i < 128; i++ {
+ l[i] = piTable[l[i-1]+l[uint8(i-t)]]
+ }
+
+ l[128-t8] = piTable[l[128-t8]&tm]
+
+ for i := 127 - t8; i >= 0; i-- {
+ l[i] = piTable[l[i+1]^l[i+t8]]
+ }
+
+ var k [64]uint16
+
+ for i := range k {
+ k[i] = uint16(l[2*i]) + uint16(l[2*i+1])*256
+ }
+
+ return k
+}
+
+func rotl16(x uint16, b uint) uint16 {
+ return (x >> (16 - b)) | (x << b)
+}
+
+func (c *rc2Cipher) Encrypt(dst, src []byte) {
+
+ r0 := binary.LittleEndian.Uint16(src[0:])
+ r1 := binary.LittleEndian.Uint16(src[2:])
+ r2 := binary.LittleEndian.Uint16(src[4:])
+ r3 := binary.LittleEndian.Uint16(src[6:])
+
+ var j int
+
+ for j <= 16 {
+ // mix r0
+ r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1)
+ r0 = rotl16(r0, 1)
+ j++
+
+ // mix r1
+ r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2)
+ r1 = rotl16(r1, 2)
+ j++
+
+ // mix r2
+ r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3)
+ r2 = rotl16(r2, 3)
+ j++
+
+ // mix r3
+ r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0)
+ r3 = rotl16(r3, 5)
+ j++
+
+ }
+
+ r0 = r0 + c.k[r3&63]
+ r1 = r1 + c.k[r0&63]
+ r2 = r2 + c.k[r1&63]
+ r3 = r3 + c.k[r2&63]
+
+ for j <= 40 {
+
+ // mix r0
+ r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1)
+ r0 = rotl16(r0, 1)
+ j++
+
+ // mix r1
+ r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2)
+ r1 = rotl16(r1, 2)
+ j++
+
+ // mix r2
+ r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3)
+ r2 = rotl16(r2, 3)
+ j++
+
+ // mix r3
+ r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0)
+ r3 = rotl16(r3, 5)
+ j++
+
+ }
+
+ r0 = r0 + c.k[r3&63]
+ r1 = r1 + c.k[r0&63]
+ r2 = r2 + c.k[r1&63]
+ r3 = r3 + c.k[r2&63]
+
+ for j <= 60 {
+
+ // mix r0
+ r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1)
+ r0 = rotl16(r0, 1)
+ j++
+
+ // mix r1
+ r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2)
+ r1 = rotl16(r1, 2)
+ j++
+
+ // mix r2
+ r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3)
+ r2 = rotl16(r2, 3)
+ j++
+
+ // mix r3
+ r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0)
+ r3 = rotl16(r3, 5)
+ j++
+ }
+
+ binary.LittleEndian.PutUint16(dst[0:], r0)
+ binary.LittleEndian.PutUint16(dst[2:], r1)
+ binary.LittleEndian.PutUint16(dst[4:], r2)
+ binary.LittleEndian.PutUint16(dst[6:], r3)
+}
+
+func (c *rc2Cipher) Decrypt(dst, src []byte) {
+
+ r0 := binary.LittleEndian.Uint16(src[0:])
+ r1 := binary.LittleEndian.Uint16(src[2:])
+ r2 := binary.LittleEndian.Uint16(src[4:])
+ r3 := binary.LittleEndian.Uint16(src[6:])
+
+ j := 63
+
+ for j >= 44 {
+ // unmix r3
+ r3 = rotl16(r3, 16-5)
+ r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0)
+ j--
+
+ // unmix r2
+ r2 = rotl16(r2, 16-3)
+ r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3)
+ j--
+
+ // unmix r1
+ r1 = rotl16(r1, 16-2)
+ r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2)
+ j--
+
+ // unmix r0
+ r0 = rotl16(r0, 16-1)
+ r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1)
+ j--
+ }
+
+ r3 = r3 - c.k[r2&63]
+ r2 = r2 - c.k[r1&63]
+ r1 = r1 - c.k[r0&63]
+ r0 = r0 - c.k[r3&63]
+
+ for j >= 20 {
+ // unmix r3
+ r3 = rotl16(r3, 16-5)
+ r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0)
+ j--
+
+ // unmix r2
+ r2 = rotl16(r2, 16-3)
+ r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3)
+ j--
+
+ // unmix r1
+ r1 = rotl16(r1, 16-2)
+ r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2)
+ j--
+
+ // unmix r0
+ r0 = rotl16(r0, 16-1)
+ r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1)
+ j--
+
+ }
+
+ r3 = r3 - c.k[r2&63]
+ r2 = r2 - c.k[r1&63]
+ r1 = r1 - c.k[r0&63]
+ r0 = r0 - c.k[r3&63]
+
+ for j >= 0 {
+
+ // unmix r3
+ r3 = rotl16(r3, 16-5)
+ r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0)
+ j--
+
+ // unmix r2
+ r2 = rotl16(r2, 16-3)
+ r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3)
+ j--
+
+ // unmix r1
+ r1 = rotl16(r1, 16-2)
+ r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2)
+ j--
+
+ // unmix r0
+ r0 = rotl16(r0, 16-1)
+ r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1)
+ j--
+
+ }
+
+ binary.LittleEndian.PutUint16(dst[0:], r0)
+ binary.LittleEndian.PutUint16(dst[2:], r1)
+ binary.LittleEndian.PutUint16(dst[4:], r2)
+ binary.LittleEndian.PutUint16(dst[6:], r3)
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go
new file mode 100644
index 00000000..8a49dfaf
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go
@@ -0,0 +1,93 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package rc2
+
+import (
+ "bytes"
+ "encoding/hex"
+ "testing"
+)
+
+func TestEncryptDecrypt(t *testing.T) {
+
+ // TODO(dgryski): add the rest of the test vectors from the RFC
+ var tests = []struct {
+ key string
+ plain string
+ cipher string
+ t1 int
+ }{
+ {
+ "0000000000000000",
+ "0000000000000000",
+ "ebb773f993278eff",
+ 63,
+ },
+ {
+ "ffffffffffffffff",
+ "ffffffffffffffff",
+ "278b27e42e2f0d49",
+ 64,
+ },
+ {
+ "3000000000000000",
+ "1000000000000001",
+ "30649edf9be7d2c2",
+ 64,
+ },
+ {
+ "88",
+ "0000000000000000",
+ "61a8a244adacccf0",
+ 64,
+ },
+ {
+ "88bca90e90875a",
+ "0000000000000000",
+ "6ccf4308974c267f",
+ 64,
+ },
+ {
+ "88bca90e90875a7f0f79c384627bafb2",
+ "0000000000000000",
+ "1a807d272bbe5db1",
+ 64,
+ },
+ {
+ "88bca90e90875a7f0f79c384627bafb2",
+ "0000000000000000",
+ "2269552ab0f85ca6",
+ 128,
+ },
+ {
+ "88bca90e90875a7f0f79c384627bafb216f80a6f85920584c42fceb0be255daf1e",
+ "0000000000000000",
+ "5b78d3a43dfff1f1",
+ 129,
+ },
+ }
+
+ for _, tt := range tests {
+ k, _ := hex.DecodeString(tt.key)
+ p, _ := hex.DecodeString(tt.plain)
+ c, _ := hex.DecodeString(tt.cipher)
+
+ b, _ := New(k, tt.t1)
+
+ var dst [8]byte
+
+ b.Encrypt(dst[:], p)
+
+ if !bytes.Equal(dst[:], c) {
+ t.Errorf("encrypt failed: got % 2x wanted % 2x\n", dst, c)
+ }
+
+ b.Decrypt(dst[:], c)
+
+ if !bytes.Equal(dst[:], p) {
+ t.Errorf("decrypt failed: got % 2x wanted % 2x\n", dst, p)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/mac.go b/vendor/golang.org/x/crypto/pkcs12/mac.go
new file mode 100644
index 00000000..5f38aa7d
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/mac.go
@@ -0,0 +1,45 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "crypto/hmac"
+ "crypto/sha1"
+ "crypto/x509/pkix"
+ "encoding/asn1"
+)
+
+type macData struct {
+ Mac digestInfo
+ MacSalt []byte
+ Iterations int `asn1:"optional,default:1"`
+}
+
+// from PKCS#7:
+type digestInfo struct {
+ Algorithm pkix.AlgorithmIdentifier
+ Digest []byte
+}
+
+var (
+ oidSHA1 = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26})
+)
+
+func verifyMac(macData *macData, message, password []byte) error {
+ if !macData.Mac.Algorithm.Algorithm.Equal(oidSHA1) {
+ return NotImplementedError("unknown digest algorithm: " + macData.Mac.Algorithm.Algorithm.String())
+ }
+
+ key := pbkdf(sha1Sum, 20, 64, macData.MacSalt, password, macData.Iterations, 3, 20)
+
+ mac := hmac.New(sha1.New, key)
+ mac.Write(message)
+ expectedMAC := mac.Sum(nil)
+
+ if !hmac.Equal(macData.Mac.Digest, expectedMAC) {
+ return ErrIncorrectPassword
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/mac_test.go b/vendor/golang.org/x/crypto/pkcs12/mac_test.go
new file mode 100644
index 00000000..1ed4ff21
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/mac_test.go
@@ -0,0 +1,42 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "encoding/asn1"
+ "testing"
+)
+
+func TestVerifyMac(t *testing.T) {
+ td := macData{
+ Mac: digestInfo{
+ Digest: []byte{0x18, 0x20, 0x3d, 0xff, 0x1e, 0x16, 0xf4, 0x92, 0xf2, 0xaf, 0xc8, 0x91, 0xa9, 0xba, 0xd6, 0xca, 0x9d, 0xee, 0x51, 0x93},
+ },
+ MacSalt: []byte{1, 2, 3, 4, 5, 6, 7, 8},
+ Iterations: 2048,
+ }
+
+ message := []byte{11, 12, 13, 14, 15}
+ password, _ := bmpString("")
+
+ td.Mac.Algorithm.Algorithm = asn1.ObjectIdentifier([]int{1, 2, 3})
+ err := verifyMac(&td, message, password)
+ if _, ok := err.(NotImplementedError); !ok {
+ t.Errorf("err: %v", err)
+ }
+
+ td.Mac.Algorithm.Algorithm = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26})
+ err = verifyMac(&td, message, password)
+ if err != ErrIncorrectPassword {
+ t.Errorf("Expected incorrect password, got err: %v", err)
+ }
+
+ password, _ = bmpString("Sesame open")
+ err = verifyMac(&td, message, password)
+ if err != nil {
+ t.Errorf("err: %v", err)
+ }
+
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/pbkdf.go b/vendor/golang.org/x/crypto/pkcs12/pbkdf.go
new file mode 100644
index 00000000..5c419d41
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/pbkdf.go
@@ -0,0 +1,170 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "bytes"
+ "crypto/sha1"
+ "math/big"
+)
+
+var (
+ one = big.NewInt(1)
+)
+
+// sha1Sum returns the SHA-1 hash of in.
+func sha1Sum(in []byte) []byte {
+ sum := sha1.Sum(in)
+ return sum[:]
+}
+
+// fillWithRepeats returns v*ceiling(len(pattern) / v) bytes consisting of
+// repeats of pattern.
+func fillWithRepeats(pattern []byte, v int) []byte {
+ if len(pattern) == 0 {
+ return nil
+ }
+ outputLen := v * ((len(pattern) + v - 1) / v)
+ return bytes.Repeat(pattern, (outputLen+len(pattern)-1)/len(pattern))[:outputLen]
+}
+
+func pbkdf(hash func([]byte) []byte, u, v int, salt, password []byte, r int, ID byte, size int) (key []byte) {
+ // implementation of https://tools.ietf.org/html/rfc7292#appendix-B.2 , RFC text verbatim in comments
+
+ // Let H be a hash function built around a compression function f:
+
+ // Z_2^u x Z_2^v -> Z_2^u
+
+ // (that is, H has a chaining variable and output of length u bits, and
+ // the message input to the compression function of H is v bits). The
+ // values for u and v are as follows:
+
+ // HASH FUNCTION VALUE u VALUE v
+ // MD2, MD5 128 512
+ // SHA-1 160 512
+ // SHA-224 224 512
+ // SHA-256 256 512
+ // SHA-384 384 1024
+ // SHA-512 512 1024
+ // SHA-512/224 224 1024
+ // SHA-512/256 256 1024
+
+ // Furthermore, let r be the iteration count.
+
+ // We assume here that u and v are both multiples of 8, as are the
+ // lengths of the password and salt strings (which we denote by p and s,
+ // respectively) and the number n of pseudorandom bits required. In
+ // addition, u and v are of course non-zero.
+
+ // For information on security considerations for MD5 [19], see [25] and
+ // [1], and on those for MD2, see [18].
+
+ // The following procedure can be used to produce pseudorandom bits for
+ // a particular "purpose" that is identified by a byte called "ID".
+ // This standard specifies 3 different values for the ID byte:
+
+ // 1. If ID=1, then the pseudorandom bits being produced are to be used
+ // as key material for performing encryption or decryption.
+
+ // 2. If ID=2, then the pseudorandom bits being produced are to be used
+ // as an IV (Initial Value) for encryption or decryption.
+
+ // 3. If ID=3, then the pseudorandom bits being produced are to be used
+ // as an integrity key for MACing.
+
+ // 1. Construct a string, D (the "diversifier"), by concatenating v/8
+ // copies of ID.
+ var D []byte
+ for i := 0; i < v; i++ {
+ D = append(D, ID)
+ }
+
+ // 2. Concatenate copies of the salt together to create a string S of
+ // length v(ceiling(s/v)) bits (the final copy of the salt may be
+ // truncated to create S). Note that if the salt is the empty
+ // string, then so is S.
+
+ S := fillWithRepeats(salt, v)
+
+ // 3. Concatenate copies of the password together to create a string P
+ // of length v(ceiling(p/v)) bits (the final copy of the password
+ // may be truncated to create P). Note that if the password is the
+ // empty string, then so is P.
+
+ P := fillWithRepeats(password, v)
+
+ // 4. Set I=S||P to be the concatenation of S and P.
+ I := append(S, P...)
+
+ // 5. Set c=ceiling(n/u).
+ c := (size + u - 1) / u
+
+ // 6. For i=1, 2, ..., c, do the following:
+ A := make([]byte, c*20)
+ var IjBuf []byte
+ for i := 0; i < c; i++ {
+ // A. Set A2=H^r(D||I). (i.e., the r-th hash of D||1,
+ // H(H(H(... H(D||I))))
+ Ai := hash(append(D, I...))
+ for j := 1; j < r; j++ {
+ Ai = hash(Ai)
+ }
+ copy(A[i*20:], Ai[:])
+
+ if i < c-1 { // skip on last iteration
+ // B. Concatenate copies of Ai to create a string B of length v
+ // bits (the final copy of Ai may be truncated to create B).
+ var B []byte
+ for len(B) < v {
+ B = append(B, Ai[:]...)
+ }
+ B = B[:v]
+
+ // C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit
+ // blocks, where k=ceiling(s/v)+ceiling(p/v), modify I by
+ // setting I_j=(I_j+B+1) mod 2^v for each j.
+ {
+ Bbi := new(big.Int).SetBytes(B)
+ Ij := new(big.Int)
+
+ for j := 0; j < len(I)/v; j++ {
+ Ij.SetBytes(I[j*v : (j+1)*v])
+ Ij.Add(Ij, Bbi)
+ Ij.Add(Ij, one)
+ Ijb := Ij.Bytes()
+ // We expect Ijb to be exactly v bytes,
+ // if it is longer or shorter we must
+ // adjust it accordingly.
+ if len(Ijb) > v {
+ Ijb = Ijb[len(Ijb)-v:]
+ }
+ if len(Ijb) < v {
+ if IjBuf == nil {
+ IjBuf = make([]byte, v)
+ }
+ bytesShort := v - len(Ijb)
+ for i := 0; i < bytesShort; i++ {
+ IjBuf[i] = 0
+ }
+ copy(IjBuf[bytesShort:], Ijb)
+ Ijb = IjBuf
+ }
+ copy(I[j*v:(j+1)*v], Ijb)
+ }
+ }
+ }
+ }
+ // 7. Concatenate A_1, A_2, ..., A_c together to form a pseudorandom
+ // bit string, A.
+
+ // 8. Use the first n bits of A as the output of this entire process.
+ return A[:size]
+
+ // If the above process is being used to generate a DES key, the process
+ // should be used to create 64 random bits, and the key's parity bits
+ // should be set after the 64 bits have been produced. Similar concerns
+ // hold for 2-key and 3-key triple-DES keys, for CDMF keys, and for any
+ // similar keys with parity bits "built into them".
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go b/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go
new file mode 100644
index 00000000..262037d7
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go
@@ -0,0 +1,34 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "bytes"
+ "testing"
+)
+
+func TestThatPBKDFWorksCorrectlyForLongKeys(t *testing.T) {
+ cipherInfo := shaWithTripleDESCBC{}
+
+ salt := []byte("\xff\xff\xff\xff\xff\xff\xff\xff")
+ password, _ := bmpString("sesame")
+ key := cipherInfo.deriveKey(salt, password, 2048)
+
+ if expected := []byte("\x7c\xd9\xfd\x3e\x2b\x3b\xe7\x69\x1a\x44\xe3\xbe\xf0\xf9\xea\x0f\xb9\xb8\x97\xd4\xe3\x25\xd9\xd1"); bytes.Compare(key, expected) != 0 {
+ t.Fatalf("expected key '%x', but found '%x'", expected, key)
+ }
+}
+
+func TestThatPBKDFHandlesLeadingZeros(t *testing.T) {
+ // This test triggers a case where I_j (in step 6C) ends up with leading zero
+ // byte, meaning that len(Ijb) < v (leading zeros get stripped by big.Int).
+ // This was previously causing bug whereby certain inputs would break the
+ // derivation and produce the wrong output.
+ key := pbkdf(sha1Sum, 20, 64, []byte("\xf3\x7e\x05\xb5\x18\x32\x4b\x4b"), []byte("\x00\x00"), 2048, 1, 24)
+ expected := []byte("\x00\xf7\x59\xff\x47\xd1\x4d\xd0\x36\x65\xd5\x94\x3c\xb3\xc4\xa3\x9a\x25\x55\xc0\x2a\xed\x66\xe1")
+ if bytes.Compare(key, expected) != 0 {
+ t.Fatalf("expected key '%x', but found '%x'", expected, key)
+ }
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/pkcs12.go b/vendor/golang.org/x/crypto/pkcs12/pkcs12.go
new file mode 100644
index 00000000..e8e17998
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/pkcs12.go
@@ -0,0 +1,342 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package pkcs12 implements some of PKCS#12.
+//
+// This implementation is distilled from https://tools.ietf.org/html/rfc7292
+// and referenced documents. It is intended for decoding P12/PFX-stored
+// certificates and keys for use with the crypto/tls package.
+package pkcs12
+
+import (
+ "crypto/ecdsa"
+ "crypto/rsa"
+ "crypto/x509"
+ "crypto/x509/pkix"
+ "encoding/asn1"
+ "encoding/hex"
+ "encoding/pem"
+ "errors"
+)
+
+var (
+ oidDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 1})
+ oidEncryptedDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 6})
+
+ oidFriendlyName = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 20})
+ oidLocalKeyID = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 21})
+ oidMicrosoftCSPName = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 4, 1, 311, 17, 1})
+)
+
+type pfxPdu struct {
+ Version int
+ AuthSafe contentInfo
+ MacData macData `asn1:"optional"`
+}
+
+type contentInfo struct {
+ ContentType asn1.ObjectIdentifier
+ Content asn1.RawValue `asn1:"tag:0,explicit,optional"`
+}
+
+type encryptedData struct {
+ Version int
+ EncryptedContentInfo encryptedContentInfo
+}
+
+type encryptedContentInfo struct {
+ ContentType asn1.ObjectIdentifier
+ ContentEncryptionAlgorithm pkix.AlgorithmIdentifier
+ EncryptedContent []byte `asn1:"tag:0,optional"`
+}
+
+func (i encryptedContentInfo) Algorithm() pkix.AlgorithmIdentifier {
+ return i.ContentEncryptionAlgorithm
+}
+
+func (i encryptedContentInfo) Data() []byte { return i.EncryptedContent }
+
+type safeBag struct {
+ Id asn1.ObjectIdentifier
+ Value asn1.RawValue `asn1:"tag:0,explicit"`
+ Attributes []pkcs12Attribute `asn1:"set,optional"`
+}
+
+type pkcs12Attribute struct {
+ Id asn1.ObjectIdentifier
+ Value asn1.RawValue `ans1:"set"`
+}
+
+type encryptedPrivateKeyInfo struct {
+ AlgorithmIdentifier pkix.AlgorithmIdentifier
+ EncryptedData []byte
+}
+
+func (i encryptedPrivateKeyInfo) Algorithm() pkix.AlgorithmIdentifier {
+ return i.AlgorithmIdentifier
+}
+
+func (i encryptedPrivateKeyInfo) Data() []byte {
+ return i.EncryptedData
+}
+
+// PEM block types
+const (
+ certificateType = "CERTIFICATE"
+ privateKeyType = "PRIVATE KEY"
+)
+
+// unmarshal calls asn1.Unmarshal, but also returns an error if there is any
+// trailing data after unmarshaling.
+func unmarshal(in []byte, out interface{}) error {
+ trailing, err := asn1.Unmarshal(in, out)
+ if err != nil {
+ return err
+ }
+ if len(trailing) != 0 {
+ return errors.New("pkcs12: trailing data found")
+ }
+ return nil
+}
+
+// ConvertToPEM converts all "safe bags" contained in pfxData to PEM blocks.
+func ToPEM(pfxData []byte, password string) ([]*pem.Block, error) {
+ encodedPassword, err := bmpString(password)
+ if err != nil {
+ return nil, ErrIncorrectPassword
+ }
+
+ bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword)
+
+ blocks := make([]*pem.Block, 0, len(bags))
+ for _, bag := range bags {
+ block, err := convertBag(&bag, encodedPassword)
+ if err != nil {
+ return nil, err
+ }
+ blocks = append(blocks, block)
+ }
+
+ return blocks, nil
+}
+
+func convertBag(bag *safeBag, password []byte) (*pem.Block, error) {
+ block := &pem.Block{
+ Headers: make(map[string]string),
+ }
+
+ for _, attribute := range bag.Attributes {
+ k, v, err := convertAttribute(&attribute)
+ if err != nil {
+ return nil, err
+ }
+ block.Headers[k] = v
+ }
+
+ switch {
+ case bag.Id.Equal(oidCertBag):
+ block.Type = certificateType
+ certsData, err := decodeCertBag(bag.Value.Bytes)
+ if err != nil {
+ return nil, err
+ }
+ block.Bytes = certsData
+ case bag.Id.Equal(oidPKCS8ShroundedKeyBag):
+ block.Type = privateKeyType
+
+ key, err := decodePkcs8ShroudedKeyBag(bag.Value.Bytes, password)
+ if err != nil {
+ return nil, err
+ }
+
+ switch key := key.(type) {
+ case *rsa.PrivateKey:
+ block.Bytes = x509.MarshalPKCS1PrivateKey(key)
+ case *ecdsa.PrivateKey:
+ block.Bytes, err = x509.MarshalECPrivateKey(key)
+ if err != nil {
+ return nil, err
+ }
+ default:
+ return nil, errors.New("found unknown private key type in PKCS#8 wrapping")
+ }
+ default:
+ return nil, errors.New("don't know how to convert a safe bag of type " + bag.Id.String())
+ }
+ return block, nil
+}
+
+func convertAttribute(attribute *pkcs12Attribute) (key, value string, err error) {
+ isString := false
+
+ switch {
+ case attribute.Id.Equal(oidFriendlyName):
+ key = "friendlyName"
+ isString = true
+ case attribute.Id.Equal(oidLocalKeyID):
+ key = "localKeyId"
+ case attribute.Id.Equal(oidMicrosoftCSPName):
+ // This key is chosen to match OpenSSL.
+ key = "Microsoft CSP Name"
+ isString = true
+ default:
+ return "", "", errors.New("pkcs12: unknown attribute with OID " + attribute.Id.String())
+ }
+
+ if isString {
+ if err := unmarshal(attribute.Value.Bytes, &attribute.Value); err != nil {
+ return "", "", err
+ }
+ if value, err = decodeBMPString(attribute.Value.Bytes); err != nil {
+ return "", "", err
+ }
+ } else {
+ var id []byte
+ if err := unmarshal(attribute.Value.Bytes, &id); err != nil {
+ return "", "", err
+ }
+ value = hex.EncodeToString(id)
+ }
+
+ return key, value, nil
+}
+
+// Decode extracts a certificate and private key from pfxData. This function
+// assumes that there is only one certificate and only one private key in the
+// pfxData.
+func Decode(pfxData []byte, password string) (privateKey interface{}, certificate *x509.Certificate, err error) {
+ encodedPassword, err := bmpString(password)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ if len(bags) != 2 {
+ err = errors.New("pkcs12: expected exactly two safe bags in the PFX PDU")
+ return
+ }
+
+ for _, bag := range bags {
+ switch {
+ case bag.Id.Equal(oidCertBag):
+ if certificate != nil {
+ err = errors.New("pkcs12: expected exactly one certificate bag")
+ }
+
+ certsData, err := decodeCertBag(bag.Value.Bytes)
+ if err != nil {
+ return nil, nil, err
+ }
+ certs, err := x509.ParseCertificates(certsData)
+ if err != nil {
+ return nil, nil, err
+ }
+ if len(certs) != 1 {
+ err = errors.New("pkcs12: expected exactly one certificate in the certBag")
+ return nil, nil, err
+ }
+ certificate = certs[0]
+
+ case bag.Id.Equal(oidPKCS8ShroundedKeyBag):
+ if privateKey != nil {
+ err = errors.New("pkcs12: expected exactly one key bag")
+ }
+
+ if privateKey, err = decodePkcs8ShroudedKeyBag(bag.Value.Bytes, encodedPassword); err != nil {
+ return nil, nil, err
+ }
+ }
+ }
+
+ if certificate == nil {
+ return nil, nil, errors.New("pkcs12: certificate missing")
+ }
+ if privateKey == nil {
+ return nil, nil, errors.New("pkcs12: private key missing")
+ }
+
+ return
+}
+
+func getSafeContents(p12Data, password []byte) (bags []safeBag, updatedPassword []byte, err error) {
+ pfx := new(pfxPdu)
+ if err := unmarshal(p12Data, pfx); err != nil {
+ return nil, nil, errors.New("pkcs12: error reading P12 data: " + err.Error())
+ }
+
+ if pfx.Version != 3 {
+ return nil, nil, NotImplementedError("can only decode v3 PFX PDU's")
+ }
+
+ if !pfx.AuthSafe.ContentType.Equal(oidDataContentType) {
+ return nil, nil, NotImplementedError("only password-protected PFX is implemented")
+ }
+
+ // unmarshal the explicit bytes in the content for type 'data'
+ if err := unmarshal(pfx.AuthSafe.Content.Bytes, &pfx.AuthSafe.Content); err != nil {
+ return nil, nil, err
+ }
+
+ if len(pfx.MacData.Mac.Algorithm.Algorithm) == 0 {
+ return nil, nil, errors.New("pkcs12: no MAC in data")
+ }
+
+ if err := verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password); err != nil {
+ if err == ErrIncorrectPassword && len(password) == 2 && password[0] == 0 && password[1] == 0 {
+ // some implementations use an empty byte array
+ // for the empty string password try one more
+ // time with empty-empty password
+ password = nil
+ err = verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password)
+ }
+ if err != nil {
+ return nil, nil, err
+ }
+ }
+
+ var authenticatedSafe []contentInfo
+ if err := unmarshal(pfx.AuthSafe.Content.Bytes, &authenticatedSafe); err != nil {
+ return nil, nil, err
+ }
+
+ if len(authenticatedSafe) != 2 {
+ return nil, nil, NotImplementedError("expected exactly two items in the authenticated safe")
+ }
+
+ for _, ci := range authenticatedSafe {
+ var data []byte
+
+ switch {
+ case ci.ContentType.Equal(oidDataContentType):
+ if err := unmarshal(ci.Content.Bytes, &data); err != nil {
+ return nil, nil, err
+ }
+ case ci.ContentType.Equal(oidEncryptedDataContentType):
+ var encryptedData encryptedData
+ if err := unmarshal(ci.Content.Bytes, &encryptedData); err != nil {
+ return nil, nil, err
+ }
+ if encryptedData.Version != 0 {
+ return nil, nil, NotImplementedError("only version 0 of EncryptedData is supported")
+ }
+ if data, err = pbDecrypt(encryptedData.EncryptedContentInfo, password); err != nil {
+ return nil, nil, err
+ }
+ default:
+ return nil, nil, NotImplementedError("only data and encryptedData content types are supported in authenticated safe")
+ }
+
+ var safeContents []safeBag
+ if err := unmarshal(data, &safeContents); err != nil {
+ return nil, nil, err
+ }
+ bags = append(bags, safeContents...)
+ }
+
+ return bags, password, nil
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go b/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go
new file mode 100644
index 00000000..14dd2a6c
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go
@@ -0,0 +1,138 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "crypto/rsa"
+ "crypto/tls"
+ "encoding/base64"
+ "encoding/pem"
+ "testing"
+)
+
+func TestPfx(t *testing.T) {
+ for commonName, base64P12 := range testdata {
+ p12, _ := base64.StdEncoding.DecodeString(base64P12)
+
+ priv, cert, err := Decode(p12, "")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if err := priv.(*rsa.PrivateKey).Validate(); err != nil {
+ t.Errorf("error while validating private key: %v", err)
+ }
+
+ if cert.Subject.CommonName != commonName {
+ t.Errorf("expected common name to be %q, but found %q", commonName, cert.Subject.CommonName)
+ }
+ }
+}
+
+func TestPEM(t *testing.T) {
+ for commonName, base64P12 := range testdata {
+ p12, _ := base64.StdEncoding.DecodeString(base64P12)
+
+ blocks, err := ToPEM(p12, "")
+ if err != nil {
+ t.Fatalf("error while converting to PEM: %s", err)
+ }
+
+ var pemData []byte
+ for _, b := range blocks {
+ pemData = append(pemData, pem.EncodeToMemory(b)...)
+ }
+
+ cert, err := tls.X509KeyPair(pemData, pemData)
+ if err != nil {
+ t.Errorf("err while converting to key pair: %v", err)
+ }
+ config := tls.Config{
+ Certificates: []tls.Certificate{cert},
+ }
+ config.BuildNameToCertificate()
+
+ if _, exists := config.NameToCertificate[commonName]; !exists {
+ t.Errorf("did not find our cert in PEM?: %v", config.NameToCertificate)
+ }
+ }
+}
+
+func ExampleToPEM() {
+ p12, _ := base64.StdEncoding.DecodeString(`MIIJzgIBAzCCCZQGCS ... CA+gwggPk==`)
+
+ blocks, err := ToPEM(p12, "password")
+ if err != nil {
+ panic(err)
+ }
+
+ var pemData []byte
+ for _, b := range blocks {
+ pemData = append(pemData, pem.EncodeToMemory(b)...)
+ }
+
+ // then use PEM data for tls to construct tls certificate:
+ cert, err := tls.X509KeyPair(pemData, pemData)
+ if err != nil {
+ panic(err)
+ }
+
+ config := &tls.Config{
+ Certificates: []tls.Certificate{cert},
+ }
+
+ _ = config
+}
+
+var testdata = map[string]string{
+ // 'null' password test case
+ "Windows Azure Tools": `MIIKDAIBAzCCCcwGCSqGSIb3DQEHAaCCCb0Eggm5MIIJtTCCBe4GCSqGSIb3DQEHAaCCBd8EggXbMIIF1zCCBdMGCyqGSIb3DQEMCgECoIIE7jCCBOowHAYKKoZIhvcNAQwBAzAOBAhStUNnlTGV+gICB9AEggTIJ81JIossF6boFWpPtkiQRPtI6DW6e9QD4/WvHAVrM2bKdpMzSMsCML5NyuddANTKHBVq00Jc9keqGNAqJPKkjhSUebzQFyhe0E1oI9T4zY5UKr/I8JclOeccH4QQnsySzYUG2SnniXnQ+JrG3juetli7EKth9h6jLc6xbubPadY5HMB3wL/eG/kJymiXwU2KQ9Mgd4X6jbcV+NNCE/8jbZHvSTCPeYTJIjxfeX61Sj5kFKUCzERbsnpyevhY3X0eYtEDezZQarvGmXtMMdzf8HJHkWRdk9VLDLgjk8uiJif/+X4FohZ37ig0CpgC2+dP4DGugaZZ51hb8tN9GeCKIsrmWogMXDIVd0OACBp/EjJVmFB6y0kUCXxUE0TZt0XA1tjAGJcjDUpBvTntZjPsnH/4ZySy+s2d9OOhJ6pzRQBRm360TzkFdSwk9DLiLdGfv4pwMMu/vNGBlqjP/1sQtj+jprJiD1sDbCl4AdQZVoMBQHadF2uSD4/o17XG/Ci0r2h6Htc2yvZMAbEY4zMjjIn2a+vqIxD6onexaek1R3zbkS9j19D6EN9EWn8xgz80YRCyW65znZk8xaIhhvlU/mg7sTxeyuqroBZNcq6uDaQTehDpyH7bY2l4zWRpoj10a6JfH2q5shYz8Y6UZC/kOTfuGqbZDNZWro/9pYquvNNW0M847E5t9bsf9VkAAMHRGBbWoVoU9VpI0UnoXSfvpOo+aXa2DSq5sHHUTVY7A9eov3z5IqT+pligx11xcs+YhDWcU8di3BTJisohKvv5Y8WSkm/rloiZd4ig269k0jTRk1olP/vCksPli4wKG2wdsd5o42nX1yL7mFfXocOANZbB+5qMkiwdyoQSk+Vq+C8nAZx2bbKhUq2MbrORGMzOe0Hh0x2a0PeObycN1Bpyv7Mp3ZI9h5hBnONKCnqMhtyQHUj/nNvbJUnDVYNfoOEqDiEqqEwB7YqWzAKz8KW0OIqdlM8uiQ4JqZZlFllnWJUfaiDrdFM3lYSnFQBkzeVlts6GpDOOBjCYd7dcCNS6kq6pZC6p6HN60Twu0JnurZD6RT7rrPkIGE8vAenFt4iGe/yF52fahCSY8Ws4K0UTwN7bAS+4xRHVCWvE8sMRZsRCHizb5laYsVrPZJhE6+hux6OBb6w8kwPYXc+ud5v6UxawUWgt6uPwl8mlAtU9Z7Miw4Nn/wtBkiLL/ke1UI1gqJtcQXgHxx6mzsjh41+nAgTvdbsSEyU6vfOmxGj3Rwc1eOrIhJUqn5YjOWfzzsz/D5DzWKmwXIwdspt1p+u+kol1N3f2wT9fKPnd/RGCb4g/1hc3Aju4DQYgGY782l89CEEdalpQ/35bQczMFk6Fje12HykakWEXd/bGm9Unh82gH84USiRpeOfQvBDYoqEyrY3zkFZzBjhDqa+jEcAj41tcGx47oSfDq3iVYCdL7HSIjtnyEktVXd7mISZLoMt20JACFcMw+mrbjlug+eU7o2GR7T+LwtOp/p4LZqyLa7oQJDwde1BNZtm3TCK2P1mW94QDL0nDUps5KLtr1DaZXEkRbjSJub2ZE9WqDHyU3KA8G84Tq/rN1IoNu/if45jacyPje1Npj9IftUZSP22nV7HMwZtwQ4P4MYHRMBMGCSqGSIb3DQEJFTEGBAQBAAAAMFsGCSqGSIb3DQEJFDFOHkwAewBCADQAQQA0AEYARQBCADAALQBBADEAOABBAC0ANAA0AEIAQgAtAEIANQBGADIALQA0ADkAMQBFAEYAMQA1ADIAQgBBADEANgB9MF0GCSsGAQQBgjcRATFQHk4ATQBpAGMAcgBvAHMAbwBmAHQAIABTAG8AZgB0AHcAYQByAGUAIABLAGUAeQAgAFMAdABvAHIAYQBnAGUAIABQAHIAbwB2AGkAZABlAHIwggO/BgkqhkiG9w0BBwagggOwMIIDrAIBADCCA6UGCSqGSIb3DQEHATAcBgoqhkiG9w0BDAEGMA4ECEBk5ZAYpu0WAgIH0ICCA3hik4mQFGpw9Ha8TQPtk+j2jwWdxfF0+sTk6S8PTsEfIhB7wPltjiCK92Uv2tCBQnodBUmatIfkpnRDEySmgmdglmOCzj204lWAMRs94PoALGn3JVBXbO1vIDCbAPOZ7Z0Hd0/1t2hmk8v3//QJGUg+qr59/4y/MuVfIg4qfkPcC2QSvYWcK3oTf6SFi5rv9B1IOWFgN5D0+C+x/9Lb/myPYX+rbOHrwtJ4W1fWKoz9g7wwmGFA9IJ2DYGuH8ifVFbDFT1Vcgsvs8arSX7oBsJVW0qrP7XkuDRe3EqCmKW7rBEwYrFznhxZcRDEpMwbFoSvgSIZ4XhFY9VKYglT+JpNH5iDceYEBOQL4vBLpxNUk3l5jKaBNxVa14AIBxq18bVHJ+STInhLhad4u10v/Xbx7wIL3f9DX1yLAkPrpBYbNHS2/ew6H/ySDJnoIDxkw2zZ4qJ+qUJZ1S0lbZVG+VT0OP5uF6tyOSpbMlcGkdl3z254n6MlCrTifcwkzscysDsgKXaYQw06rzrPW6RDub+t+hXzGny799fS9jhQMLDmOggaQ7+LA4oEZsfT89HLMWxJYDqjo3gIfjciV2mV54R684qLDS+AO09U49e6yEbwGlq8lpmO/pbXCbpGbB1b3EomcQbxdWxW2WEkkEd/VBn81K4M3obmywwXJkw+tPXDXfBmzzaqqCR+onMQ5ME1nMkY8ybnfoCc1bDIupjVWsEL2Wvq752RgI6KqzVNr1ew1IdqV5AWN2fOfek+0vi3Jd9FHF3hx8JMwjJL9dZsETV5kHtYJtE7wJ23J68BnCt2eI0GEuwXcCf5EdSKN/xXCTlIokc4Qk/gzRdIZsvcEJ6B1lGovKG54X4IohikqTjiepjbsMWj38yxDmK3mtENZ9ci8FPfbbvIEcOCZIinuY3qFUlRSbx7VUerEoV1IP3clUwexVQo4lHFee2jd7ocWsdSqSapW7OWUupBtDzRkqVhE7tGria+i1W2d6YLlJ21QTjyapWJehAMO637OdbJCCzDs1cXbodRRE7bsP492ocJy8OX66rKdhYbg8srSFNKdb3pF3UDNbN9jhI/t8iagRhNBhlQtTr1me2E/c86Q18qcRXl4bcXTt6acgCeffK6Y26LcVlrgjlD33AEYRRUeyC+rpxbT0aMjdFderlndKRIyG23mSp0HaUwNzAfMAcGBSsOAwIaBBRlviCbIyRrhIysg2dc/KbLFTc2vQQUg4rfwHMM4IKYRD/fsd1x6dda+wQ=`,
+ // empty string password test case
+ "testing@example.com": `MIIJzgIBAzCCCZQGCSqGSIb3DQEHAaCCCYUEggmBMIIJfTCCA/cGCSqGSIb3DQEHBqCCA+gwggPk
+AgEAMIID3QYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIIszfRGqcmPcCAggAgIIDsOZ9Eg1L
+s5Wx8JhYoV3HAL4aRnkAWvTYB5NISZOgSgIQTssmt/3A7134dibTmaT/93LikkL3cTKLnQzJ4wDf
+YZ1bprpVJvUqz+HFT79m27bP9zYXFrvxWBJbxjYKTSjQMgz+h8LAEpXXGajCmxMJ1oCOtdXkhhzc
+LdZN6SAYgtmtyFnCdMEDskSggGuLb3fw84QEJ/Sj6FAULXunW/CPaS7Ce0TMsKmNU/jfFWj3yXXw
+ro0kwjKiVLpVFlnBlHo2OoVU7hmkm59YpGhLgS7nxLD3n7nBroQ0ID1+8R01NnV9XLGoGzxMm1te
+6UyTCkr5mj+kEQ8EP1Ys7g/TC411uhVWySMt/rcpkx7Vz1r9kYEAzJpONAfr6cuEVkPKrxpq4Fh0
+2fzlKBky0i/hrfIEUmngh+ERHUb/Mtv/fkv1j5w9suESbhsMLLiCXAlsP1UWMX+3bNizi3WVMEts
+FM2k9byn+p8IUD/A8ULlE4kEaWeoc+2idkCNQkLGuIdGUXUFVm58se0auUkVRoRJx8x4CkMesT8j
+b1H831W66YRWoEwwDQp2kK1lA2vQXxdVHWlFevMNxJeromLzj3ayiaFrfByeUXhR2S+Hpm+c0yNR
+4UVU9WED2kacsZcpRm9nlEa5sr28mri5JdBrNa/K02OOhvKCxr5ZGmbOVzUQKla2z4w+Ku9k8POm
+dfDNU/fGx1b5hcFWtghXe3msWVsSJrQihnN6q1ughzNiYZlJUGcHdZDRtiWwCFI0bR8h/Dmg9uO9
+4rawQQrjIRT7B8yF3UbkZyAqs8Ppb1TsMeNPHh1rxEfGVQknh/48ouJYsmtbnzugTUt3mJCXXiL+
+XcPMV6bBVAUu4aaVKSmg9+yJtY4/VKv10iw88ktv29fViIdBe3t6l/oPuvQgbQ8dqf4T8w0l/uKZ
+9lS1Na9jfT1vCoS7F5TRi+tmyj1vL5kr/amEIW6xKEP6oeAMvCMtbPAzVEj38zdJ1R22FfuIBxkh
+f0Zl7pdVbmzRxl/SBx9iIBJSqAvcXItiT0FIj8HxQ+0iZKqMQMiBuNWJf5pYOLWGrIyntCWwHuaQ
+wrx0sTGuEL9YXLEAsBDrsvzLkx/56E4INGZFrH8G7HBdW6iGqb22IMI4GHltYSyBRKbB0gadYTyv
+abPEoqww8o7/85aPSzOTJ/53ozD438Q+d0u9SyDuOb60SzCD/zPuCEd78YgtXJwBYTuUNRT27FaM
+3LGMX8Hz+6yPNRnmnA2XKPn7dx/IlaqAjIs8MIIFfgYJKoZIhvcNAQcBoIIFbwSCBWswggVnMIIF
+YwYLKoZIhvcNAQwKAQKgggTuMIIE6jAcBgoqhkiG9w0BDAEDMA4ECJr0cClYqOlcAgIIAASCBMhe
+OQSiP2s0/46ONXcNeVAkz2ksW3u/+qorhSiskGZ0b3dFa1hhgBU2Q7JVIkc4Hf7OXaT1eVQ8oqND
+uhqsNz83/kqYo70+LS8Hocj49jFgWAKrf/yQkdyP1daHa2yzlEw4mkpqOfnIORQHvYCa8nEApspZ
+wVu8y6WVuLHKU67mel7db2xwstQp7PRuSAYqGjTfAylElog8ASdaqqYbYIrCXucF8iF9oVgmb/Qo
+xrXshJ9aSLO4MuXlTPELmWgj07AXKSb90FKNihE+y0bWb9LPVFY1Sly3AX9PfrtkSXIZwqW3phpv
+MxGxQl/R6mr1z+hlTfY9Wdpb5vlKXPKA0L0Rt8d2pOesylFi6esJoS01QgP1kJILjbrV731kvDc0
+Jsd+Oxv4BMwA7ClG8w1EAOInc/GrV1MWFGw/HeEqj3CZ/l/0jv9bwkbVeVCiIhoL6P6lVx9pXq4t
+KZ0uKg/tk5TVJmG2vLcMLvezD0Yk3G2ZOMrywtmskrwoF7oAUpO9e87szoH6fEvUZlkDkPVW1NV4
+cZk3DBSQiuA3VOOg8qbo/tx/EE3H59P0axZWno2GSB0wFPWd1aj+b//tJEJHaaNR6qPRj4IWj9ru
+Qbc8eRAcVWleHg8uAehSvUXlFpyMQREyrnpvMGddpiTC8N4UMrrBRhV7+UbCOWhxPCbItnInBqgl
+1JpSZIP7iUtsIMdu3fEC2cdbXMTRul+4rdzUR7F9OaezV3jjvcAbDvgbK1CpyC+MJ1Mxm/iTgk9V
+iUArydhlR8OniN84GyGYoYCW9O/KUwb6ASmeFOu/msx8x6kAsSQHIkKqMKv0TUR3kZnkxUvdpBGP
+KTl4YCTvNGX4dYALBqrAETRDhua2KVBD/kEttDHwBNVbN2xi81+Mc7ml461aADfk0c66R/m2sjHB
+2tN9+wG12OIWFQjL6wF/UfJMYamxx2zOOExiId29Opt57uYiNVLOO4ourPewHPeH0u8Gz35aero7
+lkt7cZAe1Q0038JUuE/QGlnK4lESK9UkSIQAjSaAlTsrcfwtQxB2EjoOoLhwH5mvxUEmcNGNnXUc
+9xj3M5BD3zBz3Ft7G3YMMDwB1+zC2l+0UG0MGVjMVaeoy32VVNvxgX7jk22OXG1iaOB+PY9kdk+O
+X+52BGSf/rD6X0EnqY7XuRPkMGgjtpZeAYxRQnFtCZgDY4wYheuxqSSpdF49yNczSPLkgB3CeCfS
++9NTKN7aC6hBbmW/8yYh6OvSiCEwY0lFS/T+7iaVxr1loE4zI1y/FFp4Pe1qfLlLttVlkygga2UU
+SCunTQ8UB/M5IXWKkhMOO11dP4niWwb39Y7pCWpau7mwbXOKfRPX96cgHnQJK5uG+BesDD1oYnX0
+6frN7FOnTSHKruRIwuI8KnOQ/I+owmyz71wiv5LMQt+yM47UrEjB/EZa5X8dpEwOZvkdqL7utcyo
+l0XH5kWMXdW856LL/FYftAqJIDAmtX1TXF/rbP6mPyN/IlDC0gjP84Uzd/a2UyTIWr+wk49Ek3vQ
+/uDamq6QrwAxVmNh5Tset5Vhpc1e1kb7mRMZIzxSP8JcTuYd45oFKi98I8YjvueHVZce1g7OudQP
+SbFQoJvdT46iBg1TTatlltpOiH2mFaxWVS0xYjAjBgkqhkiG9w0BCRUxFgQUdA9eVqvETX4an/c8
+p8SsTugkit8wOwYJKoZIhvcNAQkUMS4eLABGAHIAaQBlAG4AZABsAHkAIABuAGEAbQBlACAAZgBv
+AHIAIABjAGUAcgB0MDEwITAJBgUrDgMCGgUABBRFsNz3Zd1O1GI8GTuFwCWuDOjEEwQIuBEfIcAy
+HQ8CAggA`,
+}
diff --git a/vendor/golang.org/x/crypto/pkcs12/safebags.go b/vendor/golang.org/x/crypto/pkcs12/safebags.go
new file mode 100644
index 00000000..def1f7b9
--- /dev/null
+++ b/vendor/golang.org/x/crypto/pkcs12/safebags.go
@@ -0,0 +1,57 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package pkcs12
+
+import (
+ "crypto/x509"
+ "encoding/asn1"
+ "errors"
+)
+
+var (
+ // see https://tools.ietf.org/html/rfc7292#appendix-D
+ oidCertTypeX509Certificate = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 22, 1})
+ oidPKCS8ShroundedKeyBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 2})
+ oidCertBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 3})
+)
+
+type certBag struct {
+ Id asn1.ObjectIdentifier
+ Data []byte `asn1:"tag:0,explicit"`
+}
+
+func decodePkcs8ShroudedKeyBag(asn1Data, password []byte) (privateKey interface{}, err error) {
+ pkinfo := new(encryptedPrivateKeyInfo)
+ if err = unmarshal(asn1Data, pkinfo); err != nil {
+ return nil, errors.New("pkcs12: error decoding PKCS#8 shrouded key bag: " + err.Error())
+ }
+
+ pkData, err := pbDecrypt(pkinfo, password)
+ if err != nil {
+ return nil, errors.New("pkcs12: error decrypting PKCS#8 shrouded key bag: " + err.Error())
+ }
+
+ ret := new(asn1.RawValue)
+ if err = unmarshal(pkData, ret); err != nil {
+ return nil, errors.New("pkcs12: error unmarshaling decrypted private key: " + err.Error())
+ }
+
+ if privateKey, err = x509.ParsePKCS8PrivateKey(pkData); err != nil {
+ return nil, errors.New("pkcs12: error parsing PKCS#8 private key: " + err.Error())
+ }
+
+ return privateKey, nil
+}
+
+func decodeCertBag(asn1Data []byte) (x509Certificates []byte, err error) {
+ bag := new(certBag)
+ if err := unmarshal(asn1Data, bag); err != nil {
+ return nil, errors.New("pkcs12: error decoding cert bag: " + err.Error())
+ }
+ if !bag.Id.Equal(oidCertTypeX509Certificate) {
+ return nil, NotImplementedError("only X509 certificates are supported")
+ }
+ return bag.Data, nil
+}
diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go
index 3272d7c9..8ce41858 100644
--- a/vendor/golang.org/x/crypto/ssh/keys.go
+++ b/vendor/golang.org/x/crypto/ssh/keys.go
@@ -267,28 +267,6 @@ func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error {
return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), crypto.SHA1, digest, sig.Blob)
}
-type rsaPrivateKey struct {
- *rsa.PrivateKey
-}
-
-func (r *rsaPrivateKey) PublicKey() PublicKey {
- return (*rsaPublicKey)(&r.PrivateKey.PublicKey)
-}
-
-func (r *rsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {
- h := crypto.SHA1.New()
- h.Write(data)
- digest := h.Sum(nil)
- blob, err := rsa.SignPKCS1v15(rand, r.PrivateKey, crypto.SHA1, digest)
- if err != nil {
- return nil, err
- }
- return &Signature{
- Format: r.PublicKey().Type(),
- Blob: blob,
- }, nil
-}
-
type dsaPublicKey dsa.PublicKey
func (r *dsaPublicKey) Type() string {
@@ -496,72 +474,112 @@ func (key *ecdsaPublicKey) Verify(data []byte, sig *Signature) error {
return errors.New("ssh: signature did not verify")
}
-type ecdsaPrivateKey struct {
- *ecdsa.PrivateKey
+// NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey,
+// *ecdsa.PrivateKey or any other crypto.Signer and returns a corresponding
+// Signer instance. ECDSA keys must use P-256, P-384 or P-521.
+func NewSignerFromKey(key interface{}) (Signer, error) {
+ switch key := key.(type) {
+ case crypto.Signer:
+ return NewSignerFromSigner(key)
+ case *dsa.PrivateKey:
+ return &dsaPrivateKey{key}, nil
+ default:
+ return nil, fmt.Errorf("ssh: unsupported key type %T", key)
+ }
}
-func (k *ecdsaPrivateKey) PublicKey() PublicKey {
- return (*ecdsaPublicKey)(&k.PrivateKey.PublicKey)
+type wrappedSigner struct {
+ signer crypto.Signer
+ pubKey PublicKey
}
-func (k *ecdsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {
- h := ecHash(k.PrivateKey.PublicKey.Curve).New()
- h.Write(data)
- digest := h.Sum(nil)
- r, s, err := ecdsa.Sign(rand, k.PrivateKey, digest)
+// NewSignerFromSigner takes any crypto.Signer implementation and
+// returns a corresponding Signer interface. This can be used, for
+// example, with keys kept in hardware modules.
+func NewSignerFromSigner(signer crypto.Signer) (Signer, error) {
+ pubKey, err := NewPublicKey(signer.Public())
if err != nil {
return nil, err
}
- sig := make([]byte, intLength(r)+intLength(s))
- rest := marshalInt(sig, r)
- marshalInt(rest, s)
+ return &wrappedSigner{signer, pubKey}, nil
+}
+
+func (s *wrappedSigner) PublicKey() PublicKey {
+ return s.pubKey
+}
+
+func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {
+ var hashFunc crypto.Hash
+
+ switch key := s.pubKey.(type) {
+ case *rsaPublicKey, *dsaPublicKey:
+ hashFunc = crypto.SHA1
+ case *ecdsaPublicKey:
+ hashFunc = ecHash(key.Curve)
+ default:
+ return nil, fmt.Errorf("ssh: unsupported key type %T", key)
+ }
+
+ h := hashFunc.New()
+ h.Write(data)
+ digest := h.Sum(nil)
+
+ signature, err := s.signer.Sign(rand, digest, hashFunc)
+ if err != nil {
+ return nil, err
+ }
+
+ // crypto.Signer.Sign is expected to return an ASN.1-encoded signature
+ // for ECDSA and DSA, but that's not the encoding expected by SSH, so
+ // re-encode.
+ switch s.pubKey.(type) {
+ case *ecdsaPublicKey, *dsaPublicKey:
+ type asn1Signature struct {
+ R, S *big.Int
+ }
+ asn1Sig := new(asn1Signature)
+ _, err := asn1.Unmarshal(signature, asn1Sig)
+ if err != nil {
+ return nil, err
+ }
+
+ switch s.pubKey.(type) {
+ case *ecdsaPublicKey:
+ signature = Marshal(asn1Sig)
+
+ case *dsaPublicKey:
+ signature = make([]byte, 40)
+ r := asn1Sig.R.Bytes()
+ s := asn1Sig.S.Bytes()
+ copy(signature[20-len(r):20], r)
+ copy(signature[40-len(s):40], s)
+ }
+ }
+
return &Signature{
- Format: k.PublicKey().Type(),
- Blob: sig,
+ Format: s.pubKey.Type(),
+ Blob: signature,
}, nil
}
-// NewSignerFromKey takes a pointer to rsa, dsa or ecdsa PrivateKey
-// returns a corresponding Signer instance. EC keys should use P256,
-// P384 or P521.
-func NewSignerFromKey(k interface{}) (Signer, error) {
- var sshKey Signer
- switch t := k.(type) {
- case *rsa.PrivateKey:
- sshKey = &rsaPrivateKey{t}
- case *dsa.PrivateKey:
- sshKey = &dsaPrivateKey{t}
- case *ecdsa.PrivateKey:
- if !supportedEllipticCurve(t.Curve) {
- return nil, errors.New("ssh: only P256, P384 and P521 EC keys are supported.")
- }
-
- sshKey = &ecdsaPrivateKey{t}
- default:
- return nil, fmt.Errorf("ssh: unsupported key type %T", k)
- }
- return sshKey, nil
-}
-
-// NewPublicKey takes a pointer to rsa, dsa or ecdsa PublicKey
-// and returns a corresponding ssh PublicKey instance. EC keys should use P256, P384 or P521.
-func NewPublicKey(k interface{}) (PublicKey, error) {
- var sshKey PublicKey
- switch t := k.(type) {
+// NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey or
+// any other crypto.Signer and returns a corresponding Signer instance. ECDSA
+// keys must use P-256, P-384 or P-521.
+func NewPublicKey(key interface{}) (PublicKey, error) {
+ switch key := key.(type) {
case *rsa.PublicKey:
- sshKey = (*rsaPublicKey)(t)
+ return (*rsaPublicKey)(key), nil
case *ecdsa.PublicKey:
- if !supportedEllipticCurve(t.Curve) {
- return nil, errors.New("ssh: only P256, P384 and P521 EC keys are supported.")
+ if !supportedEllipticCurve(key.Curve) {
+ return nil, errors.New("ssh: only P-256, P-384 and P-521 EC keys are supported.")
}
- sshKey = (*ecdsaPublicKey)(t)
+ return (*ecdsaPublicKey)(key), nil
case *dsa.PublicKey:
- sshKey = (*dsaPublicKey)(t)
+ return (*dsaPublicKey)(key), nil
default:
- return nil, fmt.Errorf("ssh: unsupported key type %T", k)
+ return nil, fmt.Errorf("ssh: unsupported key type %T", key)
}
- return sshKey, nil
}
// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports
diff --git a/vendor/golang.org/x/crypto/ssh/keys_test.go b/vendor/golang.org/x/crypto/ssh/keys_test.go
index 36b97ad2..b4cceaff 100644
--- a/vendor/golang.org/x/crypto/ssh/keys_test.go
+++ b/vendor/golang.org/x/crypto/ssh/keys_test.go
@@ -57,12 +57,12 @@ func TestUnsupportedCurves(t *testing.T) {
t.Fatalf("GenerateKey: %v", err)
}
- if _, err = NewSignerFromKey(raw); err == nil || !strings.Contains(err.Error(), "only P256") {
- t.Fatalf("NewPrivateKey should not succeed with P224, got: %v", err)
+ if _, err = NewSignerFromKey(raw); err == nil || !strings.Contains(err.Error(), "only P-256") {
+ t.Fatalf("NewPrivateKey should not succeed with P-224, got: %v", err)
}
- if _, err = NewPublicKey(&raw.PublicKey); err == nil || !strings.Contains(err.Error(), "only P256") {
- t.Fatalf("NewPublicKey should not succeed with P224, got: %v", err)
+ if _, err = NewPublicKey(&raw.PublicKey); err == nil || !strings.Contains(err.Error(), "only P-256") {
+ t.Fatalf("NewPublicKey should not succeed with P-224, got: %v", err)
}
}
diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go
index baedf5bb..4781eb78 100644
--- a/vendor/golang.org/x/crypto/ssh/server.go
+++ b/vendor/golang.org/x/crypto/ssh/server.go
@@ -66,9 +66,11 @@ type ServerConfig struct {
// attempts.
AuthLogCallback func(conn ConnMetadata, method string, err error)
- // ServerVersion is the version identification string to
- // announce in the public handshake.
+ // ServerVersion is the version identification string to announce in
+ // the public handshake.
// If empty, a reasonable default is used.
+ // Note that RFC 4253 section 4.2 requires that this string start with
+ // "SSH-2.0-".
ServerVersion string
}
diff --git a/vendor/golang.org/x/crypto/ssh/session.go b/vendor/golang.org/x/crypto/ssh/session.go
index 3b42b508..fd10cd1a 100644
--- a/vendor/golang.org/x/crypto/ssh/session.go
+++ b/vendor/golang.org/x/crypto/ssh/session.go
@@ -339,7 +339,7 @@ func (s *Session) Shell() error {
ok, err := s.ch.SendRequest("shell", true, nil)
if err == nil && !ok {
- return fmt.Errorf("ssh: cound not start shell")
+ return errors.New("ssh: could not start shell")
}
if err != nil {
return err
diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go
index e7ee376c..77b64d0c 100644
--- a/vendor/golang.org/x/net/context/context.go
+++ b/vendor/golang.org/x/net/context/context.go
@@ -189,7 +189,7 @@ func Background() Context {
}
// TODO returns a non-nil, empty Context. Code should use context.TODO when
-// it's unclear which Context to use or it's is not yet available (because the
+// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
// parameter). TODO is recognized by static analysis tools that determine
// whether Contexts are propagated correctly in a program.
diff --git a/vendor/golang.org/x/net/context/context_test.go b/vendor/golang.org/x/net/context/context_test.go
index e64afa64..05345fc5 100644
--- a/vendor/golang.org/x/net/context/context_test.go
+++ b/vendor/golang.org/x/net/context/context_test.go
@@ -536,7 +536,7 @@ func testLayers(t *testing.T, seed int64, testTimeout bool) {
if testTimeout {
select {
case <-ctx.Done():
- case <-time.After(timeout + timeout/10):
+ case <-time.After(timeout + 100*time.Millisecond):
errorf("ctx should have timed out")
}
checkValues("after timeout")
diff --git a/vendor/golang.org/x/net/http2/.gitignore b/vendor/golang.org/x/net/http2/.gitignore
new file mode 100644
index 00000000..190f1223
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/.gitignore
@@ -0,0 +1,2 @@
+*~
+h2i/h2i
diff --git a/vendor/golang.org/x/net/http2/Dockerfile b/vendor/golang.org/x/net/http2/Dockerfile
new file mode 100644
index 00000000..53fc5257
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/Dockerfile
@@ -0,0 +1,51 @@
+#
+# This Dockerfile builds a recent curl with HTTP/2 client support, using
+# a recent nghttp2 build.
+#
+# See the Makefile for how to tag it. If Docker and that image is found, the
+# Go tests use this curl binary for integration tests.
+#
+
+FROM ubuntu:trusty
+
+RUN apt-get update && \
+ apt-get upgrade -y && \
+ apt-get install -y git-core build-essential wget
+
+RUN apt-get install -y --no-install-recommends \
+ autotools-dev libtool pkg-config zlib1g-dev \
+ libcunit1-dev libssl-dev libxml2-dev libevent-dev \
+ automake autoconf
+
+# The list of packages nghttp2 recommends for h2load:
+RUN apt-get install -y --no-install-recommends make binutils \
+ autoconf automake autotools-dev \
+ libtool pkg-config zlib1g-dev libcunit1-dev libssl-dev libxml2-dev \
+ libev-dev libevent-dev libjansson-dev libjemalloc-dev \
+ cython python3.4-dev python-setuptools
+
+# Note: setting NGHTTP2_VER before the git clone, so an old git clone isn't cached:
+ENV NGHTTP2_VER 895da9a
+RUN cd /root && git clone https://github.com/tatsuhiro-t/nghttp2.git
+
+WORKDIR /root/nghttp2
+RUN git reset --hard $NGHTTP2_VER
+RUN autoreconf -i
+RUN automake
+RUN autoconf
+RUN ./configure
+RUN make
+RUN make install
+
+WORKDIR /root
+RUN wget http://curl.haxx.se/download/curl-7.45.0.tar.gz
+RUN tar -zxvf curl-7.45.0.tar.gz
+WORKDIR /root/curl-7.45.0
+RUN ./configure --with-ssl --with-nghttp2=/usr/local
+RUN make
+RUN make install
+RUN ldconfig
+
+CMD ["-h"]
+ENTRYPOINT ["/usr/local/bin/curl"]
+
diff --git a/vendor/golang.org/x/net/http2/Makefile b/vendor/golang.org/x/net/http2/Makefile
new file mode 100644
index 00000000..55fd826f
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/Makefile
@@ -0,0 +1,3 @@
+curlimage:
+ docker build -t gohttp2/curl .
+
diff --git a/vendor/golang.org/x/net/http2/README b/vendor/golang.org/x/net/http2/README
new file mode 100644
index 00000000..360d5aa3
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/README
@@ -0,0 +1,20 @@
+This is a work-in-progress HTTP/2 implementation for Go.
+
+It will eventually live in the Go standard library and won't require
+any changes to your code to use. It will just be automatic.
+
+Status:
+
+* The server support is pretty good. A few things are missing
+ but are being worked on.
+* The client work has just started but shares a lot of code
+ is coming along much quicker.
+
+Docs are at https://godoc.org/golang.org/x/net/http2
+
+Demo test server at https://http2.golang.org/
+
+Help & bug reports welcome!
+
+Contributing: https://golang.org/doc/contribute.html
+Bugs: https://golang.org/issue/new?title=x/net/http2:+
diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go
new file mode 100644
index 00000000..eeac8384
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/client_conn_pool.go
@@ -0,0 +1,118 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Transport code's client connection pooling.
+
+package http2
+
+import (
+ "net/http"
+ "sync"
+)
+
+// ClientConnPool manages a pool of HTTP/2 client connections.
+type ClientConnPool interface {
+ GetClientConn(req *http.Request, addr string) (*ClientConn, error)
+ MarkDead(*ClientConn)
+}
+
+type clientConnPool struct {
+ t *Transport
+ mu sync.Mutex // TODO: switch to RWMutex
+ // TODO: add support for sharing conns based on cert names
+ // (e.g. share conn for googleapis.com and appspot.com)
+ conns map[string][]*ClientConn // key is host:port
+ keys map[*ClientConn][]string
+}
+
+func (p *clientConnPool) GetClientConn(req *http.Request, addr string) (*ClientConn, error) {
+ return p.getClientConn(req, addr, true)
+}
+
+func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMiss bool) (*ClientConn, error) {
+ p.mu.Lock()
+ for _, cc := range p.conns[addr] {
+ if cc.CanTakeNewRequest() {
+ p.mu.Unlock()
+ return cc, nil
+ }
+ }
+ p.mu.Unlock()
+ if !dialOnMiss {
+ return nil, ErrNoCachedConn
+ }
+
+ // TODO(bradfitz): use a singleflight.Group to only lock once per 'key'.
+ // Probably need to vendor it in as github.com/golang/sync/singleflight
+ // though, since the net package already uses it? Also lines up with
+ // sameer, bcmills, et al wanting to open source some sync stuff.
+ cc, err := p.t.dialClientConn(addr)
+ if err != nil {
+ return nil, err
+ }
+ p.addConn(addr, cc)
+ return cc, nil
+}
+
+func (p *clientConnPool) addConn(key string, cc *ClientConn) {
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ if p.conns == nil {
+ p.conns = make(map[string][]*ClientConn)
+ }
+ if p.keys == nil {
+ p.keys = make(map[*ClientConn][]string)
+ }
+ p.conns[key] = append(p.conns[key], cc)
+ p.keys[cc] = append(p.keys[cc], key)
+}
+
+func (p *clientConnPool) MarkDead(cc *ClientConn) {
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ for _, key := range p.keys[cc] {
+ vv, ok := p.conns[key]
+ if !ok {
+ continue
+ }
+ newList := filterOutClientConn(vv, cc)
+ if len(newList) > 0 {
+ p.conns[key] = newList
+ } else {
+ delete(p.conns, key)
+ }
+ }
+ delete(p.keys, cc)
+}
+
+func (p *clientConnPool) closeIdleConnections() {
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ // TODO: don't close a cc if it was just added to the pool
+ // milliseconds ago and has never been used. There's currently
+ // a small race window with the HTTP/1 Transport's integration
+ // where it can add an idle conn just before using it, and
+ // somebody else can concurrently call CloseIdleConns and
+ // break some caller's RoundTrip.
+ for _, vv := range p.conns {
+ for _, cc := range vv {
+ cc.closeIfIdle()
+ }
+ }
+}
+
+func filterOutClientConn(in []*ClientConn, exclude *ClientConn) []*ClientConn {
+ out := in[:0]
+ for _, v := range in {
+ if v != exclude {
+ out = append(out, v)
+ }
+ }
+ // If we filtered it out, zero out the last item to prevent
+ // the GC from seeing it.
+ if len(in) != len(out) {
+ in[len(in)-1] = nil
+ }
+ return out
+}
diff --git a/vendor/golang.org/x/net/http2/configure_transport.go b/vendor/golang.org/x/net/http2/configure_transport.go
new file mode 100644
index 00000000..fb8979a7
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/configure_transport.go
@@ -0,0 +1,78 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.6
+
+package http2
+
+import (
+ "crypto/tls"
+ "fmt"
+ "net/http"
+)
+
+func configureTransport(t1 *http.Transport) error {
+ connPool := new(clientConnPool)
+ t2 := &Transport{ConnPool: noDialClientConnPool{connPool}}
+ if err := registerHTTPSProtocol(t1, noDialH2RoundTripper{t2}); err != nil {
+ return err
+ }
+ if t1.TLSClientConfig == nil {
+ t1.TLSClientConfig = new(tls.Config)
+ }
+ if !strSliceContains(t1.TLSClientConfig.NextProtos, "h2") {
+ t1.TLSClientConfig.NextProtos = append([]string{"h2"}, t1.TLSClientConfig.NextProtos...)
+ }
+ upgradeFn := func(authority string, c *tls.Conn) http.RoundTripper {
+ cc, err := t2.NewClientConn(c)
+ if err != nil {
+ c.Close()
+ return erringRoundTripper{err}
+ }
+ connPool.addConn(authorityAddr(authority), cc)
+ return t2
+ }
+ if m := t1.TLSNextProto; len(m) == 0 {
+ t1.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{
+ "h2": upgradeFn,
+ }
+ } else {
+ m["h2"] = upgradeFn
+ }
+ return nil
+}
+
+// registerHTTPSProtocol calls Transport.RegisterProtocol but
+// convering panics into errors.
+func registerHTTPSProtocol(t *http.Transport, rt http.RoundTripper) (err error) {
+ defer func() {
+ if e := recover(); e != nil {
+ err = fmt.Errorf("%v", e)
+ }
+ }()
+ t.RegisterProtocol("https", rt)
+ return nil
+}
+
+// noDialClientConnPool is an implementation of http2.ClientConnPool
+// which never dials. We let the HTTP/1.1 client dial and use its TLS
+// connection instead.
+type noDialClientConnPool struct{ *clientConnPool }
+
+func (p noDialClientConnPool) GetClientConn(req *http.Request, addr string) (*ClientConn, error) {
+ const doDial = false
+ return p.getClientConn(req, addr, doDial)
+}
+
+// noDialH2RoundTripper is a RoundTripper which only tries to complete the request
+// if there's already has a cached connection to the host.
+type noDialH2RoundTripper struct{ t *Transport }
+
+func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
+ res, err := rt.t.RoundTrip(req)
+ if err == ErrNoCachedConn {
+ return nil, http.ErrSkipAltProtocol
+ }
+ return res, err
+}
diff --git a/vendor/golang.org/x/net/http2/errors.go b/vendor/golang.org/x/net/http2/errors.go
new file mode 100644
index 00000000..1f8de65e
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/errors.go
@@ -0,0 +1,77 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import "fmt"
+
+// An ErrCode is an unsigned 32-bit error code as defined in the HTTP/2 spec.
+type ErrCode uint32
+
+const (
+ ErrCodeNo ErrCode = 0x0
+ ErrCodeProtocol ErrCode = 0x1
+ ErrCodeInternal ErrCode = 0x2
+ ErrCodeFlowControl ErrCode = 0x3
+ ErrCodeSettingsTimeout ErrCode = 0x4
+ ErrCodeStreamClosed ErrCode = 0x5
+ ErrCodeFrameSize ErrCode = 0x6
+ ErrCodeRefusedStream ErrCode = 0x7
+ ErrCodeCancel ErrCode = 0x8
+ ErrCodeCompression ErrCode = 0x9
+ ErrCodeConnect ErrCode = 0xa
+ ErrCodeEnhanceYourCalm ErrCode = 0xb
+ ErrCodeInadequateSecurity ErrCode = 0xc
+ ErrCodeHTTP11Required ErrCode = 0xd
+)
+
+var errCodeName = map[ErrCode]string{
+ ErrCodeNo: "NO_ERROR",
+ ErrCodeProtocol: "PROTOCOL_ERROR",
+ ErrCodeInternal: "INTERNAL_ERROR",
+ ErrCodeFlowControl: "FLOW_CONTROL_ERROR",
+ ErrCodeSettingsTimeout: "SETTINGS_TIMEOUT",
+ ErrCodeStreamClosed: "STREAM_CLOSED",
+ ErrCodeFrameSize: "FRAME_SIZE_ERROR",
+ ErrCodeRefusedStream: "REFUSED_STREAM",
+ ErrCodeCancel: "CANCEL",
+ ErrCodeCompression: "COMPRESSION_ERROR",
+ ErrCodeConnect: "CONNECT_ERROR",
+ ErrCodeEnhanceYourCalm: "ENHANCE_YOUR_CALM",
+ ErrCodeInadequateSecurity: "INADEQUATE_SECURITY",
+ ErrCodeHTTP11Required: "HTTP_1_1_REQUIRED",
+}
+
+func (e ErrCode) String() string {
+ if s, ok := errCodeName[e]; ok {
+ return s
+ }
+ return fmt.Sprintf("unknown error code 0x%x", uint32(e))
+}
+
+// ConnectionError is an error that results in the termination of the
+// entire connection.
+type ConnectionError ErrCode
+
+func (e ConnectionError) Error() string { return fmt.Sprintf("connection error: %s", ErrCode(e)) }
+
+// StreamError is an error that only affects one stream within an
+// HTTP/2 connection.
+type StreamError struct {
+ StreamID uint32
+ Code ErrCode
+}
+
+func (e StreamError) Error() string {
+ return fmt.Sprintf("stream error: stream ID %d; %v", e.StreamID, e.Code)
+}
+
+// 6.9.1 The Flow Control Window
+// "If a sender receives a WINDOW_UPDATE that causes a flow control
+// window to exceed this maximum it MUST terminate either the stream
+// or the connection, as appropriate. For streams, [...]; for the
+// connection, a GOAWAY frame with a FLOW_CONTROL_ERROR code."
+type goAwayFlowError struct{}
+
+func (goAwayFlowError) Error() string { return "connection exceeded flow control window size" }
diff --git a/vendor/golang.org/x/net/http2/errors_test.go b/vendor/golang.org/x/net/http2/errors_test.go
new file mode 100644
index 00000000..da5c58c3
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/errors_test.go
@@ -0,0 +1,24 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import "testing"
+
+func TestErrCodeString(t *testing.T) {
+ tests := []struct {
+ err ErrCode
+ want string
+ }{
+ {ErrCodeProtocol, "PROTOCOL_ERROR"},
+ {0xd, "HTTP_1_1_REQUIRED"},
+ {0xf, "unknown error code 0xf"},
+ }
+ for i, tt := range tests {
+ got := tt.err.String()
+ if got != tt.want {
+ t.Errorf("%d. Error = %q; want %q", i, got, tt.want)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/fixed_buffer.go b/vendor/golang.org/x/net/http2/fixed_buffer.go
new file mode 100644
index 00000000..47da0f0b
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/fixed_buffer.go
@@ -0,0 +1,60 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "errors"
+)
+
+// fixedBuffer is an io.ReadWriter backed by a fixed size buffer.
+// It never allocates, but moves old data as new data is written.
+type fixedBuffer struct {
+ buf []byte
+ r, w int
+}
+
+var (
+ errReadEmpty = errors.New("read from empty fixedBuffer")
+ errWriteFull = errors.New("write on full fixedBuffer")
+)
+
+// Read copies bytes from the buffer into p.
+// It is an error to read when no data is available.
+func (b *fixedBuffer) Read(p []byte) (n int, err error) {
+ if b.r == b.w {
+ return 0, errReadEmpty
+ }
+ n = copy(p, b.buf[b.r:b.w])
+ b.r += n
+ if b.r == b.w {
+ b.r = 0
+ b.w = 0
+ }
+ return n, nil
+}
+
+// Len returns the number of bytes of the unread portion of the buffer.
+func (b *fixedBuffer) Len() int {
+ return b.w - b.r
+}
+
+// Write copies bytes from p into the buffer.
+// It is an error to write more data than the buffer can hold.
+func (b *fixedBuffer) Write(p []byte) (n int, err error) {
+ // Slide existing data to beginning.
+ if b.r > 0 && len(p) > len(b.buf)-b.w {
+ copy(b.buf, b.buf[b.r:b.w])
+ b.w -= b.r
+ b.r = 0
+ }
+
+ // Write new data.
+ n = copy(b.buf[b.w:], p)
+ b.w += n
+ if n < len(p) {
+ err = errWriteFull
+ }
+ return n, err
+}
diff --git a/vendor/golang.org/x/net/http2/fixed_buffer_test.go b/vendor/golang.org/x/net/http2/fixed_buffer_test.go
new file mode 100644
index 00000000..f5432f8d
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/fixed_buffer_test.go
@@ -0,0 +1,128 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "reflect"
+ "testing"
+)
+
+var bufferReadTests = []struct {
+ buf fixedBuffer
+ read, wn int
+ werr error
+ wp []byte
+ wbuf fixedBuffer
+}{
+ {
+ fixedBuffer{[]byte{'a', 0}, 0, 1},
+ 5, 1, nil, []byte{'a'},
+ fixedBuffer{[]byte{'a', 0}, 0, 0},
+ },
+ {
+ fixedBuffer{[]byte{0, 'a'}, 1, 2},
+ 5, 1, nil, []byte{'a'},
+ fixedBuffer{[]byte{0, 'a'}, 0, 0},
+ },
+ {
+ fixedBuffer{[]byte{'a', 'b'}, 0, 2},
+ 1, 1, nil, []byte{'a'},
+ fixedBuffer{[]byte{'a', 'b'}, 1, 2},
+ },
+ {
+ fixedBuffer{[]byte{}, 0, 0},
+ 5, 0, errReadEmpty, []byte{},
+ fixedBuffer{[]byte{}, 0, 0},
+ },
+}
+
+func TestBufferRead(t *testing.T) {
+ for i, tt := range bufferReadTests {
+ read := make([]byte, tt.read)
+ n, err := tt.buf.Read(read)
+ if n != tt.wn {
+ t.Errorf("#%d: wn = %d want %d", i, n, tt.wn)
+ continue
+ }
+ if err != tt.werr {
+ t.Errorf("#%d: werr = %v want %v", i, err, tt.werr)
+ continue
+ }
+ read = read[:n]
+ if !reflect.DeepEqual(read, tt.wp) {
+ t.Errorf("#%d: read = %+v want %+v", i, read, tt.wp)
+ }
+ if !reflect.DeepEqual(tt.buf, tt.wbuf) {
+ t.Errorf("#%d: buf = %+v want %+v", i, tt.buf, tt.wbuf)
+ }
+ }
+}
+
+var bufferWriteTests = []struct {
+ buf fixedBuffer
+ write, wn int
+ werr error
+ wbuf fixedBuffer
+}{
+ {
+ buf: fixedBuffer{
+ buf: []byte{},
+ },
+ wbuf: fixedBuffer{
+ buf: []byte{},
+ },
+ },
+ {
+ buf: fixedBuffer{
+ buf: []byte{1, 'a'},
+ },
+ write: 1,
+ wn: 1,
+ wbuf: fixedBuffer{
+ buf: []byte{0, 'a'},
+ w: 1,
+ },
+ },
+ {
+ buf: fixedBuffer{
+ buf: []byte{'a', 1},
+ r: 1,
+ w: 1,
+ },
+ write: 2,
+ wn: 2,
+ wbuf: fixedBuffer{
+ buf: []byte{0, 0},
+ w: 2,
+ },
+ },
+ {
+ buf: fixedBuffer{
+ buf: []byte{},
+ },
+ write: 5,
+ werr: errWriteFull,
+ wbuf: fixedBuffer{
+ buf: []byte{},
+ },
+ },
+}
+
+func TestBufferWrite(t *testing.T) {
+ for i, tt := range bufferWriteTests {
+ n, err := tt.buf.Write(make([]byte, tt.write))
+ if n != tt.wn {
+ t.Errorf("#%d: wrote %d bytes; want %d", i, n, tt.wn)
+ continue
+ }
+ if err != tt.werr {
+ t.Errorf("#%d: error = %v; want %v", i, err, tt.werr)
+ continue
+ }
+ if !reflect.DeepEqual(tt.buf, tt.wbuf) {
+ t.Errorf("#%d: buf = %+v; want %+v", i, tt.buf, tt.wbuf)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/flow.go b/vendor/golang.org/x/net/http2/flow.go
new file mode 100644
index 00000000..957de254
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/flow.go
@@ -0,0 +1,50 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Flow control
+
+package http2
+
+// flow is the flow control window's size.
+type flow struct {
+ // n is the number of DATA bytes we're allowed to send.
+ // A flow is kept both on a conn and a per-stream.
+ n int32
+
+ // conn points to the shared connection-level flow that is
+ // shared by all streams on that conn. It is nil for the flow
+ // that's on the conn directly.
+ conn *flow
+}
+
+func (f *flow) setConnFlow(cf *flow) { f.conn = cf }
+
+func (f *flow) available() int32 {
+ n := f.n
+ if f.conn != nil && f.conn.n < n {
+ n = f.conn.n
+ }
+ return n
+}
+
+func (f *flow) take(n int32) {
+ if n > f.available() {
+ panic("internal error: took too much")
+ }
+ f.n -= n
+ if f.conn != nil {
+ f.conn.n -= n
+ }
+}
+
+// add adds n bytes (positive or negative) to the flow control window.
+// It returns false if the sum would exceed 2^31-1.
+func (f *flow) add(n int32) bool {
+ remain := (1<<31 - 1) - f.n
+ if n > remain {
+ return false
+ }
+ f.n += n
+ return true
+}
diff --git a/vendor/golang.org/x/net/http2/flow_test.go b/vendor/golang.org/x/net/http2/flow_test.go
new file mode 100644
index 00000000..859adf5d
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/flow_test.go
@@ -0,0 +1,53 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import "testing"
+
+func TestFlow(t *testing.T) {
+ var st flow
+ var conn flow
+ st.add(3)
+ conn.add(2)
+
+ if got, want := st.available(), int32(3); got != want {
+ t.Errorf("available = %d; want %d", got, want)
+ }
+ st.setConnFlow(&conn)
+ if got, want := st.available(), int32(2); got != want {
+ t.Errorf("after parent setup, available = %d; want %d", got, want)
+ }
+
+ st.take(2)
+ if got, want := conn.available(), int32(0); got != want {
+ t.Errorf("after taking 2, conn = %d; want %d", got, want)
+ }
+ if got, want := st.available(), int32(0); got != want {
+ t.Errorf("after taking 2, stream = %d; want %d", got, want)
+ }
+}
+
+func TestFlowAdd(t *testing.T) {
+ var f flow
+ if !f.add(1) {
+ t.Fatal("failed to add 1")
+ }
+ if !f.add(-1) {
+ t.Fatal("failed to add -1")
+ }
+ if got, want := f.available(), int32(0); got != want {
+ t.Fatalf("size = %d; want %d", got, want)
+ }
+ if !f.add(1<<31 - 1) {
+ t.Fatal("failed to add 2^31-1")
+ }
+ if got, want := f.available(), int32(1<<31-1); got != want {
+ t.Fatalf("size = %d; want %d", got, want)
+ }
+ if f.add(1) {
+ t.Fatal("adding 1 to max shouldn't be allowed")
+ }
+
+}
diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go
new file mode 100644
index 00000000..6b8a74f0
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/frame.go
@@ -0,0 +1,1114 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "encoding/binary"
+ "errors"
+ "fmt"
+ "io"
+ "sync"
+)
+
+const frameHeaderLen = 9
+
+var padZeros = make([]byte, 255) // zeros for padding
+
+// A FrameType is a registered frame type as defined in
+// http://http2.github.io/http2-spec/#rfc.section.11.2
+type FrameType uint8
+
+const (
+ FrameData FrameType = 0x0
+ FrameHeaders FrameType = 0x1
+ FramePriority FrameType = 0x2
+ FrameRSTStream FrameType = 0x3
+ FrameSettings FrameType = 0x4
+ FramePushPromise FrameType = 0x5
+ FramePing FrameType = 0x6
+ FrameGoAway FrameType = 0x7
+ FrameWindowUpdate FrameType = 0x8
+ FrameContinuation FrameType = 0x9
+)
+
+var frameName = map[FrameType]string{
+ FrameData: "DATA",
+ FrameHeaders: "HEADERS",
+ FramePriority: "PRIORITY",
+ FrameRSTStream: "RST_STREAM",
+ FrameSettings: "SETTINGS",
+ FramePushPromise: "PUSH_PROMISE",
+ FramePing: "PING",
+ FrameGoAway: "GOAWAY",
+ FrameWindowUpdate: "WINDOW_UPDATE",
+ FrameContinuation: "CONTINUATION",
+}
+
+func (t FrameType) String() string {
+ if s, ok := frameName[t]; ok {
+ return s
+ }
+ return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", uint8(t))
+}
+
+// Flags is a bitmask of HTTP/2 flags.
+// The meaning of flags varies depending on the frame type.
+type Flags uint8
+
+// Has reports whether f contains all (0 or more) flags in v.
+func (f Flags) Has(v Flags) bool {
+ return (f & v) == v
+}
+
+// Frame-specific FrameHeader flag bits.
+const (
+ // Data Frame
+ FlagDataEndStream Flags = 0x1
+ FlagDataPadded Flags = 0x8
+
+ // Headers Frame
+ FlagHeadersEndStream Flags = 0x1
+ FlagHeadersEndHeaders Flags = 0x4
+ FlagHeadersPadded Flags = 0x8
+ FlagHeadersPriority Flags = 0x20
+
+ // Settings Frame
+ FlagSettingsAck Flags = 0x1
+
+ // Ping Frame
+ FlagPingAck Flags = 0x1
+
+ // Continuation Frame
+ FlagContinuationEndHeaders Flags = 0x4
+
+ FlagPushPromiseEndHeaders Flags = 0x4
+ FlagPushPromisePadded Flags = 0x8
+)
+
+var flagName = map[FrameType]map[Flags]string{
+ FrameData: {
+ FlagDataEndStream: "END_STREAM",
+ FlagDataPadded: "PADDED",
+ },
+ FrameHeaders: {
+ FlagHeadersEndStream: "END_STREAM",
+ FlagHeadersEndHeaders: "END_HEADERS",
+ FlagHeadersPadded: "PADDED",
+ FlagHeadersPriority: "PRIORITY",
+ },
+ FrameSettings: {
+ FlagSettingsAck: "ACK",
+ },
+ FramePing: {
+ FlagPingAck: "ACK",
+ },
+ FrameContinuation: {
+ FlagContinuationEndHeaders: "END_HEADERS",
+ },
+ FramePushPromise: {
+ FlagPushPromiseEndHeaders: "END_HEADERS",
+ FlagPushPromisePadded: "PADDED",
+ },
+}
+
+// a frameParser parses a frame given its FrameHeader and payload
+// bytes. The length of payload will always equal fh.Length (which
+// might be 0).
+type frameParser func(fh FrameHeader, payload []byte) (Frame, error)
+
+var frameParsers = map[FrameType]frameParser{
+ FrameData: parseDataFrame,
+ FrameHeaders: parseHeadersFrame,
+ FramePriority: parsePriorityFrame,
+ FrameRSTStream: parseRSTStreamFrame,
+ FrameSettings: parseSettingsFrame,
+ FramePushPromise: parsePushPromise,
+ FramePing: parsePingFrame,
+ FrameGoAway: parseGoAwayFrame,
+ FrameWindowUpdate: parseWindowUpdateFrame,
+ FrameContinuation: parseContinuationFrame,
+}
+
+func typeFrameParser(t FrameType) frameParser {
+ if f := frameParsers[t]; f != nil {
+ return f
+ }
+ return parseUnknownFrame
+}
+
+// A FrameHeader is the 9 byte header of all HTTP/2 frames.
+//
+// See http://http2.github.io/http2-spec/#FrameHeader
+type FrameHeader struct {
+ valid bool // caller can access []byte fields in the Frame
+
+ // Type is the 1 byte frame type. There are ten standard frame
+ // types, but extension frame types may be written by WriteRawFrame
+ // and will be returned by ReadFrame (as UnknownFrame).
+ Type FrameType
+
+ // Flags are the 1 byte of 8 potential bit flags per frame.
+ // They are specific to the frame type.
+ Flags Flags
+
+ // Length is the length of the frame, not including the 9 byte header.
+ // The maximum size is one byte less than 16MB (uint24), but only
+ // frames up to 16KB are allowed without peer agreement.
+ Length uint32
+
+ // StreamID is which stream this frame is for. Certain frames
+ // are not stream-specific, in which case this field is 0.
+ StreamID uint32
+}
+
+// Header returns h. It exists so FrameHeaders can be embedded in other
+// specific frame types and implement the Frame interface.
+func (h FrameHeader) Header() FrameHeader { return h }
+
+func (h FrameHeader) String() string {
+ var buf bytes.Buffer
+ buf.WriteString("[FrameHeader ")
+ buf.WriteString(h.Type.String())
+ if h.Flags != 0 {
+ buf.WriteString(" flags=")
+ set := 0
+ for i := uint8(0); i < 8; i++ {
+ if h.Flags&(1< 1 {
+ buf.WriteByte('|')
+ }
+ name := flagName[h.Type][Flags(1<>24),
+ byte(streamID>>16),
+ byte(streamID>>8),
+ byte(streamID))
+}
+
+func (f *Framer) endWrite() error {
+ // Now that we know the final size, fill in the FrameHeader in
+ // the space previously reserved for it. Abuse append.
+ length := len(f.wbuf) - frameHeaderLen
+ if length >= (1 << 24) {
+ return ErrFrameTooLarge
+ }
+ _ = append(f.wbuf[:0],
+ byte(length>>16),
+ byte(length>>8),
+ byte(length))
+ n, err := f.w.Write(f.wbuf)
+ if err == nil && n != len(f.wbuf) {
+ err = io.ErrShortWrite
+ }
+ return err
+}
+
+func (f *Framer) writeByte(v byte) { f.wbuf = append(f.wbuf, v) }
+func (f *Framer) writeBytes(v []byte) { f.wbuf = append(f.wbuf, v...) }
+func (f *Framer) writeUint16(v uint16) { f.wbuf = append(f.wbuf, byte(v>>8), byte(v)) }
+func (f *Framer) writeUint32(v uint32) {
+ f.wbuf = append(f.wbuf, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
+}
+
+const (
+ minMaxFrameSize = 1 << 14
+ maxFrameSize = 1<<24 - 1
+)
+
+// NewFramer returns a Framer that writes frames to w and reads them from r.
+func NewFramer(w io.Writer, r io.Reader) *Framer {
+ fr := &Framer{
+ w: w,
+ r: r,
+ }
+ fr.getReadBuf = func(size uint32) []byte {
+ if cap(fr.readBuf) >= int(size) {
+ return fr.readBuf[:size]
+ }
+ fr.readBuf = make([]byte, size)
+ return fr.readBuf
+ }
+ fr.SetMaxReadFrameSize(maxFrameSize)
+ return fr
+}
+
+// SetMaxReadFrameSize sets the maximum size of a frame
+// that will be read by a subsequent call to ReadFrame.
+// It is the caller's responsibility to advertise this
+// limit with a SETTINGS frame.
+func (fr *Framer) SetMaxReadFrameSize(v uint32) {
+ if v > maxFrameSize {
+ v = maxFrameSize
+ }
+ fr.maxReadSize = v
+}
+
+// ErrFrameTooLarge is returned from Framer.ReadFrame when the peer
+// sends a frame that is larger than declared with SetMaxReadFrameSize.
+var ErrFrameTooLarge = errors.New("http2: frame too large")
+
+// ReadFrame reads a single frame. The returned Frame is only valid
+// until the next call to ReadFrame.
+// If the frame is larger than previously set with SetMaxReadFrameSize,
+// the returned error is ErrFrameTooLarge.
+func (fr *Framer) ReadFrame() (Frame, error) {
+ if fr.lastFrame != nil {
+ fr.lastFrame.invalidate()
+ }
+ fh, err := readFrameHeader(fr.headerBuf[:], fr.r)
+ if err != nil {
+ return nil, err
+ }
+ if fh.Length > fr.maxReadSize {
+ return nil, ErrFrameTooLarge
+ }
+ payload := fr.getReadBuf(fh.Length)
+ if _, err := io.ReadFull(fr.r, payload); err != nil {
+ return nil, err
+ }
+ f, err := typeFrameParser(fh.Type)(fh, payload)
+ if err != nil {
+ return nil, err
+ }
+ fr.lastFrame = f
+ return f, nil
+}
+
+// A DataFrame conveys arbitrary, variable-length sequences of octets
+// associated with a stream.
+// See http://http2.github.io/http2-spec/#rfc.section.6.1
+type DataFrame struct {
+ FrameHeader
+ data []byte
+}
+
+func (f *DataFrame) StreamEnded() bool {
+ return f.FrameHeader.Flags.Has(FlagDataEndStream)
+}
+
+// Data returns the frame's data octets, not including any padding
+// size byte or padding suffix bytes.
+// The caller must not retain the returned memory past the next
+// call to ReadFrame.
+func (f *DataFrame) Data() []byte {
+ f.checkValid()
+ return f.data
+}
+
+func parseDataFrame(fh FrameHeader, payload []byte) (Frame, error) {
+ if fh.StreamID == 0 {
+ // DATA frames MUST be associated with a stream. If a
+ // DATA frame is received whose stream identifier
+ // field is 0x0, the recipient MUST respond with a
+ // connection error (Section 5.4.1) of type
+ // PROTOCOL_ERROR.
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ f := &DataFrame{
+ FrameHeader: fh,
+ }
+ var padSize byte
+ if fh.Flags.Has(FlagDataPadded) {
+ var err error
+ payload, padSize, err = readByte(payload)
+ if err != nil {
+ return nil, err
+ }
+ }
+ if int(padSize) > len(payload) {
+ // If the length of the padding is greater than the
+ // length of the frame payload, the recipient MUST
+ // treat this as a connection error.
+ // Filed: https://github.com/http2/http2-spec/issues/610
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ f.data = payload[:len(payload)-int(padSize)]
+ return f, nil
+}
+
+var errStreamID = errors.New("invalid streamid")
+
+func validStreamID(streamID uint32) bool {
+ return streamID != 0 && streamID&(1<<31) == 0
+}
+
+// WriteData writes a DATA frame.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error {
+ // TODO: ignoring padding for now. will add when somebody cares.
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
+ return errStreamID
+ }
+ var flags Flags
+ if endStream {
+ flags |= FlagDataEndStream
+ }
+ f.startWrite(FrameData, flags, streamID)
+ f.wbuf = append(f.wbuf, data...)
+ return f.endWrite()
+}
+
+// A SettingsFrame conveys configuration parameters that affect how
+// endpoints communicate, such as preferences and constraints on peer
+// behavior.
+//
+// See http://http2.github.io/http2-spec/#SETTINGS
+type SettingsFrame struct {
+ FrameHeader
+ p []byte
+}
+
+func parseSettingsFrame(fh FrameHeader, p []byte) (Frame, error) {
+ if fh.Flags.Has(FlagSettingsAck) && fh.Length > 0 {
+ // When this (ACK 0x1) bit is set, the payload of the
+ // SETTINGS frame MUST be empty. Receipt of a
+ // SETTINGS frame with the ACK flag set and a length
+ // field value other than 0 MUST be treated as a
+ // connection error (Section 5.4.1) of type
+ // FRAME_SIZE_ERROR.
+ return nil, ConnectionError(ErrCodeFrameSize)
+ }
+ if fh.StreamID != 0 {
+ // SETTINGS frames always apply to a connection,
+ // never a single stream. The stream identifier for a
+ // SETTINGS frame MUST be zero (0x0). If an endpoint
+ // receives a SETTINGS frame whose stream identifier
+ // field is anything other than 0x0, the endpoint MUST
+ // respond with a connection error (Section 5.4.1) of
+ // type PROTOCOL_ERROR.
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ if len(p)%6 != 0 {
+ // Expecting even number of 6 byte settings.
+ return nil, ConnectionError(ErrCodeFrameSize)
+ }
+ f := &SettingsFrame{FrameHeader: fh, p: p}
+ if v, ok := f.Value(SettingInitialWindowSize); ok && v > (1<<31)-1 {
+ // Values above the maximum flow control window size of 2^31 - 1 MUST
+ // be treated as a connection error (Section 5.4.1) of type
+ // FLOW_CONTROL_ERROR.
+ return nil, ConnectionError(ErrCodeFlowControl)
+ }
+ return f, nil
+}
+
+func (f *SettingsFrame) IsAck() bool {
+ return f.FrameHeader.Flags.Has(FlagSettingsAck)
+}
+
+func (f *SettingsFrame) Value(s SettingID) (v uint32, ok bool) {
+ f.checkValid()
+ buf := f.p
+ for len(buf) > 0 {
+ settingID := SettingID(binary.BigEndian.Uint16(buf[:2]))
+ if settingID == s {
+ return binary.BigEndian.Uint32(buf[2:6]), true
+ }
+ buf = buf[6:]
+ }
+ return 0, false
+}
+
+// ForeachSetting runs fn for each setting.
+// It stops and returns the first error.
+func (f *SettingsFrame) ForeachSetting(fn func(Setting) error) error {
+ f.checkValid()
+ buf := f.p
+ for len(buf) > 0 {
+ if err := fn(Setting{
+ SettingID(binary.BigEndian.Uint16(buf[:2])),
+ binary.BigEndian.Uint32(buf[2:6]),
+ }); err != nil {
+ return err
+ }
+ buf = buf[6:]
+ }
+ return nil
+}
+
+// WriteSettings writes a SETTINGS frame with zero or more settings
+// specified and the ACK bit not set.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WriteSettings(settings ...Setting) error {
+ f.startWrite(FrameSettings, 0, 0)
+ for _, s := range settings {
+ f.writeUint16(uint16(s.ID))
+ f.writeUint32(s.Val)
+ }
+ return f.endWrite()
+}
+
+// WriteSettings writes an empty SETTINGS frame with the ACK bit set.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WriteSettingsAck() error {
+ f.startWrite(FrameSettings, FlagSettingsAck, 0)
+ return f.endWrite()
+}
+
+// A PingFrame is a mechanism for measuring a minimal round trip time
+// from the sender, as well as determining whether an idle connection
+// is still functional.
+// See http://http2.github.io/http2-spec/#rfc.section.6.7
+type PingFrame struct {
+ FrameHeader
+ Data [8]byte
+}
+
+func (f *PingFrame) IsAck() bool { return f.Flags.Has(FlagPingAck) }
+
+func parsePingFrame(fh FrameHeader, payload []byte) (Frame, error) {
+ if len(payload) != 8 {
+ return nil, ConnectionError(ErrCodeFrameSize)
+ }
+ if fh.StreamID != 0 {
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ f := &PingFrame{FrameHeader: fh}
+ copy(f.Data[:], payload)
+ return f, nil
+}
+
+func (f *Framer) WritePing(ack bool, data [8]byte) error {
+ var flags Flags
+ if ack {
+ flags = FlagPingAck
+ }
+ f.startWrite(FramePing, flags, 0)
+ f.writeBytes(data[:])
+ return f.endWrite()
+}
+
+// A GoAwayFrame informs the remote peer to stop creating streams on this connection.
+// See http://http2.github.io/http2-spec/#rfc.section.6.8
+type GoAwayFrame struct {
+ FrameHeader
+ LastStreamID uint32
+ ErrCode ErrCode
+ debugData []byte
+}
+
+// DebugData returns any debug data in the GOAWAY frame. Its contents
+// are not defined.
+// The caller must not retain the returned memory past the next
+// call to ReadFrame.
+func (f *GoAwayFrame) DebugData() []byte {
+ f.checkValid()
+ return f.debugData
+}
+
+func parseGoAwayFrame(fh FrameHeader, p []byte) (Frame, error) {
+ if fh.StreamID != 0 {
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ if len(p) < 8 {
+ return nil, ConnectionError(ErrCodeFrameSize)
+ }
+ return &GoAwayFrame{
+ FrameHeader: fh,
+ LastStreamID: binary.BigEndian.Uint32(p[:4]) & (1<<31 - 1),
+ ErrCode: ErrCode(binary.BigEndian.Uint32(p[4:8])),
+ debugData: p[8:],
+ }, nil
+}
+
+func (f *Framer) WriteGoAway(maxStreamID uint32, code ErrCode, debugData []byte) error {
+ f.startWrite(FrameGoAway, 0, 0)
+ f.writeUint32(maxStreamID & (1<<31 - 1))
+ f.writeUint32(uint32(code))
+ f.writeBytes(debugData)
+ return f.endWrite()
+}
+
+// An UnknownFrame is the frame type returned when the frame type is unknown
+// or no specific frame type parser exists.
+type UnknownFrame struct {
+ FrameHeader
+ p []byte
+}
+
+// Payload returns the frame's payload (after the header). It is not
+// valid to call this method after a subsequent call to
+// Framer.ReadFrame, nor is it valid to retain the returned slice.
+// The memory is owned by the Framer and is invalidated when the next
+// frame is read.
+func (f *UnknownFrame) Payload() []byte {
+ f.checkValid()
+ return f.p
+}
+
+func parseUnknownFrame(fh FrameHeader, p []byte) (Frame, error) {
+ return &UnknownFrame{fh, p}, nil
+}
+
+// A WindowUpdateFrame is used to implement flow control.
+// See http://http2.github.io/http2-spec/#rfc.section.6.9
+type WindowUpdateFrame struct {
+ FrameHeader
+ Increment uint32 // never read with high bit set
+}
+
+func parseWindowUpdateFrame(fh FrameHeader, p []byte) (Frame, error) {
+ if len(p) != 4 {
+ return nil, ConnectionError(ErrCodeFrameSize)
+ }
+ inc := binary.BigEndian.Uint32(p[:4]) & 0x7fffffff // mask off high reserved bit
+ if inc == 0 {
+ // A receiver MUST treat the receipt of a
+ // WINDOW_UPDATE frame with an flow control window
+ // increment of 0 as a stream error (Section 5.4.2) of
+ // type PROTOCOL_ERROR; errors on the connection flow
+ // control window MUST be treated as a connection
+ // error (Section 5.4.1).
+ if fh.StreamID == 0 {
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ return nil, StreamError{fh.StreamID, ErrCodeProtocol}
+ }
+ return &WindowUpdateFrame{
+ FrameHeader: fh,
+ Increment: inc,
+ }, nil
+}
+
+// WriteWindowUpdate writes a WINDOW_UPDATE frame.
+// The increment value must be between 1 and 2,147,483,647, inclusive.
+// If the Stream ID is zero, the window update applies to the
+// connection as a whole.
+func (f *Framer) WriteWindowUpdate(streamID, incr uint32) error {
+ // "The legal range for the increment to the flow control window is 1 to 2^31-1 (2,147,483,647) octets."
+ if (incr < 1 || incr > 2147483647) && !f.AllowIllegalWrites {
+ return errors.New("illegal window increment value")
+ }
+ f.startWrite(FrameWindowUpdate, 0, streamID)
+ f.writeUint32(incr)
+ return f.endWrite()
+}
+
+// A HeadersFrame is used to open a stream and additionally carries a
+// header block fragment.
+type HeadersFrame struct {
+ FrameHeader
+
+ // Priority is set if FlagHeadersPriority is set in the FrameHeader.
+ Priority PriorityParam
+
+ headerFragBuf []byte // not owned
+}
+
+func (f *HeadersFrame) HeaderBlockFragment() []byte {
+ f.checkValid()
+ return f.headerFragBuf
+}
+
+func (f *HeadersFrame) HeadersEnded() bool {
+ return f.FrameHeader.Flags.Has(FlagHeadersEndHeaders)
+}
+
+func (f *HeadersFrame) StreamEnded() bool {
+ return f.FrameHeader.Flags.Has(FlagHeadersEndStream)
+}
+
+func (f *HeadersFrame) HasPriority() bool {
+ return f.FrameHeader.Flags.Has(FlagHeadersPriority)
+}
+
+func parseHeadersFrame(fh FrameHeader, p []byte) (_ Frame, err error) {
+ hf := &HeadersFrame{
+ FrameHeader: fh,
+ }
+ if fh.StreamID == 0 {
+ // HEADERS frames MUST be associated with a stream. If a HEADERS frame
+ // is received whose stream identifier field is 0x0, the recipient MUST
+ // respond with a connection error (Section 5.4.1) of type
+ // PROTOCOL_ERROR.
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ var padLength uint8
+ if fh.Flags.Has(FlagHeadersPadded) {
+ if p, padLength, err = readByte(p); err != nil {
+ return
+ }
+ }
+ if fh.Flags.Has(FlagHeadersPriority) {
+ var v uint32
+ p, v, err = readUint32(p)
+ if err != nil {
+ return nil, err
+ }
+ hf.Priority.StreamDep = v & 0x7fffffff
+ hf.Priority.Exclusive = (v != hf.Priority.StreamDep) // high bit was set
+ p, hf.Priority.Weight, err = readByte(p)
+ if err != nil {
+ return nil, err
+ }
+ }
+ if len(p)-int(padLength) <= 0 {
+ return nil, StreamError{fh.StreamID, ErrCodeProtocol}
+ }
+ hf.headerFragBuf = p[:len(p)-int(padLength)]
+ return hf, nil
+}
+
+// HeadersFrameParam are the parameters for writing a HEADERS frame.
+type HeadersFrameParam struct {
+ // StreamID is the required Stream ID to initiate.
+ StreamID uint32
+ // BlockFragment is part (or all) of a Header Block.
+ BlockFragment []byte
+
+ // EndStream indicates that the header block is the last that
+ // the endpoint will send for the identified stream. Setting
+ // this flag causes the stream to enter one of "half closed"
+ // states.
+ EndStream bool
+
+ // EndHeaders indicates that this frame contains an entire
+ // header block and is not followed by any
+ // CONTINUATION frames.
+ EndHeaders bool
+
+ // PadLength is the optional number of bytes of zeros to add
+ // to this frame.
+ PadLength uint8
+
+ // Priority, if non-zero, includes stream priority information
+ // in the HEADER frame.
+ Priority PriorityParam
+}
+
+// WriteHeaders writes a single HEADERS frame.
+//
+// This is a low-level header writing method. Encoding headers and
+// splitting them into any necessary CONTINUATION frames is handled
+// elsewhere.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WriteHeaders(p HeadersFrameParam) error {
+ if !validStreamID(p.StreamID) && !f.AllowIllegalWrites {
+ return errStreamID
+ }
+ var flags Flags
+ if p.PadLength != 0 {
+ flags |= FlagHeadersPadded
+ }
+ if p.EndStream {
+ flags |= FlagHeadersEndStream
+ }
+ if p.EndHeaders {
+ flags |= FlagHeadersEndHeaders
+ }
+ if !p.Priority.IsZero() {
+ flags |= FlagHeadersPriority
+ }
+ f.startWrite(FrameHeaders, flags, p.StreamID)
+ if p.PadLength != 0 {
+ f.writeByte(p.PadLength)
+ }
+ if !p.Priority.IsZero() {
+ v := p.Priority.StreamDep
+ if !validStreamID(v) && !f.AllowIllegalWrites {
+ return errors.New("invalid dependent stream id")
+ }
+ if p.Priority.Exclusive {
+ v |= 1 << 31
+ }
+ f.writeUint32(v)
+ f.writeByte(p.Priority.Weight)
+ }
+ f.wbuf = append(f.wbuf, p.BlockFragment...)
+ f.wbuf = append(f.wbuf, padZeros[:p.PadLength]...)
+ return f.endWrite()
+}
+
+// A PriorityFrame specifies the sender-advised priority of a stream.
+// See http://http2.github.io/http2-spec/#rfc.section.6.3
+type PriorityFrame struct {
+ FrameHeader
+ PriorityParam
+}
+
+// PriorityParam are the stream prioritzation parameters.
+type PriorityParam struct {
+ // StreamDep is a 31-bit stream identifier for the
+ // stream that this stream depends on. Zero means no
+ // dependency.
+ StreamDep uint32
+
+ // Exclusive is whether the dependency is exclusive.
+ Exclusive bool
+
+ // Weight is the stream's zero-indexed weight. It should be
+ // set together with StreamDep, or neither should be set. Per
+ // the spec, "Add one to the value to obtain a weight between
+ // 1 and 256."
+ Weight uint8
+}
+
+func (p PriorityParam) IsZero() bool {
+ return p == PriorityParam{}
+}
+
+func parsePriorityFrame(fh FrameHeader, payload []byte) (Frame, error) {
+ if fh.StreamID == 0 {
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ if len(payload) != 5 {
+ return nil, ConnectionError(ErrCodeFrameSize)
+ }
+ v := binary.BigEndian.Uint32(payload[:4])
+ streamID := v & 0x7fffffff // mask off high bit
+ return &PriorityFrame{
+ FrameHeader: fh,
+ PriorityParam: PriorityParam{
+ Weight: payload[4],
+ StreamDep: streamID,
+ Exclusive: streamID != v, // was high bit set?
+ },
+ }, nil
+}
+
+// WritePriority writes a PRIORITY frame.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WritePriority(streamID uint32, p PriorityParam) error {
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
+ return errStreamID
+ }
+ f.startWrite(FramePriority, 0, streamID)
+ v := p.StreamDep
+ if p.Exclusive {
+ v |= 1 << 31
+ }
+ f.writeUint32(v)
+ f.writeByte(p.Weight)
+ return f.endWrite()
+}
+
+// A RSTStreamFrame allows for abnormal termination of a stream.
+// See http://http2.github.io/http2-spec/#rfc.section.6.4
+type RSTStreamFrame struct {
+ FrameHeader
+ ErrCode ErrCode
+}
+
+func parseRSTStreamFrame(fh FrameHeader, p []byte) (Frame, error) {
+ if len(p) != 4 {
+ return nil, ConnectionError(ErrCodeFrameSize)
+ }
+ if fh.StreamID == 0 {
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ return &RSTStreamFrame{fh, ErrCode(binary.BigEndian.Uint32(p[:4]))}, nil
+}
+
+// WriteRSTStream writes a RST_STREAM frame.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WriteRSTStream(streamID uint32, code ErrCode) error {
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
+ return errStreamID
+ }
+ f.startWrite(FrameRSTStream, 0, streamID)
+ f.writeUint32(uint32(code))
+ return f.endWrite()
+}
+
+// A ContinuationFrame is used to continue a sequence of header block fragments.
+// See http://http2.github.io/http2-spec/#rfc.section.6.10
+type ContinuationFrame struct {
+ FrameHeader
+ headerFragBuf []byte
+}
+
+func parseContinuationFrame(fh FrameHeader, p []byte) (Frame, error) {
+ return &ContinuationFrame{fh, p}, nil
+}
+
+func (f *ContinuationFrame) StreamEnded() bool {
+ return f.FrameHeader.Flags.Has(FlagDataEndStream)
+}
+
+func (f *ContinuationFrame) HeaderBlockFragment() []byte {
+ f.checkValid()
+ return f.headerFragBuf
+}
+
+func (f *ContinuationFrame) HeadersEnded() bool {
+ return f.FrameHeader.Flags.Has(FlagContinuationEndHeaders)
+}
+
+// WriteContinuation writes a CONTINUATION frame.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WriteContinuation(streamID uint32, endHeaders bool, headerBlockFragment []byte) error {
+ if !validStreamID(streamID) && !f.AllowIllegalWrites {
+ return errStreamID
+ }
+ var flags Flags
+ if endHeaders {
+ flags |= FlagContinuationEndHeaders
+ }
+ f.startWrite(FrameContinuation, flags, streamID)
+ f.wbuf = append(f.wbuf, headerBlockFragment...)
+ return f.endWrite()
+}
+
+// A PushPromiseFrame is used to initiate a server stream.
+// See http://http2.github.io/http2-spec/#rfc.section.6.6
+type PushPromiseFrame struct {
+ FrameHeader
+ PromiseID uint32
+ headerFragBuf []byte // not owned
+}
+
+func (f *PushPromiseFrame) HeaderBlockFragment() []byte {
+ f.checkValid()
+ return f.headerFragBuf
+}
+
+func (f *PushPromiseFrame) HeadersEnded() bool {
+ return f.FrameHeader.Flags.Has(FlagPushPromiseEndHeaders)
+}
+
+func parsePushPromise(fh FrameHeader, p []byte) (_ Frame, err error) {
+ pp := &PushPromiseFrame{
+ FrameHeader: fh,
+ }
+ if pp.StreamID == 0 {
+ // PUSH_PROMISE frames MUST be associated with an existing,
+ // peer-initiated stream. The stream identifier of a
+ // PUSH_PROMISE frame indicates the stream it is associated
+ // with. If the stream identifier field specifies the value
+ // 0x0, a recipient MUST respond with a connection error
+ // (Section 5.4.1) of type PROTOCOL_ERROR.
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ // The PUSH_PROMISE frame includes optional padding.
+ // Padding fields and flags are identical to those defined for DATA frames
+ var padLength uint8
+ if fh.Flags.Has(FlagPushPromisePadded) {
+ if p, padLength, err = readByte(p); err != nil {
+ return
+ }
+ }
+
+ p, pp.PromiseID, err = readUint32(p)
+ if err != nil {
+ return
+ }
+ pp.PromiseID = pp.PromiseID & (1<<31 - 1)
+
+ if int(padLength) > len(p) {
+ // like the DATA frame, error out if padding is longer than the body.
+ return nil, ConnectionError(ErrCodeProtocol)
+ }
+ pp.headerFragBuf = p[:len(p)-int(padLength)]
+ return pp, nil
+}
+
+// PushPromiseParam are the parameters for writing a PUSH_PROMISE frame.
+type PushPromiseParam struct {
+ // StreamID is the required Stream ID to initiate.
+ StreamID uint32
+
+ // PromiseID is the required Stream ID which this
+ // Push Promises
+ PromiseID uint32
+
+ // BlockFragment is part (or all) of a Header Block.
+ BlockFragment []byte
+
+ // EndHeaders indicates that this frame contains an entire
+ // header block and is not followed by any
+ // CONTINUATION frames.
+ EndHeaders bool
+
+ // PadLength is the optional number of bytes of zeros to add
+ // to this frame.
+ PadLength uint8
+}
+
+// WritePushPromise writes a single PushPromise Frame.
+//
+// As with Header Frames, This is the low level call for writing
+// individual frames. Continuation frames are handled elsewhere.
+//
+// It will perform exactly one Write to the underlying Writer.
+// It is the caller's responsibility to not call other Write methods concurrently.
+func (f *Framer) WritePushPromise(p PushPromiseParam) error {
+ if !validStreamID(p.StreamID) && !f.AllowIllegalWrites {
+ return errStreamID
+ }
+ var flags Flags
+ if p.PadLength != 0 {
+ flags |= FlagPushPromisePadded
+ }
+ if p.EndHeaders {
+ flags |= FlagPushPromiseEndHeaders
+ }
+ f.startWrite(FramePushPromise, flags, p.StreamID)
+ if p.PadLength != 0 {
+ f.writeByte(p.PadLength)
+ }
+ if !validStreamID(p.PromiseID) && !f.AllowIllegalWrites {
+ return errStreamID
+ }
+ f.writeUint32(p.PromiseID)
+ f.wbuf = append(f.wbuf, p.BlockFragment...)
+ f.wbuf = append(f.wbuf, padZeros[:p.PadLength]...)
+ return f.endWrite()
+}
+
+// WriteRawFrame writes a raw frame. This can be used to write
+// extension frames unknown to this package.
+func (f *Framer) WriteRawFrame(t FrameType, flags Flags, streamID uint32, payload []byte) error {
+ f.startWrite(t, flags, streamID)
+ f.writeBytes(payload)
+ return f.endWrite()
+}
+
+func readByte(p []byte) (remain []byte, b byte, err error) {
+ if len(p) == 0 {
+ return nil, 0, io.ErrUnexpectedEOF
+ }
+ return p[1:], p[0], nil
+}
+
+func readUint32(p []byte) (remain []byte, v uint32, err error) {
+ if len(p) < 4 {
+ return nil, 0, io.ErrUnexpectedEOF
+ }
+ return p[4:], binary.BigEndian.Uint32(p[:4]), nil
+}
+
+type streamEnder interface {
+ StreamEnded() bool
+}
+
+type headersEnder interface {
+ HeadersEnded() bool
+}
diff --git a/vendor/golang.org/x/net/http2/frame_test.go b/vendor/golang.org/x/net/http2/frame_test.go
new file mode 100644
index 00000000..20027c5f
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/frame_test.go
@@ -0,0 +1,597 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "reflect"
+ "strings"
+ "testing"
+ "unsafe"
+)
+
+func testFramer() (*Framer, *bytes.Buffer) {
+ buf := new(bytes.Buffer)
+ return NewFramer(buf, buf), buf
+}
+
+func TestFrameSizes(t *testing.T) {
+ // Catch people rearranging the FrameHeader fields.
+ if got, want := int(unsafe.Sizeof(FrameHeader{})), 12; got != want {
+ t.Errorf("FrameHeader size = %d; want %d", got, want)
+ }
+}
+
+func TestFrameTypeString(t *testing.T) {
+ tests := []struct {
+ ft FrameType
+ want string
+ }{
+ {FrameData, "DATA"},
+ {FramePing, "PING"},
+ {FrameGoAway, "GOAWAY"},
+ {0xf, "UNKNOWN_FRAME_TYPE_15"},
+ }
+
+ for i, tt := range tests {
+ got := tt.ft.String()
+ if got != tt.want {
+ t.Errorf("%d. String(FrameType %d) = %q; want %q", i, int(tt.ft), got, tt.want)
+ }
+ }
+}
+
+func TestWriteRST(t *testing.T) {
+ fr, buf := testFramer()
+ var streamID uint32 = 1<<24 + 2<<16 + 3<<8 + 4
+ var errCode uint32 = 7<<24 + 6<<16 + 5<<8 + 4
+ fr.WriteRSTStream(streamID, ErrCode(errCode))
+ const wantEnc = "\x00\x00\x04\x03\x00\x01\x02\x03\x04\x07\x06\x05\x04"
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ want := &RSTStreamFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ Type: 0x3,
+ Flags: 0x0,
+ Length: 0x4,
+ StreamID: 0x1020304,
+ },
+ ErrCode: 0x7060504,
+ }
+ if !reflect.DeepEqual(f, want) {
+ t.Errorf("parsed back %#v; want %#v", f, want)
+ }
+}
+
+func TestWriteData(t *testing.T) {
+ fr, buf := testFramer()
+ var streamID uint32 = 1<<24 + 2<<16 + 3<<8 + 4
+ data := []byte("ABC")
+ fr.WriteData(streamID, true, data)
+ const wantEnc = "\x00\x00\x03\x00\x01\x01\x02\x03\x04ABC"
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ df, ok := f.(*DataFrame)
+ if !ok {
+ t.Fatalf("got %T; want *DataFrame", f)
+ }
+ if !bytes.Equal(df.Data(), data) {
+ t.Errorf("got %q; want %q", df.Data(), data)
+ }
+ if f.Header().Flags&1 == 0 {
+ t.Errorf("didn't see END_STREAM flag")
+ }
+}
+
+func TestWriteHeaders(t *testing.T) {
+ tests := []struct {
+ name string
+ p HeadersFrameParam
+ wantEnc string
+ wantFrame *HeadersFrame
+ }{
+ {
+ "basic",
+ HeadersFrameParam{
+ StreamID: 42,
+ BlockFragment: []byte("abc"),
+ Priority: PriorityParam{},
+ },
+ "\x00\x00\x03\x01\x00\x00\x00\x00*abc",
+ &HeadersFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ StreamID: 42,
+ Type: FrameHeaders,
+ Length: uint32(len("abc")),
+ },
+ Priority: PriorityParam{},
+ headerFragBuf: []byte("abc"),
+ },
+ },
+ {
+ "basic + end flags",
+ HeadersFrameParam{
+ StreamID: 42,
+ BlockFragment: []byte("abc"),
+ EndStream: true,
+ EndHeaders: true,
+ Priority: PriorityParam{},
+ },
+ "\x00\x00\x03\x01\x05\x00\x00\x00*abc",
+ &HeadersFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ StreamID: 42,
+ Type: FrameHeaders,
+ Flags: FlagHeadersEndStream | FlagHeadersEndHeaders,
+ Length: uint32(len("abc")),
+ },
+ Priority: PriorityParam{},
+ headerFragBuf: []byte("abc"),
+ },
+ },
+ {
+ "with padding",
+ HeadersFrameParam{
+ StreamID: 42,
+ BlockFragment: []byte("abc"),
+ EndStream: true,
+ EndHeaders: true,
+ PadLength: 5,
+ Priority: PriorityParam{},
+ },
+ "\x00\x00\t\x01\r\x00\x00\x00*\x05abc\x00\x00\x00\x00\x00",
+ &HeadersFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ StreamID: 42,
+ Type: FrameHeaders,
+ Flags: FlagHeadersEndStream | FlagHeadersEndHeaders | FlagHeadersPadded,
+ Length: uint32(1 + len("abc") + 5), // pad length + contents + padding
+ },
+ Priority: PriorityParam{},
+ headerFragBuf: []byte("abc"),
+ },
+ },
+ {
+ "with priority",
+ HeadersFrameParam{
+ StreamID: 42,
+ BlockFragment: []byte("abc"),
+ EndStream: true,
+ EndHeaders: true,
+ PadLength: 2,
+ Priority: PriorityParam{
+ StreamDep: 15,
+ Exclusive: true,
+ Weight: 127,
+ },
+ },
+ "\x00\x00\v\x01-\x00\x00\x00*\x02\x80\x00\x00\x0f\u007fabc\x00\x00",
+ &HeadersFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ StreamID: 42,
+ Type: FrameHeaders,
+ Flags: FlagHeadersEndStream | FlagHeadersEndHeaders | FlagHeadersPadded | FlagHeadersPriority,
+ Length: uint32(1 + 5 + len("abc") + 2), // pad length + priority + contents + padding
+ },
+ Priority: PriorityParam{
+ StreamDep: 15,
+ Exclusive: true,
+ Weight: 127,
+ },
+ headerFragBuf: []byte("abc"),
+ },
+ },
+ }
+ for _, tt := range tests {
+ fr, buf := testFramer()
+ if err := fr.WriteHeaders(tt.p); err != nil {
+ t.Errorf("test %q: %v", tt.name, err)
+ continue
+ }
+ if buf.String() != tt.wantEnc {
+ t.Errorf("test %q: encoded %q; want %q", tt.name, buf.Bytes(), tt.wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Errorf("test %q: failed to read the frame back: %v", tt.name, err)
+ continue
+ }
+ if !reflect.DeepEqual(f, tt.wantFrame) {
+ t.Errorf("test %q: mismatch.\n got: %#v\nwant: %#v\n", tt.name, f, tt.wantFrame)
+ }
+ }
+}
+
+func TestWriteContinuation(t *testing.T) {
+ const streamID = 42
+ tests := []struct {
+ name string
+ end bool
+ frag []byte
+
+ wantFrame *ContinuationFrame
+ }{
+ {
+ "not end",
+ false,
+ []byte("abc"),
+ &ContinuationFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ StreamID: streamID,
+ Type: FrameContinuation,
+ Length: uint32(len("abc")),
+ },
+ headerFragBuf: []byte("abc"),
+ },
+ },
+ {
+ "end",
+ true,
+ []byte("def"),
+ &ContinuationFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ StreamID: streamID,
+ Type: FrameContinuation,
+ Flags: FlagContinuationEndHeaders,
+ Length: uint32(len("def")),
+ },
+ headerFragBuf: []byte("def"),
+ },
+ },
+ }
+ for _, tt := range tests {
+ fr, _ := testFramer()
+ if err := fr.WriteContinuation(streamID, tt.end, tt.frag); err != nil {
+ t.Errorf("test %q: %v", tt.name, err)
+ continue
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Errorf("test %q: failed to read the frame back: %v", tt.name, err)
+ continue
+ }
+ if !reflect.DeepEqual(f, tt.wantFrame) {
+ t.Errorf("test %q: mismatch.\n got: %#v\nwant: %#v\n", tt.name, f, tt.wantFrame)
+ }
+ }
+}
+
+func TestWritePriority(t *testing.T) {
+ const streamID = 42
+ tests := []struct {
+ name string
+ priority PriorityParam
+ wantFrame *PriorityFrame
+ }{
+ {
+ "not exclusive",
+ PriorityParam{
+ StreamDep: 2,
+ Exclusive: false,
+ Weight: 127,
+ },
+ &PriorityFrame{
+ FrameHeader{
+ valid: true,
+ StreamID: streamID,
+ Type: FramePriority,
+ Length: 5,
+ },
+ PriorityParam{
+ StreamDep: 2,
+ Exclusive: false,
+ Weight: 127,
+ },
+ },
+ },
+
+ {
+ "exclusive",
+ PriorityParam{
+ StreamDep: 3,
+ Exclusive: true,
+ Weight: 77,
+ },
+ &PriorityFrame{
+ FrameHeader{
+ valid: true,
+ StreamID: streamID,
+ Type: FramePriority,
+ Length: 5,
+ },
+ PriorityParam{
+ StreamDep: 3,
+ Exclusive: true,
+ Weight: 77,
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ fr, _ := testFramer()
+ if err := fr.WritePriority(streamID, tt.priority); err != nil {
+ t.Errorf("test %q: %v", tt.name, err)
+ continue
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Errorf("test %q: failed to read the frame back: %v", tt.name, err)
+ continue
+ }
+ if !reflect.DeepEqual(f, tt.wantFrame) {
+ t.Errorf("test %q: mismatch.\n got: %#v\nwant: %#v\n", tt.name, f, tt.wantFrame)
+ }
+ }
+}
+
+func TestWriteSettings(t *testing.T) {
+ fr, buf := testFramer()
+ settings := []Setting{{1, 2}, {3, 4}}
+ fr.WriteSettings(settings...)
+ const wantEnc = "\x00\x00\f\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00\x00\x04"
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ sf, ok := f.(*SettingsFrame)
+ if !ok {
+ t.Fatalf("Got a %T; want a SettingsFrame", f)
+ }
+ var got []Setting
+ sf.ForeachSetting(func(s Setting) error {
+ got = append(got, s)
+ valBack, ok := sf.Value(s.ID)
+ if !ok || valBack != s.Val {
+ t.Errorf("Value(%d) = %v, %v; want %v, true", s.ID, valBack, ok, s.Val)
+ }
+ return nil
+ })
+ if !reflect.DeepEqual(settings, got) {
+ t.Errorf("Read settings %+v != written settings %+v", got, settings)
+ }
+}
+
+func TestWriteSettingsAck(t *testing.T) {
+ fr, buf := testFramer()
+ fr.WriteSettingsAck()
+ const wantEnc = "\x00\x00\x00\x04\x01\x00\x00\x00\x00"
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+}
+
+func TestWriteWindowUpdate(t *testing.T) {
+ fr, buf := testFramer()
+ const streamID = 1<<24 + 2<<16 + 3<<8 + 4
+ const incr = 7<<24 + 6<<16 + 5<<8 + 4
+ if err := fr.WriteWindowUpdate(streamID, incr); err != nil {
+ t.Fatal(err)
+ }
+ const wantEnc = "\x00\x00\x04\x08\x00\x01\x02\x03\x04\x07\x06\x05\x04"
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ want := &WindowUpdateFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ Type: 0x8,
+ Flags: 0x0,
+ Length: 0x4,
+ StreamID: 0x1020304,
+ },
+ Increment: 0x7060504,
+ }
+ if !reflect.DeepEqual(f, want) {
+ t.Errorf("parsed back %#v; want %#v", f, want)
+ }
+}
+
+func TestWritePing(t *testing.T) { testWritePing(t, false) }
+func TestWritePingAck(t *testing.T) { testWritePing(t, true) }
+
+func testWritePing(t *testing.T, ack bool) {
+ fr, buf := testFramer()
+ if err := fr.WritePing(ack, [8]byte{1, 2, 3, 4, 5, 6, 7, 8}); err != nil {
+ t.Fatal(err)
+ }
+ var wantFlags Flags
+ if ack {
+ wantFlags = FlagPingAck
+ }
+ var wantEnc = "\x00\x00\x08\x06" + string(wantFlags) + "\x00\x00\x00\x00" + "\x01\x02\x03\x04\x05\x06\x07\x08"
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ want := &PingFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ Type: 0x6,
+ Flags: wantFlags,
+ Length: 0x8,
+ StreamID: 0,
+ },
+ Data: [8]byte{1, 2, 3, 4, 5, 6, 7, 8},
+ }
+ if !reflect.DeepEqual(f, want) {
+ t.Errorf("parsed back %#v; want %#v", f, want)
+ }
+}
+
+func TestReadFrameHeader(t *testing.T) {
+ tests := []struct {
+ in string
+ want FrameHeader
+ }{
+ {in: "\x00\x00\x00" + "\x00" + "\x00" + "\x00\x00\x00\x00", want: FrameHeader{}},
+ {in: "\x01\x02\x03" + "\x04" + "\x05" + "\x06\x07\x08\x09", want: FrameHeader{
+ Length: 66051, Type: 4, Flags: 5, StreamID: 101124105,
+ }},
+ // Ignore high bit:
+ {in: "\xff\xff\xff" + "\xff" + "\xff" + "\xff\xff\xff\xff", want: FrameHeader{
+ Length: 16777215, Type: 255, Flags: 255, StreamID: 2147483647}},
+ {in: "\xff\xff\xff" + "\xff" + "\xff" + "\x7f\xff\xff\xff", want: FrameHeader{
+ Length: 16777215, Type: 255, Flags: 255, StreamID: 2147483647}},
+ }
+ for i, tt := range tests {
+ got, err := readFrameHeader(make([]byte, 9), strings.NewReader(tt.in))
+ if err != nil {
+ t.Errorf("%d. readFrameHeader(%q) = %v", i, tt.in, err)
+ continue
+ }
+ tt.want.valid = true
+ if got != tt.want {
+ t.Errorf("%d. readFrameHeader(%q) = %+v; want %+v", i, tt.in, got, tt.want)
+ }
+ }
+}
+
+func TestReadWriteFrameHeader(t *testing.T) {
+ tests := []struct {
+ len uint32
+ typ FrameType
+ flags Flags
+ streamID uint32
+ }{
+ {len: 0, typ: 255, flags: 1, streamID: 0},
+ {len: 0, typ: 255, flags: 1, streamID: 1},
+ {len: 0, typ: 255, flags: 1, streamID: 255},
+ {len: 0, typ: 255, flags: 1, streamID: 256},
+ {len: 0, typ: 255, flags: 1, streamID: 65535},
+ {len: 0, typ: 255, flags: 1, streamID: 65536},
+
+ {len: 0, typ: 1, flags: 255, streamID: 1},
+ {len: 255, typ: 1, flags: 255, streamID: 1},
+ {len: 256, typ: 1, flags: 255, streamID: 1},
+ {len: 65535, typ: 1, flags: 255, streamID: 1},
+ {len: 65536, typ: 1, flags: 255, streamID: 1},
+ {len: 16777215, typ: 1, flags: 255, streamID: 1},
+ }
+ for _, tt := range tests {
+ fr, buf := testFramer()
+ fr.startWrite(tt.typ, tt.flags, tt.streamID)
+ fr.writeBytes(make([]byte, tt.len))
+ fr.endWrite()
+ fh, err := ReadFrameHeader(buf)
+ if err != nil {
+ t.Errorf("ReadFrameHeader(%+v) = %v", tt, err)
+ continue
+ }
+ if fh.Type != tt.typ || fh.Flags != tt.flags || fh.Length != tt.len || fh.StreamID != tt.streamID {
+ t.Errorf("ReadFrameHeader(%+v) = %+v; mismatch", tt, fh)
+ }
+ }
+
+}
+
+func TestWriteTooLargeFrame(t *testing.T) {
+ fr, _ := testFramer()
+ fr.startWrite(0, 1, 1)
+ fr.writeBytes(make([]byte, 1<<24))
+ err := fr.endWrite()
+ if err != ErrFrameTooLarge {
+ t.Errorf("endWrite = %v; want errFrameTooLarge", err)
+ }
+}
+
+func TestWriteGoAway(t *testing.T) {
+ const debug = "foo"
+ fr, buf := testFramer()
+ if err := fr.WriteGoAway(0x01020304, 0x05060708, []byte(debug)); err != nil {
+ t.Fatal(err)
+ }
+ const wantEnc = "\x00\x00\v\a\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08" + debug
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ want := &GoAwayFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ Type: 0x7,
+ Flags: 0,
+ Length: uint32(4 + 4 + len(debug)),
+ StreamID: 0,
+ },
+ LastStreamID: 0x01020304,
+ ErrCode: 0x05060708,
+ debugData: []byte(debug),
+ }
+ if !reflect.DeepEqual(f, want) {
+ t.Fatalf("parsed back:\n%#v\nwant:\n%#v", f, want)
+ }
+ if got := string(f.(*GoAwayFrame).DebugData()); got != debug {
+ t.Errorf("debug data = %q; want %q", got, debug)
+ }
+}
+
+func TestWritePushPromise(t *testing.T) {
+ pp := PushPromiseParam{
+ StreamID: 42,
+ PromiseID: 42,
+ BlockFragment: []byte("abc"),
+ }
+ fr, buf := testFramer()
+ if err := fr.WritePushPromise(pp); err != nil {
+ t.Fatal(err)
+ }
+ const wantEnc = "\x00\x00\x07\x05\x00\x00\x00\x00*\x00\x00\x00*abc"
+ if buf.String() != wantEnc {
+ t.Errorf("encoded as %q; want %q", buf.Bytes(), wantEnc)
+ }
+ f, err := fr.ReadFrame()
+ if err != nil {
+ t.Fatal(err)
+ }
+ _, ok := f.(*PushPromiseFrame)
+ if !ok {
+ t.Fatalf("got %T; want *PushPromiseFrame", f)
+ }
+ want := &PushPromiseFrame{
+ FrameHeader: FrameHeader{
+ valid: true,
+ Type: 0x5,
+ Flags: 0x0,
+ Length: 0x7,
+ StreamID: 42,
+ },
+ PromiseID: 42,
+ headerFragBuf: []byte("abc"),
+ }
+ if !reflect.DeepEqual(f, want) {
+ t.Fatalf("parsed back:\n%#v\nwant:\n%#v", f, want)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/go15.go b/vendor/golang.org/x/net/http2/go15.go
new file mode 100644
index 00000000..dbf6033f
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/go15.go
@@ -0,0 +1,13 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !go1.6
+
+package http2
+
+import "net/http"
+
+func configureTransport(t1 *http.Transport) error {
+ return errTransportVersion
+}
diff --git a/vendor/golang.org/x/net/http2/gotrack.go b/vendor/golang.org/x/net/http2/gotrack.go
new file mode 100644
index 00000000..9933c9f8
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/gotrack.go
@@ -0,0 +1,170 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Defensive debug-only utility to track that functions run on the
+// goroutine that they're supposed to.
+
+package http2
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "os"
+ "runtime"
+ "strconv"
+ "sync"
+)
+
+var DebugGoroutines = os.Getenv("DEBUG_HTTP2_GOROUTINES") == "1"
+
+type goroutineLock uint64
+
+func newGoroutineLock() goroutineLock {
+ if !DebugGoroutines {
+ return 0
+ }
+ return goroutineLock(curGoroutineID())
+}
+
+func (g goroutineLock) check() {
+ if !DebugGoroutines {
+ return
+ }
+ if curGoroutineID() != uint64(g) {
+ panic("running on the wrong goroutine")
+ }
+}
+
+func (g goroutineLock) checkNotOn() {
+ if !DebugGoroutines {
+ return
+ }
+ if curGoroutineID() == uint64(g) {
+ panic("running on the wrong goroutine")
+ }
+}
+
+var goroutineSpace = []byte("goroutine ")
+
+func curGoroutineID() uint64 {
+ bp := littleBuf.Get().(*[]byte)
+ defer littleBuf.Put(bp)
+ b := *bp
+ b = b[:runtime.Stack(b, false)]
+ // Parse the 4707 out of "goroutine 4707 ["
+ b = bytes.TrimPrefix(b, goroutineSpace)
+ i := bytes.IndexByte(b, ' ')
+ if i < 0 {
+ panic(fmt.Sprintf("No space found in %q", b))
+ }
+ b = b[:i]
+ n, err := parseUintBytes(b, 10, 64)
+ if err != nil {
+ panic(fmt.Sprintf("Failed to parse goroutine ID out of %q: %v", b, err))
+ }
+ return n
+}
+
+var littleBuf = sync.Pool{
+ New: func() interface{} {
+ buf := make([]byte, 64)
+ return &buf
+ },
+}
+
+// parseUintBytes is like strconv.ParseUint, but using a []byte.
+func parseUintBytes(s []byte, base int, bitSize int) (n uint64, err error) {
+ var cutoff, maxVal uint64
+
+ if bitSize == 0 {
+ bitSize = int(strconv.IntSize)
+ }
+
+ s0 := s
+ switch {
+ case len(s) < 1:
+ err = strconv.ErrSyntax
+ goto Error
+
+ case 2 <= base && base <= 36:
+ // valid base; nothing to do
+
+ case base == 0:
+ // Look for octal, hex prefix.
+ switch {
+ case s[0] == '0' && len(s) > 1 && (s[1] == 'x' || s[1] == 'X'):
+ base = 16
+ s = s[2:]
+ if len(s) < 1 {
+ err = strconv.ErrSyntax
+ goto Error
+ }
+ case s[0] == '0':
+ base = 8
+ default:
+ base = 10
+ }
+
+ default:
+ err = errors.New("invalid base " + strconv.Itoa(base))
+ goto Error
+ }
+
+ n = 0
+ cutoff = cutoff64(base)
+ maxVal = 1<= base {
+ n = 0
+ err = strconv.ErrSyntax
+ goto Error
+ }
+
+ if n >= cutoff {
+ // n*base overflows
+ n = 1<<64 - 1
+ err = strconv.ErrRange
+ goto Error
+ }
+ n *= uint64(base)
+
+ n1 := n + uint64(v)
+ if n1 < n || n1 > maxVal {
+ // n+v overflows
+ n = 1<<64 - 1
+ err = strconv.ErrRange
+ goto Error
+ }
+ n = n1
+ }
+
+ return n, nil
+
+Error:
+ return n, &strconv.NumError{Func: "ParseUint", Num: string(s0), Err: err}
+}
+
+// Return the first number n such that n*base >= 1<<64.
+func cutoff64(base int) uint64 {
+ if base < 2 {
+ return 0
+ }
+ return (1<<64-1)/uint64(base) + 1
+}
diff --git a/vendor/golang.org/x/net/http2/gotrack_test.go b/vendor/golang.org/x/net/http2/gotrack_test.go
new file mode 100644
index 00000000..3147cf8c
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/gotrack_test.go
@@ -0,0 +1,30 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "fmt"
+ "strings"
+ "testing"
+)
+
+func TestGoroutineLock(t *testing.T) {
+ DebugGoroutines = true
+ g := newGoroutineLock()
+ g.check()
+
+ sawPanic := make(chan interface{})
+ go func() {
+ defer func() { sawPanic <- recover() }()
+ g.check() // should panic
+ }()
+ e := <-sawPanic
+ if e == nil {
+ t.Fatal("did not see panic from check in other goroutine")
+ }
+ if !strings.Contains(fmt.Sprint(e), "wrong goroutine") {
+ t.Errorf("expected on see panic about running on the wrong goroutine; got %v", e)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/h2demo/.gitignore b/vendor/golang.org/x/net/http2/h2demo/.gitignore
new file mode 100644
index 00000000..0de86ddb
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/.gitignore
@@ -0,0 +1,5 @@
+h2demo
+h2demo.linux
+client-id.dat
+client-secret.dat
+token.dat
diff --git a/vendor/golang.org/x/net/http2/h2demo/Makefile b/vendor/golang.org/x/net/http2/h2demo/Makefile
new file mode 100644
index 00000000..3a77cf07
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/Makefile
@@ -0,0 +1,5 @@
+h2demo.linux: h2demo.go
+ GOOS=linux go build --tags=h2demo -o h2demo.linux .
+
+upload: h2demo.linux
+ cat h2demo.linux | go run launch.go --write_object=http2-demo-server-tls/h2demo --write_object_is_public
diff --git a/vendor/golang.org/x/net/http2/h2demo/README b/vendor/golang.org/x/net/http2/h2demo/README
new file mode 100644
index 00000000..212a96f3
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/README
@@ -0,0 +1,16 @@
+
+Client:
+ -- Firefox nightly with about:config network.http.spdy.enabled.http2draft set true
+ -- Chrome: go to chrome://flags/#enable-spdy4, save and restart (button at bottom)
+
+Make CA:
+$ openssl genrsa -out rootCA.key 2048
+$ openssl req -x509 -new -nodes -key rootCA.key -days 1024 -out rootCA.pem
+... install that to Firefox
+
+Make cert:
+$ openssl genrsa -out server.key 2048
+$ openssl req -new -key server.key -out server.csr
+$ openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500
+
+
diff --git a/vendor/golang.org/x/net/http2/h2demo/h2demo.go b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
new file mode 100644
index 00000000..84b89e2b
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
@@ -0,0 +1,436 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build h2demo
+
+package main
+
+import (
+ "bytes"
+ "crypto/tls"
+ "flag"
+ "fmt"
+ "hash/crc32"
+ "image"
+ "image/jpeg"
+ "io"
+ "io/ioutil"
+ "log"
+ "net"
+ "net/http"
+ "path"
+ "regexp"
+ "runtime"
+ "strconv"
+ "strings"
+ "sync"
+ "time"
+
+ "camlistore.org/pkg/googlestorage"
+ "camlistore.org/pkg/singleflight"
+ "golang.org/x/net/http2"
+)
+
+var (
+ prod = flag.Bool("prod", false, "Whether to configure itself to be the production http2.golang.org server.")
+
+ httpsAddr = flag.String("https_addr", "localhost:4430", "TLS address to listen on ('host:port' or ':port'). Required.")
+ httpAddr = flag.String("http_addr", "", "Plain HTTP address to listen on ('host:port', or ':port'). Empty means no HTTP.")
+
+ hostHTTP = flag.String("http_host", "", "Optional host or host:port to use for http:// links to this service. By default, this is implied from -http_addr.")
+ hostHTTPS = flag.String("https_host", "", "Optional host or host:port to use for http:// links to this service. By default, this is implied from -https_addr.")
+)
+
+func homeOldHTTP(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, `
+
+Go + HTTP/2
+Welcome to the Go language 's HTTP/2 demo & interop server.
+Unfortunately, you're not using HTTP/2 right now. To do so:
+
+ Use Firefox Nightly or go to about:config and enable "network.http.spdy.enabled.http2draft"
+ Use Google Chrome Canary and/or go to chrome://flags/#enable-spdy4 to Enable SPDY/4 (Chrome's name for HTTP/2)
+
+See code & instructions for connecting at https://github.com/golang/net/tree/master/http2 .
+
+`)
+}
+
+func home(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path != "/" {
+ http.NotFound(w, r)
+ return
+ }
+ io.WriteString(w, `
+
+Go + HTTP/2
+
+Welcome to the Go language 's HTTP/2 demo & interop server.
+
+Congratulations, you're using HTTP/2 right now .
+
+This server exists for others in the HTTP/2 community to test their HTTP/2 client implementations and point out flaws in our server.
+
+ The code is currently at golang.org/x/net/http2
+but will move to the Go standard library at some point in the future
+(enabled by default, without users needing to change their code).
+
+Contact info: bradfitz@golang.org , or file a bug .
+
+Handlers for testing
+
+ GET /reqinfo to dump the request + headers received
+ GET /clockstream streams the current time every second
+ GET /gophertiles to see a page with a bunch of images
+ GET /file/gopher.png for a small file (does If-Modified-Since, Content-Range, etc)
+ GET /file/go.src.tar.gz for a larger file (~10 MB)
+ GET /redirect to redirect back to / (this page)
+ GET /goroutines to see all active goroutines in this server
+ PUT something to /crc32 to get a count of number of bytes and its CRC-32
+
+
+`)
+}
+
+func reqInfoHandler(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "text/plain")
+ fmt.Fprintf(w, "Method: %s\n", r.Method)
+ fmt.Fprintf(w, "Protocol: %s\n", r.Proto)
+ fmt.Fprintf(w, "Host: %s\n", r.Host)
+ fmt.Fprintf(w, "RemoteAddr: %s\n", r.RemoteAddr)
+ fmt.Fprintf(w, "RequestURI: %q\n", r.RequestURI)
+ fmt.Fprintf(w, "URL: %#v\n", r.URL)
+ fmt.Fprintf(w, "Body.ContentLength: %d (-1 means unknown)\n", r.ContentLength)
+ fmt.Fprintf(w, "Close: %v (relevant for HTTP/1 only)\n", r.Close)
+ fmt.Fprintf(w, "TLS: %#v\n", r.TLS)
+ fmt.Fprintf(w, "\nHeaders:\n")
+ r.Header.Write(w)
+}
+
+func crcHandler(w http.ResponseWriter, r *http.Request) {
+ if r.Method != "PUT" {
+ http.Error(w, "PUT required.", 400)
+ return
+ }
+ crc := crc32.NewIEEE()
+ n, err := io.Copy(crc, r.Body)
+ if err == nil {
+ w.Header().Set("Content-Type", "text/plain")
+ fmt.Fprintf(w, "bytes=%d, CRC32=%x", n, crc.Sum(nil))
+ }
+}
+
+var (
+ fsGrp singleflight.Group
+ fsMu sync.Mutex // guards fsCache
+ fsCache = map[string]http.Handler{}
+)
+
+// fileServer returns a file-serving handler that proxies URL.
+// It lazily fetches URL on the first access and caches its contents forever.
+func fileServer(url string) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ hi, err := fsGrp.Do(url, func() (interface{}, error) {
+ fsMu.Lock()
+ if h, ok := fsCache[url]; ok {
+ fsMu.Unlock()
+ return h, nil
+ }
+ fsMu.Unlock()
+
+ res, err := http.Get(url)
+ if err != nil {
+ return nil, err
+ }
+ defer res.Body.Close()
+ slurp, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ return nil, err
+ }
+
+ modTime := time.Now()
+ var h http.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ http.ServeContent(w, r, path.Base(url), modTime, bytes.NewReader(slurp))
+ })
+ fsMu.Lock()
+ fsCache[url] = h
+ fsMu.Unlock()
+ return h, nil
+ })
+ if err != nil {
+ http.Error(w, err.Error(), 500)
+ return
+ }
+ hi.(http.Handler).ServeHTTP(w, r)
+ })
+}
+
+func clockStreamHandler(w http.ResponseWriter, r *http.Request) {
+ clientGone := w.(http.CloseNotifier).CloseNotify()
+ w.Header().Set("Content-Type", "text/plain")
+ ticker := time.NewTicker(1 * time.Second)
+ defer ticker.Stop()
+ fmt.Fprintf(w, "# ~1KB of junk to force browsers to start rendering immediately: \n")
+ io.WriteString(w, strings.Repeat("# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", 13))
+
+ for {
+ fmt.Fprintf(w, "%v\n", time.Now())
+ w.(http.Flusher).Flush()
+ select {
+ case <-ticker.C:
+ case <-clientGone:
+ log.Printf("Client %v disconnected from the clock", r.RemoteAddr)
+ return
+ }
+ }
+}
+
+func registerHandlers() {
+ tiles := newGopherTilesHandler()
+
+ mux2 := http.NewServeMux()
+ http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+ if r.TLS == nil {
+ if r.URL.Path == "/gophertiles" {
+ tiles.ServeHTTP(w, r)
+ return
+ }
+ http.Redirect(w, r, "https://"+httpsHost()+"/", http.StatusFound)
+ return
+ }
+ if r.ProtoMajor == 1 {
+ if r.URL.Path == "/reqinfo" {
+ reqInfoHandler(w, r)
+ return
+ }
+ homeOldHTTP(w, r)
+ return
+ }
+ mux2.ServeHTTP(w, r)
+ })
+ mux2.HandleFunc("/", home)
+ mux2.Handle("/file/gopher.png", fileServer("https://golang.org/doc/gopher/frontpage.png"))
+ mux2.Handle("/file/go.src.tar.gz", fileServer("https://storage.googleapis.com/golang/go1.4.1.src.tar.gz"))
+ mux2.HandleFunc("/reqinfo", reqInfoHandler)
+ mux2.HandleFunc("/crc32", crcHandler)
+ mux2.HandleFunc("/clockstream", clockStreamHandler)
+ mux2.Handle("/gophertiles", tiles)
+ mux2.HandleFunc("/redirect", func(w http.ResponseWriter, r *http.Request) {
+ http.Redirect(w, r, "/", http.StatusFound)
+ })
+ stripHomedir := regexp.MustCompile(`/(Users|home)/\w+`)
+ mux2.HandleFunc("/goroutines", func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "text/plain; charset=utf-8")
+ buf := make([]byte, 2<<20)
+ w.Write(stripHomedir.ReplaceAll(buf[:runtime.Stack(buf, true)], nil))
+ })
+}
+
+func newGopherTilesHandler() http.Handler {
+ const gopherURL = "https://blog.golang.org/go-programming-language-turns-two_gophers.jpg"
+ res, err := http.Get(gopherURL)
+ if err != nil {
+ log.Fatal(err)
+ }
+ if res.StatusCode != 200 {
+ log.Fatalf("Error fetching %s: %v", gopherURL, res.Status)
+ }
+ slurp, err := ioutil.ReadAll(res.Body)
+ res.Body.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
+ im, err := jpeg.Decode(bytes.NewReader(slurp))
+ if err != nil {
+ if len(slurp) > 1024 {
+ slurp = slurp[:1024]
+ }
+ log.Fatalf("Failed to decode gopher image: %v (got %q)", err, slurp)
+ }
+
+ type subImager interface {
+ SubImage(image.Rectangle) image.Image
+ }
+ const tileSize = 32
+ xt := im.Bounds().Max.X / tileSize
+ yt := im.Bounds().Max.Y / tileSize
+ var tile [][][]byte // y -> x -> jpeg bytes
+ for yi := 0; yi < yt; yi++ {
+ var row [][]byte
+ for xi := 0; xi < xt; xi++ {
+ si := im.(subImager).SubImage(image.Rectangle{
+ Min: image.Point{xi * tileSize, yi * tileSize},
+ Max: image.Point{(xi + 1) * tileSize, (yi + 1) * tileSize},
+ })
+ buf := new(bytes.Buffer)
+ if err := jpeg.Encode(buf, si, &jpeg.Options{Quality: 90}); err != nil {
+ log.Fatal(err)
+ }
+ row = append(row, buf.Bytes())
+ }
+ tile = append(tile, row)
+ }
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ms, _ := strconv.Atoi(r.FormValue("latency"))
+ const nanosPerMilli = 1e6
+ if r.FormValue("x") != "" {
+ x, _ := strconv.Atoi(r.FormValue("x"))
+ y, _ := strconv.Atoi(r.FormValue("y"))
+ if ms <= 1000 {
+ time.Sleep(time.Duration(ms) * nanosPerMilli)
+ }
+ if x >= 0 && x < xt && y >= 0 && y < yt {
+ http.ServeContent(w, r, "", time.Time{}, bytes.NewReader(tile[y][x]))
+ return
+ }
+ }
+ io.WriteString(w, "")
+ fmt.Fprintf(w, "A grid of %d tiled images is below. Compare:", xt*yt)
+ for _, ms := range []int{0, 30, 200, 1000} {
+ d := time.Duration(ms) * nanosPerMilli
+ fmt.Fprintf(w, "[HTTP/2, %v latency ] [HTTP/1, %v latency ] \n",
+ httpsHost(), ms, d,
+ httpHost(), ms, d,
+ )
+ }
+ io.WriteString(w, "
\n")
+ cacheBust := time.Now().UnixNano()
+ for y := 0; y < yt; y++ {
+ for x := 0; x < xt; x++ {
+ fmt.Fprintf(w, " ",
+ tileSize, tileSize, x, y, cacheBust, ms)
+ }
+ io.WriteString(w, " \n")
+ }
+ io.WriteString(w, `
+
+<< Back to Go HTTP/2 demo server `)
+ })
+}
+
+func httpsHost() string {
+ if *hostHTTPS != "" {
+ return *hostHTTPS
+ }
+ if v := *httpsAddr; strings.HasPrefix(v, ":") {
+ return "localhost" + v
+ } else {
+ return v
+ }
+}
+
+func httpHost() string {
+ if *hostHTTP != "" {
+ return *hostHTTP
+ }
+ if v := *httpAddr; strings.HasPrefix(v, ":") {
+ return "localhost" + v
+ } else {
+ return v
+ }
+}
+
+func serveProdTLS() error {
+ c, err := googlestorage.NewServiceClient()
+ if err != nil {
+ return err
+ }
+ slurp := func(key string) ([]byte, error) {
+ const bucket = "http2-demo-server-tls"
+ rc, _, err := c.GetObject(&googlestorage.Object{
+ Bucket: bucket,
+ Key: key,
+ })
+ if err != nil {
+ return nil, fmt.Errorf("Error fetching GCS object %q in bucket %q: %v", key, bucket, err)
+ }
+ defer rc.Close()
+ return ioutil.ReadAll(rc)
+ }
+ certPem, err := slurp("http2.golang.org.chained.pem")
+ if err != nil {
+ return err
+ }
+ keyPem, err := slurp("http2.golang.org.key")
+ if err != nil {
+ return err
+ }
+ cert, err := tls.X509KeyPair(certPem, keyPem)
+ if err != nil {
+ return err
+ }
+ srv := &http.Server{
+ TLSConfig: &tls.Config{
+ Certificates: []tls.Certificate{cert},
+ },
+ }
+ http2.ConfigureServer(srv, &http2.Server{})
+ ln, err := net.Listen("tcp", ":443")
+ if err != nil {
+ return err
+ }
+ return srv.Serve(tls.NewListener(tcpKeepAliveListener{ln.(*net.TCPListener)}, srv.TLSConfig))
+}
+
+type tcpKeepAliveListener struct {
+ *net.TCPListener
+}
+
+func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) {
+ tc, err := ln.AcceptTCP()
+ if err != nil {
+ return
+ }
+ tc.SetKeepAlive(true)
+ tc.SetKeepAlivePeriod(3 * time.Minute)
+ return tc, nil
+}
+
+func serveProd() error {
+ errc := make(chan error, 2)
+ go func() { errc <- http.ListenAndServe(":80", nil) }()
+ go func() { errc <- serveProdTLS() }()
+ return <-errc
+}
+
+func main() {
+ var srv http.Server
+ flag.BoolVar(&http2.VerboseLogs, "verbose", false, "Verbose HTTP/2 debugging.")
+ flag.Parse()
+ srv.Addr = *httpsAddr
+
+ registerHandlers()
+
+ if *prod {
+ *hostHTTP = "http2.golang.org"
+ *hostHTTPS = "http2.golang.org"
+ log.Fatal(serveProd())
+ }
+
+ url := "https://" + httpsHost() + "/"
+ log.Printf("Listening on " + url)
+ http2.ConfigureServer(&srv, &http2.Server{})
+
+ if *httpAddr != "" {
+ go func() {
+ log.Printf("Listening on http://" + httpHost() + "/ (for unencrypted HTTP/1)")
+ log.Fatal(http.ListenAndServe(*httpAddr, nil))
+ }()
+ }
+
+ go func() {
+ log.Fatal(srv.ListenAndServeTLS("server.crt", "server.key"))
+ }()
+ select {}
+}
diff --git a/vendor/golang.org/x/net/http2/h2demo/launch.go b/vendor/golang.org/x/net/http2/h2demo/launch.go
new file mode 100644
index 00000000..74666154
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/launch.go
@@ -0,0 +1,302 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+import (
+ "bufio"
+ "bytes"
+ "encoding/json"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "net/http"
+ "os"
+ "strings"
+ "time"
+
+ "golang.org/x/oauth2"
+ "golang.org/x/oauth2/google"
+ compute "google.golang.org/api/compute/v1"
+)
+
+var (
+ proj = flag.String("project", "symbolic-datum-552", "name of Project")
+ zone = flag.String("zone", "us-central1-a", "GCE zone")
+ mach = flag.String("machinetype", "n1-standard-1", "Machine type")
+ instName = flag.String("instance_name", "http2-demo", "Name of VM instance.")
+ sshPub = flag.String("ssh_public_key", "", "ssh public key file to authorize. Can modify later in Google's web UI anyway.")
+ staticIP = flag.String("static_ip", "130.211.116.44", "Static IP to use. If empty, automatic.")
+
+ writeObject = flag.String("write_object", "", "If non-empty, a VM isn't created and the flag value is Google Cloud Storage bucket/object to write. The contents from stdin.")
+ publicObject = flag.Bool("write_object_is_public", false, "Whether the object created by --write_object should be public.")
+)
+
+func readFile(v string) string {
+ slurp, err := ioutil.ReadFile(v)
+ if err != nil {
+ log.Fatalf("Error reading %s: %v", v, err)
+ }
+ return strings.TrimSpace(string(slurp))
+}
+
+var config = &oauth2.Config{
+ // The client-id and secret should be for an "Installed Application" when using
+ // the CLI. Later we'll use a web application with a callback.
+ ClientID: readFile("client-id.dat"),
+ ClientSecret: readFile("client-secret.dat"),
+ Endpoint: google.Endpoint,
+ Scopes: []string{
+ compute.DevstorageFull_controlScope,
+ compute.ComputeScope,
+ "https://www.googleapis.com/auth/sqlservice",
+ "https://www.googleapis.com/auth/sqlservice.admin",
+ },
+ RedirectURL: "urn:ietf:wg:oauth:2.0:oob",
+}
+
+const baseConfig = `#cloud-config
+coreos:
+ units:
+ - name: h2demo.service
+ command: start
+ content: |
+ [Unit]
+ Description=HTTP2 Demo
+
+ [Service]
+ ExecStartPre=/bin/bash -c 'mkdir -p /opt/bin && curl -s -o /opt/bin/h2demo http://storage.googleapis.com/http2-demo-server-tls/h2demo && chmod +x /opt/bin/h2demo'
+ ExecStart=/opt/bin/h2demo --prod
+ RestartSec=5s
+ Restart=always
+ Type=simple
+
+ [Install]
+ WantedBy=multi-user.target
+`
+
+func main() {
+ flag.Parse()
+ if *proj == "" {
+ log.Fatalf("Missing --project flag")
+ }
+ prefix := "https://www.googleapis.com/compute/v1/projects/" + *proj
+ machType := prefix + "/zones/" + *zone + "/machineTypes/" + *mach
+
+ const tokenFileName = "token.dat"
+ tokenFile := tokenCacheFile(tokenFileName)
+ tokenSource := oauth2.ReuseTokenSource(nil, tokenFile)
+ token, err := tokenSource.Token()
+ if err != nil {
+ if *writeObject != "" {
+ log.Fatalf("Can't use --write_object without a valid token.dat file already cached.")
+ }
+ log.Printf("Error getting token from %s: %v", tokenFileName, err)
+ log.Printf("Get auth code from %v", config.AuthCodeURL("my-state"))
+ fmt.Print("\nEnter auth code: ")
+ sc := bufio.NewScanner(os.Stdin)
+ sc.Scan()
+ authCode := strings.TrimSpace(sc.Text())
+ token, err = config.Exchange(oauth2.NoContext, authCode)
+ if err != nil {
+ log.Fatalf("Error exchanging auth code for a token: %v", err)
+ }
+ if err := tokenFile.WriteToken(token); err != nil {
+ log.Fatalf("Error writing to %s: %v", tokenFileName, err)
+ }
+ tokenSource = oauth2.ReuseTokenSource(token, nil)
+ }
+
+ oauthClient := oauth2.NewClient(oauth2.NoContext, tokenSource)
+
+ if *writeObject != "" {
+ writeCloudStorageObject(oauthClient)
+ return
+ }
+
+ computeService, _ := compute.New(oauthClient)
+
+ natIP := *staticIP
+ if natIP == "" {
+ // Try to find it by name.
+ aggAddrList, err := computeService.Addresses.AggregatedList(*proj).Do()
+ if err != nil {
+ log.Fatal(err)
+ }
+ // http://godoc.org/code.google.com/p/google-api-go-client/compute/v1#AddressAggregatedList
+ IPLoop:
+ for _, asl := range aggAddrList.Items {
+ for _, addr := range asl.Addresses {
+ if addr.Name == *instName+"-ip" && addr.Status == "RESERVED" {
+ natIP = addr.Address
+ break IPLoop
+ }
+ }
+ }
+ }
+
+ cloudConfig := baseConfig
+ if *sshPub != "" {
+ key := strings.TrimSpace(readFile(*sshPub))
+ cloudConfig += fmt.Sprintf("\nssh_authorized_keys:\n - %s\n", key)
+ }
+ if os.Getenv("USER") == "bradfitz" {
+ cloudConfig += fmt.Sprintf("\nssh_authorized_keys:\n - %s\n", "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwks9dwWKlRC+73gRbvYtVg0vdCwDSuIlyt4z6xa/YU/jTDynM4R4W10hm2tPjy8iR1k8XhDv4/qdxe6m07NjG/By1tkmGpm1mGwho4Pr5kbAAy/Qg+NLCSdAYnnE00FQEcFOC15GFVMOW2AzDGKisReohwH9eIzHPzdYQNPRWXE= bradfitz@papag.bradfitz.com")
+ }
+ const maxCloudConfig = 32 << 10 // per compute API docs
+ if len(cloudConfig) > maxCloudConfig {
+ log.Fatalf("cloud config length of %d bytes is over %d byte limit", len(cloudConfig), maxCloudConfig)
+ }
+
+ instance := &compute.Instance{
+ Name: *instName,
+ Description: "Go Builder",
+ MachineType: machType,
+ Disks: []*compute.AttachedDisk{instanceDisk(computeService)},
+ Tags: &compute.Tags{
+ Items: []string{"http-server", "https-server"},
+ },
+ Metadata: &compute.Metadata{
+ Items: []*compute.MetadataItems{
+ {
+ Key: "user-data",
+ Value: cloudConfig,
+ },
+ },
+ },
+ NetworkInterfaces: []*compute.NetworkInterface{
+ &compute.NetworkInterface{
+ AccessConfigs: []*compute.AccessConfig{
+ &compute.AccessConfig{
+ Type: "ONE_TO_ONE_NAT",
+ Name: "External NAT",
+ NatIP: natIP,
+ },
+ },
+ Network: prefix + "/global/networks/default",
+ },
+ },
+ ServiceAccounts: []*compute.ServiceAccount{
+ {
+ Email: "default",
+ Scopes: []string{
+ compute.DevstorageFull_controlScope,
+ compute.ComputeScope,
+ },
+ },
+ },
+ }
+
+ log.Printf("Creating instance...")
+ op, err := computeService.Instances.Insert(*proj, *zone, instance).Do()
+ if err != nil {
+ log.Fatalf("Failed to create instance: %v", err)
+ }
+ opName := op.Name
+ log.Printf("Created. Waiting on operation %v", opName)
+OpLoop:
+ for {
+ time.Sleep(2 * time.Second)
+ op, err := computeService.ZoneOperations.Get(*proj, *zone, opName).Do()
+ if err != nil {
+ log.Fatalf("Failed to get op %s: %v", opName, err)
+ }
+ switch op.Status {
+ case "PENDING", "RUNNING":
+ log.Printf("Waiting on operation %v", opName)
+ continue
+ case "DONE":
+ if op.Error != nil {
+ for _, operr := range op.Error.Errors {
+ log.Printf("Error: %+v", operr)
+ }
+ log.Fatalf("Failed to start.")
+ }
+ log.Printf("Success. %+v", op)
+ break OpLoop
+ default:
+ log.Fatalf("Unknown status %q: %+v", op.Status, op)
+ }
+ }
+
+ inst, err := computeService.Instances.Get(*proj, *zone, *instName).Do()
+ if err != nil {
+ log.Fatalf("Error getting instance after creation: %v", err)
+ }
+ ij, _ := json.MarshalIndent(inst, "", " ")
+ log.Printf("Instance: %s", ij)
+}
+
+func instanceDisk(svc *compute.Service) *compute.AttachedDisk {
+ const imageURL = "https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-stable-444-5-0-v20141016"
+ diskName := *instName + "-disk"
+
+ return &compute.AttachedDisk{
+ AutoDelete: true,
+ Boot: true,
+ Type: "PERSISTENT",
+ InitializeParams: &compute.AttachedDiskInitializeParams{
+ DiskName: diskName,
+ SourceImage: imageURL,
+ DiskSizeGb: 50,
+ },
+ }
+}
+
+func writeCloudStorageObject(httpClient *http.Client) {
+ content := os.Stdin
+ const maxSlurp = 1 << 20
+ var buf bytes.Buffer
+ n, err := io.CopyN(&buf, content, maxSlurp)
+ if err != nil && err != io.EOF {
+ log.Fatalf("Error reading from stdin: %v, %v", n, err)
+ }
+ contentType := http.DetectContentType(buf.Bytes())
+
+ req, err := http.NewRequest("PUT", "https://storage.googleapis.com/"+*writeObject, io.MultiReader(&buf, content))
+ if err != nil {
+ log.Fatal(err)
+ }
+ req.Header.Set("x-goog-api-version", "2")
+ if *publicObject {
+ req.Header.Set("x-goog-acl", "public-read")
+ }
+ req.Header.Set("Content-Type", contentType)
+ res, err := httpClient.Do(req)
+ if err != nil {
+ log.Fatal(err)
+ }
+ if res.StatusCode != 200 {
+ res.Write(os.Stderr)
+ log.Fatalf("Failed.")
+ }
+ log.Printf("Success.")
+ os.Exit(0)
+}
+
+type tokenCacheFile string
+
+func (f tokenCacheFile) Token() (*oauth2.Token, error) {
+ slurp, err := ioutil.ReadFile(string(f))
+ if err != nil {
+ return nil, err
+ }
+ t := new(oauth2.Token)
+ if err := json.Unmarshal(slurp, t); err != nil {
+ return nil, err
+ }
+ return t, nil
+}
+
+func (f tokenCacheFile) WriteToken(t *oauth2.Token) error {
+ jt, err := json.Marshal(t)
+ if err != nil {
+ return err
+ }
+ return ioutil.WriteFile(string(f), jt, 0600)
+}
diff --git a/vendor/golang.org/x/net/http2/h2demo/rootCA.key b/vendor/golang.org/x/net/http2/h2demo/rootCA.key
new file mode 100644
index 00000000..a15a6aba
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/rootCA.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAt5fAjp4fTcekWUTfzsp0kyih1OYbsGL0KX1eRbSSR8Od0+9Q
+62Hyny+GFwMTb4A/KU8mssoHvcceSAAbwfbxFK/+s51TobqUnORZrOoTZjkUygby
+XDSK99YBbcR1Pip8vwMTm4XKuLtCigeBBdjjAQdgUO28LENGlsMnmeYkJfODVGnV
+mr5Ltb9ANA8IKyTfsnHJ4iOCS/PlPbUj2q7YnoVLposUBMlgUb/CykX3mOoLb4yJ
+JQyA/iST6ZxiIEj36D4yWZ5lg7YJl+UiiBQHGCnPdGyipqV06ex0heYWcaiW8LWZ
+SUQ93jQ+WVCH8hT7DQO1dmsvUmXlq/JeAlwQ/QIDAQABAoIBAFFHV7JMAqPWnMYA
+nezY6J81v9+XN+7xABNWM2Q8uv4WdksbigGLTXR3/680Z2hXqJ7LMeC5XJACFT/e
+/Gr0vmpgOCygnCPfjGehGKpavtfksXV3edikUlnCXsOP1C//c1bFL+sMYmFCVgTx
+qYdDK8yKzXNGrKYT6q5YG7IglyRNV1rsQa8lM/5taFYiD1Ck/3tQi3YIq8Lcuser
+hrxsMABcQ6mi+EIvG6Xr4mfJug0dGJMHG4RG1UGFQn6RXrQq2+q53fC8ZbVUSi0j
+NQ918aKFzktwv+DouKU0ME4I9toks03gM860bAL7zCbKGmwR3hfgX/TqzVCWpG9E
+LDVfvekCgYEA8fk9N53jbBRmULUGEf4qWypcLGiZnNU0OeXWpbPV9aa3H0VDytA7
+8fCN2dPAVDPqlthMDdVe983NCNwp2Yo8ZimDgowyIAKhdC25s1kejuaiH9OAPj3c
+0f8KbriYX4n8zNHxFwK6Ae3pQ6EqOLJVCUsziUaZX9nyKY5aZlyX6xcCgYEAwjws
+K62PjC64U5wYddNLp+kNdJ4edx+a7qBb3mEgPvSFT2RO3/xafJyG8kQB30Mfstjd
+bRxyUV6N0vtX1zA7VQtRUAvfGCecpMo+VQZzcHXKzoRTnQ7eZg4Lmj5fQ9tOAKAo
+QCVBoSW/DI4PZL26CAMDcAba4Pa22ooLapoRIQsCgYA6pIfkkbxLNkpxpt2YwLtt
+Kr/590O7UaR9n6k8sW/aQBRDXNsILR1KDl2ifAIxpf9lnXgZJiwE7HiTfCAcW7c1
+nzwDCI0hWuHcMTS/NYsFYPnLsstyyjVZI3FY0h4DkYKV9Q9z3zJLQ2hz/nwoD3gy
+b2pHC7giFcTts1VPV4Nt8wKBgHeFn4ihHJweg76vZz3Z78w7VNRWGFklUalVdDK7
+gaQ7w2y/ROn/146mo0OhJaXFIFRlrpvdzVrU3GDf2YXJYDlM5ZRkObwbZADjksev
+WInzcgDy3KDg7WnPasRXbTfMU4t/AkW2p1QKbi3DnSVYuokDkbH2Beo45vxDxhKr
+C69RAoGBAIyo3+OJenoZmoNzNJl2WPW5MeBUzSh8T/bgyjFTdqFHF5WiYRD/lfHj
+x9Glyw2nutuT4hlOqHvKhgTYdDMsF2oQ72fe3v8Q5FU7FuKndNPEAyvKNXZaShVA
+hnlhv5DjXKb0wFWnt5PCCiQLtzG0yyHaITrrEme7FikkIcTxaX/Y
+-----END RSA PRIVATE KEY-----
diff --git a/vendor/golang.org/x/net/http2/h2demo/rootCA.pem b/vendor/golang.org/x/net/http2/h2demo/rootCA.pem
new file mode 100644
index 00000000..3a323e77
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/rootCA.pem
@@ -0,0 +1,26 @@
+-----BEGIN CERTIFICATE-----
+MIIEWjCCA0KgAwIBAgIJALfRlWsI8YQHMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV
+BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEUMBIG
+A1UEChMLQnJhZGZpdHppbmMxEjAQBgNVBAMTCWxvY2FsaG9zdDEdMBsGCSqGSIb3
+DQEJARYOYnJhZEBkYW5nYS5jb20wHhcNMTQwNzE1MjA0NjA1WhcNMTcwNTA0MjA0
+NjA1WjB7MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG
+cmFuY2lzY28xFDASBgNVBAoTC0JyYWRmaXR6aW5jMRIwEAYDVQQDEwlsb2NhbGhv
+c3QxHTAbBgkqhkiG9w0BCQEWDmJyYWRAZGFuZ2EuY29tMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAt5fAjp4fTcekWUTfzsp0kyih1OYbsGL0KX1eRbSS
+R8Od0+9Q62Hyny+GFwMTb4A/KU8mssoHvcceSAAbwfbxFK/+s51TobqUnORZrOoT
+ZjkUygbyXDSK99YBbcR1Pip8vwMTm4XKuLtCigeBBdjjAQdgUO28LENGlsMnmeYk
+JfODVGnVmr5Ltb9ANA8IKyTfsnHJ4iOCS/PlPbUj2q7YnoVLposUBMlgUb/CykX3
+mOoLb4yJJQyA/iST6ZxiIEj36D4yWZ5lg7YJl+UiiBQHGCnPdGyipqV06ex0heYW
+caiW8LWZSUQ93jQ+WVCH8hT7DQO1dmsvUmXlq/JeAlwQ/QIDAQABo4HgMIHdMB0G
+A1UdDgQWBBRcAROthS4P4U7vTfjByC569R7E6DCBrQYDVR0jBIGlMIGigBRcAROt
+hS4P4U7vTfjByC569R7E6KF/pH0wezELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNB
+MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtCcmFkZml0emluYzES
+MBAGA1UEAxMJbG9jYWxob3N0MR0wGwYJKoZIhvcNAQkBFg5icmFkQGRhbmdhLmNv
+bYIJALfRlWsI8YQHMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG6h
+U9f9sNH0/6oBbGGy2EVU0UgITUQIrFWo9rFkrW5k/XkDjQm+3lzjT0iGR4IxE/Ao
+eU6sQhua7wrWeFEn47GL98lnCsJdD7oZNhFmQ95Tb/LnDUjs5Yj9brP0NWzXfYU4
+UK2ZnINJRcJpB8iRCaCxE8DdcUF0XqIEq6pA272snoLmiXLMvNl3kYEdm+je6voD
+58SNVEUsztzQyXmJEhCpwVI0A6QCjzXj+qvpmw3ZZHi8JwXei8ZZBLTSFBki8Z7n
+sH9BBH38/SzUmAN4QHSPy1gjqm00OAE8NaYDkh/bzE4d7mLGGMWp/WE3KPSu82HF
+kPe6XoSbiLm/kxk32T0=
+-----END CERTIFICATE-----
diff --git a/vendor/golang.org/x/net/http2/h2demo/rootCA.srl b/vendor/golang.org/x/net/http2/h2demo/rootCA.srl
new file mode 100644
index 00000000..6db38918
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/rootCA.srl
@@ -0,0 +1 @@
+E2CE26BF3285059C
diff --git a/vendor/golang.org/x/net/http2/h2demo/server.crt b/vendor/golang.org/x/net/http2/h2demo/server.crt
new file mode 100644
index 00000000..c59059bd
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/server.crt
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDPjCCAiYCCQDizia/MoUFnDANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJV
+UzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFDASBgNVBAoT
+C0JyYWRmaXR6aW5jMRIwEAYDVQQDEwlsb2NhbGhvc3QxHTAbBgkqhkiG9w0BCQEW
+DmJyYWRAZGFuZ2EuY29tMB4XDTE0MDcxNTIwNTAyN1oXDTE1MTEyNzIwNTAyN1ow
+RzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQHEwJTRjEeMBwGA1UE
+ChMVYnJhZGZpdHogaHR0cDIgc2VydmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAs1Y9CyLFrdL8VQWN1WaifDqaZFnoqjHhCMlc1TfG2zA+InDifx2l
+gZD3o8FeNnAcfM2sPlk3+ZleOYw9P/CklFVDlvqmpCv9ss/BEp/dDaWvy1LmJ4c2
+dbQJfmTxn7CV1H3TsVJvKdwFmdoABb41NoBp6+NNO7OtDyhbIMiCI0pL3Nefb3HL
+A7hIMo3DYbORTtJLTIH9W8YKrEWL0lwHLrYFx/UdutZnv+HjdmO6vCN4na55mjws
+/vjKQUmc7xeY7Xe20xDEG2oDKVkL2eD7FfyrYMS3rO1ExP2KSqlXYG/1S9I/fz88
+F0GK7HX55b5WjZCl2J3ERVdnv/0MQv+sYQIDAQABMA0GCSqGSIb3DQEBBQUAA4IB
+AQC0zL+n/YpRZOdulSu9tS8FxrstXqGWoxfe+vIUgqfMZ5+0MkjJ/vW0FqlLDl2R
+rn4XaR3e7FmWkwdDVbq/UB6lPmoAaFkCgh9/5oapMaclNVNnfF3fjCJfRr+qj/iD
+EmJStTIN0ZuUjAlpiACmfnpEU55PafT5Zx+i1yE4FGjw8bJpFoyD4Hnm54nGjX19
+KeCuvcYFUPnBm3lcL0FalF2AjqV02WTHYNQk7YF/oeO7NKBoEgvGvKG3x+xaOeBI
+dwvdq175ZsGul30h+QjrRlXhH/twcuaT3GSdoysDl9cCYE8f1Mk8PD6gan3uBCJU
+90p6/CbU71bGbfpM2PHot2fm
+-----END CERTIFICATE-----
diff --git a/vendor/golang.org/x/net/http2/h2demo/server.key b/vendor/golang.org/x/net/http2/h2demo/server.key
new file mode 100644
index 00000000..f329c142
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2demo/server.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAs1Y9CyLFrdL8VQWN1WaifDqaZFnoqjHhCMlc1TfG2zA+InDi
+fx2lgZD3o8FeNnAcfM2sPlk3+ZleOYw9P/CklFVDlvqmpCv9ss/BEp/dDaWvy1Lm
+J4c2dbQJfmTxn7CV1H3TsVJvKdwFmdoABb41NoBp6+NNO7OtDyhbIMiCI0pL3Nef
+b3HLA7hIMo3DYbORTtJLTIH9W8YKrEWL0lwHLrYFx/UdutZnv+HjdmO6vCN4na55
+mjws/vjKQUmc7xeY7Xe20xDEG2oDKVkL2eD7FfyrYMS3rO1ExP2KSqlXYG/1S9I/
+fz88F0GK7HX55b5WjZCl2J3ERVdnv/0MQv+sYQIDAQABAoIBADQ2spUwbY+bcz4p
+3M66ECrNQTBggP40gYl2XyHxGGOu2xhZ94f9ELf1hjRWU2DUKWco1rJcdZClV6q3
+qwmXvcM2Q/SMS8JW0ImkNVl/0/NqPxGatEnj8zY30d/L8hGFb0orzFu/XYA5gCP4
+NbN2WrXgk3ZLeqwcNxHHtSiJWGJ/fPyeDWAu/apy75u9Xf2GlzBZmV6HYD9EfK80
+LTlI60f5FO487CrJnboL7ovPJrIHn+k05xRQqwma4orpz932rTXnTjs9Lg6KtbQN
+a7PrqfAntIISgr11a66Mng3IYH1lYqJsWJJwX/xHT4WLEy0EH4/0+PfYemJekz2+
+Co62drECgYEA6O9zVJZXrLSDsIi54cfxA7nEZWm5CAtkYWeAHa4EJ+IlZ7gIf9sL
+W8oFcEfFGpvwVqWZ+AsQ70dsjXAv3zXaG0tmg9FtqWp7pzRSMPidifZcQwWkKeTO
+gJnFmnVyed8h6GfjTEu4gxo1/S5U0V+mYSha01z5NTnN6ltKx1Or3b0CgYEAxRgm
+S30nZxnyg/V7ys61AZhst1DG2tkZXEMcA7dYhabMoXPJAP/EfhlWwpWYYUs/u0gS
+Wwmf5IivX5TlYScgmkvb/NYz0u4ZmOXkLTnLPtdKKFXhjXJcHjUP67jYmOxNlJLp
+V4vLRnFxTpffAV+OszzRxsXX6fvruwZBANYJeXUCgYBVouLFsFgfWGYp2rpr9XP4
+KK25kvrBqF6JKOIDB1zjxNJ3pUMKrl8oqccCFoCyXa4oTM2kUX0yWxHfleUjrMq4
+yimwQKiOZmV7fVLSSjSw6e/VfBd0h3gb82ygcplZkN0IclkwTY5SNKqwn/3y07V5
+drqdhkrgdJXtmQ6O5YYECQKBgATERcDToQ1USlI4sKrB/wyv1AlG8dg/IebiVJ4e
+ZAyvcQmClFzq0qS+FiQUnB/WQw9TeeYrwGs1hxBHuJh16srwhLyDrbMvQP06qh8R
+48F8UXXSRec22dV9MQphaROhu2qZdv1AC0WD3tqov6L33aqmEOi+xi8JgbT/PLk5
+c/c1AoGBAI1A/02ryksW6/wc7/6SP2M2rTy4m1sD/GnrTc67EHnRcVBdKO6qH2RY
+nqC8YcveC2ZghgPTDsA3VGuzuBXpwY6wTyV99q6jxQJ6/xcrD9/NUG6Uwv/xfCxl
+IJLeBYEqQundSSny3VtaAUK8Ul1nxpTvVRNwtcyWTo8RHAAyNPWd
+-----END RSA PRIVATE KEY-----
diff --git a/vendor/golang.org/x/net/http2/h2i/README.md b/vendor/golang.org/x/net/http2/h2i/README.md
new file mode 100644
index 00000000..fb5c5efb
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2i/README.md
@@ -0,0 +1,97 @@
+# h2i
+
+**h2i** is an interactive HTTP/2 ("h2") console debugger. Miss the good ol'
+days of telnetting to your HTTP/1.n servers? We're bringing you
+back.
+
+Features:
+- send raw HTTP/2 frames
+ - PING
+ - SETTINGS
+ - HEADERS
+ - etc
+- type in HTTP/1.n and have it auto-HPACK/frame-ify it for HTTP/2
+- pretty print all received HTTP/2 frames from the peer (including HPACK decoding)
+- tab completion of commands, options
+
+Not yet features, but soon:
+- unnecessary CONTINUATION frames on short boundaries, to test peer implementations
+- request bodies (DATA frames)
+- send invalid frames for testing server implementations (supported by underlying Framer)
+
+Later:
+- act like a server
+
+## Installation
+
+```
+$ go get golang.org/x/net/http2/h2i
+$ h2i
+```
+
+## Demo
+
+```
+$ h2i
+Usage: h2i
+
+ -insecure
+ Whether to skip TLS cert validation
+ -nextproto string
+ Comma-separated list of NPN/ALPN protocol names to negotiate. (default "h2,h2-14")
+
+$ h2i google.com
+Connecting to google.com:443 ...
+Connected to 74.125.224.41:443
+Negotiated protocol "h2-14"
+[FrameHeader SETTINGS len=18]
+ [MAX_CONCURRENT_STREAMS = 100]
+ [INITIAL_WINDOW_SIZE = 1048576]
+ [MAX_FRAME_SIZE = 16384]
+[FrameHeader WINDOW_UPDATE len=4]
+ Window-Increment = 983041
+
+h2i> PING h2iSayHI
+[FrameHeader PING flags=ACK len=8]
+ Data = "h2iSayHI"
+h2i> headers
+(as HTTP/1.1)> GET / HTTP/1.1
+(as HTTP/1.1)> Host: ip.appspot.com
+(as HTTP/1.1)> User-Agent: h2i/brad-n-blake
+(as HTTP/1.1)>
+Opening Stream-ID 1:
+ :authority = ip.appspot.com
+ :method = GET
+ :path = /
+ :scheme = https
+ user-agent = h2i/brad-n-blake
+[FrameHeader HEADERS flags=END_HEADERS stream=1 len=77]
+ :status = "200"
+ alternate-protocol = "443:quic,p=1"
+ content-length = "15"
+ content-type = "text/html"
+ date = "Fri, 01 May 2015 23:06:56 GMT"
+ server = "Google Frontend"
+[FrameHeader DATA flags=END_STREAM stream=1 len=15]
+ "173.164.155.78\n"
+[FrameHeader PING len=8]
+ Data = "\x00\x00\x00\x00\x00\x00\x00\x00"
+h2i> ping
+[FrameHeader PING flags=ACK len=8]
+ Data = "h2i_ping"
+h2i> ping
+[FrameHeader PING flags=ACK len=8]
+ Data = "h2i_ping"
+h2i> ping
+[FrameHeader GOAWAY len=22]
+ Last-Stream-ID = 1; Error-Code = PROTOCOL_ERROR (1)
+
+ReadFrame: EOF
+```
+
+## Status
+
+Quick few hour hack. So much yet to do. Feel free to file issues for
+bugs or wishlist items, but [@bmizerany](https://github.com/bmizerany/)
+and I aren't yet accepting pull requests until things settle down.
+
diff --git a/vendor/golang.org/x/net/http2/h2i/h2i.go b/vendor/golang.org/x/net/http2/h2i/h2i.go
new file mode 100644
index 00000000..f14fd200
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/h2i/h2i.go
@@ -0,0 +1,499 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+/*
+The h2i command is an interactive HTTP/2 console.
+
+Usage:
+ $ h2i [flags]
+
+Interactive commands in the console: (all parts case-insensitive)
+
+ ping [data]
+ settings ack
+ settings FOO=n BAR=z
+ headers (open a new stream by typing HTTP/1.1)
+*/
+package main
+
+import (
+ "bufio"
+ "bytes"
+ "crypto/tls"
+ "errors"
+ "flag"
+ "fmt"
+ "io"
+ "log"
+ "net"
+ "net/http"
+ "os"
+ "regexp"
+ "strconv"
+ "strings"
+
+ "golang.org/x/crypto/ssh/terminal"
+ "golang.org/x/net/http2"
+ "golang.org/x/net/http2/hpack"
+)
+
+// Flags
+var (
+ flagNextProto = flag.String("nextproto", "h2,h2-14", "Comma-separated list of NPN/ALPN protocol names to negotiate.")
+ flagInsecure = flag.Bool("insecure", false, "Whether to skip TLS cert validation")
+ flagSettings = flag.String("settings", "empty", "comma-separated list of KEY=value settings for the initial SETTINGS frame. The magic value 'empty' sends an empty initial settings frame, and the magic value 'omit' causes no initial settings frame to be sent.")
+)
+
+type command struct {
+ run func(*h2i, []string) error // required
+
+ // complete optionally specifies tokens (case-insensitive) which are
+ // valid for this subcommand.
+ complete func() []string
+}
+
+var commands = map[string]command{
+ "ping": command{run: (*h2i).cmdPing},
+ "settings": command{
+ run: (*h2i).cmdSettings,
+ complete: func() []string {
+ return []string{
+ "ACK",
+ http2.SettingHeaderTableSize.String(),
+ http2.SettingEnablePush.String(),
+ http2.SettingMaxConcurrentStreams.String(),
+ http2.SettingInitialWindowSize.String(),
+ http2.SettingMaxFrameSize.String(),
+ http2.SettingMaxHeaderListSize.String(),
+ }
+ },
+ },
+ "quit": command{run: (*h2i).cmdQuit},
+ "headers": command{run: (*h2i).cmdHeaders},
+}
+
+func usage() {
+ fmt.Fprintf(os.Stderr, "Usage: h2i \n\n")
+ flag.PrintDefaults()
+ os.Exit(1)
+}
+
+// withPort adds ":443" if another port isn't already present.
+func withPort(host string) string {
+ if _, _, err := net.SplitHostPort(host); err != nil {
+ return net.JoinHostPort(host, "443")
+ }
+ return host
+}
+
+// h2i is the app's state.
+type h2i struct {
+ host string
+ tc *tls.Conn
+ framer *http2.Framer
+ term *terminal.Terminal
+
+ // owned by the command loop:
+ streamID uint32
+ hbuf bytes.Buffer
+ henc *hpack.Encoder
+
+ // owned by the readFrames loop:
+ peerSetting map[http2.SettingID]uint32
+ hdec *hpack.Decoder
+}
+
+func main() {
+ flag.Usage = usage
+ flag.Parse()
+ if flag.NArg() != 1 {
+ usage()
+ }
+ log.SetFlags(0)
+
+ host := flag.Arg(0)
+ app := &h2i{
+ host: host,
+ peerSetting: make(map[http2.SettingID]uint32),
+ }
+ app.henc = hpack.NewEncoder(&app.hbuf)
+
+ if err := app.Main(); err != nil {
+ if app.term != nil {
+ app.logf("%v\n", err)
+ } else {
+ fmt.Fprintf(os.Stderr, "%v\n", err)
+ }
+ os.Exit(1)
+ }
+ fmt.Fprintf(os.Stdout, "\n")
+}
+
+func (app *h2i) Main() error {
+ cfg := &tls.Config{
+ ServerName: app.host,
+ NextProtos: strings.Split(*flagNextProto, ","),
+ InsecureSkipVerify: *flagInsecure,
+ }
+
+ hostAndPort := withPort(app.host)
+ log.Printf("Connecting to %s ...", hostAndPort)
+ tc, err := tls.Dial("tcp", hostAndPort, cfg)
+ if err != nil {
+ return fmt.Errorf("Error dialing %s: %v", withPort(app.host), err)
+ }
+ log.Printf("Connected to %v", tc.RemoteAddr())
+ defer tc.Close()
+
+ if err := tc.Handshake(); err != nil {
+ return fmt.Errorf("TLS handshake: %v", err)
+ }
+ if !*flagInsecure {
+ if err := tc.VerifyHostname(app.host); err != nil {
+ return fmt.Errorf("VerifyHostname: %v", err)
+ }
+ }
+ state := tc.ConnectionState()
+ log.Printf("Negotiated protocol %q", state.NegotiatedProtocol)
+ if !state.NegotiatedProtocolIsMutual || state.NegotiatedProtocol == "" {
+ return fmt.Errorf("Could not negotiate protocol mutually")
+ }
+
+ if _, err := io.WriteString(tc, http2.ClientPreface); err != nil {
+ return err
+ }
+
+ app.framer = http2.NewFramer(tc, tc)
+
+ oldState, err := terminal.MakeRaw(0)
+ if err != nil {
+ return err
+ }
+ defer terminal.Restore(0, oldState)
+
+ var screen = struct {
+ io.Reader
+ io.Writer
+ }{os.Stdin, os.Stdout}
+
+ app.term = terminal.NewTerminal(screen, "h2i> ")
+ lastWord := regexp.MustCompile(`.+\W(\w+)$`)
+ app.term.AutoCompleteCallback = func(line string, pos int, key rune) (newLine string, newPos int, ok bool) {
+ if key != '\t' {
+ return
+ }
+ if pos != len(line) {
+ // TODO: we're being lazy for now, only supporting tab completion at the end.
+ return
+ }
+ // Auto-complete for the command itself.
+ if !strings.Contains(line, " ") {
+ var name string
+ name, _, ok = lookupCommand(line)
+ if !ok {
+ return
+ }
+ return name, len(name), true
+ }
+ _, c, ok := lookupCommand(line[:strings.IndexByte(line, ' ')])
+ if !ok || c.complete == nil {
+ return
+ }
+ if strings.HasSuffix(line, " ") {
+ app.logf("%s", strings.Join(c.complete(), " "))
+ return line, pos, true
+ }
+ m := lastWord.FindStringSubmatch(line)
+ if m == nil {
+ return line, len(line), true
+ }
+ soFar := m[1]
+ var match []string
+ for _, cand := range c.complete() {
+ if len(soFar) > len(cand) || !strings.EqualFold(cand[:len(soFar)], soFar) {
+ continue
+ }
+ match = append(match, cand)
+ }
+ if len(match) == 0 {
+ return
+ }
+ if len(match) > 1 {
+ // TODO: auto-complete any common prefix
+ app.logf("%s", strings.Join(match, " "))
+ return line, pos, true
+ }
+ newLine = line[:len(line)-len(soFar)] + match[0]
+ return newLine, len(newLine), true
+
+ }
+
+ errc := make(chan error, 2)
+ go func() { errc <- app.readFrames() }()
+ go func() { errc <- app.readConsole() }()
+ return <-errc
+}
+
+func (app *h2i) logf(format string, args ...interface{}) {
+ fmt.Fprintf(app.term, format+"\n", args...)
+}
+
+func (app *h2i) readConsole() error {
+ if s := *flagSettings; s != "omit" {
+ var args []string
+ if s != "empty" {
+ args = strings.Split(s, ",")
+ }
+ _, c, ok := lookupCommand("settings")
+ if !ok {
+ panic("settings command not found")
+ }
+ c.run(app, args)
+ }
+
+ for {
+ line, err := app.term.ReadLine()
+ if err == io.EOF {
+ return nil
+ }
+ if err != nil {
+ return fmt.Errorf("terminal.ReadLine: %v", err)
+ }
+ f := strings.Fields(line)
+ if len(f) == 0 {
+ continue
+ }
+ cmd, args := f[0], f[1:]
+ if _, c, ok := lookupCommand(cmd); ok {
+ err = c.run(app, args)
+ } else {
+ app.logf("Unknown command %q", line)
+ }
+ if err == errExitApp {
+ return nil
+ }
+ if err != nil {
+ return err
+ }
+ }
+}
+
+func lookupCommand(prefix string) (name string, c command, ok bool) {
+ prefix = strings.ToLower(prefix)
+ if c, ok = commands[prefix]; ok {
+ return prefix, c, ok
+ }
+
+ for full, candidate := range commands {
+ if strings.HasPrefix(full, prefix) {
+ if c.run != nil {
+ return "", command{}, false // ambiguous
+ }
+ c = candidate
+ name = full
+ }
+ }
+ return name, c, c.run != nil
+}
+
+var errExitApp = errors.New("internal sentinel error value to quit the console reading loop")
+
+func (a *h2i) cmdQuit(args []string) error {
+ if len(args) > 0 {
+ a.logf("the QUIT command takes no argument")
+ return nil
+ }
+ return errExitApp
+}
+
+func (a *h2i) cmdSettings(args []string) error {
+ if len(args) == 1 && strings.EqualFold(args[0], "ACK") {
+ return a.framer.WriteSettingsAck()
+ }
+ var settings []http2.Setting
+ for _, arg := range args {
+ if strings.EqualFold(arg, "ACK") {
+ a.logf("Error: ACK must be only argument with the SETTINGS command")
+ return nil
+ }
+ eq := strings.Index(arg, "=")
+ if eq == -1 {
+ a.logf("Error: invalid argument %q (expected SETTING_NAME=nnnn)", arg)
+ return nil
+ }
+ sid, ok := settingByName(arg[:eq])
+ if !ok {
+ a.logf("Error: unknown setting name %q", arg[:eq])
+ return nil
+ }
+ val, err := strconv.ParseUint(arg[eq+1:], 10, 32)
+ if err != nil {
+ a.logf("Error: invalid argument %q (expected SETTING_NAME=nnnn)", arg)
+ return nil
+ }
+ settings = append(settings, http2.Setting{
+ ID: sid,
+ Val: uint32(val),
+ })
+ }
+ a.logf("Sending: %v", settings)
+ return a.framer.WriteSettings(settings...)
+}
+
+func settingByName(name string) (http2.SettingID, bool) {
+ for _, sid := range [...]http2.SettingID{
+ http2.SettingHeaderTableSize,
+ http2.SettingEnablePush,
+ http2.SettingMaxConcurrentStreams,
+ http2.SettingInitialWindowSize,
+ http2.SettingMaxFrameSize,
+ http2.SettingMaxHeaderListSize,
+ } {
+ if strings.EqualFold(sid.String(), name) {
+ return sid, true
+ }
+ }
+ return 0, false
+}
+
+func (app *h2i) cmdPing(args []string) error {
+ if len(args) > 1 {
+ app.logf("invalid PING usage: only accepts 0 or 1 args")
+ return nil // nil means don't end the program
+ }
+ var data [8]byte
+ if len(args) == 1 {
+ copy(data[:], args[0])
+ } else {
+ copy(data[:], "h2i_ping")
+ }
+ return app.framer.WritePing(false, data)
+}
+
+func (app *h2i) cmdHeaders(args []string) error {
+ if len(args) > 0 {
+ app.logf("Error: HEADERS doesn't yet take arguments.")
+ // TODO: flags for restricting window size, to force CONTINUATION
+ // frames.
+ return nil
+ }
+ var h1req bytes.Buffer
+ app.term.SetPrompt("(as HTTP/1.1)> ")
+ defer app.term.SetPrompt("h2i> ")
+ for {
+ line, err := app.term.ReadLine()
+ if err != nil {
+ return err
+ }
+ h1req.WriteString(line)
+ h1req.WriteString("\r\n")
+ if line == "" {
+ break
+ }
+ }
+ req, err := http.ReadRequest(bufio.NewReader(&h1req))
+ if err != nil {
+ app.logf("Invalid HTTP/1.1 request: %v", err)
+ return nil
+ }
+ if app.streamID == 0 {
+ app.streamID = 1
+ } else {
+ app.streamID += 2
+ }
+ app.logf("Opening Stream-ID %d:", app.streamID)
+ hbf := app.encodeHeaders(req)
+ if len(hbf) > 16<<10 {
+ app.logf("TODO: h2i doesn't yet write CONTINUATION frames. Copy it from transport.go")
+ return nil
+ }
+ return app.framer.WriteHeaders(http2.HeadersFrameParam{
+ StreamID: app.streamID,
+ BlockFragment: hbf,
+ EndStream: req.Method == "GET" || req.Method == "HEAD", // good enough for now
+ EndHeaders: true, // for now
+ })
+}
+
+func (app *h2i) readFrames() error {
+ for {
+ f, err := app.framer.ReadFrame()
+ if err != nil {
+ return fmt.Errorf("ReadFrame: %v", err)
+ }
+ app.logf("%v", f)
+ switch f := f.(type) {
+ case *http2.PingFrame:
+ app.logf(" Data = %q", f.Data)
+ case *http2.SettingsFrame:
+ f.ForeachSetting(func(s http2.Setting) error {
+ app.logf(" %v", s)
+ app.peerSetting[s.ID] = s.Val
+ return nil
+ })
+ case *http2.WindowUpdateFrame:
+ app.logf(" Window-Increment = %v\n", f.Increment)
+ case *http2.GoAwayFrame:
+ app.logf(" Last-Stream-ID = %d; Error-Code = %v (%d)\n", f.LastStreamID, f.ErrCode, f.ErrCode)
+ case *http2.DataFrame:
+ app.logf(" %q", f.Data())
+ case *http2.HeadersFrame:
+ if f.HasPriority() {
+ app.logf(" PRIORITY = %v", f.Priority)
+ }
+ if app.hdec == nil {
+ // TODO: if the user uses h2i to send a SETTINGS frame advertising
+ // something larger, we'll need to respect SETTINGS_HEADER_TABLE_SIZE
+ // and stuff here instead of using the 4k default. But for now:
+ tableSize := uint32(4 << 10)
+ app.hdec = hpack.NewDecoder(tableSize, app.onNewHeaderField)
+ }
+ app.hdec.Write(f.HeaderBlockFragment())
+ }
+ }
+}
+
+// called from readLoop
+func (app *h2i) onNewHeaderField(f hpack.HeaderField) {
+ if f.Sensitive {
+ app.logf(" %s = %q (SENSITIVE)", f.Name, f.Value)
+ }
+ app.logf(" %s = %q", f.Name, f.Value)
+}
+
+func (app *h2i) encodeHeaders(req *http.Request) []byte {
+ app.hbuf.Reset()
+
+ // TODO(bradfitz): figure out :authority-vs-Host stuff between http2 and Go
+ host := req.Host
+ if host == "" {
+ host = req.URL.Host
+ }
+
+ path := req.URL.Path
+ if path == "" {
+ path = "/"
+ }
+
+ app.writeHeader(":authority", host) // probably not right for all sites
+ app.writeHeader(":method", req.Method)
+ app.writeHeader(":path", path)
+ app.writeHeader(":scheme", "https")
+
+ for k, vv := range req.Header {
+ lowKey := strings.ToLower(k)
+ if lowKey == "host" {
+ continue
+ }
+ for _, v := range vv {
+ app.writeHeader(lowKey, v)
+ }
+ }
+ return app.hbuf.Bytes()
+}
+
+func (app *h2i) writeHeader(name, value string) {
+ app.henc.WriteField(hpack.HeaderField{Name: name, Value: value})
+ app.logf(" %s = %s", name, value)
+}
diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/http2/headermap.go
new file mode 100644
index 00000000..014f7896
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/headermap.go
@@ -0,0 +1,77 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "net/http"
+ "strings"
+)
+
+var (
+ commonLowerHeader = map[string]string{} // Go-Canonical-Case -> lower-case
+ commonCanonHeader = map[string]string{} // lower-case -> Go-Canonical-Case
+)
+
+func init() {
+ for _, v := range []string{
+ "accept",
+ "accept-charset",
+ "accept-encoding",
+ "accept-language",
+ "accept-ranges",
+ "age",
+ "access-control-allow-origin",
+ "allow",
+ "authorization",
+ "cache-control",
+ "content-disposition",
+ "content-encoding",
+ "content-language",
+ "content-length",
+ "content-location",
+ "content-range",
+ "content-type",
+ "cookie",
+ "date",
+ "etag",
+ "expect",
+ "expires",
+ "from",
+ "host",
+ "if-match",
+ "if-modified-since",
+ "if-none-match",
+ "if-unmodified-since",
+ "last-modified",
+ "link",
+ "location",
+ "max-forwards",
+ "proxy-authenticate",
+ "proxy-authorization",
+ "range",
+ "referer",
+ "refresh",
+ "retry-after",
+ "server",
+ "set-cookie",
+ "strict-transport-security",
+ "transfer-encoding",
+ "user-agent",
+ "vary",
+ "via",
+ "www-authenticate",
+ } {
+ chk := http.CanonicalHeaderKey(v)
+ commonLowerHeader[chk] = v
+ commonCanonHeader[v] = chk
+ }
+}
+
+func lowerHeader(v string) string {
+ if s, ok := commonLowerHeader[v]; ok {
+ return s
+ }
+ return strings.ToLower(v)
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go
new file mode 100644
index 00000000..80d621cf
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/encode.go
@@ -0,0 +1,251 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package hpack
+
+import (
+ "io"
+)
+
+const (
+ uint32Max = ^uint32(0)
+ initialHeaderTableSize = 4096
+)
+
+type Encoder struct {
+ dynTab dynamicTable
+ // minSize is the minimum table size set by
+ // SetMaxDynamicTableSize after the previous Header Table Size
+ // Update.
+ minSize uint32
+ // maxSizeLimit is the maximum table size this encoder
+ // supports. This will protect the encoder from too large
+ // size.
+ maxSizeLimit uint32
+ // tableSizeUpdate indicates whether "Header Table Size
+ // Update" is required.
+ tableSizeUpdate bool
+ w io.Writer
+ buf []byte
+}
+
+// NewEncoder returns a new Encoder which performs HPACK encoding. An
+// encoded data is written to w.
+func NewEncoder(w io.Writer) *Encoder {
+ e := &Encoder{
+ minSize: uint32Max,
+ maxSizeLimit: initialHeaderTableSize,
+ tableSizeUpdate: false,
+ w: w,
+ }
+ e.dynTab.setMaxSize(initialHeaderTableSize)
+ return e
+}
+
+// WriteField encodes f into a single Write to e's underlying Writer.
+// This function may also produce bytes for "Header Table Size Update"
+// if necessary. If produced, it is done before encoding f.
+func (e *Encoder) WriteField(f HeaderField) error {
+ e.buf = e.buf[:0]
+
+ if e.tableSizeUpdate {
+ e.tableSizeUpdate = false
+ if e.minSize < e.dynTab.maxSize {
+ e.buf = appendTableSize(e.buf, e.minSize)
+ }
+ e.minSize = uint32Max
+ e.buf = appendTableSize(e.buf, e.dynTab.maxSize)
+ }
+
+ idx, nameValueMatch := e.searchTable(f)
+ if nameValueMatch {
+ e.buf = appendIndexed(e.buf, idx)
+ } else {
+ indexing := e.shouldIndex(f)
+ if indexing {
+ e.dynTab.add(f)
+ }
+
+ if idx == 0 {
+ e.buf = appendNewName(e.buf, f, indexing)
+ } else {
+ e.buf = appendIndexedName(e.buf, f, idx, indexing)
+ }
+ }
+ n, err := e.w.Write(e.buf)
+ if err == nil && n != len(e.buf) {
+ err = io.ErrShortWrite
+ }
+ return err
+}
+
+// searchTable searches f in both stable and dynamic header tables.
+// The static header table is searched first. Only when there is no
+// exact match for both name and value, the dynamic header table is
+// then searched. If there is no match, i is 0. If both name and value
+// match, i is the matched index and nameValueMatch becomes true. If
+// only name matches, i points to that index and nameValueMatch
+// becomes false.
+func (e *Encoder) searchTable(f HeaderField) (i uint64, nameValueMatch bool) {
+ for idx, hf := range staticTable {
+ if !constantTimeStringCompare(hf.Name, f.Name) {
+ continue
+ }
+ if i == 0 {
+ i = uint64(idx + 1)
+ }
+ if f.Sensitive {
+ continue
+ }
+ if !constantTimeStringCompare(hf.Value, f.Value) {
+ continue
+ }
+ i = uint64(idx + 1)
+ nameValueMatch = true
+ return
+ }
+
+ j, nameValueMatch := e.dynTab.search(f)
+ if nameValueMatch || (i == 0 && j != 0) {
+ i = j + uint64(len(staticTable))
+ }
+ return
+}
+
+// SetMaxDynamicTableSize changes the dynamic header table size to v.
+// The actual size is bounded by the value passed to
+// SetMaxDynamicTableSizeLimit.
+func (e *Encoder) SetMaxDynamicTableSize(v uint32) {
+ if v > e.maxSizeLimit {
+ v = e.maxSizeLimit
+ }
+ if v < e.minSize {
+ e.minSize = v
+ }
+ e.tableSizeUpdate = true
+ e.dynTab.setMaxSize(v)
+}
+
+// SetMaxDynamicTableSizeLimit changes the maximum value that can be
+// specified in SetMaxDynamicTableSize to v. By default, it is set to
+// 4096, which is the same size of the default dynamic header table
+// size described in HPACK specification. If the current maximum
+// dynamic header table size is strictly greater than v, "Header Table
+// Size Update" will be done in the next WriteField call and the
+// maximum dynamic header table size is truncated to v.
+func (e *Encoder) SetMaxDynamicTableSizeLimit(v uint32) {
+ e.maxSizeLimit = v
+ if e.dynTab.maxSize > v {
+ e.tableSizeUpdate = true
+ e.dynTab.setMaxSize(v)
+ }
+}
+
+// shouldIndex reports whether f should be indexed.
+func (e *Encoder) shouldIndex(f HeaderField) bool {
+ return !f.Sensitive && f.size() <= e.dynTab.maxSize
+}
+
+// appendIndexed appends index i, as encoded in "Indexed Header Field"
+// representation, to dst and returns the extended buffer.
+func appendIndexed(dst []byte, i uint64) []byte {
+ first := len(dst)
+ dst = appendVarInt(dst, 7, i)
+ dst[first] |= 0x80
+ return dst
+}
+
+// appendNewName appends f, as encoded in one of "Literal Header field
+// - New Name" representation variants, to dst and returns the
+// extended buffer.
+//
+// If f.Sensitive is true, "Never Indexed" representation is used. If
+// f.Sensitive is false and indexing is true, "Inremental Indexing"
+// representation is used.
+func appendNewName(dst []byte, f HeaderField, indexing bool) []byte {
+ dst = append(dst, encodeTypeByte(indexing, f.Sensitive))
+ dst = appendHpackString(dst, f.Name)
+ return appendHpackString(dst, f.Value)
+}
+
+// appendIndexedName appends f and index i referring indexed name
+// entry, as encoded in one of "Literal Header field - Indexed Name"
+// representation variants, to dst and returns the extended buffer.
+//
+// If f.Sensitive is true, "Never Indexed" representation is used. If
+// f.Sensitive is false and indexing is true, "Incremental Indexing"
+// representation is used.
+func appendIndexedName(dst []byte, f HeaderField, i uint64, indexing bool) []byte {
+ first := len(dst)
+ var n byte
+ if indexing {
+ n = 6
+ } else {
+ n = 4
+ }
+ dst = appendVarInt(dst, n, i)
+ dst[first] |= encodeTypeByte(indexing, f.Sensitive)
+ return appendHpackString(dst, f.Value)
+}
+
+// appendTableSize appends v, as encoded in "Header Table Size Update"
+// representation, to dst and returns the extended buffer.
+func appendTableSize(dst []byte, v uint32) []byte {
+ first := len(dst)
+ dst = appendVarInt(dst, 5, uint64(v))
+ dst[first] |= 0x20
+ return dst
+}
+
+// appendVarInt appends i, as encoded in variable integer form using n
+// bit prefix, to dst and returns the extended buffer.
+//
+// See
+// http://http2.github.io/http2-spec/compression.html#integer.representation
+func appendVarInt(dst []byte, n byte, i uint64) []byte {
+ k := uint64((1 << n) - 1)
+ if i < k {
+ return append(dst, byte(i))
+ }
+ dst = append(dst, byte(k))
+ i -= k
+ for ; i >= 128; i >>= 7 {
+ dst = append(dst, byte(0x80|(i&0x7f)))
+ }
+ return append(dst, byte(i))
+}
+
+// appendHpackString appends s, as encoded in "String Literal"
+// representation, to dst and returns the the extended buffer.
+//
+// s will be encoded in Huffman codes only when it produces strictly
+// shorter byte string.
+func appendHpackString(dst []byte, s string) []byte {
+ huffmanLength := HuffmanEncodeLength(s)
+ if huffmanLength < uint64(len(s)) {
+ first := len(dst)
+ dst = appendVarInt(dst, 7, huffmanLength)
+ dst = AppendHuffmanString(dst, s)
+ dst[first] |= 0x80
+ } else {
+ dst = appendVarInt(dst, 7, uint64(len(s)))
+ dst = append(dst, s...)
+ }
+ return dst
+}
+
+// encodeTypeByte returns type byte. If sensitive is true, type byte
+// for "Never Indexed" representation is returned. If sensitive is
+// false and indexing is true, type byte for "Incremental Indexing"
+// representation is returned. Otherwise, type byte for "Without
+// Indexing" is returned.
+func encodeTypeByte(indexing, sensitive bool) byte {
+ if sensitive {
+ return 0x10
+ }
+ if indexing {
+ return 0x40
+ }
+ return 0
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/encode_test.go b/vendor/golang.org/x/net/http2/hpack/encode_test.go
new file mode 100644
index 00000000..92286f3b
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/encode_test.go
@@ -0,0 +1,330 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package hpack
+
+import (
+ "bytes"
+ "encoding/hex"
+ "reflect"
+ "strings"
+ "testing"
+)
+
+func TestEncoderTableSizeUpdate(t *testing.T) {
+ tests := []struct {
+ size1, size2 uint32
+ wantHex string
+ }{
+ // Should emit 2 table size updates (2048 and 4096)
+ {2048, 4096, "3fe10f 3fe11f 82"},
+
+ // Should emit 1 table size update (2048)
+ {16384, 2048, "3fe10f 82"},
+ }
+ for _, tt := range tests {
+ var buf bytes.Buffer
+ e := NewEncoder(&buf)
+ e.SetMaxDynamicTableSize(tt.size1)
+ e.SetMaxDynamicTableSize(tt.size2)
+ if err := e.WriteField(pair(":method", "GET")); err != nil {
+ t.Fatal(err)
+ }
+ want := removeSpace(tt.wantHex)
+ if got := hex.EncodeToString(buf.Bytes()); got != want {
+ t.Errorf("e.SetDynamicTableSize %v, %v = %q; want %q", tt.size1, tt.size2, got, want)
+ }
+ }
+}
+
+func TestEncoderWriteField(t *testing.T) {
+ var buf bytes.Buffer
+ e := NewEncoder(&buf)
+ var got []HeaderField
+ d := NewDecoder(4<<10, func(f HeaderField) {
+ got = append(got, f)
+ })
+
+ tests := []struct {
+ hdrs []HeaderField
+ }{
+ {[]HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "http"),
+ pair(":path", "/"),
+ pair(":authority", "www.example.com"),
+ }},
+ {[]HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "http"),
+ pair(":path", "/"),
+ pair(":authority", "www.example.com"),
+ pair("cache-control", "no-cache"),
+ }},
+ {[]HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "https"),
+ pair(":path", "/index.html"),
+ pair(":authority", "www.example.com"),
+ pair("custom-key", "custom-value"),
+ }},
+ }
+ for i, tt := range tests {
+ buf.Reset()
+ got = got[:0]
+ for _, hf := range tt.hdrs {
+ if err := e.WriteField(hf); err != nil {
+ t.Fatal(err)
+ }
+ }
+ _, err := d.Write(buf.Bytes())
+ if err != nil {
+ t.Errorf("%d. Decoder Write = %v", i, err)
+ }
+ if !reflect.DeepEqual(got, tt.hdrs) {
+ t.Errorf("%d. Decoded %+v; want %+v", i, got, tt.hdrs)
+ }
+ }
+}
+
+func TestEncoderSearchTable(t *testing.T) {
+ e := NewEncoder(nil)
+
+ e.dynTab.add(pair("foo", "bar"))
+ e.dynTab.add(pair("blake", "miz"))
+ e.dynTab.add(pair(":method", "GET"))
+
+ tests := []struct {
+ hf HeaderField
+ wantI uint64
+ wantMatch bool
+ }{
+ // Name and Value match
+ {pair("foo", "bar"), uint64(len(staticTable) + 3), true},
+ {pair("blake", "miz"), uint64(len(staticTable) + 2), true},
+ {pair(":method", "GET"), 2, true},
+
+ // Only name match because Sensitive == true
+ {HeaderField{":method", "GET", true}, 2, false},
+
+ // Only Name matches
+ {pair("foo", "..."), uint64(len(staticTable) + 3), false},
+ {pair("blake", "..."), uint64(len(staticTable) + 2), false},
+ {pair(":method", "..."), 2, false},
+
+ // None match
+ {pair("foo-", "bar"), 0, false},
+ }
+ for _, tt := range tests {
+ if gotI, gotMatch := e.searchTable(tt.hf); gotI != tt.wantI || gotMatch != tt.wantMatch {
+ t.Errorf("d.search(%+v) = %v, %v; want %v, %v", tt.hf, gotI, gotMatch, tt.wantI, tt.wantMatch)
+ }
+ }
+}
+
+func TestAppendVarInt(t *testing.T) {
+ tests := []struct {
+ n byte
+ i uint64
+ want []byte
+ }{
+ // Fits in a byte:
+ {1, 0, []byte{0}},
+ {2, 2, []byte{2}},
+ {3, 6, []byte{6}},
+ {4, 14, []byte{14}},
+ {5, 30, []byte{30}},
+ {6, 62, []byte{62}},
+ {7, 126, []byte{126}},
+ {8, 254, []byte{254}},
+
+ // Multiple bytes:
+ {5, 1337, []byte{31, 154, 10}},
+ }
+ for _, tt := range tests {
+ got := appendVarInt(nil, tt.n, tt.i)
+ if !bytes.Equal(got, tt.want) {
+ t.Errorf("appendVarInt(nil, %v, %v) = %v; want %v", tt.n, tt.i, got, tt.want)
+ }
+ }
+}
+
+func TestAppendHpackString(t *testing.T) {
+ tests := []struct {
+ s, wantHex string
+ }{
+ // Huffman encoded
+ {"www.example.com", "8c f1e3 c2e5 f23a 6ba0 ab90 f4ff"},
+
+ // Not Huffman encoded
+ {"a", "01 61"},
+
+ // zero length
+ {"", "00"},
+ }
+ for _, tt := range tests {
+ want := removeSpace(tt.wantHex)
+ buf := appendHpackString(nil, tt.s)
+ if got := hex.EncodeToString(buf); want != got {
+ t.Errorf("appendHpackString(nil, %q) = %q; want %q", tt.s, got, want)
+ }
+ }
+}
+
+func TestAppendIndexed(t *testing.T) {
+ tests := []struct {
+ i uint64
+ wantHex string
+ }{
+ // 1 byte
+ {1, "81"},
+ {126, "fe"},
+
+ // 2 bytes
+ {127, "ff00"},
+ {128, "ff01"},
+ }
+ for _, tt := range tests {
+ want := removeSpace(tt.wantHex)
+ buf := appendIndexed(nil, tt.i)
+ if got := hex.EncodeToString(buf); want != got {
+ t.Errorf("appendIndex(nil, %v) = %q; want %q", tt.i, got, want)
+ }
+ }
+}
+
+func TestAppendNewName(t *testing.T) {
+ tests := []struct {
+ f HeaderField
+ indexing bool
+ wantHex string
+ }{
+ // Incremental indexing
+ {HeaderField{"custom-key", "custom-value", false}, true, "40 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"},
+
+ // Without indexing
+ {HeaderField{"custom-key", "custom-value", false}, false, "00 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"},
+
+ // Never indexed
+ {HeaderField{"custom-key", "custom-value", true}, true, "10 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"},
+ {HeaderField{"custom-key", "custom-value", true}, false, "10 88 25a8 49e9 5ba9 7d7f 89 25a8 49e9 5bb8 e8b4 bf"},
+ }
+ for _, tt := range tests {
+ want := removeSpace(tt.wantHex)
+ buf := appendNewName(nil, tt.f, tt.indexing)
+ if got := hex.EncodeToString(buf); want != got {
+ t.Errorf("appendNewName(nil, %+v, %v) = %q; want %q", tt.f, tt.indexing, got, want)
+ }
+ }
+}
+
+func TestAppendIndexedName(t *testing.T) {
+ tests := []struct {
+ f HeaderField
+ i uint64
+ indexing bool
+ wantHex string
+ }{
+ // Incremental indexing
+ {HeaderField{":status", "302", false}, 8, true, "48 82 6402"},
+
+ // Without indexing
+ {HeaderField{":status", "302", false}, 8, false, "08 82 6402"},
+
+ // Never indexed
+ {HeaderField{":status", "302", true}, 8, true, "18 82 6402"},
+ {HeaderField{":status", "302", true}, 8, false, "18 82 6402"},
+ }
+ for _, tt := range tests {
+ want := removeSpace(tt.wantHex)
+ buf := appendIndexedName(nil, tt.f, tt.i, tt.indexing)
+ if got := hex.EncodeToString(buf); want != got {
+ t.Errorf("appendIndexedName(nil, %+v, %v) = %q; want %q", tt.f, tt.indexing, got, want)
+ }
+ }
+}
+
+func TestAppendTableSize(t *testing.T) {
+ tests := []struct {
+ i uint32
+ wantHex string
+ }{
+ // Fits into 1 byte
+ {30, "3e"},
+
+ // Extra byte
+ {31, "3f00"},
+ {32, "3f01"},
+ }
+ for _, tt := range tests {
+ want := removeSpace(tt.wantHex)
+ buf := appendTableSize(nil, tt.i)
+ if got := hex.EncodeToString(buf); want != got {
+ t.Errorf("appendTableSize(nil, %v) = %q; want %q", tt.i, got, want)
+ }
+ }
+}
+
+func TestEncoderSetMaxDynamicTableSize(t *testing.T) {
+ var buf bytes.Buffer
+ e := NewEncoder(&buf)
+ tests := []struct {
+ v uint32
+ wantUpdate bool
+ wantMinSize uint32
+ wantMaxSize uint32
+ }{
+ // Set new table size to 2048
+ {2048, true, 2048, 2048},
+
+ // Set new table size to 16384, but still limited to
+ // 4096
+ {16384, true, 2048, 4096},
+ }
+ for _, tt := range tests {
+ e.SetMaxDynamicTableSize(tt.v)
+ if got := e.tableSizeUpdate; tt.wantUpdate != got {
+ t.Errorf("e.tableSizeUpdate = %v; want %v", got, tt.wantUpdate)
+ }
+ if got := e.minSize; tt.wantMinSize != got {
+ t.Errorf("e.minSize = %v; want %v", got, tt.wantMinSize)
+ }
+ if got := e.dynTab.maxSize; tt.wantMaxSize != got {
+ t.Errorf("e.maxSize = %v; want %v", got, tt.wantMaxSize)
+ }
+ }
+}
+
+func TestEncoderSetMaxDynamicTableSizeLimit(t *testing.T) {
+ e := NewEncoder(nil)
+ // 4095 < initialHeaderTableSize means maxSize is truncated to
+ // 4095.
+ e.SetMaxDynamicTableSizeLimit(4095)
+ if got, want := e.dynTab.maxSize, uint32(4095); got != want {
+ t.Errorf("e.dynTab.maxSize = %v; want %v", got, want)
+ }
+ if got, want := e.maxSizeLimit, uint32(4095); got != want {
+ t.Errorf("e.maxSizeLimit = %v; want %v", got, want)
+ }
+ if got, want := e.tableSizeUpdate, true; got != want {
+ t.Errorf("e.tableSizeUpdate = %v; want %v", got, want)
+ }
+ // maxSize will be truncated to maxSizeLimit
+ e.SetMaxDynamicTableSize(16384)
+ if got, want := e.dynTab.maxSize, uint32(4095); got != want {
+ t.Errorf("e.dynTab.maxSize = %v; want %v", got, want)
+ }
+ // 8192 > current maxSizeLimit, so maxSize does not change.
+ e.SetMaxDynamicTableSizeLimit(8192)
+ if got, want := e.dynTab.maxSize, uint32(4095); got != want {
+ t.Errorf("e.dynTab.maxSize = %v; want %v", got, want)
+ }
+ if got, want := e.maxSizeLimit, uint32(8192); got != want {
+ t.Errorf("e.maxSizeLimit = %v; want %v", got, want)
+ }
+}
+
+func removeSpace(s string) string {
+ return strings.Replace(s, " ", "", -1)
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/hpack.go b/vendor/golang.org/x/net/http2/hpack/hpack.go
new file mode 100644
index 00000000..8e9b2f2e
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/hpack.go
@@ -0,0 +1,518 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package hpack implements HPACK, a compression format for
+// efficiently representing HTTP header fields in the context of HTTP/2.
+//
+// See http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-09
+package hpack
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+)
+
+// A DecodingError is something the spec defines as a decoding error.
+type DecodingError struct {
+ Err error
+}
+
+func (de DecodingError) Error() string {
+ return fmt.Sprintf("decoding error: %v", de.Err)
+}
+
+// An InvalidIndexError is returned when an encoder references a table
+// entry before the static table or after the end of the dynamic table.
+type InvalidIndexError int
+
+func (e InvalidIndexError) Error() string {
+ return fmt.Sprintf("invalid indexed representation index %d", int(e))
+}
+
+// A HeaderField is a name-value pair. Both the name and value are
+// treated as opaque sequences of octets.
+type HeaderField struct {
+ Name, Value string
+
+ // Sensitive means that this header field should never be
+ // indexed.
+ Sensitive bool
+}
+
+func (hf *HeaderField) size() uint32 {
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.4.1
+ // "The size of the dynamic table is the sum of the size of
+ // its entries. The size of an entry is the sum of its name's
+ // length in octets (as defined in Section 5.2), its value's
+ // length in octets (see Section 5.2), plus 32. The size of
+ // an entry is calculated using the length of the name and
+ // value without any Huffman encoding applied."
+
+ // This can overflow if somebody makes a large HeaderField
+ // Name and/or Value by hand, but we don't care, because that
+ // won't happen on the wire because the encoding doesn't allow
+ // it.
+ return uint32(len(hf.Name) + len(hf.Value) + 32)
+}
+
+// A Decoder is the decoding context for incremental processing of
+// header blocks.
+type Decoder struct {
+ dynTab dynamicTable
+ emit func(f HeaderField)
+
+ emitEnabled bool // whether calls to emit are enabled
+ maxStrLen int // 0 means unlimited
+
+ // buf is the unparsed buffer. It's only written to
+ // saveBuf if it was truncated in the middle of a header
+ // block. Because it's usually not owned, we can only
+ // process it under Write.
+ buf []byte // not owned; only valid during Write
+
+ // saveBuf is previous data passed to Write which we weren't able
+ // to fully parse before. Unlike buf, we own this data.
+ saveBuf bytes.Buffer
+}
+
+// NewDecoder returns a new decoder with the provided maximum dynamic
+// table size. The emitFunc will be called for each valid field
+// parsed, in the same goroutine as calls to Write, before Write returns.
+func NewDecoder(maxDynamicTableSize uint32, emitFunc func(f HeaderField)) *Decoder {
+ d := &Decoder{
+ emit: emitFunc,
+ emitEnabled: true,
+ }
+ d.dynTab.allowedMaxSize = maxDynamicTableSize
+ d.dynTab.setMaxSize(maxDynamicTableSize)
+ return d
+}
+
+// ErrStringLength is returned by Decoder.Write when the max string length
+// (as configured by Decoder.SetMaxStringLength) would be violated.
+var ErrStringLength = errors.New("hpack: string too long")
+
+// SetMaxStringLength sets the maximum size of a HeaderField name or
+// value string. If a string exceeds this length (even after any
+// decompression), Write will return ErrStringLength.
+// A value of 0 means unlimited and is the default from NewDecoder.
+func (d *Decoder) SetMaxStringLength(n int) {
+ d.maxStrLen = n
+}
+
+// SetEmitEnabled controls whether the emitFunc provided to NewDecoder
+// should be called. The default is true.
+//
+// This facility exists to let servers enforce MAX_HEADER_LIST_SIZE
+// while still decoding and keeping in-sync with decoder state, but
+// without doing unnecessary decompression or generating unnecessary
+// garbage for header fields past the limit.
+func (d *Decoder) SetEmitEnabled(v bool) { d.emitEnabled = v }
+
+// EmitEnabled reports whether calls to the emitFunc provided to NewDecoder
+// are currently enabled. The default is true.
+func (d *Decoder) EmitEnabled() bool { return d.emitEnabled }
+
+// TODO: add method *Decoder.Reset(maxSize, emitFunc) to let callers re-use Decoders and their
+// underlying buffers for garbage reasons.
+
+func (d *Decoder) SetMaxDynamicTableSize(v uint32) {
+ d.dynTab.setMaxSize(v)
+}
+
+// SetAllowedMaxDynamicTableSize sets the upper bound that the encoded
+// stream (via dynamic table size updates) may set the maximum size
+// to.
+func (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) {
+ d.dynTab.allowedMaxSize = v
+}
+
+type dynamicTable struct {
+ // ents is the FIFO described at
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.2.3.2
+ // The newest (low index) is append at the end, and items are
+ // evicted from the front.
+ ents []HeaderField
+ size uint32
+ maxSize uint32 // current maxSize
+ allowedMaxSize uint32 // maxSize may go up to this, inclusive
+}
+
+func (dt *dynamicTable) setMaxSize(v uint32) {
+ dt.maxSize = v
+ dt.evict()
+}
+
+// TODO: change dynamicTable to be a struct with a slice and a size int field,
+// per http://http2.github.io/http2-spec/compression.html#rfc.section.4.1:
+//
+//
+// Then make add increment the size. maybe the max size should move from Decoder to
+// dynamicTable and add should return an ok bool if there was enough space.
+//
+// Later we'll need a remove operation on dynamicTable.
+
+func (dt *dynamicTable) add(f HeaderField) {
+ dt.ents = append(dt.ents, f)
+ dt.size += f.size()
+ dt.evict()
+}
+
+// If we're too big, evict old stuff (front of the slice)
+func (dt *dynamicTable) evict() {
+ base := dt.ents // keep base pointer of slice
+ for dt.size > dt.maxSize {
+ dt.size -= dt.ents[0].size()
+ dt.ents = dt.ents[1:]
+ }
+
+ // Shift slice contents down if we evicted things.
+ if len(dt.ents) != len(base) {
+ copy(base, dt.ents)
+ dt.ents = base[:len(dt.ents)]
+ }
+}
+
+// constantTimeStringCompare compares string a and b in a constant
+// time manner.
+func constantTimeStringCompare(a, b string) bool {
+ if len(a) != len(b) {
+ return false
+ }
+
+ c := byte(0)
+
+ for i := 0; i < len(a); i++ {
+ c |= a[i] ^ b[i]
+ }
+
+ return c == 0
+}
+
+// Search searches f in the table. The return value i is 0 if there is
+// no name match. If there is name match or name/value match, i is the
+// index of that entry (1-based). If both name and value match,
+// nameValueMatch becomes true.
+func (dt *dynamicTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
+ l := len(dt.ents)
+ for j := l - 1; j >= 0; j-- {
+ ent := dt.ents[j]
+ if !constantTimeStringCompare(ent.Name, f.Name) {
+ continue
+ }
+ if i == 0 {
+ i = uint64(l - j)
+ }
+ if f.Sensitive {
+ continue
+ }
+ if !constantTimeStringCompare(ent.Value, f.Value) {
+ continue
+ }
+ i = uint64(l - j)
+ nameValueMatch = true
+ return
+ }
+ return
+}
+
+func (d *Decoder) maxTableIndex() int {
+ return len(d.dynTab.ents) + len(staticTable)
+}
+
+func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) {
+ if i < 1 {
+ return
+ }
+ if i > uint64(d.maxTableIndex()) {
+ return
+ }
+ if i <= uint64(len(staticTable)) {
+ return staticTable[i-1], true
+ }
+ dents := d.dynTab.ents
+ return dents[len(dents)-(int(i)-len(staticTable))], true
+}
+
+// Decode decodes an entire block.
+//
+// TODO: remove this method and make it incremental later? This is
+// easier for debugging now.
+func (d *Decoder) DecodeFull(p []byte) ([]HeaderField, error) {
+ var hf []HeaderField
+ saveFunc := d.emit
+ defer func() { d.emit = saveFunc }()
+ d.emit = func(f HeaderField) { hf = append(hf, f) }
+ if _, err := d.Write(p); err != nil {
+ return nil, err
+ }
+ if err := d.Close(); err != nil {
+ return nil, err
+ }
+ return hf, nil
+}
+
+func (d *Decoder) Close() error {
+ if d.saveBuf.Len() > 0 {
+ d.saveBuf.Reset()
+ return DecodingError{errors.New("truncated headers")}
+ }
+ return nil
+}
+
+func (d *Decoder) Write(p []byte) (n int, err error) {
+ if len(p) == 0 {
+ // Prevent state machine CPU attacks (making us redo
+ // work up to the point of finding out we don't have
+ // enough data)
+ return
+ }
+ // Only copy the data if we have to. Optimistically assume
+ // that p will contain a complete header block.
+ if d.saveBuf.Len() == 0 {
+ d.buf = p
+ } else {
+ d.saveBuf.Write(p)
+ d.buf = d.saveBuf.Bytes()
+ d.saveBuf.Reset()
+ }
+
+ for len(d.buf) > 0 {
+ err = d.parseHeaderFieldRepr()
+ if err == errNeedMore {
+ // Extra paranoia, making sure saveBuf won't
+ // get too large. All the varint and string
+ // reading code earlier should already catch
+ // overlong things and return ErrStringLength,
+ // but keep this as a last resort.
+ const varIntOverhead = 8 // conservative
+ if d.maxStrLen != 0 && int64(len(d.buf)) > 2*(int64(d.maxStrLen)+varIntOverhead) {
+ return 0, ErrStringLength
+ }
+ d.saveBuf.Write(d.buf)
+ return len(p), nil
+ }
+ if err != nil {
+ break
+ }
+ }
+ return len(p), err
+}
+
+// errNeedMore is an internal sentinel error value that means the
+// buffer is truncated and we need to read more data before we can
+// continue parsing.
+var errNeedMore = errors.New("need more data")
+
+type indexType int
+
+const (
+ indexedTrue indexType = iota
+ indexedFalse
+ indexedNever
+)
+
+func (v indexType) indexed() bool { return v == indexedTrue }
+func (v indexType) sensitive() bool { return v == indexedNever }
+
+// returns errNeedMore if there isn't enough data available.
+// any other error is fatal.
+// consumes d.buf iff it returns nil.
+// precondition: must be called with len(d.buf) > 0
+func (d *Decoder) parseHeaderFieldRepr() error {
+ b := d.buf[0]
+ switch {
+ case b&128 != 0:
+ // Indexed representation.
+ // High bit set?
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.6.1
+ return d.parseFieldIndexed()
+ case b&192 == 64:
+ // 6.2.1 Literal Header Field with Incremental Indexing
+ // 0b10xxxxxx: top two bits are 10
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.1
+ return d.parseFieldLiteral(6, indexedTrue)
+ case b&240 == 0:
+ // 6.2.2 Literal Header Field without Indexing
+ // 0b0000xxxx: top four bits are 0000
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.2
+ return d.parseFieldLiteral(4, indexedFalse)
+ case b&240 == 16:
+ // 6.2.3 Literal Header Field never Indexed
+ // 0b0001xxxx: top four bits are 0001
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.3
+ return d.parseFieldLiteral(4, indexedNever)
+ case b&224 == 32:
+ // 6.3 Dynamic Table Size Update
+ // Top three bits are '001'.
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.6.3
+ return d.parseDynamicTableSizeUpdate()
+ }
+
+ return DecodingError{errors.New("invalid encoding")}
+}
+
+// (same invariants and behavior as parseHeaderFieldRepr)
+func (d *Decoder) parseFieldIndexed() error {
+ buf := d.buf
+ idx, buf, err := readVarInt(7, buf)
+ if err != nil {
+ return err
+ }
+ hf, ok := d.at(idx)
+ if !ok {
+ return DecodingError{InvalidIndexError(idx)}
+ }
+ d.buf = buf
+ return d.callEmit(HeaderField{Name: hf.Name, Value: hf.Value})
+}
+
+// (same invariants and behavior as parseHeaderFieldRepr)
+func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {
+ buf := d.buf
+ nameIdx, buf, err := readVarInt(n, buf)
+ if err != nil {
+ return err
+ }
+
+ var hf HeaderField
+ wantStr := d.emitEnabled || it.indexed()
+ if nameIdx > 0 {
+ ihf, ok := d.at(nameIdx)
+ if !ok {
+ return DecodingError{InvalidIndexError(nameIdx)}
+ }
+ hf.Name = ihf.Name
+ } else {
+ hf.Name, buf, err = d.readString(buf, wantStr)
+ if err != nil {
+ return err
+ }
+ }
+ hf.Value, buf, err = d.readString(buf, wantStr)
+ if err != nil {
+ return err
+ }
+ d.buf = buf
+ if it.indexed() {
+ d.dynTab.add(hf)
+ }
+ hf.Sensitive = it.sensitive()
+ return d.callEmit(hf)
+}
+
+func (d *Decoder) callEmit(hf HeaderField) error {
+ if d.maxStrLen != 0 {
+ if len(hf.Name) > d.maxStrLen || len(hf.Value) > d.maxStrLen {
+ return ErrStringLength
+ }
+ }
+ if d.emitEnabled {
+ d.emit(hf)
+ }
+ return nil
+}
+
+// (same invariants and behavior as parseHeaderFieldRepr)
+func (d *Decoder) parseDynamicTableSizeUpdate() error {
+ buf := d.buf
+ size, buf, err := readVarInt(5, buf)
+ if err != nil {
+ return err
+ }
+ if size > uint64(d.dynTab.allowedMaxSize) {
+ return DecodingError{errors.New("dynamic table size update too large")}
+ }
+ d.dynTab.setMaxSize(uint32(size))
+ d.buf = buf
+ return nil
+}
+
+var errVarintOverflow = DecodingError{errors.New("varint integer overflow")}
+
+// readVarInt reads an unsigned variable length integer off the
+// beginning of p. n is the parameter as described in
+// http://http2.github.io/http2-spec/compression.html#rfc.section.5.1.
+//
+// n must always be between 1 and 8.
+//
+// The returned remain buffer is either a smaller suffix of p, or err != nil.
+// The error is errNeedMore if p doesn't contain a complete integer.
+func readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) {
+ if n < 1 || n > 8 {
+ panic("bad n")
+ }
+ if len(p) == 0 {
+ return 0, p, errNeedMore
+ }
+ i = uint64(p[0])
+ if n < 8 {
+ i &= (1 << uint64(n)) - 1
+ }
+ if i < (1< 0 {
+ b := p[0]
+ p = p[1:]
+ i += uint64(b&127) << m
+ if b&128 == 0 {
+ return i, p, nil
+ }
+ m += 7
+ if m >= 63 { // TODO: proper overflow check. making this up.
+ return 0, origP, errVarintOverflow
+ }
+ }
+ return 0, origP, errNeedMore
+}
+
+// readString decodes an hpack string from p.
+//
+// wantStr is whether s will be used. If false, decompression and
+// []byte->string garbage are skipped if s will be ignored
+// anyway. This does mean that huffman decoding errors for non-indexed
+// strings past the MAX_HEADER_LIST_SIZE are ignored, but the server
+// is returning an error anyway, and because they're not indexed, the error
+// won't affect the decoding state.
+func (d *Decoder) readString(p []byte, wantStr bool) (s string, remain []byte, err error) {
+ if len(p) == 0 {
+ return "", p, errNeedMore
+ }
+ isHuff := p[0]&128 != 0
+ strLen, p, err := readVarInt(7, p)
+ if err != nil {
+ return "", p, err
+ }
+ if d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) {
+ return "", nil, ErrStringLength
+ }
+ if uint64(len(p)) < strLen {
+ return "", p, errNeedMore
+ }
+ if !isHuff {
+ if wantStr {
+ s = string(p[:strLen])
+ }
+ return s, p[strLen:], nil
+ }
+
+ if wantStr {
+ buf := bufPool.Get().(*bytes.Buffer)
+ buf.Reset() // don't trust others
+ defer bufPool.Put(buf)
+ if err := huffmanDecode(buf, d.maxStrLen, p[:strLen]); err != nil {
+ buf.Reset()
+ return "", nil, err
+ }
+ s = buf.String()
+ buf.Reset() // be nice to GC
+ }
+ return s, p[strLen:], nil
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/hpack_test.go b/vendor/golang.org/x/net/http2/hpack/hpack_test.go
new file mode 100644
index 00000000..6dc69f95
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/hpack_test.go
@@ -0,0 +1,813 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package hpack
+
+import (
+ "bufio"
+ "bytes"
+ "encoding/hex"
+ "fmt"
+ "math/rand"
+ "reflect"
+ "regexp"
+ "strconv"
+ "strings"
+ "testing"
+ "time"
+)
+
+func TestStaticTable(t *testing.T) {
+ fromSpec := `
+ +-------+-----------------------------+---------------+
+ | 1 | :authority | |
+ | 2 | :method | GET |
+ | 3 | :method | POST |
+ | 4 | :path | / |
+ | 5 | :path | /index.html |
+ | 6 | :scheme | http |
+ | 7 | :scheme | https |
+ | 8 | :status | 200 |
+ | 9 | :status | 204 |
+ | 10 | :status | 206 |
+ | 11 | :status | 304 |
+ | 12 | :status | 400 |
+ | 13 | :status | 404 |
+ | 14 | :status | 500 |
+ | 15 | accept-charset | |
+ | 16 | accept-encoding | gzip, deflate |
+ | 17 | accept-language | |
+ | 18 | accept-ranges | |
+ | 19 | accept | |
+ | 20 | access-control-allow-origin | |
+ | 21 | age | |
+ | 22 | allow | |
+ | 23 | authorization | |
+ | 24 | cache-control | |
+ | 25 | content-disposition | |
+ | 26 | content-encoding | |
+ | 27 | content-language | |
+ | 28 | content-length | |
+ | 29 | content-location | |
+ | 30 | content-range | |
+ | 31 | content-type | |
+ | 32 | cookie | |
+ | 33 | date | |
+ | 34 | etag | |
+ | 35 | expect | |
+ | 36 | expires | |
+ | 37 | from | |
+ | 38 | host | |
+ | 39 | if-match | |
+ | 40 | if-modified-since | |
+ | 41 | if-none-match | |
+ | 42 | if-range | |
+ | 43 | if-unmodified-since | |
+ | 44 | last-modified | |
+ | 45 | link | |
+ | 46 | location | |
+ | 47 | max-forwards | |
+ | 48 | proxy-authenticate | |
+ | 49 | proxy-authorization | |
+ | 50 | range | |
+ | 51 | referer | |
+ | 52 | refresh | |
+ | 53 | retry-after | |
+ | 54 | server | |
+ | 55 | set-cookie | |
+ | 56 | strict-transport-security | |
+ | 57 | transfer-encoding | |
+ | 58 | user-agent | |
+ | 59 | vary | |
+ | 60 | via | |
+ | 61 | www-authenticate | |
+ +-------+-----------------------------+---------------+
+`
+ bs := bufio.NewScanner(strings.NewReader(fromSpec))
+ re := regexp.MustCompile(`\| (\d+)\s+\| (\S+)\s*\| (\S(.*\S)?)?\s+\|`)
+ for bs.Scan() {
+ l := bs.Text()
+ if !strings.Contains(l, "|") {
+ continue
+ }
+ m := re.FindStringSubmatch(l)
+ if m == nil {
+ continue
+ }
+ i, err := strconv.Atoi(m[1])
+ if err != nil {
+ t.Errorf("Bogus integer on line %q", l)
+ continue
+ }
+ if i < 1 || i > len(staticTable) {
+ t.Errorf("Bogus index %d on line %q", i, l)
+ continue
+ }
+ if got, want := staticTable[i-1].Name, m[2]; got != want {
+ t.Errorf("header index %d name = %q; want %q", i, got, want)
+ }
+ if got, want := staticTable[i-1].Value, m[3]; got != want {
+ t.Errorf("header index %d value = %q; want %q", i, got, want)
+ }
+ }
+ if err := bs.Err(); err != nil {
+ t.Error(err)
+ }
+}
+
+func (d *Decoder) mustAt(idx int) HeaderField {
+ if hf, ok := d.at(uint64(idx)); !ok {
+ panic(fmt.Sprintf("bogus index %d", idx))
+ } else {
+ return hf
+ }
+}
+
+func TestDynamicTableAt(t *testing.T) {
+ d := NewDecoder(4096, nil)
+ at := d.mustAt
+ if got, want := at(2), (pair(":method", "GET")); got != want {
+ t.Errorf("at(2) = %v; want %v", got, want)
+ }
+ d.dynTab.add(pair("foo", "bar"))
+ d.dynTab.add(pair("blake", "miz"))
+ if got, want := at(len(staticTable)+1), (pair("blake", "miz")); got != want {
+ t.Errorf("at(dyn 1) = %v; want %v", got, want)
+ }
+ if got, want := at(len(staticTable)+2), (pair("foo", "bar")); got != want {
+ t.Errorf("at(dyn 2) = %v; want %v", got, want)
+ }
+ if got, want := at(3), (pair(":method", "POST")); got != want {
+ t.Errorf("at(3) = %v; want %v", got, want)
+ }
+}
+
+func TestDynamicTableSearch(t *testing.T) {
+ dt := dynamicTable{}
+ dt.setMaxSize(4096)
+
+ dt.add(pair("foo", "bar"))
+ dt.add(pair("blake", "miz"))
+ dt.add(pair(":method", "GET"))
+
+ tests := []struct {
+ hf HeaderField
+ wantI uint64
+ wantMatch bool
+ }{
+ // Name and Value match
+ {pair("foo", "bar"), 3, true},
+ {pair(":method", "GET"), 1, true},
+
+ // Only name match because of Sensitive == true
+ {HeaderField{"blake", "miz", true}, 2, false},
+
+ // Only Name matches
+ {pair("foo", "..."), 3, false},
+ {pair("blake", "..."), 2, false},
+ {pair(":method", "..."), 1, false},
+
+ // None match
+ {pair("foo-", "bar"), 0, false},
+ }
+ for _, tt := range tests {
+ if gotI, gotMatch := dt.search(tt.hf); gotI != tt.wantI || gotMatch != tt.wantMatch {
+ t.Errorf("d.search(%+v) = %v, %v; want %v, %v", tt.hf, gotI, gotMatch, tt.wantI, tt.wantMatch)
+ }
+ }
+}
+
+func TestDynamicTableSizeEvict(t *testing.T) {
+ d := NewDecoder(4096, nil)
+ if want := uint32(0); d.dynTab.size != want {
+ t.Fatalf("size = %d; want %d", d.dynTab.size, want)
+ }
+ add := d.dynTab.add
+ add(pair("blake", "eats pizza"))
+ if want := uint32(15 + 32); d.dynTab.size != want {
+ t.Fatalf("after pizza, size = %d; want %d", d.dynTab.size, want)
+ }
+ add(pair("foo", "bar"))
+ if want := uint32(15 + 32 + 6 + 32); d.dynTab.size != want {
+ t.Fatalf("after foo bar, size = %d; want %d", d.dynTab.size, want)
+ }
+ d.dynTab.setMaxSize(15 + 32 + 1 /* slop */)
+ if want := uint32(6 + 32); d.dynTab.size != want {
+ t.Fatalf("after setMaxSize, size = %d; want %d", d.dynTab.size, want)
+ }
+ if got, want := d.mustAt(len(staticTable)+1), (pair("foo", "bar")); got != want {
+ t.Errorf("at(dyn 1) = %v; want %v", got, want)
+ }
+ add(pair("long", strings.Repeat("x", 500)))
+ if want := uint32(0); d.dynTab.size != want {
+ t.Fatalf("after big one, size = %d; want %d", d.dynTab.size, want)
+ }
+}
+
+func TestDecoderDecode(t *testing.T) {
+ tests := []struct {
+ name string
+ in []byte
+ want []HeaderField
+ wantDynTab []HeaderField // newest entry first
+ }{
+ // C.2.1 Literal Header Field with Indexing
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.1
+ {"C.2.1", dehex("400a 6375 7374 6f6d 2d6b 6579 0d63 7573 746f 6d2d 6865 6164 6572"),
+ []HeaderField{pair("custom-key", "custom-header")},
+ []HeaderField{pair("custom-key", "custom-header")},
+ },
+
+ // C.2.2 Literal Header Field without Indexing
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.2
+ {"C.2.2", dehex("040c 2f73 616d 706c 652f 7061 7468"),
+ []HeaderField{pair(":path", "/sample/path")},
+ []HeaderField{}},
+
+ // C.2.3 Literal Header Field never Indexed
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.3
+ {"C.2.3", dehex("1008 7061 7373 776f 7264 0673 6563 7265 74"),
+ []HeaderField{{"password", "secret", true}},
+ []HeaderField{}},
+
+ // C.2.4 Indexed Header Field
+ // http://http2.github.io/http2-spec/compression.html#rfc.section.C.2.4
+ {"C.2.4", []byte("\x82"),
+ []HeaderField{pair(":method", "GET")},
+ []HeaderField{}},
+ }
+ for _, tt := range tests {
+ d := NewDecoder(4096, nil)
+ hf, err := d.DecodeFull(tt.in)
+ if err != nil {
+ t.Errorf("%s: %v", tt.name, err)
+ continue
+ }
+ if !reflect.DeepEqual(hf, tt.want) {
+ t.Errorf("%s: Got %v; want %v", tt.name, hf, tt.want)
+ }
+ gotDynTab := d.dynTab.reverseCopy()
+ if !reflect.DeepEqual(gotDynTab, tt.wantDynTab) {
+ t.Errorf("%s: dynamic table after = %v; want %v", tt.name, gotDynTab, tt.wantDynTab)
+ }
+ }
+}
+
+func (dt *dynamicTable) reverseCopy() (hf []HeaderField) {
+ hf = make([]HeaderField, len(dt.ents))
+ for i := range hf {
+ hf[i] = dt.ents[len(dt.ents)-1-i]
+ }
+ return
+}
+
+type encAndWant struct {
+ enc []byte
+ want []HeaderField
+ wantDynTab []HeaderField
+ wantDynSize uint32
+}
+
+// C.3 Request Examples without Huffman Coding
+// http://http2.github.io/http2-spec/compression.html#rfc.section.C.3
+func TestDecodeC3_NoHuffman(t *testing.T) {
+ testDecodeSeries(t, 4096, []encAndWant{
+ {dehex("8286 8441 0f77 7777 2e65 7861 6d70 6c65 2e63 6f6d"),
+ []HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "http"),
+ pair(":path", "/"),
+ pair(":authority", "www.example.com"),
+ },
+ []HeaderField{
+ pair(":authority", "www.example.com"),
+ },
+ 57,
+ },
+ {dehex("8286 84be 5808 6e6f 2d63 6163 6865"),
+ []HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "http"),
+ pair(":path", "/"),
+ pair(":authority", "www.example.com"),
+ pair("cache-control", "no-cache"),
+ },
+ []HeaderField{
+ pair("cache-control", "no-cache"),
+ pair(":authority", "www.example.com"),
+ },
+ 110,
+ },
+ {dehex("8287 85bf 400a 6375 7374 6f6d 2d6b 6579 0c63 7573 746f 6d2d 7661 6c75 65"),
+ []HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "https"),
+ pair(":path", "/index.html"),
+ pair(":authority", "www.example.com"),
+ pair("custom-key", "custom-value"),
+ },
+ []HeaderField{
+ pair("custom-key", "custom-value"),
+ pair("cache-control", "no-cache"),
+ pair(":authority", "www.example.com"),
+ },
+ 164,
+ },
+ })
+}
+
+// C.4 Request Examples with Huffman Coding
+// http://http2.github.io/http2-spec/compression.html#rfc.section.C.4
+func TestDecodeC4_Huffman(t *testing.T) {
+ testDecodeSeries(t, 4096, []encAndWant{
+ {dehex("8286 8441 8cf1 e3c2 e5f2 3a6b a0ab 90f4 ff"),
+ []HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "http"),
+ pair(":path", "/"),
+ pair(":authority", "www.example.com"),
+ },
+ []HeaderField{
+ pair(":authority", "www.example.com"),
+ },
+ 57,
+ },
+ {dehex("8286 84be 5886 a8eb 1064 9cbf"),
+ []HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "http"),
+ pair(":path", "/"),
+ pair(":authority", "www.example.com"),
+ pair("cache-control", "no-cache"),
+ },
+ []HeaderField{
+ pair("cache-control", "no-cache"),
+ pair(":authority", "www.example.com"),
+ },
+ 110,
+ },
+ {dehex("8287 85bf 4088 25a8 49e9 5ba9 7d7f 8925 a849 e95b b8e8 b4bf"),
+ []HeaderField{
+ pair(":method", "GET"),
+ pair(":scheme", "https"),
+ pair(":path", "/index.html"),
+ pair(":authority", "www.example.com"),
+ pair("custom-key", "custom-value"),
+ },
+ []HeaderField{
+ pair("custom-key", "custom-value"),
+ pair("cache-control", "no-cache"),
+ pair(":authority", "www.example.com"),
+ },
+ 164,
+ },
+ })
+}
+
+// http://http2.github.io/http2-spec/compression.html#rfc.section.C.5
+// "This section shows several consecutive header lists, corresponding
+// to HTTP responses, on the same connection. The HTTP/2 setting
+// parameter SETTINGS_HEADER_TABLE_SIZE is set to the value of 256
+// octets, causing some evictions to occur."
+func TestDecodeC5_ResponsesNoHuff(t *testing.T) {
+ testDecodeSeries(t, 256, []encAndWant{
+ {dehex(`
+4803 3330 3258 0770 7269 7661 7465 611d
+4d6f 6e2c 2032 3120 4f63 7420 3230 3133
+2032 303a 3133 3a32 3120 474d 546e 1768
+7474 7073 3a2f 2f77 7777 2e65 7861 6d70
+6c65 2e63 6f6d
+`),
+ []HeaderField{
+ pair(":status", "302"),
+ pair("cache-control", "private"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("location", "https://www.example.com"),
+ },
+ []HeaderField{
+ pair("location", "https://www.example.com"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("cache-control", "private"),
+ pair(":status", "302"),
+ },
+ 222,
+ },
+ {dehex("4803 3330 37c1 c0bf"),
+ []HeaderField{
+ pair(":status", "307"),
+ pair("cache-control", "private"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("location", "https://www.example.com"),
+ },
+ []HeaderField{
+ pair(":status", "307"),
+ pair("location", "https://www.example.com"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("cache-control", "private"),
+ },
+ 222,
+ },
+ {dehex(`
+88c1 611d 4d6f 6e2c 2032 3120 4f63 7420
+3230 3133 2032 303a 3133 3a32 3220 474d
+54c0 5a04 677a 6970 7738 666f 6f3d 4153
+444a 4b48 514b 425a 584f 5157 454f 5049
+5541 5851 5745 4f49 553b 206d 6178 2d61
+6765 3d33 3630 303b 2076 6572 7369 6f6e
+3d31
+`),
+ []HeaderField{
+ pair(":status", "200"),
+ pair("cache-control", "private"),
+ pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"),
+ pair("location", "https://www.example.com"),
+ pair("content-encoding", "gzip"),
+ pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"),
+ },
+ []HeaderField{
+ pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"),
+ pair("content-encoding", "gzip"),
+ pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"),
+ },
+ 215,
+ },
+ })
+}
+
+// http://http2.github.io/http2-spec/compression.html#rfc.section.C.6
+// "This section shows the same examples as the previous section, but
+// using Huffman encoding for the literal values. The HTTP/2 setting
+// parameter SETTINGS_HEADER_TABLE_SIZE is set to the value of 256
+// octets, causing some evictions to occur. The eviction mechanism
+// uses the length of the decoded literal values, so the same
+// evictions occurs as in the previous section."
+func TestDecodeC6_ResponsesHuffman(t *testing.T) {
+ testDecodeSeries(t, 256, []encAndWant{
+ {dehex(`
+4882 6402 5885 aec3 771a 4b61 96d0 7abe
+9410 54d4 44a8 2005 9504 0b81 66e0 82a6
+2d1b ff6e 919d 29ad 1718 63c7 8f0b 97c8
+e9ae 82ae 43d3
+`),
+ []HeaderField{
+ pair(":status", "302"),
+ pair("cache-control", "private"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("location", "https://www.example.com"),
+ },
+ []HeaderField{
+ pair("location", "https://www.example.com"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("cache-control", "private"),
+ pair(":status", "302"),
+ },
+ 222,
+ },
+ {dehex("4883 640e ffc1 c0bf"),
+ []HeaderField{
+ pair(":status", "307"),
+ pair("cache-control", "private"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("location", "https://www.example.com"),
+ },
+ []HeaderField{
+ pair(":status", "307"),
+ pair("location", "https://www.example.com"),
+ pair("date", "Mon, 21 Oct 2013 20:13:21 GMT"),
+ pair("cache-control", "private"),
+ },
+ 222,
+ },
+ {dehex(`
+88c1 6196 d07a be94 1054 d444 a820 0595
+040b 8166 e084 a62d 1bff c05a 839b d9ab
+77ad 94e7 821d d7f2 e6c7 b335 dfdf cd5b
+3960 d5af 2708 7f36 72c1 ab27 0fb5 291f
+9587 3160 65c0 03ed 4ee5 b106 3d50 07
+`),
+ []HeaderField{
+ pair(":status", "200"),
+ pair("cache-control", "private"),
+ pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"),
+ pair("location", "https://www.example.com"),
+ pair("content-encoding", "gzip"),
+ pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"),
+ },
+ []HeaderField{
+ pair("set-cookie", "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"),
+ pair("content-encoding", "gzip"),
+ pair("date", "Mon, 21 Oct 2013 20:13:22 GMT"),
+ },
+ 215,
+ },
+ })
+}
+
+func testDecodeSeries(t *testing.T, size uint32, steps []encAndWant) {
+ d := NewDecoder(size, nil)
+ for i, step := range steps {
+ hf, err := d.DecodeFull(step.enc)
+ if err != nil {
+ t.Fatalf("Error at step index %d: %v", i, err)
+ }
+ if !reflect.DeepEqual(hf, step.want) {
+ t.Fatalf("At step index %d: Got headers %v; want %v", i, hf, step.want)
+ }
+ gotDynTab := d.dynTab.reverseCopy()
+ if !reflect.DeepEqual(gotDynTab, step.wantDynTab) {
+ t.Errorf("After step index %d, dynamic table = %v; want %v", i, gotDynTab, step.wantDynTab)
+ }
+ if d.dynTab.size != step.wantDynSize {
+ t.Errorf("After step index %d, dynamic table size = %v; want %v", i, d.dynTab.size, step.wantDynSize)
+ }
+ }
+}
+
+func TestHuffmanDecode(t *testing.T) {
+ tests := []struct {
+ inHex, want string
+ }{
+ {"f1e3 c2e5 f23a 6ba0 ab90 f4ff", "www.example.com"},
+ {"a8eb 1064 9cbf", "no-cache"},
+ {"25a8 49e9 5ba9 7d7f", "custom-key"},
+ {"25a8 49e9 5bb8 e8b4 bf", "custom-value"},
+ {"6402", "302"},
+ {"aec3 771a 4b", "private"},
+ {"d07a be94 1054 d444 a820 0595 040b 8166 e082 a62d 1bff", "Mon, 21 Oct 2013 20:13:21 GMT"},
+ {"9d29 ad17 1863 c78f 0b97 c8e9 ae82 ae43 d3", "https://www.example.com"},
+ {"9bd9 ab", "gzip"},
+ {"94e7 821d d7f2 e6c7 b335 dfdf cd5b 3960 d5af 2708 7f36 72c1 ab27 0fb5 291f 9587 3160 65c0 03ed 4ee5 b106 3d50 07",
+ "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"},
+ }
+ for i, tt := range tests {
+ var buf bytes.Buffer
+ in, err := hex.DecodeString(strings.Replace(tt.inHex, " ", "", -1))
+ if err != nil {
+ t.Errorf("%d. hex input error: %v", i, err)
+ continue
+ }
+ if _, err := HuffmanDecode(&buf, in); err != nil {
+ t.Errorf("%d. decode error: %v", i, err)
+ continue
+ }
+ if got := buf.String(); tt.want != got {
+ t.Errorf("%d. decode = %q; want %q", i, got, tt.want)
+ }
+ }
+}
+
+func TestAppendHuffmanString(t *testing.T) {
+ tests := []struct {
+ in, want string
+ }{
+ {"www.example.com", "f1e3 c2e5 f23a 6ba0 ab90 f4ff"},
+ {"no-cache", "a8eb 1064 9cbf"},
+ {"custom-key", "25a8 49e9 5ba9 7d7f"},
+ {"custom-value", "25a8 49e9 5bb8 e8b4 bf"},
+ {"302", "6402"},
+ {"private", "aec3 771a 4b"},
+ {"Mon, 21 Oct 2013 20:13:21 GMT", "d07a be94 1054 d444 a820 0595 040b 8166 e082 a62d 1bff"},
+ {"https://www.example.com", "9d29 ad17 1863 c78f 0b97 c8e9 ae82 ae43 d3"},
+ {"gzip", "9bd9 ab"},
+ {"foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1",
+ "94e7 821d d7f2 e6c7 b335 dfdf cd5b 3960 d5af 2708 7f36 72c1 ab27 0fb5 291f 9587 3160 65c0 03ed 4ee5 b106 3d50 07"},
+ }
+ for i, tt := range tests {
+ buf := []byte{}
+ want := strings.Replace(tt.want, " ", "", -1)
+ buf = AppendHuffmanString(buf, tt.in)
+ if got := hex.EncodeToString(buf); want != got {
+ t.Errorf("%d. encode = %q; want %q", i, got, want)
+ }
+ }
+}
+
+func TestHuffmanMaxStrLen(t *testing.T) {
+ const msg = "Some string"
+ huff := AppendHuffmanString(nil, msg)
+
+ testGood := func(max int) {
+ var out bytes.Buffer
+ if err := huffmanDecode(&out, max, huff); err != nil {
+ t.Errorf("For maxLen=%d, unexpected error: %v", max, err)
+ }
+ if out.String() != msg {
+ t.Errorf("For maxLen=%d, out = %q; want %q", max, out.String(), msg)
+ }
+ }
+ testGood(0)
+ testGood(len(msg))
+ testGood(len(msg) + 1)
+
+ var out bytes.Buffer
+ if err := huffmanDecode(&out, len(msg)-1, huff); err != ErrStringLength {
+ t.Errorf("err = %v; want ErrStringLength", err)
+ }
+}
+
+func TestHuffmanRoundtripStress(t *testing.T) {
+ const Len = 50 // of uncompressed string
+ input := make([]byte, Len)
+ var output bytes.Buffer
+ var huff []byte
+
+ n := 5000
+ if testing.Short() {
+ n = 100
+ }
+ seed := time.Now().UnixNano()
+ t.Logf("Seed = %v", seed)
+ src := rand.New(rand.NewSource(seed))
+ var encSize int64
+ for i := 0; i < n; i++ {
+ for l := range input {
+ input[l] = byte(src.Intn(256))
+ }
+ huff = AppendHuffmanString(huff[:0], string(input))
+ encSize += int64(len(huff))
+ output.Reset()
+ if err := huffmanDecode(&output, 0, huff); err != nil {
+ t.Errorf("Failed to decode %q -> %q -> error %v", input, huff, err)
+ continue
+ }
+ if !bytes.Equal(output.Bytes(), input) {
+ t.Errorf("Roundtrip failure on %q -> %q -> %q", input, huff, output.Bytes())
+ }
+ }
+ t.Logf("Compressed size of original: %0.02f%% (%v -> %v)", 100*(float64(encSize)/(Len*float64(n))), Len*n, encSize)
+}
+
+func TestHuffmanDecodeFuzz(t *testing.T) {
+ const Len = 50 // of compressed
+ var buf, zbuf bytes.Buffer
+
+ n := 5000
+ if testing.Short() {
+ n = 100
+ }
+ seed := time.Now().UnixNano()
+ t.Logf("Seed = %v", seed)
+ src := rand.New(rand.NewSource(seed))
+ numFail := 0
+ for i := 0; i < n; i++ {
+ zbuf.Reset()
+ if i == 0 {
+ // Start with at least one invalid one.
+ zbuf.WriteString("00\x91\xff\xff\xff\xff\xc8")
+ } else {
+ for l := 0; l < Len; l++ {
+ zbuf.WriteByte(byte(src.Intn(256)))
+ }
+ }
+
+ buf.Reset()
+ if err := huffmanDecode(&buf, 0, zbuf.Bytes()); err != nil {
+ if err == ErrInvalidHuffman {
+ numFail++
+ continue
+ }
+ t.Errorf("Failed to decode %q: %v", zbuf.Bytes(), err)
+ continue
+ }
+ }
+ t.Logf("%0.02f%% are invalid (%d / %d)", 100*float64(numFail)/float64(n), numFail, n)
+ if numFail < 1 {
+ t.Error("expected at least one invalid huffman encoding (test starts with one)")
+ }
+}
+
+func TestReadVarInt(t *testing.T) {
+ type res struct {
+ i uint64
+ consumed int
+ err error
+ }
+ tests := []struct {
+ n byte
+ p []byte
+ want res
+ }{
+ // Fits in a byte:
+ {1, []byte{0}, res{0, 1, nil}},
+ {2, []byte{2}, res{2, 1, nil}},
+ {3, []byte{6}, res{6, 1, nil}},
+ {4, []byte{14}, res{14, 1, nil}},
+ {5, []byte{30}, res{30, 1, nil}},
+ {6, []byte{62}, res{62, 1, nil}},
+ {7, []byte{126}, res{126, 1, nil}},
+ {8, []byte{254}, res{254, 1, nil}},
+
+ // Doesn't fit in a byte:
+ {1, []byte{1}, res{0, 0, errNeedMore}},
+ {2, []byte{3}, res{0, 0, errNeedMore}},
+ {3, []byte{7}, res{0, 0, errNeedMore}},
+ {4, []byte{15}, res{0, 0, errNeedMore}},
+ {5, []byte{31}, res{0, 0, errNeedMore}},
+ {6, []byte{63}, res{0, 0, errNeedMore}},
+ {7, []byte{127}, res{0, 0, errNeedMore}},
+ {8, []byte{255}, res{0, 0, errNeedMore}},
+
+ // Ignoring top bits:
+ {5, []byte{255, 154, 10}, res{1337, 3, nil}}, // high dummy three bits: 111
+ {5, []byte{159, 154, 10}, res{1337, 3, nil}}, // high dummy three bits: 100
+ {5, []byte{191, 154, 10}, res{1337, 3, nil}}, // high dummy three bits: 101
+
+ // Extra byte:
+ {5, []byte{191, 154, 10, 2}, res{1337, 3, nil}}, // extra byte
+
+ // Short a byte:
+ {5, []byte{191, 154}, res{0, 0, errNeedMore}},
+
+ // integer overflow:
+ {1, []byte{255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128}, res{0, 0, errVarintOverflow}},
+ }
+ for _, tt := range tests {
+ i, remain, err := readVarInt(tt.n, tt.p)
+ consumed := len(tt.p) - len(remain)
+ got := res{i, consumed, err}
+ if got != tt.want {
+ t.Errorf("readVarInt(%d, %v ~ %x) = %+v; want %+v", tt.n, tt.p, tt.p, got, tt.want)
+ }
+ }
+}
+
+// Fuzz crash, originally reported at https://github.com/bradfitz/http2/issues/56
+func TestHuffmanFuzzCrash(t *testing.T) {
+ got, err := HuffmanDecodeToString([]byte("00\x91\xff\xff\xff\xff\xc8"))
+ if got != "" {
+ t.Errorf("Got %q; want empty string", got)
+ }
+ if err != ErrInvalidHuffman {
+ t.Errorf("Err = %v; want ErrInvalidHuffman", err)
+ }
+}
+
+func dehex(s string) []byte {
+ s = strings.Replace(s, " ", "", -1)
+ s = strings.Replace(s, "\n", "", -1)
+ b, err := hex.DecodeString(s)
+ if err != nil {
+ panic(err)
+ }
+ return b
+}
+
+func TestEmitEnabled(t *testing.T) {
+ var buf bytes.Buffer
+ enc := NewEncoder(&buf)
+ enc.WriteField(HeaderField{Name: "foo", Value: "bar"})
+ enc.WriteField(HeaderField{Name: "foo", Value: "bar"})
+
+ numCallback := 0
+ var dec *Decoder
+ dec = NewDecoder(8<<20, func(HeaderField) {
+ numCallback++
+ dec.SetEmitEnabled(false)
+ })
+ if !dec.EmitEnabled() {
+ t.Errorf("initial emit enabled = false; want true")
+ }
+ if _, err := dec.Write(buf.Bytes()); err != nil {
+ t.Error(err)
+ }
+ if numCallback != 1 {
+ t.Errorf("num callbacks = %d; want 1", numCallback)
+ }
+ if dec.EmitEnabled() {
+ t.Errorf("emit enabled = true; want false")
+ }
+}
+
+func TestSaveBufLimit(t *testing.T) {
+ const maxStr = 1 << 10
+ var got []HeaderField
+ dec := NewDecoder(initialHeaderTableSize, func(hf HeaderField) {
+ got = append(got, hf)
+ })
+ dec.SetMaxStringLength(maxStr)
+ var frag []byte
+ frag = append(frag[:0], encodeTypeByte(false, false))
+ frag = appendVarInt(frag, 7, 3)
+ frag = append(frag, "foo"...)
+ frag = appendVarInt(frag, 7, 3)
+ frag = append(frag, "bar"...)
+
+ if _, err := dec.Write(frag); err != nil {
+ t.Fatal(err)
+ }
+
+ want := []HeaderField{{Name: "foo", Value: "bar"}}
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("After small writes, got %v; want %v", got, want)
+ }
+
+ frag = append(frag[:0], encodeTypeByte(false, false))
+ frag = appendVarInt(frag, 7, maxStr*3)
+ frag = append(frag, make([]byte, maxStr*3)...)
+
+ _, err := dec.Write(frag)
+ if err != ErrStringLength {
+ t.Fatalf("Write error = %v; want ErrStringLength", err)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go
new file mode 100644
index 00000000..eb4b1f05
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/huffman.go
@@ -0,0 +1,190 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package hpack
+
+import (
+ "bytes"
+ "errors"
+ "io"
+ "sync"
+)
+
+var bufPool = sync.Pool{
+ New: func() interface{} { return new(bytes.Buffer) },
+}
+
+// HuffmanDecode decodes the string in v and writes the expanded
+// result to w, returning the number of bytes written to w and the
+// Write call's return value. At most one Write call is made.
+func HuffmanDecode(w io.Writer, v []byte) (int, error) {
+ buf := bufPool.Get().(*bytes.Buffer)
+ buf.Reset()
+ defer bufPool.Put(buf)
+ if err := huffmanDecode(buf, 0, v); err != nil {
+ return 0, err
+ }
+ return w.Write(buf.Bytes())
+}
+
+// HuffmanDecodeToString decodes the string in v.
+func HuffmanDecodeToString(v []byte) (string, error) {
+ buf := bufPool.Get().(*bytes.Buffer)
+ buf.Reset()
+ defer bufPool.Put(buf)
+ if err := huffmanDecode(buf, 0, v); err != nil {
+ return "", err
+ }
+ return buf.String(), nil
+}
+
+// ErrInvalidHuffman is returned for errors found decoding
+// Huffman-encoded strings.
+var ErrInvalidHuffman = errors.New("hpack: invalid Huffman-encoded data")
+
+// huffmanDecode decodes v to buf.
+// If maxLen is greater than 0, attempts to write more to buf than
+// maxLen bytes will return ErrStringLength.
+func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {
+ n := rootHuffmanNode
+ cur, nbits := uint(0), uint8(0)
+ for _, b := range v {
+ cur = cur<<8 | uint(b)
+ nbits += 8
+ for nbits >= 8 {
+ idx := byte(cur >> (nbits - 8))
+ n = n.children[idx]
+ if n == nil {
+ return ErrInvalidHuffman
+ }
+ if n.children == nil {
+ if maxLen != 0 && buf.Len() == maxLen {
+ return ErrStringLength
+ }
+ buf.WriteByte(n.sym)
+ nbits -= n.codeLen
+ n = rootHuffmanNode
+ } else {
+ nbits -= 8
+ }
+ }
+ }
+ for nbits > 0 {
+ n = n.children[byte(cur<<(8-nbits))]
+ if n.children != nil || n.codeLen > nbits {
+ break
+ }
+ buf.WriteByte(n.sym)
+ nbits -= n.codeLen
+ n = rootHuffmanNode
+ }
+ return nil
+}
+
+type node struct {
+ // children is non-nil for internal nodes
+ children []*node
+
+ // The following are only valid if children is nil:
+ codeLen uint8 // number of bits that led to the output of sym
+ sym byte // output symbol
+}
+
+func newInternalNode() *node {
+ return &node{children: make([]*node, 256)}
+}
+
+var rootHuffmanNode = newInternalNode()
+
+func init() {
+ if len(huffmanCodes) != 256 {
+ panic("unexpected size")
+ }
+ for i, code := range huffmanCodes {
+ addDecoderNode(byte(i), code, huffmanCodeLen[i])
+ }
+}
+
+func addDecoderNode(sym byte, code uint32, codeLen uint8) {
+ cur := rootHuffmanNode
+ for codeLen > 8 {
+ codeLen -= 8
+ i := uint8(code >> codeLen)
+ if cur.children[i] == nil {
+ cur.children[i] = newInternalNode()
+ }
+ cur = cur.children[i]
+ }
+ shift := 8 - codeLen
+ start, end := int(uint8(code<> (nbits - rembits))
+ dst[len(dst)-1] |= t
+ }
+
+ return dst
+}
+
+// HuffmanEncodeLength returns the number of bytes required to encode
+// s in Huffman codes. The result is round up to byte boundary.
+func HuffmanEncodeLength(s string) uint64 {
+ n := uint64(0)
+ for i := 0; i < len(s); i++ {
+ n += uint64(huffmanCodeLen[s[i]])
+ }
+ return (n + 7) / 8
+}
+
+// appendByteToHuffmanCode appends Huffman code for c to dst and
+// returns the extended buffer and the remaining bits in the last
+// element. The appending is not byte aligned and the remaining bits
+// in the last element of dst is given in rembits.
+func appendByteToHuffmanCode(dst []byte, rembits uint8, c byte) ([]byte, uint8) {
+ code := huffmanCodes[c]
+ nbits := huffmanCodeLen[c]
+
+ for {
+ if rembits > nbits {
+ t := uint8(code << (rembits - nbits))
+ dst[len(dst)-1] |= t
+ rembits -= nbits
+ break
+ }
+
+ t := uint8(code >> (nbits - rembits))
+ dst[len(dst)-1] |= t
+
+ nbits -= rembits
+ rembits = 8
+
+ if nbits == 0 {
+ break
+ }
+
+ dst = append(dst, 0)
+ }
+
+ return dst, rembits
+}
diff --git a/vendor/golang.org/x/net/http2/hpack/tables.go b/vendor/golang.org/x/net/http2/hpack/tables.go
new file mode 100644
index 00000000..b9283a02
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/hpack/tables.go
@@ -0,0 +1,352 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package hpack
+
+func pair(name, value string) HeaderField {
+ return HeaderField{Name: name, Value: value}
+}
+
+// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B
+var staticTable = [...]HeaderField{
+ pair(":authority", ""), // index 1 (1-based)
+ pair(":method", "GET"),
+ pair(":method", "POST"),
+ pair(":path", "/"),
+ pair(":path", "/index.html"),
+ pair(":scheme", "http"),
+ pair(":scheme", "https"),
+ pair(":status", "200"),
+ pair(":status", "204"),
+ pair(":status", "206"),
+ pair(":status", "304"),
+ pair(":status", "400"),
+ pair(":status", "404"),
+ pair(":status", "500"),
+ pair("accept-charset", ""),
+ pair("accept-encoding", "gzip, deflate"),
+ pair("accept-language", ""),
+ pair("accept-ranges", ""),
+ pair("accept", ""),
+ pair("access-control-allow-origin", ""),
+ pair("age", ""),
+ pair("allow", ""),
+ pair("authorization", ""),
+ pair("cache-control", ""),
+ pair("content-disposition", ""),
+ pair("content-encoding", ""),
+ pair("content-language", ""),
+ pair("content-length", ""),
+ pair("content-location", ""),
+ pair("content-range", ""),
+ pair("content-type", ""),
+ pair("cookie", ""),
+ pair("date", ""),
+ pair("etag", ""),
+ pair("expect", ""),
+ pair("expires", ""),
+ pair("from", ""),
+ pair("host", ""),
+ pair("if-match", ""),
+ pair("if-modified-since", ""),
+ pair("if-none-match", ""),
+ pair("if-range", ""),
+ pair("if-unmodified-since", ""),
+ pair("last-modified", ""),
+ pair("link", ""),
+ pair("location", ""),
+ pair("max-forwards", ""),
+ pair("proxy-authenticate", ""),
+ pair("proxy-authorization", ""),
+ pair("range", ""),
+ pair("referer", ""),
+ pair("refresh", ""),
+ pair("retry-after", ""),
+ pair("server", ""),
+ pair("set-cookie", ""),
+ pair("strict-transport-security", ""),
+ pair("transfer-encoding", ""),
+ pair("user-agent", ""),
+ pair("vary", ""),
+ pair("via", ""),
+ pair("www-authenticate", ""),
+}
+
+var huffmanCodes = [256]uint32{
+ 0x1ff8,
+ 0x7fffd8,
+ 0xfffffe2,
+ 0xfffffe3,
+ 0xfffffe4,
+ 0xfffffe5,
+ 0xfffffe6,
+ 0xfffffe7,
+ 0xfffffe8,
+ 0xffffea,
+ 0x3ffffffc,
+ 0xfffffe9,
+ 0xfffffea,
+ 0x3ffffffd,
+ 0xfffffeb,
+ 0xfffffec,
+ 0xfffffed,
+ 0xfffffee,
+ 0xfffffef,
+ 0xffffff0,
+ 0xffffff1,
+ 0xffffff2,
+ 0x3ffffffe,
+ 0xffffff3,
+ 0xffffff4,
+ 0xffffff5,
+ 0xffffff6,
+ 0xffffff7,
+ 0xffffff8,
+ 0xffffff9,
+ 0xffffffa,
+ 0xffffffb,
+ 0x14,
+ 0x3f8,
+ 0x3f9,
+ 0xffa,
+ 0x1ff9,
+ 0x15,
+ 0xf8,
+ 0x7fa,
+ 0x3fa,
+ 0x3fb,
+ 0xf9,
+ 0x7fb,
+ 0xfa,
+ 0x16,
+ 0x17,
+ 0x18,
+ 0x0,
+ 0x1,
+ 0x2,
+ 0x19,
+ 0x1a,
+ 0x1b,
+ 0x1c,
+ 0x1d,
+ 0x1e,
+ 0x1f,
+ 0x5c,
+ 0xfb,
+ 0x7ffc,
+ 0x20,
+ 0xffb,
+ 0x3fc,
+ 0x1ffa,
+ 0x21,
+ 0x5d,
+ 0x5e,
+ 0x5f,
+ 0x60,
+ 0x61,
+ 0x62,
+ 0x63,
+ 0x64,
+ 0x65,
+ 0x66,
+ 0x67,
+ 0x68,
+ 0x69,
+ 0x6a,
+ 0x6b,
+ 0x6c,
+ 0x6d,
+ 0x6e,
+ 0x6f,
+ 0x70,
+ 0x71,
+ 0x72,
+ 0xfc,
+ 0x73,
+ 0xfd,
+ 0x1ffb,
+ 0x7fff0,
+ 0x1ffc,
+ 0x3ffc,
+ 0x22,
+ 0x7ffd,
+ 0x3,
+ 0x23,
+ 0x4,
+ 0x24,
+ 0x5,
+ 0x25,
+ 0x26,
+ 0x27,
+ 0x6,
+ 0x74,
+ 0x75,
+ 0x28,
+ 0x29,
+ 0x2a,
+ 0x7,
+ 0x2b,
+ 0x76,
+ 0x2c,
+ 0x8,
+ 0x9,
+ 0x2d,
+ 0x77,
+ 0x78,
+ 0x79,
+ 0x7a,
+ 0x7b,
+ 0x7ffe,
+ 0x7fc,
+ 0x3ffd,
+ 0x1ffd,
+ 0xffffffc,
+ 0xfffe6,
+ 0x3fffd2,
+ 0xfffe7,
+ 0xfffe8,
+ 0x3fffd3,
+ 0x3fffd4,
+ 0x3fffd5,
+ 0x7fffd9,
+ 0x3fffd6,
+ 0x7fffda,
+ 0x7fffdb,
+ 0x7fffdc,
+ 0x7fffdd,
+ 0x7fffde,
+ 0xffffeb,
+ 0x7fffdf,
+ 0xffffec,
+ 0xffffed,
+ 0x3fffd7,
+ 0x7fffe0,
+ 0xffffee,
+ 0x7fffe1,
+ 0x7fffe2,
+ 0x7fffe3,
+ 0x7fffe4,
+ 0x1fffdc,
+ 0x3fffd8,
+ 0x7fffe5,
+ 0x3fffd9,
+ 0x7fffe6,
+ 0x7fffe7,
+ 0xffffef,
+ 0x3fffda,
+ 0x1fffdd,
+ 0xfffe9,
+ 0x3fffdb,
+ 0x3fffdc,
+ 0x7fffe8,
+ 0x7fffe9,
+ 0x1fffde,
+ 0x7fffea,
+ 0x3fffdd,
+ 0x3fffde,
+ 0xfffff0,
+ 0x1fffdf,
+ 0x3fffdf,
+ 0x7fffeb,
+ 0x7fffec,
+ 0x1fffe0,
+ 0x1fffe1,
+ 0x3fffe0,
+ 0x1fffe2,
+ 0x7fffed,
+ 0x3fffe1,
+ 0x7fffee,
+ 0x7fffef,
+ 0xfffea,
+ 0x3fffe2,
+ 0x3fffe3,
+ 0x3fffe4,
+ 0x7ffff0,
+ 0x3fffe5,
+ 0x3fffe6,
+ 0x7ffff1,
+ 0x3ffffe0,
+ 0x3ffffe1,
+ 0xfffeb,
+ 0x7fff1,
+ 0x3fffe7,
+ 0x7ffff2,
+ 0x3fffe8,
+ 0x1ffffec,
+ 0x3ffffe2,
+ 0x3ffffe3,
+ 0x3ffffe4,
+ 0x7ffffde,
+ 0x7ffffdf,
+ 0x3ffffe5,
+ 0xfffff1,
+ 0x1ffffed,
+ 0x7fff2,
+ 0x1fffe3,
+ 0x3ffffe6,
+ 0x7ffffe0,
+ 0x7ffffe1,
+ 0x3ffffe7,
+ 0x7ffffe2,
+ 0xfffff2,
+ 0x1fffe4,
+ 0x1fffe5,
+ 0x3ffffe8,
+ 0x3ffffe9,
+ 0xffffffd,
+ 0x7ffffe3,
+ 0x7ffffe4,
+ 0x7ffffe5,
+ 0xfffec,
+ 0xfffff3,
+ 0xfffed,
+ 0x1fffe6,
+ 0x3fffe9,
+ 0x1fffe7,
+ 0x1fffe8,
+ 0x7ffff3,
+ 0x3fffea,
+ 0x3fffeb,
+ 0x1ffffee,
+ 0x1ffffef,
+ 0xfffff4,
+ 0xfffff5,
+ 0x3ffffea,
+ 0x7ffff4,
+ 0x3ffffeb,
+ 0x7ffffe6,
+ 0x3ffffec,
+ 0x3ffffed,
+ 0x7ffffe7,
+ 0x7ffffe8,
+ 0x7ffffe9,
+ 0x7ffffea,
+ 0x7ffffeb,
+ 0xffffffe,
+ 0x7ffffec,
+ 0x7ffffed,
+ 0x7ffffee,
+ 0x7ffffef,
+ 0x7fffff0,
+ 0x3ffffee,
+}
+
+var huffmanCodeLen = [256]uint8{
+ 13, 23, 28, 28, 28, 28, 28, 28, 28, 24, 30, 28, 28, 30, 28, 28,
+ 28, 28, 28, 28, 28, 28, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 6, 10, 10, 12, 13, 6, 8, 11, 10, 10, 8, 11, 8, 6, 6, 6,
+ 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 15, 6, 12, 10,
+ 13, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 13, 19, 13, 14, 6,
+ 15, 5, 6, 5, 6, 5, 6, 6, 6, 5, 7, 7, 6, 6, 6, 5,
+ 6, 7, 6, 5, 5, 6, 7, 7, 7, 7, 7, 15, 11, 14, 13, 28,
+ 20, 22, 20, 20, 22, 22, 22, 23, 22, 23, 23, 23, 23, 23, 24, 23,
+ 24, 24, 22, 23, 24, 23, 23, 23, 23, 21, 22, 23, 22, 23, 23, 24,
+ 22, 21, 20, 22, 22, 23, 23, 21, 23, 22, 22, 24, 21, 22, 23, 23,
+ 21, 21, 22, 21, 23, 22, 23, 23, 20, 22, 22, 22, 23, 22, 22, 23,
+ 26, 26, 20, 19, 22, 23, 22, 25, 26, 26, 26, 27, 27, 26, 24, 25,
+ 19, 21, 26, 27, 27, 26, 27, 24, 21, 21, 26, 26, 28, 27, 27, 27,
+ 20, 24, 20, 21, 22, 21, 21, 23, 22, 22, 25, 25, 24, 24, 26, 23,
+ 26, 27, 26, 26, 27, 27, 27, 27, 27, 28, 27, 27, 27, 27, 27, 26,
+}
diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go
new file mode 100644
index 00000000..03ad05cc
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/http2.go
@@ -0,0 +1,253 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package http2 implements the HTTP/2 protocol.
+//
+// This is a work in progress. This package is low-level and intended
+// to be used directly by very few people. Most users will use it
+// indirectly through integration with the net/http package. See
+// ConfigureServer. That ConfigureServer call will likely be automatic
+// or available via an empty import in the future.
+//
+// See http://http2.github.io/
+package http2
+
+import (
+ "bufio"
+ "fmt"
+ "io"
+ "net/http"
+ "strconv"
+ "sync"
+)
+
+var VerboseLogs = false
+
+const (
+ // ClientPreface is the string that must be sent by new
+ // connections from clients.
+ ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
+
+ // SETTINGS_MAX_FRAME_SIZE default
+ // http://http2.github.io/http2-spec/#rfc.section.6.5.2
+ initialMaxFrameSize = 16384
+
+ // NextProtoTLS is the NPN/ALPN protocol negotiated during
+ // HTTP/2's TLS setup.
+ NextProtoTLS = "h2"
+
+ // http://http2.github.io/http2-spec/#SettingValues
+ initialHeaderTableSize = 4096
+
+ initialWindowSize = 65535 // 6.9.2 Initial Flow Control Window Size
+
+ defaultMaxReadFrameSize = 1 << 20
+)
+
+var (
+ clientPreface = []byte(ClientPreface)
+)
+
+type streamState int
+
+const (
+ stateIdle streamState = iota
+ stateOpen
+ stateHalfClosedLocal
+ stateHalfClosedRemote
+ stateResvLocal
+ stateResvRemote
+ stateClosed
+)
+
+var stateName = [...]string{
+ stateIdle: "Idle",
+ stateOpen: "Open",
+ stateHalfClosedLocal: "HalfClosedLocal",
+ stateHalfClosedRemote: "HalfClosedRemote",
+ stateResvLocal: "ResvLocal",
+ stateResvRemote: "ResvRemote",
+ stateClosed: "Closed",
+}
+
+func (st streamState) String() string {
+ return stateName[st]
+}
+
+// Setting is a setting parameter: which setting it is, and its value.
+type Setting struct {
+ // ID is which setting is being set.
+ // See http://http2.github.io/http2-spec/#SettingValues
+ ID SettingID
+
+ // Val is the value.
+ Val uint32
+}
+
+func (s Setting) String() string {
+ return fmt.Sprintf("[%v = %d]", s.ID, s.Val)
+}
+
+// Valid reports whether the setting is valid.
+func (s Setting) Valid() error {
+ // Limits and error codes from 6.5.2 Defined SETTINGS Parameters
+ switch s.ID {
+ case SettingEnablePush:
+ if s.Val != 1 && s.Val != 0 {
+ return ConnectionError(ErrCodeProtocol)
+ }
+ case SettingInitialWindowSize:
+ if s.Val > 1<<31-1 {
+ return ConnectionError(ErrCodeFlowControl)
+ }
+ case SettingMaxFrameSize:
+ if s.Val < 16384 || s.Val > 1<<24-1 {
+ return ConnectionError(ErrCodeProtocol)
+ }
+ }
+ return nil
+}
+
+// A SettingID is an HTTP/2 setting as defined in
+// http://http2.github.io/http2-spec/#iana-settings
+type SettingID uint16
+
+const (
+ SettingHeaderTableSize SettingID = 0x1
+ SettingEnablePush SettingID = 0x2
+ SettingMaxConcurrentStreams SettingID = 0x3
+ SettingInitialWindowSize SettingID = 0x4
+ SettingMaxFrameSize SettingID = 0x5
+ SettingMaxHeaderListSize SettingID = 0x6
+)
+
+var settingName = map[SettingID]string{
+ SettingHeaderTableSize: "HEADER_TABLE_SIZE",
+ SettingEnablePush: "ENABLE_PUSH",
+ SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS",
+ SettingInitialWindowSize: "INITIAL_WINDOW_SIZE",
+ SettingMaxFrameSize: "MAX_FRAME_SIZE",
+ SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE",
+}
+
+func (s SettingID) String() string {
+ if v, ok := settingName[s]; ok {
+ return v
+ }
+ return fmt.Sprintf("UNKNOWN_SETTING_%d", uint16(s))
+}
+
+func validHeader(v string) bool {
+ if len(v) == 0 {
+ return false
+ }
+ for _, r := range v {
+ // "Just as in HTTP/1.x, header field names are
+ // strings of ASCII characters that are compared in a
+ // case-insensitive fashion. However, header field
+ // names MUST be converted to lowercase prior to their
+ // encoding in HTTP/2. "
+ if r >= 127 || ('A' <= r && r <= 'Z') {
+ return false
+ }
+ }
+ return true
+}
+
+var httpCodeStringCommon = map[int]string{} // n -> strconv.Itoa(n)
+
+func init() {
+ for i := 100; i <= 999; i++ {
+ if v := http.StatusText(i); v != "" {
+ httpCodeStringCommon[i] = strconv.Itoa(i)
+ }
+ }
+}
+
+func httpCodeString(code int) string {
+ if s, ok := httpCodeStringCommon[code]; ok {
+ return s
+ }
+ return strconv.Itoa(code)
+}
+
+// from pkg io
+type stringWriter interface {
+ WriteString(s string) (n int, err error)
+}
+
+// A gate lets two goroutines coordinate their activities.
+type gate chan struct{}
+
+func (g gate) Done() { g <- struct{}{} }
+func (g gate) Wait() { <-g }
+
+// A closeWaiter is like a sync.WaitGroup but only goes 1 to 0 (open to closed).
+type closeWaiter chan struct{}
+
+// Init makes a closeWaiter usable.
+// It exists because so a closeWaiter value can be placed inside a
+// larger struct and have the Mutex and Cond's memory in the same
+// allocation.
+func (cw *closeWaiter) Init() {
+ *cw = make(chan struct{})
+}
+
+// Close marks the closeWaiter as closed and unblocks any waiters.
+func (cw closeWaiter) Close() {
+ close(cw)
+}
+
+// Wait waits for the closeWaiter to become closed.
+func (cw closeWaiter) Wait() {
+ <-cw
+}
+
+// bufferedWriter is a buffered writer that writes to w.
+// Its buffered writer is lazily allocated as needed, to minimize
+// idle memory usage with many connections.
+type bufferedWriter struct {
+ w io.Writer // immutable
+ bw *bufio.Writer // non-nil when data is buffered
+}
+
+func newBufferedWriter(w io.Writer) *bufferedWriter {
+ return &bufferedWriter{w: w}
+}
+
+var bufWriterPool = sync.Pool{
+ New: func() interface{} {
+ // TODO: pick something better? this is a bit under
+ // (3 x typical 1500 byte MTU) at least.
+ return bufio.NewWriterSize(nil, 4<<10)
+ },
+}
+
+func (w *bufferedWriter) Write(p []byte) (n int, err error) {
+ if w.bw == nil {
+ bw := bufWriterPool.Get().(*bufio.Writer)
+ bw.Reset(w.w)
+ w.bw = bw
+ }
+ return w.bw.Write(p)
+}
+
+func (w *bufferedWriter) Flush() error {
+ bw := w.bw
+ if bw == nil {
+ return nil
+ }
+ err := bw.Flush()
+ bw.Reset(nil)
+ bufWriterPool.Put(bw)
+ w.bw = nil
+ return err
+}
+
+func mustUint31(v int32) uint32 {
+ if v < 0 || v > 2147483647 {
+ panic("out of range")
+ }
+ return uint32(v)
+}
diff --git a/vendor/golang.org/x/net/http2/http2_test.go b/vendor/golang.org/x/net/http2/http2_test.go
new file mode 100644
index 00000000..938341bc
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/http2_test.go
@@ -0,0 +1,168 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "errors"
+ "flag"
+ "fmt"
+ "net/http"
+ "os/exec"
+ "strconv"
+ "strings"
+ "testing"
+
+ "golang.org/x/net/http2/hpack"
+)
+
+var knownFailing = flag.Bool("known_failing", false, "Run known-failing tests.")
+
+func condSkipFailingTest(t *testing.T) {
+ if !*knownFailing {
+ t.Skip("Skipping known-failing test without --known_failing")
+ }
+}
+
+func init() {
+ DebugGoroutines = true
+ flag.BoolVar(&VerboseLogs, "verboseh2", false, "Verbose HTTP/2 debug logging")
+}
+
+func TestSettingString(t *testing.T) {
+ tests := []struct {
+ s Setting
+ want string
+ }{
+ {Setting{SettingMaxFrameSize, 123}, "[MAX_FRAME_SIZE = 123]"},
+ {Setting{1<<16 - 1, 123}, "[UNKNOWN_SETTING_65535 = 123]"},
+ }
+ for i, tt := range tests {
+ got := fmt.Sprint(tt.s)
+ if got != tt.want {
+ t.Errorf("%d. for %#v, string = %q; want %q", i, tt.s, got, tt.want)
+ }
+ }
+}
+
+type twriter struct {
+ t testing.TB
+ st *serverTester // optional
+}
+
+func (w twriter) Write(p []byte) (n int, err error) {
+ if w.st != nil {
+ ps := string(p)
+ for _, phrase := range w.st.logFilter {
+ if strings.Contains(ps, phrase) {
+ return len(p), nil // no logging
+ }
+ }
+ }
+ w.t.Logf("%s", p)
+ return len(p), nil
+}
+
+// like encodeHeader, but don't add implicit psuedo headers.
+func encodeHeaderNoImplicit(t *testing.T, headers ...string) []byte {
+ var buf bytes.Buffer
+ enc := hpack.NewEncoder(&buf)
+ for len(headers) > 0 {
+ k, v := headers[0], headers[1]
+ headers = headers[2:]
+ if err := enc.WriteField(hpack.HeaderField{Name: k, Value: v}); err != nil {
+ t.Fatalf("HPACK encoding error for %q/%q: %v", k, v, err)
+ }
+ }
+ return buf.Bytes()
+}
+
+// Verify that curl has http2.
+func requireCurl(t *testing.T) {
+ out, err := dockerLogs(curl(t, "--version"))
+ if err != nil {
+ t.Skipf("failed to determine curl features; skipping test")
+ }
+ if !strings.Contains(string(out), "HTTP2") {
+ t.Skip("curl doesn't support HTTP2; skipping test")
+ }
+}
+
+func curl(t *testing.T, args ...string) (container string) {
+ out, err := exec.Command("docker", append([]string{"run", "-d", "--net=host", "gohttp2/curl"}, args...)...).Output()
+ if err != nil {
+ t.Skipf("Failed to run curl in docker: %v, %s", err, out)
+ }
+ return strings.TrimSpace(string(out))
+}
+
+// Verify that h2load exists.
+func requireH2load(t *testing.T) {
+ out, err := dockerLogs(h2load(t, "--version"))
+ if err != nil {
+ t.Skipf("failed to probe h2load; skipping test: %s", out)
+ }
+ if !strings.Contains(string(out), "h2load nghttp2/") {
+ t.Skipf("h2load not present; skipping test. (Output=%q)", out)
+ }
+}
+
+func h2load(t *testing.T, args ...string) (container string) {
+ out, err := exec.Command("docker", append([]string{"run", "-d", "--net=host", "--entrypoint=/usr/local/bin/h2load", "gohttp2/curl"}, args...)...).Output()
+ if err != nil {
+ t.Skipf("Failed to run h2load in docker: %v, %s", err, out)
+ }
+ return strings.TrimSpace(string(out))
+}
+
+type puppetCommand struct {
+ fn func(w http.ResponseWriter, r *http.Request)
+ done chan<- bool
+}
+
+type handlerPuppet struct {
+ ch chan puppetCommand
+}
+
+func newHandlerPuppet() *handlerPuppet {
+ return &handlerPuppet{
+ ch: make(chan puppetCommand),
+ }
+}
+
+func (p *handlerPuppet) act(w http.ResponseWriter, r *http.Request) {
+ for cmd := range p.ch {
+ cmd.fn(w, r)
+ cmd.done <- true
+ }
+}
+
+func (p *handlerPuppet) done() { close(p.ch) }
+func (p *handlerPuppet) do(fn func(http.ResponseWriter, *http.Request)) {
+ done := make(chan bool)
+ p.ch <- puppetCommand{fn, done}
+ <-done
+}
+func dockerLogs(container string) ([]byte, error) {
+ out, err := exec.Command("docker", "wait", container).CombinedOutput()
+ if err != nil {
+ return out, err
+ }
+ exitStatus, err := strconv.Atoi(strings.TrimSpace(string(out)))
+ if err != nil {
+ return out, errors.New("unexpected exit status from docker wait")
+ }
+ out, err = exec.Command("docker", "logs", container).CombinedOutput()
+ exec.Command("docker", "rm", container).Run()
+ if err == nil && exitStatus != 0 {
+ err = fmt.Errorf("exit status %d: %s", exitStatus, out)
+ }
+ return out, err
+}
+
+func kill(container string) {
+ exec.Command("docker", "kill", container).Run()
+ exec.Command("docker", "rm", container).Run()
+}
diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go
new file mode 100644
index 00000000..96a3eb8d
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/pipe.go
@@ -0,0 +1,90 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "errors"
+ "io"
+ "sync"
+)
+
+// pipe is a goroutine-safe io.Reader/io.Writer pair. It's like
+// io.Pipe except there are no PipeReader/PipeWriter halves, and the
+// underlying buffer is an interface. (io.Pipe is always unbuffered)
+type pipe struct {
+ mu sync.Mutex
+ c sync.Cond // c.L must point to
+ b pipeBuffer
+ err error // read error once empty. non-nil means closed.
+}
+
+type pipeBuffer interface {
+ Len() int
+ io.Writer
+ io.Reader
+}
+
+// Read waits until data is available and copies bytes
+// from the buffer into p.
+func (p *pipe) Read(d []byte) (n int, err error) {
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ if p.c.L == nil {
+ p.c.L = &p.mu
+ }
+ for {
+ if p.b.Len() > 0 {
+ return p.b.Read(d)
+ }
+ if p.err != nil {
+ return 0, p.err
+ }
+ p.c.Wait()
+ }
+}
+
+var errClosedPipeWrite = errors.New("write on closed buffer")
+
+// Write copies bytes from p into the buffer and wakes a reader.
+// It is an error to write more data than the buffer can hold.
+func (p *pipe) Write(d []byte) (n int, err error) {
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ if p.c.L == nil {
+ p.c.L = &p.mu
+ }
+ defer p.c.Signal()
+ if p.err != nil {
+ return 0, errClosedPipeWrite
+ }
+ return p.b.Write(d)
+}
+
+// CloseWithError causes Reads to wake up and return the
+// provided err after all data has been read.
+//
+// The error must be non-nil.
+func (p *pipe) CloseWithError(err error) {
+ if err == nil {
+ panic("CloseWithError must be non-nil")
+ }
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ if p.c.L == nil {
+ p.c.L = &p.mu
+ }
+ defer p.c.Signal()
+ if p.err == nil {
+ p.err = err
+ }
+}
+
+// Err returns the error (if any) first set with CloseWithError.
+// This is the error which will be returned after the reader is exhausted.
+func (p *pipe) Err() error {
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ return p.err
+}
diff --git a/vendor/golang.org/x/net/http2/pipe_test.go b/vendor/golang.org/x/net/http2/pipe_test.go
new file mode 100644
index 00000000..002ce05e
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/pipe_test.go
@@ -0,0 +1,24 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "errors"
+ "testing"
+)
+
+func TestPipeClose(t *testing.T) {
+ var p pipe
+ p.b = new(bytes.Buffer)
+ a := errors.New("a")
+ b := errors.New("b")
+ p.CloseWithError(a)
+ p.CloseWithError(b)
+ _, err := p.Read(make([]byte, 1))
+ if err != a {
+ t.Errorf("err = %v want %v", err, a)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/priority_test.go b/vendor/golang.org/x/net/http2/priority_test.go
new file mode 100644
index 00000000..a3fe2bb4
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/priority_test.go
@@ -0,0 +1,118 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "testing"
+)
+
+func TestPriority(t *testing.T) {
+ // A -> B
+ // move A's parent to B
+ streams := make(map[uint32]*stream)
+ a := &stream{
+ parent: nil,
+ weight: 16,
+ }
+ streams[1] = a
+ b := &stream{
+ parent: a,
+ weight: 16,
+ }
+ streams[2] = b
+ adjustStreamPriority(streams, 1, PriorityParam{
+ Weight: 20,
+ StreamDep: 2,
+ })
+ if a.parent != b {
+ t.Errorf("Expected A's parent to be B")
+ }
+ if a.weight != 20 {
+ t.Errorf("Expected A's weight to be 20; got %d", a.weight)
+ }
+ if b.parent != nil {
+ t.Errorf("Expected B to have no parent")
+ }
+ if b.weight != 16 {
+ t.Errorf("Expected B's weight to be 16; got %d", b.weight)
+ }
+}
+
+func TestPriorityExclusiveZero(t *testing.T) {
+ // A B and C are all children of the 0 stream.
+ // Exclusive reprioritization to any of the streams
+ // should bring the rest of the streams under the
+ // reprioritized stream
+ streams := make(map[uint32]*stream)
+ a := &stream{
+ parent: nil,
+ weight: 16,
+ }
+ streams[1] = a
+ b := &stream{
+ parent: nil,
+ weight: 16,
+ }
+ streams[2] = b
+ c := &stream{
+ parent: nil,
+ weight: 16,
+ }
+ streams[3] = c
+ adjustStreamPriority(streams, 3, PriorityParam{
+ Weight: 20,
+ StreamDep: 0,
+ Exclusive: true,
+ })
+ if a.parent != c {
+ t.Errorf("Expected A's parent to be C")
+ }
+ if a.weight != 16 {
+ t.Errorf("Expected A's weight to be 16; got %d", a.weight)
+ }
+ if b.parent != c {
+ t.Errorf("Expected B's parent to be C")
+ }
+ if b.weight != 16 {
+ t.Errorf("Expected B's weight to be 16; got %d", b.weight)
+ }
+ if c.parent != nil {
+ t.Errorf("Expected C to have no parent")
+ }
+ if c.weight != 20 {
+ t.Errorf("Expected C's weight to be 20; got %d", b.weight)
+ }
+}
+
+func TestPriorityOwnParent(t *testing.T) {
+ streams := make(map[uint32]*stream)
+ a := &stream{
+ parent: nil,
+ weight: 16,
+ }
+ streams[1] = a
+ b := &stream{
+ parent: a,
+ weight: 16,
+ }
+ streams[2] = b
+ adjustStreamPriority(streams, 1, PriorityParam{
+ Weight: 20,
+ StreamDep: 1,
+ })
+ if a.parent != nil {
+ t.Errorf("Expected A's parent to be nil")
+ }
+ if a.weight != 20 {
+ t.Errorf("Expected A's weight to be 20; got %d", a.weight)
+ }
+ if b.parent != a {
+ t.Errorf("Expected B's parent to be A")
+ }
+ if b.weight != 16 {
+ t.Errorf("Expected B's weight to be 16; got %d", b.weight)
+ }
+
+}
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
new file mode 100644
index 00000000..86069c25
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -0,0 +1,1894 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// TODO: replace all <-sc.doneServing with reads from the stream's cw
+// instead, and make sure that on close we close all open
+// streams. then remove doneServing?
+
+// TODO: finish GOAWAY support. Consider each incoming frame type and
+// whether it should be ignored during a shutdown race.
+
+// TODO: disconnect idle clients. GFE seems to do 4 minutes. make
+// configurable? or maximum number of idle clients and remove the
+// oldest?
+
+// TODO: turn off the serve goroutine when idle, so
+// an idle conn only has the readFrames goroutine active. (which could
+// also be optimized probably to pin less memory in crypto/tls). This
+// would involve tracking when the serve goroutine is active (atomic
+// int32 read/CAS probably?) and starting it up when frames arrive,
+// and shutting it down when all handlers exit. the occasional PING
+// packets could use time.AfterFunc to call sc.wakeStartServeLoop()
+// (which is a no-op if already running) and then queue the PING write
+// as normal. The serve loop would then exit in most cases (if no
+// Handlers running) and not be woken up again until the PING packet
+// returns.
+
+// TODO (maybe): add a mechanism for Handlers to going into
+// half-closed-local mode (rw.(io.Closer) test?) but not exit their
+// handler, and continue to be able to read from the
+// Request.Body. This would be a somewhat semantic change from HTTP/1
+// (or at least what we expose in net/http), so I'd probably want to
+// add it there too. For now, this package says that returning from
+// the Handler ServeHTTP function means you're both done reading and
+// done writing, without a way to stop just one or the other.
+
+package http2
+
+import (
+ "bufio"
+ "bytes"
+ "crypto/tls"
+ "errors"
+ "fmt"
+ "io"
+ "log"
+ "net"
+ "net/http"
+ "net/url"
+ "strconv"
+ "strings"
+ "sync"
+ "time"
+
+ "golang.org/x/net/http2/hpack"
+)
+
+const (
+ prefaceTimeout = 10 * time.Second
+ firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway
+ handlerChunkWriteSize = 4 << 10
+ defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to?
+)
+
+var (
+ errClientDisconnected = errors.New("client disconnected")
+ errClosedBody = errors.New("body closed by handler")
+ errHandlerComplete = errors.New("http2: request body closed due to handler exiting")
+ errStreamClosed = errors.New("http2: stream closed")
+)
+
+var responseWriterStatePool = sync.Pool{
+ New: func() interface{} {
+ rws := &responseWriterState{}
+ rws.bw = bufio.NewWriterSize(chunkWriter{rws}, handlerChunkWriteSize)
+ return rws
+ },
+}
+
+// Test hooks.
+var (
+ testHookOnConn func()
+ testHookGetServerConn func(*serverConn)
+ testHookOnPanicMu *sync.Mutex // nil except in tests
+ testHookOnPanic func(sc *serverConn, panicVal interface{}) (rePanic bool)
+)
+
+// Server is an HTTP/2 server.
+type Server struct {
+ // MaxHandlers limits the number of http.Handler ServeHTTP goroutines
+ // which may run at a time over all connections.
+ // Negative or zero no limit.
+ // TODO: implement
+ MaxHandlers int
+
+ // MaxConcurrentStreams optionally specifies the number of
+ // concurrent streams that each client may have open at a
+ // time. This is unrelated to the number of http.Handler goroutines
+ // which may be active globally, which is MaxHandlers.
+ // If zero, MaxConcurrentStreams defaults to at least 100, per
+ // the HTTP/2 spec's recommendations.
+ MaxConcurrentStreams uint32
+
+ // MaxReadFrameSize optionally specifies the largest frame
+ // this server is willing to read. A valid value is between
+ // 16k and 16M, inclusive. If zero or otherwise invalid, a
+ // default value is used.
+ MaxReadFrameSize uint32
+
+ // PermitProhibitedCipherSuites, if true, permits the use of
+ // cipher suites prohibited by the HTTP/2 spec.
+ PermitProhibitedCipherSuites bool
+}
+
+func (s *Server) maxReadFrameSize() uint32 {
+ if v := s.MaxReadFrameSize; v >= minMaxFrameSize && v <= maxFrameSize {
+ return v
+ }
+ return defaultMaxReadFrameSize
+}
+
+func (s *Server) maxConcurrentStreams() uint32 {
+ if v := s.MaxConcurrentStreams; v > 0 {
+ return v
+ }
+ return defaultMaxStreams
+}
+
+// ConfigureServer adds HTTP/2 support to a net/http Server.
+//
+// The configuration conf may be nil.
+//
+// ConfigureServer must be called before s begins serving.
+func ConfigureServer(s *http.Server, conf *Server) error {
+ if conf == nil {
+ conf = new(Server)
+ }
+
+ if s.TLSConfig == nil {
+ s.TLSConfig = new(tls.Config)
+ } else if s.TLSConfig.CipherSuites != nil {
+ // If they already provided a CipherSuite list, return
+ // an error if it has a bad order or is missing
+ // ECDHE_RSA_WITH_AES_128_GCM_SHA256.
+ const requiredCipher = tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ haveRequired := false
+ sawBad := false
+ for i, cs := range s.TLSConfig.CipherSuites {
+ if cs == requiredCipher {
+ haveRequired = true
+ }
+ if isBadCipher(cs) {
+ sawBad = true
+ } else if sawBad {
+ return fmt.Errorf("http2: TLSConfig.CipherSuites index %d contains an HTTP/2-approved cipher suite (%#04x), but it comes after unapproved cipher suites. With this configuration, clients that don't support previous, approved cipher suites may be given an unapproved one and reject the connection.", i, cs)
+ }
+ }
+ if !haveRequired {
+ return fmt.Errorf("http2: TLSConfig.CipherSuites is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256")
+ }
+ }
+
+ // Note: not setting MinVersion to tls.VersionTLS12,
+ // as we don't want to interfere with HTTP/1.1 traffic
+ // on the user's server. We enforce TLS 1.2 later once
+ // we accept a connection. Ideally this should be done
+ // during next-proto selection, but using TLS <1.2 with
+ // HTTP/2 is still the client's bug.
+
+ s.TLSConfig.PreferServerCipherSuites = true
+
+ haveNPN := false
+ for _, p := range s.TLSConfig.NextProtos {
+ if p == NextProtoTLS {
+ haveNPN = true
+ break
+ }
+ }
+ if !haveNPN {
+ s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, NextProtoTLS)
+ }
+ // h2-14 is temporary (as of 2015-03-05) while we wait for all browsers
+ // to switch to "h2".
+ s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, "h2-14")
+
+ if s.TLSNextProto == nil {
+ s.TLSNextProto = map[string]func(*http.Server, *tls.Conn, http.Handler){}
+ }
+ protoHandler := func(hs *http.Server, c *tls.Conn, h http.Handler) {
+ if testHookOnConn != nil {
+ testHookOnConn()
+ }
+ conf.handleConn(hs, c, h)
+ }
+ s.TLSNextProto[NextProtoTLS] = protoHandler
+ s.TLSNextProto["h2-14"] = protoHandler // temporary; see above.
+ return nil
+}
+
+func (srv *Server) handleConn(hs *http.Server, c net.Conn, h http.Handler) {
+ sc := &serverConn{
+ srv: srv,
+ hs: hs,
+ conn: c,
+ remoteAddrStr: c.RemoteAddr().String(),
+ bw: newBufferedWriter(c),
+ handler: h,
+ streams: make(map[uint32]*stream),
+ readFrameCh: make(chan readFrameResult),
+ wantWriteFrameCh: make(chan frameWriteMsg, 8),
+ wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync
+ bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
+ doneServing: make(chan struct{}),
+ advMaxStreams: srv.maxConcurrentStreams(),
+ writeSched: writeScheduler{
+ maxFrameSize: initialMaxFrameSize,
+ },
+ initialWindowSize: initialWindowSize,
+ headerTableSize: initialHeaderTableSize,
+ serveG: newGoroutineLock(),
+ pushEnabled: true,
+ }
+ sc.flow.add(initialWindowSize)
+ sc.inflow.add(initialWindowSize)
+ sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
+ sc.hpackDecoder = hpack.NewDecoder(initialHeaderTableSize, sc.onNewHeaderField)
+ sc.hpackDecoder.SetMaxStringLength(sc.maxHeaderStringLen())
+
+ fr := NewFramer(sc.bw, c)
+ fr.SetMaxReadFrameSize(srv.maxReadFrameSize())
+ sc.framer = fr
+
+ if tc, ok := c.(*tls.Conn); ok {
+ sc.tlsState = new(tls.ConnectionState)
+ *sc.tlsState = tc.ConnectionState()
+ // 9.2 Use of TLS Features
+ // An implementation of HTTP/2 over TLS MUST use TLS
+ // 1.2 or higher with the restrictions on feature set
+ // and cipher suite described in this section. Due to
+ // implementation limitations, it might not be
+ // possible to fail TLS negotiation. An endpoint MUST
+ // immediately terminate an HTTP/2 connection that
+ // does not meet the TLS requirements described in
+ // this section with a connection error (Section
+ // 5.4.1) of type INADEQUATE_SECURITY.
+ if sc.tlsState.Version < tls.VersionTLS12 {
+ sc.rejectConn(ErrCodeInadequateSecurity, "TLS version too low")
+ return
+ }
+
+ if sc.tlsState.ServerName == "" {
+ // Client must use SNI, but we don't enforce that anymore,
+ // since it was causing problems when connecting to bare IP
+ // addresses during development.
+ //
+ // TODO: optionally enforce? Or enforce at the time we receive
+ // a new request, and verify the the ServerName matches the :authority?
+ // But that precludes proxy situations, perhaps.
+ //
+ // So for now, do nothing here again.
+ }
+
+ if !srv.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) {
+ // "Endpoints MAY choose to generate a connection error
+ // (Section 5.4.1) of type INADEQUATE_SECURITY if one of
+ // the prohibited cipher suites are negotiated."
+ //
+ // We choose that. In my opinion, the spec is weak
+ // here. It also says both parties must support at least
+ // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 so there's no
+ // excuses here. If we really must, we could allow an
+ // "AllowInsecureWeakCiphers" option on the server later.
+ // Let's see how it plays out first.
+ sc.rejectConn(ErrCodeInadequateSecurity, fmt.Sprintf("Prohibited TLS 1.2 Cipher Suite: %x", sc.tlsState.CipherSuite))
+ return
+ }
+ }
+
+ if hook := testHookGetServerConn; hook != nil {
+ hook(sc)
+ }
+ sc.serve()
+}
+
+// isBadCipher reports whether the cipher is blacklisted by the HTTP/2 spec.
+func isBadCipher(cipher uint16) bool {
+ switch cipher {
+ case tls.TLS_RSA_WITH_RC4_128_SHA,
+ tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
+ tls.TLS_RSA_WITH_AES_128_CBC_SHA,
+ tls.TLS_RSA_WITH_AES_256_CBC_SHA,
+ tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
+ tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
+ tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
+ tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA,
+ tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
+ tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+ tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
+ // Reject cipher suites from Appendix A.
+ // "This list includes those cipher suites that do not
+ // offer an ephemeral key exchange and those that are
+ // based on the TLS null, stream or block cipher type"
+ return true
+ default:
+ return false
+ }
+}
+
+func (sc *serverConn) rejectConn(err ErrCode, debug string) {
+ sc.vlogf("REJECTING conn: %v, %s", err, debug)
+ // ignoring errors. hanging up anyway.
+ sc.framer.WriteGoAway(0, err, []byte(debug))
+ sc.bw.Flush()
+ sc.conn.Close()
+}
+
+type serverConn struct {
+ // Immutable:
+ srv *Server
+ hs *http.Server
+ conn net.Conn
+ bw *bufferedWriter // writing to conn
+ handler http.Handler
+ framer *Framer
+ hpackDecoder *hpack.Decoder
+ doneServing chan struct{} // closed when serverConn.serve ends
+ readFrameCh chan readFrameResult // written by serverConn.readFrames
+ wantWriteFrameCh chan frameWriteMsg // from handlers -> serve
+ wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes
+ bodyReadCh chan bodyReadMsg // from handlers -> serve
+ testHookCh chan func(int) // code to run on the serve loop
+ flow flow // conn-wide (not stream-specific) outbound flow control
+ inflow flow // conn-wide inbound flow control
+ tlsState *tls.ConnectionState // shared by all handlers, like net/http
+ remoteAddrStr string
+
+ // Everything following is owned by the serve loop; use serveG.check():
+ serveG goroutineLock // used to verify funcs are on serve()
+ pushEnabled bool
+ sawFirstSettings bool // got the initial SETTINGS frame after the preface
+ needToSendSettingsAck bool
+ unackedSettings int // how many SETTINGS have we sent without ACKs?
+ clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)
+ advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client
+ curOpenStreams uint32 // client's number of open streams
+ maxStreamID uint32 // max ever seen
+ streams map[uint32]*stream
+ initialWindowSize int32
+ headerTableSize uint32
+ peerMaxHeaderListSize uint32 // zero means unknown (default)
+ canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
+ req requestParam // non-zero while reading request headers
+ writingFrame bool // started write goroutine but haven't heard back on wroteFrameCh
+ needsFrameFlush bool // last frame write wasn't a flush
+ writeSched writeScheduler
+ inGoAway bool // we've started to or sent GOAWAY
+ needToSendGoAway bool // we need to schedule a GOAWAY frame write
+ goAwayCode ErrCode
+ shutdownTimerCh <-chan time.Time // nil until used
+ shutdownTimer *time.Timer // nil until used
+
+ // Owned by the writeFrameAsync goroutine:
+ headerWriteBuf bytes.Buffer
+ hpackEncoder *hpack.Encoder
+}
+
+func (sc *serverConn) maxHeaderStringLen() int {
+ v := sc.maxHeaderListSize()
+ if uint32(int(v)) == v {
+ return int(v)
+ }
+ // They had a crazy big number for MaxHeaderBytes anyway,
+ // so give them unlimited header lengths:
+ return 0
+}
+
+func (sc *serverConn) maxHeaderListSize() uint32 {
+ n := sc.hs.MaxHeaderBytes
+ if n <= 0 {
+ n = http.DefaultMaxHeaderBytes
+ }
+ // http2's count is in a slightly different unit and includes 32 bytes per pair.
+ // So, take the net/http.Server value and pad it up a bit, assuming 10 headers.
+ const perFieldOverhead = 32 // per http2 spec
+ const typicalHeaders = 10 // conservative
+ return uint32(n + typicalHeaders*perFieldOverhead)
+}
+
+// requestParam is the state of the next request, initialized over
+// potentially several frames HEADERS + zero or more CONTINUATION
+// frames.
+type requestParam struct {
+ // stream is non-nil if we're reading (HEADER or CONTINUATION)
+ // frames for a request (but not DATA).
+ stream *stream
+ header http.Header
+ method, path string
+ scheme, authority string
+ sawRegularHeader bool // saw a non-pseudo header already
+ invalidHeader bool // an invalid header was seen
+ headerListSize int64 // actually uint32, but easier math this way
+}
+
+// stream represents a stream. This is the minimal metadata needed by
+// the serve goroutine. Most of the actual stream state is owned by
+// the http.Handler's goroutine in the responseWriter. Because the
+// responseWriter's responseWriterState is recycled at the end of a
+// handler, this struct intentionally has no pointer to the
+// *responseWriter{,State} itself, as the Handler ending nils out the
+// responseWriter's state field.
+type stream struct {
+ // immutable:
+ id uint32
+ body *pipe // non-nil if expecting DATA frames
+ cw closeWaiter // closed wait stream transitions to closed state
+
+ // owned by serverConn's serve loop:
+ bodyBytes int64 // body bytes seen so far
+ declBodyBytes int64 // or -1 if undeclared
+ flow flow // limits writing from Handler to client
+ inflow flow // what the client is allowed to POST/etc to us
+ parent *stream // or nil
+ weight uint8
+ state streamState
+ sentReset bool // only true once detached from streams map
+ gotReset bool // only true once detacted from streams map
+}
+
+func (sc *serverConn) Framer() *Framer { return sc.framer }
+func (sc *serverConn) CloseConn() error { return sc.conn.Close() }
+func (sc *serverConn) Flush() error { return sc.bw.Flush() }
+func (sc *serverConn) HeaderEncoder() (*hpack.Encoder, *bytes.Buffer) {
+ return sc.hpackEncoder, &sc.headerWriteBuf
+}
+
+func (sc *serverConn) state(streamID uint32) (streamState, *stream) {
+ sc.serveG.check()
+ // http://http2.github.io/http2-spec/#rfc.section.5.1
+ if st, ok := sc.streams[streamID]; ok {
+ return st.state, st
+ }
+ // "The first use of a new stream identifier implicitly closes all
+ // streams in the "idle" state that might have been initiated by
+ // that peer with a lower-valued stream identifier. For example, if
+ // a client sends a HEADERS frame on stream 7 without ever sending a
+ // frame on stream 5, then stream 5 transitions to the "closed"
+ // state when the first frame for stream 7 is sent or received."
+ if streamID <= sc.maxStreamID {
+ return stateClosed, nil
+ }
+ return stateIdle, nil
+}
+
+// setConnState calls the net/http ConnState hook for this connection, if configured.
+// Note that the net/http package does StateNew and StateClosed for us.
+// There is currently no plan for StateHijacked or hijacking HTTP/2 connections.
+func (sc *serverConn) setConnState(state http.ConnState) {
+ if sc.hs.ConnState != nil {
+ sc.hs.ConnState(sc.conn, state)
+ }
+}
+
+func (sc *serverConn) vlogf(format string, args ...interface{}) {
+ if VerboseLogs {
+ sc.logf(format, args...)
+ }
+}
+
+func (sc *serverConn) logf(format string, args ...interface{}) {
+ if lg := sc.hs.ErrorLog; lg != nil {
+ lg.Printf(format, args...)
+ } else {
+ log.Printf(format, args...)
+ }
+}
+
+func (sc *serverConn) condlogf(err error, format string, args ...interface{}) {
+ if err == nil {
+ return
+ }
+ str := err.Error()
+ if err == io.EOF || strings.Contains(str, "use of closed network connection") {
+ // Boring, expected errors.
+ sc.vlogf(format, args...)
+ } else {
+ sc.logf(format, args...)
+ }
+}
+
+func (sc *serverConn) onNewHeaderField(f hpack.HeaderField) {
+ sc.serveG.check()
+ sc.vlogf("got header field %+v", f)
+ switch {
+ case !validHeader(f.Name):
+ sc.req.invalidHeader = true
+ case strings.HasPrefix(f.Name, ":"):
+ if sc.req.sawRegularHeader {
+ sc.logf("pseudo-header after regular header")
+ sc.req.invalidHeader = true
+ return
+ }
+ var dst *string
+ switch f.Name {
+ case ":method":
+ dst = &sc.req.method
+ case ":path":
+ dst = &sc.req.path
+ case ":scheme":
+ dst = &sc.req.scheme
+ case ":authority":
+ dst = &sc.req.authority
+ default:
+ // 8.1.2.1 Pseudo-Header Fields
+ // "Endpoints MUST treat a request or response
+ // that contains undefined or invalid
+ // pseudo-header fields as malformed (Section
+ // 8.1.2.6)."
+ sc.logf("invalid pseudo-header %q", f.Name)
+ sc.req.invalidHeader = true
+ return
+ }
+ if *dst != "" {
+ sc.logf("duplicate pseudo-header %q sent", f.Name)
+ sc.req.invalidHeader = true
+ return
+ }
+ *dst = f.Value
+ default:
+ sc.req.sawRegularHeader = true
+ sc.req.header.Add(sc.canonicalHeader(f.Name), f.Value)
+ const headerFieldOverhead = 32 // per spec
+ sc.req.headerListSize += int64(len(f.Name)) + int64(len(f.Value)) + headerFieldOverhead
+ if sc.req.headerListSize > int64(sc.maxHeaderListSize()) {
+ sc.hpackDecoder.SetEmitEnabled(false)
+ }
+ }
+}
+
+func (sc *serverConn) canonicalHeader(v string) string {
+ sc.serveG.check()
+ cv, ok := commonCanonHeader[v]
+ if ok {
+ return cv
+ }
+ cv, ok = sc.canonHeader[v]
+ if ok {
+ return cv
+ }
+ if sc.canonHeader == nil {
+ sc.canonHeader = make(map[string]string)
+ }
+ cv = http.CanonicalHeaderKey(v)
+ sc.canonHeader[v] = cv
+ return cv
+}
+
+type readFrameResult struct {
+ f Frame // valid until readMore is called
+ err error
+
+ // readMore should be called once the consumer no longer needs or
+ // retains f. After readMore, f is invalid and more frames can be
+ // read.
+ readMore func()
+}
+
+// readFrames is the loop that reads incoming frames.
+// It takes care to only read one frame at a time, blocking until the
+// consumer is done with the frame.
+// It's run on its own goroutine.
+func (sc *serverConn) readFrames() {
+ gate := make(gate)
+ for {
+ f, err := sc.framer.ReadFrame()
+ select {
+ case sc.readFrameCh <- readFrameResult{f, err, gate.Done}:
+ case <-sc.doneServing:
+ return
+ }
+ select {
+ case <-gate:
+ case <-sc.doneServing:
+ return
+ }
+ }
+}
+
+// frameWriteResult is the message passed from writeFrameAsync to the serve goroutine.
+type frameWriteResult struct {
+ wm frameWriteMsg // what was written (or attempted)
+ err error // result of the writeFrame call
+}
+
+// writeFrameAsync runs in its own goroutine and writes a single frame
+// and then reports when it's done.
+// At most one goroutine can be running writeFrameAsync at a time per
+// serverConn.
+func (sc *serverConn) writeFrameAsync(wm frameWriteMsg) {
+ err := wm.write.writeFrame(sc)
+ sc.wroteFrameCh <- frameWriteResult{wm, err}
+}
+
+func (sc *serverConn) closeAllStreamsOnConnClose() {
+ sc.serveG.check()
+ for _, st := range sc.streams {
+ sc.closeStream(st, errClientDisconnected)
+ }
+}
+
+func (sc *serverConn) stopShutdownTimer() {
+ sc.serveG.check()
+ if t := sc.shutdownTimer; t != nil {
+ t.Stop()
+ }
+}
+
+func (sc *serverConn) notePanic() {
+ if testHookOnPanicMu != nil {
+ testHookOnPanicMu.Lock()
+ defer testHookOnPanicMu.Unlock()
+ }
+ if testHookOnPanic != nil {
+ if e := recover(); e != nil {
+ if testHookOnPanic(sc, e) {
+ panic(e)
+ }
+ }
+ }
+}
+
+func (sc *serverConn) serve() {
+ sc.serveG.check()
+ defer sc.notePanic()
+ defer sc.conn.Close()
+ defer sc.closeAllStreamsOnConnClose()
+ defer sc.stopShutdownTimer()
+ defer close(sc.doneServing) // unblocks handlers trying to send
+
+ sc.vlogf("HTTP/2 connection from %v on %p", sc.conn.RemoteAddr(), sc.hs)
+
+ sc.writeFrame(frameWriteMsg{
+ write: writeSettings{
+ {SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
+ {SettingMaxConcurrentStreams, sc.advMaxStreams},
+ {SettingMaxHeaderListSize, sc.maxHeaderListSize()},
+
+ // TODO: more actual settings, notably
+ // SettingInitialWindowSize, but then we also
+ // want to bump up the conn window size the
+ // same amount here right after the settings
+ },
+ })
+ sc.unackedSettings++
+
+ if err := sc.readPreface(); err != nil {
+ sc.condlogf(err, "error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
+ return
+ }
+ // Now that we've got the preface, get us out of the
+ // "StateNew" state. We can't go directly to idle, though.
+ // Active means we read some data and anticipate a request. We'll
+ // do another Active when we get a HEADERS frame.
+ sc.setConnState(http.StateActive)
+ sc.setConnState(http.StateIdle)
+
+ go sc.readFrames() // closed by defer sc.conn.Close above
+
+ settingsTimer := time.NewTimer(firstSettingsTimeout)
+ loopNum := 0
+ for {
+ loopNum++
+ select {
+ case wm := <-sc.wantWriteFrameCh:
+ sc.writeFrame(wm)
+ case res := <-sc.wroteFrameCh:
+ sc.wroteFrame(res)
+ case res := <-sc.readFrameCh:
+ if !sc.processFrameFromReader(res) {
+ return
+ }
+ res.readMore()
+ if settingsTimer.C != nil {
+ settingsTimer.Stop()
+ settingsTimer.C = nil
+ }
+ case m := <-sc.bodyReadCh:
+ sc.noteBodyRead(m.st, m.n)
+ case <-settingsTimer.C:
+ sc.logf("timeout waiting for SETTINGS frames from %v", sc.conn.RemoteAddr())
+ return
+ case <-sc.shutdownTimerCh:
+ sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr())
+ return
+ case fn := <-sc.testHookCh:
+ fn(loopNum)
+ }
+ }
+}
+
+// readPreface reads the ClientPreface greeting from the peer
+// or returns an error on timeout or an invalid greeting.
+func (sc *serverConn) readPreface() error {
+ errc := make(chan error, 1)
+ go func() {
+ // Read the client preface
+ buf := make([]byte, len(ClientPreface))
+ if _, err := io.ReadFull(sc.conn, buf); err != nil {
+ errc <- err
+ } else if !bytes.Equal(buf, clientPreface) {
+ errc <- fmt.Errorf("bogus greeting %q", buf)
+ } else {
+ errc <- nil
+ }
+ }()
+ timer := time.NewTimer(prefaceTimeout) // TODO: configurable on *Server?
+ defer timer.Stop()
+ select {
+ case <-timer.C:
+ return errors.New("timeout waiting for client preface")
+ case err := <-errc:
+ if err == nil {
+ sc.vlogf("client %v said hello", sc.conn.RemoteAddr())
+ }
+ return err
+ }
+}
+
+var errChanPool = sync.Pool{
+ New: func() interface{} { return make(chan error, 1) },
+}
+
+var writeDataPool = sync.Pool{
+ New: func() interface{} { return new(writeData) },
+}
+
+// writeDataFromHandler writes DATA response frames from a handler on
+// the given stream.
+func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStream bool) error {
+ ch := errChanPool.Get().(chan error)
+ writeArg := writeDataPool.Get().(*writeData)
+ *writeArg = writeData{stream.id, data, endStream}
+ err := sc.writeFrameFromHandler(frameWriteMsg{
+ write: writeArg,
+ stream: stream,
+ done: ch,
+ })
+ if err != nil {
+ return err
+ }
+ var frameWriteDone bool // the frame write is done (successfully or not)
+ select {
+ case err = <-ch:
+ frameWriteDone = true
+ case <-sc.doneServing:
+ return errClientDisconnected
+ case <-stream.cw:
+ // If both ch and stream.cw were ready (as might
+ // happen on the final Write after an http.Handler
+ // ends), prefer the write result. Otherwise this
+ // might just be us successfully closing the stream.
+ // The writeFrameAsync and serve goroutines guarantee
+ // that the ch send will happen before the stream.cw
+ // close.
+ select {
+ case err = <-ch:
+ frameWriteDone = true
+ default:
+ return errStreamClosed
+ }
+ }
+ errChanPool.Put(ch)
+ if frameWriteDone {
+ writeDataPool.Put(writeArg)
+ }
+ return err
+}
+
+// writeFrameFromHandler sends wm to sc.wantWriteFrameCh, but aborts
+// if the connection has gone away.
+//
+// This must not be run from the serve goroutine itself, else it might
+// deadlock writing to sc.wantWriteFrameCh (which is only mildly
+// buffered and is read by serve itself). If you're on the serve
+// goroutine, call writeFrame instead.
+func (sc *serverConn) writeFrameFromHandler(wm frameWriteMsg) error {
+ sc.serveG.checkNotOn() // NOT
+ select {
+ case sc.wantWriteFrameCh <- wm:
+ return nil
+ case <-sc.doneServing:
+ // Serve loop is gone.
+ // Client has closed their connection to the server.
+ return errClientDisconnected
+ }
+}
+
+// writeFrame schedules a frame to write and sends it if there's nothing
+// already being written.
+//
+// There is no pushback here (the serve goroutine never blocks). It's
+// the http.Handlers that block, waiting for their previous frames to
+// make it onto the wire
+//
+// If you're not on the serve goroutine, use writeFrameFromHandler instead.
+func (sc *serverConn) writeFrame(wm frameWriteMsg) {
+ sc.serveG.check()
+ sc.writeSched.add(wm)
+ sc.scheduleFrameWrite()
+}
+
+// startFrameWrite starts a goroutine to write wm (in a separate
+// goroutine since that might block on the network), and updates the
+// serve goroutine's state about the world, updated from info in wm.
+func (sc *serverConn) startFrameWrite(wm frameWriteMsg) {
+ sc.serveG.check()
+ if sc.writingFrame {
+ panic("internal error: can only be writing one frame at a time")
+ }
+
+ st := wm.stream
+ if st != nil {
+ switch st.state {
+ case stateHalfClosedLocal:
+ panic("internal error: attempt to send frame on half-closed-local stream")
+ case stateClosed:
+ if st.sentReset || st.gotReset {
+ // Skip this frame.
+ sc.scheduleFrameWrite()
+ return
+ }
+ panic(fmt.Sprintf("internal error: attempt to send a write %v on a closed stream", wm))
+ }
+ }
+
+ sc.writingFrame = true
+ sc.needsFrameFlush = true
+ go sc.writeFrameAsync(wm)
+}
+
+// wroteFrame is called on the serve goroutine with the result of
+// whatever happened on writeFrameAsync.
+func (sc *serverConn) wroteFrame(res frameWriteResult) {
+ sc.serveG.check()
+ if !sc.writingFrame {
+ panic("internal error: expected to be already writing a frame")
+ }
+ sc.writingFrame = false
+
+ wm := res.wm
+ st := wm.stream
+
+ closeStream := endsStream(wm.write)
+
+ // Reply (if requested) to the blocked ServeHTTP goroutine.
+ if ch := wm.done; ch != nil {
+ select {
+ case ch <- res.err:
+ default:
+ panic(fmt.Sprintf("unbuffered done channel passed in for type %T", wm.write))
+ }
+ }
+ wm.write = nil // prevent use (assume it's tainted after wm.done send)
+
+ if closeStream {
+ if st == nil {
+ panic("internal error: expecting non-nil stream")
+ }
+ switch st.state {
+ case stateOpen:
+ // Here we would go to stateHalfClosedLocal in
+ // theory, but since our handler is done and
+ // the net/http package provides no mechanism
+ // for finishing writing to a ResponseWriter
+ // while still reading data (see possible TODO
+ // at top of this file), we go into closed
+ // state here anyway, after telling the peer
+ // we're hanging up on them.
+ st.state = stateHalfClosedLocal // won't last long, but necessary for closeStream via resetStream
+ errCancel := StreamError{st.id, ErrCodeCancel}
+ sc.resetStream(errCancel)
+ case stateHalfClosedRemote:
+ sc.closeStream(st, errHandlerComplete)
+ }
+ }
+
+ sc.scheduleFrameWrite()
+}
+
+// scheduleFrameWrite tickles the frame writing scheduler.
+//
+// If a frame is already being written, nothing happens. This will be called again
+// when the frame is done being written.
+//
+// If a frame isn't being written we need to send one, the best frame
+// to send is selected, preferring first things that aren't
+// stream-specific (e.g. ACKing settings), and then finding the
+// highest priority stream.
+//
+// If a frame isn't being written and there's nothing else to send, we
+// flush the write buffer.
+func (sc *serverConn) scheduleFrameWrite() {
+ sc.serveG.check()
+ if sc.writingFrame {
+ return
+ }
+ if sc.needToSendGoAway {
+ sc.needToSendGoAway = false
+ sc.startFrameWrite(frameWriteMsg{
+ write: &writeGoAway{
+ maxStreamID: sc.maxStreamID,
+ code: sc.goAwayCode,
+ },
+ })
+ return
+ }
+ if sc.needToSendSettingsAck {
+ sc.needToSendSettingsAck = false
+ sc.startFrameWrite(frameWriteMsg{write: writeSettingsAck{}})
+ return
+ }
+ if !sc.inGoAway {
+ if wm, ok := sc.writeSched.take(); ok {
+ sc.startFrameWrite(wm)
+ return
+ }
+ }
+ if sc.needsFrameFlush {
+ sc.startFrameWrite(frameWriteMsg{write: flushFrameWriter{}})
+ sc.needsFrameFlush = false // after startFrameWrite, since it sets this true
+ return
+ }
+}
+
+func (sc *serverConn) goAway(code ErrCode) {
+ sc.serveG.check()
+ if sc.inGoAway {
+ return
+ }
+ if code != ErrCodeNo {
+ sc.shutDownIn(250 * time.Millisecond)
+ } else {
+ // TODO: configurable
+ sc.shutDownIn(1 * time.Second)
+ }
+ sc.inGoAway = true
+ sc.needToSendGoAway = true
+ sc.goAwayCode = code
+ sc.scheduleFrameWrite()
+}
+
+func (sc *serverConn) shutDownIn(d time.Duration) {
+ sc.serveG.check()
+ sc.shutdownTimer = time.NewTimer(d)
+ sc.shutdownTimerCh = sc.shutdownTimer.C
+}
+
+func (sc *serverConn) resetStream(se StreamError) {
+ sc.serveG.check()
+ sc.writeFrame(frameWriteMsg{write: se})
+ if st, ok := sc.streams[se.StreamID]; ok {
+ st.sentReset = true
+ sc.closeStream(st, se)
+ }
+}
+
+// curHeaderStreamID returns the stream ID of the header block we're
+// currently in the middle of reading. If this returns non-zero, the
+// next frame must be a CONTINUATION with this stream id.
+func (sc *serverConn) curHeaderStreamID() uint32 {
+ sc.serveG.check()
+ st := sc.req.stream
+ if st == nil {
+ return 0
+ }
+ return st.id
+}
+
+// processFrameFromReader processes the serve loop's read from readFrameCh from the
+// frame-reading goroutine.
+// processFrameFromReader returns whether the connection should be kept open.
+func (sc *serverConn) processFrameFromReader(res readFrameResult) bool {
+ sc.serveG.check()
+ err := res.err
+ if err != nil {
+ if err == ErrFrameTooLarge {
+ sc.goAway(ErrCodeFrameSize)
+ return true // goAway will close the loop
+ }
+ clientGone := err == io.EOF || strings.Contains(err.Error(), "use of closed network connection")
+ if clientGone {
+ // TODO: could we also get into this state if
+ // the peer does a half close
+ // (e.g. CloseWrite) because they're done
+ // sending frames but they're still wanting
+ // our open replies? Investigate.
+ // TODO: add CloseWrite to crypto/tls.Conn first
+ // so we have a way to test this? I suppose
+ // just for testing we could have a non-TLS mode.
+ return false
+ }
+ } else {
+ f := res.f
+ sc.vlogf("got %v: %#v", f.Header(), f)
+ err = sc.processFrame(f)
+ if err == nil {
+ return true
+ }
+ }
+
+ switch ev := err.(type) {
+ case StreamError:
+ sc.resetStream(ev)
+ return true
+ case goAwayFlowError:
+ sc.goAway(ErrCodeFlowControl)
+ return true
+ case ConnectionError:
+ sc.logf("%v: %v", sc.conn.RemoteAddr(), ev)
+ sc.goAway(ErrCode(ev))
+ return true // goAway will handle shutdown
+ default:
+ if res.err != nil {
+ sc.logf("disconnecting; error reading frame from client %s: %v", sc.conn.RemoteAddr(), err)
+ } else {
+ sc.logf("disconnection due to other error: %v", err)
+ }
+ return false
+ }
+}
+
+func (sc *serverConn) processFrame(f Frame) error {
+ sc.serveG.check()
+
+ // First frame received must be SETTINGS.
+ if !sc.sawFirstSettings {
+ if _, ok := f.(*SettingsFrame); !ok {
+ return ConnectionError(ErrCodeProtocol)
+ }
+ sc.sawFirstSettings = true
+ }
+
+ if s := sc.curHeaderStreamID(); s != 0 {
+ if cf, ok := f.(*ContinuationFrame); !ok {
+ return ConnectionError(ErrCodeProtocol)
+ } else if cf.Header().StreamID != s {
+ return ConnectionError(ErrCodeProtocol)
+ }
+ }
+
+ switch f := f.(type) {
+ case *SettingsFrame:
+ return sc.processSettings(f)
+ case *HeadersFrame:
+ return sc.processHeaders(f)
+ case *ContinuationFrame:
+ return sc.processContinuation(f)
+ case *WindowUpdateFrame:
+ return sc.processWindowUpdate(f)
+ case *PingFrame:
+ return sc.processPing(f)
+ case *DataFrame:
+ return sc.processData(f)
+ case *RSTStreamFrame:
+ return sc.processResetStream(f)
+ case *PriorityFrame:
+ return sc.processPriority(f)
+ case *PushPromiseFrame:
+ // A client cannot push. Thus, servers MUST treat the receipt of a PUSH_PROMISE
+ // frame as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
+ return ConnectionError(ErrCodeProtocol)
+ default:
+ sc.vlogf("Ignoring frame: %v", f.Header())
+ return nil
+ }
+}
+
+func (sc *serverConn) processPing(f *PingFrame) error {
+ sc.serveG.check()
+ if f.IsAck() {
+ // 6.7 PING: " An endpoint MUST NOT respond to PING frames
+ // containing this flag."
+ return nil
+ }
+ if f.StreamID != 0 {
+ // "PING frames are not associated with any individual
+ // stream. If a PING frame is received with a stream
+ // identifier field value other than 0x0, the recipient MUST
+ // respond with a connection error (Section 5.4.1) of type
+ // PROTOCOL_ERROR."
+ return ConnectionError(ErrCodeProtocol)
+ }
+ sc.writeFrame(frameWriteMsg{write: writePingAck{f}})
+ return nil
+}
+
+func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error {
+ sc.serveG.check()
+ switch {
+ case f.StreamID != 0: // stream-level flow control
+ st := sc.streams[f.StreamID]
+ if st == nil {
+ // "WINDOW_UPDATE can be sent by a peer that has sent a
+ // frame bearing the END_STREAM flag. This means that a
+ // receiver could receive a WINDOW_UPDATE frame on a "half
+ // closed (remote)" or "closed" stream. A receiver MUST
+ // NOT treat this as an error, see Section 5.1."
+ return nil
+ }
+ if !st.flow.add(int32(f.Increment)) {
+ return StreamError{f.StreamID, ErrCodeFlowControl}
+ }
+ default: // connection-level flow control
+ if !sc.flow.add(int32(f.Increment)) {
+ return goAwayFlowError{}
+ }
+ }
+ sc.scheduleFrameWrite()
+ return nil
+}
+
+func (sc *serverConn) processResetStream(f *RSTStreamFrame) error {
+ sc.serveG.check()
+
+ state, st := sc.state(f.StreamID)
+ if state == stateIdle {
+ // 6.4 "RST_STREAM frames MUST NOT be sent for a
+ // stream in the "idle" state. If a RST_STREAM frame
+ // identifying an idle stream is received, the
+ // recipient MUST treat this as a connection error
+ // (Section 5.4.1) of type PROTOCOL_ERROR.
+ return ConnectionError(ErrCodeProtocol)
+ }
+ if st != nil {
+ st.gotReset = true
+ sc.closeStream(st, StreamError{f.StreamID, f.ErrCode})
+ }
+ return nil
+}
+
+func (sc *serverConn) closeStream(st *stream, err error) {
+ sc.serveG.check()
+ if st.state == stateIdle || st.state == stateClosed {
+ panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state))
+ }
+ st.state = stateClosed
+ sc.curOpenStreams--
+ if sc.curOpenStreams == 0 {
+ sc.setConnState(http.StateIdle)
+ }
+ delete(sc.streams, st.id)
+ if p := st.body; p != nil {
+ p.CloseWithError(err)
+ }
+ st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc
+ sc.writeSched.forgetStream(st.id)
+}
+
+func (sc *serverConn) processSettings(f *SettingsFrame) error {
+ sc.serveG.check()
+ if f.IsAck() {
+ sc.unackedSettings--
+ if sc.unackedSettings < 0 {
+ // Why is the peer ACKing settings we never sent?
+ // The spec doesn't mention this case, but
+ // hang up on them anyway.
+ return ConnectionError(ErrCodeProtocol)
+ }
+ return nil
+ }
+ if err := f.ForeachSetting(sc.processSetting); err != nil {
+ return err
+ }
+ sc.needToSendSettingsAck = true
+ sc.scheduleFrameWrite()
+ return nil
+}
+
+func (sc *serverConn) processSetting(s Setting) error {
+ sc.serveG.check()
+ if err := s.Valid(); err != nil {
+ return err
+ }
+ sc.vlogf("processing setting %v", s)
+ switch s.ID {
+ case SettingHeaderTableSize:
+ sc.headerTableSize = s.Val
+ sc.hpackEncoder.SetMaxDynamicTableSize(s.Val)
+ case SettingEnablePush:
+ sc.pushEnabled = s.Val != 0
+ case SettingMaxConcurrentStreams:
+ sc.clientMaxStreams = s.Val
+ case SettingInitialWindowSize:
+ return sc.processSettingInitialWindowSize(s.Val)
+ case SettingMaxFrameSize:
+ sc.writeSched.maxFrameSize = s.Val
+ case SettingMaxHeaderListSize:
+ sc.peerMaxHeaderListSize = s.Val
+ default:
+ // Unknown setting: "An endpoint that receives a SETTINGS
+ // frame with any unknown or unsupported identifier MUST
+ // ignore that setting."
+ }
+ return nil
+}
+
+func (sc *serverConn) processSettingInitialWindowSize(val uint32) error {
+ sc.serveG.check()
+ // Note: val already validated to be within range by
+ // processSetting's Valid call.
+
+ // "A SETTINGS frame can alter the initial flow control window
+ // size for all current streams. When the value of
+ // SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver MUST
+ // adjust the size of all stream flow control windows that it
+ // maintains by the difference between the new value and the
+ // old value."
+ old := sc.initialWindowSize
+ sc.initialWindowSize = int32(val)
+ growth := sc.initialWindowSize - old // may be negative
+ for _, st := range sc.streams {
+ if !st.flow.add(growth) {
+ // 6.9.2 Initial Flow Control Window Size
+ // "An endpoint MUST treat a change to
+ // SETTINGS_INITIAL_WINDOW_SIZE that causes any flow
+ // control window to exceed the maximum size as a
+ // connection error (Section 5.4.1) of type
+ // FLOW_CONTROL_ERROR."
+ return ConnectionError(ErrCodeFlowControl)
+ }
+ }
+ return nil
+}
+
+func (sc *serverConn) processData(f *DataFrame) error {
+ sc.serveG.check()
+ // "If a DATA frame is received whose stream is not in "open"
+ // or "half closed (local)" state, the recipient MUST respond
+ // with a stream error (Section 5.4.2) of type STREAM_CLOSED."
+ id := f.Header().StreamID
+ st, ok := sc.streams[id]
+ if !ok || st.state != stateOpen {
+ // This includes sending a RST_STREAM if the stream is
+ // in stateHalfClosedLocal (which currently means that
+ // the http.Handler returned, so it's done reading &
+ // done writing). Try to stop the client from sending
+ // more DATA.
+ return StreamError{id, ErrCodeStreamClosed}
+ }
+ if st.body == nil {
+ panic("internal error: should have a body in this state")
+ }
+ data := f.Data()
+
+ // Sender sending more than they'd declared?
+ if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes {
+ st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
+ return StreamError{id, ErrCodeStreamClosed}
+ }
+ if len(data) > 0 {
+ // Check whether the client has flow control quota.
+ if int(st.inflow.available()) < len(data) {
+ return StreamError{id, ErrCodeFlowControl}
+ }
+ st.inflow.take(int32(len(data)))
+ wrote, err := st.body.Write(data)
+ if err != nil {
+ return StreamError{id, ErrCodeStreamClosed}
+ }
+ if wrote != len(data) {
+ panic("internal error: bad Writer")
+ }
+ st.bodyBytes += int64(len(data))
+ }
+ if f.StreamEnded() {
+ if st.declBodyBytes != -1 && st.declBodyBytes != st.bodyBytes {
+ st.body.CloseWithError(fmt.Errorf("request declared a Content-Length of %d but only wrote %d bytes",
+ st.declBodyBytes, st.bodyBytes))
+ } else {
+ st.body.CloseWithError(io.EOF)
+ }
+ st.state = stateHalfClosedRemote
+ }
+ return nil
+}
+
+func (sc *serverConn) processHeaders(f *HeadersFrame) error {
+ sc.serveG.check()
+ id := f.Header().StreamID
+ if sc.inGoAway {
+ // Ignore.
+ return nil
+ }
+ // http://http2.github.io/http2-spec/#rfc.section.5.1.1
+ if id%2 != 1 || id <= sc.maxStreamID || sc.req.stream != nil {
+ // Streams initiated by a client MUST use odd-numbered
+ // stream identifiers. [...] The identifier of a newly
+ // established stream MUST be numerically greater than all
+ // streams that the initiating endpoint has opened or
+ // reserved. [...] An endpoint that receives an unexpected
+ // stream identifier MUST respond with a connection error
+ // (Section 5.4.1) of type PROTOCOL_ERROR.
+ return ConnectionError(ErrCodeProtocol)
+ }
+ if id > sc.maxStreamID {
+ sc.maxStreamID = id
+ }
+ st := &stream{
+ id: id,
+ state: stateOpen,
+ }
+ if f.StreamEnded() {
+ st.state = stateHalfClosedRemote
+ }
+ st.cw.Init()
+
+ st.flow.conn = &sc.flow // link to conn-level counter
+ st.flow.add(sc.initialWindowSize)
+ st.inflow.conn = &sc.inflow // link to conn-level counter
+ st.inflow.add(initialWindowSize) // TODO: update this when we send a higher initial window size in the initial settings
+
+ sc.streams[id] = st
+ if f.HasPriority() {
+ adjustStreamPriority(sc.streams, st.id, f.Priority)
+ }
+ sc.curOpenStreams++
+ if sc.curOpenStreams == 1 {
+ sc.setConnState(http.StateActive)
+ }
+ sc.req = requestParam{
+ stream: st,
+ header: make(http.Header),
+ }
+ sc.hpackDecoder.SetEmitEnabled(true)
+ return sc.processHeaderBlockFragment(st, f.HeaderBlockFragment(), f.HeadersEnded())
+}
+
+func (sc *serverConn) processContinuation(f *ContinuationFrame) error {
+ sc.serveG.check()
+ st := sc.streams[f.Header().StreamID]
+ if st == nil || sc.curHeaderStreamID() != st.id {
+ return ConnectionError(ErrCodeProtocol)
+ }
+ return sc.processHeaderBlockFragment(st, f.HeaderBlockFragment(), f.HeadersEnded())
+}
+
+func (sc *serverConn) processHeaderBlockFragment(st *stream, frag []byte, end bool) error {
+ sc.serveG.check()
+ if _, err := sc.hpackDecoder.Write(frag); err != nil {
+ return ConnectionError(ErrCodeCompression)
+ }
+ if !end {
+ return nil
+ }
+ if err := sc.hpackDecoder.Close(); err != nil {
+ return ConnectionError(ErrCodeCompression)
+ }
+ defer sc.resetPendingRequest()
+ if sc.curOpenStreams > sc.advMaxStreams {
+ // "Endpoints MUST NOT exceed the limit set by their
+ // peer. An endpoint that receives a HEADERS frame
+ // that causes their advertised concurrent stream
+ // limit to be exceeded MUST treat this as a stream
+ // error (Section 5.4.2) of type PROTOCOL_ERROR or
+ // REFUSED_STREAM."
+ if sc.unackedSettings == 0 {
+ // They should know better.
+ return StreamError{st.id, ErrCodeProtocol}
+ }
+ // Assume it's a network race, where they just haven't
+ // received our last SETTINGS update. But actually
+ // this can't happen yet, because we don't yet provide
+ // a way for users to adjust server parameters at
+ // runtime.
+ return StreamError{st.id, ErrCodeRefusedStream}
+ }
+
+ rw, req, err := sc.newWriterAndRequest()
+ if err != nil {
+ return err
+ }
+ st.body = req.Body.(*requestBody).pipe // may be nil
+ st.declBodyBytes = req.ContentLength
+
+ handler := sc.handler.ServeHTTP
+ if !sc.hpackDecoder.EmitEnabled() {
+ // Their header list was too long. Send a 431 error.
+ handler = handleHeaderListTooLong
+ }
+
+ go sc.runHandler(rw, req, handler)
+ return nil
+}
+
+func (sc *serverConn) processPriority(f *PriorityFrame) error {
+ adjustStreamPriority(sc.streams, f.StreamID, f.PriorityParam)
+ return nil
+}
+
+func adjustStreamPriority(streams map[uint32]*stream, streamID uint32, priority PriorityParam) {
+ st, ok := streams[streamID]
+ if !ok {
+ // TODO: not quite correct (this streamID might
+ // already exist in the dep tree, but be closed), but
+ // close enough for now.
+ return
+ }
+ st.weight = priority.Weight
+ parent := streams[priority.StreamDep] // might be nil
+ if parent == st {
+ // if client tries to set this stream to be the parent of itself
+ // ignore and keep going
+ return
+ }
+
+ // section 5.3.3: If a stream is made dependent on one of its
+ // own dependencies, the formerly dependent stream is first
+ // moved to be dependent on the reprioritized stream's previous
+ // parent. The moved dependency retains its weight.
+ for piter := parent; piter != nil; piter = piter.parent {
+ if piter == st {
+ parent.parent = st.parent
+ break
+ }
+ }
+ st.parent = parent
+ if priority.Exclusive && (st.parent != nil || priority.StreamDep == 0) {
+ for _, openStream := range streams {
+ if openStream != st && openStream.parent == st.parent {
+ openStream.parent = st
+ }
+ }
+ }
+}
+
+// resetPendingRequest zeros out all state related to a HEADERS frame
+// and its zero or more CONTINUATION frames sent to start a new
+// request.
+func (sc *serverConn) resetPendingRequest() {
+ sc.serveG.check()
+ sc.req = requestParam{}
+}
+
+func (sc *serverConn) newWriterAndRequest() (*responseWriter, *http.Request, error) {
+ sc.serveG.check()
+ rp := &sc.req
+ if rp.invalidHeader || rp.method == "" || rp.path == "" ||
+ (rp.scheme != "https" && rp.scheme != "http") {
+ // See 8.1.2.6 Malformed Requests and Responses:
+ //
+ // Malformed requests or responses that are detected
+ // MUST be treated as a stream error (Section 5.4.2)
+ // of type PROTOCOL_ERROR."
+ //
+ // 8.1.2.3 Request Pseudo-Header Fields
+ // "All HTTP/2 requests MUST include exactly one valid
+ // value for the :method, :scheme, and :path
+ // pseudo-header fields"
+ return nil, nil, StreamError{rp.stream.id, ErrCodeProtocol}
+ }
+ var tlsState *tls.ConnectionState // nil if not scheme https
+ if rp.scheme == "https" {
+ tlsState = sc.tlsState
+ }
+ authority := rp.authority
+ if authority == "" {
+ authority = rp.header.Get("Host")
+ }
+ needsContinue := rp.header.Get("Expect") == "100-continue"
+ if needsContinue {
+ rp.header.Del("Expect")
+ }
+ // Merge Cookie headers into one "; "-delimited value.
+ if cookies := rp.header["Cookie"]; len(cookies) > 1 {
+ rp.header.Set("Cookie", strings.Join(cookies, "; "))
+ }
+ bodyOpen := rp.stream.state == stateOpen
+ body := &requestBody{
+ conn: sc,
+ stream: rp.stream,
+ needsContinue: needsContinue,
+ }
+ // TODO: handle asterisk '*' requests + test
+ url, err := url.ParseRequestURI(rp.path)
+ if err != nil {
+ // TODO: find the right error code?
+ return nil, nil, StreamError{rp.stream.id, ErrCodeProtocol}
+ }
+ req := &http.Request{
+ Method: rp.method,
+ URL: url,
+ RemoteAddr: sc.remoteAddrStr,
+ Header: rp.header,
+ RequestURI: rp.path,
+ Proto: "HTTP/2.0",
+ ProtoMajor: 2,
+ ProtoMinor: 0,
+ TLS: tlsState,
+ Host: authority,
+ Body: body,
+ }
+ if bodyOpen {
+ body.pipe = &pipe{
+ b: &fixedBuffer{buf: make([]byte, initialWindowSize)}, // TODO: share/remove XXX
+ }
+
+ if vv, ok := rp.header["Content-Length"]; ok {
+ req.ContentLength, _ = strconv.ParseInt(vv[0], 10, 64)
+ } else {
+ req.ContentLength = -1
+ }
+ }
+
+ rws := responseWriterStatePool.Get().(*responseWriterState)
+ bwSave := rws.bw
+ *rws = responseWriterState{} // zero all the fields
+ rws.conn = sc
+ rws.bw = bwSave
+ rws.bw.Reset(chunkWriter{rws})
+ rws.stream = rp.stream
+ rws.req = req
+ rws.body = body
+
+ rw := &responseWriter{rws: rws}
+ return rw, req, nil
+}
+
+// Run on its own goroutine.
+func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) {
+ defer rw.handlerDone()
+ // TODO: catch panics like net/http.Server
+ handler(rw, req)
+}
+
+func handleHeaderListTooLong(w http.ResponseWriter, r *http.Request) {
+ // 10.5.1 Limits on Header Block Size:
+ // .. "A server that receives a larger header block than it is
+ // willing to handle can send an HTTP 431 (Request Header Fields Too
+ // Large) status code"
+ const statusRequestHeaderFieldsTooLarge = 431 // only in Go 1.6+
+ w.WriteHeader(statusRequestHeaderFieldsTooLarge)
+ io.WriteString(w, "HTTP Error 431 Request Header Field(s) Too Large
")
+}
+
+// called from handler goroutines.
+// h may be nil.
+func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) error {
+ sc.serveG.checkNotOn() // NOT on
+ var errc chan error
+ if headerData.h != nil {
+ // If there's a header map (which we don't own), so we have to block on
+ // waiting for this frame to be written, so an http.Flush mid-handler
+ // writes out the correct value of keys, before a handler later potentially
+ // mutates it.
+ errc = errChanPool.Get().(chan error)
+ }
+ if err := sc.writeFrameFromHandler(frameWriteMsg{
+ write: headerData,
+ stream: st,
+ done: errc,
+ }); err != nil {
+ return err
+ }
+ if errc != nil {
+ select {
+ case err := <-errc:
+ errChanPool.Put(errc)
+ return err
+ case <-sc.doneServing:
+ return errClientDisconnected
+ case <-st.cw:
+ return errStreamClosed
+ }
+ }
+ return nil
+}
+
+// called from handler goroutines.
+func (sc *serverConn) write100ContinueHeaders(st *stream) {
+ sc.writeFrameFromHandler(frameWriteMsg{
+ write: write100ContinueHeadersFrame{st.id},
+ stream: st,
+ })
+}
+
+// A bodyReadMsg tells the server loop that the http.Handler read n
+// bytes of the DATA from the client on the given stream.
+type bodyReadMsg struct {
+ st *stream
+ n int
+}
+
+// called from handler goroutines.
+// Notes that the handler for the given stream ID read n bytes of its body
+// and schedules flow control tokens to be sent.
+func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int) {
+ sc.serveG.checkNotOn() // NOT on
+ select {
+ case sc.bodyReadCh <- bodyReadMsg{st, n}:
+ case <-sc.doneServing:
+ }
+}
+
+func (sc *serverConn) noteBodyRead(st *stream, n int) {
+ sc.serveG.check()
+ sc.sendWindowUpdate(nil, n) // conn-level
+ if st.state != stateHalfClosedRemote && st.state != stateClosed {
+ // Don't send this WINDOW_UPDATE if the stream is closed
+ // remotely.
+ sc.sendWindowUpdate(st, n)
+ }
+}
+
+// st may be nil for conn-level
+func (sc *serverConn) sendWindowUpdate(st *stream, n int) {
+ sc.serveG.check()
+ // "The legal range for the increment to the flow control
+ // window is 1 to 2^31-1 (2,147,483,647) octets."
+ // A Go Read call on 64-bit machines could in theory read
+ // a larger Read than this. Very unlikely, but we handle it here
+ // rather than elsewhere for now.
+ const maxUint31 = 1<<31 - 1
+ for n >= maxUint31 {
+ sc.sendWindowUpdate32(st, maxUint31)
+ n -= maxUint31
+ }
+ sc.sendWindowUpdate32(st, int32(n))
+}
+
+// st may be nil for conn-level
+func (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {
+ sc.serveG.check()
+ if n == 0 {
+ return
+ }
+ if n < 0 {
+ panic("negative update")
+ }
+ var streamID uint32
+ if st != nil {
+ streamID = st.id
+ }
+ sc.writeFrame(frameWriteMsg{
+ write: writeWindowUpdate{streamID: streamID, n: uint32(n)},
+ stream: st,
+ })
+ var ok bool
+ if st == nil {
+ ok = sc.inflow.add(n)
+ } else {
+ ok = st.inflow.add(n)
+ }
+ if !ok {
+ panic("internal error; sent too many window updates without decrements?")
+ }
+}
+
+type requestBody struct {
+ stream *stream
+ conn *serverConn
+ closed bool
+ pipe *pipe // non-nil if we have a HTTP entity message body
+ needsContinue bool // need to send a 100-continue
+}
+
+func (b *requestBody) Close() error {
+ if b.pipe != nil {
+ b.pipe.CloseWithError(errClosedBody)
+ }
+ b.closed = true
+ return nil
+}
+
+func (b *requestBody) Read(p []byte) (n int, err error) {
+ if b.needsContinue {
+ b.needsContinue = false
+ b.conn.write100ContinueHeaders(b.stream)
+ }
+ if b.pipe == nil {
+ return 0, io.EOF
+ }
+ n, err = b.pipe.Read(p)
+ if n > 0 {
+ b.conn.noteBodyReadFromHandler(b.stream, n)
+ }
+ return
+}
+
+// responseWriter is the http.ResponseWriter implementation. It's
+// intentionally small (1 pointer wide) to minimize garbage. The
+// responseWriterState pointer inside is zeroed at the end of a
+// request (in handlerDone) and calls on the responseWriter thereafter
+// simply crash (caller's mistake), but the much larger responseWriterState
+// and buffers are reused between multiple requests.
+type responseWriter struct {
+ rws *responseWriterState
+}
+
+// Optional http.ResponseWriter interfaces implemented.
+var (
+ _ http.CloseNotifier = (*responseWriter)(nil)
+ _ http.Flusher = (*responseWriter)(nil)
+ _ stringWriter = (*responseWriter)(nil)
+)
+
+type responseWriterState struct {
+ // immutable within a request:
+ stream *stream
+ req *http.Request
+ body *requestBody // to close at end of request, if DATA frames didn't
+ conn *serverConn
+
+ // TODO: adjust buffer writing sizes based on server config, frame size updates from peer, etc
+ bw *bufio.Writer // writing to a chunkWriter{this *responseWriterState}
+
+ // mutated by http.Handler goroutine:
+ handlerHeader http.Header // nil until called
+ snapHeader http.Header // snapshot of handlerHeader at WriteHeader time
+ status int // status code passed to WriteHeader
+ wroteHeader bool // WriteHeader called (explicitly or implicitly). Not necessarily sent to user yet.
+ sentHeader bool // have we sent the header frame?
+ handlerDone bool // handler has finished
+
+ closeNotifierMu sync.Mutex // guards closeNotifierCh
+ closeNotifierCh chan bool // nil until first used
+}
+
+type chunkWriter struct{ rws *responseWriterState }
+
+func (cw chunkWriter) Write(p []byte) (n int, err error) { return cw.rws.writeChunk(p) }
+
+// writeChunk writes chunks from the bufio.Writer. But because
+// bufio.Writer may bypass its chunking, sometimes p may be
+// arbitrarily large.
+//
+// writeChunk is also responsible (on the first chunk) for sending the
+// HEADER response.
+func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
+ if !rws.wroteHeader {
+ rws.writeHeader(200)
+ }
+ if !rws.sentHeader {
+ rws.sentHeader = true
+ var ctype, clen string // implicit ones, if we can calculate it
+ if rws.handlerDone && rws.snapHeader.Get("Content-Length") == "" {
+ clen = strconv.Itoa(len(p))
+ }
+ if rws.snapHeader.Get("Content-Type") == "" {
+ ctype = http.DetectContentType(p)
+ }
+ endStream := rws.handlerDone && len(p) == 0
+ err = rws.conn.writeHeaders(rws.stream, &writeResHeaders{
+ streamID: rws.stream.id,
+ httpResCode: rws.status,
+ h: rws.snapHeader,
+ endStream: endStream,
+ contentType: ctype,
+ contentLength: clen,
+ })
+ if err != nil {
+ return 0, err
+ }
+ if endStream {
+ return 0, nil
+ }
+ }
+ if len(p) == 0 && !rws.handlerDone {
+ return 0, nil
+ }
+
+ if err := rws.conn.writeDataFromHandler(rws.stream, p, rws.handlerDone); err != nil {
+ return 0, err
+ }
+ return len(p), nil
+}
+
+func (w *responseWriter) Flush() {
+ rws := w.rws
+ if rws == nil {
+ panic("Header called after Handler finished")
+ }
+ if rws.bw.Buffered() > 0 {
+ if err := rws.bw.Flush(); err != nil {
+ // Ignore the error. The frame writer already knows.
+ return
+ }
+ } else {
+ // The bufio.Writer won't call chunkWriter.Write
+ // (writeChunk with zero bytes, so we have to do it
+ // ourselves to force the HTTP response header and/or
+ // final DATA frame (with END_STREAM) to be sent.
+ rws.writeChunk(nil)
+ }
+}
+
+func (w *responseWriter) CloseNotify() <-chan bool {
+ rws := w.rws
+ if rws == nil {
+ panic("CloseNotify called after Handler finished")
+ }
+ rws.closeNotifierMu.Lock()
+ ch := rws.closeNotifierCh
+ if ch == nil {
+ ch = make(chan bool, 1)
+ rws.closeNotifierCh = ch
+ go func() {
+ rws.stream.cw.Wait() // wait for close
+ ch <- true
+ }()
+ }
+ rws.closeNotifierMu.Unlock()
+ return ch
+}
+
+func (w *responseWriter) Header() http.Header {
+ rws := w.rws
+ if rws == nil {
+ panic("Header called after Handler finished")
+ }
+ if rws.handlerHeader == nil {
+ rws.handlerHeader = make(http.Header)
+ }
+ return rws.handlerHeader
+}
+
+func (w *responseWriter) WriteHeader(code int) {
+ rws := w.rws
+ if rws == nil {
+ panic("WriteHeader called after Handler finished")
+ }
+ rws.writeHeader(code)
+}
+
+func (rws *responseWriterState) writeHeader(code int) {
+ if !rws.wroteHeader {
+ rws.wroteHeader = true
+ rws.status = code
+ if len(rws.handlerHeader) > 0 {
+ rws.snapHeader = cloneHeader(rws.handlerHeader)
+ }
+ }
+}
+
+func cloneHeader(h http.Header) http.Header {
+ h2 := make(http.Header, len(h))
+ for k, vv := range h {
+ vv2 := make([]string, len(vv))
+ copy(vv2, vv)
+ h2[k] = vv2
+ }
+ return h2
+}
+
+// The Life Of A Write is like this:
+//
+// * Handler calls w.Write or w.WriteString ->
+// * -> rws.bw (*bufio.Writer) ->
+// * (Handler migth call Flush)
+// * -> chunkWriter{rws}
+// * -> responseWriterState.writeChunk(p []byte)
+// * -> responseWriterState.writeChunk (most of the magic; see comment there)
+func (w *responseWriter) Write(p []byte) (n int, err error) {
+ return w.write(len(p), p, "")
+}
+
+func (w *responseWriter) WriteString(s string) (n int, err error) {
+ return w.write(len(s), nil, s)
+}
+
+// either dataB or dataS is non-zero.
+func (w *responseWriter) write(lenData int, dataB []byte, dataS string) (n int, err error) {
+ rws := w.rws
+ if rws == nil {
+ panic("Write called after Handler finished")
+ }
+ if !rws.wroteHeader {
+ w.WriteHeader(200)
+ }
+ if dataB != nil {
+ return rws.bw.Write(dataB)
+ } else {
+ return rws.bw.WriteString(dataS)
+ }
+}
+
+func (w *responseWriter) handlerDone() {
+ rws := w.rws
+ if rws == nil {
+ panic("handlerDone called twice")
+ }
+ rws.handlerDone = true
+ w.Flush()
+ w.rws = nil
+ responseWriterStatePool.Put(rws)
+}
diff --git a/vendor/golang.org/x/net/http2/server_test.go b/vendor/golang.org/x/net/http2/server_test.go
new file mode 100644
index 00000000..57fad6d6
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/server_test.go
@@ -0,0 +1,2622 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "crypto/tls"
+ "errors"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "net"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "os/exec"
+ "reflect"
+ "runtime"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "testing"
+ "time"
+
+ "golang.org/x/net/http2/hpack"
+)
+
+var stderrVerbose = flag.Bool("stderr_verbose", false, "Mirror verbosity to stderr, unbuffered")
+
+func stderrv() io.Writer {
+ if *stderrVerbose {
+ return os.Stderr
+ }
+
+ return ioutil.Discard
+}
+
+type serverTester struct {
+ cc net.Conn // client conn
+ t testing.TB
+ ts *httptest.Server
+ fr *Framer
+ logBuf *bytes.Buffer
+ logFilter []string // substrings to filter out
+ scMu sync.Mutex // guards sc
+ sc *serverConn
+
+ // writing headers:
+ headerBuf bytes.Buffer
+ hpackEnc *hpack.Encoder
+
+ // reading frames:
+ frc chan Frame
+ frErrc chan error
+ readTimer *time.Timer
+}
+
+func init() {
+ testHookOnPanicMu = new(sync.Mutex)
+}
+
+func resetHooks() {
+ testHookOnPanicMu.Lock()
+ testHookOnPanic = nil
+ testHookOnPanicMu.Unlock()
+}
+
+type serverTesterOpt string
+
+var optOnlyServer = serverTesterOpt("only_server")
+
+func newServerTester(t testing.TB, handler http.HandlerFunc, opts ...interface{}) *serverTester {
+ resetHooks()
+
+ logBuf := new(bytes.Buffer)
+ ts := httptest.NewUnstartedServer(handler)
+
+ tlsConfig := &tls.Config{
+ InsecureSkipVerify: true,
+ // The h2-14 is temporary, until curl is updated. (as used by unit tests
+ // in Docker)
+ NextProtos: []string{NextProtoTLS, "h2-14"},
+ }
+
+ onlyServer := false
+ for _, opt := range opts {
+ switch v := opt.(type) {
+ case func(*tls.Config):
+ v(tlsConfig)
+ case func(*httptest.Server):
+ v(ts)
+ case serverTesterOpt:
+ onlyServer = (v == optOnlyServer)
+ default:
+ t.Fatalf("unknown newServerTester option type %T", v)
+ }
+ }
+
+ ConfigureServer(ts.Config, &Server{})
+
+ st := &serverTester{
+ t: t,
+ ts: ts,
+ logBuf: logBuf,
+ frc: make(chan Frame, 1),
+ frErrc: make(chan error, 1),
+ }
+ st.hpackEnc = hpack.NewEncoder(&st.headerBuf)
+
+ ts.TLS = ts.Config.TLSConfig // the httptest.Server has its own copy of this TLS config
+ ts.Config.ErrorLog = log.New(io.MultiWriter(stderrv(), twriter{t: t, st: st}, logBuf), "", log.LstdFlags)
+ ts.StartTLS()
+
+ if VerboseLogs {
+ t.Logf("Running test server at: %s", ts.URL)
+ }
+ testHookGetServerConn = func(v *serverConn) {
+ st.scMu.Lock()
+ defer st.scMu.Unlock()
+ st.sc = v
+ st.sc.testHookCh = make(chan func(int))
+ }
+ log.SetOutput(io.MultiWriter(stderrv(), twriter{t: t, st: st}))
+ if !onlyServer {
+ cc, err := tls.Dial("tcp", ts.Listener.Addr().String(), tlsConfig)
+ if err != nil {
+ t.Fatal(err)
+ }
+ st.cc = cc
+ st.fr = NewFramer(cc, cc)
+ }
+
+ return st
+}
+
+func (st *serverTester) closeConn() {
+ st.scMu.Lock()
+ defer st.scMu.Unlock()
+ st.sc.conn.Close()
+}
+
+func (st *serverTester) addLogFilter(phrase string) {
+ st.logFilter = append(st.logFilter, phrase)
+}
+
+func (st *serverTester) stream(id uint32) *stream {
+ ch := make(chan *stream, 1)
+ st.sc.testHookCh <- func(int) {
+ ch <- st.sc.streams[id]
+ }
+ return <-ch
+}
+
+func (st *serverTester) streamState(id uint32) streamState {
+ ch := make(chan streamState, 1)
+ st.sc.testHookCh <- func(int) {
+ state, _ := st.sc.state(id)
+ ch <- state
+ }
+ return <-ch
+}
+
+// loopNum reports how many times this conn's select loop has gone around.
+func (st *serverTester) loopNum() int {
+ lastc := make(chan int, 1)
+ st.sc.testHookCh <- func(loopNum int) {
+ lastc <- loopNum
+ }
+ return <-lastc
+}
+
+// awaitIdle heuristically awaits for the server conn's select loop to be idle.
+// The heuristic is that the server connection's serve loop must schedule
+// 50 times in a row without any channel sends or receives occuring.
+func (st *serverTester) awaitIdle() {
+ remain := 50
+ last := st.loopNum()
+ for remain > 0 {
+ n := st.loopNum()
+ if n == last+1 {
+ remain--
+ } else {
+ remain = 50
+ }
+ last = n
+ }
+}
+
+func (st *serverTester) Close() {
+ st.ts.Close()
+ if st.cc != nil {
+ st.cc.Close()
+ }
+ log.SetOutput(os.Stderr)
+}
+
+// greet initiates the client's HTTP/2 connection into a state where
+// frames may be sent.
+func (st *serverTester) greet() {
+ st.writePreface()
+ st.writeInitialSettings()
+ st.wantSettings()
+ st.writeSettingsAck()
+ st.wantSettingsAck()
+}
+
+func (st *serverTester) writePreface() {
+ n, err := st.cc.Write(clientPreface)
+ if err != nil {
+ st.t.Fatalf("Error writing client preface: %v", err)
+ }
+ if n != len(clientPreface) {
+ st.t.Fatalf("Writing client preface, wrote %d bytes; want %d", n, len(clientPreface))
+ }
+}
+
+func (st *serverTester) writeInitialSettings() {
+ if err := st.fr.WriteSettings(); err != nil {
+ st.t.Fatalf("Error writing initial SETTINGS frame from client to server: %v", err)
+ }
+}
+
+func (st *serverTester) writeSettingsAck() {
+ if err := st.fr.WriteSettingsAck(); err != nil {
+ st.t.Fatalf("Error writing ACK of server's SETTINGS: %v", err)
+ }
+}
+
+func (st *serverTester) writeHeaders(p HeadersFrameParam) {
+ if err := st.fr.WriteHeaders(p); err != nil {
+ st.t.Fatalf("Error writing HEADERS: %v", err)
+ }
+}
+
+func (st *serverTester) encodeHeaderField(k, v string) {
+ err := st.hpackEnc.WriteField(hpack.HeaderField{Name: k, Value: v})
+ if err != nil {
+ st.t.Fatalf("HPACK encoding error for %q/%q: %v", k, v, err)
+ }
+}
+
+// encodeHeader encodes headers and returns their HPACK bytes. headers
+// must contain an even number of key/value pairs. There may be
+// multiple pairs for keys (e.g. "cookie"). The :method, :path, and
+// :scheme headers default to GET, / and https.
+func (st *serverTester) encodeHeader(headers ...string) []byte {
+ if len(headers)%2 == 1 {
+ panic("odd number of kv args")
+ }
+
+ st.headerBuf.Reset()
+
+ if len(headers) == 0 {
+ // Fast path, mostly for benchmarks, so test code doesn't pollute
+ // profiles when we're looking to improve server allocations.
+ st.encodeHeaderField(":method", "GET")
+ st.encodeHeaderField(":path", "/")
+ st.encodeHeaderField(":scheme", "https")
+ return st.headerBuf.Bytes()
+ }
+
+ if len(headers) == 2 && headers[0] == ":method" {
+ // Another fast path for benchmarks.
+ st.encodeHeaderField(":method", headers[1])
+ st.encodeHeaderField(":path", "/")
+ st.encodeHeaderField(":scheme", "https")
+ return st.headerBuf.Bytes()
+ }
+
+ pseudoCount := map[string]int{}
+ keys := []string{":method", ":path", ":scheme"}
+ vals := map[string][]string{
+ ":method": {"GET"},
+ ":path": {"/"},
+ ":scheme": {"https"},
+ }
+ for len(headers) > 0 {
+ k, v := headers[0], headers[1]
+ headers = headers[2:]
+ if _, ok := vals[k]; !ok {
+ keys = append(keys, k)
+ }
+ if strings.HasPrefix(k, ":") {
+ pseudoCount[k]++
+ if pseudoCount[k] == 1 {
+ vals[k] = []string{v}
+ } else {
+ // Allows testing of invalid headers w/ dup pseudo fields.
+ vals[k] = append(vals[k], v)
+ }
+ } else {
+ vals[k] = append(vals[k], v)
+ }
+ }
+ st.headerBuf.Reset()
+ for _, k := range keys {
+ for _, v := range vals[k] {
+ st.encodeHeaderField(k, v)
+ }
+ }
+ return st.headerBuf.Bytes()
+}
+
+// bodylessReq1 writes a HEADERS frames with StreamID 1 and EndStream and EndHeaders set.
+func (st *serverTester) bodylessReq1(headers ...string) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(headers...),
+ EndStream: true,
+ EndHeaders: true,
+ })
+}
+
+func (st *serverTester) writeData(streamID uint32, endStream bool, data []byte) {
+ if err := st.fr.WriteData(streamID, endStream, data); err != nil {
+ st.t.Fatalf("Error writing DATA: %v", err)
+ }
+}
+
+func (st *serverTester) readFrame() (Frame, error) {
+ go func() {
+ fr, err := st.fr.ReadFrame()
+ if err != nil {
+ st.frErrc <- err
+ } else {
+ st.frc <- fr
+ }
+ }()
+ t := st.readTimer
+ if t == nil {
+ t = time.NewTimer(2 * time.Second)
+ st.readTimer = t
+ }
+ t.Reset(2 * time.Second)
+ defer t.Stop()
+ select {
+ case f := <-st.frc:
+ return f, nil
+ case err := <-st.frErrc:
+ return nil, err
+ case <-t.C:
+ return nil, errors.New("timeout waiting for frame")
+ }
+}
+
+func (st *serverTester) wantHeaders() *HeadersFrame {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting a HEADERS frame: %v", err)
+ }
+ hf, ok := f.(*HeadersFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *HeadersFrame", f)
+ }
+ return hf
+}
+
+func (st *serverTester) wantContinuation() *ContinuationFrame {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting a CONTINUATION frame: %v", err)
+ }
+ cf, ok := f.(*ContinuationFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *ContinuationFrame", f)
+ }
+ return cf
+}
+
+func (st *serverTester) wantData() *DataFrame {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting a DATA frame: %v", err)
+ }
+ df, ok := f.(*DataFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *DataFrame", f)
+ }
+ return df
+}
+
+func (st *serverTester) wantSettings() *SettingsFrame {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting a SETTINGS frame: %v", err)
+ }
+ sf, ok := f.(*SettingsFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *SettingsFrame", f)
+ }
+ return sf
+}
+
+func (st *serverTester) wantPing() *PingFrame {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting a PING frame: %v", err)
+ }
+ pf, ok := f.(*PingFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *PingFrame", f)
+ }
+ return pf
+}
+
+func (st *serverTester) wantGoAway() *GoAwayFrame {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting a GOAWAY frame: %v", err)
+ }
+ gf, ok := f.(*GoAwayFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *GoAwayFrame", f)
+ }
+ return gf
+}
+
+func (st *serverTester) wantRSTStream(streamID uint32, errCode ErrCode) {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting an RSTStream frame: %v", err)
+ }
+ rs, ok := f.(*RSTStreamFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *RSTStreamFrame", f)
+ }
+ if rs.FrameHeader.StreamID != streamID {
+ st.t.Fatalf("RSTStream StreamID = %d; want %d", rs.FrameHeader.StreamID, streamID)
+ }
+ if rs.ErrCode != errCode {
+ st.t.Fatalf("RSTStream ErrCode = %d (%s); want %d (%s)", rs.ErrCode, rs.ErrCode, errCode, errCode)
+ }
+}
+
+func (st *serverTester) wantWindowUpdate(streamID, incr uint32) {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatalf("Error while expecting a WINDOW_UPDATE frame: %v", err)
+ }
+ wu, ok := f.(*WindowUpdateFrame)
+ if !ok {
+ st.t.Fatalf("got a %T; want *WindowUpdateFrame", f)
+ }
+ if wu.FrameHeader.StreamID != streamID {
+ st.t.Fatalf("WindowUpdate StreamID = %d; want %d", wu.FrameHeader.StreamID, streamID)
+ }
+ if wu.Increment != incr {
+ st.t.Fatalf("WindowUpdate increment = %d; want %d", wu.Increment, incr)
+ }
+}
+
+func (st *serverTester) wantSettingsAck() {
+ f, err := st.readFrame()
+ if err != nil {
+ st.t.Fatal(err)
+ }
+ sf, ok := f.(*SettingsFrame)
+ if !ok {
+ st.t.Fatalf("Wanting a settings ACK, received a %T", f)
+ }
+ if !sf.Header().Flags.Has(FlagSettingsAck) {
+ st.t.Fatal("Settings Frame didn't have ACK set")
+ }
+
+}
+
+func TestServer(t *testing.T) {
+ gotReq := make(chan bool, 1)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Foo", "Bar")
+ gotReq <- true
+ })
+ defer st.Close()
+
+ covers("3.5", `
+ The server connection preface consists of a potentially empty
+ SETTINGS frame ([SETTINGS]) that MUST be the first frame the
+ server sends in the HTTP/2 connection.
+ `)
+
+ st.writePreface()
+ st.writeInitialSettings()
+ st.wantSettings()
+ st.writeSettingsAck()
+ st.wantSettingsAck()
+
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(),
+ EndStream: true, // no DATA frames
+ EndHeaders: true,
+ })
+
+ select {
+ case <-gotReq:
+ case <-time.After(2 * time.Second):
+ t.Error("timeout waiting for request")
+ }
+}
+
+func TestServer_Request_Get(t *testing.T) {
+ testServerRequest(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader("foo-bar", "some-value"),
+ EndStream: true, // no DATA frames
+ EndHeaders: true,
+ })
+ }, func(r *http.Request) {
+ if r.Method != "GET" {
+ t.Errorf("Method = %q; want GET", r.Method)
+ }
+ if r.URL.Path != "/" {
+ t.Errorf("URL.Path = %q; want /", r.URL.Path)
+ }
+ if r.ContentLength != 0 {
+ t.Errorf("ContentLength = %v; want 0", r.ContentLength)
+ }
+ if r.Close {
+ t.Error("Close = true; want false")
+ }
+ if !strings.Contains(r.RemoteAddr, ":") {
+ t.Errorf("RemoteAddr = %q; want something with a colon", r.RemoteAddr)
+ }
+ if r.Proto != "HTTP/2.0" || r.ProtoMajor != 2 || r.ProtoMinor != 0 {
+ t.Errorf("Proto = %q Major=%v,Minor=%v; want HTTP/2.0", r.Proto, r.ProtoMajor, r.ProtoMinor)
+ }
+ wantHeader := http.Header{
+ "Foo-Bar": []string{"some-value"},
+ }
+ if !reflect.DeepEqual(r.Header, wantHeader) {
+ t.Errorf("Header = %#v; want %#v", r.Header, wantHeader)
+ }
+ if n, err := r.Body.Read([]byte(" ")); err != io.EOF || n != 0 {
+ t.Errorf("Read = %d, %v; want 0, EOF", n, err)
+ }
+ })
+}
+
+func TestServer_Request_Get_PathSlashes(t *testing.T) {
+ testServerRequest(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":path", "/%2f/"),
+ EndStream: true, // no DATA frames
+ EndHeaders: true,
+ })
+ }, func(r *http.Request) {
+ if r.RequestURI != "/%2f/" {
+ t.Errorf("RequestURI = %q; want /%%2f/", r.RequestURI)
+ }
+ if r.URL.Path != "///" {
+ t.Errorf("URL.Path = %q; want ///", r.URL.Path)
+ }
+ })
+}
+
+// TODO: add a test with EndStream=true on the HEADERS but setting a
+// Content-Length anyway. Should we just omit it and force it to
+// zero?
+
+func TestServer_Request_Post_NoContentLength_EndStream(t *testing.T) {
+ testServerRequest(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ }, func(r *http.Request) {
+ if r.Method != "POST" {
+ t.Errorf("Method = %q; want POST", r.Method)
+ }
+ if r.ContentLength != 0 {
+ t.Errorf("ContentLength = %v; want 0", r.ContentLength)
+ }
+ if n, err := r.Body.Read([]byte(" ")); err != io.EOF || n != 0 {
+ t.Errorf("Read = %d, %v; want 0, EOF", n, err)
+ }
+ })
+}
+
+func TestServer_Request_Post_Body_ImmediateEOF(t *testing.T) {
+ testBodyContents(t, -1, "", func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false, // to say DATA frames are coming
+ EndHeaders: true,
+ })
+ st.writeData(1, true, nil) // just kidding. empty body.
+ })
+}
+
+func TestServer_Request_Post_Body_OneData(t *testing.T) {
+ const content = "Some content"
+ testBodyContents(t, -1, content, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false, // to say DATA frames are coming
+ EndHeaders: true,
+ })
+ st.writeData(1, true, []byte(content))
+ })
+}
+
+func TestServer_Request_Post_Body_TwoData(t *testing.T) {
+ const content = "Some content"
+ testBodyContents(t, -1, content, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false, // to say DATA frames are coming
+ EndHeaders: true,
+ })
+ st.writeData(1, false, []byte(content[:5]))
+ st.writeData(1, true, []byte(content[5:]))
+ })
+}
+
+func TestServer_Request_Post_Body_ContentLength_Correct(t *testing.T) {
+ const content = "Some content"
+ testBodyContents(t, int64(len(content)), content, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(
+ ":method", "POST",
+ "content-length", strconv.Itoa(len(content)),
+ ),
+ EndStream: false, // to say DATA frames are coming
+ EndHeaders: true,
+ })
+ st.writeData(1, true, []byte(content))
+ })
+}
+
+func TestServer_Request_Post_Body_ContentLength_TooLarge(t *testing.T) {
+ testBodyContentsFail(t, 3, "request declared a Content-Length of 3 but only wrote 2 bytes",
+ func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(
+ ":method", "POST",
+ "content-length", "3",
+ ),
+ EndStream: false, // to say DATA frames are coming
+ EndHeaders: true,
+ })
+ st.writeData(1, true, []byte("12"))
+ })
+}
+
+func TestServer_Request_Post_Body_ContentLength_TooSmall(t *testing.T) {
+ testBodyContentsFail(t, 4, "sender tried to send more than declared Content-Length of 4 bytes",
+ func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(
+ ":method", "POST",
+ "content-length", "4",
+ ),
+ EndStream: false, // to say DATA frames are coming
+ EndHeaders: true,
+ })
+ st.writeData(1, true, []byte("12345"))
+ })
+}
+
+func testBodyContents(t *testing.T, wantContentLength int64, wantBody string, write func(st *serverTester)) {
+ testServerRequest(t, write, func(r *http.Request) {
+ if r.Method != "POST" {
+ t.Errorf("Method = %q; want POST", r.Method)
+ }
+ if r.ContentLength != wantContentLength {
+ t.Errorf("ContentLength = %v; want %d", r.ContentLength, wantContentLength)
+ }
+ all, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if string(all) != wantBody {
+ t.Errorf("Read = %q; want %q", all, wantBody)
+ }
+ if err := r.Body.Close(); err != nil {
+ t.Fatalf("Close: %v", err)
+ }
+ })
+}
+
+func testBodyContentsFail(t *testing.T, wantContentLength int64, wantReadError string, write func(st *serverTester)) {
+ testServerRequest(t, write, func(r *http.Request) {
+ if r.Method != "POST" {
+ t.Errorf("Method = %q; want POST", r.Method)
+ }
+ if r.ContentLength != wantContentLength {
+ t.Errorf("ContentLength = %v; want %d", r.ContentLength, wantContentLength)
+ }
+ all, err := ioutil.ReadAll(r.Body)
+ if err == nil {
+ t.Fatalf("expected an error (%q) reading from the body. Successfully read %q instead.",
+ wantReadError, all)
+ }
+ if !strings.Contains(err.Error(), wantReadError) {
+ t.Fatalf("Body.Read = %v; want substring %q", err, wantReadError)
+ }
+ if err := r.Body.Close(); err != nil {
+ t.Fatalf("Close: %v", err)
+ }
+ })
+}
+
+// Using a Host header, instead of :authority
+func TestServer_Request_Get_Host(t *testing.T) {
+ const host = "example.com"
+ testServerRequest(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader("host", host),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ }, func(r *http.Request) {
+ if r.Host != host {
+ t.Errorf("Host = %q; want %q", r.Host, host)
+ }
+ })
+}
+
+// Using an :authority pseudo-header, instead of Host
+func TestServer_Request_Get_Authority(t *testing.T) {
+ const host = "example.com"
+ testServerRequest(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":authority", host),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ }, func(r *http.Request) {
+ if r.Host != host {
+ t.Errorf("Host = %q; want %q", r.Host, host)
+ }
+ })
+}
+
+func TestServer_Request_WithContinuation(t *testing.T) {
+ wantHeader := http.Header{
+ "Foo-One": []string{"value-one"},
+ "Foo-Two": []string{"value-two"},
+ "Foo-Three": []string{"value-three"},
+ }
+ testServerRequest(t, func(st *serverTester) {
+ fullHeaders := st.encodeHeader(
+ "foo-one", "value-one",
+ "foo-two", "value-two",
+ "foo-three", "value-three",
+ )
+ remain := fullHeaders
+ chunks := 0
+ for len(remain) > 0 {
+ const maxChunkSize = 5
+ chunk := remain
+ if len(chunk) > maxChunkSize {
+ chunk = chunk[:maxChunkSize]
+ }
+ remain = remain[len(chunk):]
+
+ if chunks == 0 {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: chunk,
+ EndStream: true, // no DATA frames
+ EndHeaders: false, // we'll have continuation frames
+ })
+ } else {
+ err := st.fr.WriteContinuation(1, len(remain) == 0, chunk)
+ if err != nil {
+ t.Fatal(err)
+ }
+ }
+ chunks++
+ }
+ if chunks < 2 {
+ t.Fatal("too few chunks")
+ }
+ }, func(r *http.Request) {
+ if !reflect.DeepEqual(r.Header, wantHeader) {
+ t.Errorf("Header = %#v; want %#v", r.Header, wantHeader)
+ }
+ })
+}
+
+// Concatenated cookie headers. ("8.1.2.5 Compressing the Cookie Header Field")
+func TestServer_Request_CookieConcat(t *testing.T) {
+ const host = "example.com"
+ testServerRequest(t, func(st *serverTester) {
+ st.bodylessReq1(
+ ":authority", host,
+ "cookie", "a=b",
+ "cookie", "c=d",
+ "cookie", "e=f",
+ )
+ }, func(r *http.Request) {
+ const want = "a=b; c=d; e=f"
+ if got := r.Header.Get("Cookie"); got != want {
+ t.Errorf("Cookie = %q; want %q", got, want)
+ }
+ })
+}
+
+func TestServer_Request_Reject_CapitalHeader(t *testing.T) {
+ testRejectRequest(t, func(st *serverTester) { st.bodylessReq1("UPPER", "v") })
+}
+
+func TestServer_Request_Reject_Pseudo_Missing_method(t *testing.T) {
+ testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":method", "") })
+}
+
+func TestServer_Request_Reject_Pseudo_ExactlyOne(t *testing.T) {
+ // 8.1.2.3 Request Pseudo-Header Fields
+ // "All HTTP/2 requests MUST include exactly one valid value" ...
+ testRejectRequest(t, func(st *serverTester) {
+ st.addLogFilter("duplicate pseudo-header")
+ st.bodylessReq1(":method", "GET", ":method", "POST")
+ })
+}
+
+func TestServer_Request_Reject_Pseudo_AfterRegular(t *testing.T) {
+ // 8.1.2.3 Request Pseudo-Header Fields
+ // "All pseudo-header fields MUST appear in the header block
+ // before regular header fields. Any request or response that
+ // contains a pseudo-header field that appears in a header
+ // block after a regular header field MUST be treated as
+ // malformed (Section 8.1.2.6)."
+ testRejectRequest(t, func(st *serverTester) {
+ st.addLogFilter("pseudo-header after regular header")
+ var buf bytes.Buffer
+ enc := hpack.NewEncoder(&buf)
+ enc.WriteField(hpack.HeaderField{Name: ":method", Value: "GET"})
+ enc.WriteField(hpack.HeaderField{Name: "regular", Value: "foobar"})
+ enc.WriteField(hpack.HeaderField{Name: ":path", Value: "/"})
+ enc.WriteField(hpack.HeaderField{Name: ":scheme", Value: "https"})
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: buf.Bytes(),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ })
+}
+
+func TestServer_Request_Reject_Pseudo_Missing_path(t *testing.T) {
+ testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":path", "") })
+}
+
+func TestServer_Request_Reject_Pseudo_Missing_scheme(t *testing.T) {
+ testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":scheme", "") })
+}
+
+func TestServer_Request_Reject_Pseudo_scheme_invalid(t *testing.T) {
+ testRejectRequest(t, func(st *serverTester) { st.bodylessReq1(":scheme", "bogus") })
+}
+
+func TestServer_Request_Reject_Pseudo_Unknown(t *testing.T) {
+ testRejectRequest(t, func(st *serverTester) {
+ st.addLogFilter(`invalid pseudo-header ":unknown_thing"`)
+ st.bodylessReq1(":unknown_thing", "")
+ })
+}
+
+func testRejectRequest(t *testing.T, send func(*serverTester)) {
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ t.Fatal("server request made it to handler; should've been rejected")
+ })
+ defer st.Close()
+
+ st.greet()
+ send(st)
+ st.wantRSTStream(1, ErrCodeProtocol)
+}
+
+func TestServer_Ping(t *testing.T) {
+ st := newServerTester(t, nil)
+ defer st.Close()
+ st.greet()
+
+ // Server should ignore this one, since it has ACK set.
+ ackPingData := [8]byte{1, 2, 4, 8, 16, 32, 64, 128}
+ if err := st.fr.WritePing(true, ackPingData); err != nil {
+ t.Fatal(err)
+ }
+
+ // But the server should reply to this one, since ACK is false.
+ pingData := [8]byte{1, 2, 3, 4, 5, 6, 7, 8}
+ if err := st.fr.WritePing(false, pingData); err != nil {
+ t.Fatal(err)
+ }
+
+ pf := st.wantPing()
+ if !pf.Flags.Has(FlagPingAck) {
+ t.Error("response ping doesn't have ACK set")
+ }
+ if pf.Data != pingData {
+ t.Errorf("response ping has data %q; want %q", pf.Data, pingData)
+ }
+}
+
+func TestServer_RejectsLargeFrames(t *testing.T) {
+ st := newServerTester(t, nil)
+ defer st.Close()
+ st.greet()
+
+ // Write too large of a frame (too large by one byte)
+ // We ignore the return value because it's expected that the server
+ // will only read the first 9 bytes (the headre) and then disconnect.
+ st.fr.WriteRawFrame(0xff, 0, 0, make([]byte, defaultMaxReadFrameSize+1))
+
+ gf := st.wantGoAway()
+ if gf.ErrCode != ErrCodeFrameSize {
+ t.Errorf("GOAWAY err = %v; want %v", gf.ErrCode, ErrCodeFrameSize)
+ }
+}
+
+func TestServer_Handler_Sends_WindowUpdate(t *testing.T) {
+ puppet := newHandlerPuppet()
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ puppet.act(w, r)
+ })
+ defer st.Close()
+ defer puppet.done()
+
+ st.greet()
+
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false, // data coming
+ EndHeaders: true,
+ })
+ st.writeData(1, false, []byte("abcdef"))
+ puppet.do(readBodyHandler(t, "abc"))
+ st.wantWindowUpdate(0, 3)
+ st.wantWindowUpdate(1, 3)
+
+ puppet.do(readBodyHandler(t, "def"))
+ st.wantWindowUpdate(0, 3)
+ st.wantWindowUpdate(1, 3)
+
+ st.writeData(1, true, []byte("ghijkl")) // END_STREAM here
+ puppet.do(readBodyHandler(t, "ghi"))
+ puppet.do(readBodyHandler(t, "jkl"))
+ st.wantWindowUpdate(0, 3)
+ st.wantWindowUpdate(0, 3) // no more stream-level, since END_STREAM
+}
+
+func TestServer_Send_GoAway_After_Bogus_WindowUpdate(t *testing.T) {
+ st := newServerTester(t, nil)
+ defer st.Close()
+ st.greet()
+ if err := st.fr.WriteWindowUpdate(0, 1<<31-1); err != nil {
+ t.Fatal(err)
+ }
+ gf := st.wantGoAway()
+ if gf.ErrCode != ErrCodeFlowControl {
+ t.Errorf("GOAWAY err = %v; want %v", gf.ErrCode, ErrCodeFlowControl)
+ }
+ if gf.LastStreamID != 0 {
+ t.Errorf("GOAWAY last stream ID = %v; want %v", gf.LastStreamID, 0)
+ }
+}
+
+func TestServer_Send_RstStream_After_Bogus_WindowUpdate(t *testing.T) {
+ inHandler := make(chan bool)
+ blockHandler := make(chan bool)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ inHandler <- true
+ <-blockHandler
+ })
+ defer st.Close()
+ defer close(blockHandler)
+ st.greet()
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false, // keep it open
+ EndHeaders: true,
+ })
+ <-inHandler
+ // Send a bogus window update:
+ if err := st.fr.WriteWindowUpdate(1, 1<<31-1); err != nil {
+ t.Fatal(err)
+ }
+ st.wantRSTStream(1, ErrCodeFlowControl)
+}
+
+// testServerPostUnblock sends a hanging POST with unsent data to handler,
+// then runs fn once in the handler, and verifies that the error returned from
+// handler is acceptable. It fails if takes over 5 seconds for handler to exit.
+func testServerPostUnblock(t *testing.T,
+ handler func(http.ResponseWriter, *http.Request) error,
+ fn func(*serverTester),
+ checkErr func(error),
+ otherHeaders ...string) {
+ inHandler := make(chan bool)
+ errc := make(chan error, 1)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ inHandler <- true
+ errc <- handler(w, r)
+ })
+ st.greet()
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(append([]string{":method", "POST"}, otherHeaders...)...),
+ EndStream: false, // keep it open
+ EndHeaders: true,
+ })
+ <-inHandler
+ fn(st)
+ select {
+ case err := <-errc:
+ if checkErr != nil {
+ checkErr(err)
+ }
+ case <-time.After(5 * time.Second):
+ t.Fatal("timeout waiting for Handler to return")
+ }
+ st.Close()
+}
+
+func TestServer_RSTStream_Unblocks_Read(t *testing.T) {
+ testServerPostUnblock(t,
+ func(w http.ResponseWriter, r *http.Request) (err error) {
+ _, err = r.Body.Read(make([]byte, 1))
+ return
+ },
+ func(st *serverTester) {
+ if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil {
+ t.Fatal(err)
+ }
+ },
+ func(err error) {
+ if err == nil {
+ t.Error("unexpected nil error from Request.Body.Read")
+ }
+ },
+ )
+}
+
+func TestServer_RSTStream_Unblocks_Header_Write(t *testing.T) {
+ // Run this test a bunch, because it doesn't always
+ // deadlock. But with a bunch, it did.
+ n := 50
+ if testing.Short() {
+ n = 5
+ }
+ for i := 0; i < n; i++ {
+ testServer_RSTStream_Unblocks_Header_Write(t)
+ }
+}
+
+func testServer_RSTStream_Unblocks_Header_Write(t *testing.T) {
+ inHandler := make(chan bool, 1)
+ unblockHandler := make(chan bool, 1)
+ headerWritten := make(chan bool, 1)
+ wroteRST := make(chan bool, 1)
+
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ inHandler <- true
+ <-wroteRST
+ w.Header().Set("foo", "bar")
+ w.WriteHeader(200)
+ w.(http.Flusher).Flush()
+ headerWritten <- true
+ <-unblockHandler
+ })
+ defer st.Close()
+
+ st.greet()
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false, // keep it open
+ EndHeaders: true,
+ })
+ <-inHandler
+ if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil {
+ t.Fatal(err)
+ }
+ wroteRST <- true
+ st.awaitIdle()
+ select {
+ case <-headerWritten:
+ case <-time.After(2 * time.Second):
+ t.Error("timeout waiting for header write")
+ }
+ unblockHandler <- true
+}
+
+func TestServer_DeadConn_Unblocks_Read(t *testing.T) {
+ testServerPostUnblock(t,
+ func(w http.ResponseWriter, r *http.Request) (err error) {
+ _, err = r.Body.Read(make([]byte, 1))
+ return
+ },
+ func(st *serverTester) { st.cc.Close() },
+ func(err error) {
+ if err == nil {
+ t.Error("unexpected nil error from Request.Body.Read")
+ }
+ },
+ )
+}
+
+var blockUntilClosed = func(w http.ResponseWriter, r *http.Request) error {
+ <-w.(http.CloseNotifier).CloseNotify()
+ return nil
+}
+
+func TestServer_CloseNotify_After_RSTStream(t *testing.T) {
+ testServerPostUnblock(t, blockUntilClosed, func(st *serverTester) {
+ if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil {
+ t.Fatal(err)
+ }
+ }, nil)
+}
+
+func TestServer_CloseNotify_After_ConnClose(t *testing.T) {
+ testServerPostUnblock(t, blockUntilClosed, func(st *serverTester) { st.cc.Close() }, nil)
+}
+
+// that CloseNotify unblocks after a stream error due to the client's
+// problem that's unrelated to them explicitly canceling it (which is
+// TestServer_CloseNotify_After_RSTStream above)
+func TestServer_CloseNotify_After_StreamError(t *testing.T) {
+ testServerPostUnblock(t, blockUntilClosed, func(st *serverTester) {
+ // data longer than declared Content-Length => stream error
+ st.writeData(1, true, []byte("1234"))
+ }, nil, "content-length", "3")
+}
+
+func TestServer_StateTransitions(t *testing.T) {
+ var st *serverTester
+ inHandler := make(chan bool)
+ writeData := make(chan bool)
+ leaveHandler := make(chan bool)
+ st = newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ inHandler <- true
+ if st.stream(1) == nil {
+ t.Errorf("nil stream 1 in handler")
+ }
+ if got, want := st.streamState(1), stateOpen; got != want {
+ t.Errorf("in handler, state is %v; want %v", got, want)
+ }
+ writeData <- true
+ if n, err := r.Body.Read(make([]byte, 1)); n != 0 || err != io.EOF {
+ t.Errorf("body read = %d, %v; want 0, EOF", n, err)
+ }
+ if got, want := st.streamState(1), stateHalfClosedRemote; got != want {
+ t.Errorf("in handler, state is %v; want %v", got, want)
+ }
+
+ <-leaveHandler
+ })
+ st.greet()
+ if st.stream(1) != nil {
+ t.Fatal("stream 1 should be empty")
+ }
+ if got := st.streamState(1); got != stateIdle {
+ t.Fatalf("stream 1 should be idle; got %v", got)
+ }
+
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false, // keep it open
+ EndHeaders: true,
+ })
+ <-inHandler
+ <-writeData
+ st.writeData(1, true, nil)
+
+ leaveHandler <- true
+ hf := st.wantHeaders()
+ if !hf.StreamEnded() {
+ t.Fatal("expected END_STREAM flag")
+ }
+
+ if got, want := st.streamState(1), stateClosed; got != want {
+ t.Errorf("at end, state is %v; want %v", got, want)
+ }
+ if st.stream(1) != nil {
+ t.Fatal("at end, stream 1 should be gone")
+ }
+}
+
+// test HEADERS w/o EndHeaders + another HEADERS (should get rejected)
+func TestServer_Rejects_HeadersNoEnd_Then_Headers(t *testing.T) {
+ testServerRejects(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: false,
+ })
+ st.writeHeaders(HeadersFrameParam{ // Not a continuation.
+ StreamID: 3, // different stream.
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ })
+}
+
+// test HEADERS w/o EndHeaders + PING (should get rejected)
+func TestServer_Rejects_HeadersNoEnd_Then_Ping(t *testing.T) {
+ testServerRejects(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: false,
+ })
+ if err := st.fr.WritePing(false, [8]byte{}); err != nil {
+ t.Fatal(err)
+ }
+ })
+}
+
+// test HEADERS w/ EndHeaders + a continuation HEADERS (should get rejected)
+func TestServer_Rejects_HeadersEnd_Then_Continuation(t *testing.T) {
+ testServerRejects(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ st.wantHeaders()
+ if err := st.fr.WriteContinuation(1, true, encodeHeaderNoImplicit(t, "foo", "bar")); err != nil {
+ t.Fatal(err)
+ }
+ })
+}
+
+// test HEADERS w/o EndHeaders + a continuation HEADERS on wrong stream ID
+func TestServer_Rejects_HeadersNoEnd_Then_ContinuationWrongStream(t *testing.T) {
+ testServerRejects(t, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: false,
+ })
+ if err := st.fr.WriteContinuation(3, true, encodeHeaderNoImplicit(t, "foo", "bar")); err != nil {
+ t.Fatal(err)
+ }
+ })
+}
+
+// No HEADERS on stream 0.
+func TestServer_Rejects_Headers0(t *testing.T) {
+ testServerRejects(t, func(st *serverTester) {
+ st.fr.AllowIllegalWrites = true
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 0,
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ })
+}
+
+// No CONTINUATION on stream 0.
+func TestServer_Rejects_Continuation0(t *testing.T) {
+ testServerRejects(t, func(st *serverTester) {
+ st.fr.AllowIllegalWrites = true
+ if err := st.fr.WriteContinuation(0, true, st.encodeHeader()); err != nil {
+ t.Fatal(err)
+ }
+ })
+}
+
+func TestServer_Rejects_PushPromise(t *testing.T) {
+ testServerRejects(t, func(st *serverTester) {
+ pp := PushPromiseParam{
+ StreamID: 1,
+ PromiseID: 3,
+ }
+ if err := st.fr.WritePushPromise(pp); err != nil {
+ t.Fatal(err)
+ }
+ })
+}
+
+// testServerRejects tests that the server hangs up with a GOAWAY
+// frame and a server close after the client does something
+// deserving a CONNECTION_ERROR.
+func testServerRejects(t *testing.T, writeReq func(*serverTester)) {
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {})
+ st.addLogFilter("connection error: PROTOCOL_ERROR")
+ defer st.Close()
+ st.greet()
+ writeReq(st)
+
+ st.wantGoAway()
+ errc := make(chan error, 1)
+ go func() {
+ fr, err := st.fr.ReadFrame()
+ if err == nil {
+ err = fmt.Errorf("got frame of type %T", fr)
+ }
+ errc <- err
+ }()
+ select {
+ case err := <-errc:
+ if err != io.EOF {
+ t.Errorf("ReadFrame = %v; want io.EOF", err)
+ }
+ case <-time.After(2 * time.Second):
+ t.Error("timeout waiting for disconnect")
+ }
+}
+
+// testServerRequest sets up an idle HTTP/2 connection and lets you
+// write a single request with writeReq, and then verify that the
+// *http.Request is built correctly in checkReq.
+func testServerRequest(t *testing.T, writeReq func(*serverTester), checkReq func(*http.Request)) {
+ gotReq := make(chan bool, 1)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ if r.Body == nil {
+ t.Fatal("nil Body")
+ }
+ checkReq(r)
+ gotReq <- true
+ })
+ defer st.Close()
+
+ st.greet()
+ writeReq(st)
+
+ select {
+ case <-gotReq:
+ case <-time.After(2 * time.Second):
+ t.Error("timeout waiting for request")
+ }
+}
+
+func getSlash(st *serverTester) { st.bodylessReq1() }
+
+func TestServer_Response_NoData(t *testing.T) {
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ // Nothing.
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if !hf.StreamEnded() {
+ t.Fatal("want END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ })
+}
+
+func TestServer_Response_NoData_Header_FooBar(t *testing.T) {
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ w.Header().Set("Foo-Bar", "some-value")
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if !hf.StreamEnded() {
+ t.Fatal("want END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"foo-bar", "some-value"},
+ {"content-type", "text/plain; charset=utf-8"},
+ {"content-length", "0"},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ })
+}
+
+func TestServer_Response_Data_Sniff_DoesntOverride(t *testing.T) {
+ const msg = "this is HTML."
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ w.Header().Set("Content-Type", "foo/bar")
+ io.WriteString(w, msg)
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("don't want END_STREAM, expecting data")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"content-type", "foo/bar"},
+ {"content-length", strconv.Itoa(len(msg))},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ df := st.wantData()
+ if !df.StreamEnded() {
+ t.Error("expected DATA to have END_STREAM flag")
+ }
+ if got := string(df.Data()); got != msg {
+ t.Errorf("got DATA %q; want %q", got, msg)
+ }
+ })
+}
+
+func TestServer_Response_TransferEncoding_chunked(t *testing.T) {
+ const msg = "hi"
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ w.Header().Set("Transfer-Encoding", "chunked") // should be stripped
+ io.WriteString(w, msg)
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"content-type", "text/plain; charset=utf-8"},
+ {"content-length", strconv.Itoa(len(msg))},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ })
+}
+
+// Header accessed only after the initial write.
+func TestServer_Response_Data_IgnoreHeaderAfterWrite_After(t *testing.T) {
+ const msg = "this is HTML."
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ io.WriteString(w, msg)
+ w.Header().Set("foo", "should be ignored")
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"content-type", "text/html; charset=utf-8"},
+ {"content-length", strconv.Itoa(len(msg))},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ })
+}
+
+// Header accessed before the initial write and later mutated.
+func TestServer_Response_Data_IgnoreHeaderAfterWrite_Overwrite(t *testing.T) {
+ const msg = "this is HTML."
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ w.Header().Set("foo", "proper value")
+ io.WriteString(w, msg)
+ w.Header().Set("foo", "should be ignored")
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"foo", "proper value"},
+ {"content-type", "text/html; charset=utf-8"},
+ {"content-length", strconv.Itoa(len(msg))},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ })
+}
+
+func TestServer_Response_Data_SniffLenType(t *testing.T) {
+ const msg = "this is HTML."
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ io.WriteString(w, msg)
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("don't want END_STREAM, expecting data")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"content-type", "text/html; charset=utf-8"},
+ {"content-length", strconv.Itoa(len(msg))},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ df := st.wantData()
+ if !df.StreamEnded() {
+ t.Error("expected DATA to have END_STREAM flag")
+ }
+ if got := string(df.Data()); got != msg {
+ t.Errorf("got DATA %q; want %q", got, msg)
+ }
+ })
+}
+
+func TestServer_Response_Header_Flush_MidWrite(t *testing.T) {
+ const msg = "this is HTML"
+ const msg2 = ", and this is the next chunk"
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ io.WriteString(w, msg)
+ w.(http.Flusher).Flush()
+ io.WriteString(w, msg2)
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"content-type", "text/html; charset=utf-8"}, // sniffed
+ // and no content-length
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ {
+ df := st.wantData()
+ if df.StreamEnded() {
+ t.Error("unexpected END_STREAM flag")
+ }
+ if got := string(df.Data()); got != msg {
+ t.Errorf("got DATA %q; want %q", got, msg)
+ }
+ }
+ {
+ df := st.wantData()
+ if !df.StreamEnded() {
+ t.Error("wanted END_STREAM flag on last data chunk")
+ }
+ if got := string(df.Data()); got != msg2 {
+ t.Errorf("got DATA %q; want %q", got, msg2)
+ }
+ }
+ })
+}
+
+func TestServer_Response_LargeWrite(t *testing.T) {
+ const size = 1 << 20
+ const maxFrameSize = 16 << 10
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ n, err := w.Write(bytes.Repeat([]byte("a"), size))
+ if err != nil {
+ return fmt.Errorf("Write error: %v", err)
+ }
+ if n != size {
+ return fmt.Errorf("wrong size %d from Write", n)
+ }
+ return nil
+ }, func(st *serverTester) {
+ if err := st.fr.WriteSettings(
+ Setting{SettingInitialWindowSize, 0},
+ Setting{SettingMaxFrameSize, maxFrameSize},
+ ); err != nil {
+ t.Fatal(err)
+ }
+ st.wantSettingsAck()
+
+ getSlash(st) // make the single request
+
+ // Give the handler quota to write:
+ if err := st.fr.WriteWindowUpdate(1, size); err != nil {
+ t.Fatal(err)
+ }
+ // Give the handler quota to write to connection-level
+ // window as well
+ if err := st.fr.WriteWindowUpdate(0, size); err != nil {
+ t.Fatal(err)
+ }
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "200"},
+ {"content-type", "text/plain; charset=utf-8"}, // sniffed
+ // and no content-length
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+ var bytes, frames int
+ for {
+ df := st.wantData()
+ bytes += len(df.Data())
+ frames++
+ for _, b := range df.Data() {
+ if b != 'a' {
+ t.Fatal("non-'a' byte seen in DATA")
+ }
+ }
+ if df.StreamEnded() {
+ break
+ }
+ }
+ if bytes != size {
+ t.Errorf("Got %d bytes; want %d", bytes, size)
+ }
+ if want := int(size / maxFrameSize); frames < want || frames > want*2 {
+ t.Errorf("Got %d frames; want %d", frames, size)
+ }
+ })
+}
+
+// Test that the handler can't write more than the client allows
+func TestServer_Response_LargeWrite_FlowControlled(t *testing.T) {
+ const size = 1 << 20
+ const maxFrameSize = 16 << 10
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ w.(http.Flusher).Flush()
+ n, err := w.Write(bytes.Repeat([]byte("a"), size))
+ if err != nil {
+ return fmt.Errorf("Write error: %v", err)
+ }
+ if n != size {
+ return fmt.Errorf("wrong size %d from Write", n)
+ }
+ return nil
+ }, func(st *serverTester) {
+ // Set the window size to something explicit for this test.
+ // It's also how much initial data we expect.
+ const initWindowSize = 123
+ if err := st.fr.WriteSettings(
+ Setting{SettingInitialWindowSize, initWindowSize},
+ Setting{SettingMaxFrameSize, maxFrameSize},
+ ); err != nil {
+ t.Fatal(err)
+ }
+ st.wantSettingsAck()
+
+ getSlash(st) // make the single request
+ defer func() { st.fr.WriteRSTStream(1, ErrCodeCancel) }()
+
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+
+ df := st.wantData()
+ if got := len(df.Data()); got != initWindowSize {
+ t.Fatalf("Initial window size = %d but got DATA with %d bytes", initWindowSize, got)
+ }
+
+ for _, quota := range []int{1, 13, 127} {
+ if err := st.fr.WriteWindowUpdate(1, uint32(quota)); err != nil {
+ t.Fatal(err)
+ }
+ df := st.wantData()
+ if int(quota) != len(df.Data()) {
+ t.Fatalf("read %d bytes after giving %d quota", len(df.Data()), quota)
+ }
+ }
+
+ if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil {
+ t.Fatal(err)
+ }
+ })
+}
+
+// Test that the handler blocked in a Write is unblocked if the server sends a RST_STREAM.
+func TestServer_Response_RST_Unblocks_LargeWrite(t *testing.T) {
+ const size = 1 << 20
+ const maxFrameSize = 16 << 10
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ w.(http.Flusher).Flush()
+ errc := make(chan error, 1)
+ go func() {
+ _, err := w.Write(bytes.Repeat([]byte("a"), size))
+ errc <- err
+ }()
+ select {
+ case err := <-errc:
+ if err == nil {
+ return errors.New("unexpected nil error from Write in handler")
+ }
+ return nil
+ case <-time.After(2 * time.Second):
+ return errors.New("timeout waiting for Write in handler")
+ }
+ }, func(st *serverTester) {
+ if err := st.fr.WriteSettings(
+ Setting{SettingInitialWindowSize, 0},
+ Setting{SettingMaxFrameSize, maxFrameSize},
+ ); err != nil {
+ t.Fatal(err)
+ }
+ st.wantSettingsAck()
+
+ getSlash(st) // make the single request
+
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+
+ if err := st.fr.WriteRSTStream(1, ErrCodeCancel); err != nil {
+ t.Fatal(err)
+ }
+ })
+}
+
+func TestServer_Response_Empty_Data_Not_FlowControlled(t *testing.T) {
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ w.(http.Flusher).Flush()
+ // Nothing; send empty DATA
+ return nil
+ }, func(st *serverTester) {
+ // Handler gets no data quota:
+ if err := st.fr.WriteSettings(Setting{SettingInitialWindowSize, 0}); err != nil {
+ t.Fatal(err)
+ }
+ st.wantSettingsAck()
+
+ getSlash(st) // make the single request
+
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+
+ df := st.wantData()
+ if got := len(df.Data()); got != 0 {
+ t.Fatalf("unexpected %d DATA bytes; want 0", got)
+ }
+ if !df.StreamEnded() {
+ t.Fatal("DATA didn't have END_STREAM")
+ }
+ })
+}
+
+func TestServer_Response_Automatic100Continue(t *testing.T) {
+ const msg = "foo"
+ const reply = "bar"
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ if v := r.Header.Get("Expect"); v != "" {
+ t.Errorf("Expect header = %q; want empty", v)
+ }
+ buf := make([]byte, len(msg))
+ // This read should trigger the 100-continue being sent.
+ if n, err := io.ReadFull(r.Body, buf); err != nil || n != len(msg) || string(buf) != msg {
+ return fmt.Errorf("ReadFull = %q, %v; want %q, nil", buf[:n], err, msg)
+ }
+ _, err := io.WriteString(w, reply)
+ return err
+ }, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1, // clients send odd numbers
+ BlockFragment: st.encodeHeader(":method", "POST", "expect", "100-continue"),
+ EndStream: false,
+ EndHeaders: true,
+ })
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth := decodeHeader(t, hf.HeaderBlockFragment())
+ wanth := [][2]string{
+ {":status", "100"},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Fatalf("Got headers %v; want %v", goth, wanth)
+ }
+
+ // Okay, they sent status 100, so we can send our
+ // gigantic and/or sensitive "foo" payload now.
+ st.writeData(1, true, []byte(msg))
+
+ st.wantWindowUpdate(0, uint32(len(msg)))
+
+ hf = st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("expected data to follow")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ goth = decodeHeader(t, hf.HeaderBlockFragment())
+ wanth = [][2]string{
+ {":status", "200"},
+ {"content-type", "text/plain; charset=utf-8"},
+ {"content-length", strconv.Itoa(len(reply))},
+ }
+ if !reflect.DeepEqual(goth, wanth) {
+ t.Errorf("Got headers %v; want %v", goth, wanth)
+ }
+
+ df := st.wantData()
+ if string(df.Data()) != reply {
+ t.Errorf("Client read %q; want %q", df.Data(), reply)
+ }
+ if !df.StreamEnded() {
+ t.Errorf("expect data stream end")
+ }
+ })
+}
+
+func TestServer_HandlerWriteErrorOnDisconnect(t *testing.T) {
+ errc := make(chan error, 1)
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ p := []byte("some data.\n")
+ for {
+ _, err := w.Write(p)
+ if err != nil {
+ errc <- err
+ return nil
+ }
+ }
+ }, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(),
+ EndStream: false,
+ EndHeaders: true,
+ })
+ hf := st.wantHeaders()
+ if hf.StreamEnded() {
+ t.Fatal("unexpected END_STREAM flag")
+ }
+ if !hf.HeadersEnded() {
+ t.Fatal("want END_HEADERS flag")
+ }
+ // Close the connection and wait for the handler to (hopefully) notice.
+ st.cc.Close()
+ select {
+ case <-errc:
+ case <-time.After(5 * time.Second):
+ t.Error("timeout")
+ }
+ })
+}
+
+func TestServer_Rejects_Too_Many_Streams(t *testing.T) {
+ const testPath = "/some/path"
+
+ inHandler := make(chan uint32)
+ leaveHandler := make(chan bool)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ id := w.(*responseWriter).rws.stream.id
+ inHandler <- id
+ if id == 1+(defaultMaxStreams+1)*2 && r.URL.Path != testPath {
+ t.Errorf("decoded final path as %q; want %q", r.URL.Path, testPath)
+ }
+ <-leaveHandler
+ })
+ defer st.Close()
+ st.greet()
+ nextStreamID := uint32(1)
+ streamID := func() uint32 {
+ defer func() { nextStreamID += 2 }()
+ return nextStreamID
+ }
+ sendReq := func(id uint32, headers ...string) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: id,
+ BlockFragment: st.encodeHeader(headers...),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ }
+ for i := 0; i < defaultMaxStreams; i++ {
+ sendReq(streamID())
+ <-inHandler
+ }
+ defer func() {
+ for i := 0; i < defaultMaxStreams; i++ {
+ leaveHandler <- true
+ }
+ }()
+
+ // And this one should cross the limit:
+ // (It's also sent as a CONTINUATION, to verify we still track the decoder context,
+ // even if we're rejecting it)
+ rejectID := streamID()
+ headerBlock := st.encodeHeader(":path", testPath)
+ frag1, frag2 := headerBlock[:3], headerBlock[3:]
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: rejectID,
+ BlockFragment: frag1,
+ EndStream: true,
+ EndHeaders: false, // CONTINUATION coming
+ })
+ if err := st.fr.WriteContinuation(rejectID, true, frag2); err != nil {
+ t.Fatal(err)
+ }
+ st.wantRSTStream(rejectID, ErrCodeProtocol)
+
+ // But let a handler finish:
+ leaveHandler <- true
+ st.wantHeaders()
+
+ // And now another stream should be able to start:
+ goodID := streamID()
+ sendReq(goodID, ":path", testPath)
+ select {
+ case got := <-inHandler:
+ if got != goodID {
+ t.Errorf("Got stream %d; want %d", got, goodID)
+ }
+ case <-time.After(3 * time.Second):
+ t.Error("timeout waiting for handler")
+ }
+}
+
+// So many response headers that the server needs to use CONTINUATION frames:
+func TestServer_Response_ManyHeaders_With_Continuation(t *testing.T) {
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ h := w.Header()
+ for i := 0; i < 5000; i++ {
+ h.Set(fmt.Sprintf("x-header-%d", i), fmt.Sprintf("x-value-%d", i))
+ }
+ return nil
+ }, func(st *serverTester) {
+ getSlash(st)
+ hf := st.wantHeaders()
+ if hf.HeadersEnded() {
+ t.Fatal("got unwanted END_HEADERS flag")
+ }
+ n := 0
+ for {
+ n++
+ cf := st.wantContinuation()
+ if cf.HeadersEnded() {
+ break
+ }
+ }
+ if n < 5 {
+ t.Errorf("Only got %d CONTINUATION frames; expected 5+ (currently 6)", n)
+ }
+ })
+}
+
+// This previously crashed (reported by Mathieu Lonjaret as observed
+// while using Camlistore) because we got a DATA frame from the client
+// after the handler exited and our logic at the time was wrong,
+// keeping a stream in the map in stateClosed, which tickled an
+// invariant check later when we tried to remove that stream (via
+// defer sc.closeAllStreamsOnConnClose) when the serverConn serve loop
+// ended.
+func TestServer_NoCrash_HandlerClose_Then_ClientClose(t *testing.T) {
+ testServerResponse(t, func(w http.ResponseWriter, r *http.Request) error {
+ // nothing
+ return nil
+ }, func(st *serverTester) {
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.encodeHeader(),
+ EndStream: false, // DATA is coming
+ EndHeaders: true,
+ })
+ hf := st.wantHeaders()
+ if !hf.HeadersEnded() || !hf.StreamEnded() {
+ t.Fatalf("want END_HEADERS+END_STREAM, got %v", hf)
+ }
+
+ // Sent when the a Handler closes while a client has
+ // indicated it's still sending DATA:
+ st.wantRSTStream(1, ErrCodeCancel)
+
+ // Now the handler has ended, so it's ended its
+ // stream, but the client hasn't closed its side
+ // (stateClosedLocal). So send more data and verify
+ // it doesn't crash with an internal invariant panic, like
+ // it did before.
+ st.writeData(1, true, []byte("foo"))
+
+ // Sent after a peer sends data anyway (admittedly the
+ // previous RST_STREAM might've still been in-flight),
+ // but they'll get the more friendly 'cancel' code
+ // first.
+ st.wantRSTStream(1, ErrCodeStreamClosed)
+
+ // Set up a bunch of machinery to record the panic we saw
+ // previously.
+ var (
+ panMu sync.Mutex
+ panicVal interface{}
+ )
+
+ testHookOnPanicMu.Lock()
+ testHookOnPanic = func(sc *serverConn, pv interface{}) bool {
+ panMu.Lock()
+ panicVal = pv
+ panMu.Unlock()
+ return true
+ }
+ testHookOnPanicMu.Unlock()
+
+ // Now force the serve loop to end, via closing the connection.
+ st.cc.Close()
+ select {
+ case <-st.sc.doneServing:
+ // Loop has exited.
+ panMu.Lock()
+ got := panicVal
+ panMu.Unlock()
+ if got != nil {
+ t.Errorf("Got panic: %v", got)
+ }
+ case <-time.After(5 * time.Second):
+ t.Error("timeout")
+ }
+ })
+}
+
+func TestServer_Rejects_TLS10(t *testing.T) { testRejectTLS(t, tls.VersionTLS10) }
+func TestServer_Rejects_TLS11(t *testing.T) { testRejectTLS(t, tls.VersionTLS11) }
+
+func testRejectTLS(t *testing.T, max uint16) {
+ st := newServerTester(t, nil, func(c *tls.Config) {
+ c.MaxVersion = max
+ })
+ defer st.Close()
+ gf := st.wantGoAway()
+ if got, want := gf.ErrCode, ErrCodeInadequateSecurity; got != want {
+ t.Errorf("Got error code %v; want %v", got, want)
+ }
+}
+
+func TestServer_Rejects_TLSBadCipher(t *testing.T) {
+ st := newServerTester(t, nil, func(c *tls.Config) {
+ // Only list bad ones:
+ c.CipherSuites = []uint16{
+ tls.TLS_RSA_WITH_RC4_128_SHA,
+ tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
+ tls.TLS_RSA_WITH_AES_128_CBC_SHA,
+ tls.TLS_RSA_WITH_AES_256_CBC_SHA,
+ tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
+ tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
+ tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
+ tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA,
+ tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
+ tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+ tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+ }
+ })
+ defer st.Close()
+ gf := st.wantGoAway()
+ if got, want := gf.ErrCode, ErrCodeInadequateSecurity; got != want {
+ t.Errorf("Got error code %v; want %v", got, want)
+ }
+}
+
+func TestServer_Advertises_Common_Cipher(t *testing.T) {
+ const requiredSuite = tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ st := newServerTester(t, nil, func(c *tls.Config) {
+ // Have the client only support the one required by the spec.
+ c.CipherSuites = []uint16{requiredSuite}
+ }, func(ts *httptest.Server) {
+ var srv *http.Server = ts.Config
+ // Have the server configured with no specific cipher suites.
+ // This tests that Go's defaults include the required one.
+ srv.TLSConfig = nil
+ })
+ defer st.Close()
+ st.greet()
+}
+
+// TODO: move this onto *serverTester, and re-use the same hpack
+// decoding context throughout. We're just getting lucky here with
+// creating a new decoder each time.
+func decodeHeader(t *testing.T, headerBlock []byte) (pairs [][2]string) {
+ d := hpack.NewDecoder(initialHeaderTableSize, func(f hpack.HeaderField) {
+ pairs = append(pairs, [2]string{f.Name, f.Value})
+ })
+ if _, err := d.Write(headerBlock); err != nil {
+ t.Fatalf("hpack decoding error: %v", err)
+ }
+ if err := d.Close(); err != nil {
+ t.Fatalf("hpack decoding error: %v", err)
+ }
+ return
+}
+
+// testServerResponse sets up an idle HTTP/2 connection and lets you
+// write a single request with writeReq, and then reply to it in some way with the provided handler,
+// and then verify the output with the serverTester again (assuming the handler returns nil)
+func testServerResponse(t testing.TB,
+ handler func(http.ResponseWriter, *http.Request) error,
+ client func(*serverTester),
+) {
+ errc := make(chan error, 1)
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ if r.Body == nil {
+ t.Fatal("nil Body")
+ }
+ errc <- handler(w, r)
+ })
+ defer st.Close()
+
+ donec := make(chan bool)
+ go func() {
+ defer close(donec)
+ st.greet()
+ client(st)
+ }()
+
+ select {
+ case <-donec:
+ return
+ case <-time.After(5 * time.Second):
+ t.Fatal("timeout")
+ }
+
+ select {
+ case err := <-errc:
+ if err != nil {
+ t.Fatalf("Error in handler: %v", err)
+ }
+ case <-time.After(2 * time.Second):
+ t.Error("timeout waiting for handler to finish")
+ }
+}
+
+// readBodyHandler returns an http Handler func that reads len(want)
+// bytes from r.Body and fails t if the contents read were not
+// the value of want.
+func readBodyHandler(t *testing.T, want string) func(w http.ResponseWriter, r *http.Request) {
+ return func(w http.ResponseWriter, r *http.Request) {
+ buf := make([]byte, len(want))
+ _, err := io.ReadFull(r.Body, buf)
+ if err != nil {
+ t.Error(err)
+ return
+ }
+ if string(buf) != want {
+ t.Errorf("read %q; want %q", buf, want)
+ }
+ }
+}
+
+// TestServerWithCurl currently fails, hence the LenientCipherSuites test. See:
+// https://github.com/tatsuhiro-t/nghttp2/issues/140 &
+// http://sourceforge.net/p/curl/bugs/1472/
+func TestServerWithCurl(t *testing.T) { testServerWithCurl(t, false) }
+func TestServerWithCurl_LenientCipherSuites(t *testing.T) { testServerWithCurl(t, true) }
+
+func testServerWithCurl(t *testing.T, permitProhibitedCipherSuites bool) {
+ if runtime.GOOS != "linux" {
+ t.Skip("skipping Docker test when not on Linux; requires --net which won't work with boot2docker anyway")
+ }
+ if testing.Short() {
+ t.Skip("skipping curl test in short mode")
+ }
+ requireCurl(t)
+ const msg = "Hello from curl!\n"
+ ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Foo", "Bar")
+ w.Header().Set("Client-Proto", r.Proto)
+ io.WriteString(w, msg)
+ }))
+ ConfigureServer(ts.Config, &Server{
+ PermitProhibitedCipherSuites: permitProhibitedCipherSuites,
+ })
+ ts.TLS = ts.Config.TLSConfig // the httptest.Server has its own copy of this TLS config
+ ts.StartTLS()
+ defer ts.Close()
+
+ var gotConn int32
+ testHookOnConn = func() { atomic.StoreInt32(&gotConn, 1) }
+
+ t.Logf("Running test server for curl to hit at: %s", ts.URL)
+ container := curl(t, "--silent", "--http2", "--insecure", "-v", ts.URL)
+ defer kill(container)
+ resc := make(chan interface{}, 1)
+ go func() {
+ res, err := dockerLogs(container)
+ if err != nil {
+ resc <- err
+ } else {
+ resc <- res
+ }
+ }()
+ select {
+ case res := <-resc:
+ if err, ok := res.(error); ok {
+ t.Fatal(err)
+ }
+ body := string(res.([]byte))
+ // Search for both "key: value" and "key:value", since curl changed their format
+ // Our Dockerfile contains the latest version (no space), but just in case people
+ // didn't rebuild, check both.
+ if !strings.Contains(body, "foo: Bar") && !strings.Contains(body, "foo:Bar") {
+ t.Errorf("didn't see foo: Bar header")
+ t.Logf("Got: %s", body)
+ }
+ if !strings.Contains(body, "client-proto: HTTP/2") && !strings.Contains(body, "client-proto:HTTP/2") {
+ t.Errorf("didn't see client-proto: HTTP/2 header")
+ t.Logf("Got: %s", res)
+ }
+ if !strings.Contains(string(res.([]byte)), msg) {
+ t.Errorf("didn't see %q content", msg)
+ t.Logf("Got: %s", res)
+ }
+ case <-time.After(3 * time.Second):
+ t.Errorf("timeout waiting for curl")
+ }
+
+ if atomic.LoadInt32(&gotConn) == 0 {
+ t.Error("never saw an http2 connection")
+ }
+}
+
+var doh2load = flag.Bool("h2load", false, "Run h2load test")
+
+func TestServerWithH2Load(t *testing.T) {
+ if !*doh2load {
+ t.Skip("Skipping without --h2load flag.")
+ }
+ if runtime.GOOS != "linux" {
+ t.Skip("skipping Docker test when not on Linux; requires --net which won't work with boot2docker anyway")
+ }
+ requireH2load(t)
+
+ msg := strings.Repeat("Hello, h2load!\n", 5000)
+ ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, msg)
+ w.(http.Flusher).Flush()
+ io.WriteString(w, msg)
+ }))
+ ts.StartTLS()
+ defer ts.Close()
+
+ cmd := exec.Command("docker", "run", "--net=host", "--entrypoint=/usr/local/bin/h2load", "gohttp2/curl",
+ "-n100000", "-c100", "-m100", ts.URL)
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ if err := cmd.Run(); err != nil {
+ t.Fatal(err)
+ }
+}
+
+// Issue 12843
+func TestServerDoS_MaxHeaderListSize(t *testing.T) {
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {})
+ defer st.Close()
+
+ // shake hands
+ st.writePreface()
+ st.writeInitialSettings()
+ frameSize := defaultMaxReadFrameSize
+ var advHeaderListSize *uint32
+ st.wantSettings().ForeachSetting(func(s Setting) error {
+ switch s.ID {
+ case SettingMaxFrameSize:
+ if s.Val < minMaxFrameSize {
+ frameSize = minMaxFrameSize
+ } else if s.Val > maxFrameSize {
+ frameSize = maxFrameSize
+ } else {
+ frameSize = int(s.Val)
+ }
+ case SettingMaxHeaderListSize:
+ advHeaderListSize = &s.Val
+ }
+ return nil
+ })
+ st.writeSettingsAck()
+ st.wantSettingsAck()
+
+ if advHeaderListSize == nil {
+ t.Errorf("server didn't advertise a max header list size")
+ } else if *advHeaderListSize == 0 {
+ t.Errorf("server advertised a max header list size of 0")
+ }
+
+ st.encodeHeaderField(":method", "GET")
+ st.encodeHeaderField(":path", "/")
+ st.encodeHeaderField(":scheme", "https")
+ cookie := strings.Repeat("*", 4058)
+ st.encodeHeaderField("cookie", cookie)
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: st.headerBuf.Bytes(),
+ EndStream: true,
+ EndHeaders: false,
+ })
+
+ // Capture the short encoding of a duplicate ~4K cookie, now
+ // that we've already sent it once.
+ st.headerBuf.Reset()
+ st.encodeHeaderField("cookie", cookie)
+
+ // Now send 1MB of it.
+ const size = 1 << 20
+ b := bytes.Repeat(st.headerBuf.Bytes(), size/st.headerBuf.Len())
+ for len(b) > 0 {
+ chunk := b
+ if len(chunk) > frameSize {
+ chunk = chunk[:frameSize]
+ }
+ b = b[len(chunk):]
+ st.fr.WriteContinuation(1, len(b) == 0, chunk)
+ }
+
+ h := st.wantHeaders()
+ if !h.HeadersEnded() {
+ t.Fatalf("Got HEADERS without END_HEADERS set: %v", h)
+ }
+ headers := decodeHeader(t, h.HeaderBlockFragment())
+ want := [][2]string{
+ {":status", "431"},
+ {"content-type", "text/html; charset=utf-8"},
+ {"content-length", "63"},
+ }
+ if !reflect.DeepEqual(headers, want) {
+ t.Errorf("Headers mismatch.\n got: %q\nwant: %q\n", headers, want)
+ }
+}
+
+func TestCompressionErrorOnWrite(t *testing.T) {
+ const maxStrLen = 8 << 10
+ var serverConfig *http.Server
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ // No response body.
+ }, func(ts *httptest.Server) {
+ serverConfig = ts.Config
+ serverConfig.MaxHeaderBytes = maxStrLen
+ })
+ defer st.Close()
+ st.greet()
+
+ maxAllowed := st.sc.maxHeaderStringLen()
+
+ // Crank this up, now that we have a conn connected with the
+ // hpack.Decoder's max string length set has been initialized
+ // from the earlier low ~8K value. We want this higher so don't
+ // hit the max header list size. We only want to test hitting
+ // the max string size.
+ serverConfig.MaxHeaderBytes = 1 << 20
+
+ // First a request with a header that's exactly the max allowed size.
+ hbf := st.encodeHeader("foo", strings.Repeat("a", maxAllowed))
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: hbf,
+ EndStream: true,
+ EndHeaders: true,
+ })
+ h := st.wantHeaders()
+ if !h.HeadersEnded() || !h.StreamEnded() {
+ t.Errorf("Unexpected HEADER frame %v", h)
+ }
+
+ // And now send one that's just one byte too big.
+ hbf = st.encodeHeader("bar", strings.Repeat("b", maxAllowed+1))
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 3,
+ BlockFragment: hbf,
+ EndStream: true,
+ EndHeaders: true,
+ })
+ ga := st.wantGoAway()
+ if ga.ErrCode != ErrCodeCompression {
+ t.Errorf("GOAWAY err = %v; want ErrCodeCompression", ga.ErrCode)
+ }
+}
+
+func TestCompressionErrorOnClose(t *testing.T) {
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ // No response body.
+ })
+ defer st.Close()
+ st.greet()
+
+ hbf := st.encodeHeader("foo", "bar")
+ hbf = hbf[:len(hbf)-1] // truncate one byte from the end, so hpack.Decoder.Close fails.
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: 1,
+ BlockFragment: hbf,
+ EndStream: true,
+ EndHeaders: true,
+ })
+ ga := st.wantGoAway()
+ if ga.ErrCode != ErrCodeCompression {
+ t.Errorf("GOAWAY err = %v; want ErrCodeCompression", ga.ErrCode)
+ }
+}
+
+func BenchmarkServerGets(b *testing.B) {
+ b.ReportAllocs()
+
+ const msg = "Hello, world"
+ st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, msg)
+ })
+ defer st.Close()
+ st.greet()
+
+ // Give the server quota to reply. (plus it has the the 64KB)
+ if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil {
+ b.Fatal(err)
+ }
+
+ for i := 0; i < b.N; i++ {
+ id := 1 + uint32(i)*2
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: id,
+ BlockFragment: st.encodeHeader(),
+ EndStream: true,
+ EndHeaders: true,
+ })
+ st.wantHeaders()
+ df := st.wantData()
+ if !df.StreamEnded() {
+ b.Fatalf("DATA didn't have END_STREAM; got %v", df)
+ }
+ }
+}
+
+func BenchmarkServerPosts(b *testing.B) {
+ b.ReportAllocs()
+
+ const msg = "Hello, world"
+ st := newServerTester(b, func(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, msg)
+ })
+ defer st.Close()
+ st.greet()
+
+ // Give the server quota to reply. (plus it has the the 64KB)
+ if err := st.fr.WriteWindowUpdate(0, uint32(b.N*len(msg))); err != nil {
+ b.Fatal(err)
+ }
+
+ for i := 0; i < b.N; i++ {
+ id := 1 + uint32(i)*2
+ st.writeHeaders(HeadersFrameParam{
+ StreamID: id,
+ BlockFragment: st.encodeHeader(":method", "POST"),
+ EndStream: false,
+ EndHeaders: true,
+ })
+ st.writeData(id, true, nil)
+ st.wantHeaders()
+ df := st.wantData()
+ if !df.StreamEnded() {
+ b.Fatalf("DATA didn't have END_STREAM; got %v", df)
+ }
+ }
+}
+
+// go-fuzz bug, originally reported at https://github.com/bradfitz/http2/issues/53
+// Verify we don't hang.
+func TestIssue53(t *testing.T) {
+ const data = "PRI * HTTP/2.0\r\n\r\nSM" +
+ "\r\n\r\n\x00\x00\x00\x01\ainfinfin\ad"
+ s := &http.Server{
+ ErrorLog: log.New(io.MultiWriter(stderrv(), twriter{t: t}), "", log.LstdFlags),
+ }
+ s2 := &Server{MaxReadFrameSize: 1 << 16, PermitProhibitedCipherSuites: true}
+ c := &issue53Conn{[]byte(data), false, false}
+ s2.handleConn(s, c, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
+ w.Write([]byte("hello"))
+ }))
+ if !c.closed {
+ t.Fatal("connection is not closed")
+ }
+}
+
+type issue53Conn struct {
+ data []byte
+ closed bool
+ written bool
+}
+
+func (c *issue53Conn) Read(b []byte) (n int, err error) {
+ if len(c.data) == 0 {
+ return 0, io.EOF
+ }
+ n = copy(b, c.data)
+ c.data = c.data[n:]
+ return
+}
+
+func (c *issue53Conn) Write(b []byte) (n int, err error) {
+ c.written = true
+ return len(b), nil
+}
+
+func (c *issue53Conn) Close() error {
+ c.closed = true
+ return nil
+}
+
+func (c *issue53Conn) LocalAddr() net.Addr { return &net.TCPAddr{net.IP{127, 0, 0, 1}, 49706, ""} }
+func (c *issue53Conn) RemoteAddr() net.Addr { return &net.TCPAddr{net.IP{127, 0, 0, 1}, 49706, ""} }
+func (c *issue53Conn) SetDeadline(t time.Time) error { return nil }
+func (c *issue53Conn) SetReadDeadline(t time.Time) error { return nil }
+func (c *issue53Conn) SetWriteDeadline(t time.Time) error { return nil }
+
+// golang.org/issue/12895
+func TestConfigureServer(t *testing.T) {
+ tests := []struct {
+ name string
+ in http.Server
+ wantErr string
+ }{
+ {
+ name: "empty server",
+ in: http.Server{},
+ },
+ {
+ name: "just the required cipher suite",
+ in: http.Server{
+ TLSConfig: &tls.Config{
+ CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
+ },
+ },
+ },
+ {
+ name: "missing required cipher suite",
+ in: http.Server{
+ TLSConfig: &tls.Config{
+ CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384},
+ },
+ },
+ wantErr: "is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
+ },
+ {
+ name: "required after bad",
+ in: http.Server{
+ TLSConfig: &tls.Config{
+ CipherSuites: []uint16{tls.TLS_RSA_WITH_RC4_128_SHA, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
+ },
+ },
+ wantErr: "contains an HTTP/2-approved cipher suite (0xc02f), but it comes after",
+ },
+ {
+ name: "bad after required",
+ in: http.Server{
+ TLSConfig: &tls.Config{
+ CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, tls.TLS_RSA_WITH_RC4_128_SHA},
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ err := ConfigureServer(&tt.in, nil)
+ if (err != nil) != (tt.wantErr != "") {
+ if tt.wantErr != "" {
+ t.Errorf("%s: success, but want error", tt.name)
+ } else {
+ t.Errorf("%s: unexpected error: %v", tt.name, err)
+ }
+ }
+ if err != nil && tt.wantErr != "" && !strings.Contains(err.Error(), tt.wantErr) {
+ t.Errorf("%s: err = %v; want substring %q", tt.name, err, tt.wantErr)
+ }
+ if err == nil && !tt.in.TLSConfig.PreferServerCipherSuites {
+ t.Error("%s: PreferServerCipherSuite is false; want true", tt.name)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml b/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml
new file mode 100644
index 00000000..31a84bed
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml
@@ -0,0 +1,5021 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hypertext Transfer Protocol version 2
+
+
+ Twist
+
+ mbelshe@chromium.org
+
+
+
+
+ Google, Inc
+
+ fenix@google.com
+
+
+
+
+ Mozilla
+
+
+ 331 E Evelyn Street
+ Mountain View
+ CA
+ 94041
+ US
+
+ martin.thomson@gmail.com
+
+
+
+
+ Applications
+ HTTPbis
+ HTTP
+ SPDY
+ Web
+
+
+
+ This specification describes an optimized expression of the semantics of the Hypertext
+ Transfer Protocol (HTTP). HTTP/2 enables a more efficient use of network resources and a
+ reduced perception of latency by introducing header field compression and allowing multiple
+ concurrent messages on the same connection. It also introduces unsolicited push of
+ representations from servers to clients.
+
+
+ This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.
+ HTTP's existing semantics remain unchanged.
+
+
+
+
+
+ Discussion of this draft takes place on the HTTPBIS working group mailing list
+ (ietf-http-wg@w3.org), which is archived at .
+
+
+ Working Group information can be found at ; that specific to HTTP/2 are at .
+
+
+ The changes in this draft are summarized in .
+
+
+
+
+
+
+
+
+
+ The Hypertext Transfer Protocol (HTTP) is a wildly successful protocol. However, the
+ HTTP/1.1 message format ( ) has
+ several characteristics that have a negative overall effect on application performance
+ today.
+
+
+ In particular, HTTP/1.0 allowed only one request to be outstanding at a time on a given
+ TCP connection. HTTP/1.1 added request pipelining, but this only partially addressed
+ request concurrency and still suffers from head-of-line blocking. Therefore, HTTP/1.1
+ clients that need to make many requests typically use multiple connections to a server in
+ order to achieve concurrency and thereby reduce latency.
+
+
+ Furthermore, HTTP header fields are often repetitive and verbose, causing unnecessary
+ network traffic, as well as causing the initial TCP congestion
+ window to quickly fill. This can result in excessive latency when multiple requests are
+ made on a new TCP connection.
+
+
+ HTTP/2 addresses these issues by defining an optimized mapping of HTTP's semantics to an
+ underlying connection. Specifically, it allows interleaving of request and response
+ messages on the same connection and uses an efficient coding for HTTP header fields. It
+ also allows prioritization of requests, letting more important requests complete more
+ quickly, further improving performance.
+
+
+ The resulting protocol is more friendly to the network, because fewer TCP connections can
+ be used in comparison to HTTP/1.x. This means less competition with other flows, and
+ longer-lived connections, which in turn leads to better utilization of available network
+ capacity.
+
+
+ Finally, HTTP/2 also enables more efficient processing of messages through use of binary
+ message framing.
+
+
+
+
+
+ HTTP/2 provides an optimized transport for HTTP semantics. HTTP/2 supports all of the core
+ features of HTTP/1.1, but aims to be more efficient in several ways.
+
+
+ The basic protocol unit in HTTP/2 is a frame . Each frame
+ type serves a different purpose. For example, HEADERS and
+ DATA frames form the basis of HTTP requests and
+ responses ; other frame types like SETTINGS ,
+ WINDOW_UPDATE , and PUSH_PROMISE are used in support of other
+ HTTP/2 features.
+
+
+ Multiplexing of requests is achieved by having each HTTP request-response exchange
+ associated with its own stream . Streams are largely
+ independent of each other, so a blocked or stalled request or response does not prevent
+ progress on other streams.
+
+
+ Flow control and prioritization ensure that it is possible to efficiently use multiplexed
+ streams. Flow control helps to ensure that only data that
+ can be used by a receiver is transmitted. Prioritization ensures that limited resources can be directed
+ to the most important streams first.
+
+
+ HTTP/2 adds a new interaction mode, whereby a server can push
+ responses to a client . Server push allows a server to speculatively send a client
+ data that the server anticipates the client will need, trading off some network usage
+ against a potential latency gain. The server does this by synthesizing a request, which it
+ sends as a PUSH_PROMISE frame. The server is then able to send a response to
+ the synthetic request on a separate stream.
+
+
+ Frames that contain HTTP header fields are compressed .
+ HTTP requests can be highly redundant, so compression can reduce the size of requests and
+ responses significantly.
+
+
+
+
+ The HTTP/2 specification is split into four parts:
+
+
+ Starting HTTP/2 covers how an HTTP/2 connection is
+ initiated.
+
+
+ The framing and streams layers describe the way HTTP/2 frames are
+ structured and formed into multiplexed streams.
+
+
+ Frame and error
+ definitions include details of the frame and error types used in HTTP/2.
+
+
+ HTTP mappings and additional
+ requirements describe how HTTP semantics are expressed using frames and
+ streams.
+
+
+
+
+ While some of the frame and stream layer concepts are isolated from HTTP, this
+ specification does not define a completely generic framing layer. The framing and streams
+ layers are tailored to the needs of the HTTP protocol and server push.
+
+
+
+
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD
+ NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as
+ described in RFC 2119 .
+
+
+ All numeric values are in network byte order. Values are unsigned unless otherwise
+ indicated. Literal values are provided in decimal or hexadecimal as appropriate.
+ Hexadecimal literals are prefixed with 0x to distinguish them
+ from decimal literals.
+
+
+ The following terms are used:
+
+
+ The endpoint initiating the HTTP/2 connection.
+
+
+ A transport-layer connection between two endpoints.
+
+
+ An error that affects the entire HTTP/2 connection.
+
+
+ Either the client or server of the connection.
+
+
+ The smallest unit of communication within an HTTP/2 connection, consisting of a header
+ and a variable-length sequence of octets structured according to the frame type.
+
+
+ An endpoint. When discussing a particular endpoint, "peer" refers to the endpoint
+ that is remote to the primary subject of discussion.
+
+
+ An endpoint that is receiving frames.
+
+
+ An endpoint that is transmitting frames.
+
+
+ The endpoint which did not initiate the HTTP/2 connection.
+
+
+ A bi-directional flow of frames across a virtual channel within the HTTP/2 connection.
+
+
+ An error on the individual HTTP/2 stream.
+
+
+
+
+ Finally, the terms "gateway", "intermediary", "proxy", and "tunnel" are defined
+ in .
+
+
+
+
+
+
+ An HTTP/2 connection is an application layer protocol running on top of a TCP connection
+ ( ). The client is the TCP connection initiator.
+
+
+ HTTP/2 uses the same "http" and "https" URI schemes used by HTTP/1.1. HTTP/2 shares the same
+ default port numbers: 80 for "http" URIs and 443 for "https" URIs. As a result,
+ implementations processing requests for target resource URIs like http://example.org/foo or https://example.com/bar are required to first discover whether the
+ upstream server (the immediate peer to which the client wishes to establish a connection)
+ supports HTTP/2.
+
+
+
+ The means by which support for HTTP/2 is determined is different for "http" and "https"
+ URIs. Discovery for "http" URIs is described in . Discovery
+ for "https" URIs is described in .
+
+
+
+
+ The protocol defined in this document has two identifiers.
+
+
+
+ The string "h2" identifies the protocol where HTTP/2 uses TLS . This identifier is used in the TLS application layer protocol negotiation extension (ALPN)
+ field and any place that HTTP/2 over TLS is identified.
+
+
+ The "h2" string is serialized into an ALPN protocol identifier as the two octet
+ sequence: 0x68, 0x32.
+
+
+
+
+ The string "h2c" identifies the protocol where HTTP/2 is run over cleartext TCP.
+ This identifier is used in the HTTP/1.1 Upgrade header field and any place that
+ HTTP/2 over TCP is identified.
+
+
+
+
+
+ Negotiating "h2" or "h2c" implies the use of the transport, security, framing and message
+ semantics described in this document.
+
+
+ RFC Editor's Note: please remove the remainder of this section prior to the
+ publication of a final version of this document.
+
+
+ Only implementations of the final, published RFC can identify themselves as "h2" or "h2c".
+ Until such an RFC exists, implementations MUST NOT identify themselves using these
+ strings.
+
+
+ Examples and text throughout the rest of this document use "h2" as a matter of
+ editorial convenience only. Implementations of draft versions MUST NOT identify using
+ this string.
+
+
+ Implementations of draft versions of the protocol MUST add the string "-" and the
+ corresponding draft number to the identifier. For example, draft-ietf-httpbis-http2-11
+ over TLS is identified using the string "h2-11".
+
+
+ Non-compatible experiments that are based on these draft versions MUST append the string
+ "-" and an experiment name to the identifier. For example, an experimental implementation
+ of packet mood-based encoding based on draft-ietf-httpbis-http2-09 might identify itself
+ as "h2-09-emo". Note that any label MUST conform to the "token" syntax defined in
+ . Experimenters are
+ encouraged to coordinate their experiments on the ietf-http-wg@w3.org mailing list.
+
+
+
+
+
+ A client that makes a request for an "http" URI without prior knowledge about support for
+ HTTP/2 uses the HTTP Upgrade mechanism ( ). The client makes an HTTP/1.1 request that includes an Upgrade
+ header field identifying HTTP/2 with the "h2c" token. The HTTP/1.1 request MUST include
+ exactly one HTTP2-Settings header field.
+
+
+ For example:
+
+
+]]>
+
+
+ Requests that contain an entity body MUST be sent in their entirety before the client can
+ send HTTP/2 frames. This means that a large request entity can block the use of the
+ connection until it is completely sent.
+
+
+ If concurrency of an initial request with subsequent requests is important, an OPTIONS
+ request can be used to perform the upgrade to HTTP/2, at the cost of an additional
+ round-trip.
+
+
+ A server that does not support HTTP/2 can respond to the request as though the Upgrade
+ header field were absent:
+
+
+
+HTTP/1.1 200 OK
+Content-Length: 243
+Content-Type: text/html
+
+...
+
+
+
+ A server MUST ignore a "h2" token in an Upgrade header field. Presence of a token with
+ "h2" implies HTTP/2 over TLS, which is instead negotiated as described in .
+
+
+ A server that supports HTTP/2 can accept the upgrade with a 101 (Switching Protocols)
+ response. After the empty line that terminates the 101 response, the server can begin
+ sending HTTP/2 frames. These frames MUST include a response to the request that initiated
+ the Upgrade.
+
+
+
+
+ For example:
+
+
+HTTP/1.1 101 Switching Protocols
+Connection: Upgrade
+Upgrade: h2c
+
+[ HTTP/2 connection ...
+
+
+
+ The first HTTP/2 frame sent by the server is a SETTINGS frame ( ) as the server connection preface ( ). Upon receiving the 101 response, the client sends a connection preface , which includes a
+ SETTINGS frame.
+
+
+ The HTTP/1.1 request that is sent prior to upgrade is assigned stream identifier 1 and is
+ assigned default priority values . Stream 1 is
+ implicitly half closed from the client toward the server, since the request is completed
+ as an HTTP/1.1 request. After commencing the HTTP/2 connection, stream 1 is used for the
+ response.
+
+
+
+
+ A request that upgrades from HTTP/1.1 to HTTP/2 MUST include exactly one HTTP2-Settings header field. The HTTP2-Settings header field is a connection-specific header field
+ that includes parameters that govern the HTTP/2 connection, provided in anticipation of
+ the server accepting the request to upgrade.
+
+
+
+
+
+ A server MUST NOT upgrade the connection to HTTP/2 if this header field is not present,
+ or if more than one is present. A server MUST NOT send this header field.
+
+
+
+ The content of the HTTP2-Settings header field is the
+ payload of a SETTINGS frame ( ), encoded as a
+ base64url string (that is, the URL- and filename-safe Base64 encoding described in , with any trailing '=' characters omitted). The
+ ABNF production for token68 is
+ defined in .
+
+
+ Since the upgrade is only intended to apply to the immediate connection, a client
+ sending HTTP2-Settings MUST also send HTTP2-Settings as a connection option in the Connection header field to prevent it from being forwarded
+ downstream.
+
+
+ A server decodes and interprets these values as it would any other
+ SETTINGS frame. Acknowledgement of the
+ SETTINGS parameters is not necessary, since a 101 response serves as implicit
+ acknowledgment. Providing these values in the Upgrade request gives a client an
+ opportunity to provide parameters prior to receiving any frames from the server.
+
+
+
+
+
+
+ A client that makes a request to an "https" URI uses TLS
+ with the application layer protocol negotiation extension .
+
+
+ HTTP/2 over TLS uses the "h2" application token. The "h2c" token MUST NOT be sent by a
+ client or selected by a server.
+
+
+ Once TLS negotiation is complete, both the client and the server send a connection preface .
+
+
+
+
+
+ A client can learn that a particular server supports HTTP/2 by other means. For example,
+ describes a mechanism for advertising this capability.
+
+
+ A client MAY immediately send HTTP/2 frames to a server that is known to support HTTP/2,
+ after the connection preface ; a server can
+ identify such a connection by the presence of the connection preface. This only affects
+ the establishment of HTTP/2 connections over cleartext TCP; implementations that support
+ HTTP/2 over TLS MUST use protocol negotiation in TLS .
+
+
+ Without additional information, prior support for HTTP/2 is not a strong signal that a
+ given server will support HTTP/2 for future connections. For example, it is possible for
+ server configurations to change, for configurations to differ between instances in
+ clustered servers, or for network conditions to change.
+
+
+
+
+
+ Upon establishment of a TCP connection and determination that HTTP/2 will be used by both
+ peers, each endpoint MUST send a connection preface as a final confirmation and to
+ establish the initial SETTINGS parameters for the HTTP/2 connection. The client and
+ server each send a different connection preface.
+
+
+ The client connection preface starts with a sequence of 24 octets, which in hex notation
+ are:
+
+
+
+
+
+ (the string PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n ). This sequence
+ is followed by a SETTINGS frame ( ). The
+ SETTINGS frame MAY be empty. The client sends the client connection
+ preface immediately upon receipt of a 101 Switching Protocols response (indicating a
+ successful upgrade), or as the first application data octets of a TLS connection. If
+ starting an HTTP/2 connection with prior knowledge of server support for the protocol, the
+ client connection preface is sent upon connection establishment.
+
+
+
+
+ The client connection preface is selected so that a large proportion of HTTP/1.1 or
+ HTTP/1.0 servers and intermediaries do not attempt to process further frames. Note
+ that this does not address the concerns raised in .
+
+
+
+
+ The server connection preface consists of a potentially empty SETTINGS
+ frame ( ) that MUST be the first frame the server sends in the
+ HTTP/2 connection.
+
+
+ The SETTINGS frames received from a peer as part of the connection preface
+ MUST be acknowledged (see ) after sending the connection
+ preface.
+
+
+ To avoid unnecessary latency, clients are permitted to send additional frames to the
+ server immediately after sending the client connection preface, without waiting to receive
+ the server connection preface. It is important to note, however, that the server
+ connection preface SETTINGS frame might include parameters that necessarily
+ alter how a client is expected to communicate with the server. Upon receiving the
+ SETTINGS frame, the client is expected to honor any parameters established.
+ In some configurations, it is possible for the server to transmit SETTINGS
+ before the client sends additional frames, providing an opportunity to avoid this issue.
+
+
+ Clients and servers MUST treat an invalid connection preface as a connection error of type
+ PROTOCOL_ERROR . A GOAWAY frame ( )
+ MAY be omitted in this case, since an invalid preface indicates that the peer is not using
+ HTTP/2.
+
+
+
+
+
+
+ Once the HTTP/2 connection is established, endpoints can begin exchanging frames.
+
+
+
+
+ All frames begin with a fixed 9-octet header followed by a variable-length payload.
+
+
+
+
+
+ The fields of the frame header are defined as:
+
+
+
+ The length of the frame payload expressed as an unsigned 24-bit integer. Values
+ greater than 214 (16,384) MUST NOT be sent unless the receiver has
+ set a larger value for SETTINGS_MAX_FRAME_SIZE .
+
+
+ The 9 octets of the frame header are not included in this value.
+
+
+
+
+ The 8-bit type of the frame. The frame type determines the format and semantics of
+ the frame. Implementations MUST ignore and discard any frame that has a type that
+ is unknown.
+
+
+
+
+ An 8-bit field reserved for frame-type specific boolean flags.
+
+
+ Flags are assigned semantics specific to the indicated frame type. Flags that have
+ no defined semantics for a particular frame type MUST be ignored, and MUST be left
+ unset (0) when sending.
+
+
+
+
+ A reserved 1-bit field. The semantics of this bit are undefined and the bit MUST
+ remain unset (0) when sending and MUST be ignored when receiving.
+
+
+
+
+ A 31-bit stream identifier (see ). The value 0 is
+ reserved for frames that are associated with the connection as a whole as opposed to
+ an individual stream.
+
+
+
+
+
+ The structure and content of the frame payload is dependent entirely on the frame type.
+
+
+
+
+
+ The size of a frame payload is limited by the maximum size that a receiver advertises in
+ the SETTINGS_MAX_FRAME_SIZE setting. This setting can have any value
+ between 214 (16,384) and 224 -1 (16,777,215) octets,
+ inclusive.
+
+
+ All implementations MUST be capable of receiving and minimally processing frames up to
+ 214 octets in length, plus the 9 octet frame
+ header . The size of the frame header is not included when describing frame sizes.
+
+
+ Certain frame types, such as PING , impose additional limits
+ on the amount of payload data allowed.
+
+
+
+
+ If a frame size exceeds any defined limit, or is too small to contain mandatory frame
+ data, the endpoint MUST send a FRAME_SIZE_ERROR error. A frame size error
+ in a frame that could alter the state of the entire connection MUST be treated as a connection error ; this includes any frame carrying
+ a header block (that is, HEADERS ,
+ PUSH_PROMISE , and CONTINUATION ), SETTINGS ,
+ and any WINDOW_UPDATE frame with a stream identifier of 0.
+
+
+ Endpoints are not obligated to use all available space in a frame. Responsiveness can be
+ improved by using frames that are smaller than the permitted maximum size. Sending large
+ frames can result in delays in sending time-sensitive frames (such
+ RST_STREAM , WINDOW_UPDATE , or PRIORITY )
+ which if blocked by the transmission of a large frame, could affect performance.
+
+
+
+
+
+ Just as in HTTP/1, a header field in HTTP/2 is a name with one or more associated values.
+ They are used within HTTP request and response messages as well as server push operations
+ (see ).
+
+
+ Header lists are collections of zero or more header fields. When transmitted over a
+ connection, a header list is serialized into a header block using HTTP Header Compression . The serialized header block is then
+ divided into one or more octet sequences, called header block fragments, and transmitted
+ within the payload of HEADERS , PUSH_PROMISE or CONTINUATION frames.
+
+
+ The Cookie header field is treated specially by the HTTP
+ mapping (see ).
+
+
+ A receiving endpoint reassembles the header block by concatenating its fragments, then
+ decompresses the block to reconstruct the header list.
+
+
+ A complete header block consists of either:
+
+
+ a single HEADERS or PUSH_PROMISE frame,
+ with the END_HEADERS flag set, or
+
+
+ a HEADERS or PUSH_PROMISE frame with the END_HEADERS
+ flag cleared and one or more CONTINUATION frames,
+ where the last CONTINUATION frame has the END_HEADERS flag set.
+
+
+
+
+ Header compression is stateful. One compression context and one decompression context is
+ used for the entire connection. Each header block is processed as a discrete unit.
+ Header blocks MUST be transmitted as a contiguous sequence of frames, with no interleaved
+ frames of any other type or from any other stream. The last frame in a sequence of
+ HEADERS or CONTINUATION frames MUST have the END_HEADERS
+ flag set. The last frame in a sequence of PUSH_PROMISE or
+ CONTINUATION frames MUST have the END_HEADERS flag set. This allows a
+ header block to be logically equivalent to a single frame.
+
+
+ Header block fragments can only be sent as the payload of HEADERS ,
+ PUSH_PROMISE or CONTINUATION frames, because these frames
+ carry data that can modify the compression context maintained by a receiver. An endpoint
+ receiving HEADERS , PUSH_PROMISE or
+ CONTINUATION frames MUST reassemble header blocks and perform decompression
+ even if the frames are to be discarded. A receiver MUST terminate the connection with a
+ connection error of type
+ COMPRESSION_ERROR if it does not decompress a header block.
+
+
+
+
+
+
+ A "stream" is an independent, bi-directional sequence of frames exchanged between the client
+ and server within an HTTP/2 connection. Streams have several important characteristics:
+
+
+ A single HTTP/2 connection can contain multiple concurrently open streams, with either
+ endpoint interleaving frames from multiple streams.
+
+
+ Streams can be established and used unilaterally or shared by either the client or
+ server.
+
+
+ Streams can be closed by either endpoint.
+
+
+ The order in which frames are sent on a stream is significant. Recipients process frames
+ in the order they are received. In particular, the order of HEADERS ,
+ and DATA frames is semantically significant.
+
+
+ Streams are identified by an integer. Stream identifiers are assigned to streams by the
+ endpoint initiating the stream.
+
+
+
+
+
+
+ The lifecycle of a stream is shown in .
+
+
+
+
+ | |<-----------' |
+ | R | closed | R |
+ `-------------------->| |<--------------------'
+ +--------+
+
+ H: HEADERS frame (with implied CONTINUATIONs)
+ PP: PUSH_PROMISE frame (with implied CONTINUATIONs)
+ ES: END_STREAM flag
+ R: RST_STREAM frame
+]]>
+
+
+
+
+ Note that this diagram shows stream state transitions and the frames and flags that affect
+ those transitions only. In this regard, CONTINUATION frames do not result
+ in state transitions; they are effectively part of the HEADERS or
+ PUSH_PROMISE that they follow. For this purpose, the END_STREAM flag is
+ processed as a separate event to the frame that bears it; a HEADERS frame
+ with the END_STREAM flag set can cause two state transitions.
+
+
+ Both endpoints have a subjective view of the state of a stream that could be different
+ when frames are in transit. Endpoints do not coordinate the creation of streams; they are
+ created unilaterally by either endpoint. The negative consequences of a mismatch in
+ states are limited to the "closed" state after sending RST_STREAM , where
+ frames might be received for some time after closing.
+
+
+ Streams have the following states:
+
+
+
+
+
+ All streams start in the "idle" state. In this state, no frames have been
+ exchanged.
+
+
+ The following transitions are valid from this state:
+
+
+ Sending or receiving a HEADERS frame causes the stream to become
+ "open". The stream identifier is selected as described in . The same HEADERS frame can also
+ cause a stream to immediately become "half closed".
+
+
+ Sending a PUSH_PROMISE frame marks the associated stream for
+ later use. The stream state for the reserved stream transitions to "reserved
+ (local)".
+
+
+ Receiving a PUSH_PROMISE frame marks the associated stream as
+ reserved by the remote peer. The state of the stream becomes "reserved
+ (remote)".
+
+
+
+
+ Receiving any frames other than HEADERS or
+ PUSH_PROMISE on a stream in this state MUST be treated as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+
+
+ A stream in the "reserved (local)" state is one that has been promised by sending a
+ PUSH_PROMISE frame. A PUSH_PROMISE frame reserves an
+ idle stream by associating the stream with an open stream that was initiated by the
+ remote peer (see ).
+
+
+ In this state, only the following transitions are possible:
+
+
+ The endpoint can send a HEADERS frame. This causes the stream to
+ open in a "half closed (remote)" state.
+
+
+ Either endpoint can send a RST_STREAM frame to cause the stream
+ to become "closed". This releases the stream reservation.
+
+
+
+
+ An endpoint MUST NOT send any type of frame other than HEADERS or
+ RST_STREAM in this state.
+
+
+ A PRIORITY frame MAY be received in this state. Receiving any type
+ of frame other than RST_STREAM or PRIORITY on a stream
+ in this state MUST be treated as a connection
+ error of type PROTOCOL_ERROR .
+
+
+
+
+
+
+ A stream in the "reserved (remote)" state has been reserved by a remote peer.
+
+
+ In this state, only the following transitions are possible:
+
+
+ Receiving a HEADERS frame causes the stream to transition to
+ "half closed (local)".
+
+
+ Either endpoint can send a RST_STREAM frame to cause the stream
+ to become "closed". This releases the stream reservation.
+
+
+
+
+ An endpoint MAY send a PRIORITY frame in this state to reprioritize
+ the reserved stream. An endpoint MUST NOT send any type of frame other than
+ RST_STREAM , WINDOW_UPDATE , or PRIORITY
+ in this state.
+
+
+ Receiving any type of frame other than HEADERS or
+ RST_STREAM on a stream in this state MUST be treated as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+
+
+ A stream in the "open" state may be used by both peers to send frames of any type.
+ In this state, sending peers observe advertised stream
+ level flow control limits .
+
+
+ From this state either endpoint can send a frame with an END_STREAM flag set, which
+ causes the stream to transition into one of the "half closed" states: an endpoint
+ sending an END_STREAM flag causes the stream state to become "half closed (local)";
+ an endpoint receiving an END_STREAM flag causes the stream state to become "half
+ closed (remote)".
+
+
+ Either endpoint can send a RST_STREAM frame from this state, causing
+ it to transition immediately to "closed".
+
+
+
+
+
+
+ A stream that is in the "half closed (local)" state cannot be used for sending
+ frames. Only WINDOW_UPDATE , PRIORITY and
+ RST_STREAM frames can be sent in this state.
+
+
+ A stream transitions from this state to "closed" when a frame that contains an
+ END_STREAM flag is received, or when either peer sends a RST_STREAM
+ frame.
+
+
+ A receiver can ignore WINDOW_UPDATE frames in this state, which might
+ arrive for a short period after a frame bearing the END_STREAM flag is sent.
+
+
+ PRIORITY frames received in this state are used to reprioritize
+ streams that depend on the current stream.
+
+
+
+
+
+
+ A stream that is "half closed (remote)" is no longer being used by the peer to send
+ frames. In this state, an endpoint is no longer obligated to maintain a receiver
+ flow control window if it performs flow control.
+
+
+ If an endpoint receives additional frames for a stream that is in this state, other
+ than WINDOW_UPDATE , PRIORITY or
+ RST_STREAM , it MUST respond with a stream error of type
+ STREAM_CLOSED .
+
+
+ A stream that is "half closed (remote)" can be used by the endpoint to send frames
+ of any type. In this state, the endpoint continues to observe advertised stream level flow control limits .
+
+
+ A stream can transition from this state to "closed" by sending a frame that contains
+ an END_STREAM flag, or when either peer sends a RST_STREAM frame.
+
+
+
+
+
+
+ The "closed" state is the terminal state.
+
+
+ An endpoint MUST NOT send frames other than PRIORITY on a closed
+ stream. An endpoint that receives any frame other than PRIORITY
+ after receiving a RST_STREAM MUST treat that as a stream error of type
+ STREAM_CLOSED . Similarly, an endpoint that receives any frames after
+ receiving a frame with the END_STREAM flag set MUST treat that as a connection error of type
+ STREAM_CLOSED , unless the frame is permitted as described below.
+
+
+ WINDOW_UPDATE or RST_STREAM frames can be received in
+ this state for a short period after a DATA or HEADERS
+ frame containing an END_STREAM flag is sent. Until the remote peer receives and
+ processes RST_STREAM or the frame bearing the END_STREAM flag, it
+ might send frames of these types. Endpoints MUST ignore
+ WINDOW_UPDATE or RST_STREAM frames received in this
+ state, though endpoints MAY choose to treat frames that arrive a significant time
+ after sending END_STREAM as a connection
+ error of type PROTOCOL_ERROR .
+
+
+ PRIORITY frames can be sent on closed streams to prioritize streams
+ that are dependent on the closed stream. Endpoints SHOULD process
+ PRIORITY frame, though they can be ignored if the stream has been
+ removed from the dependency tree (see ).
+
+
+ If this state is reached as a result of sending a RST_STREAM frame,
+ the peer that receives the RST_STREAM might have already sent - or
+ enqueued for sending - frames on the stream that cannot be withdrawn. An endpoint
+ MUST ignore frames that it receives on closed streams after it has sent a
+ RST_STREAM frame. An endpoint MAY choose to limit the period over
+ which it ignores frames and treat frames that arrive after this time as being in
+ error.
+
+
+ Flow controlled frames (i.e., DATA ) received after sending
+ RST_STREAM are counted toward the connection flow control window.
+ Even though these frames might be ignored, because they are sent before the sender
+ receives the RST_STREAM , the sender will consider the frames to count
+ against the flow control window.
+
+
+ An endpoint might receive a PUSH_PROMISE frame after it sends
+ RST_STREAM . PUSH_PROMISE causes a stream to become
+ "reserved" even if the associated stream has been reset. Therefore, a
+ RST_STREAM is needed to close an unwanted promised stream.
+
+
+
+
+
+ In the absence of more specific guidance elsewhere in this document, implementations
+ SHOULD treat the receipt of a frame that is not expressly permitted in the description of
+ a state as a connection error of type
+ PROTOCOL_ERROR . Frame of unknown types are ignored.
+
+
+ An example of the state transitions for an HTTP request/response exchange can be found in
+ . An example of the state transitions for server push can be
+ found in and .
+
+
+
+
+ Streams are identified with an unsigned 31-bit integer. Streams initiated by a client
+ MUST use odd-numbered stream identifiers; those initiated by the server MUST use
+ even-numbered stream identifiers. A stream identifier of zero (0x0) is used for
+ connection control messages; the stream identifier zero cannot be used to establish a
+ new stream.
+
+
+ HTTP/1.1 requests that are upgraded to HTTP/2 (see ) are
+ responded to with a stream identifier of one (0x1). After the upgrade
+ completes, stream 0x1 is "half closed (local)" to the client. Therefore, stream 0x1
+ cannot be selected as a new stream identifier by a client that upgrades from HTTP/1.1.
+
+
+ The identifier of a newly established stream MUST be numerically greater than all
+ streams that the initiating endpoint has opened or reserved. This governs streams that
+ are opened using a HEADERS frame and streams that are reserved using
+ PUSH_PROMISE . An endpoint that receives an unexpected stream identifier
+ MUST respond with a connection error of
+ type PROTOCOL_ERROR .
+
+
+ The first use of a new stream identifier implicitly closes all streams in the "idle"
+ state that might have been initiated by that peer with a lower-valued stream identifier.
+ For example, if a client sends a HEADERS frame on stream 7 without ever
+ sending a frame on stream 5, then stream 5 transitions to the "closed" state when the
+ first frame for stream 7 is sent or received.
+
+
+ Stream identifiers cannot be reused. Long-lived connections can result in an endpoint
+ exhausting the available range of stream identifiers. A client that is unable to
+ establish a new stream identifier can establish a new connection for new streams. A
+ server that is unable to establish a new stream identifier can send a
+ GOAWAY frame so that the client is forced to open a new connection for
+ new streams.
+
+
+
+
+
+ A peer can limit the number of concurrently active streams using the
+ SETTINGS_MAX_CONCURRENT_STREAMS parameter (see ) within a SETTINGS frame. The maximum concurrent
+ streams setting is specific to each endpoint and applies only to the peer that receives
+ the setting. That is, clients specify the maximum number of concurrent streams the
+ server can initiate, and servers specify the maximum number of concurrent streams the
+ client can initiate.
+
+
+ Streams that are in the "open" state, or either of the "half closed" states count toward
+ the maximum number of streams that an endpoint is permitted to open. Streams in any of
+ these three states count toward the limit advertised in the
+ SETTINGS_MAX_CONCURRENT_STREAMS setting. Streams in either of the
+ "reserved" states do not count toward the stream limit.
+
+
+ Endpoints MUST NOT exceed the limit set by their peer. An endpoint that receives a
+ HEADERS frame that causes their advertised concurrent stream limit to be
+ exceeded MUST treat this as a stream error . An
+ endpoint that wishes to reduce the value of
+ SETTINGS_MAX_CONCURRENT_STREAMS to a value that is below the current
+ number of open streams can either close streams that exceed the new value or allow
+ streams to complete.
+
+
+
+
+
+
+ Using streams for multiplexing introduces contention over use of the TCP connection,
+ resulting in blocked streams. A flow control scheme ensures that streams on the same
+ connection do not destructively interfere with each other. Flow control is used for both
+ individual streams and for the connection as a whole.
+
+
+ HTTP/2 provides for flow control through use of the WINDOW_UPDATE frame .
+
+
+
+
+ HTTP/2 stream flow control aims to allow a variety of flow control algorithms to be
+ used without requiring protocol changes. Flow control in HTTP/2 has the following
+ characteristics:
+
+
+ Flow control is specific to a connection; i.e., it is "hop-by-hop", not
+ "end-to-end".
+
+
+ Flow control is based on window update frames. Receivers advertise how many octets
+ they are prepared to receive on a stream and for the entire connection. This is a
+ credit-based scheme.
+
+
+ Flow control is directional with overall control provided by the receiver. A
+ receiver MAY choose to set any window size that it desires for each stream and for
+ the entire connection. A sender MUST respect flow control limits imposed by a
+ receiver. Clients, servers and intermediaries all independently advertise their
+ flow control window as a receiver and abide by the flow control limits set by
+ their peer when sending.
+
+
+ The initial value for the flow control window is 65,535 octets for both new streams
+ and the overall connection.
+
+
+ The frame type determines whether flow control applies to a frame. Of the frames
+ specified in this document, only DATA frames are subject to flow
+ control; all other frame types do not consume space in the advertised flow control
+ window. This ensures that important control frames are not blocked by flow control.
+
+
+ Flow control cannot be disabled.
+
+
+ HTTP/2 defines only the format and semantics of the WINDOW_UPDATE
+ frame ( ). This document does not stipulate how a
+ receiver decides when to send this frame or the value that it sends, nor does it
+ specify how a sender chooses to send packets. Implementations are able to select
+ any algorithm that suits their needs.
+
+
+
+
+ Implementations are also responsible for managing how requests and responses are sent
+ based on priority; choosing how to avoid head of line blocking for requests; and
+ managing the creation of new streams. Algorithm choices for these could interact with
+ any flow control algorithm.
+
+
+
+
+
+ Flow control is defined to protect endpoints that are operating under resource
+ constraints. For example, a proxy needs to share memory between many connections, and
+ also might have a slow upstream connection and a fast downstream one. Flow control
+ addresses cases where the receiver is unable process data on one stream, yet wants to
+ continue to process other streams in the same connection.
+
+
+ Deployments that do not require this capability can advertise a flow control window of
+ the maximum size, incrementing the available space when new data is received. This
+ effectively disables flow control for that receiver. Conversely, a sender is always
+ subject to the flow control window advertised by the receiver.
+
+
+ Deployments with constrained resources (for example, memory) can employ flow control to
+ limit the amount of memory a peer can consume. Note, however, that this can lead to
+ suboptimal use of available network resources if flow control is enabled without
+ knowledge of the bandwidth-delay product (see ).
+
+
+ Even with full awareness of the current bandwidth-delay product, implementation of flow
+ control can be difficult. When using flow control, the receiver MUST read from the TCP
+ receive buffer in a timely fashion. Failure to do so could lead to a deadlock when
+ critical frames, such as WINDOW_UPDATE , are not read and acted upon.
+
+
+
+
+
+
+ A client can assign a priority for a new stream by including prioritization information in
+ the HEADERS frame that opens the stream. For an existing
+ stream, the PRIORITY frame can be used to change the
+ priority.
+
+
+ The purpose of prioritization is to allow an endpoint to express how it would prefer its
+ peer allocate resources when managing concurrent streams. Most importantly, priority can
+ be used to select streams for transmitting frames when there is limited capacity for
+ sending.
+
+
+ Streams can be prioritized by marking them as dependent on the completion of other streams
+ ( ). Each dependency is assigned a relative weight, a number
+ that is used to determine the relative proportion of available resources that are assigned
+ to streams dependent on the same stream.
+
+
+
+ Explicitly setting the priority for a stream is input to a prioritization process. It
+ does not guarantee any particular processing or transmission order for the stream relative
+ to any other stream. An endpoint cannot force a peer to process concurrent streams in a
+ particular order using priority. Expressing priority is therefore only ever a suggestion.
+
+
+ Providing prioritization information is optional, so default values are used if no
+ explicit indicator is provided ( ).
+
+
+
+
+ Each stream can be given an explicit dependency on another stream. Including a
+ dependency expresses a preference to allocate resources to the identified stream rather
+ than to the dependent stream.
+
+
+ A stream that is not dependent on any other stream is given a stream dependency of 0x0.
+ In other words, the non-existent stream 0 forms the root of the tree.
+
+
+ A stream that depends on another stream is a dependent stream. The stream upon which a
+ stream is dependent is a parent stream. A dependency on a stream that is not currently
+ in the tree - such as a stream in the "idle" state - results in that stream being given
+ a default priority .
+
+
+ When assigning a dependency on another stream, the stream is added as a new dependency
+ of the parent stream. Dependent streams that share the same parent are not ordered with
+ respect to each other. For example, if streams B and C are dependent on stream A, and
+ if stream D is created with a dependency on stream A, this results in a dependency order
+ of A followed by B, C, and D in any order.
+
+
+ /|\
+ B C B D C
+]]>
+
+
+ An exclusive flag allows for the insertion of a new level of dependencies. The
+ exclusive flag causes the stream to become the sole dependency of its parent stream,
+ causing other dependencies to become dependent on the exclusive stream. In the
+ previous example, if stream D is created with an exclusive dependency on stream A, this
+ results in D becoming the dependency parent of B and C.
+
+
+ D
+ B C / \
+ B C
+]]>
+
+
+ Inside the dependency tree, a dependent stream SHOULD only be allocated resources if all
+ of the streams that it depends on (the chain of parent streams up to 0x0) are either
+ closed, or it is not possible to make progress on them.
+
+
+ A stream cannot depend on itself. An endpoint MUST treat this as a stream error of type PROTOCOL_ERROR .
+
+
+
+
+
+ All dependent streams are allocated an integer weight between 1 and 256 (inclusive).
+
+
+ Streams with the same parent SHOULD be allocated resources proportionally based on their
+ weight. Thus, if stream B depends on stream A with weight 4, and C depends on stream A
+ with weight 12, and if no progress can be made on A, stream B ideally receives one third
+ of the resources allocated to stream C.
+
+
+
+
+
+ Stream priorities are changed using the PRIORITY frame. Setting a
+ dependency causes a stream to become dependent on the identified parent stream.
+
+
+ Dependent streams move with their parent stream if the parent is reprioritized. Setting
+ a dependency with the exclusive flag for a reprioritized stream moves all the
+ dependencies of the new parent stream to become dependent on the reprioritized stream.
+
+
+ If a stream is made dependent on one of its own dependencies, the formerly dependent
+ stream is first moved to be dependent on the reprioritized stream's previous parent.
+ The moved dependency retains its weight.
+
+
+
+ For example, consider an original dependency tree where B and C depend on A, D and E
+ depend on C, and F depends on D. If A is made dependent on D, then D takes the place
+ of A. All other dependency relationships stay the same, except for F, which becomes
+ dependent on A if the reprioritization is exclusive.
+
+ F B C ==> F A OR A
+ / \ | / \ /|\
+ D E E B C B C F
+ | | |
+ F E E
+ (intermediate) (non-exclusive) (exclusive)
+]]>
+
+
+
+
+
+ When a stream is removed from the dependency tree, its dependencies can be moved to
+ become dependent on the parent of the closed stream. The weights of new dependencies
+ are recalculated by distributing the weight of the dependency of the closed stream
+ proportionally based on the weights of its dependencies.
+
+
+ Streams that are removed from the dependency tree cause some prioritization information
+ to be lost. Resources are shared between streams with the same parent stream, which
+ means that if a stream in that set closes or becomes blocked, any spare capacity
+ allocated to a stream is distributed to the immediate neighbors of the stream. However,
+ if the common dependency is removed from the tree, those streams share resources with
+ streams at the next highest level.
+
+
+ For example, assume streams A and B share a parent, and streams C and D both depend on
+ stream A. Prior to the removal of stream A, if streams A and D are unable to proceed,
+ then stream C receives all the resources dedicated to stream A. If stream A is removed
+ from the tree, the weight of stream A is divided between streams C and D. If stream D
+ is still unable to proceed, this results in stream C receiving a reduced proportion of
+ resources. For equal starting weights, C receives one third, rather than one half, of
+ available resources.
+
+
+ It is possible for a stream to become closed while prioritization information that
+ creates a dependency on that stream is in transit. If a stream identified in a
+ dependency has no associated priority information, then the dependent stream is instead
+ assigned a default priority . This potentially creates
+ suboptimal prioritization, since the stream could be given a priority that is different
+ to what is intended.
+
+
+ To avoid these problems, an endpoint SHOULD retain stream prioritization state for a
+ period after streams become closed. The longer state is retained, the lower the chance
+ that streams are assigned incorrect or default priority values.
+
+
+ This could create a large state burden for an endpoint, so this state MAY be limited.
+ An endpoint MAY apply a fixed upper limit on the number of closed streams for which
+ prioritization state is tracked to limit state exposure. The amount of additional state
+ an endpoint maintains could be dependent on load; under high load, prioritization state
+ can be discarded to limit resource commitments. In extreme cases, an endpoint could
+ even discard prioritization state for active or reserved streams. If a fixed limit is
+ applied, endpoints SHOULD maintain state for at least as many streams as allowed by
+ their setting for SETTINGS_MAX_CONCURRENT_STREAMS .
+
+
+ An endpoint receiving a PRIORITY frame that changes the priority of a
+ closed stream SHOULD alter the dependencies of the streams that depend on it, if it has
+ retained enough state to do so.
+
+
+
+
+
+ Providing priority information is optional. Streams are assigned a non-exclusive
+ dependency on stream 0x0 by default. Pushed streams
+ initially depend on their associated stream. In both cases, streams are assigned a
+ default weight of 16.
+
+
+
+
+
+
+ HTTP/2 framing permits two classes of error:
+
+
+ An error condition that renders the entire connection unusable is a connection error.
+
+
+ An error in an individual stream is a stream error.
+
+
+
+
+ A list of error codes is included in .
+
+
+
+
+ A connection error is any error which prevents further processing of the framing layer,
+ or which corrupts any connection state.
+
+
+ An endpoint that encounters a connection error SHOULD first send a GOAWAY
+ frame ( ) with the stream identifier of the last stream that it
+ successfully received from its peer. The GOAWAY frame includes an error
+ code that indicates why the connection is terminating. After sending the
+ GOAWAY frame, the endpoint MUST close the TCP connection.
+
+
+ It is possible that the GOAWAY will not be reliably received by the
+ receiving endpoint (see ). In the event of a connection error,
+ GOAWAY only provides a best effort attempt to communicate with the peer
+ about why the connection is being terminated.
+
+
+ An endpoint can end a connection at any time. In particular, an endpoint MAY choose to
+ treat a stream error as a connection error. Endpoints SHOULD send a
+ GOAWAY frame when ending a connection, providing that circumstances
+ permit it.
+
+
+
+
+
+ A stream error is an error related to a specific stream that does not affect processing
+ of other streams.
+
+
+ An endpoint that detects a stream error sends a RST_STREAM frame ( ) that contains the stream identifier of the stream where the error
+ occurred. The RST_STREAM frame includes an error code that indicates the
+ type of error.
+
+
+ A RST_STREAM is the last frame that an endpoint can send on a stream.
+ The peer that sends the RST_STREAM frame MUST be prepared to receive any
+ frames that were sent or enqueued for sending by the remote peer. These frames can be
+ ignored, except where they modify connection state (such as the state maintained for
+ header compression , or flow control).
+
+
+ Normally, an endpoint SHOULD NOT send more than one RST_STREAM frame for
+ any stream. However, an endpoint MAY send additional RST_STREAM frames if
+ it receives frames on a closed stream after more than a round-trip time. This behavior
+ is permitted to deal with misbehaving implementations.
+
+
+ An endpoint MUST NOT send a RST_STREAM in response to an
+ RST_STREAM frame, to avoid looping.
+
+
+
+
+
+ If the TCP connection is closed or reset while streams remain in open or half closed
+ states, then the endpoint MUST assume that those streams were abnormally interrupted and
+ could be incomplete.
+
+
+
+
+
+
+ HTTP/2 permits extension of the protocol. Protocol extensions can be used to provide
+ additional services or alter any aspect of the protocol, within the limitations described
+ in this section. Extensions are effective only within the scope of a single HTTP/2
+ connection.
+
+
+ Extensions are permitted to use new frame types , new
+ settings , or new error
+ codes . Registries are established for managing these extension points: frame types , settings and
+ error codes .
+
+
+ Implementations MUST ignore unknown or unsupported values in all extensible protocol
+ elements. Implementations MUST discard frames that have unknown or unsupported types.
+ This means that any of these extension points can be safely used by extensions without
+ prior arrangement or negotiation. However, extension frames that appear in the middle of
+ a header block are not permitted; these MUST be treated
+ as a connection error of type
+ PROTOCOL_ERROR .
+
+
+ However, extensions that could change the semantics of existing protocol components MUST
+ be negotiated before being used. For example, an extension that changes the layout of the
+ HEADERS frame cannot be used until the peer has given a positive signal
+ that this is acceptable. In this case, it could also be necessary to coordinate when the
+ revised layout comes into effect. Note that treating any frame other than
+ DATA frames as flow controlled is such a change in semantics, and can only
+ be done through negotiation.
+
+
+ This document doesn't mandate a specific method for negotiating the use of an extension,
+ but notes that a setting could be used for that
+ purpose. If both peers set a value that indicates willingness to use the extension, then
+ the extension can be used. If a setting is used for extension negotiation, the initial
+ value MUST be defined so that the extension is initially disabled.
+
+
+
+
+
+
+ This specification defines a number of frame types, each identified by a unique 8-bit type
+ code. Each frame type serves a distinct purpose either in the establishment and management
+ of the connection as a whole, or of individual streams.
+
+
+ The transmission of specific frame types can alter the state of a connection. If endpoints
+ fail to maintain a synchronized view of the connection state, successful communication
+ within the connection will no longer be possible. Therefore, it is important that endpoints
+ have a shared comprehension of how the state is affected by the use any given frame.
+
+
+
+
+ DATA frames (type=0x0) convey arbitrary, variable-length sequences of octets associated
+ with a stream. One or more DATA frames are used, for instance, to carry HTTP request or
+ response payloads.
+
+
+ DATA frames MAY also contain arbitrary padding. Padding can be added to DATA frames to
+ obscure the size of messages.
+
+
+
+
+
+ The DATA frame contains the following fields:
+
+
+ An 8-bit field containing the length of the frame padding in units of octets. This
+ field is optional and is only present if the PADDED flag is set.
+
+
+ Application data. The amount of data is the remainder of the frame payload after
+ subtracting the length of the other fields that are present.
+
+
+ Padding octets that contain no application semantic value. Padding octets MUST be set
+ to zero when sending and ignored when receiving.
+
+
+
+
+
+ The DATA frame defines the following flags:
+
+
+ Bit 1 being set indicates that this frame is the last that the endpoint will send for
+ the identified stream. Setting this flag causes the stream to enter one of the "half closed" states or the "closed" state .
+
+
+ Bit 4 being set indicates that the Pad Length field and any padding that it describes
+ is present.
+
+
+
+
+ DATA frames MUST be associated with a stream. If a DATA frame is received whose stream
+ identifier field is 0x0, the recipient MUST respond with a connection error of type
+ PROTOCOL_ERROR .
+
+
+ DATA frames are subject to flow control and can only be sent when a stream is in the
+ "open" or "half closed (remote)" states. The entire DATA frame payload is included in flow
+ control, including Pad Length and Padding fields if present. If a DATA frame is received
+ whose stream is not in "open" or "half closed (local)" state, the recipient MUST respond
+ with a stream error of type
+ STREAM_CLOSED .
+
+
+ The total number of padding octets is determined by the value of the Pad Length field. If
+ the length of the padding is greater than the length of the frame payload, the recipient
+ MUST treat this as a connection error of
+ type PROTOCOL_ERROR .
+
+
+ A frame can be increased in size by one octet by including a Pad Length field with a
+ value of zero.
+
+
+
+
+ Padding is a security feature; see .
+
+
+
+
+
+ The HEADERS frame (type=0x1) is used to open a stream ,
+ and additionally carries a header block fragment. HEADERS frames can be sent on a stream
+ in the "open" or "half closed (remote)" states.
+
+
+
+
+
+ The HEADERS frame payload has the following fields:
+
+
+ An 8-bit field containing the length of the frame padding in units of octets. This
+ field is only present if the PADDED flag is set.
+
+
+ A single bit flag indicates that the stream dependency is exclusive, see . This field is only present if the PRIORITY flag is set.
+
+
+ A 31-bit stream identifier for the stream that this stream depends on, see . This field is only present if the PRIORITY flag is set.
+
+
+ An 8-bit weight for the stream, see . Add one to the
+ value to obtain a weight between 1 and 256. This field is only present if the
+ PRIORITY flag is set.
+
+
+ A header block fragment .
+
+
+ Padding octets that contain no application semantic value. Padding octets MUST be set
+ to zero when sending and ignored when receiving.
+
+
+
+
+
+ The HEADERS frame defines the following flags:
+
+
+
+ Bit 1 being set indicates that the header block is
+ the last that the endpoint will send for the identified stream. Setting this flag
+ causes the stream to enter one of "half closed"
+ states .
+
+
+ A HEADERS frame carries the END_STREAM flag that signals the end of a stream.
+ However, a HEADERS frame with the END_STREAM flag set can be followed by
+ CONTINUATION frames on the same stream. Logically, the
+ CONTINUATION frames are part of the HEADERS frame.
+
+
+
+
+ Bit 3 being set indicates that this frame contains an entire header block and is not followed by any
+ CONTINUATION frames.
+
+
+ A HEADERS frame without the END_HEADERS flag set MUST be followed by a
+ CONTINUATION frame for the same stream. A receiver MUST treat the
+ receipt of any other type of frame or a frame on a different stream as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+ Bit 4 being set indicates that the Pad Length field and any padding that it
+ describes is present.
+
+
+
+
+ Bit 6 being set indicates that the Exclusive Flag (E), Stream Dependency, and Weight
+ fields are present; see .
+
+
+
+
+
+
+ The payload of a HEADERS frame contains a header block
+ fragment . A header block that does not fit within a HEADERS frame is continued in
+ a CONTINUATION frame .
+
+
+
+ HEADERS frames MUST be associated with a stream. If a HEADERS frame is received whose
+ stream identifier field is 0x0, the recipient MUST respond with a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+ The HEADERS frame changes the connection state as described in .
+
+
+
+ The HEADERS frame includes optional padding. Padding fields and flags are identical to
+ those defined for DATA frames .
+
+
+ Prioritization information in a HEADERS frame is logically equivalent to a separate
+ PRIORITY frame, but inclusion in HEADERS avoids the potential for churn in
+ stream prioritization when new streams are created. Priorization fields in HEADERS frames
+ subsequent to the first on a stream reprioritize the
+ stream .
+
+
+
+
+
+ The PRIORITY frame (type=0x2) specifies the sender-advised
+ priority of a stream . It can be sent at any time for an existing stream, including
+ closed streams. This enables reprioritization of existing streams.
+
+
+
+
+
+ The payload of a PRIORITY frame contains the following fields:
+
+
+ A single bit flag indicates that the stream dependency is exclusive, see .
+
+
+ A 31-bit stream identifier for the stream that this stream depends on, see .
+
+
+ An 8-bit weight for the identified stream dependency, see . Add one to the value to obtain a weight between 1 and 256.
+
+
+
+
+
+ The PRIORITY frame does not define any flags.
+
+
+
+ The PRIORITY frame is associated with an existing stream. If a PRIORITY frame is received
+ with a stream identifier of 0x0, the recipient MUST respond with a connection error of type
+ PROTOCOL_ERROR .
+
+
+ The PRIORITY frame can be sent on a stream in any of the "reserved (remote)", "open",
+ "half closed (local)", "half closed (remote)", or "closed" states, though it cannot be
+ sent between consecutive frames that comprise a single header
+ block . Note that this frame could arrive after processing or frame sending has
+ completed, which would cause it to have no effect on the current stream. For a stream
+ that is in the "half closed (remote)" or "closed" - state, this frame can only affect
+ processing of the current stream and not frame transmission.
+
+
+ The PRIORITY frame is the only frame that can be sent for a stream in the "closed" state.
+ This allows for the reprioritization of a group of dependent streams by altering the
+ priority of a parent stream, which might be closed. However, a PRIORITY frame sent on a
+ closed stream risks being ignored due to the peer having discarded priority state
+ information for that stream.
+
+
+
+
+
+ The RST_STREAM frame (type=0x3) allows for abnormal termination of a stream. When sent by
+ the initiator of a stream, it indicates that they wish to cancel the stream or that an
+ error condition has occurred. When sent by the receiver of a stream, it indicates that
+ either the receiver is rejecting the stream, requesting that the stream be cancelled, or
+ that an error condition has occurred.
+
+
+
+
+
+
+ The RST_STREAM frame contains a single unsigned, 32-bit integer identifying the error code . The error code indicates why the stream is being
+ terminated.
+
+
+
+ The RST_STREAM frame does not define any flags.
+
+
+
+ The RST_STREAM frame fully terminates the referenced stream and causes it to enter the
+ closed state. After receiving a RST_STREAM on a stream, the receiver MUST NOT send
+ additional frames for that stream, with the exception of PRIORITY . However,
+ after sending the RST_STREAM, the sending endpoint MUST be prepared to receive and process
+ additional frames sent on the stream that might have been sent by the peer prior to the
+ arrival of the RST_STREAM.
+
+
+
+ RST_STREAM frames MUST be associated with a stream. If a RST_STREAM frame is received
+ with a stream identifier of 0x0, the recipient MUST treat this as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+ RST_STREAM frames MUST NOT be sent for a stream in the "idle" state. If a RST_STREAM
+ frame identifying an idle stream is received, the recipient MUST treat this as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+
+
+ The SETTINGS frame (type=0x4) conveys configuration parameters that affect how endpoints
+ communicate, such as preferences and constraints on peer behavior. The SETTINGS frame is
+ also used to acknowledge the receipt of those parameters. Individually, a SETTINGS
+ parameter can also be referred to as a "setting".
+
+
+ SETTINGS parameters are not negotiated; they describe characteristics of the sending peer,
+ which are used by the receiving peer. Different values for the same parameter can be
+ advertised by each peer. For example, a client might set a high initial flow control
+ window, whereas a server might set a lower value to conserve resources.
+
+
+
+ A SETTINGS frame MUST be sent by both endpoints at the start of a connection, and MAY be
+ sent at any other time by either endpoint over the lifetime of the connection.
+ Implementations MUST support all of the parameters defined by this specification.
+
+
+
+ Each parameter in a SETTINGS frame replaces any existing value for that parameter.
+ Parameters are processed in the order in which they appear, and a receiver of a SETTINGS
+ frame does not need to maintain any state other than the current value of its
+ parameters. Therefore, the value of a SETTINGS parameter is the last value that is seen by
+ a receiver.
+
+
+ SETTINGS parameters are acknowledged by the receiving peer. To enable this, the SETTINGS
+ frame defines the following flag:
+
+
+ Bit 1 being set indicates that this frame acknowledges receipt and application of the
+ peer's SETTINGS frame. When this bit is set, the payload of the SETTINGS frame MUST
+ be empty. Receipt of a SETTINGS frame with the ACK flag set and a length field value
+ other than 0 MUST be treated as a connection
+ error of type FRAME_SIZE_ERROR . For more info, see Settings Synchronization .
+
+
+
+
+ SETTINGS frames always apply to a connection, never a single stream. The stream
+ identifier for a SETTINGS frame MUST be zero (0x0). If an endpoint receives a SETTINGS
+ frame whose stream identifier field is anything other than 0x0, the endpoint MUST respond
+ with a connection error of type
+ PROTOCOL_ERROR .
+
+
+ The SETTINGS frame affects connection state. A badly formed or incomplete SETTINGS frame
+ MUST be treated as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+ The payload of a SETTINGS frame consists of zero or more parameters, each consisting of
+ an unsigned 16-bit setting identifier and an unsigned 32-bit value.
+
+
+
+
+
+
+
+
+
+ The following parameters are defined:
+
+
+
+ Allows the sender to inform the remote endpoint of the maximum size of the header
+ compression table used to decode header blocks, in octets. The encoder can select
+ any size equal to or less than this value by using signaling specific to the
+ header compression format inside a header block. The initial value is 4,096
+ octets.
+
+
+
+
+ This setting can be use to disable server
+ push . An endpoint MUST NOT send a PUSH_PROMISE frame if it
+ receives this parameter set to a value of 0. An endpoint that has both set this
+ parameter to 0 and had it acknowledged MUST treat the receipt of a
+ PUSH_PROMISE frame as a connection error of type
+ PROTOCOL_ERROR .
+
+
+ The initial value is 1, which indicates that server push is permitted. Any value
+ other than 0 or 1 MUST be treated as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+ Indicates the maximum number of concurrent streams that the sender will allow.
+ This limit is directional: it applies to the number of streams that the sender
+ permits the receiver to create. Initially there is no limit to this value. It is
+ recommended that this value be no smaller than 100, so as to not unnecessarily
+ limit parallelism.
+
+
+ A value of 0 for SETTINGS_MAX_CONCURRENT_STREAMS SHOULD NOT be treated as special
+ by endpoints. A zero value does prevent the creation of new streams, however this
+ can also happen for any limit that is exhausted with active streams. Servers
+ SHOULD only set a zero value for short durations; if a server does not wish to
+ accept requests, closing the connection could be preferable.
+
+
+
+
+ Indicates the sender's initial window size (in octets) for stream level flow
+ control. The initial value is 216 -1 (65,535) octets.
+
+
+ This setting affects the window size of all streams, including existing streams,
+ see .
+
+
+ Values above the maximum flow control window size of 231 -1 MUST
+ be treated as a connection error of
+ type FLOW_CONTROL_ERROR .
+
+
+
+
+ Indicates the size of the largest frame payload that the sender is willing to
+ receive, in octets.
+
+
+ The initial value is 214 (16,384) octets. The value advertised by
+ an endpoint MUST be between this initial value and the maximum allowed frame size
+ (224 -1 or 16,777,215 octets), inclusive. Values outside this range
+ MUST be treated as a connection error
+ of type PROTOCOL_ERROR .
+
+
+
+
+ This advisory setting informs a peer of the maximum size of header list that the
+ sender is prepared to accept, in octets. The value is based on the uncompressed
+ size of header fields, including the length of the name and value in octets plus
+ an overhead of 32 octets for each header field.
+
+
+ For any given request, a lower limit than what is advertised MAY be enforced. The
+ initial value of this setting is unlimited.
+
+
+
+
+
+ An endpoint that receives a SETTINGS frame with any unknown or unsupported identifier
+ MUST ignore that setting.
+
+
+
+
+
+ Most values in SETTINGS benefit from or require an understanding of when the peer has
+ received and applied the changed parameter values. In order to provide
+ such synchronization timepoints, the recipient of a SETTINGS frame in which the ACK flag
+ is not set MUST apply the updated parameters as soon as possible upon receipt.
+
+
+ The values in the SETTINGS frame MUST be processed in the order they appear, with no
+ other frame processing between values. Unsupported parameters MUST be ignored. Once
+ all values have been processed, the recipient MUST immediately emit a SETTINGS frame
+ with the ACK flag set. Upon receiving a SETTINGS frame with the ACK flag set, the sender
+ of the altered parameters can rely on the setting having been applied.
+
+
+ If the sender of a SETTINGS frame does not receive an acknowledgement within a
+ reasonable amount of time, it MAY issue a connection error of type
+ SETTINGS_TIMEOUT .
+
+
+
+
+
+
+ The PUSH_PROMISE frame (type=0x5) is used to notify the peer endpoint in advance of
+ streams the sender intends to initiate. The PUSH_PROMISE frame includes the unsigned
+ 31-bit identifier of the stream the endpoint plans to create along with a set of headers
+ that provide additional context for the stream. contains a
+ thorough description of the use of PUSH_PROMISE frames.
+
+
+
+
+
+
+ The PUSH_PROMISE frame payload has the following fields:
+
+
+ An 8-bit field containing the length of the frame padding in units of octets. This
+ field is only present if the PADDED flag is set.
+
+
+ A single reserved bit.
+
+
+ An unsigned 31-bit integer that identifies the stream that is reserved by the
+ PUSH_PROMISE. The promised stream identifier MUST be a valid choice for the next
+ stream sent by the sender (see new stream
+ identifier ).
+
+
+ A header block fragment containing request header
+ fields.
+
+
+ Padding octets.
+
+
+
+
+
+ The PUSH_PROMISE frame defines the following flags:
+
+
+
+ Bit 3 being set indicates that this frame contains an entire header block and is not followed by any
+ CONTINUATION frames.
+
+
+ A PUSH_PROMISE frame without the END_HEADERS flag set MUST be followed by a
+ CONTINUATION frame for the same stream. A receiver MUST treat the receipt of any
+ other type of frame or a frame on a different stream as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+ Bit 4 being set indicates that the Pad Length field and any padding that it
+ describes is present.
+
+
+
+
+
+
+ PUSH_PROMISE frames MUST be associated with an existing, peer-initiated stream. The stream
+ identifier of a PUSH_PROMISE frame indicates the stream it is associated with. If the
+ stream identifier field specifies the value 0x0, a recipient MUST respond with a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+ Promised streams are not required to be used in the order they are promised. The
+ PUSH_PROMISE only reserves stream identifiers for later use.
+
+
+
+ PUSH_PROMISE MUST NOT be sent if the SETTINGS_ENABLE_PUSH setting of the
+ peer endpoint is set to 0. An endpoint that has set this setting and has received
+ acknowledgement MUST treat the receipt of a PUSH_PROMISE frame as a connection error of type
+ PROTOCOL_ERROR .
+
+
+ Recipients of PUSH_PROMISE frames can choose to reject promised streams by returning a
+ RST_STREAM referencing the promised stream identifier back to the sender of
+ the PUSH_PROMISE.
+
+
+
+ A PUSH_PROMISE frame modifies the connection state in two ways. The inclusion of a header block potentially modifies the state maintained for
+ header compression. PUSH_PROMISE also reserves a stream for later use, causing the
+ promised stream to enter the "reserved" state. A sender MUST NOT send a PUSH_PROMISE on a
+ stream unless that stream is either "open" or "half closed (remote)"; the sender MUST
+ ensure that the promised stream is a valid choice for a new stream identifier (that is, the promised stream MUST
+ be in the "idle" state).
+
+
+ Since PUSH_PROMISE reserves a stream, ignoring a PUSH_PROMISE frame causes the stream
+ state to become indeterminate. A receiver MUST treat the receipt of a PUSH_PROMISE on a
+ stream that is neither "open" nor "half closed (local)" as a connection error of type
+ PROTOCOL_ERROR . However, an endpoint that has sent
+ RST_STREAM on the associated stream MUST handle PUSH_PROMISE frames that
+ might have been created before the RST_STREAM frame is received and
+ processed.
+
+
+ A receiver MUST treat the receipt of a PUSH_PROMISE that promises an illegal stream identifier (that is, an identifier for a
+ stream that is not currently in the "idle" state) as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+ The PUSH_PROMISE frame includes optional padding. Padding fields and flags are identical
+ to those defined for DATA frames .
+
+
+
+
+
+ The PING frame (type=0x6) is a mechanism for measuring a minimal round trip time from the
+ sender, as well as determining whether an idle connection is still functional. PING
+ frames can be sent from any endpoint.
+
+
+
+
+
+
+ In addition to the frame header, PING frames MUST contain 8 octets of data in the payload.
+ A sender can include any value it chooses and use those bytes in any fashion.
+
+
+ Receivers of a PING frame that does not include an ACK flag MUST send a PING frame with
+ the ACK flag set in response, with an identical payload. PING responses SHOULD be given
+ higher priority than any other frame.
+
+
+
+ The PING frame defines the following flags:
+
+
+ Bit 1 being set indicates that this PING frame is a PING response. An endpoint MUST
+ set this flag in PING responses. An endpoint MUST NOT respond to PING frames
+ containing this flag.
+
+
+
+
+ PING frames are not associated with any individual stream. If a PING frame is received
+ with a stream identifier field value other than 0x0, the recipient MUST respond with a
+ connection error of type
+ PROTOCOL_ERROR .
+
+
+ Receipt of a PING frame with a length field value other than 8 MUST be treated as a connection error of type
+ FRAME_SIZE_ERROR .
+
+
+
+
+
+
+ The GOAWAY frame (type=0x7) informs the remote peer to stop creating streams on this
+ connection. GOAWAY can be sent by either the client or the server. Once sent, the sender
+ will ignore frames sent on any new streams with identifiers higher than the included last
+ stream identifier. Receivers of a GOAWAY frame MUST NOT open additional streams on the
+ connection, although a new connection can be established for new streams.
+
+
+ The purpose of this frame is to allow an endpoint to gracefully stop accepting new
+ streams, while still finishing processing of previously established streams. This enables
+ administrative actions, like server maintainance.
+
+
+ There is an inherent race condition between an endpoint starting new streams and the
+ remote sending a GOAWAY frame. To deal with this case, the GOAWAY contains the stream
+ identifier of the last peer-initiated stream which was or might be processed on the
+ sending endpoint in this connection. For instance, if the server sends a GOAWAY frame,
+ the identified stream is the highest numbered stream initiated by the client.
+
+
+ If the receiver of the GOAWAY has sent data on streams with a higher stream identifier
+ than what is indicated in the GOAWAY frame, those streams are not or will not be
+ processed. The receiver of the GOAWAY frame can treat the streams as though they had
+ never been created at all, thereby allowing those streams to be retried later on a new
+ connection.
+
+
+ Endpoints SHOULD always send a GOAWAY frame before closing a connection so that the remote
+ can know whether a stream has been partially processed or not. For example, if an HTTP
+ client sends a POST at the same time that a server closes a connection, the client cannot
+ know if the server started to process that POST request if the server does not send a
+ GOAWAY frame to indicate what streams it might have acted on.
+
+
+ An endpoint might choose to close a connection without sending GOAWAY for misbehaving
+ peers.
+
+
+
+
+
+
+ The GOAWAY frame does not define any flags.
+
+
+ The GOAWAY frame applies to the connection, not a specific stream. An endpoint MUST treat
+ a GOAWAY frame with a stream identifier other than 0x0 as a connection error of type
+ PROTOCOL_ERROR .
+
+
+ The last stream identifier in the GOAWAY frame contains the highest numbered stream
+ identifier for which the sender of the GOAWAY frame might have taken some action on, or
+ might yet take action on. All streams up to and including the identified stream might
+ have been processed in some way. The last stream identifier can be set to 0 if no streams
+ were processed.
+
+
+ In this context, "processed" means that some data from the stream was passed to some
+ higher layer of software that might have taken some action as a result.
+
+
+ If a connection terminates without a GOAWAY frame, the last stream identifier is
+ effectively the highest possible stream identifier.
+
+
+ On streams with lower or equal numbered identifiers that were not closed completely prior
+ to the connection being closed, re-attempting requests, transactions, or any protocol
+ activity is not possible, with the exception of idempotent actions like HTTP GET, PUT, or
+ DELETE. Any protocol activity that uses higher numbered streams can be safely retried
+ using a new connection.
+
+
+ Activity on streams numbered lower or equal to the last stream identifier might still
+ complete successfully. The sender of a GOAWAY frame might gracefully shut down a
+ connection by sending a GOAWAY frame, maintaining the connection in an open state until
+ all in-progress streams complete.
+
+
+ An endpoint MAY send multiple GOAWAY frames if circumstances change. For instance, an
+ endpoint that sends GOAWAY with NO_ERROR during graceful shutdown could
+ subsequently encounter an condition that requires immediate termination of the connection.
+ The last stream identifier from the last GOAWAY frame received indicates which streams
+ could have been acted upon. Endpoints MUST NOT increase the value they send in the last
+ stream identifier, since the peers might already have retried unprocessed requests on
+ another connection.
+
+
+ A client that is unable to retry requests loses all requests that are in flight when the
+ server closes the connection. This is especially true for intermediaries that might
+ not be serving clients using HTTP/2. A server that is attempting to gracefully shut down
+ a connection SHOULD send an initial GOAWAY frame with the last stream identifier set to
+ 231 -1 and a NO_ERROR code. This signals to the client that
+ a shutdown is imminent and that no further requests can be initiated. After waiting at
+ least one round trip time, the server can send another GOAWAY frame with an updated last
+ stream identifier. This ensures that a connection can be cleanly shut down without losing
+ requests.
+
+
+
+ After sending a GOAWAY frame, the sender can discard frames for streams with identifiers
+ higher than the identified last stream. However, any frames that alter connection state
+ cannot be completely ignored. For instance, HEADERS ,
+ PUSH_PROMISE and CONTINUATION frames MUST be minimally
+ processed to ensure the state maintained for header compression is consistent (see ); similarly DATA frames MUST be counted toward the connection flow
+ control window. Failure to process these frames can cause flow control or header
+ compression state to become unsynchronized.
+
+
+
+ The GOAWAY frame also contains a 32-bit error code that
+ contains the reason for closing the connection.
+
+
+ Endpoints MAY append opaque data to the payload of any GOAWAY frame. Additional debug
+ data is intended for diagnostic purposes only and carries no semantic value. Debug
+ information could contain security- or privacy-sensitive data. Logged or otherwise
+ persistently stored debug data MUST have adequate safeguards to prevent unauthorized
+ access.
+
+
+
+
+
+ The WINDOW_UPDATE frame (type=0x8) is used to implement flow control; see for an overview.
+
+
+ Flow control operates at two levels: on each individual stream and on the entire
+ connection.
+
+
+ Both types of flow control are hop-by-hop; that is, only between the two endpoints.
+ Intermediaries do not forward WINDOW_UPDATE frames between dependent connections.
+ However, throttling of data transfer by any receiver can indirectly cause the propagation
+ of flow control information toward the original sender.
+
+
+ Flow control only applies to frames that are identified as being subject to flow control.
+ Of the frame types defined in this document, this includes only DATA frames.
+ Frames that are exempt from flow control MUST be accepted and processed, unless the
+ receiver is unable to assign resources to handling the frame. A receiver MAY respond with
+ a stream error or connection error of type
+ FLOW_CONTROL_ERROR if it is unable to accept a frame.
+
+
+
+
+
+ The payload of a WINDOW_UPDATE frame is one reserved bit, plus an unsigned 31-bit integer
+ indicating the number of octets that the sender can transmit in addition to the existing
+ flow control window. The legal range for the increment to the flow control window is 1 to
+ 231 -1 (0x7fffffff) octets.
+
+
+ The WINDOW_UPDATE frame does not define any flags.
+
+
+ The WINDOW_UPDATE frame can be specific to a stream or to the entire connection. In the
+ former case, the frame's stream identifier indicates the affected stream; in the latter,
+ the value "0" indicates that the entire connection is the subject of the frame.
+
+
+ A receiver MUST treat the receipt of a WINDOW_UPDATE frame with an flow control window
+ increment of 0 as a stream error of type
+ PROTOCOL_ERROR ; errors on the connection flow control window MUST be
+ treated as a connection error .
+
+
+ WINDOW_UPDATE can be sent by a peer that has sent a frame bearing the END_STREAM flag.
+ This means that a receiver could receive a WINDOW_UPDATE frame on a "half closed (remote)"
+ or "closed" stream. A receiver MUST NOT treat this as an error, see .
+
+
+ A receiver that receives a flow controlled frame MUST always account for its contribution
+ against the connection flow control window, unless the receiver treats this as a connection error . This is necessary even if the
+ frame is in error. Since the sender counts the frame toward the flow control window, if
+ the receiver does not, the flow control window at sender and receiver can become
+ different.
+
+
+
+
+ Flow control in HTTP/2 is implemented using a window kept by each sender on every
+ stream. The flow control window is a simple integer value that indicates how many octets
+ of data the sender is permitted to transmit; as such, its size is a measure of the
+ buffering capacity of the receiver.
+
+
+ Two flow control windows are applicable: the stream flow control window and the
+ connection flow control window. The sender MUST NOT send a flow controlled frame with a
+ length that exceeds the space available in either of the flow control windows advertised
+ by the receiver. Frames with zero length with the END_STREAM flag set (that is, an
+ empty DATA frame) MAY be sent if there is no available space in either
+ flow control window.
+
+
+ For flow control calculations, the 9 octet frame header is not counted.
+
+
+ After sending a flow controlled frame, the sender reduces the space available in both
+ windows by the length of the transmitted frame.
+
+
+ The receiver of a frame sends a WINDOW_UPDATE frame as it consumes data and frees up
+ space in flow control windows. Separate WINDOW_UPDATE frames are sent for the stream
+ and connection level flow control windows.
+
+
+ A sender that receives a WINDOW_UPDATE frame updates the corresponding window by the
+ amount specified in the frame.
+
+
+ A sender MUST NOT allow a flow control window to exceed 231 -1 octets.
+ If a sender receives a WINDOW_UPDATE that causes a flow control window to exceed this
+ maximum it MUST terminate either the stream or the connection, as appropriate. For
+ streams, the sender sends a RST_STREAM with the error code of
+ FLOW_CONTROL_ERROR code; for the connection, a GOAWAY
+ frame with a FLOW_CONTROL_ERROR code.
+
+
+ Flow controlled frames from the sender and WINDOW_UPDATE frames from the receiver are
+ completely asynchronous with respect to each other. This property allows a receiver to
+ aggressively update the window size kept by the sender to prevent streams from stalling.
+
+
+
+
+
+ When an HTTP/2 connection is first established, new streams are created with an initial
+ flow control window size of 65,535 octets. The connection flow control window is 65,535
+ octets. Both endpoints can adjust the initial window size for new streams by including
+ a value for SETTINGS_INITIAL_WINDOW_SIZE in the SETTINGS
+ frame that forms part of the connection preface. The connection flow control window can
+ only be changed using WINDOW_UPDATE frames.
+
+
+ Prior to receiving a SETTINGS frame that sets a value for
+ SETTINGS_INITIAL_WINDOW_SIZE , an endpoint can only use the default
+ initial window size when sending flow controlled frames. Similarly, the connection flow
+ control window is set to the default initial window size until a WINDOW_UPDATE frame is
+ received.
+
+
+ A SETTINGS frame can alter the initial flow control window size for all
+ current streams. When the value of SETTINGS_INITIAL_WINDOW_SIZE changes,
+ a receiver MUST adjust the size of all stream flow control windows that it maintains by
+ the difference between the new value and the old value.
+
+
+ A change to SETTINGS_INITIAL_WINDOW_SIZE can cause the available space in
+ a flow control window to become negative. A sender MUST track the negative flow control
+ window, and MUST NOT send new flow controlled frames until it receives WINDOW_UPDATE
+ frames that cause the flow control window to become positive.
+
+
+ For example, if the client sends 60KB immediately on connection establishment, and the
+ server sets the initial window size to be 16KB, the client will recalculate the
+ available flow control window to be -44KB on receipt of the SETTINGS
+ frame. The client retains a negative flow control window until WINDOW_UPDATE frames
+ restore the window to being positive, after which the client can resume sending.
+
+
+ A SETTINGS frame cannot alter the connection flow control window.
+
+
+ An endpoint MUST treat a change to SETTINGS_INITIAL_WINDOW_SIZE that
+ causes any flow control window to exceed the maximum size as a connection error of type
+ FLOW_CONTROL_ERROR .
+
+
+
+
+
+ A receiver that wishes to use a smaller flow control window than the current size can
+ send a new SETTINGS frame. However, the receiver MUST be prepared to
+ receive data that exceeds this window size, since the sender might send data that
+ exceeds the lower limit prior to processing the SETTINGS frame.
+
+
+ After sending a SETTINGS frame that reduces the initial flow control window size, a
+ receiver has two options for handling streams that exceed flow control limits:
+
+
+ The receiver can immediately send RST_STREAM with
+ FLOW_CONTROL_ERROR error code for the affected streams.
+
+
+ The receiver can accept the streams and tolerate the resulting head of line
+ blocking, sending WINDOW_UPDATE frames as it consumes data.
+
+
+
+
+
+
+
+
+ The CONTINUATION frame (type=0x9) is used to continue a sequence of header block fragments . Any number of CONTINUATION frames can
+ be sent on an existing stream, as long as the preceding frame is on the same stream and is
+ a HEADERS , PUSH_PROMISE or CONTINUATION frame without the
+ END_HEADERS flag set.
+
+
+
+
+
+
+ The CONTINUATION frame payload contains a header block
+ fragment .
+
+
+
+ The CONTINUATION frame defines the following flag:
+
+
+
+ Bit 3 being set indicates that this frame ends a header
+ block .
+
+
+ If the END_HEADERS bit is not set, this frame MUST be followed by another
+ CONTINUATION frame. A receiver MUST treat the receipt of any other type of frame or
+ a frame on a different stream as a connection
+ error of type PROTOCOL_ERROR .
+
+
+
+
+
+
+ The CONTINUATION frame changes the connection state as defined in .
+
+
+
+ CONTINUATION frames MUST be associated with a stream. If a CONTINUATION frame is received
+ whose stream identifier field is 0x0, the recipient MUST respond with a connection error of type PROTOCOL_ERROR.
+
+
+
+ A CONTINUATION frame MUST be preceded by a HEADERS ,
+ PUSH_PROMISE or CONTINUATION frame without the END_HEADERS flag set. A
+ recipient that observes violation of this rule MUST respond with a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+
+
+ Error codes are 32-bit fields that are used in RST_STREAM and
+ GOAWAY frames to convey the reasons for the stream or connection error.
+
+
+
+ Error codes share a common code space. Some error codes apply only to either streams or the
+ entire connection and have no defined semantics in the other context.
+
+
+
+ The following error codes are defined:
+
+
+ The associated condition is not as a result of an error. For example, a
+ GOAWAY might include this code to indicate graceful shutdown of a
+ connection.
+
+
+ The endpoint detected an unspecific protocol error. This error is for use when a more
+ specific error code is not available.
+
+
+ The endpoint encountered an unexpected internal error.
+
+
+ The endpoint detected that its peer violated the flow control protocol.
+
+
+ The endpoint sent a SETTINGS frame, but did not receive a response in a
+ timely manner. See Settings Synchronization .
+
+
+ The endpoint received a frame after a stream was half closed.
+
+
+ The endpoint received a frame with an invalid size.
+
+
+ The endpoint refuses the stream prior to performing any application processing, see
+ for details.
+
+
+ Used by the endpoint to indicate that the stream is no longer needed.
+
+
+ The endpoint is unable to maintain the header compression context for the connection.
+
+
+ The connection established in response to a CONNECT
+ request was reset or abnormally closed.
+
+
+ The endpoint detected that its peer is exhibiting a behavior that might be generating
+ excessive load.
+
+
+ The underlying transport has properties that do not meet minimum security
+ requirements (see ).
+
+
+
+
+ Unknown or unsupported error codes MUST NOT trigger any special behavior. These MAY be
+ treated by an implementation as being equivalent to INTERNAL_ERROR .
+
+
+
+
+
+ HTTP/2 is intended to be as compatible as possible with current uses of HTTP. This means
+ that, from the application perspective, the features of the protocol are largely
+ unchanged. To achieve this, all request and response semantics are preserved, although the
+ syntax of conveying those semantics has changed.
+
+
+ Thus, the specification and requirements of HTTP/1.1 Semantics and Content , Conditional Requests , Range Requests , Caching and Authentication are applicable to HTTP/2. Selected portions of HTTP/1.1 Message Syntax
+ and Routing , such as the HTTP and HTTPS URI schemes, are also
+ applicable in HTTP/2, but the expression of those semantics for this protocol are defined
+ in the sections below.
+
+
+
+
+ A client sends an HTTP request on a new stream, using a previously unused stream identifier . A server sends an HTTP response on
+ the same stream as the request.
+
+
+ An HTTP message (request or response) consists of:
+
+
+ for a response only, zero or more HEADERS frames (each followed by zero
+ or more CONTINUATION frames) containing the message headers of
+ informational (1xx) HTTP responses (see and ),
+ and
+
+
+ one HEADERS frame (followed by zero or more CONTINUATION
+ frames) containing the message headers (see ), and
+
+
+ zero or more DATA frames containing the message payload (see ), and
+
+
+ optionally, one HEADERS frame, followed by zero or more
+ CONTINUATION frames containing the trailer-part, if present (see ).
+
+
+ The last frame in the sequence bears an END_STREAM flag, noting that a
+ HEADERS frame bearing the END_STREAM flag can be followed by
+ CONTINUATION frames that carry any remaining portions of the header block.
+
+
+ Other frames (from any stream) MUST NOT occur between either HEADERS frame
+ and any CONTINUATION frames that might follow.
+
+
+
+ Trailing header fields are carried in a header block that also terminates the stream.
+ That is, a sequence starting with a HEADERS frame, followed by zero or more
+ CONTINUATION frames, where the HEADERS frame bears an
+ END_STREAM flag. Header blocks after the first that do not terminate the stream are not
+ part of an HTTP request or response.
+
+
+ A HEADERS frame (and associated CONTINUATION frames) can
+ only appear at the start or end of a stream. An endpoint that receives a
+ HEADERS frame without the END_STREAM flag set after receiving a final
+ (non-informational) status code MUST treat the corresponding request or response as malformed .
+
+
+
+ An HTTP request/response exchange fully consumes a single stream. A request starts with
+ the HEADERS frame that puts the stream into an "open" state. The request
+ ends with a frame bearing END_STREAM, which causes the stream to become "half closed
+ (local)" for the client and "half closed (remote)" for the server. A response starts with
+ a HEADERS frame and ends with a frame bearing END_STREAM, which places the
+ stream in the "closed" state.
+
+
+
+
+
+ HTTP/2 removes support for the 101 (Switching Protocols) informational status code
+ ( ).
+
+
+ The semantics of 101 (Switching Protocols) aren't applicable to a multiplexed protocol.
+ Alternative protocols are able to use the same mechanisms that HTTP/2 uses to negotiate
+ their use (see ).
+
+
+
+
+
+ HTTP header fields carry information as a series of key-value pairs. For a listing of
+ registered HTTP headers, see the Message Header Field Registry maintained at .
+
+
+
+
+ While HTTP/1.x used the message start-line (see ) to convey the target URI and method of the request, and the
+ status code for the response, HTTP/2 uses special pseudo-header fields beginning with
+ ':' character (ASCII 0x3a) for this purpose.
+
+
+ Pseudo-header fields are not HTTP header fields. Endpoints MUST NOT generate
+ pseudo-header fields other than those defined in this document.
+
+
+ Pseudo-header fields are only valid in the context in which they are defined.
+ Pseudo-header fields defined for requests MUST NOT appear in responses; pseudo-header
+ fields defined for responses MUST NOT appear in requests. Pseudo-header fields MUST
+ NOT appear in trailers. Endpoints MUST treat a request or response that contains
+ undefined or invalid pseudo-header fields as malformed .
+
+
+ Just as in HTTP/1.x, header field names are strings of ASCII characters that are
+ compared in a case-insensitive fashion. However, header field names MUST be converted
+ to lowercase prior to their encoding in HTTP/2. A request or response containing
+ uppercase header field names MUST be treated as malformed .
+
+
+ All pseudo-header fields MUST appear in the header block before regular header fields.
+ Any request or response that contains a pseudo-header field that appears in a header
+ block after a regular header field MUST be treated as malformed .
+
+
+
+
+
+ HTTP/2 does not use the Connection header field to
+ indicate connection-specific header fields; in this protocol, connection-specific
+ metadata is conveyed by other means. An endpoint MUST NOT generate a HTTP/2 message
+ containing connection-specific header fields; any message containing
+ connection-specific header fields MUST be treated as malformed .
+
+
+ This means that an intermediary transforming an HTTP/1.x message to HTTP/2 will need
+ to remove any header fields nominated by the Connection header field, along with the
+ Connection header field itself. Such intermediaries SHOULD also remove other
+ connection-specific header fields, such as Keep-Alive, Proxy-Connection,
+ Transfer-Encoding and Upgrade, even if they are not nominated by Connection.
+
+
+ One exception to this is the TE header field, which MAY be present in an HTTP/2
+ request, but when it is MUST NOT contain any value other than "trailers".
+
+
+
+
+ HTTP/2 purposefully does not support upgrade to another protocol. The handshake
+ methods described in are believed sufficient to
+ negotiate the use of alternative protocols.
+
+
+
+
+
+
+
+ The following pseudo-header fields are defined for HTTP/2 requests:
+
+
+
+ The :method pseudo-header field includes the HTTP
+ method ( ).
+
+
+
+
+ The :scheme pseudo-header field includes the scheme
+ portion of the target URI ( ).
+
+
+ :scheme is not restricted to http and https schemed URIs. A
+ proxy or gateway can translate requests for non-HTTP schemes, enabling the use
+ of HTTP to interact with non-HTTP services.
+
+
+
+
+ The :authority pseudo-header field includes the
+ authority portion of the target URI ( ). The authority MUST NOT include the deprecated userinfo subcomponent for http
+ or https schemed URIs.
+
+
+ To ensure that the HTTP/1.1 request line can be reproduced accurately, this
+ pseudo-header field MUST be omitted when translating from an HTTP/1.1 request
+ that has a request target in origin or asterisk form (see ). Clients that generate
+ HTTP/2 requests directly SHOULD use the :authority pseudo-header
+ field instead of the Host header field. An
+ intermediary that converts an HTTP/2 request to HTTP/1.1 MUST create a Host header field if one is not present in a request by
+ copying the value of the :authority pseudo-header
+ field.
+
+
+
+
+ The :path pseudo-header field includes the path and
+ query parts of the target URI (the path-absolute
+ production from and optionally a '?' character
+ followed by the query production, see and ). A request in asterisk form includes the value '*' for the
+ :path pseudo-header field.
+
+
+ This pseudo-header field MUST NOT be empty for http
+ or https URIs; http or
+ https URIs that do not contain a path component
+ MUST include a value of '/'. The exception to this rule is an OPTIONS request
+ for an http or https
+ URI that does not include a path component; these MUST include a :path pseudo-header field with a value of '*' (see ).
+
+
+
+
+
+ All HTTP/2 requests MUST include exactly one valid value for the :method , :scheme , and :path pseudo-header fields, unless it is a CONNECT request . An HTTP request that omits mandatory
+ pseudo-header fields is malformed .
+
+
+ HTTP/2 does not define a way to carry the version identifier that is included in the
+ HTTP/1.1 request line.
+
+
+
+
+
+ For HTTP/2 responses, a single :status pseudo-header
+ field is defined that carries the HTTP status code field (see ). This pseudo-header field MUST be included in all
+ responses, otherwise the response is malformed .
+
+
+ HTTP/2 does not define a way to carry the version or reason phrase that is included in
+ an HTTP/1.1 status line.
+
+
+
+
+
+ The Cookie header field can carry a significant amount of
+ redundant data.
+
+
+ The Cookie header field uses a semi-colon (";") to delimit cookie-pairs (or "crumbs").
+ This header field doesn't follow the list construction rules in HTTP (see ), which prevents cookie-pairs from
+ being separated into different name-value pairs. This can significantly reduce
+ compression efficiency as individual cookie-pairs are updated.
+
+
+ To allow for better compression efficiency, the Cookie header field MAY be split into
+ separate header fields, each with one or more cookie-pairs. If there are multiple
+ Cookie header fields after decompression, these MUST be concatenated into a single
+ octet string using the two octet delimiter of 0x3B, 0x20 (the ASCII string "; ")
+ before being passed into a non-HTTP/2 context, such as an HTTP/1.1 connection, or a
+ generic HTTP server application.
+
+
+
+ Therefore, the following two lists of Cookie header fields are semantically
+ equivalent.
+
+
+
+
+
+
+
+ A malformed request or response is one that is an otherwise valid sequence of HTTP/2
+ frames, but is otherwise invalid due to the presence of extraneous frames, prohibited
+ header fields, the absence of mandatory header fields, or the inclusion of uppercase
+ header field names.
+
+
+ A request or response that includes an entity body can include a content-length header field. A request or response is also
+ malformed if the value of a content-length header field
+ does not equal the sum of the DATA frame payload lengths that form the
+ body. A response that is defined to have no payload, as described in , can have a non-zero
+ content-length header field, even though no content is
+ included in DATA frames.
+
+
+ Intermediaries that process HTTP requests or responses (i.e., any intermediary not
+ acting as a tunnel) MUST NOT forward a malformed request or response. Malformed
+ requests or responses that are detected MUST be treated as a stream error of type PROTOCOL_ERROR .
+
+
+ For malformed requests, a server MAY send an HTTP response prior to closing or
+ resetting the stream. Clients MUST NOT accept a malformed response. Note that these
+ requirements are intended to protect against several types of common attacks against
+ HTTP; they are deliberately strict, because being permissive can expose
+ implementations to these vulnerabilities.
+
+
+
+
+
+
+ This section shows HTTP/1.1 requests and responses, with illustrations of equivalent
+ HTTP/2 requests and responses.
+
+
+ An HTTP GET request includes request header fields and no body and is therefore
+ transmitted as a single HEADERS frame, followed by zero or more
+ CONTINUATION frames containing the serialized block of request header
+ fields. The HEADERS frame in the following has both the END_HEADERS and
+ END_STREAM flags set; no CONTINUATION frames are sent:
+
+
+
+ + END_STREAM
+ Accept: image/jpeg + END_HEADERS
+ :method = GET
+ :scheme = https
+ :path = /resource
+ host = example.org
+ accept = image/jpeg
+]]>
+
+
+
+ Similarly, a response that includes only response header fields is transmitted as a
+ HEADERS frame (again, followed by zero or more
+ CONTINUATION frames) containing the serialized block of response header
+ fields.
+
+
+
+ + END_STREAM
+ Expires: Thu, 23 Jan ... + END_HEADERS
+ :status = 304
+ etag = "xyzzy"
+ expires = Thu, 23 Jan ...
+]]>
+
+
+
+ An HTTP POST request that includes request header fields and payload data is transmitted
+ as one HEADERS frame, followed by zero or more
+ CONTINUATION frames containing the request header fields, followed by one
+ or more DATA frames, with the last CONTINUATION (or
+ HEADERS ) frame having the END_HEADERS flag set and the final
+ DATA frame having the END_STREAM flag set:
+
+
+
+ - END_STREAM
+ Content-Type: image/jpeg - END_HEADERS
+ Content-Length: 123 :method = POST
+ :path = /resource
+ {binary data} :scheme = https
+
+ CONTINUATION
+ + END_HEADERS
+ content-type = image/jpeg
+ host = example.org
+ content-length = 123
+
+ DATA
+ + END_STREAM
+ {binary data}
+]]>
+
+ Note that data contributing to any given header field could be spread between header
+ block fragments. The allocation of header fields to frames in this example is
+ illustrative only.
+
+
+
+
+ A response that includes header fields and payload data is transmitted as a
+ HEADERS frame, followed by zero or more CONTINUATION
+ frames, followed by one or more DATA frames, with the last
+ DATA frame in the sequence having the END_STREAM flag set:
+
+
+
+ - END_STREAM
+ Content-Length: 123 + END_HEADERS
+ :status = 200
+ {binary data} content-type = image/jpeg
+ content-length = 123
+
+ DATA
+ + END_STREAM
+ {binary data}
+]]>
+
+
+
+ Trailing header fields are sent as a header block after both the request or response
+ header block and all the DATA frames have been sent. The
+ HEADERS frame starting the trailers header block has the END_STREAM flag
+ set.
+
+
+
+ - END_STREAM
+ Transfer-Encoding: chunked + END_HEADERS
+ Trailer: Foo :status = 200
+ content-length = 123
+ 123 content-type = image/jpeg
+ {binary data} trailer = Foo
+ 0
+ Foo: bar DATA
+ - END_STREAM
+ {binary data}
+
+ HEADERS
+ + END_STREAM
+ + END_HEADERS
+ foo = bar
+]]>
+
+
+
+
+
+ An informational response using a 1xx status code other than 101 is transmitted as a
+ HEADERS frame, followed by zero or more CONTINUATION
+ frames:
+
+ - END_STREAM
+ + END_HEADERS
+ :status = 103
+ extension-field = bar
+]]>
+
+
+
+
+
+ In HTTP/1.1, an HTTP client is unable to retry a non-idempotent request when an error
+ occurs, because there is no means to determine the nature of the error. It is possible
+ that some server processing occurred prior to the error, which could result in
+ undesirable effects if the request were reattempted.
+
+
+ HTTP/2 provides two mechanisms for providing a guarantee to a client that a request has
+ not been processed:
+
+
+ The GOAWAY frame indicates the highest stream number that might have
+ been processed. Requests on streams with higher numbers are therefore guaranteed to
+ be safe to retry.
+
+
+ The REFUSED_STREAM error code can be included in a
+ RST_STREAM frame to indicate that the stream is being closed prior to
+ any processing having occurred. Any request that was sent on the reset stream can
+ be safely retried.
+
+
+
+
+ Requests that have not been processed have not failed; clients MAY automatically retry
+ them, even those with non-idempotent methods.
+
+
+ A server MUST NOT indicate that a stream has not been processed unless it can guarantee
+ that fact. If frames that are on a stream are passed to the application layer for any
+ stream, then REFUSED_STREAM MUST NOT be used for that stream, and a
+ GOAWAY frame MUST include a stream identifier that is greater than or
+ equal to the given stream identifier.
+
+
+ In addition to these mechanisms, the PING frame provides a way for a
+ client to easily test a connection. Connections that remain idle can become broken as
+ some middleboxes (for instance, network address translators, or load balancers) silently
+ discard connection bindings. The PING frame allows a client to safely
+ test whether a connection is still active without sending a request.
+
+
+
+
+
+
+ HTTP/2 allows a server to pre-emptively send (or "push") responses (along with
+ corresponding "promised" requests) to a client in association with a previous
+ client-initiated request. This can be useful when the server knows the client will need
+ to have those responses available in order to fully process the response to the original
+ request.
+
+
+
+ Pushing additional message exchanges in this fashion is optional, and is negotiated
+ between individual endpoints. The SETTINGS_ENABLE_PUSH setting can be set
+ to 0 to indicate that server push is disabled.
+
+
+ Promised requests MUST be cacheable (see ), MUST be safe (see ) and MUST NOT include a request body. Clients that receive a
+ promised request that is not cacheable, unsafe or that includes a request body MUST
+ reset the stream with a stream error of type
+ PROTOCOL_ERROR .
+
+
+ Pushed responses that are cacheable (see ) can be stored by the client, if it implements a HTTP
+ cache. Pushed responses are considered successfully validated on the origin server (e.g.,
+ if the "no-cache" cache response directive is present) while the stream identified by the
+ promised stream ID is still open.
+
+
+ Pushed responses that are not cacheable MUST NOT be stored by any HTTP cache. They MAY
+ be made available to the application separately.
+
+
+ An intermediary can receive pushes from the server and choose not to forward them on to
+ the client. In other words, how to make use of the pushed information is up to that
+ intermediary. Equally, the intermediary might choose to make additional pushes to the
+ client, without any action taken by the server.
+
+
+ A client cannot push. Thus, servers MUST treat the receipt of a
+ PUSH_PROMISE frame as a connection
+ error of type PROTOCOL_ERROR . Clients MUST reject any attempt to
+ change the SETTINGS_ENABLE_PUSH setting to a value other than 0 by treating
+ the message as a connection error of type
+ PROTOCOL_ERROR .
+
+
+
+
+ Server push is semantically equivalent to a server responding to a request; however, in
+ this case that request is also sent by the server, as a PUSH_PROMISE
+ frame.
+
+
+ The PUSH_PROMISE frame includes a header block that contains a complete
+ set of request header fields that the server attributes to the request. It is not
+ possible to push a response to a request that includes a request body.
+
+
+
+ Pushed responses are always associated with an explicit request from the client. The
+ PUSH_PROMISE frames sent by the server are sent on that explicit
+ request's stream. The PUSH_PROMISE frame also includes a promised stream
+ identifier, chosen from the stream identifiers available to the server (see ).
+
+
+
+ The header fields in PUSH_PROMISE and any subsequent
+ CONTINUATION frames MUST be a valid and complete set of request header fields . The server MUST include a method in
+ the :method header field that is safe and cacheable. If a
+ client receives a PUSH_PROMISE that does not include a complete and valid
+ set of header fields, or the :method header field identifies
+ a method that is not safe, it MUST respond with a stream error of type PROTOCOL_ERROR .
+
+
+
+ The server SHOULD send PUSH_PROMISE ( )
+ frames prior to sending any frames that reference the promised responses. This avoids a
+ race where clients issue requests prior to receiving any PUSH_PROMISE
+ frames.
+
+
+ For example, if the server receives a request for a document containing embedded links
+ to multiple image files, and the server chooses to push those additional images to the
+ client, sending push promises before the DATA frames that contain the
+ image links ensures that the client is able to see the promises before discovering
+ embedded links. Similarly, if the server pushes responses referenced by the header block
+ (for instance, in Link header fields), sending the push promises before sending the
+ header block ensures that clients do not request them.
+
+
+
+ PUSH_PROMISE frames MUST NOT be sent by the client.
+
+
+ PUSH_PROMISE frames can be sent by the server in response to any
+ client-initiated stream, but the stream MUST be in either the "open" or "half closed
+ (remote)" state with respect to the server. PUSH_PROMISE frames are
+ interspersed with the frames that comprise a response, though they cannot be
+ interspersed with HEADERS and CONTINUATION frames that
+ comprise a single header block.
+
+
+ Sending a PUSH_PROMISE frame creates a new stream and puts the stream
+ into the “reserved (local)” state for the server and the “reserved (remote)” state for
+ the client.
+
+
+
+
+
+ After sending the PUSH_PROMISE frame, the server can begin delivering the
+ pushed response as a response on a server-initiated
+ stream that uses the promised stream identifier. The server uses this stream to
+ transmit an HTTP response, using the same sequence of frames as defined in . This stream becomes "half closed"
+ to the client after the initial HEADERS frame is sent.
+
+
+
+ Once a client receives a PUSH_PROMISE frame and chooses to accept the
+ pushed response, the client SHOULD NOT issue any requests for the promised response
+ until after the promised stream has closed.
+
+
+
+ If the client determines, for any reason, that it does not wish to receive the pushed
+ response from the server, or if the server takes too long to begin sending the promised
+ response, the client can send an RST_STREAM frame, using either the
+ CANCEL or REFUSED_STREAM codes, and referencing the pushed
+ stream's identifier.
+
+
+ A client can use the SETTINGS_MAX_CONCURRENT_STREAMS setting to limit the
+ number of responses that can be concurrently pushed by a server. Advertising a
+ SETTINGS_MAX_CONCURRENT_STREAMS value of zero disables server push by
+ preventing the server from creating the necessary streams. This does not prohibit a
+ server from sending PUSH_PROMISE frames; clients need to reset any
+ promised streams that are not wanted.
+
+
+
+ Clients receiving a pushed response MUST validate that either the server is
+ authoritative (see ), or the proxy that provided the pushed
+ response is configured for the corresponding request. For example, a server that offers
+ a certificate for only the example.com DNS-ID or Common Name
+ is not permitted to push a response for https://www.example.org/doc .
+
+
+ The response for a PUSH_PROMISE stream begins with a
+ HEADERS frame, which immediately puts the stream into the “half closed
+ (remote)” state for the server and “half closed (local)” state for the client, and ends
+ with a frame bearing END_STREAM, which places the stream in the "closed" state.
+
+
+ The client never sends a frame with the END_STREAM flag for a server push.
+
+
+
+
+
+
+
+
+
+ In HTTP/1.x, the pseudo-method CONNECT ( ) is used to convert an HTTP connection into a tunnel to a remote host.
+ CONNECT is primarily used with HTTP proxies to establish a TLS session with an origin
+ server for the purposes of interacting with https resources.
+
+
+ In HTTP/2, the CONNECT method is used to establish a tunnel over a single HTTP/2 stream to
+ a remote host, for similar purposes. The HTTP header field mapping works as defined in
+ Request Header Fields , with a few
+ differences. Specifically:
+
+
+ The :method header field is set to CONNECT .
+
+
+ The :scheme and :path header
+ fields MUST be omitted.
+
+
+ The :authority header field contains the host and port to
+ connect to (equivalent to the authority-form of the request-target of CONNECT
+ requests, see ).
+
+
+
+
+ A proxy that supports CONNECT establishes a TCP connection to
+ the server identified in the :authority header field. Once
+ this connection is successfully established, the proxy sends a HEADERS
+ frame containing a 2xx series status code to the client, as defined in .
+
+
+ After the initial HEADERS frame sent by each peer, all subsequent
+ DATA frames correspond to data sent on the TCP connection. The payload of
+ any DATA frames sent by the client is transmitted by the proxy to the TCP
+ server; data received from the TCP server is assembled into DATA frames by
+ the proxy. Frame types other than DATA or stream management frames
+ (RST_STREAM , WINDOW_UPDATE , and PRIORITY )
+ MUST NOT be sent on a connected stream, and MUST be treated as a stream error if received.
+
+
+ The TCP connection can be closed by either peer. The END_STREAM flag on a
+ DATA frame is treated as being equivalent to the TCP FIN bit. A client is
+ expected to send a DATA frame with the END_STREAM flag set after receiving
+ a frame bearing the END_STREAM flag. A proxy that receives a DATA frame
+ with the END_STREAM flag set sends the attached data with the FIN bit set on the last TCP
+ segment. A proxy that receives a TCP segment with the FIN bit set sends a
+ DATA frame with the END_STREAM flag set. Note that the final TCP segment
+ or DATA frame could be empty.
+
+
+ A TCP connection error is signaled with RST_STREAM . A proxy treats any
+ error in the TCP connection, which includes receiving a TCP segment with the RST bit set,
+ as a stream error of type
+ CONNECT_ERROR . Correspondingly, a proxy MUST send a TCP segment with the
+ RST bit set if it detects an error with the stream or the HTTP/2 connection.
+
+
+
+
+
+
+ This section outlines attributes of the HTTP protocol that improve interoperability, reduce
+ exposure to known security vulnerabilities, or reduce the potential for implementation
+ variation.
+
+
+
+
+ HTTP/2 connections are persistent. For best performance, it is expected clients will not
+ close connections until it is determined that no further communication with a server is
+ necessary (for example, when a user navigates away from a particular web page), or until
+ the server closes the connection.
+
+
+ Clients SHOULD NOT open more than one HTTP/2 connection to a given host and port pair,
+ where host is derived from a URI, a selected alternative
+ service , or a configured proxy.
+
+
+ A client can create additional connections as replacements, either to replace connections
+ that are near to exhausting the available stream
+ identifier space , to refresh the keying material for a TLS connection, or to
+ replace connections that have encountered errors .
+
+
+ A client MAY open multiple connections to the same IP address and TCP port using different
+ Server Name Indication values or to provide different TLS
+ client certificates, but SHOULD avoid creating multiple connections with the same
+ configuration.
+
+
+ Servers are encouraged to maintain open connections for as long as possible, but are
+ permitted to terminate idle connections if necessary. When either endpoint chooses to
+ close the transport-layer TCP connection, the terminating endpoint SHOULD first send a
+ GOAWAY ( ) frame so that both endpoints can reliably
+ determine whether previously sent frames have been processed and gracefully complete or
+ terminate any necessary remaining tasks.
+
+
+
+
+ Connections that are made to an origin servers, either directly or through a tunnel
+ created using the CONNECT method MAY be reused for
+ requests with multiple different URI authority components. A connection can be reused
+ as long as the origin server is authoritative . For
+ http resources, this depends on the host having resolved to
+ the same IP address.
+
+
+ For https resources, connection reuse additionally depends
+ on having a certificate that is valid for the host in the URI. An origin server might
+ offer a certificate with multiple subjectAltName attributes,
+ or names with wildcards, one of which is valid for the authority in the URI. For
+ example, a certificate with a subjectAltName of *.example.com might permit the use of the same connection for
+ requests to URIs starting with https://a.example.com/ and
+ https://b.example.com/ .
+
+
+ In some deployments, reusing a connection for multiple origins can result in requests
+ being directed to the wrong origin server. For example, TLS termination might be
+ performed by a middlebox that uses the TLS Server Name Indication
+ (SNI) extension to select an origin server. This means that it is possible
+ for clients to send confidential information to servers that might not be the intended
+ target for the request, even though the server is otherwise authoritative.
+
+
+ A server that does not wish clients to reuse connections can indicate that it is not
+ authoritative for a request by sending a 421 (Misdirected Request) status code in response
+ to the request (see ).
+
+
+ A client that is configured to use a proxy over HTTP/2 directs requests to that proxy
+ through a single connection. That is, all requests sent via a proxy reuse the
+ connection to the proxy.
+
+
+
+
+
+ The 421 (Misdirected Request) status code indicates that the request was directed at a
+ server that is not able to produce a response. This can be sent by a server that is not
+ configured to produce responses for the combination of scheme and authority that are
+ included in the request URI.
+
+
+ Clients receiving a 421 (Misdirected Request) response from a server MAY retry the
+ request - whether the request method is idempotent or not - over a different connection.
+ This is possible if a connection is reused ( ) or if an alternative
+ service is selected ( ).
+
+
+ This status code MUST NOT be generated by proxies.
+
+
+ A 421 response is cacheable by default; i.e., unless otherwise indicated by the method
+ definition or explicit cache controls (see ).
+
+
+
+
+
+
+ Implementations of HTTP/2 MUST support TLS 1.2 for HTTP/2 over
+ TLS. The general TLS usage guidance in SHOULD be followed, with
+ some additional restrictions that are specific to HTTP/2.
+
+
+
+ An implementation of HTTP/2 over TLS MUST use TLS 1.2 or higher with the restrictions on
+ feature set and cipher suite described in this section. Due to implementation
+ limitations, it might not be possible to fail TLS negotiation. An endpoint MUST
+ immediately terminate an HTTP/2 connection that does not meet these minimum requirements
+ with a connection error of type
+ INADEQUATE_SECURITY .
+
+
+
+
+ The TLS implementation MUST support the Server Name Indication
+ (SNI) extension to TLS. HTTP/2 clients MUST indicate the target domain name when
+ negotiating TLS.
+
+
+ The TLS implementation MUST disable compression. TLS compression can lead to the
+ exposure of information that would not otherwise be revealed .
+ Generic compression is unnecessary since HTTP/2 provides compression features that are
+ more aware of context and therefore likely to be more appropriate for use for
+ performance, security or other reasons.
+
+
+ The TLS implementation MUST disable renegotiation. An endpoint MUST treat a TLS
+ renegotiation as a connection error of type
+ PROTOCOL_ERROR . Note that disabling renegotiation can result in
+ long-lived connections becoming unusable due to limits on the number of messages the
+ underlying cipher suite can encipher.
+
+
+ A client MAY use renegotiation to provide confidentiality protection for client
+ credentials offered in the handshake, but any renegotiation MUST occur prior to sending
+ the connection preface. A server SHOULD request a client certificate if it sees a
+ renegotiation request immediately after establishing a connection.
+
+
+ This effectively prevents the use of renegotiation in response to a request for a
+ specific protected resource. A future specification might provide a way to support this
+ use case.
+
+
+
+
+
+ The set of TLS cipher suites that are permitted in HTTP/2 is restricted. HTTP/2 MUST
+ only be used with cipher suites that have ephemeral key exchange, such as the ephemeral Diffie-Hellman (DHE) or the elliptic curve variant (ECDHE) . Ephemeral key exchange MUST
+ have a minimum size of 2048 bits for DHE or security level of 128 bits for ECDHE.
+ Clients MUST accept DHE sizes of up to 4096 bits. HTTP MUST NOT be used with cipher
+ suites that use stream or block ciphers. Authenticated Encryption with Additional Data
+ (AEAD) modes, such as the Galois Counter Model (GCM) mode for
+ AES are acceptable.
+
+
+ The effect of these restrictions is that TLS 1.2 implementations could have
+ non-intersecting sets of available cipher suites, since these prevent the use of the
+ cipher suite that TLS 1.2 makes mandatory. To avoid this problem, implementations of
+ HTTP/2 that use TLS 1.2 MUST support TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 with P256 .
+
+
+ Clients MAY advertise support of cipher suites that are prohibited by the above
+ restrictions in order to allow for connection to servers that do not support HTTP/2.
+ This enables a fallback to protocols without these constraints without the additional
+ latency imposed by using a separate connection for fallback.
+
+
+
+
+
+
+
+
+ HTTP/2 relies on the HTTP/1.1 definition of authority for determining whether a server is
+ authoritative in providing a given response, see . This relies on local name resolution for the "http"
+ URI scheme, and the authenticated server identity for the "https" scheme (see ).
+
+
+
+
+
+ In a cross-protocol attack, an attacker causes a client to initiate a transaction in one
+ protocol toward a server that understands a different protocol. An attacker might be able
+ to cause the transaction to appear as valid transaction in the second protocol. In
+ combination with the capabilities of the web context, this can be used to interact with
+ poorly protected servers in private networks.
+
+
+ Completing a TLS handshake with an ALPN identifier for HTTP/2 can be considered sufficient
+ protection against cross protocol attacks. ALPN provides a positive indication that a
+ server is willing to proceed with HTTP/2, which prevents attacks on other TLS-based
+ protocols.
+
+
+ The encryption in TLS makes it difficult for attackers to control the data which could be
+ used in a cross-protocol attack on a cleartext protocol.
+
+
+ The cleartext version of HTTP/2 has minimal protection against cross-protocol attacks.
+ The connection preface contains a string that is
+ designed to confuse HTTP/1.1 servers, but no special protection is offered for other
+ protocols. A server that is willing to ignore parts of an HTTP/1.1 request containing an
+ Upgrade header field in addition to the client connection preface could be exposed to a
+ cross-protocol attack.
+
+
+
+
+
+ HTTP/2 header field names and values are encoded as sequences of octets with a length
+ prefix. This enables HTTP/2 to carry any string of octets as the name or value of a
+ header field. An intermediary that translates HTTP/2 requests or responses into HTTP/1.1
+ directly could permit the creation of corrupted HTTP/1.1 messages. An attacker might
+ exploit this behavior to cause the intermediary to create HTTP/1.1 messages with illegal
+ header fields, extra header fields, or even new messages that are entirely falsified.
+
+
+ Header field names or values that contain characters not permitted by HTTP/1.1, including
+ carriage return (ASCII 0xd) or line feed (ASCII 0xa) MUST NOT be translated verbatim by an
+ intermediary, as stipulated in .
+
+
+ Translation from HTTP/1.x to HTTP/2 does not produce the same opportunity to an attacker.
+ Intermediaries that perform translation to HTTP/2 MUST remove any instances of the obs-fold production from header field values.
+
+
+
+
+
+ Pushed responses do not have an explicit request from the client; the request
+ is provided by the server in the PUSH_PROMISE frame.
+
+
+ Caching responses that are pushed is possible based on the guidance provided by the origin
+ server in the Cache-Control header field. However, this can cause issues if a single
+ server hosts more than one tenant. For example, a server might offer multiple users each
+ a small portion of its URI space.
+
+
+ Where multiple tenants share space on the same server, that server MUST ensure that
+ tenants are not able to push representations of resources that they do not have authority
+ over. Failure to enforce this would allow a tenant to provide a representation that would
+ be served out of cache, overriding the actual representation that the authoritative tenant
+ provides.
+
+
+ Pushed responses for which an origin server is not authoritative (see
+ ) are never cached or used.
+
+
+
+
+
+ An HTTP/2 connection can demand a greater commitment of resources to operate than a
+ HTTP/1.1 connection. The use of header compression and flow control depend on a
+ commitment of resources for storing a greater amount of state. Settings for these
+ features ensure that memory commitments for these features are strictly bounded.
+
+
+ The number of PUSH_PROMISE frames is not constrained in the same fashion.
+ A client that accepts server push SHOULD limit the number of streams it allows to be in
+ the "reserved (remote)" state. Excessive number of server push streams can be treated as
+ a stream error of type
+ ENHANCE_YOUR_CALM .
+
+
+ Processing capacity cannot be guarded as effectively as state capacity.
+
+
+ The SETTINGS frame can be abused to cause a peer to expend additional
+ processing time. This might be done by pointlessly changing SETTINGS parameters, setting
+ multiple undefined parameters, or changing the same setting multiple times in the same
+ frame. WINDOW_UPDATE or PRIORITY frames can be abused to
+ cause an unnecessary waste of resources.
+
+
+ Large numbers of small or empty frames can be abused to cause a peer to expend time
+ processing frame headers. Note however that some uses are entirely legitimate, such as
+ the sending of an empty DATA frame to end a stream.
+
+
+ Header compression also offers some opportunities to waste processing resources; see for more details on potential abuses.
+
+
+ Limits in SETTINGS parameters cannot be reduced instantaneously, which
+ leaves an endpoint exposed to behavior from a peer that could exceed the new limits. In
+ particular, immediately after establishing a connection, limits set by a server are not
+ known to clients and could be exceeded without being an obvious protocol violation.
+
+
+ All these features - i.e., SETTINGS changes, small frames, header
+ compression - have legitimate uses. These features become a burden only when they are
+ used unnecessarily or to excess.
+
+
+ An endpoint that doesn't monitor this behavior exposes itself to a risk of denial of
+ service attack. Implementations SHOULD track the use of these features and set limits on
+ their use. An endpoint MAY treat activity that is suspicious as a connection error of type
+ ENHANCE_YOUR_CALM .
+
+
+
+
+ A large header block can cause an implementation to
+ commit a large amount of state. Header fields that are critical for routing can appear
+ toward the end of a header block, which prevents streaming of header fields to their
+ ultimate destination. For this an other reasons, such as ensuring cache correctness,
+ means that an endpoint might need to buffer the entire header block. Since there is no
+ hard limit to the size of a header block, some endpoints could be forced commit a large
+ amount of available memory for header fields.
+
+
+ An endpoint can use the SETTINGS_MAX_HEADER_LIST_SIZE to advise peers of
+ limits that might apply on the size of header blocks. This setting is only advisory, so
+ endpoints MAY choose to send header blocks that exceed this limit and risk having the
+ request or response being treated as malformed. This setting specific to a connection,
+ so any request or response could encounter a hop with a lower, unknown limit. An
+ intermediary can attempt to avoid this problem by passing on values presented by
+ different peers, but they are not obligated to do so.
+
+
+ A server that receives a larger header block than it is willing to handle can send an
+ HTTP 431 (Request Header Fields Too Large) status code . A
+ client can discard responses that it cannot process. The header block MUST be processed
+ to ensure a consistent connection state, unless the connection is closed.
+
+
+
+
+
+
+ HTTP/2 enables greater use of compression for both header fields ( ) and entity bodies. Compression can allow an attacker to recover
+ secret data when it is compressed in the same context as data under attacker control.
+
+
+ There are demonstrable attacks on compression that exploit the characteristics of the web
+ (e.g., ). The attacker induces multiple requests containing
+ varying plaintext, observing the length of the resulting ciphertext in each, which
+ reveals a shorter length when a guess about the secret is correct.
+
+
+ Implementations communicating on a secure channel MUST NOT compress content that includes
+ both confidential and attacker-controlled data unless separate compression dictionaries
+ are used for each source of data. Compression MUST NOT be used if the source of data
+ cannot be reliably determined. Generic stream compression, such as that provided by TLS
+ MUST NOT be used with HTTP/2 ( ).
+
+
+ Further considerations regarding the compression of header fields are described in .
+
+
+
+
+
+ Padding within HTTP/2 is not intended as a replacement for general purpose padding, such
+ as might be provided by TLS . Redundant padding could even be
+ counterproductive. Correct application can depend on having specific knowledge of the
+ data that is being padded.
+
+
+ To mitigate attacks that rely on compression, disabling or limiting compression might be
+ preferable to padding as a countermeasure.
+
+
+ Padding can be used to obscure the exact size of frame content, and is provided to
+ mitigate specific attacks within HTTP. For example, attacks where compressed content
+ includes both attacker-controlled plaintext and secret data (see for example, ).
+
+
+ Use of padding can result in less protection than might seem immediately obvious. At
+ best, padding only makes it more difficult for an attacker to infer length information by
+ increasing the number of frames an attacker has to observe. Incorrectly implemented
+ padding schemes can be easily defeated. In particular, randomized padding with a
+ predictable distribution provides very little protection; similarly, padding payloads to a
+ fixed size exposes information as payload sizes cross the fixed size boundary, which could
+ be possible if an attacker can control plaintext.
+
+
+ Intermediaries SHOULD retain padding for DATA frames, but MAY drop padding
+ for HEADERS and PUSH_PROMISE frames. A valid reason for an
+ intermediary to change the amount of padding of frames is to improve the protections that
+ padding provides.
+
+
+
+
+
+ Several characteristics of HTTP/2 provide an observer an opportunity to correlate actions
+ of a single client or server over time. This includes the value of settings, the manner
+ in which flow control windows are managed, the way priorities are allocated to streams,
+ timing of reactions to stimulus, and handling of any optional features.
+
+
+ As far as this creates observable differences in behavior, they could be used as a basis
+ for fingerprinting a specific client, as defined in .
+
+
+
+
+
+
+ A string for identifying HTTP/2 is entered into the "Application Layer Protocol Negotiation
+ (ALPN) Protocol IDs" registry established in .
+
+
+ This document establishes a registry for frame types, settings, and error codes. These new
+ registries are entered into a new "Hypertext Transfer Protocol (HTTP) 2 Parameters" section.
+
+
+ This document registers the HTTP2-Settings header field for
+ use in HTTP; and the 421 (Misdirected Request) status code.
+
+
+ This document registers the PRI method for use in HTTP, to avoid
+ collisions with the connection preface .
+
+
+
+
+ This document creates two registrations for the identification of HTTP/2 in the
+ "Application Layer Protocol Negotiation (ALPN) Protocol IDs" registry established in .
+
+
+ The "h2" string identifies HTTP/2 when used over TLS:
+
+ HTTP/2 over TLS
+ 0x68 0x32 ("h2")
+ This document
+
+
+
+ The "h2c" string identifies HTTP/2 when used over cleartext TCP:
+
+ HTTP/2 over TCP
+ 0x68 0x32 0x63 ("h2c")
+ This document
+
+
+
+
+
+
+ This document establishes a registry for HTTP/2 frame type codes. The "HTTP/2 Frame
+ Type" registry manages an 8-bit space. The "HTTP/2 Frame Type" registry operates under
+ either of the "IETF Review" or "IESG Approval" policies for
+ values between 0x00 and 0xef, with values between 0xf0 and 0xff being reserved for
+ experimental use.
+
+
+ New entries in this registry require the following information:
+
+
+ A name or label for the frame type.
+
+
+ The 8-bit code assigned to the frame type.
+
+
+ A reference to a specification that includes a description of the frame layout,
+ it's semantics and flags that the frame type uses, including any parts of the frame
+ that are conditionally present based on the value of flags.
+
+
+
+
+ The entries in the following table are registered by this document.
+
+
+ Frame Type
+ Code
+ Section
+ DATA 0x0
+ HEADERS 0x1
+ PRIORITY 0x2
+ RST_STREAM 0x3
+ SETTINGS 0x4
+ PUSH_PROMISE 0x5
+ PING 0x6
+ GOAWAY 0x7
+ WINDOW_UPDATE 0x8
+ CONTINUATION 0x9
+
+
+
+
+
+ This document establishes a registry for HTTP/2 settings. The "HTTP/2 Settings" registry
+ manages a 16-bit space. The "HTTP/2 Settings" registry operates under the "Expert Review" policy for values in the range from 0x0000 to
+ 0xefff, with values between and 0xf000 and 0xffff being reserved for experimental use.
+
+
+ New registrations are advised to provide the following information:
+
+
+ A symbolic name for the setting. Specifying a setting name is optional.
+
+
+ The 16-bit code assigned to the setting.
+
+
+ An initial value for the setting.
+
+
+ An optional reference to a specification that describes the use of the setting.
+
+
+
+
+ An initial set of setting registrations can be found in .
+
+
+ Name
+ Code
+ Initial Value
+ Specification
+ HEADER_TABLE_SIZE
+ 0x1 4096
+ ENABLE_PUSH
+ 0x2 1
+ MAX_CONCURRENT_STREAMS
+ 0x3 (infinite)
+ INITIAL_WINDOW_SIZE
+ 0x4 65535
+ MAX_FRAME_SIZE
+ 0x5 16384
+ MAX_HEADER_LIST_SIZE
+ 0x6 (infinite)
+
+
+
+
+
+
+ This document establishes a registry for HTTP/2 error codes. The "HTTP/2 Error Code"
+ registry manages a 32-bit space. The "HTTP/2 Error Code" registry operates under the
+ "Expert Review" policy .
+
+
+ Registrations for error codes are required to include a description of the error code. An
+ expert reviewer is advised to examine new registrations for possible duplication with
+ existing error codes. Use of existing registrations is to be encouraged, but not
+ mandated.
+
+
+ New registrations are advised to provide the following information:
+
+
+ A name for the error code. Specifying an error code name is optional.
+
+
+ The 32-bit error code value.
+
+
+ A brief description of the error code semantics, longer if no detailed specification
+ is provided.
+
+
+ An optional reference for a specification that defines the error code.
+
+
+
+
+ The entries in the following table are registered by this document.
+
+
+ Name
+ Code
+ Description
+ Specification
+ NO_ERROR 0x0
+ Graceful shutdown
+
+ PROTOCOL_ERROR 0x1
+ Protocol error detected
+
+ INTERNAL_ERROR 0x2
+ Implementation fault
+
+ FLOW_CONTROL_ERROR 0x3
+ Flow control limits exceeded
+
+ SETTINGS_TIMEOUT 0x4
+ Settings not acknowledged
+
+ STREAM_CLOSED 0x5
+ Frame received for closed stream
+
+ FRAME_SIZE_ERROR 0x6
+ Frame size incorrect
+
+ REFUSED_STREAM 0x7
+ Stream not processed
+
+ CANCEL 0x8
+ Stream cancelled
+
+ COMPRESSION_ERROR 0x9
+ Compression state not updated
+
+ CONNECT_ERROR 0xa
+ TCP connection error for CONNECT method
+
+ ENHANCE_YOUR_CALM 0xb
+ Processing capacity exceeded
+
+ INADEQUATE_SECURITY 0xc
+ Negotiated TLS parameters not acceptable
+
+
+
+
+
+
+
+ This section registers the HTTP2-Settings header field in the
+ Permanent Message Header Field Registry .
+
+
+ HTTP2-Settings
+
+
+ http
+
+
+ standard
+
+
+ IETF
+
+
+ of this document
+
+
+ This header field is only used by an HTTP/2 client for Upgrade-based negotiation.
+
+
+
+
+
+
+
+ This section registers the PRI method in the HTTP Method
+ Registry ( ).
+
+
+ PRI
+
+
+ No
+
+
+ No
+
+
+ of this document
+
+
+ This method is never used by an actual client. This method will appear to be used
+ when an HTTP/1.1 server or intermediary attempts to parse an HTTP/2 connection
+ preface.
+
+
+
+
+
+
+
+ This document registers the 421 (Misdirected Request) HTTP Status code in the Hypertext
+ Transfer Protocol (HTTP) Status Code Registry ( ).
+
+
+
+
+ 421
+
+
+ Misdirected Request
+
+
+ of this document
+
+
+
+
+
+
+
+
+
+ This document includes substantial input from the following individuals:
+
+
+ Adam Langley, Wan-Teh Chang, Jim Morrison, Mark Nottingham, Alyssa Wilk, Costin
+ Manolache, William Chan, Vitaliy Lvin, Joe Chan, Adam Barth, Ryan Hamilton, Gavin
+ Peters, Kent Alstad, Kevin Lindsay, Paul Amer, Fan Yang, Jonathan Leighton (SPDY
+ contributors).
+
+
+ Gabriel Montenegro and Willy Tarreau (Upgrade mechanism).
+
+
+ William Chan, Salvatore Loreto, Osama Mazahir, Gabriel Montenegro, Jitu Padhye, Roberto
+ Peon, Rob Trace (Flow control).
+
+
+ Mike Bishop (Extensibility).
+
+
+ Mark Nottingham, Julian Reschke, James Snell, Jeff Pinner, Mike Bishop, Herve Ruellan
+ (Substantial editorial contributions).
+
+
+ Kari Hurtta, Tatsuhiro Tsujikawa, Greg Wilkins, Poul-Henning Kamp.
+
+
+ Alexey Melnikov was an editor of this document during 2013.
+
+
+ A substantial proportion of Martin's contribution was supported by Microsoft during his
+ employment there.
+
+
+
+
+
+
+
+
+
+
+ HPACK - Header Compression for HTTP/2
+
+
+
+
+
+
+
+
+
+
+
+ Transmission Control Protocol
+
+
+ University of Southern California (USC)/Information Sciences
+ Institute
+
+
+
+
+
+
+
+
+
+
+ Key words for use in RFCs to Indicate Requirement Levels
+
+
+ Harvard University
+ sob@harvard.edu
+
+
+
+
+
+
+
+
+
+
+ HTTP Over TLS
+
+
+
+
+
+
+
+
+
+ Uniform Resource Identifier (URI): Generic
+ Syntax
+
+
+
+
+
+
+
+
+
+
+
+ The Base16, Base32, and Base64 Data Encodings
+
+
+
+
+
+
+
+
+ Guidelines for Writing an IANA Considerations Section in RFCs
+
+
+
+
+
+
+
+
+
+
+ Augmented BNF for Syntax Specifications: ABNF
+
+
+
+
+
+
+
+
+
+
+ The Transport Layer Security (TLS) Protocol Version 1.2
+
+
+
+
+
+
+
+
+
+
+ Transport Layer Security (TLS) Extensions: Extension Definitions
+
+
+
+
+
+
+
+
+
+ Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois
+ Counter Mode (GCM)
+
+
+
+
+
+
+
+
+
+
+ Digital Signature Standard (DSS)
+
+ NIST
+
+
+
+
+
+
+
+
+ Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
+
+ Adobe Systems Incorporated
+ fielding@gbiv.com
+
+
+ greenbytes GmbH
+ julian.reschke@greenbytes.de
+
+
+
+
+
+
+
+
+
+ Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
+
+ Adobe Systems Incorporated
+ fielding@gbiv.com
+
+
+ greenbytes GmbH
+ julian.reschke@greenbytes.de
+
+
+
+
+
+
+
+
+ Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
+
+ Adobe Systems Incorporated
+ fielding@gbiv.com
+
+
+ greenbytes GmbH
+ julian.reschke@greenbytes.de
+
+
+
+
+
+
+
+ Hypertext Transfer Protocol (HTTP/1.1): Range Requests
+
+ Adobe Systems Incorporated
+ fielding@gbiv.com
+
+
+ World Wide Web Consortium
+ ylafon@w3.org
+
+
+ greenbytes GmbH
+ julian.reschke@greenbytes.de
+
+
+
+
+
+
+
+ Hypertext Transfer Protocol (HTTP/1.1): Caching
+
+ Adobe Systems Incorporated
+ fielding@gbiv.com
+
+
+ Akamai
+ mnot@mnot.net
+
+
+ greenbytes GmbH
+ julian.reschke@greenbytes.de
+
+
+
+
+
+
+
+
+ Hypertext Transfer Protocol (HTTP/1.1): Authentication
+
+ Adobe Systems Incorporated
+ fielding@gbiv.com
+
+
+ greenbytes GmbH
+ julian.reschke@greenbytes.de
+
+
+
+
+
+
+
+
+
+ HTTP State Management Mechanism
+
+
+
+
+
+
+
+
+
+
+
+ TCP Extensions for High Performance
+
+
+
+
+
+
+
+
+
+
+
+ Transport Layer Security Protocol Compression Methods
+
+
+
+
+
+
+
+
+ Additional HTTP Status Codes
+
+
+
+
+
+
+
+
+
+
+ Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AES Galois Counter Mode (GCM) Cipher Suites for TLS
+
+
+
+
+
+
+
+
+
+
+
+ HTML5
+
+
+
+
+
+
+
+
+
+
+ Latest version available at
+ .
+
+
+
+
+
+
+ Talking to Yourself for Fun and Profit
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BREACH: Reviving the CRIME Attack
+
+
+
+
+
+
+
+
+
+
+ Registration Procedures for Message Header Fields
+
+ Nine by Nine
+ GK-IETF@ninebynine.org
+
+
+ BEA Systems
+ mnot@pobox.com
+
+
+ HP Labs
+ JeffMogul@acm.org
+
+
+
+
+
+
+
+
+
+ Recommendations for Secure Use of TLS and DTLS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTP Alternative Services
+
+
+ Akamai
+
+
+ Mozilla
+
+
+ greenbytes
+
+
+
+
+
+
+
+
+
+
+ This section is to be removed by RFC Editor before publication.
+
+
+
+
+ Renamed Not Authoritative status code to Misdirected Request.
+
+
+
+
+
+ Pseudo-header fields are now required to appear strictly before regular ones.
+
+
+ Restored 1xx series status codes, except 101.
+
+
+ Changed frame length field 24-bits. Expanded frame header to 9 octets. Added a setting
+ to limit the damage.
+
+
+ Added a setting to advise peers of header set size limits.
+
+
+ Removed segments.
+
+
+ Made non-semantic-bearing HEADERS frames illegal in the HTTP mapping.
+
+
+
+
+
+ Restored extensibility options.
+
+
+ Restricting TLS cipher suites to AEAD only.
+
+
+ Removing Content-Encoding requirements.
+
+
+ Permitting the use of PRIORITY after stream close.
+
+
+ Removed ALTSVC frame.
+
+
+ Removed BLOCKED frame.
+
+
+ Reducing the maximum padding size to 256 octets; removing padding from
+ CONTINUATION frames.
+
+
+ Removed per-frame GZIP compression.
+
+
+
+
+
+ Added BLOCKED frame (at risk).
+
+
+ Simplified priority scheme.
+
+
+ Added DATA per-frame GZIP compression.
+
+
+
+
+
+ Changed "connection header" to "connection preface" to avoid confusion.
+
+
+ Added dependency-based stream prioritization.
+
+
+ Added "h2c" identifier to distinguish between cleartext and secured HTTP/2.
+
+
+ Adding missing padding to PUSH_PROMISE .
+
+
+ Integrate ALTSVC frame and supporting text.
+
+
+ Dropping requirement on "deflate" Content-Encoding.
+
+
+ Improving security considerations around use of compression.
+
+
+
+
+
+ Adding padding for data frames.
+
+
+ Renumbering frame types, error codes, and settings.
+
+
+ Adding INADEQUATE_SECURITY error code.
+
+
+ Updating TLS usage requirements to 1.2; forbidding TLS compression.
+
+
+ Removing extensibility for frames and settings.
+
+
+ Changing setting identifier size.
+
+
+ Removing the ability to disable flow control.
+
+
+ Changing the protocol identification token to "h2".
+
+
+ Changing the use of :authority to make it optional and to allow userinfo in non-HTTP
+ cases.
+
+
+ Allowing split on 0x0 for Cookie.
+
+
+ Reserved PRI method in HTTP/1.1 to avoid possible future collisions.
+
+
+
+
+
+ Added cookie crumbling for more efficient header compression.
+
+
+ Added header field ordering with the value-concatenation mechanism.
+
+
+
+
+
+ Marked draft for implementation.
+
+
+
+
+
+ Adding definition for CONNECT method.
+
+
+ Constraining the use of push to safe, cacheable methods with no request body.
+
+
+ Changing from :host to :authority to remove any potential confusion.
+
+
+ Adding setting for header compression table size.
+
+
+ Adding settings acknowledgement.
+
+
+ Removing unnecessary and potentially problematic flags from CONTINUATION.
+
+
+ Added denial of service considerations.
+
+
+
+
+ Marking the draft ready for implementation.
+
+
+ Renumbering END_PUSH_PROMISE flag.
+
+
+ Editorial clarifications and changes.
+
+
+
+
+
+ Added CONTINUATION frame for HEADERS and PUSH_PROMISE.
+
+
+ PUSH_PROMISE is no longer implicitly prohibited if SETTINGS_MAX_CONCURRENT_STREAMS is
+ zero.
+
+
+ Push expanded to allow all safe methods without a request body.
+
+
+ Clarified the use of HTTP header fields in requests and responses. Prohibited HTTP/1.1
+ hop-by-hop header fields.
+
+
+ Requiring that intermediaries not forward requests with missing or illegal routing
+ :-headers.
+
+
+ Clarified requirements around handling different frames after stream close, stream reset
+ and GOAWAY .
+
+
+ Added more specific prohibitions for sending of different frame types in various stream
+ states.
+
+
+ Making the last received setting value the effective value.
+
+
+ Clarified requirements on TLS version, extension and ciphers.
+
+
+
+
+
+ Committed major restructuring atrocities.
+
+
+ Added reference to first header compression draft.
+
+
+ Added more formal description of frame lifecycle.
+
+
+ Moved END_STREAM (renamed from FINAL) back to HEADERS /DATA .
+
+
+ Removed HEADERS+PRIORITY, added optional priority to HEADERS frame.
+
+
+ Added PRIORITY frame.
+
+
+
+
+
+ Added continuations to frames carrying header blocks.
+
+
+ Replaced use of "session" with "connection" to avoid confusion with other HTTP stateful
+ concepts, like cookies.
+
+
+ Removed "message".
+
+
+ Switched to TLS ALPN from NPN.
+
+
+ Editorial changes.
+
+
+
+
+
+ Added IANA considerations section for frame types, error codes and settings.
+
+
+ Removed data frame compression.
+
+
+ Added PUSH_PROMISE .
+
+
+ Added globally applicable flags to framing.
+
+
+ Removed zlib-based header compression mechanism.
+
+
+ Updated references.
+
+
+ Clarified stream identifier reuse.
+
+
+ Removed CREDENTIALS frame and associated mechanisms.
+
+
+ Added advice against naive implementation of flow control.
+
+
+ Added session header section.
+
+
+ Restructured frame header. Removed distinction between data and control frames.
+
+
+ Altered flow control properties to include session-level limits.
+
+
+ Added note on cacheability of pushed resources and multiple tenant servers.
+
+
+ Changed protocol label form based on discussions.
+
+
+
+
+
+ Changed title throughout.
+
+
+ Removed section on Incompatibilities with SPDY draft#2.
+
+
+ Changed INTERNAL_ERROR on GOAWAY to have a value of 2 .
+
+
+ Replaced abstract and introduction.
+
+
+ Added section on starting HTTP/2.0, including upgrade mechanism.
+
+
+ Removed unused references.
+
+
+ Added flow control principles based on .
+
+
+
+
+
+ Adopted as base for draft-ietf-httpbis-http2.
+
+
+ Updated authors/editors list.
+
+
+ Added status note.
+
+
+
+
+
+
+
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
new file mode 100644
index 00000000..fb6d319d
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -0,0 +1,1104 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Transport code.
+
+package http2
+
+import (
+ "bufio"
+ "bytes"
+ "crypto/tls"
+ "errors"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "net"
+ "net/http"
+ "strconv"
+ "strings"
+ "sync"
+
+ "golang.org/x/net/http2/hpack"
+)
+
+const (
+ // transportDefaultConnFlow is how many connection-level flow control
+ // tokens we give the server at start-up, past the default 64k.
+ transportDefaultConnFlow = 1 << 30
+
+ // transportDefaultStreamFlow is how many stream-level flow
+ // control tokens we announce to the peer, and how many bytes
+ // we buffer per stream.
+ transportDefaultStreamFlow = 4 << 20
+
+ // transportDefaultStreamMinRefresh is the minimum number of bytes we'll send
+ // a stream-level WINDOW_UPDATE for at a time.
+ transportDefaultStreamMinRefresh = 4 << 10
+)
+
+// Transport is an HTTP/2 Transport.
+//
+// A Transport internally caches connections to servers. It is safe
+// for concurrent use by multiple goroutines.
+type Transport struct {
+ // DialTLS specifies an optional dial function for creating
+ // TLS connections for requests.
+ //
+ // If DialTLS is nil, tls.Dial is used.
+ //
+ // If the returned net.Conn has a ConnectionState method like tls.Conn,
+ // it will be used to set http.Response.TLS.
+ DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
+
+ // TLSClientConfig specifies the TLS configuration to use with
+ // tls.Client. If nil, the default configuration is used.
+ TLSClientConfig *tls.Config
+
+ // ConnPool optionally specifies an alternate connection pool to use.
+ // If nil, the default is used.
+ ConnPool ClientConnPool
+
+ connPoolOnce sync.Once
+ connPoolOrDef ClientConnPool // non-nil version of ConnPool
+}
+
+var errTransportVersion = errors.New("http2: ConfigureTransport is only supported starting at Go 1.6")
+
+// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.
+// It requires Go 1.6 or later and returns an error if the net/http package is too old
+// or if t1 has already been HTTP/2-enabled.
+func ConfigureTransport(t1 *http.Transport) error {
+ return configureTransport(t1) // in configure_transport.go (go1.6) or go15.go
+}
+
+func (t *Transport) connPool() ClientConnPool {
+ t.connPoolOnce.Do(t.initConnPool)
+ return t.connPoolOrDef
+}
+
+func (t *Transport) initConnPool() {
+ if t.ConnPool != nil {
+ t.connPoolOrDef = t.ConnPool
+ } else {
+ t.connPoolOrDef = &clientConnPool{t: t}
+ }
+}
+
+// ClientConn is the state of a single HTTP/2 client connection to an
+// HTTP/2 server.
+type ClientConn struct {
+ t *Transport
+ tconn net.Conn // usually *tls.Conn, except specialized impls
+ tlsState *tls.ConnectionState // nil only for specialized impls
+
+ // readLoop goroutine fields:
+ readerDone chan struct{} // closed on error
+ readerErr error // set before readerDone is closed
+
+ mu sync.Mutex // guards following
+ cond *sync.Cond // hold mu; broadcast on flow/closed changes
+ flow flow // our conn-level flow control quota (cs.flow is per stream)
+ inflow flow // peer's conn-level flow control
+ closed bool
+ goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received
+ streams map[uint32]*clientStream // client-initiated
+ nextStreamID uint32
+ bw *bufio.Writer
+ br *bufio.Reader
+ fr *Framer
+ // Settings from peer:
+ maxFrameSize uint32
+ maxConcurrentStreams uint32
+ initialWindowSize uint32
+ hbuf bytes.Buffer // HPACK encoder writes into this
+ henc *hpack.Encoder
+ freeBuf [][]byte
+
+ wmu sync.Mutex // held while writing; acquire AFTER wmu if holding both
+ werr error // first write error that has occurred
+}
+
+// clientStream is the state for a single HTTP/2 stream. One of these
+// is created for each Transport.RoundTrip call.
+type clientStream struct {
+ cc *ClientConn
+ ID uint32
+ resc chan resAndError
+ bufPipe pipe // buffered pipe with the flow-controlled response payload
+
+ flow flow // guarded by cc.mu
+ inflow flow // guarded by cc.mu
+
+ peerReset chan struct{} // closed on peer reset
+ resetErr error // populated before peerReset is closed
+}
+
+// checkReset reports any error sent in a RST_STREAM frame by the
+// server.
+func (cs *clientStream) checkReset() error {
+ select {
+ case <-cs.peerReset:
+ return cs.resetErr
+ default:
+ return nil
+ }
+}
+
+type stickyErrWriter struct {
+ w io.Writer
+ err *error
+}
+
+func (sew stickyErrWriter) Write(p []byte) (n int, err error) {
+ if *sew.err != nil {
+ return 0, *sew.err
+ }
+ n, err = sew.w.Write(p)
+ *sew.err = err
+ return
+}
+
+var ErrNoCachedConn = errors.New("http2: no cached connection was available")
+
+// RoundTripOpt are options for the Transport.RoundTripOpt method.
+type RoundTripOpt struct {
+ // OnlyCachedConn controls whether RoundTripOpt may
+ // create a new TCP connection. If set true and
+ // no cached connection is available, RoundTripOpt
+ // will return ErrNoCachedConn.
+ OnlyCachedConn bool
+}
+
+func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
+ return t.RoundTripOpt(req, RoundTripOpt{})
+}
+
+// authorityAddr returns a given authority (a host/IP, or host:port / ip:port)
+// and returns a host:port. The port 443 is added if needed.
+func authorityAddr(authority string) (addr string) {
+ if _, _, err := net.SplitHostPort(authority); err == nil {
+ return authority
+ }
+ return net.JoinHostPort(authority, "443")
+}
+
+// RoundTripOpt is like RoundTrip, but takes options.
+func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {
+ if req.URL.Scheme != "https" {
+ return nil, errors.New("http2: unsupported scheme")
+ }
+
+ addr := authorityAddr(req.URL.Host)
+ for {
+ cc, err := t.connPool().GetClientConn(req, addr)
+ if err != nil {
+ return nil, err
+ }
+ res, err := cc.RoundTrip(req)
+ if shouldRetryRequest(req, err) {
+ continue
+ }
+ if err != nil {
+ return nil, err
+ }
+ return res, nil
+ }
+}
+
+// CloseIdleConnections closes any connections which were previously
+// connected from previous requests but are now sitting idle.
+// It does not interrupt any connections currently in use.
+func (t *Transport) CloseIdleConnections() {
+ if cp, ok := t.connPool().(*clientConnPool); ok {
+ cp.closeIdleConnections()
+ }
+}
+
+var (
+ errClientConnClosed = errors.New("http2: client conn is closed")
+ errClientConnUnusable = errors.New("http2: client conn not usable")
+)
+
+func shouldRetryRequest(req *http.Request, err error) bool {
+ // TODO: retry GET requests (no bodies) more aggressively, if shutdown
+ // before response.
+ return err == errClientConnUnusable
+}
+
+func (t *Transport) dialClientConn(addr string) (*ClientConn, error) {
+ host, _, err := net.SplitHostPort(addr)
+ if err != nil {
+ return nil, err
+ }
+ tconn, err := t.dialTLS()("tcp", addr, t.newTLSConfig(host))
+ if err != nil {
+ return nil, err
+ }
+ return t.NewClientConn(tconn)
+}
+
+func (t *Transport) newTLSConfig(host string) *tls.Config {
+ cfg := new(tls.Config)
+ if t.TLSClientConfig != nil {
+ *cfg = *t.TLSClientConfig
+ }
+ cfg.NextProtos = []string{NextProtoTLS} // TODO: don't override if already in list
+ cfg.ServerName = host
+ return cfg
+}
+
+func (t *Transport) dialTLS() func(string, string, *tls.Config) (net.Conn, error) {
+ if t.DialTLS != nil {
+ return t.DialTLS
+ }
+ return t.dialTLSDefault
+}
+
+func (t *Transport) dialTLSDefault(network, addr string, cfg *tls.Config) (net.Conn, error) {
+ cn, err := tls.Dial(network, addr, cfg)
+ if err != nil {
+ return nil, err
+ }
+ if err := cn.Handshake(); err != nil {
+ return nil, err
+ }
+ if !cfg.InsecureSkipVerify {
+ if err := cn.VerifyHostname(cfg.ServerName); err != nil {
+ return nil, err
+ }
+ }
+ state := cn.ConnectionState()
+ if p := state.NegotiatedProtocol; p != NextProtoTLS {
+ return nil, fmt.Errorf("http2: unexpected ALPN protocol %q; want %q", p, NextProtoTLS)
+ }
+ if !state.NegotiatedProtocolIsMutual {
+ return nil, errors.New("http2: could not negotiate protocol mutually")
+ }
+ return cn, nil
+}
+
+func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
+ if _, err := c.Write(clientPreface); err != nil {
+ return nil, err
+ }
+
+ cc := &ClientConn{
+ t: t,
+ tconn: c,
+ readerDone: make(chan struct{}),
+ nextStreamID: 1,
+ maxFrameSize: 16 << 10, // spec default
+ initialWindowSize: 65535, // spec default
+ maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough.
+ streams: make(map[uint32]*clientStream),
+ }
+ cc.cond = sync.NewCond(&cc.mu)
+ cc.flow.add(int32(initialWindowSize))
+
+ // TODO: adjust this writer size to account for frame size +
+ // MTU + crypto/tls record padding.
+ cc.bw = bufio.NewWriter(stickyErrWriter{c, &cc.werr})
+ cc.br = bufio.NewReader(c)
+ cc.fr = NewFramer(cc.bw, cc.br)
+ cc.henc = hpack.NewEncoder(&cc.hbuf)
+
+ type connectionStater interface {
+ ConnectionState() tls.ConnectionState
+ }
+ if cs, ok := c.(connectionStater); ok {
+ state := cs.ConnectionState()
+ cc.tlsState = &state
+ }
+
+ cc.fr.WriteSettings(
+ Setting{ID: SettingEnablePush, Val: 0},
+ Setting{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},
+ )
+ cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow)
+ cc.inflow.add(transportDefaultConnFlow + initialWindowSize)
+ cc.bw.Flush()
+ if cc.werr != nil {
+ return nil, cc.werr
+ }
+
+ // Read the obligatory SETTINGS frame
+ f, err := cc.fr.ReadFrame()
+ if err != nil {
+ return nil, err
+ }
+ sf, ok := f.(*SettingsFrame)
+ if !ok {
+ return nil, fmt.Errorf("expected settings frame, got: %T", f)
+ }
+ cc.fr.WriteSettingsAck()
+ cc.bw.Flush()
+
+ sf.ForeachSetting(func(s Setting) error {
+ switch s.ID {
+ case SettingMaxFrameSize:
+ cc.maxFrameSize = s.Val
+ case SettingMaxConcurrentStreams:
+ cc.maxConcurrentStreams = s.Val
+ case SettingInitialWindowSize:
+ cc.initialWindowSize = s.Val
+ default:
+ // TODO(bradfitz): handle more
+ t.vlogf("Unhandled Setting: %v", s)
+ }
+ return nil
+ })
+
+ go cc.readLoop()
+ return cc, nil
+}
+
+func (cc *ClientConn) setGoAway(f *GoAwayFrame) {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ cc.goAway = f
+}
+
+func (cc *ClientConn) CanTakeNewRequest() bool {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ return cc.canTakeNewRequestLocked()
+}
+
+func (cc *ClientConn) canTakeNewRequestLocked() bool {
+ return cc.goAway == nil &&
+ int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams) &&
+ cc.nextStreamID < 2147483647
+}
+
+func (cc *ClientConn) closeIfIdle() {
+ cc.mu.Lock()
+ if len(cc.streams) > 0 {
+ cc.mu.Unlock()
+ return
+ }
+ cc.closed = true
+ // TODO: do clients send GOAWAY too? maybe? Just Close:
+ cc.mu.Unlock()
+
+ cc.tconn.Close()
+}
+
+const maxAllocFrameSize = 512 << 10
+
+// frameBuffer returns a scratch buffer suitable for writing DATA frames.
+// They're capped at the min of the peer's max frame size or 512KB
+// (kinda arbitrarily), but definitely capped so we don't allocate 4GB
+// bufers.
+func (cc *ClientConn) frameScratchBuffer() []byte {
+ cc.mu.Lock()
+ size := cc.maxFrameSize
+ if size > maxAllocFrameSize {
+ size = maxAllocFrameSize
+ }
+ for i, buf := range cc.freeBuf {
+ if len(buf) >= int(size) {
+ cc.freeBuf[i] = nil
+ cc.mu.Unlock()
+ return buf[:size]
+ }
+ }
+ cc.mu.Unlock()
+ return make([]byte, size)
+}
+
+func (cc *ClientConn) putFrameScratchBuffer(buf []byte) {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ const maxBufs = 4 // arbitrary; 4 concurrent requests per conn? investigate.
+ if len(cc.freeBuf) < maxBufs {
+ cc.freeBuf = append(cc.freeBuf, buf)
+ return
+ }
+ for i, old := range cc.freeBuf {
+ if old == nil {
+ cc.freeBuf[i] = buf
+ return
+ }
+ }
+ // forget about it.
+}
+
+func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
+ cc.mu.Lock()
+
+ if cc.closed || !cc.canTakeNewRequestLocked() {
+ cc.mu.Unlock()
+ return nil, errClientConnUnusable
+ }
+
+ cs := cc.newStream()
+ hasBody := req.Body != nil
+
+ // we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,}
+ hdrs := cc.encodeHeaders(req)
+ first := true // first frame written (HEADERS is first, then CONTINUATION)
+
+ cc.wmu.Lock()
+ frameSize := int(cc.maxFrameSize)
+ for len(hdrs) > 0 && cc.werr == nil {
+ chunk := hdrs
+ if len(chunk) > frameSize {
+ chunk = chunk[:frameSize]
+ }
+ hdrs = hdrs[len(chunk):]
+ endHeaders := len(hdrs) == 0
+ if first {
+ cc.fr.WriteHeaders(HeadersFrameParam{
+ StreamID: cs.ID,
+ BlockFragment: chunk,
+ EndStream: !hasBody,
+ EndHeaders: endHeaders,
+ })
+ first = false
+ } else {
+ cc.fr.WriteContinuation(cs.ID, endHeaders, chunk)
+ }
+ }
+ cc.bw.Flush()
+ werr := cc.werr
+ cc.wmu.Unlock()
+ cc.mu.Unlock()
+
+ if werr != nil {
+ return nil, werr
+ }
+
+ var bodyCopyErrc chan error
+ var gotResHeaders chan struct{} // closed on resheaders
+ if hasBody {
+ bodyCopyErrc = make(chan error, 1)
+ gotResHeaders = make(chan struct{})
+ go func() {
+ bodyCopyErrc <- cs.writeRequestBody(req.Body, gotResHeaders)
+ }()
+ }
+
+ for {
+ select {
+ case re := <-cs.resc:
+ if gotResHeaders != nil {
+ close(gotResHeaders)
+ }
+ if re.err != nil {
+ return nil, re.err
+ }
+ res := re.res
+ res.Request = req
+ res.TLS = cc.tlsState
+ return res, nil
+ case err := <-bodyCopyErrc:
+ if err != nil {
+ return nil, err
+ }
+ }
+ }
+}
+
+var errServerResponseBeforeRequestBody = errors.New("http2: server sent response while still writing request body")
+
+func (cs *clientStream) writeRequestBody(body io.Reader, gotResHeaders <-chan struct{}) error {
+ cc := cs.cc
+ sentEnd := false // whether we sent the final DATA frame w/ END_STREAM
+ buf := cc.frameScratchBuffer()
+ defer cc.putFrameScratchBuffer(buf)
+
+ for !sentEnd {
+ var sawEOF bool
+ n, err := io.ReadFull(body, buf)
+ if err == io.ErrUnexpectedEOF {
+ sawEOF = true
+ err = nil
+ } else if err == io.EOF {
+ break
+ } else if err != nil {
+ return err
+ }
+
+ toWrite := buf[:n]
+ for len(toWrite) > 0 && err == nil {
+ var allowed int32
+ allowed, err = cs.awaitFlowControl(int32(len(toWrite)))
+ if err != nil {
+ return err
+ }
+
+ cc.wmu.Lock()
+ select {
+ case <-gotResHeaders:
+ err = errServerResponseBeforeRequestBody
+ case <-cs.peerReset:
+ err = cs.resetErr
+ default:
+ data := toWrite[:allowed]
+ toWrite = toWrite[allowed:]
+ sentEnd = sawEOF && len(toWrite) == 0
+ err = cc.fr.WriteData(cs.ID, sentEnd, data)
+ }
+ cc.wmu.Unlock()
+ }
+ if err != nil {
+ return err
+ }
+ }
+
+ var err error
+
+ cc.wmu.Lock()
+ if !sentEnd {
+ err = cc.fr.WriteData(cs.ID, true, nil)
+ }
+ if ferr := cc.bw.Flush(); ferr != nil && err == nil {
+ err = ferr
+ }
+ cc.wmu.Unlock()
+
+ return err
+}
+
+// awaitFlowControl waits for [1, min(maxBytes, cc.cs.maxFrameSize)] flow
+// control tokens from the server.
+// It returns either the non-zero number of tokens taken or an error
+// if the stream is dead.
+func (cs *clientStream) awaitFlowControl(maxBytes int32) (taken int32, err error) {
+ cc := cs.cc
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ for {
+ if cc.closed {
+ return 0, errClientConnClosed
+ }
+ if err := cs.checkReset(); err != nil {
+ return 0, err
+ }
+ if a := cs.flow.available(); a > 0 {
+ take := a
+ if take > maxBytes {
+ take = maxBytes
+ }
+ if take > int32(cc.maxFrameSize) {
+ take = int32(cc.maxFrameSize)
+ }
+ cs.flow.take(take)
+ return take, nil
+ }
+ cc.cond.Wait()
+ }
+}
+
+// requires cc.mu be held.
+func (cc *ClientConn) encodeHeaders(req *http.Request) []byte {
+ cc.hbuf.Reset()
+
+ // TODO(bradfitz): figure out :authority-vs-Host stuff between http2 and Go
+ host := req.Host
+ if host == "" {
+ host = req.URL.Host
+ }
+
+ // 8.1.2.3 Request Pseudo-Header Fields
+ // The :path pseudo-header field includes the path and query parts of the
+ // target URI (the path-absolute production and optionally a '?' character
+ // followed by the query production (see Sections 3.3 and 3.4 of
+ // [RFC3986]).
+ cc.writeHeader(":authority", host) // probably not right for all sites
+ cc.writeHeader(":method", req.Method)
+ cc.writeHeader(":path", req.URL.RequestURI())
+ cc.writeHeader(":scheme", "https")
+
+ for k, vv := range req.Header {
+ lowKey := strings.ToLower(k)
+ if lowKey == "host" {
+ continue
+ }
+ for _, v := range vv {
+ cc.writeHeader(lowKey, v)
+ }
+ }
+ return cc.hbuf.Bytes()
+}
+
+func (cc *ClientConn) writeHeader(name, value string) {
+ cc.henc.WriteField(hpack.HeaderField{Name: name, Value: value})
+}
+
+type resAndError struct {
+ res *http.Response
+ err error
+}
+
+// requires cc.mu be held.
+func (cc *ClientConn) newStream() *clientStream {
+ cs := &clientStream{
+ cc: cc,
+ ID: cc.nextStreamID,
+ resc: make(chan resAndError, 1),
+ peerReset: make(chan struct{}),
+ }
+ cs.flow.add(int32(cc.initialWindowSize))
+ cs.flow.setConnFlow(&cc.flow)
+ cs.inflow.add(transportDefaultStreamFlow)
+ cs.inflow.setConnFlow(&cc.inflow)
+ cc.nextStreamID += 2
+ cc.streams[cs.ID] = cs
+ return cs
+}
+
+func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ cs := cc.streams[id]
+ if andRemove {
+ delete(cc.streams, id)
+ }
+ return cs
+}
+
+// clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop.
+type clientConnReadLoop struct {
+ cc *ClientConn
+ activeRes map[uint32]*clientStream // keyed by streamID
+
+ // continueStreamID is the stream ID we're waiting for
+ // continuation frames for.
+ continueStreamID uint32
+
+ hdec *hpack.Decoder
+
+ // Fields reset on each HEADERS:
+ nextRes *http.Response
+ sawRegHeader bool // saw non-pseudo header
+ reqMalformed error // non-nil once known to be malformed
+}
+
+// readLoop runs in its own goroutine and reads and dispatches frames.
+func (cc *ClientConn) readLoop() {
+ rl := &clientConnReadLoop{
+ cc: cc,
+ activeRes: make(map[uint32]*clientStream),
+ }
+ // TODO: figure out henc size
+ rl.hdec = hpack.NewDecoder(initialHeaderTableSize, rl.onNewHeaderField)
+
+ defer rl.cleanup()
+ cc.readerErr = rl.run()
+ if ce, ok := cc.readerErr.(ConnectionError); ok {
+ cc.wmu.Lock()
+ cc.fr.WriteGoAway(0, ErrCode(ce), nil)
+ cc.wmu.Unlock()
+ }
+}
+
+func (rl *clientConnReadLoop) cleanup() {
+ cc := rl.cc
+ defer cc.tconn.Close()
+ defer cc.t.connPool().MarkDead(cc)
+ defer close(cc.readerDone)
+
+ // Close any response bodies if the server closes prematurely.
+ // TODO: also do this if we've written the headers but not
+ // gotten a response yet.
+ err := cc.readerErr
+ if err == io.EOF {
+ err = io.ErrUnexpectedEOF
+ }
+ cc.mu.Lock()
+ for _, cs := range rl.activeRes {
+ cs.bufPipe.CloseWithError(err)
+ }
+ for _, cs := range cc.streams {
+ select {
+ case cs.resc <- resAndError{err: err}:
+ default:
+ }
+ }
+ cc.closed = true
+ cc.cond.Broadcast()
+ cc.mu.Unlock()
+}
+
+func (rl *clientConnReadLoop) run() error {
+ cc := rl.cc
+ for {
+ f, err := cc.fr.ReadFrame()
+ if se, ok := err.(StreamError); ok {
+ // TODO: deal with stream errors from the framer.
+ return se
+ } else if err != nil {
+ return err
+ }
+ cc.vlogf("Transport received %v: %#v", f.Header(), f)
+
+ streamID := f.Header().StreamID
+
+ _, isContinue := f.(*ContinuationFrame)
+ if isContinue {
+ if streamID != rl.continueStreamID {
+ cc.logf("Protocol violation: got CONTINUATION with id %d; want %d", streamID, rl.continueStreamID)
+ return ConnectionError(ErrCodeProtocol)
+ }
+ } else if rl.continueStreamID != 0 {
+ // Continue frames need to be adjacent in the stream
+ // and we were in the middle of headers.
+ cc.logf("Protocol violation: got %T for stream %d, want CONTINUATION for %d", f, streamID, rl.continueStreamID)
+ return ConnectionError(ErrCodeProtocol)
+ }
+
+ switch f := f.(type) {
+ case *HeadersFrame:
+ err = rl.processHeaders(f)
+ case *ContinuationFrame:
+ err = rl.processContinuation(f)
+ case *DataFrame:
+ err = rl.processData(f)
+ case *GoAwayFrame:
+ err = rl.processGoAway(f)
+ case *RSTStreamFrame:
+ err = rl.processResetStream(f)
+ case *SettingsFrame:
+ err = rl.processSettings(f)
+ case *PushPromiseFrame:
+ err = rl.processPushPromise(f)
+ case *WindowUpdateFrame:
+ err = rl.processWindowUpdate(f)
+ case *PingFrame:
+ err = rl.processPing(f)
+ default:
+ cc.logf("Transport: unhandled response frame type %T", f)
+ }
+ if err != nil {
+ return err
+ }
+ }
+}
+
+func (rl *clientConnReadLoop) processHeaders(f *HeadersFrame) error {
+ rl.sawRegHeader = false
+ rl.reqMalformed = nil
+ rl.nextRes = &http.Response{
+ Proto: "HTTP/2.0",
+ ProtoMajor: 2,
+ Header: make(http.Header),
+ }
+ return rl.processHeaderBlockFragment(f.HeaderBlockFragment(), f.StreamID, f.HeadersEnded(), f.StreamEnded())
+}
+
+func (rl *clientConnReadLoop) processContinuation(f *ContinuationFrame) error {
+ return rl.processHeaderBlockFragment(f.HeaderBlockFragment(), f.StreamID, f.HeadersEnded(), f.StreamEnded())
+}
+
+func (rl *clientConnReadLoop) processHeaderBlockFragment(frag []byte, streamID uint32, headersEnded, streamEnded bool) error {
+ cc := rl.cc
+ cs := cc.streamByID(streamID, streamEnded)
+ if cs == nil {
+ // We could return a ConnectionError(ErrCodeProtocol)
+ // here, except that in the case of us canceling
+ // client requests, we may also delete from the
+ // streams map, in which case we forgot that we sent
+ // this request. So, just ignore any responses for
+ // now. They might've been in-flight before the
+ // server got our RST_STREAM.
+ return nil
+ }
+ _, err := rl.hdec.Write(frag)
+ if err != nil {
+ return err
+ }
+ if !headersEnded {
+ rl.continueStreamID = cs.ID
+ return nil
+ }
+
+ // HEADERS (or CONTINUATION) are now over.
+ rl.continueStreamID = 0
+
+ if rl.reqMalformed != nil {
+ cs.resc <- resAndError{err: rl.reqMalformed}
+ rl.cc.writeStreamReset(cs.ID, ErrCodeProtocol, rl.reqMalformed)
+ return nil
+ }
+
+ res := rl.nextRes
+ if streamEnded {
+ res.Body = noBody
+ } else {
+ buf := new(bytes.Buffer) // TODO(bradfitz): recycle this garbage
+ cs.bufPipe = pipe{b: buf}
+ res.Body = transportResponseBody{cs}
+ }
+ rl.activeRes[cs.ID] = cs
+ cs.resc <- resAndError{res: res}
+ rl.nextRes = nil // unused now; will be reset next HEADERS frame
+ return nil
+}
+
+// transportResponseBody is the concrete type of Transport.RoundTrip's
+// Response.Body. It is an io.ReadCloser. On Read, it reads from cs.body.
+// On Close it sends RST_STREAM if EOF wasn't already seen.
+type transportResponseBody struct {
+ cs *clientStream
+}
+
+func (b transportResponseBody) Read(p []byte) (n int, err error) {
+ n, err = b.cs.bufPipe.Read(p)
+ if n == 0 {
+ return
+ }
+
+ cs := b.cs
+ cc := cs.cc
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+
+ var connAdd, streamAdd int32
+ // Check the conn-level first, before the stream-level.
+ if v := cc.inflow.available(); v < transportDefaultConnFlow/2 {
+ connAdd = transportDefaultConnFlow - v
+ cc.inflow.add(connAdd)
+ }
+ if err == nil { // No need to refresh if the stream is over or failed.
+ if v := cs.inflow.available(); v < transportDefaultStreamFlow-transportDefaultStreamMinRefresh {
+ streamAdd = transportDefaultStreamFlow - v
+ cs.inflow.add(streamAdd)
+ }
+ }
+ if connAdd != 0 || streamAdd != 0 {
+ cc.wmu.Lock()
+ defer cc.wmu.Unlock()
+ if connAdd != 0 {
+ cc.fr.WriteWindowUpdate(0, mustUint31(connAdd))
+ }
+ if streamAdd != 0 {
+ cc.fr.WriteWindowUpdate(cs.ID, mustUint31(streamAdd))
+ }
+ cc.bw.Flush()
+ }
+ return
+}
+
+func (b transportResponseBody) Close() error {
+ if b.cs.bufPipe.Err() != io.EOF {
+ // TODO: write test for this
+ b.cs.cc.writeStreamReset(b.cs.ID, ErrCodeCancel, nil)
+ }
+ return nil
+}
+
+func (rl *clientConnReadLoop) processData(f *DataFrame) error {
+ cc := rl.cc
+ cs := cc.streamByID(f.StreamID, f.StreamEnded())
+ if cs == nil {
+ return nil
+ }
+ data := f.Data()
+ if VerboseLogs {
+ rl.cc.logf("DATA: %q", data)
+ }
+
+ // Check connection-level flow control.
+ cc.mu.Lock()
+ if cs.inflow.available() >= int32(len(data)) {
+ cs.inflow.take(int32(len(data)))
+ } else {
+ cc.mu.Unlock()
+ return ConnectionError(ErrCodeFlowControl)
+ }
+ cc.mu.Unlock()
+
+ if _, err := cs.bufPipe.Write(data); err != nil {
+ return err
+ }
+
+ if f.StreamEnded() {
+ cs.bufPipe.CloseWithError(io.EOF)
+ delete(rl.activeRes, cs.ID)
+ }
+ return nil
+}
+
+func (rl *clientConnReadLoop) processGoAway(f *GoAwayFrame) error {
+ cc := rl.cc
+ cc.t.connPool().MarkDead(cc)
+ if f.ErrCode != 0 {
+ // TODO: deal with GOAWAY more. particularly the error code
+ cc.vlogf("transport got GOAWAY with error code = %v", f.ErrCode)
+ }
+ cc.setGoAway(f)
+ return nil
+}
+
+func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error {
+ cc := rl.cc
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ return f.ForeachSetting(func(s Setting) error {
+ switch s.ID {
+ case SettingMaxFrameSize:
+ cc.maxFrameSize = s.Val
+ case SettingMaxConcurrentStreams:
+ cc.maxConcurrentStreams = s.Val
+ case SettingInitialWindowSize:
+ // TODO: error if this is too large.
+
+ // TODO: adjust flow control of still-open
+ // frames by the difference of the old initial
+ // window size and this one.
+ cc.initialWindowSize = s.Val
+ default:
+ // TODO(bradfitz): handle more settings?
+ cc.vlogf("Unhandled Setting: %v", s)
+ }
+ return nil
+ })
+}
+
+func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error {
+ cc := rl.cc
+ cs := cc.streamByID(f.StreamID, false)
+ if f.StreamID != 0 && cs == nil {
+ return nil
+ }
+
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+
+ fl := &cc.flow
+ if cs != nil {
+ fl = &cs.flow
+ }
+ if !fl.add(int32(f.Increment)) {
+ return ConnectionError(ErrCodeFlowControl)
+ }
+ cc.cond.Broadcast()
+ return nil
+}
+
+func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error {
+ cs := rl.cc.streamByID(f.StreamID, true)
+ if cs == nil {
+ // TODO: return error if server tries to RST_STEAM an idle stream
+ return nil
+ }
+ select {
+ case <-cs.peerReset:
+ // Already reset.
+ // This is the only goroutine
+ // which closes this, so there
+ // isn't a race.
+ default:
+ err := StreamError{cs.ID, f.ErrCode}
+ cs.resetErr = err
+ close(cs.peerReset)
+ cs.bufPipe.CloseWithError(err)
+ }
+ delete(rl.activeRes, cs.ID)
+ return nil
+}
+
+func (rl *clientConnReadLoop) processPing(f *PingFrame) error {
+ if f.IsAck() {
+ // 6.7 PING: " An endpoint MUST NOT respond to PING frames
+ // containing this flag."
+ return nil
+ }
+ cc := rl.cc
+ cc.wmu.Lock()
+ defer cc.wmu.Unlock()
+ if err := cc.fr.WritePing(true, f.Data); err != nil {
+ return err
+ }
+ return cc.bw.Flush()
+}
+
+func (rl *clientConnReadLoop) processPushPromise(f *PushPromiseFrame) error {
+ // We told the peer we don't want them.
+ // Spec says:
+ // "PUSH_PROMISE MUST NOT be sent if the SETTINGS_ENABLE_PUSH
+ // setting of the peer endpoint is set to 0. An endpoint that
+ // has set this setting and has received acknowledgement MUST
+ // treat the receipt of a PUSH_PROMISE frame as a connection
+ // error (Section 5.4.1) of type PROTOCOL_ERROR."
+ return ConnectionError(ErrCodeProtocol)
+}
+
+func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) {
+ // TODO: do something with err? send it as a debug frame to the peer?
+ // But that's only in GOAWAY. Invent a new frame type? Is there one already?
+ cc.wmu.Lock()
+ cc.fr.WriteRSTStream(streamID, code)
+ cc.wmu.Unlock()
+}
+
+// onNewHeaderField runs on the readLoop goroutine whenever a new
+// hpack header field is decoded.
+func (rl *clientConnReadLoop) onNewHeaderField(f hpack.HeaderField) {
+ cc := rl.cc
+ if VerboseLogs {
+ cc.logf("Header field: %+v", f)
+ }
+ isPseudo := strings.HasPrefix(f.Name, ":")
+ if isPseudo {
+ if rl.sawRegHeader {
+ rl.reqMalformed = errors.New("http2: invalid pseudo header after regular header")
+ return
+ }
+ switch f.Name {
+ case ":status":
+ code, err := strconv.Atoi(f.Value)
+ if err != nil {
+ rl.reqMalformed = errors.New("http2: invalid :status")
+ return
+ }
+ rl.nextRes.Status = f.Value + " " + http.StatusText(code)
+ rl.nextRes.StatusCode = code
+ default:
+ // "Endpoints MUST NOT generate pseudo-header
+ // fields other than those defined in this
+ // document."
+ rl.reqMalformed = fmt.Errorf("http2: unknown response pseudo header %q", f.Name)
+ }
+ } else {
+ rl.sawRegHeader = true
+ rl.nextRes.Header.Add(http.CanonicalHeaderKey(f.Name), f.Value)
+ }
+}
+
+func (cc *ClientConn) logf(format string, args ...interface{}) {
+ cc.t.logf(format, args...)
+}
+
+func (cc *ClientConn) vlogf(format string, args ...interface{}) {
+ cc.t.vlogf(format, args...)
+}
+
+func (t *Transport) vlogf(format string, args ...interface{}) {
+ if VerboseLogs {
+ t.logf(format, args...)
+ }
+}
+
+func (t *Transport) logf(format string, args ...interface{}) {
+ log.Printf(format, args...)
+}
+
+var noBody io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil))
+
+func strSliceContains(ss []string, s string) bool {
+ for _, v := range ss {
+ if v == s {
+ return true
+ }
+ }
+ return false
+}
+
+type erringRoundTripper struct{ err error }
+
+func (rt erringRoundTripper) RoundTrip(*http.Request) (*http.Response, error) { return nil, rt.err }
diff --git a/vendor/golang.org/x/net/http2/transport_test.go b/vendor/golang.org/x/net/http2/transport_test.go
new file mode 100644
index 00000000..b7385d65
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/transport_test.go
@@ -0,0 +1,375 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "crypto/tls"
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "math/rand"
+ "net"
+ "net/http"
+ "net/url"
+ "os"
+ "reflect"
+ "strings"
+ "sync"
+ "testing"
+ "time"
+)
+
+var (
+ extNet = flag.Bool("extnet", false, "do external network tests")
+ transportHost = flag.String("transporthost", "http2.golang.org", "hostname to use for TestTransport")
+ insecure = flag.Bool("insecure", false, "insecure TLS dials") // TODO: dead code. remove?
+)
+
+var tlsConfigInsecure = &tls.Config{InsecureSkipVerify: true}
+
+func TestTransportExternal(t *testing.T) {
+ if !*extNet {
+ t.Skip("skipping external network test")
+ }
+ req, _ := http.NewRequest("GET", "https://"+*transportHost+"/", nil)
+ rt := &Transport{TLSClientConfig: tlsConfigInsecure}
+ res, err := rt.RoundTrip(req)
+ if err != nil {
+ t.Fatalf("%v", err)
+ }
+ res.Write(os.Stdout)
+}
+
+func TestTransport(t *testing.T) {
+ const body = "sup"
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, body)
+ }, optOnlyServer)
+ defer st.Close()
+
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ defer tr.CloseIdleConnections()
+
+ req, err := http.NewRequest("GET", st.ts.URL, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ res, err := tr.RoundTrip(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer res.Body.Close()
+
+ t.Logf("Got res: %+v", res)
+ if g, w := res.StatusCode, 200; g != w {
+ t.Errorf("StatusCode = %v; want %v", g, w)
+ }
+ if g, w := res.Status, "200 OK"; g != w {
+ t.Errorf("Status = %q; want %q", g, w)
+ }
+ wantHeader := http.Header{
+ "Content-Length": []string{"3"},
+ "Content-Type": []string{"text/plain; charset=utf-8"},
+ }
+ if !reflect.DeepEqual(res.Header, wantHeader) {
+ t.Errorf("res Header = %v; want %v", res.Header, wantHeader)
+ }
+ if res.Request != req {
+ t.Errorf("Response.Request = %p; want %p", res.Request, req)
+ }
+ if res.TLS == nil {
+ t.Error("Response.TLS = nil; want non-nil")
+ }
+ slurp, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ t.Errorf("Body read: %v", err)
+ } else if string(slurp) != body {
+ t.Errorf("Body = %q; want %q", slurp, body)
+ }
+
+}
+
+func TestTransportReusesConns(t *testing.T) {
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, r.RemoteAddr)
+ }, optOnlyServer)
+ defer st.Close()
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ defer tr.CloseIdleConnections()
+ get := func() string {
+ req, err := http.NewRequest("GET", st.ts.URL, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ res, err := tr.RoundTrip(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer res.Body.Close()
+ slurp, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ t.Fatalf("Body read: %v", err)
+ }
+ addr := strings.TrimSpace(string(slurp))
+ if addr == "" {
+ t.Fatalf("didn't get an addr in response")
+ }
+ return addr
+ }
+ first := get()
+ second := get()
+ if first != second {
+ t.Errorf("first and second responses were on different connections: %q vs %q", first, second)
+ }
+}
+
+func TestTransportAbortClosesPipes(t *testing.T) {
+ shutdown := make(chan struct{})
+ st := newServerTester(t,
+ func(w http.ResponseWriter, r *http.Request) {
+ w.(http.Flusher).Flush()
+ <-shutdown
+ },
+ optOnlyServer,
+ )
+ defer st.Close()
+ defer close(shutdown) // we must shutdown before st.Close() to avoid hanging
+
+ done := make(chan struct{})
+ requestMade := make(chan struct{})
+ go func() {
+ defer close(done)
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ req, err := http.NewRequest("GET", st.ts.URL, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ res, err := tr.RoundTrip(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer res.Body.Close()
+ close(requestMade)
+ _, err = ioutil.ReadAll(res.Body)
+ if err == nil {
+ t.Error("expected error from res.Body.Read")
+ }
+ }()
+
+ <-requestMade
+ // Now force the serve loop to end, via closing the connection.
+ st.closeConn()
+ // deadlock? that's a bug.
+ select {
+ case <-done:
+ case <-time.After(3 * time.Second):
+ t.Fatal("timeout")
+ }
+}
+
+// TODO: merge this with TestTransportBody to make TestTransportRequest? This
+// could be a table-driven test with extra goodies.
+func TestTransportPath(t *testing.T) {
+ gotc := make(chan *url.URL, 1)
+ st := newServerTester(t,
+ func(w http.ResponseWriter, r *http.Request) {
+ gotc <- r.URL
+ },
+ optOnlyServer,
+ )
+ defer st.Close()
+
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ defer tr.CloseIdleConnections()
+ const (
+ path = "/testpath"
+ query = "q=1"
+ )
+ surl := st.ts.URL + path + "?" + query
+ req, err := http.NewRequest("POST", surl, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ c := &http.Client{Transport: tr}
+ res, err := c.Do(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer res.Body.Close()
+ got := <-gotc
+ if got.Path != path {
+ t.Errorf("Read Path = %q; want %q", got.Path, path)
+ }
+ if got.RawQuery != query {
+ t.Errorf("Read RawQuery = %q; want %q", got.RawQuery, query)
+ }
+}
+
+func randString(n int) string {
+ rnd := rand.New(rand.NewSource(int64(n)))
+ b := make([]byte, n)
+ for i := range b {
+ b[i] = byte(rnd.Intn(256))
+ }
+ return string(b)
+}
+
+var bodyTests = []struct {
+ body string
+ noContentLen bool
+}{
+ {body: "some message"},
+ {body: "some message", noContentLen: true},
+ {body: ""},
+ {body: "", noContentLen: true},
+ {body: strings.Repeat("a", 1<<20), noContentLen: true},
+ {body: strings.Repeat("a", 1<<20)},
+ {body: randString(16<<10 - 1)},
+ {body: randString(16 << 10)},
+ {body: randString(16<<10 + 1)},
+ {body: randString(512<<10 - 1)},
+ {body: randString(512 << 10)},
+ {body: randString(512<<10 + 1)},
+ {body: randString(1<<20 - 1)},
+ {body: randString(1 << 20)},
+ {body: randString(1<<20 + 2)},
+}
+
+func TestTransportBody(t *testing.T) {
+ gotc := make(chan interface{}, 1)
+ st := newServerTester(t,
+ func(w http.ResponseWriter, r *http.Request) {
+ slurp, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ gotc <- err
+ } else {
+ gotc <- string(slurp)
+ }
+ },
+ optOnlyServer,
+ )
+ defer st.Close()
+
+ for i, tt := range bodyTests {
+ tr := &Transport{TLSClientConfig: tlsConfigInsecure}
+ defer tr.CloseIdleConnections()
+
+ var body io.Reader = strings.NewReader(tt.body)
+ if tt.noContentLen {
+ body = struct{ io.Reader }{body} // just a Reader, hiding concrete type and other methods
+ }
+ req, err := http.NewRequest("POST", st.ts.URL, body)
+ if err != nil {
+ t.Fatalf("#%d: %v", i, err)
+ }
+ c := &http.Client{Transport: tr}
+ res, err := c.Do(req)
+ if err != nil {
+ t.Fatalf("#%d: %v", i, err)
+ }
+ defer res.Body.Close()
+ got := <-gotc
+ if err, ok := got.(error); ok {
+ t.Fatalf("#%d: %v", i, err)
+ } else if got.(string) != tt.body {
+ got := got.(string)
+ t.Errorf("#%d: Read body mismatch.\n got: %q (len %d)\nwant: %q (len %d)", i, shortString(got), len(got), shortString(tt.body), len(tt.body))
+ }
+ }
+}
+
+func shortString(v string) string {
+ const maxLen = 100
+ if len(v) <= maxLen {
+ return v
+ }
+ return fmt.Sprintf("%v[...%d bytes omitted...]%v", v[:maxLen/2], len(v)-maxLen, v[len(v)-maxLen/2:])
+}
+
+func TestTransportDialTLS(t *testing.T) {
+ var mu sync.Mutex // guards following
+ var gotReq, didDial bool
+
+ ts := newServerTester(t,
+ func(w http.ResponseWriter, r *http.Request) {
+ mu.Lock()
+ gotReq = true
+ mu.Unlock()
+ },
+ optOnlyServer,
+ )
+ defer ts.Close()
+ tr := &Transport{
+ DialTLS: func(netw, addr string, cfg *tls.Config) (net.Conn, error) {
+ mu.Lock()
+ didDial = true
+ mu.Unlock()
+ cfg.InsecureSkipVerify = true
+ c, err := tls.Dial(netw, addr, cfg)
+ if err != nil {
+ return nil, err
+ }
+ return c, c.Handshake()
+ },
+ }
+ defer tr.CloseIdleConnections()
+ client := &http.Client{Transport: tr}
+ res, err := client.Get(ts.ts.URL)
+ if err != nil {
+ t.Fatal(err)
+ }
+ res.Body.Close()
+ mu.Lock()
+ if !gotReq {
+ t.Error("didn't get request")
+ }
+ if !didDial {
+ t.Error("didn't use dial hook")
+ }
+}
+
+func TestConfigureTransport(t *testing.T) {
+ t1 := &http.Transport{}
+ err := ConfigureTransport(t1)
+ if err == errTransportVersion {
+ t.Skip(err)
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got := fmt.Sprintf("%#v", *t1); !strings.Contains(got, `"h2"`) {
+ // Laziness, to avoid buildtags.
+ t.Errorf("stringification of HTTP/1 transport didn't contain \"h2\": %v", got)
+ }
+ if t1.TLSClientConfig == nil {
+ t.Errorf("nil t1.TLSClientConfig")
+ } else if !reflect.DeepEqual(t1.TLSClientConfig.NextProtos, []string{"h2"}) {
+ t.Errorf("TLSClientConfig.NextProtos = %q; want just 'h2'", t1.TLSClientConfig.NextProtos)
+ }
+ if err := ConfigureTransport(t1); err == nil {
+ t.Error("unexpected success on second call to ConfigureTransport")
+ }
+
+ // And does it work?
+ st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+ io.WriteString(w, r.Proto)
+ }, optOnlyServer)
+ defer st.Close()
+
+ t1.TLSClientConfig.InsecureSkipVerify = true
+ c := &http.Client{Transport: t1}
+ res, err := c.Get(st.ts.URL)
+ if err != nil {
+ t.Fatal(err)
+ }
+ slurp, err := ioutil.ReadAll(res.Body)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got, want := string(slurp), "HTTP/2.0"; got != want {
+ t.Errorf("body = %q; want %q", got, want)
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go
new file mode 100644
index 00000000..9050bebb
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/write.go
@@ -0,0 +1,206 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "fmt"
+ "net/http"
+ "time"
+
+ "golang.org/x/net/http2/hpack"
+)
+
+// writeFramer is implemented by any type that is used to write frames.
+type writeFramer interface {
+ writeFrame(writeContext) error
+}
+
+// writeContext is the interface needed by the various frame writer
+// types below. All the writeFrame methods below are scheduled via the
+// frame writing scheduler (see writeScheduler in writesched.go).
+//
+// This interface is implemented by *serverConn.
+// TODO: use it from the client code too, once it exists.
+type writeContext interface {
+ Framer() *Framer
+ Flush() error
+ CloseConn() error
+ // HeaderEncoder returns an HPACK encoder that writes to the
+ // returned buffer.
+ HeaderEncoder() (*hpack.Encoder, *bytes.Buffer)
+}
+
+// endsStream reports whether the given frame writer w will locally
+// close the stream.
+func endsStream(w writeFramer) bool {
+ switch v := w.(type) {
+ case *writeData:
+ return v.endStream
+ case *writeResHeaders:
+ return v.endStream
+ case nil:
+ // This can only happen if the caller reuses w after it's
+ // been intentionally nil'ed out to prevent use. Keep this
+ // here to catch future refactoring breaking it.
+ panic("endsStream called on nil writeFramer")
+ }
+ return false
+}
+
+type flushFrameWriter struct{}
+
+func (flushFrameWriter) writeFrame(ctx writeContext) error {
+ return ctx.Flush()
+}
+
+type writeSettings []Setting
+
+func (s writeSettings) writeFrame(ctx writeContext) error {
+ return ctx.Framer().WriteSettings([]Setting(s)...)
+}
+
+type writeGoAway struct {
+ maxStreamID uint32
+ code ErrCode
+}
+
+func (p *writeGoAway) writeFrame(ctx writeContext) error {
+ err := ctx.Framer().WriteGoAway(p.maxStreamID, p.code, nil)
+ if p.code != 0 {
+ ctx.Flush() // ignore error: we're hanging up on them anyway
+ time.Sleep(50 * time.Millisecond)
+ ctx.CloseConn()
+ }
+ return err
+}
+
+type writeData struct {
+ streamID uint32
+ p []byte
+ endStream bool
+}
+
+func (w *writeData) String() string {
+ return fmt.Sprintf("writeData(stream=%d, p=%d, endStream=%v)", w.streamID, len(w.p), w.endStream)
+}
+
+func (w *writeData) writeFrame(ctx writeContext) error {
+ return ctx.Framer().WriteData(w.streamID, w.endStream, w.p)
+}
+
+func (se StreamError) writeFrame(ctx writeContext) error {
+ return ctx.Framer().WriteRSTStream(se.StreamID, se.Code)
+}
+
+type writePingAck struct{ pf *PingFrame }
+
+func (w writePingAck) writeFrame(ctx writeContext) error {
+ return ctx.Framer().WritePing(true, w.pf.Data)
+}
+
+type writeSettingsAck struct{}
+
+func (writeSettingsAck) writeFrame(ctx writeContext) error {
+ return ctx.Framer().WriteSettingsAck()
+}
+
+// writeResHeaders is a request to write a HEADERS and 0+ CONTINUATION frames
+// for HTTP response headers from a server handler.
+type writeResHeaders struct {
+ streamID uint32
+ httpResCode int
+ h http.Header // may be nil
+ endStream bool
+
+ contentType string
+ contentLength string
+}
+
+func (w *writeResHeaders) writeFrame(ctx writeContext) error {
+ enc, buf := ctx.HeaderEncoder()
+ buf.Reset()
+ enc.WriteField(hpack.HeaderField{Name: ":status", Value: httpCodeString(w.httpResCode)})
+ for k, vv := range w.h {
+ k = lowerHeader(k)
+ for _, v := range vv {
+ // TODO: more of "8.1.2.2 Connection-Specific Header Fields"
+ if k == "transfer-encoding" && v != "trailers" {
+ continue
+ }
+ enc.WriteField(hpack.HeaderField{Name: k, Value: v})
+ }
+ }
+ if w.contentType != "" {
+ enc.WriteField(hpack.HeaderField{Name: "content-type", Value: w.contentType})
+ }
+ if w.contentLength != "" {
+ enc.WriteField(hpack.HeaderField{Name: "content-length", Value: w.contentLength})
+ }
+
+ headerBlock := buf.Bytes()
+ if len(headerBlock) == 0 {
+ panic("unexpected empty hpack")
+ }
+
+ // For now we're lazy and just pick the minimum MAX_FRAME_SIZE
+ // that all peers must support (16KB). Later we could care
+ // more and send larger frames if the peer advertised it, but
+ // there's little point. Most headers are small anyway (so we
+ // generally won't have CONTINUATION frames), and extra frames
+ // only waste 9 bytes anyway.
+ const maxFrameSize = 16384
+
+ first := true
+ for len(headerBlock) > 0 {
+ frag := headerBlock
+ if len(frag) > maxFrameSize {
+ frag = frag[:maxFrameSize]
+ }
+ headerBlock = headerBlock[len(frag):]
+ endHeaders := len(headerBlock) == 0
+ var err error
+ if first {
+ first = false
+ err = ctx.Framer().WriteHeaders(HeadersFrameParam{
+ StreamID: w.streamID,
+ BlockFragment: frag,
+ EndStream: w.endStream,
+ EndHeaders: endHeaders,
+ })
+ } else {
+ err = ctx.Framer().WriteContinuation(w.streamID, endHeaders, frag)
+ }
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+type write100ContinueHeadersFrame struct {
+ streamID uint32
+}
+
+func (w write100ContinueHeadersFrame) writeFrame(ctx writeContext) error {
+ enc, buf := ctx.HeaderEncoder()
+ buf.Reset()
+ enc.WriteField(hpack.HeaderField{Name: ":status", Value: "100"})
+ return ctx.Framer().WriteHeaders(HeadersFrameParam{
+ StreamID: w.streamID,
+ BlockFragment: buf.Bytes(),
+ EndStream: false,
+ EndHeaders: true,
+ })
+}
+
+type writeWindowUpdate struct {
+ streamID uint32 // or 0 for conn-level
+ n uint32
+}
+
+func (wu writeWindowUpdate) writeFrame(ctx writeContext) error {
+ return ctx.Framer().WriteWindowUpdate(wu.streamID, wu.n)
+}
diff --git a/vendor/golang.org/x/net/http2/writesched.go b/vendor/golang.org/x/net/http2/writesched.go
new file mode 100644
index 00000000..c24316ce
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/writesched.go
@@ -0,0 +1,283 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import "fmt"
+
+// frameWriteMsg is a request to write a frame.
+type frameWriteMsg struct {
+ // write is the interface value that does the writing, once the
+ // writeScheduler (below) has decided to select this frame
+ // to write. The write functions are all defined in write.go.
+ write writeFramer
+
+ stream *stream // used for prioritization. nil for non-stream frames.
+
+ // done, if non-nil, must be a buffered channel with space for
+ // 1 message and is sent the return value from write (or an
+ // earlier error) when the frame has been written.
+ done chan error
+}
+
+// for debugging only:
+func (wm frameWriteMsg) String() string {
+ var streamID uint32
+ if wm.stream != nil {
+ streamID = wm.stream.id
+ }
+ var des string
+ if s, ok := wm.write.(fmt.Stringer); ok {
+ des = s.String()
+ } else {
+ des = fmt.Sprintf("%T", wm.write)
+ }
+ return fmt.Sprintf("[frameWriteMsg stream=%d, ch=%v, type: %v]", streamID, wm.done != nil, des)
+}
+
+// writeScheduler tracks pending frames to write, priorities, and decides
+// the next one to use. It is not thread-safe.
+type writeScheduler struct {
+ // zero are frames not associated with a specific stream.
+ // They're sent before any stream-specific freams.
+ zero writeQueue
+
+ // maxFrameSize is the maximum size of a DATA frame
+ // we'll write. Must be non-zero and between 16K-16M.
+ maxFrameSize uint32
+
+ // sq contains the stream-specific queues, keyed by stream ID.
+ // when a stream is idle, it's deleted from the map.
+ sq map[uint32]*writeQueue
+
+ // canSend is a slice of memory that's reused between frame
+ // scheduling decisions to hold the list of writeQueues (from sq)
+ // which have enough flow control data to send. After canSend is
+ // built, the best is selected.
+ canSend []*writeQueue
+
+ // pool of empty queues for reuse.
+ queuePool []*writeQueue
+}
+
+func (ws *writeScheduler) putEmptyQueue(q *writeQueue) {
+ if len(q.s) != 0 {
+ panic("queue must be empty")
+ }
+ ws.queuePool = append(ws.queuePool, q)
+}
+
+func (ws *writeScheduler) getEmptyQueue() *writeQueue {
+ ln := len(ws.queuePool)
+ if ln == 0 {
+ return new(writeQueue)
+ }
+ q := ws.queuePool[ln-1]
+ ws.queuePool = ws.queuePool[:ln-1]
+ return q
+}
+
+func (ws *writeScheduler) empty() bool { return ws.zero.empty() && len(ws.sq) == 0 }
+
+func (ws *writeScheduler) add(wm frameWriteMsg) {
+ st := wm.stream
+ if st == nil {
+ ws.zero.push(wm)
+ } else {
+ ws.streamQueue(st.id).push(wm)
+ }
+}
+
+func (ws *writeScheduler) streamQueue(streamID uint32) *writeQueue {
+ if q, ok := ws.sq[streamID]; ok {
+ return q
+ }
+ if ws.sq == nil {
+ ws.sq = make(map[uint32]*writeQueue)
+ }
+ q := ws.getEmptyQueue()
+ ws.sq[streamID] = q
+ return q
+}
+
+// take returns the most important frame to write and removes it from the scheduler.
+// It is illegal to call this if the scheduler is empty or if there are no connection-level
+// flow control bytes available.
+func (ws *writeScheduler) take() (wm frameWriteMsg, ok bool) {
+ if ws.maxFrameSize == 0 {
+ panic("internal error: ws.maxFrameSize not initialized or invalid")
+ }
+
+ // If there any frames not associated with streams, prefer those first.
+ // These are usually SETTINGS, etc.
+ if !ws.zero.empty() {
+ return ws.zero.shift(), true
+ }
+ if len(ws.sq) == 0 {
+ return
+ }
+
+ // Next, prioritize frames on streams that aren't DATA frames (no cost).
+ for id, q := range ws.sq {
+ if q.firstIsNoCost() {
+ return ws.takeFrom(id, q)
+ }
+ }
+
+ // Now, all that remains are DATA frames with non-zero bytes to
+ // send. So pick the best one.
+ if len(ws.canSend) != 0 {
+ panic("should be empty")
+ }
+ for _, q := range ws.sq {
+ if n := ws.streamWritableBytes(q); n > 0 {
+ ws.canSend = append(ws.canSend, q)
+ }
+ }
+ if len(ws.canSend) == 0 {
+ return
+ }
+ defer ws.zeroCanSend()
+
+ // TODO: find the best queue
+ q := ws.canSend[0]
+
+ return ws.takeFrom(q.streamID(), q)
+}
+
+// zeroCanSend is defered from take.
+func (ws *writeScheduler) zeroCanSend() {
+ for i := range ws.canSend {
+ ws.canSend[i] = nil
+ }
+ ws.canSend = ws.canSend[:0]
+}
+
+// streamWritableBytes returns the number of DATA bytes we could write
+// from the given queue's stream, if this stream/queue were
+// selected. It is an error to call this if q's head isn't a
+// *writeData.
+func (ws *writeScheduler) streamWritableBytes(q *writeQueue) int32 {
+ wm := q.head()
+ ret := wm.stream.flow.available() // max we can write
+ if ret == 0 {
+ return 0
+ }
+ if int32(ws.maxFrameSize) < ret {
+ ret = int32(ws.maxFrameSize)
+ }
+ if ret == 0 {
+ panic("internal error: ws.maxFrameSize not initialized or invalid")
+ }
+ wd := wm.write.(*writeData)
+ if len(wd.p) < int(ret) {
+ ret = int32(len(wd.p))
+ }
+ return ret
+}
+
+func (ws *writeScheduler) takeFrom(id uint32, q *writeQueue) (wm frameWriteMsg, ok bool) {
+ wm = q.head()
+ // If the first item in this queue costs flow control tokens
+ // and we don't have enough, write as much as we can.
+ if wd, ok := wm.write.(*writeData); ok && len(wd.p) > 0 {
+ allowed := wm.stream.flow.available() // max we can write
+ if allowed == 0 {
+ // No quota available. Caller can try the next stream.
+ return frameWriteMsg{}, false
+ }
+ if int32(ws.maxFrameSize) < allowed {
+ allowed = int32(ws.maxFrameSize)
+ }
+ // TODO: further restrict the allowed size, because even if
+ // the peer says it's okay to write 16MB data frames, we might
+ // want to write smaller ones to properly weight competing
+ // streams' priorities.
+
+ if len(wd.p) > int(allowed) {
+ wm.stream.flow.take(allowed)
+ chunk := wd.p[:allowed]
+ wd.p = wd.p[allowed:]
+ // Make up a new write message of a valid size, rather
+ // than shifting one off the queue.
+ return frameWriteMsg{
+ stream: wm.stream,
+ write: &writeData{
+ streamID: wd.streamID,
+ p: chunk,
+ // even if the original had endStream set, there
+ // arebytes remaining because len(wd.p) > allowed,
+ // so we know endStream is false:
+ endStream: false,
+ },
+ // our caller is blocking on the final DATA frame, not
+ // these intermediates, so no need to wait:
+ done: nil,
+ }, true
+ }
+ wm.stream.flow.take(int32(len(wd.p)))
+ }
+
+ q.shift()
+ if q.empty() {
+ ws.putEmptyQueue(q)
+ delete(ws.sq, id)
+ }
+ return wm, true
+}
+
+func (ws *writeScheduler) forgetStream(id uint32) {
+ q, ok := ws.sq[id]
+ if !ok {
+ return
+ }
+ delete(ws.sq, id)
+
+ // But keep it for others later.
+ for i := range q.s {
+ q.s[i] = frameWriteMsg{}
+ }
+ q.s = q.s[:0]
+ ws.putEmptyQueue(q)
+}
+
+type writeQueue struct {
+ s []frameWriteMsg
+}
+
+// streamID returns the stream ID for a non-empty stream-specific queue.
+func (q *writeQueue) streamID() uint32 { return q.s[0].stream.id }
+
+func (q *writeQueue) empty() bool { return len(q.s) == 0 }
+
+func (q *writeQueue) push(wm frameWriteMsg) {
+ q.s = append(q.s, wm)
+}
+
+// head returns the next item that would be removed by shift.
+func (q *writeQueue) head() frameWriteMsg {
+ if len(q.s) == 0 {
+ panic("invalid use of queue")
+ }
+ return q.s[0]
+}
+
+func (q *writeQueue) shift() frameWriteMsg {
+ if len(q.s) == 0 {
+ panic("invalid use of queue")
+ }
+ wm := q.s[0]
+ // TODO: less copy-happy queue.
+ copy(q.s, q.s[1:])
+ q.s[len(q.s)-1] = frameWriteMsg{}
+ q.s = q.s[:len(q.s)-1]
+ return wm
+}
+
+func (q *writeQueue) firstIsNoCost() bool {
+ if df, ok := q.s[0].write.(*writeData); ok {
+ return len(df.p) == 0
+ }
+ return true
+}
diff --git a/vendor/golang.org/x/net/http2/z_spec_test.go b/vendor/golang.org/x/net/http2/z_spec_test.go
new file mode 100644
index 00000000..e0f420a1
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/z_spec_test.go
@@ -0,0 +1,356 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+ "bytes"
+ "encoding/xml"
+ "flag"
+ "fmt"
+ "io"
+ "os"
+ "reflect"
+ "regexp"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+ "testing"
+)
+
+var coverSpec = flag.Bool("coverspec", false, "Run spec coverage tests")
+
+// The global map of sentence coverage for the http2 spec.
+var defaultSpecCoverage specCoverage
+
+var loadSpecOnce sync.Once
+
+func loadSpec() {
+ if f, err := os.Open("testdata/draft-ietf-httpbis-http2.xml"); err != nil {
+ panic(err)
+ } else {
+ defaultSpecCoverage = readSpecCov(f)
+ f.Close()
+ }
+}
+
+// covers marks all sentences for section sec in defaultSpecCoverage. Sentences not
+// "covered" will be included in report outputed by TestSpecCoverage.
+func covers(sec, sentences string) {
+ loadSpecOnce.Do(loadSpec)
+ defaultSpecCoverage.cover(sec, sentences)
+}
+
+type specPart struct {
+ section string
+ sentence string
+}
+
+func (ss specPart) Less(oo specPart) bool {
+ atoi := func(s string) int {
+ n, err := strconv.Atoi(s)
+ if err != nil {
+ panic(err)
+ }
+ return n
+ }
+ a := strings.Split(ss.section, ".")
+ b := strings.Split(oo.section, ".")
+ for len(a) > 0 {
+ if len(b) == 0 {
+ return false
+ }
+ x, y := atoi(a[0]), atoi(b[0])
+ if x == y {
+ a, b = a[1:], b[1:]
+ continue
+ }
+ return x < y
+ }
+ if len(b) > 0 {
+ return true
+ }
+ return false
+}
+
+type bySpecSection []specPart
+
+func (a bySpecSection) Len() int { return len(a) }
+func (a bySpecSection) Less(i, j int) bool { return a[i].Less(a[j]) }
+func (a bySpecSection) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+
+type specCoverage struct {
+ coverage map[specPart]bool
+ d *xml.Decoder
+}
+
+func joinSection(sec []int) string {
+ s := fmt.Sprintf("%d", sec[0])
+ for _, n := range sec[1:] {
+ s = fmt.Sprintf("%s.%d", s, n)
+ }
+ return s
+}
+
+func (sc specCoverage) readSection(sec []int) {
+ var (
+ buf = new(bytes.Buffer)
+ sub = 0
+ )
+ for {
+ tk, err := sc.d.Token()
+ if err != nil {
+ if err == io.EOF {
+ return
+ }
+ panic(err)
+ }
+ switch v := tk.(type) {
+ case xml.StartElement:
+ if skipElement(v) {
+ if err := sc.d.Skip(); err != nil {
+ panic(err)
+ }
+ if v.Name.Local == "section" {
+ sub++
+ }
+ break
+ }
+ switch v.Name.Local {
+ case "section":
+ sub++
+ sc.readSection(append(sec, sub))
+ case "xref":
+ buf.Write(sc.readXRef(v))
+ }
+ case xml.CharData:
+ if len(sec) == 0 {
+ break
+ }
+ buf.Write(v)
+ case xml.EndElement:
+ if v.Name.Local == "section" {
+ sc.addSentences(joinSection(sec), buf.String())
+ return
+ }
+ }
+ }
+}
+
+func (sc specCoverage) readXRef(se xml.StartElement) []byte {
+ var b []byte
+ for {
+ tk, err := sc.d.Token()
+ if err != nil {
+ panic(err)
+ }
+ switch v := tk.(type) {
+ case xml.CharData:
+ if b != nil {
+ panic("unexpected CharData")
+ }
+ b = []byte(string(v))
+ case xml.EndElement:
+ if v.Name.Local != "xref" {
+ panic("expected ")
+ }
+ if b != nil {
+ return b
+ }
+ sig := attrSig(se)
+ switch sig {
+ case "target":
+ return []byte(fmt.Sprintf("[%s]", attrValue(se, "target")))
+ case "fmt-of,rel,target", "fmt-,,rel,target":
+ return []byte(fmt.Sprintf("[%s, %s]", attrValue(se, "target"), attrValue(se, "rel")))
+ case "fmt-of,sec,target", "fmt-,,sec,target":
+ return []byte(fmt.Sprintf("[section %s of %s]", attrValue(se, "sec"), attrValue(se, "target")))
+ case "fmt-of,rel,sec,target":
+ return []byte(fmt.Sprintf("[section %s of %s, %s]", attrValue(se, "sec"), attrValue(se, "target"), attrValue(se, "rel")))
+ default:
+ panic(fmt.Sprintf("unknown attribute signature %q in %#v", sig, fmt.Sprintf("%#v", se)))
+ }
+ default:
+ panic(fmt.Sprintf("unexpected tag %q", v))
+ }
+ }
+}
+
+var skipAnchor = map[string]bool{
+ "intro": true,
+ "Overview": true,
+}
+
+var skipTitle = map[string]bool{
+ "Acknowledgements": true,
+ "Change Log": true,
+ "Document Organization": true,
+ "Conventions and Terminology": true,
+}
+
+func skipElement(s xml.StartElement) bool {
+ switch s.Name.Local {
+ case "artwork":
+ return true
+ case "section":
+ for _, attr := range s.Attr {
+ switch attr.Name.Local {
+ case "anchor":
+ if skipAnchor[attr.Value] || strings.HasPrefix(attr.Value, "changes.since.") {
+ return true
+ }
+ case "title":
+ if skipTitle[attr.Value] {
+ return true
+ }
+ }
+ }
+ }
+ return false
+}
+
+func readSpecCov(r io.Reader) specCoverage {
+ sc := specCoverage{
+ coverage: map[specPart]bool{},
+ d: xml.NewDecoder(r)}
+ sc.readSection(nil)
+ return sc
+}
+
+func (sc specCoverage) addSentences(sec string, sentence string) {
+ for _, s := range parseSentences(sentence) {
+ sc.coverage[specPart{sec, s}] = false
+ }
+}
+
+func (sc specCoverage) cover(sec string, sentence string) {
+ for _, s := range parseSentences(sentence) {
+ p := specPart{sec, s}
+ if _, ok := sc.coverage[p]; !ok {
+ panic(fmt.Sprintf("Not found in spec: %q, %q", sec, s))
+ }
+ sc.coverage[specPart{sec, s}] = true
+ }
+
+}
+
+var whitespaceRx = regexp.MustCompile(`\s+`)
+
+func parseSentences(sens string) []string {
+ sens = strings.TrimSpace(sens)
+ if sens == "" {
+ return nil
+ }
+ ss := strings.Split(whitespaceRx.ReplaceAllString(sens, " "), ". ")
+ for i, s := range ss {
+ s = strings.TrimSpace(s)
+ if !strings.HasSuffix(s, ".") {
+ s += "."
+ }
+ ss[i] = s
+ }
+ return ss
+}
+
+func TestSpecParseSentences(t *testing.T) {
+ tests := []struct {
+ ss string
+ want []string
+ }{
+ {"Sentence 1. Sentence 2.",
+ []string{
+ "Sentence 1.",
+ "Sentence 2.",
+ }},
+ {"Sentence 1. \nSentence 2.\tSentence 3.",
+ []string{
+ "Sentence 1.",
+ "Sentence 2.",
+ "Sentence 3.",
+ }},
+ }
+
+ for i, tt := range tests {
+ got := parseSentences(tt.ss)
+ if !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("%d: got = %q, want %q", i, got, tt.want)
+ }
+ }
+}
+
+func TestSpecCoverage(t *testing.T) {
+ if !*coverSpec {
+ t.Skip()
+ }
+
+ loadSpecOnce.Do(loadSpec)
+
+ var (
+ list []specPart
+ cv = defaultSpecCoverage.coverage
+ total = len(cv)
+ complete = 0
+ )
+
+ for sp, touched := range defaultSpecCoverage.coverage {
+ if touched {
+ complete++
+ } else {
+ list = append(list, sp)
+ }
+ }
+ sort.Stable(bySpecSection(list))
+
+ if testing.Short() && len(list) > 5 {
+ list = list[:5]
+ }
+
+ for _, p := range list {
+ t.Errorf("\tSECTION %s: %s", p.section, p.sentence)
+ }
+
+ t.Logf("%d/%d (%d%%) sentances covered", complete, total, (complete/total)*100)
+}
+
+func attrSig(se xml.StartElement) string {
+ var names []string
+ for _, attr := range se.Attr {
+ if attr.Name.Local == "fmt" {
+ names = append(names, "fmt-"+attr.Value)
+ } else {
+ names = append(names, attr.Name.Local)
+ }
+ }
+ sort.Strings(names)
+ return strings.Join(names, ",")
+}
+
+func attrValue(se xml.StartElement, attr string) string {
+ for _, a := range se.Attr {
+ if a.Name.Local == attr {
+ return a.Value
+ }
+ }
+ panic("unknown attribute " + attr)
+}
+
+func TestSpecPartLess(t *testing.T) {
+ tests := []struct {
+ sec1, sec2 string
+ want bool
+ }{
+ {"6.2.1", "6.2", false},
+ {"6.2", "6.2.1", true},
+ {"6.10", "6.10.1", true},
+ {"6.10", "6.1.1", false}, // 10, not 1
+ {"6.1", "6.1", false}, // equal, so not less
+ }
+ for _, tt := range tests {
+ got := (specPart{tt.sec1, "foo"}).Less(specPart{tt.sec2, "foo"})
+ if got != tt.want {
+ t.Errorf("Less(%q, %q) = %v; want %v", tt.sec1, tt.sec2, got, tt.want)
+ }
+ }
+}
diff --git a/vendor/golang.org/x/net/icmp/endpoint.go b/vendor/golang.org/x/net/icmp/endpoint.go
index 3de49e65..0213d1a1 100644
--- a/vendor/golang.org/x/net/icmp/endpoint.go
+++ b/vendor/golang.org/x/net/icmp/endpoint.go
@@ -16,13 +16,12 @@ import (
var _ net.PacketConn = &PacketConn{}
-type ipc interface{}
-
// A PacketConn represents a packet network endpoint that uses either
// ICMPv4 or ICMPv6.
type PacketConn struct {
- c net.PacketConn
- ipc // either ipv4.PacketConn or ipv6.PacketConn
+ c net.PacketConn
+ p4 *ipv4.PacketConn
+ p6 *ipv6.PacketConn
}
func (c *PacketConn) ok() bool { return c != nil && c.c != nil }
@@ -33,8 +32,7 @@ func (c *PacketConn) IPv4PacketConn() *ipv4.PacketConn {
if !c.ok() {
return nil
}
- p, _ := c.ipc.(*ipv4.PacketConn)
- return p
+ return c.p4
}
// IPv6PacketConn returns the ipv6.PacketConn of c.
@@ -43,8 +41,7 @@ func (c *PacketConn) IPv6PacketConn() *ipv6.PacketConn {
if !c.ok() {
return nil
}
- p, _ := c.ipc.(*ipv6.PacketConn)
- return p
+ return c.p6
}
// ReadFrom reads an ICMP message from the connection.
@@ -55,11 +52,9 @@ func (c *PacketConn) ReadFrom(b []byte) (int, net.Addr, error) {
// Please be informed that ipv4.NewPacketConn enables
// IP_STRIPHDR option by default on Darwin.
// See golang.org/issue/9395 for futher information.
- if runtime.GOOS == "darwin" {
- if p, _ := c.ipc.(*ipv4.PacketConn); p != nil {
- n, _, peer, err := p.ReadFrom(b)
- return n, peer, err
- }
+ if runtime.GOOS == "darwin" && c.p4 != nil {
+ n, _, peer, err := c.p4.ReadFrom(b)
+ return n, peer, err
}
return c.c.ReadFrom(b)
}
diff --git a/vendor/golang.org/x/net/icmp/listen_posix.go b/vendor/golang.org/x/net/icmp/listen_posix.go
index fa1653b7..b9f26079 100644
--- a/vendor/golang.org/x/net/icmp/listen_posix.go
+++ b/vendor/golang.org/x/net/icmp/listen_posix.go
@@ -89,9 +89,9 @@ func ListenPacket(network, address string) (*PacketConn, error) {
}
switch proto {
case iana.ProtocolICMP:
- return &PacketConn{c: c, ipc: ipv4.NewPacketConn(c)}, nil
+ return &PacketConn{c: c, p4: ipv4.NewPacketConn(c)}, nil
case iana.ProtocolIPv6ICMP:
- return &PacketConn{c: c, ipc: ipv6.NewPacketConn(c)}, nil
+ return &PacketConn{c: c, p6: ipv6.NewPacketConn(c)}, nil
default:
return &PacketConn{c: c}, nil
}
diff --git a/vendor/golang.org/x/net/ipv4/doc.go b/vendor/golang.org/x/net/ipv4/doc.go
index 75eb12d7..9a79badf 100644
--- a/vendor/golang.org/x/net/ipv4/doc.go
+++ b/vendor/golang.org/x/net/ipv4/doc.go
@@ -42,7 +42,7 @@
// The outgoing packets will be labeled DiffServ assured forwarding
// class 1 low drop precedence, known as AF11 packets.
//
-// if err := ipv4.NewConn(c).SetTOS(DiffServAF11); err != nil {
+// if err := ipv4.NewConn(c).SetTOS(0x28); err != nil {
// // error handling
// }
// if _, err := c.Write(data); err != nil {
@@ -124,7 +124,7 @@
//
// The application can also send both unicast and multicast packets.
//
-// p.SetTOS(DiffServCS0)
+// p.SetTOS(0x0)
// p.SetTTL(16)
// if _, err := p.WriteTo(data, nil, src); err != nil {
// // error handling
diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go
index c0c833e8..3c15c21f 100644
--- a/vendor/golang.org/x/net/ipv6/doc.go
+++ b/vendor/golang.org/x/net/ipv6/doc.go
@@ -42,7 +42,7 @@
// The outgoing packets will be labeled DiffServ assured forwarding
// class 1 low drop precedence, known as AF11 packets.
//
-// if err := ipv6.NewConn(c).SetTrafficClass(DiffServAF11); err != nil {
+// if err := ipv6.NewConn(c).SetTrafficClass(0x28); err != nil {
// // error handling
// }
// if _, err := c.Write(data); err != nil {
@@ -124,7 +124,7 @@
//
// The application can also send both unicast and multicast packets.
//
-// p.SetTrafficClass(DiffServCS0)
+// p.SetTrafficClass(0x0)
// p.SetHopLimit(16)
// if _, err := p.WriteTo(data[:n], nil, src); err != nil {
// // error handling
diff --git a/vendor/golang.org/x/net/publicsuffix/list_test.go b/vendor/golang.org/x/net/publicsuffix/list_test.go
index f231de4c..a08e64ea 100644
--- a/vendor/golang.org/x/net/publicsuffix/list_test.go
+++ b/vendor/golang.org/x/net/publicsuffix/list_test.go
@@ -356,10 +356,10 @@ var eTLDPlusOneTestCases = []struct {
{"a.b.example.uk.com", "example.uk.com"},
{"test.ac", "test.ac"},
// TLD with only 1 (wildcard) rule.
- {"il", ""},
- {"c.il", ""},
- {"b.c.il", "b.c.il"},
- {"a.b.c.il", "b.c.il"},
+ {"mm", ""},
+ {"c.mm", ""},
+ {"b.c.mm", "b.c.mm"},
+ {"a.b.c.mm", "b.c.mm"},
// More complex TLD.
{"jp", ""},
{"test.jp", "test.jp"},
diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go
index 9b8c7212..8acecbcf 100644
--- a/vendor/golang.org/x/net/publicsuffix/table.go
+++ b/vendor/golang.org/x/net/publicsuffix/table.go
@@ -2,7 +2,7 @@
package publicsuffix
-const version = "publicsuffix.org's public_suffix_list.dat, git revision 0de6f8e (2015-07-15)"
+const version = "publicsuffix.org's public_suffix_list.dat, git revision 8952c0c (2015-10-12)"
const (
nodesBitsChildren = 9
@@ -23,417 +23,429 @@ const (
)
// numTLD is the number of top level domains.
-const numTLD = 1337
+const numTLD = 1526
// Text is the combined text of all labels.
-const text = "biomutashinainfoggiabirdartdecodynaliascoli-picenord-frontierbir" +
- "kenesoddtangenovaravennagatorockartuzyunsakakinokiabirthplacevje" +
- "-og-hornnesangostrodawarabjarkoyurihonjournalistjordalshalsenfsh" +
- "ostre-totenkawabjerkreimmobilienhsanjotatsunostrolekaniepcexpose" +
- "dogawarabikomaezakirunortonsbergminakamichigangwonikonantananger" +
- "bjugninohelpaleostrowiecasertairabloombergbauernuorokunohealthca" +
- "reerschmidtre-gauldalottokashikinuyamanouchikuhokuryugasakitaura" +
- "yasudabluedatsunanjogaszkolahppiacenzachpomorskieninomiyakonojos" +
- "oyrovnostrowwlkpmgmodalenirasakinvestmentsannanishiazais-a-candi" +
- "datexasiabmsannohelsinkitakamiizumisanofieldyndns-freemasonryusu" +
- "harabmweirbnpparibaselburgmxboxeroxjaworznobomloanswatch-and-clo" +
- "ckerbondyndns-homednsanokasumigaurawa-mazowszexeterbonnishigotvs" +
- "antabarbarabootsantacruzsantafedjelenia-goraboschlesischesanukis" +
- "-a-catererbostikasuyakutiabostonakijinsekikogentingretajimakaneg" +
- "asakitagawabotanicalgardenishiharabotanicgardenishiizunazukis-a-" +
- "celticsfanishikatakayamatta-varjjatattoolsztynsettlersaotomelbou" +
- "rnextraspace-to-rentalsapodhalebotanynysadoesntexistanbullensake" +
- "rboutiquebecasinore-og-uvdalouvrepair-traffic-controlleyusuisser" +
- "vegame-serverdalovenneslaskerrylogisticsapporobozentsujiiebrades" +
- "corporationishikatsuragivingrimstadyndns-ip6brandywinevalleyuulm" +
- "inamibosogndalowiczest-le-patrondheimperiabrasiljan-mayenishikaw" +
- "azukaneyamaxunjargabresciabrindisiciliabristolgalsacebritishcolu" +
- "mbialowiezagannakadomari-elasticbeanstalkaszubyuzawabroadcastleb" +
- "timnetzgorabroadwayuzhno-sakhalinskatowicebroke-itaxihuanishimer" +
- "abrokerrypropertiesaratovalleaostavropolicebronnoysundyndns-mail" +
- "ubindalucaniabrothermesaverdealstahaugesundyndns-office-on-the-w" +
- "ebcambridgestonewportlligatewaybrumunddaluccapetownishinomiyashi" +
- "ronobrunelblagdenesnaaseralingenkainanaejrietiendaburyatiabrusse" +
- "lsardegnamsosnowiecastresistancebruxellesardiniabryanskleppalerm" +
- "omasvuotnakatsugawabryneuesarlucernebuyshousesarpsborgripebuzeni" +
- "shinoomotegovtgorybuzzgorzeleccollegersundyndns-picsarufutsunomi" +
- "yawakasaikaitakoelnishinoshimabwfarmequipmentjeldsundyndns-remot" +
- "egildeskalmykiabzhitomirkutskodjeffersonishiokoppegardyndns-serv" +
- "erbaniacntoyonezawacolognewjerseycolonialwilliamsburgrpanamacolo" +
- "radoplateaudiocolumbusantiquest-a-la-masioncommunitydaluxembourg" +
- "ruecomobaracompanycompute-1computerhistoryofscience-fictioncomse" +
- "curitysfjordcondoshichikashukujitawaraconferenceconstructioncons" +
- "uladollsatxn--0trq7p7nnconsultanthropologyconsultingvolluxurycon" +
- "tactoyonocontemporaryartgallerybnikahokutogitsuldaluzerncontract" +
- "orskenconventureshinodesashibetsuikindleikangercookingchannelver" +
- "uminamiechizencoolbia-tempio-olbiatempioolbialystokkecoopocznori" +
- "lskypescaravantaarparachutinguidellogliastradercopenhagencyclope" +
- "dicdn77-sslattuminamidaitomangotsukisosakitagatakamoriokamikitay" +
- "amatotakadacorsicamerakershus-east-1corvettelemarkazunocosenzako" +
- "panerairguardcostumedio-campidano-mediocampidanomediocouncilviva" +
- "no-frankivskchristiansburguitarsaudacouponsauheradcoursesavannah" +
- "gacqhachinoheguris-a-democratoyookarasjohkamiokaminokawanishiaiz" +
- "ubangecranbrookuwanalyticsaves-the-whalessandria-trani-barletta-" +
- "andriatranibarlettaandriacreditcardcreditunioncremonashorokanaie" +
- "crewiiheyaizuwakamatsubushikusakadogawacricketrzyncrimeacrotonew" +
- "mexicoldwarmiamiastarnbergujolstercrowncrsavonamsskoganeis-a-des" +
- "ignercruisesaxocuisinellancasterculturalcentertainmentoyosatomsk" +
- "ddielddanuorrikuzentakatajirissafetysnesayokkaichirurgiens-denti" +
- "stesbscholarshipschoolcuneocupcakecxn--11b4c3dcyouthdfcbankfhskh" +
- "abarovskhakassiafinlandfinnoyfirebaseappspotenzamamicrolightingu" +
- "nmaritimodellinguovdageaidnulsanfranciscotlandfirenzefirestonewy" +
- "orkshireggio-calabriafirmdaleirfjordfishingoldpointelligencefitj" +
- "arfitnessettlementoyotsukaidovre-eikerfjalerflesbergushikamifura" +
- "noshiroomuraflickragerotikamchatkameokameyamashinatsukigatakahar" +
- "ussiaflightschweizippodlasiellakasamatsudoosandnessjoenfloguchik" +
- "uzenfloraflorencefloridafloristanohatakahashimamakirkenesciencec" +
- "entersciencehistoryfloromskogxn--1ck2e1balestrandabergamoarekepn" +
- "ordlandivtasvuodnakaiwamizawaugustowadaejeonbukarlsoyokote12flow" +
- "erscientistor-elvdalflsmidthruhereggio-emilia-romagnakanotoddenf" +
- "lynnhubalsanagochihayaakasakawagoebinagisoccertificationaturalsc" +
- "iencesnaturelles3-sa-east-1fndfolldalfoodnetworkangerfor-better-" +
- "thandafor-ourfor-somedizinhistorischescrapper-sitefor-theatreefo" +
- "rexrothachiojiyahikobeatscrappingzjcbnlforgotdnservicesettsuppor" +
- "toyouraforli-cesena-forlicesenaforliguriaforsaleirvikharkivalled" +
- "-aostakinoueforsandasuolodingenfortmissoulan-udefenseljordfortwo" +
- "rthachirogatakanabeauxartsandcraftsevastopoleforuminamiizukamito" +
- "ndabayashiogamagoriziafosnesewildlifestylefotoystre-slidrettozaw" +
- "afredrikstadtveronakamuratakahamaniwakuratelevisionfreiburgfreig" +
- "htcmwilliamhillfribourgfriuli-v-giuliafriuli-ve-giuliafriuli-veg" +
- "iuliafriuli-venezia-giuliafriuli-veneziagiuliafriuli-vgiuliafriu" +
- "liv-giuliafriulive-giuliafriulivegiuliafriulivenezia-giuliafriul" +
- "iveneziagiuliafriulivgiuliafrlfroganshakotankharkovalledaostakko" +
- "fuelfrognfrolandfrom-akrehamnfrom-alfrom-arfrom-azlgfrom-capebre" +
- "tonamiasakuchinotsuchiurakawassamukawataricohdavvesiidazaifudaig" +
- "odoharuhrfrom-collectionfrom-ctozsdeltajimibungotakadavvenjargam" +
- "vikhersonfrom-dcheltenham-radio-operaunitelefonicagliaridagawars" +
- "zawashingtondclkatsushikabelaudiblebesbyglandyndns-weberlincolni" +
- "shitosashimizunaminamiashigarafrom-degreefrom-flandersharis-a-ge" +
- "ekhmelnitskiyamashikiyosatohoboleslawiechelyabinskydivingriwatar" +
- "ailwayfrom-gausdalfrom-higashiagatsumagoizumizakirovogradoyfrom-" +
- "iafrom-idfrom-ilfrom-in-the-bandaiwafunexusdecorativeartsharpara" +
- "glidingfrom-kshawaiijimarylandfrom-kyknetnedalfrom-langevagrarbo" +
- "retumbriafrom-mannosegawafrom-mdfrom-meereshellaspeziafrom-micro" +
- "softbankhmelnytskyivallee-aosteroyfrom-mnfrom-mochizukiryuohkura" +
- "from-msherbrookegawafrom-mtnfrom-nchernigovernmentjomeloyalistoc" +
- "kholmestrandyndns-wikirafrom-ndfrom-nefrom-nhktranaritakurashiki" +
- "s-a-greenfrom-njcparisor-fronfrom-nminamimakis-a-gurulvikhvallee" +
- "aosteigenfrom-nvanylvenicefrom-nyfrom-ohtawaramotoineppugliafrom" +
- "-oketogolfashionfrom-orfrom-paderbornfrom-praxis-a-anarchistoire" +
- "ggiocalabriafrom-rittogurafrom-schokoladenfrom-sdnipropetrovskla" +
- "businessebykleclerchernihivgucciprianiigataishinomakikugawatchan" +
- "dclockatsuyamashikefrom-tnfrom-txn--1ctwolominamatamayukis-a-har" +
- "d-workerfrom-utazuerichardlikes-piedmontblancashireggioemiliarom" +
- "agnakasatsunairlinebraskaunbieidsvollfrom-vadsochildrensgardenfr" +
- "om-vtranbyfrom-wafrom-wielunnerfrom-wvaofrom-wyfrosinonefrostalo" +
- "wa-wolawafroyahabaghdadfstcgrouparliamentrani-andria-barletta-tr" +
- "ani-andriafujiiderafujikawaguchikonefujiminohadanotaireshimojis-" +
- "a-hunterfujinomiyadafujiokayamansionshimokawafujisatoshonairport" +
- "land-4-salernogiessengerdalaskanittedallasalleaseeklogeshimokita" +
- "yamafujisawafujishiroishidakabiratorideliveryggeelvinckmpspbalsf" +
- "jordivttasvuotnakamagayachts3-us-gov-west-1fujiyoshidafukayabear" +
- "dubaiduckdnsdojoetsurutaharaumakeupowiatmallorcafederationfukuch" +
- "iyamadafukudominichernivtsicilyfukuis-a-knightraniandriabarletta" +
- "traniandriafukumitsukefukuokazakisarazure-mobileitungsenfukurois" +
- "higakishiwadafukusakisofukushimanxn--1lqs03nfukuyamagatakahataka" +
- "ishimogosenfunabashiriuchinadafunagatakamatsukawafunahashikamiam" +
- "akusatsumasendaisennangonohejis-a-landscaperugiafundaciofuoiskuj" +
- "ukuriyamaoris-a-lawyerfuosskoczowinbaltimore-og-romsdalillesandi" +
- "egotembaixadaukraanghkemerovodkagoshimagnitkakamigaharaholtaleni" +
- "waizumiotsukumiyamazonawsaarlandgcampobassociates3-eu-west-1furn" +
- "iturehabikinokawairtelecityeatshimonitayanagis-a-liberalfurubira" +
- "quarelleasingleshimonosekikawafurudonostiafurukawaharafusodegaur" +
- "afussagaeroclubmedecincinnativeamericanantiquesquarendalenugfuta" +
- "bayamaguchinomigawafutboldlygoingnowhere-for-moregontrailroadfut" +
- "tsurugashimarburgfvgfyis-a-libertarianfylkesbiblackfridayfyresda" +
- "lhannanmokuizumodenakatombetsulikescandynathomebuiltranoyhannova" +
- "reservebbshimotsukehanyuzenhapmirumarnardalhappounzenhareidsberg" +
- "enharstadharvestcelebrationhasamarahasaminami-alpssells-for-ustk" +
- "arasuyamazoehasudahasvikokonoehatogayahoooshikamaishimodatenris-" +
- "a-nurseminehatoyamazakitahiroshimarriottransportrapaniimimatakas" +
- "ugais-a-painteractivegaskimitsubatamicadaqueshimotsumahatsukaich" +
- "iharahattfjelldalhayashimamotobunkyonanaoshimabariakehazuminobus" +
- "ells-itravelchannelhembygdsforbundhemneshinichinanhemsedalheroku" +
- "ssldheroyhgtvarggatravelersinsurancehigashichichibusheyhigashihi" +
- "roshimanehigashiizumozakitakatakaokamikoaniikappulawyhigashikaga" +
- "wahigashikagurasoedahigashikawakitaaikitakyushuaiahigashikurumee" +
- "trdhigashimatsushimarugame-hostinghigashimatsuyamakitaakitadaito" +
- "igawahigashimurayamalatvuopmidoris-a-patsfanhigashinarusellsyour" +
- "homeftpaccesshinjournalismolanshinjukumanohigashinehigashiomihac" +
- "himanchesterhigashiosakasayamamotorcycleshinkamigotoyohashimotok" +
- "uyamahigashishirakawamatakarazukamiminershinshinotsurfastlyhigas" +
- "hisumiyoshikawaminamiaikitamidsundhigashitsunotteroyhigashiuraus" +
- "ukitamotosumidatlantichiryukyuragifuefukihabmerhigashiyamatokori" +
- "yamanakakogawahigashiyodogawahigashiyoshinogaris-a-personaltrain" +
- "erhiraizumisatohmarumorimachidahirakatashinagawahiranairtrafficb" +
- "cghirarahiratsukagawahirayaitakasagooglecodespotrentino-a-adigeh" +
- "istorichouseshinshirohitachiomiyaginowaniihamatamakawajimarcheap" +
- "artmentshintokushimahitachiotagoparocherkasyzrankoshigayaltaikis" +
- "-a-photographerokuapparshintomikasaharahitoyoshimifunehitradingh" +
- "jartdalhjelmelandholeckobierzyceholidayhomeipartis-a-playerhomel" +
- "inuxn--1lqs71dhomessinashikitanakagusukumodernhomeunixn--1qqw23a" +
- "hondahonefosshinyoshitomiokanmakiwakunigamihamadahongorgehonjyoi" +
- "chiropractichitachinakagawatchesasayamahornindalhorsembokukitash" +
- "iobarahortendofinternetrentino-aadigehoteleshiojirishirifujiedah" +
- "otmailhoyangerhoylandetroitskolobrzegyptianquanconagawakeisenbah" +
- "nhurdalhurumajis-a-republicancerresearchaeologicaliforniahyogori" +
- "s-a-rockstarachowicehyugawarajfkomakiyosemitejgorajlchloejlljmpa" +
- "rtnershiraokanonjis-a-studentaljnjeonnamerikawauejoyoitakasakitc" +
- "henjpmorganichocolatelekommunikationishiwakis-a-conservativegars" +
- "heis-a-cpadoval-daostavalleyjpnchofunatorientexpressexyzgradyndn" +
- "s-workshoppdalukowhalingroks-thisayamanashichinohedmarketsasebok" +
- "nowsitallyngenissandvikcoromantovalle-aostatoiluroyjprshiratakah" +
- "agis-a-teacherkassymantechnologyjurkredstonekristiansandefjordkr" +
- "istiansundkrodsheradkrokstadelvaldaostathellewismillerkryminamio" +
- "guniversitykumatorinokumejimateramoldelmenhorstalbanshisuifuette" +
- "rtdasnetzwindmillkumenanyokaichibahccavuotnagareyamaintenancekun" +
- "isakis-an-actresshirahamatonbetsurgeonshalloffamelhuslivinghisto" +
- "rykunitachiaraisaijoshkar-olayangroupartykunitomigusukumamotoyam" +
- "asudakunneppupasadenaklodzkodairakunstsammlungkunstunddesignkuok" +
- "groupassagenshitaramakureitrentino-sudtirolkurgankurobellevuelos" +
- "angelesjaguarchitecturebungoonomichinomiyakembuchikujobservercel" +
- "liernemurorangemologicallfinanzkurogimilitarykuroisoftwaremarker" +
- "ryhotelshizukuishimofusaikis-an-anarchistoricalsocietyumenkuroma" +
- "tsunais-an-artistjohnkurotakikawasakis-an-engineeringerikekursko" +
- "mmunalforbundkushirogawakustanais-an-entertainerkusunndalkutchan" +
- "elkutnokuzbassnillfjordkuzumakis-bykvafjordkvalsundkvamlidlugole" +
- "kagaminord-aurdalvdalipayufuchukotkafjordkvanangenkvinesdalkvinn" +
- "heradkviteseidskogkvitsoykwpspjelkavikommunekyotobetsupersportre" +
- "ntino-sued-tirolkyowariasahikawamissilexusgardenmisugitokigawami" +
- "takeharamitourismolenskomorotsukamisunagawamitoyoakemiuramiyazur" +
- "ewebsiteshikagamiishikarikaturindalmiyotamanomjondalenmlbarclays" +
- "3-us-west-2monmouthaebaruminamiminowamonticellombardiamondshouji" +
- "s-into-animegurovigorlicemontrealestatebankomvuxn--2m4a15emonza-" +
- "brianzaporizhzhekinannestadmonza-e-della-brianzaporizhzhiamonzab" +
- "rianzapposts-and-telecommunicationshowamonzaebrianzaramonzaedell" +
- "abrianzamordoviajessheiminamisanrikubetsupplieshizuokanoyakagemo" +
- "riyamatsusakahogithubusercontentrentino-suedtirolmoriyoshiokamit" +
- "suemormoneymoroyamatsushigemortgagemoscowindowshriramsterdamberk" +
- "eleymoseushistorymosjoenmoskenesienaplesigdalmossimbirskongsberg" +
- "mosvikongsvingermoviemovistargardmtpccwioslombardyndns-at-homede" +
- "potaruis-into-carshirakoenigmtrainingmuenstermugivestbytomakomai" +
- "baramuikamogawamukochikushinonsenergymulhouseoullensvangmulticho" +
- "icemunakatanemuncieszynmuosattemupassenger-associationmurmanskon" +
- "injamisonymurotorcraftrentinoa-adigemusashimurayamatsuuramusashi" +
- "noharamuseetrentinoaadigemuseumverenigingmutsuzawamutuellezajsko" +
- "nskowolapyatigorskomatsushimashikokuchuomyphotoshibaikaliszczytn" +
- "ordkappgmytis-a-bookkeeperminamitanephilatelyphilipsyphoenixn--3" +
- "0rr7yphotographysiopiagetmyipaviancapitalpictetrentinoaltoadigep" +
- "icturesirdalpiemontepilotslupskonsulatrobelgorodeopinkonyvelolku" +
- "szpartshishikuis-a-techietis-a-socialistmeincheonpippupiszpittsb" +
- "urghofauskedsmokorsetagayasells-for-lesschulepiwatepizzapkooris-" +
- "a-therapistoiaplanetariuminamiuonumatsumotofukeplantationplantsn" +
- "oasaintlouis-a-bruinsfansnzplatforminamiyamashirokawanabellunord" +
- "re-landplaystationplazaplchonanbuildingrondarplomzansimagichosei" +
- "kakegawawhoswhokksundyroyrvikingrongaplumbingoplusterpmnpodzonep" +
- "ohlpokerpokrovskopervikomforbambleborkarpaczeladz-2polkowicepolt" +
- "avalle-d-aostavangerpomorzeszowitdkoryolasitepordenonepornporsan" +
- "gerporsangugeporsgrunnanpoznanprdpreservationpresidioprimeiwamat" +
- "sumaebashikshacknetrentinos-tirolprincipeprivneprochowiceproduct" +
- "ionsokanraprofermobilyprojectrentinostirolpromombetsupplypropert" +
- "yprotectionpruszkowithgoogleapisa-hockeynutrentinosud-tirolprzew" +
- "orskogptzpvtrentinosudtirolpzqldqponqslgbtrentinosued-tirolsrlsr" +
- "varoystoragestordalstorenburgstorfjordstpetersburgstudiostudyndn" +
- "s-blogdnsolarssonstuff-4-salestuttgartrentoshimasurgutsiracusait" +
- "amatsukuris-into-cartoonshiranukannamiharusurnadalsurreysusakis-" +
- "into-gameshiraois-a-soxfansusonosuzakanumazurysuzukanzakiwiensuz" +
- "ukis-leetrentino-alto-adigesvalbardudinkamakurazakinkobayashikao" +
- "irmincommbankomonosveiosvelvikosaigawasvizzeraswedenswidnicarbon" +
- "ia-iglesias-carboniaiglesiascarboniaswiebodzindianapolis-a-blogg" +
- "erswinoujscienceandhistoryswisshikis-lostfoldsxn--32vp30hagakhan" +
- "amigawatuis-not-certifiedunetflixiltulaquilarvikoseis-an-account" +
- "antshioyameldaltunesologneturystykarasjoksnesolundtuscanytushuma" +
- "nitiesolutionsokndaltuvalle-daostavernversicherungvestfoldvestne" +
- "somnarashinovestre-slidreamhostersoovestre-totennishiawakuravest" +
- "vagoyvevelstadvibo-valentiavibovalentiavideovillaskvolloabathsbc" +
- "ngvinnicargojomediavinnytsiavipsinaappharmacymruovatrentinoalto-" +
- "adigevirginiavirtualvirtuelvistaprinternationalfirearmsopotrenti" +
- "nosuedtirolviterboltrevisohuissier-justicevladikavkazanvladimirv" +
- "ladivostokaizukaratevlogvoldavolgogradvolkenkunderseaportroandin" +
- "osaurepbodyndns-at-workinggroupharmaciensimple-urlvolkswagentsor" +
- "-odalvologdanskoshunantokamachippubetsubetsugaruvolyngdalvoronez" +
- "hytomyrvossevangenvotevotingvotottoris-savedvrnwroclawloclawekos" +
- "tromahabororoskolelwtchoyodobashibuyachiyodawtferrarawuozuwwwrit" +
- "esthisblogspotrogstadwzmiuwajimaxn--3pxu8kosugexn--42c2d9axn--45" +
- "brj9christmasakimobetsuwanouchikuseihichisobetsuitaitogakushimot" +
- "oganewhampshirecreationissedalutskaufenisshinguernseyxn--45q11ch" +
- "romedicaltanissettaiwanairforceoxn--4gbriminingxn--4it168dxn--4i" +
- "t797kotohiradomainsureisenxn--4pvxsor-varangerxn--54b7fta0cchtra" +
- "eumtgeradeatnurembergrossetouchijiwadell-ogliastrakhanawaxn--55q" +
- "w42gxn--55qx5dxn--5js045dxn--5rtp49chungbukautokeinoxn--5rtq34ko" +
- "touraxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn--" +
- "7t0a264chungnamdalseidfjordxn--80adxhksorfoldxn--80ao21axn--80as" +
- "ehdbargainstituteledatabaseballooningjerdrumemorialimitedownload" +
- "rangedalimoliserniaustraliaisondre-landebudejjuedischesapeakebay" +
- "erndigitalillehammerfest-mon-blogueurovisionasushiobaragrinetban" +
- "kz-1kappleangaviikadenaamesjevuemielnoboribetsucks3-ap-northeast" +
- "-1xn--80aswgxn--80audnedalnxn--8ltr62kouhokutamakizunokunimilano" +
- "xn--8pvr4uxn--8y0a063axn--90a3academykolaivanovosibirskiervaapst" +
- "eiermarkhangelskinderoyerimo-i-ranadexchangeiseiroumuenchendofth" +
- "einternetcimdbarreauctionaturbruksgymnaturhistorischesakuraibiga" +
- "waustrheimatunduhrennesoyokoze164xn--90aishobaraxn--90azhagebost" +
- "adxn--9dbhblg6diethnologyxn--9dbq2axn--9et52uxn--9krt00axn--andy" +
- "-iraxn--aroport-byanagawaxn--asky-iraxn--aurskog-hland-jnbarrel-" +
- "of-knowledgeorgiauthordalandroidiscountysvardonnaharimamurogawag" +
- "roks-theaternidds3-ap-southeast-1xn--avery-yuasakatakazakis-slic" +
- "komaganexn--b-5gaxn--b4w605ferdxn--bck1b9a5dre4churchaseljejuego" +
- "shikiminokamoenaircraftmpamperedchefarmsteadxn--bdddj-mrabdxn--b" +
- "earalvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7" +
- "axn--bidr-5nachikatsuuraxn--bievt-0qaxn--bjarky-fyanaizuxn--bjdd" +
- "ar-ptambovdonskoshimizumakiyosumitakaginozawaonsenxn--blt-elabor" +
- "xn--bmlo-graingerxn--bod-2naroyxn--brnny-wuaccident-investigatio" +
- "njukudoyamaceratabuseat-band-campaniamallamadridvagsoygardenebak" +
- "keshibechambagricaaarborteaches-yogasawaracingxn--brnnysund-m8ac" +
- "cident-preventionlineat-urlxn--brum-voagatromsaitokorozawaxn--bt" +
- "sfjord-9zaxn--c1avgxn--c2br7gxn--c3s14misakis-foundationxn--cck2" +
- "b3barrell-of-knowledgets-itarumizusawautomotivelandiscoveryokami" +
- "kawanehonbetsuruokaluganskarmoyomitanobihirosakikamijimakunecn-n" +
- "orth-1xn--cg4bkis-uberleetrentino-altoadigexn--ciqpnxn--clchc0ea" +
- "0b2g2a9gcdn77-securecipesaro-urbino-pesarourbinopesaromalvikouno" +
- "sumypetshisognexn--comunicaes-v6a2oxn--correios-e-telecomunicaes" +
- "-ghc29axn--czr694bashkiriautoscanadagestangeologyonabarudmurtiam" +
- "usementargibestadevenes3-ap-southeast-2xn--czrs0tromsojavald-aos" +
- "tarostwodzislawiwatsukiyonowtvbarefootballangenoamishirasatobish" +
- "imaizurubtsovskjervoyageometre-experts-comptablesakuragawaustinn" +
- "aspers3-external-1xn--czru2dxn--czrw28basilicataniaveroykenviron" +
- "mentalconservationaturalhistorymuseumcentereportarnobrzegjemnes3" +
- "-external-2xn--d1acj3batochigiftsakyotanabeneventochiokinoshimal" +
- "opolskanlandrivefsncfagebizenakaniikawatanaguravocatanzarowebhop" +
- "agespeedmobilizerobirasnesoddenmarketplace-burggfamilyokosukariy" +
- "akumodumemerck-uralsk12xn--d1alferreroticanonoichikawamisatodayx" +
- "n--d1atrusteexn--d5qv7z876chuvashiaxn--davvenjrga-y4axn--djrs72d" +
- "6uyxn--djty4kouyamasoyxn--dnna-grajeworldxn--drbak-wuaxn--dyry-i" +
- "raxn--eckvdtc9dxn--efvn9sorreisahayakawakamiichikaiseiyokoshibah" +
- "ikariwanumataketomisatokyotangoxn--efvy88haibarakitahatakanezawa" +
- "xn--ehqz56nxn--elqq16hakatanotogawaxn--estv75gxn--eveni-0qa01gax" +
- "n--f6qx53axn--fct429kouzushimassa-carrara-massacarraramassabuske" +
- "rudineustarhubarclaycards3-us-west-1xn--fhbeiarnxn--finny-yuaxn-" +
- "-fiq228c5hsortlandxn--fiq64batsfjordrobaknoluoktainaibetsubameri" +
- "canartanddesignieznogatagajobojibmdunloppacificarriereviewskrako" +
- "weddingjerstadotsurugimetlifeinsurancehimejiinetatamotorsalangen" +
- "atuurwetenschappenaumburgjesdalindaskoyabenorddalindesnesalatata" +
- "rstanaustdalinkaruizawavoues3-fips-us-gov-west-1xn--fiqs8sorumin" +
- "anoxn--fiqz9southcarolinazawaxn--fjord-lraxn--fjq720axn--fl-ziax" +
- "n--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-grandrapidsouthwestf" +
- "alenxn--frna-woarais-very-badaddjamalborkdalxn--frya-hraxn--fzc2" +
- "c9e2circlegnicahcesuolocalhistoryazannefrankfurtoyokawaxn--fzys8" +
- "d69uvgmailxn--g2xx48circusculturedumbrellajollanbibaidarq-axn--g" +
- "ckr3f0fetsundxn--gecrj9citicateringebuildersvpalmspringsakerxn--" +
- "ggaviika-8ya47hakodatemasekmshimosuwalkis-a-linux-useranishiarit" +
- "abashijonawatextilevangerxn--gildeskl-g0axn--givuotna-8yandexhib" +
- "itionxn--gjvik-wuaxn--gls-elacaixaxn--gmq050is-very-evillagexn--" +
- "gmqw5axn--h-2failxn--h1aeghakonexn--h2brj9civilaviationiyodogawa" +
- "xn--hbmer-xqaxn--hcesuolo-7ya35bauhaustevollinzaiitatebayashiiba" +
- "hcavuotnagarakkestadupontariobninskarumaifareastcoastaldefencemb" +
- "roideryonagoyaxastronomyokohamamatsudaegubs3-eu-central-1xn--her" +
- "y-iraxn--hgebostad-g3axn--hmmrfeasta-s4acoachampionshiphopenair-" +
- "surveillancebetsukubabia-goracleaningatlantachikawakayamagadance" +
- "chirealtorlandxn--hnefoss-q1axn--hobl-iraxn--holtlen-hxaxn--hpmi" +
- "r-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b6b1a6a2exn" +
- "--imr513nxn--indery-fyaotsurgeryxn--io0a7is-very-goodyearthadsel" +
- "fipirangaxn--j1aefgulenxn--j1amhakubanxn--j6w193gxn--jlq61u9w7bb" +
- "cartierhcloudcontrolappalanakhodkanagawaxn--jlster-byaroslavlaan" +
- "derenxn--jrpeland-54axn--jvr189misasaguris-gonexn--k7yn95exn--ka" +
- "rmy-yuaxn--kbrq7oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--kl" +
- "t787dxn--kltp7dxn--kltx9axn--klty5xn--3bst00minnesotaketakatoris" +
- "-certifieducatorahimeshimageandsoundandvisionxn--koluokta-7ya57h" +
- "akuis-a-llamarylhursteinkjerusalembetsukuis-a-musicianxn--kprw13" +
- "dxn--kpry57dxn--kpu716figuerestaurantoyotaris-a-doctorayxn--kput" +
- "3is-very-nicexn--krager-gyasakaiminatoursowaxn--kranghke-b0axn--" +
- "krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jetztrentino-stiro" +
- "lxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyasugis-very-sweetrenti" +
- "no-s-tirollagriculturennebudapest-a-la-maisondriodejaneirocheste" +
- "rxn--kvnangen-k0axn--l-1fairwindspreadbettingxn--l1accentureklam" +
- "borghinikkoebenhavnxn--laheadju-7yasuokaratsuginamikatagamihobby" +
- "-sitevaksdalxn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagavi" +
- "ika-52bbvacationsnasabaerobaticketsalondonetskasaokamisatohnosho" +
- "oceanographicsaltdalipetskashibatakashimasfjordenaval-d-aosta-va" +
- "lleyonagunikolaeventsalvadordalibabajddarchaeologyeongnamegawakk" +
- "anaikawababydgoszczecinemailivornoceanographiquemergencyberlevag" +
- "angaviikarugaulardalorenskogjovikashiharaxn--lesund-huaxn--lgbba" +
- "t1ad8jevnakerxn--lgrd-poacivilisationrwifarsundxn--lhppi-xqaxn--" +
- "linds-pratoyakokamishihoronobeokaminoyamatsuris-with-thebandoomd" +
- "nsaliascolipicenord-odalxn--lns-qlavagiskexn--loabt-0qaxn--lrdal" +
- "-sraxn--lrenskog-54axn--lt-liacivilizationxn--lten-granexn--lury" +
- "-iraxn--mely-iraxn--merker-kuaxn--mgb2ddespydebergxn--mgb9awbfil" +
- "ateliaxn--mgba3a3ejtrvchoshibukawaxn--mgba3a4f16axn--mgba3a4fran" +
- "amizuholdingsmileksvikozagawaxn--mgba7c0bbn0axn--mgbaam7a8hakusa" +
- "ndoyxn--mgbab2bdxn--mgbai9a5eva00beppubolognagasukesennumalselve" +
- "ndrelloteneiiyamanobedzin-addrammenuernberglassassinationalherit" +
- "agematsubarakawachinaganoharaogashimadachicagoboatsalzburgliwice" +
- "mrxn--mgbai9azgqp6jewelryxn--mgbayh7gpaduaxn--mgbb9fbpobanazawax" +
- "n--mgbbh1a71exn--mgbc0a9azcgxn--mgberp4a5d4a87gxn--mgberp4a5d4ar" +
- "xn--mgbpl2fhvalerxn--mgbqly7c0a67fbcivilwarmanagementoyonakagyok" +
- "utomobentleyxn--mgbqly7cvafranziskanerimarinextdirectoryxn--mgbt" +
- "3dhdxn--mgbtf8flatangerxn--mgbtx2bernrtateshinanomachintaijindus" +
- "triesteambulancepilepsykkylvenetogliattipschoenbrunnavigationavu" +
- "otnakayamatsuzakinfinitiresamegawaxn--mgbx4cd0abogadocscbgxn--mi" +
- "x082filminamifuranoxn--mix891finalxn--mjndalen-64axn--mk0axindia" +
- "nmarketingxn--mk1bu44claimsaskatchewanggouvicenzaxn--mkru45isleo" +
- "fmandalxn--mlatvuopmi-s4axn--mli-tlavangenxn--mlselv-iuaxn--more" +
- "ke-juaxn--mori-qsakegawaxn--mosjen-eyatominamiawajikissmartertha" +
- "nyoutubeeldengeluidxn--mot-tlazioxn--mre-og-romsdal-qqbeskidyn-o" +
- "-saurlandesamnangerxn--msy-ula0haldenxn--mtta-vrjjat-k7aflakstad" +
- "aokagakibichuoxn--muost-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e" +
- "0axn--nit225kozakis-an-actorxn--nmesjevuemie-tcbalatinabearalvah" +
- "kikonaioirasebastopologyeonggiehtavuoatnagaivuotnagaokakyotambad" +
- "ajozorahkkeravjudygarlandxn--nnx388axn--nodessakuhokkaidontexist" +
- "eingeekpnxn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn" +
- "--nttery-byaeserveftphiladelphiaareadmyblogsitexn--nvuotna-hwaxn" +
- "--nyqy26axn--o1achattanooganorfolkebiblegallocuscountryestateofd" +
- "elawarezzoologyxn--o3cw4halsagamiharaxn--od0algxn--od0aq3betaina" +
- "boxfordealerdalottepsongdalenviknakanojohanamakinoharaxn--ogbpf8" +
- "flekkefjordxn--oppegrd-ixaxn--ostery-fyatsukareliancexn--osyro-w" +
- "uaxn--p1acfdxn--p1aiwchitosetoeiheijis-a-chefarmerseinewspaperxn" +
- "--pbt977clickazimierz-dolnyxn--pgbs0dhammarfeastafricamagicherno" +
- "vtsydneyxn--porsgu-sta26financexn--pssu33lxn--pssy2uxn--q9jyb4cl" +
- "inicoffeedbackazoxn--qcka1pmclintonoshoesassaris-a-cubicle-slave" +
- "llinowruzhgorodoyxn--qqqt11misconfusedxn--qxamurskjakdnepropetro" +
- "vskiptveterinairealtychyllestadultrysilkosakaerodromegallupinbar" +
- "celonagasakikuchikumagayagawalbrzycharternopilawalesundnpalacebi" +
- "northwesternmutualimanowarudaurskog-holandroverhalla-speziaetnag" +
- "ahamaroyekaterinburgdyniaeroportalaheadjudaicabbottarantomaritim" +
- "ekeeping12000xn--rady-iraxn--rdal-poaxn--rde-ulaxn--rdy-0nabarix" +
- "n--rennesy-v1axn--rhkkervju-01afineartschwarzgwangjuifminamiisel" +
- "ectoyotomiyazakis-a-financialadvisor-aurdalxn--rholt-mragoworse-" +
- "thandsoniizaxn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5na" +
- "rusawaxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byatsus" +
- "hiroxn--rny31hamurakamigoriginankokubunjis-a-nascarfanxn--rovu88" +
- "bhartiffanycartoonarteducationalchikugokasejnyoriikashiwaraxn--r" +
- "ros-granvindafjordxn--rskog-uuaxn--rst-0narutokonamegatakatsukix" +
- "n--rsta-francaiseharaxn--ryken-vuaxn--ryrvik-byawaraxn--s-1faith" +
- "eguardianxn--s9brj9clothingroundhandlingroznyxn--sandnessjen-ogb" +
- "izhevskppspiegelxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gr" +
- "atangenxn--skierv-utazasmatartcenterprisesakievenassisibenikihok" +
- "umakogenglandxn--skjervy-v1axn--skjk-soaxn--sknit-yqaxn--sknland" +
- "-fxaxn--slat-5narviikananporoxn--slt-elabourxn--smla-hraxn--smna" +
- "-gratis-a-bulls-fanxn--snase-nraxn--sndre-land-0cbremangerxn--sn" +
- "es-poaxn--snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1" +
- "axn--sr-varanger-ggbielawallonieruchomoscienceandindustrynavyatk" +
- "anazawaxn--srfold-byawatahamaxn--srreisa-q1axn--srum-grazxn--stf" +
- "old-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbiellaakesvuemielecce" +
- "verbankashiwazakiyokawaraxn--stre-toten-zcbieszczadygeyachimatai" +
- "peigersundurbanpachigasakicks-assedicasadelamonedaxn--t60b56axn-" +
- "-tckweatherchannelxn--tjme-hraxn--tn0agrigentomologyeongbukrasno" +
- "darxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1axn--trn" +
- "a-woaxn--troms-zuaxn--tysvr-vraxn--uc0atverranzanxn--uc0ay4axn--" +
- "uist22hangglidingxn--uisz3gxn--unjrga-rtaobaomoriguchiharamcoalx" +
- "n--unup4yxn--uuwu58axn--vads-jraxn--vard-jraxn--vegrshei-c0axn--" +
- "vermgensberater-ctbievattorneyagawakuyabukijoburglobalashovhachi" +
- "jorpelandurhamburglobodoes-itateyamaxn--vermgensberatung-pwbifuk" +
- "agawalterxn--vestvgy-ixa6oxn--vg-yiabruzzoologicalabamagasakishi" +
- "mabaragusartsaritsynxn--vgan-qoaxn--vgsy-qoa0jewishartrentino-su" +
- "d-tirolxn--vgu402cloudcontrolledekakudamatsuenoharaxn--vhquversa" +
- "illesomaxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5g" +
- "xn--vuq861bihorologyukuhashimoichinosekigaharaxn--w4r85el8fhu5dn" +
- "raxn--wcvs22dxn--wgbh1cloudfrontdoorxn--wgbl6axn--xhq521bikedati" +
- "nglogowegroweibolzanordreisa-geekasukabeerxn--xkc2al3hye2axn--xk" +
- "c2dl3a5ee0hangoutsystemscloudapparmaxn--y9a3aquariumishimatsunox" +
- "n--yer-znarvikrasnoyarskomitamamuraxn--yfro4i67oxn--ygarden-p1ax" +
- "n--ygbi2ammxn--3ds443gxn--ystre-slidre-ujbilbaogakidstvedestrand" +
- "vrdnsamsungloppenzaokinawashirosatobamagazinedre-eikerxn--zbx025" +
- "dxn--zf0ao64axn--zf0avxn--3e0b707exn--zfr164billustrationayorodd" +
- "axperiaxxxn--3oq18vl8pn36axz"
+const text = "bievatmallorcafederationavigationavuotnakhodkananporovnoddabifuk" +
+ "agawalmartateyamabihorologyurihonjournalistjordalshalsenayoromut" +
+ "ashinainvestmentsamsclubindalinkaszubyusuharabikedatingliwicebil" +
+ "baogakievenesurancebillustrationflatangerbiostrowiecasadelamoned" +
+ "abirdartcenterprisesakikonairbusantiquest-a-la-maisondre-landebu" +
+ "dejjudygarlandurhamburglobalashovhachinoheguris-a-candidatebirke" +
+ "nesoddtangenovarabirthplacebjarkoyusuisservicesamsunglobodoes-it" +
+ "veronaharimalvikatowicebjerkreimmobilienfshostrodawarabjugnhsanf" +
+ "ranciscotlandvrdnsangostrowwlkpmglogowegroweiboltatsunoblockbust" +
+ "ernopilawalterbloombergbauernurembergloppenzaogashimadachicagobo" +
+ "atsanjotattoolsztynsettlersannanikkoebenhavnikolaeverbankatsushi" +
+ "kabeerbluedatsunanjoetsuwanouchikujogaszkoladbrokesennumalselven" +
+ "drellinzais-a-catererbmoattachmentsannohelsinkitahiroshimarriott" +
+ "axihuanikonantanangerbmsanokatsuyamaseratis-a-celticsfaninohelpl" +
+ "financialipetskaufeninomiyakonojoshkar-olayangroupalermomasvuotn" +
+ "akatsugawabmweirbnpparibaselburgminakamichigangwonirasakis-a-che" +
+ "farsundwgmodenakatombetsumidatlanticaseihichisobetsuitairabolzan" +
+ "ore-og-uvdalivornobomloansantabarbarabondyndns-homednsantacruzsa" +
+ "ntafedexhibitionishiazais-a-conservativefsncfailomzansimagicaser" +
+ "taishinomakikuchikuseikarugapartmentsanukis-a-cpadoval-daostaval" +
+ "leyuudmurtiabonnishigotpantheonishiharabookingmxboxfinityuzawabo" +
+ "otsaotomeldalorenskogretakanabeatsapodhalewismillerboschaefflerd" +
+ "alotenkawabostikautokeinobostonakijinsekikogentingrimstadyndns-i" +
+ "p6botanicalgardenishiizunazukis-a-cubicle-slavellinowtvalleaosta" +
+ "vernishikatakazakis-a-democratgoryuzhno-sakhalinskazimierz-dolny" +
+ "botanicgardenishikatsuragivestbytomaritimekeepingripebotanybouti" +
+ "quebecngriwataraidyndns-mailottebozentsujiiebradescorporationish" +
+ "ikawazukaneyamaxunjargabrandywinevalleybrasiljan-mayenishimerabr" +
+ "esciabrindisibenikebristolgalsacebritishcolumbialowiezachpomorsk" +
+ "ienishinomiyashironobroadcastlebtimnetzgorzeleccolognewmexicolle" +
+ "ctionishinoomotegotsukisosakitagatakamoriokamikitayamatotakadabr" +
+ "oadwaybroke-itjeldsundyndns-office-on-the-webcambridgestonewspap" +
+ "erbrokerrypropertiesapporobronnoysundyndns-picsaratovalled-aosta" +
+ "vropolicebrothermesaverdefensejnybrumunddalottokigawabrunelblagd" +
+ "enesnaaseralingenkainanaejrietisalatinabenogatagajobojis-a-desig" +
+ "nerbrusselsardegnamsskoganeis-a-doctoraybruxellesardiniabryanskl" +
+ "eppalmspringsakerbryneustarhubalatinordre-landishakotankaruizawa" +
+ "smatartanddesignieznorddalavangenasushiobarabruzzoologicalvinkle" +
+ "in-addrammenuernbergdyniabogadocscbg12000buskerudinewhampshireci" +
+ "pesaro-urbino-pesarourbinopesaromamurogawarszawashingtondclkazob" +
+ "uzenishinoshimatsuzakis-a-financialadvisor-aurdalouvrepbodyndns-" +
+ "blogdnsarlovegaskimitsubatamicadaquesarpsborgroks-thisamitsukebu" +
+ "zzgradyndns-remotegildeskalmykiabwfashionishiokoppegardyndns-ser" +
+ "verbaniabzhitomirkutskodjeepilepsydneycloudcontrolledekakegawawi" +
+ "iheyaizuwakamatsubushikusakadogawacloudfrontdoorcntkmaxxn--1ck2e" +
+ "1balestrandabergamoarekembroideryonagoyasnesoddenmarketplace12co" +
+ "lonialwilliamsburgujolstercoloradoplateaudiocolumbusheycommbankh" +
+ "ersoncommunitysfjordcomobaracomparemarkerryhotelsayokoshibahikar" +
+ "iwanumatakinouecompute-1computerhistoryofscience-fictioncomsecur" +
+ "itysnesbschokoladencondoshichinohedmarketscholarshipschooluxuryc" +
+ "onferenceconstructionconsuladoharuhrconsultanthropologyconsultin" +
+ "gvolluzerncontactmpanasonicateringebugattipschmidtre-gauldalowic" +
+ "zest-le-patrondheimperiacontemporaryarteducationalchikugojomedic" +
+ "altanissettaiwanaircraftraeumtgeradealstahaugesundcontractorsken" +
+ "conventureshinodesashibetsuikimobetsuliguriacookingchannelverumi" +
+ "namidaitomangotembaixadacoolkuszippodlasiellakasamatsudoosandieg" +
+ "okaseljordcoopocznorthwesternmutualvivano-frankivskhmelnitskiyam" +
+ "asfjordencopenhagencyclopedicdn77-sslattumetlifeinsurancecorsica" +
+ "hcesuolocalhistoryazannakadomari-elasticbeanstalkhmelnytskyivall" +
+ "eeaosteigencorvettelevisioncosenzakopanerairforceocostumedio-cam" +
+ "pidano-mediocampidanomediocouncilcouponschulezajskhvanylveniceco" +
+ "urseschwarzgwangjuifminamiechizencq-acranbrookuwanalyticschweizj" +
+ "cbnlcreditcardcreditunioncremonashorokanaiecrewildlifestylecrick" +
+ "etrzyncrimeacrotonewportlligatewaycrowncrsciencecentersciencehis" +
+ "torycruisescientistor-elvdalcuisinellajollamericanexpressexyzlgu" +
+ "lenculturalcentertainmentoyokawacuneocupcakecxn--1ctwolominamata" +
+ "mayukis-a-hard-workercymruovatoyonakagyokutoshimacyouthdfcbankla" +
+ "budhabikinokawabarthachiojiyahikobeauxartsandcraftscjohnsonfilmi" +
+ "namifuranofinalfinancefineartscrappinguovdageaidnulsandvikcoroma" +
+ "ntovalle-daostavangerfinlandfinnoyfirebaseappspotenzamamicroligh" +
+ "tingushikamifuranotairesettsurfauskedsmokorsetagayasells-for-les" +
+ "scrapper-sitefirenzefirestonextdirectoryfirmdalegolfedjejuegoshi" +
+ "kiminokamoenairguardfishingonohejis-a-hunterfitjarqhachirogataka" +
+ "nezawafitnessettlementoyonofjalerflickragerotikamakurazakiraflig" +
+ "htsevastopoleflirumannoshiroomurafloguchikuzenfloraflorenceflori" +
+ "dafloristanohatakaharussiafloromskogxn--1lqs03nflowersevenassisi" +
+ "cilyflsmidthruhereggiocalabriaflynnhubalsanagochihayaakasakawaha" +
+ "rastronomyokohamamatsudaegubs3-eu-west-1fndfolldalfoodnetworkang" +
+ "erfor-better-thandafor-ourfor-somedizinhistorischesewilliamhillf" +
+ "or-theatreeforexrothadanotogawaforgotdnsfranziskanerimamateramoc" +
+ "hizukirkeneshangrilangevagrarboretumbriaforli-cesena-forlicesena" +
+ "forlikes-piedmontblancomeeresharis-a-knightoyookarasjoksnesharpa" +
+ "raglidingzparisor-fronforsaleikangerforsandasuolodingenfortmisso" +
+ "ulan-udell-ogliastrakhanawafortworthadselfipirangaforuminamiisel" +
+ "ectoyosatotalfosneshawaiijimarumorimachidafotoyotaris-a-landscap" +
+ "erugiafoxn--1lqs71dfreiburgfreightcmwinbalsfjordivtasvuodnakaiwa" +
+ "mizawaugustowadaejeonbukarlsoyokosukariyakumolde164freseniusdeco" +
+ "rativeartshellaspeziafribourgfriuli-v-giuliafriuli-ve-giuliafriu" +
+ "li-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriuli-vgiul" +
+ "iafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezia-giuli" +
+ "afriuliveneziagiuliafriulivgiuliafrlfroganshimokawafrognfrolandf" +
+ "rom-akrehamnfrom-alfrom-arfrom-azwindmillfrom-capebretonamiasaku" +
+ "chinotsuchiurakawassamukawataricohdavvesiidazaifudaigodaddynatho" +
+ "mebuiltoyotomiyazakis-a-lawyerfrom-collegersundfrom-ctoyotsukaid" +
+ "ovre-eikerfrom-dcheltenham-radio-operaunitelekommunikationishiwa" +
+ "kis-a-geekazunofrom-dellogliastraderfrom-flandershimokitayamafro" +
+ "m-gaulardalfrom-higashiagatsumagoirminamiizukamitsuefrom-iafrom-" +
+ "idfrom-ilfrom-incheonfrom-kshimonitayanagivingfrom-kyknetoyouraf" +
+ "rom-lanbibaidarfrom-mansionshimonosekikawafrom-mdfrom-meetoystre" +
+ "-slidrettozawafrom-microsoftbankmpspbaltimore-og-romsdalillyonag" +
+ "unikibmdivttasvuotnakamagayachts3-us-west-1from-mnfrom-modalenfr" +
+ "om-mshimosuwalkis-a-liberalfrom-mtnfrom-nchelyabinskypescaravant" +
+ "aafrom-ndfrom-nexusgardenfrom-nhktozsdefrom-njcparliamentranbyfr" +
+ "om-nminamimakis-a-libertarianfrom-nvaolbia-tempio-olbiatempioolb" +
+ "ialystokkembuchikumagayagawalbrzycharterfrom-nyfrom-ohkurafrom-o" +
+ "ketogurafrom-orfrom-paderbornfrom-pratohmanxn--1qqw23afrom-ris-a" +
+ "-linux-useranishiaritabashikaoizumizakitaurayasudafrom-schoenbru" +
+ "nnfrom-sdnipropetrovskmshimotsukefrom-tnfrom-txn--2m4a15efrom-ut" +
+ "azuerichardlikescandyndns-at-homedepotaruis-a-llamarylandfrom-va" +
+ "dsochildrensgardenfrom-vtrani-andria-barletta-trani-andriafrom-w" +
+ "afrom-wielunnerfrom-wvareserveftparmafrom-wyfrosinonefrostalowa-" +
+ "wolawafroyahabadajozoraumaintenancefstcgrouparocherkasyzrankoshi" +
+ "gayaltaikis-a-musicianfujiiderafujikawaguchikonefujiminohtawaram" +
+ "otoineppugliafujinomiyadafujiokayamaoris-a-nascarfanfujisatoshon" +
+ "airlinebraskaunbieidsvollfujisawafujishiroishidakabiratoridelmen" +
+ "horstalbanshimotsumafujitsurugashimarinefujixeroxn--30rr7yfujiyo" +
+ "shidafukayabeardubaiduckdnsdojoburgfukuchiyamadafukudominicherni" +
+ "governmentjmaxxxjaworznofukuis-a-nurseoullensvanguardfukumitsubi" +
+ "shigakirovogradoyfukuokazakiryuohaebaruminamiminowafukuroishikar" +
+ "ikaturindalfukusakisarazure-mobileirfjordfukuyamagatakahashimama" +
+ "kishiwadafunabashiriuchinadafunagatakahatakaishimoichinosekigaha" +
+ "rafunahashikamiamakusatsumasendaisennangoodyearthagakhanamigawaf" +
+ "undaciofuoiskujukuriyamarburgfuosskoczowindowshinichinanfurnitur" +
+ "eggioemiliaromagnakasatsunairportland-4-salernogiessengerdalaska" +
+ "nittedallasalleaseeklogesquarezzoologyeongnamegawakeisenbahnfuru" +
+ "biraquarelleasingleshinjournalismailillehammerfest-mon-blogueuro" +
+ "visionfurudonostiafurukawairtelecityeatshinjukumanofusodegaurafu" +
+ "ssaikisofukushimarcheaparshinkamigotoyohashimotomobeneventochiok" +
+ "inoshimalopolskanlandfutabayamaguchinomigawafutboldlygoingnowher" +
+ "e-for-moregontrailroadfuttsurugiminamioguniversityfvgfyis-a-pain" +
+ "teractivegarsheis-a-patsfanfylkesbiblackfridayfyresdalhanyuzenha" +
+ "pmirhappoulvikolobrzegyptianpachigasakidstvedestrandhareidsberge" +
+ "nharstadharvestcelebrationhasamarahasaminami-alpssells-for-unzen" +
+ "hasudahasvikomaganehatogayahoooshikamaishimofusartshintokushimah" +
+ "atoyamazakitahatakaokamikoaniikappulawyhatsukaichiharahattfjelld" +
+ "alhayashimamotobungotakadavvenjargamvikomakiyosatokamachippubets" +
+ "ubetsugaruhazuminobusells-itranoyhboehringerikehembygdsforbundhe" +
+ "mneshintomikasaharahemsedalherokussldheroyhgtvaroyhigashichichib" +
+ "unkyonanaoshimageandsoundandvisionhigashihiroshimanehigashiizumo" +
+ "zakitakamiizumisanofiatransportrapaniimimatakatoris-a-playerhiga" +
+ "shikagawahigashikagurasoedahigashikawakitaaikitakatakarazukamimi" +
+ "nershinyoshitomiokanmakiwakunigamihamadahigashikurumeguroroskole" +
+ "itungsenhigashimatsushimarshallstatebankomatsushimashikehigashim" +
+ "atsuyamakitaakitadaitoigawahigashimurayamalatvuopmidoris-a-repub" +
+ "licancerresearchaeologicaliforniahigashinarusellsyourhomegoodshi" +
+ "ojirishirifujiedahigashinehigashiomihachimanchesterhigashiosakas" +
+ "ayamamotorcycleshioyameloyalistockholmestrandhigashishirakawamat" +
+ "akasagooglecodespotravelchannelhigashisumiyoshikawaminamiaikitak" +
+ "yushuaiahigashitsunowruzhgorodoyhigashiurausukitamidsundhigashiy" +
+ "amatokoriyamanakakogawahigashiyodogawahigashiyoshinogaris-a-rock" +
+ "starachowicehiraizumisatohnoshoohirakatashinagawahiranairtraffic" +
+ "hernivtsiciliahirarahiratsukagawahirayaitakasakitamotosumitakagi" +
+ "nankokubunjis-a-socialistmeindianapolis-a-bloggerhisayamanashiib" +
+ "aghdadultravelersinsurancehistorichouseshirahamatonbetsurgeryhit" +
+ "achiomiyaginowaniihamatamakawajimaritimodellinghitachiotagoparts" +
+ "hirakoenighitoyoshimifunehitradinghjartdalhjelmelandholeckobierz" +
+ "yceholidayhomeipartyhomelinuxn--32vp30hagebostadhomesensembokuki" +
+ "tanakagusukumoduminamisanrikubetsupplyhomeunixn--3bst00minamitan" +
+ "ehondahonefosshiranukannamiharuhoneywellhongorgehonjyoitakashima" +
+ "rugame-hostinghornindalhorseminehortendofinternetrdhoteleshiraoi" +
+ "s-a-soxfanhotmailhoyangerhoylandetroitskomforbambleborkarumaifar" +
+ "msteadnpalanaklodzkodairaukraanghkebinagisoccertificationativeam" +
+ "ericanantiques3-external-1humanitieshiraokanoyakagehurdalhurumaj" +
+ "is-a-studentalhyllestadhyogoris-a-teacherkassymantechnologyhyuga" +
+ "warahyundaiwafunejfkommunalforbundjgorajlchiryukyuragifuefukihab" +
+ "orokunohealthcareersarufutsunomiyawakasaikaitakoelnissedalucania" +
+ "jlljmpasadenamsosnowiechitachinakagawatchandclockchristiansburgr" +
+ "ondarjnjelenia-gorajoyokaichibahcavuotnagaravennagareyamaizurubt" +
+ "sovskjervoyageometre-experts-comptableshitaramajpmorganichitoset" +
+ "ogitsuldaluccapetownisshinguernseyjpnchloejprshizukuishimogosenj" +
+ "uniperjurkristiansandcatshoujis-bykristiansundkrodsheradkrokstad" +
+ "elvaldaostarostwodzislawinnershowakryminamiuonumasudakumatorinok" +
+ "umejimassa-carrara-massacarraramassabusinessebykleclerchocolatel" +
+ "emarkddielddanuorrightathomeftpaccessasayamakumenanyokkaichirurg" +
+ "iens-dentisteshowtimemerckomorotsukamisunagawakunisakis-certifie" +
+ "ducatorahimeshimakanegasakinkobayashikshacknetnedalkunitachiarai" +
+ "lwaykunitomigusukumamotoyamasoykunneppupassagenshriramsterdambul" +
+ "ancekunstsammlungkunstunddesignkuokgroupassenger-associationkure" +
+ "pair-traffic-controlleykurgankurobelgorodeokurogimilitarykuroiso" +
+ "ftwarendalenugkuromatsunais-foundationkurotakikawasakis-gonekurs" +
+ "komvuxn--3ds443gkushirogawakustanais-into-animeiwamarylhurstjohn" +
+ "kusupersportrentino-sud-tirolkutchanelkutnokuzbassnillfjordkuzum" +
+ "akis-into-carshisognekvafjordkvalsundkvamlidlugolekagaminord-aur" +
+ "dalvdalipayufuchukotkafjordkvanangenkvinesdalkvinnheradkviteseid" +
+ "skogkvitsoykwpspjelkavikongsbergkyotobetsuppliesienarashinokyowa" +
+ "riasahikawamissilelmisugitokonamegatakayamatsumotofukemitakehara" +
+ "mitourismolanciamitoyoakemiuramiyazurewebsiteshikagamiishibukawa" +
+ "miyotamanomjondalenmlbarcelonagasukemergencyberlevagangaviikanon" +
+ "jiinetarumizusawaurskog-holandroverhalla-speziaeroportalabamagas" +
+ "akishimabaragusaarlandds3-ap-southeast-1kappleangaviikadenaamesj" +
+ "evuemielnoboribetsucks3-ap-northeast-1monmouthaibarakitagawamons" +
+ "termonticellolmontrealestatefarmequipmentrentino-sudtirolmonza-b" +
+ "rianzaporizhzhekinannestadmonza-e-della-brianzaporizhzhiamonzabr" +
+ "ianzapposlombardiamondsimbirskongsvingermonzaebrianzaramonzaedel" +
+ "labrianzamoparachutingmordoviajessheiminamiyamashirokawanabellev" +
+ "uelosangelesjaguarchitecturebungoonomichinomiyakemerovodkagoshim" +
+ "agnitkakamigaharaholtalenglandmoriyamatsunomoriyoshiokamogawamor" +
+ "moneymoroyamatsusakahoginozawaonsenmortgagemoscowiostrolekaniepc" +
+ "emoseushistorymosjoenmoskenesimple-urlmossirdalmosvikoninjamison" +
+ "moviemovistargardmtpccwitdkonskowolancashireisenmtranakayamatsus" +
+ "higemuenstermugithubusercontentrentino-sued-tirolmuikanagawamuko" +
+ "chikushinonsenergymulhouservebbslingmultichoicemunakatanemuncies" +
+ "zynmuosattemupaviancapitalonewhollandmurmanskonsulatrobelaudible" +
+ "besbyglandmurotorcraftrentino-suedtirolmusashimurayamatsuuramusa" +
+ "shinoharamuseetrentinoa-adigemuseumverenigingmutsuzawamutuelleva" +
+ "ngermyphotoshibahccavuotnagasakijobservercellierneueslupskonyvel" +
+ "oftrentino-s-tirollagriculturennebudapest-a-la-masionmytis-a-boo" +
+ "kkeeperminanophiladelphiaareadmyblogsitephilatelyphilipsyphoenix" +
+ "n--3e0b707ephotographysiopiagetmyipfizerpictetrentinoaadigepictu" +
+ "resnzpiemontepilotsokanumazurypinkopervikommunepioneerpippupiszp" +
+ "ittsburghofermobilypiwatepizzapkoryolasiteplanetariumincomcastre" +
+ "sistanceplantationplantsokndalplatforminnesotaketakatsukis-into-" +
+ "cartoonshisuifuettertdasnetzplaystationplazaplchofunatorientexpr" +
+ "essasebofageplombardyndns-at-workinggroupharmaciensmolenskooris-" +
+ "an-anarchistoricalsocietyplumbingotvbarclaycards3-us-west-2plust" +
+ "erpmnpodzonepohlpokerpokrovskosaigawapolitiendapolkowicepoltaval" +
+ "le-aostathellexuslivinghistorypomorzeszowithgoogleapisa-hockeynu" +
+ "trentinoalto-adigepordenonepornporsangerporsangugeporsgrunnanpoz" +
+ "nanpraxis-a-bruinsfansolarssonprdpreservationpresidioprimelbourn" +
+ "eprincipeprivneprochowiceproductionsologneproferraraprogressiven" +
+ "neslaskerrylogisticsolundbeckosakaerodromegallupinbananarepublic" +
+ "arrierprojectrentinoaltoadigepromombetsupportrentinos-tirolprope" +
+ "rtyprotectionprudentialpruszkowithyoutubentleyprzeworskogptzpvtr" +
+ "entinostirolpzqldqponqslgbtrentinosud-tirolqvchonanbuildersvpamp" +
+ "eredchefastlystorfjordstpetersburgstudiostudyndns-freemasonryoka" +
+ "mikawanehonbetsurutaharastuff-4-salestuttgartrentinosuedtirolsur" +
+ "nadalsurreysusakis-slickomitamamurasusonosuzakanzakiwiensuzukara" +
+ "sjohkamiokaminokawanishiaizubangesuzukis-uberleetrentino-aadiges" +
+ "valbardudinkakudamatsuesveiosvelvikosherbrookegawasvizzerasweden" +
+ "swidnicarbonia-iglesias-carboniaiglesiascarboniaswiebodzindianma" +
+ "rketingswiftcoverisignswinoujscienceandhistoryswisshikis-very-ba" +
+ "daddjamalborkdalsxn--3oq18vl8pn36atunesooturystykarasuyamazoetus" +
+ "canytushuissier-justicetuvalle-d-aostatoilvestnesor-odalvestre-s" +
+ "lidreamhostersor-varangervestre-totennishiawakuravestvagoyvevels" +
+ "tadvibo-valentiavibovalentiavideovillaskoyabearalvahkihokumakoge" +
+ "niwaizumiotsukumiyamazonawsabaerobaticketsaritsynvinnicargodoesn" +
+ "texistanbullensakervinnytsiavipsinaappharmacysnoasaitamatsukuris" +
+ "-lostre-toteneis-an-actresshishikuis-an-accountantshiratakahagis" +
+ "-a-techietis-a-therapistoiavirginiavirtualvirtuelvisakataketomis" +
+ "atokyotangovtrevisohughesolutionsomavistaprintuitroandinosaurepo" +
+ "rtrentottoris-very-evillageviterboknowsitallvivoldavladikavkazan" +
+ "vladimirvladivostokaizukaratevlogvolgogradvolkenkunderseaportrog" +
+ "stadvolkswagentsorfoldvologdanskoshunantokashikiyosumypetshizuok" +
+ "anravolyngdalvoronezhytomyrvossevangenvotevotingvotoursorreisaha" +
+ "yakawakamiichikaiseis-savedvrnworse-thangglidingwowiwatsukiyonow" +
+ "ritesthisblogspotromsakakinokiawroclawloclawekostromahachijorpel" +
+ "andwtchoseiroumuencheniyodogawawtferrarittogoldpointelligencewuo" +
+ "zuwwworldwzmiuwajimaxn--45q11choyodobashichikashukujitawaraxn--4" +
+ "gbriminingxn--4gq48lf9jeonnamerikawauexn--4it168dxn--4it797kotoh" +
+ "iradomainsureitrentino-stirolxn--4pvxsortlandxn--54b7fta0cchrist" +
+ "masakikugawatchesaskatchewanggouvicenzaxn--55qw42gxn--55qx5dxn--" +
+ "5js045dxn--5rtp49chromediaxn--5rtq34kotouraxn--5su34j936bgsgxn--" +
+ "5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn--7t0a264ch" +
+ "ryslerxn--80adxhksoruminternationalfirearmsigdalxn--80ao21axn--8" +
+ "0asehdbarclaysakuraiitatebayashijonawatextileksvikasaokamisatoho" +
+ "bby-sitexasdaburyatiaarpaleoceanographicsakyotanabellunordreisa-" +
+ "geekashibatakasugaiiyamanobedzin-the-bandaioirasebastopologyeong" +
+ "giehtavuoatnagaivuotnagaokakyotambabydgoszczecinemailimanowaruda" +
+ "ustevollaziobiraetnagahamaroyekaterinburggfarmerseinewyorkshireg" +
+ "gio-emilia-romagnakanotoddenaspers3-ap-southeast-2xn--80aswgxn--" +
+ "80audnedalnxn--8ltr62kouhokutamakizunokunimilanoxn--8pvr4uxn--8y" +
+ "0a063axn--90a3academykolaivanovosibirskiervaapsteiermarkhangelsk" +
+ "inderoyericssonjukudoyamaceratabuseat-band-campaniamallamadridva" +
+ "gsoygardendoftheinternetcimdbarefootballangenoamishirasatobishim" +
+ "akeupowiathletajimabariakepnordkappgjovikashiharaustinnaturalhis" +
+ "torymuseumcenterhcloudcontrolappalacebinortonsbergjerdrumckinsey" +
+ "okotebizenakaniikawatanaguragrinetbankz-1xn--90aishobaraomoriguc" +
+ "hiharahkkeravjuedischesapeakebayerndxn--90azhakatanotteroyxn--9d" +
+ "bhblg6diethnologyxn--9dbq2axn--9et52uxn--9krt00axn--andy-iraxn--" +
+ "aroport-byanagawaxn--asky-iraxn--aurskog-hland-jnbargainstitutel" +
+ "efonicagliaridagawalesundrangedalimitedrivelandrobaknoluoktainai" +
+ "kawachinaganoharamcoalaheadjudaicabbottatamotorsalangenaturbruks" +
+ "gymnaturhistorischesalondonetskashiwaraustraliaisondriodejaneiro" +
+ "chesterxn--avery-yuasakegawaxn--b-5gaxn--b4w605ferdxn--bck1b9a5d" +
+ "re4chtrainingrongausdalucernexn--bdddj-mrabdxn--bearalvhki-y4axn" +
+ "--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr-5nach" +
+ "ikatsuuraxn--bievt-0qa2xn--bjarky-fyanaizuxn--bjddar-ptamboversa" +
+ "illesopotrentinosudtirolxn--blt-elaborxn--bmlo-graingerxn--bod-2" +
+ "naroyxn--brnny-wuaccident-investigationlineat-urlxn--brnnysund-m" +
+ "8accident-preventionxn--brum-voagatromsojavald-aostarnbergxn--bt" +
+ "sfjord-9zaxn--c1avgxn--c2br7gxn--c3s14misakis-into-gamessinashik" +
+ "itchenxn--cck2b3barreauctionatuurwetenschappenaumburgladeloittem" +
+ "asekashiwazakiyokawaraustrheimatunduhrennesoyokozehimejibigawagr" +
+ "oks-theaternidgcamerakershus-east-1xn--cg4bkis-very-goodhandsonx" +
+ "n--ciqpnxn--clchc0ea0b2g2a9gcdn77-securecreationxn--comunicaes-v" +
+ "6a2oxn--correios-e-telecomunicaes-ghc29axn--czr694barrel-of-know" +
+ "ledgeorgeorgiauthordalandroidiscountysvardolls3-external-2xn--cz" +
+ "rs0trusteexn--czru2dxn--czrw28barrell-of-knowledgemersongdalenvi" +
+ "knakanojohanamakinoharautomotivecodyn-o-saurlandes3-fips-us-gov-" +
+ "west-1xn--d1acj3bashkiriautoscanadagestangeologyomitanobninskarm" +
+ "oyonabaruconnectarnobrzegjerstadotsuruokamchatkameokameyamashina" +
+ "tsukigatakamatsukawakunedre-eikereviewskrakowebhopagespeedmobili" +
+ "zerobihirosakikamijimatta-varjjatarantomsk-uralsk12xn--d1alfarom" +
+ "eoxn--d1atrverranzanxn--d5qv7z876chungbukfhskhabarovskhakassiaxn" +
+ "--davvenjrga-y4axn--djrs72d6uyxn--djty4kounosunndalxn--dnna-graj" +
+ "ewolterskluwerxn--drbak-wuaxn--dyry-iraxn--eckvdtc9dxn--efvn9sou" +
+ "thcarolinazawaxn--efvy88hakodatevaksdalxn--ehqz56nxn--elqq16hako" +
+ "nexn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429kouyamashikis" +
+ "-an-engineeringxn--fhbeiarnxn--finny-yuaxn--fiq228c5hsouthwestfa" +
+ "lenxn--fiq64basilicataniaveroykenvironmentalconservationaturalsc" +
+ "iencesnaturelles3-sa-east-1xn--fiqs8sowaxn--fiqz9spreadbettingxn" +
+ "--fjord-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj" +
+ "9c3dxn--frde-grandrapidspydebergxn--frna-woaraisaijosoyrovigorli" +
+ "cexn--frya-hraxn--fzc2c9e2chungnamdalseidfjordyndns-wikindlegnic" +
+ "ampobassociatesassaris-a-gurulminamibosogndalukowhalingrossetouc" +
+ "hijiwadeltajimibuildingroundhandlingroznyxn--fzys8d69uvgmailxn--" +
+ "g2xx48churchaseljeffersonrwhoswhokksundyndns-workshoppdaluroyxn-" +
+ "-gckr3f0ferreroticanonoichikawamisatodayxn--gecrj9chuvashiaxn--g" +
+ "gaviika-8ya47hakubankokonoexn--gildeskl-g0axn--givuotna-8yandext" +
+ "raspace-to-rentalstomakomaibaraxn--gjvik-wuaxn--gk3at1exn--gls-e" +
+ "lacaixaxn--gmq050is-very-nicexn--gmqw5axn--h-2fairwindsrlxn--h1a" +
+ "eghakuis-a-personaltrainerxn--h2brj9circlegallocuscountryestateo" +
+ "fdelawaredumbrellahppiacenzagannefrankfurtjomemorialutskharkival" +
+ "ledaostakkofueluxembourgrpanamatteledatabaseballooningruexn--hbm" +
+ "er-xqaxn--hcesuolo-7ya35basketballfinanzgoravocatanzaroweddingje" +
+ "sdalillesandefjordiscoveryggeelvinckarpaczeladz-2xn--hery-iraxn-" +
+ "-hgebostad-g3axn--hmmrfeasta-s4acoachampionshiphopenair-surveill" +
+ "ancebetsukubabia-goracleaningatlantachikawakayamagadancechirealt" +
+ "orlandxn--hnefoss-q1axn--hobl-iraxn--holtlen-hxaxn--hpmir-xqaxn-" +
+ "-hxt814exn--hyanger-q1axn--hylandet-54axn--i1b6b1a6a2exn--imr513" +
+ "nxn--indery-fyaotsurgutsiracusaitokuyamaxn--io0a7is-very-sweetre" +
+ "ntino-alto-adigexn--j1aefetsundxn--j1amhakusandnessjoenxn--j6w19" +
+ "3gxn--jlq61u9w7batochigiftsaltdalimoliserniavoues3-us-gov-west-1" +
+ "xn--jlster-byaroslavlaanderenxn--jrpeland-54axn--jvr189misasagur" +
+ "is-leetrentino-a-adigexn--k7yn95exn--karmy-yuaxn--kbrq7oxn--kcrx" +
+ "77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn--kltx9a" +
+ "xn--klty5xn--3pxu8kosugexn--koluokta-7ya57haldenxn--kprw13dxn--k" +
+ "pry57dxn--kpu716fgunmarnardalxn--kput3is-with-thebandoomdnsalias" +
+ "colipicenord-odalxn--krager-gyasakaiminatoyakokamishihoronobeoka" +
+ "minoyamatsurisleofmandalxn--kranghke-b0axn--krdsherad-m8axn--kre" +
+ "hamn-dxaxn--krjohka-hwab49jetztrentino-altoadigexn--ksnes-uuaxn-" +
+ "-kvfjord-nxaxn--kvitsy-fyasugissmarterthanyouxn--kvnangen-k0axn-" +
+ "-l-1faitheguardianquanconagawakuyabukicks-assedicircuscultureggi" +
+ "o-calabriaxn--l1accentureklamborghiniizaxn--laheadju-7yasuokarat" +
+ "suginamikatagamihoboleslawiecitadeliverybnikahokutogliattiresatx" +
+ "n--0trq7p7nnxn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagavi" +
+ "ika-52batsfjordunloppacificartierxn--lesund-huaxn--lgbbat1ad8jev" +
+ "nakerxn--lgrd-poaciticasinorfolkebiblefrakkestadyndns-weberlinco" +
+ "lnishitosashimizunaminamiashigaraxn--lhppi-xqaxn--linds-prameric" +
+ "anartrysilkoshimizumakiyosemitexn--lns-qlanxessrtrentinosued-tir" +
+ "olxn--loabt-0qaxn--lrdal-sraxn--lrenskog-54axn--lt-liacivilaviat" +
+ "ionxn--lten-granexn--lury-iraxn--mely-iraxn--merker-kuaxn--mgb2d" +
+ "desrvdonskoseis-an-artisteinkjerusalembetsukuis-an-actorxn--mgb9" +
+ "awbfidelityumenxn--mgba3a3ejtulansomnaritakurashikis-not-certifi" +
+ "edunetflixilxn--mgba3a4f16axn--mgba3a4franamizuholdingsmileirvik" +
+ "ouzushimashikokuchuoxn--mgba7c0bbn0axn--mgbaakc7dvfidonnakamurat" +
+ "ajirikuzentakatakahamaniwakuratenrissagaeroclubmedecincinnationw" +
+ "idealerimo-i-ranadexchangeiseiyoichiropracticbcn-north-1xn--mgba" +
+ "am7a8halsaintlouis-a-anarchistoirehabmerxn--mgbab2bdxn--mgbai9a5" +
+ "eva00bauhausposts-and-telecommunicationsnasadodgemrxn--mgbai9azg" +
+ "qp6jewelryxn--mgbayh7gpaduaxn--mgbb9fbpobanazawaxn--mgbbh1a71exn" +
+ "--mgbc0a9azcgxn--mgbca7dzdownloadxn--mgberp4a5d4a87gxn--mgberp4a" +
+ "5d4arxn--mgbpl2fhvalerxn--mgbqly7c0a67fbcivilisationxn--mgbqly7c" +
+ "vafredrikstadtvstoragexn--mgbt3dhdxn--mgbtf8flekkefjordxn--mgbtx" +
+ "2bbcartoonartdecoffeedbackasukabeeldengeluidunsagamiharaxamuseme" +
+ "ntargets-itargibestadigitalavagiske-burgjemnes3-eu-central-1xn--" +
+ "mgbx4cd0abbvieeexn--mix082fieldxn--mix891figuerestaurantoyonezaw" +
+ "axn--mjndalen-64axn--mk0axindustriesteamfamberkeleyxn--mk1bu44ci" +
+ "vilizationxn--mkru45iwchernovtsykkylvenetogakushimotoganewjersey" +
+ "xn--mlatvuopmi-s4axn--mli-tlapyatigorskozagawaxn--mlselv-iuaxn--" +
+ "moreke-juaxn--mori-qsakuhokkaidontexisteingeekozakis-an-entertai" +
+ "nerxn--mosjen-eyatominamiawajikixn--mot-tlaquilancasterxn--mre-o" +
+ "g-romsdal-qqbbtatarstanaustdalindasiaxn--msy-ula0hammarfeastafri" +
+ "camagichernihivgucciprianiigataitoeiheijis-a-greenissandoyxn--mt" +
+ "ta-vrjjat-k7afamilycompanycivilwarmanagementjxn--11b4c3dyroyrvik" +
+ "inguideventsaudaxn--muost-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe" +
+ "9e0axn--nit225kpnxn--nmesjevuemie-tcbajddarchaeologyxn--nnx388ax" +
+ "n--nodessakuragawaxn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--" +
+ "ntsq17gxn--nttery-byaeservegame-serverdalxn--nvuotna-hwaxn--nyqy" +
+ "26axn--o1achattanooganorilskydivingxn--o3cw4hamurakamigoriginshi" +
+ "nshinotsurgeonshalloffamelhustkamitondabayashiogamagoriziaxn--od" +
+ "0algxn--od0aq3bbvacationswatch-and-clockerxn--ogbpf8flesbergxn--" +
+ "oppegrd-ixaxn--ostery-fyatsukareliancexn--osyro-wuaxn--p1acfdxn-" +
+ "-p1aixn--pbt977claimsauheradxn--pgbs0dhlxn--porsgu-sta26filateli" +
+ "axn--pssu33lxn--pssy2uxn--q9jyb4clickharkovallee-aosteroyxn--qck" +
+ "a1pmcdonaldstordalxn--qqqt11misconfusedxn--qxamurskjakdnepropetr" +
+ "ovskiptveterinairealtychyattorneyagawakkanaibetsubamericanfamily" +
+ "ngenebakkeshibechambagricaaarborteaches-yogasawaracingxn--rady-i" +
+ "raxn--rdal-poaxn--rde-ularvikppspiegelxn--rdy-0nabarixn--rennesy" +
+ "-v1axn--rhkkervju-01aflakstadaokagakibichuoxn--rholt-mragowoodsi" +
+ "dexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5narusawaxn--" +
+ "risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byatsushiroxn--rn" +
+ "y31hangoutsystemscloudappartis-a-photographerokuappartnershinshi" +
+ "roxn--rovu88beppubolognagatorockartuzyoriikasumigaurawa-mazowsze" +
+ "xposedogawarabikomaezakirunosegawaxn--rros-granvindafjordxn--rsk" +
+ "og-uuaxn--rst-0narutokorozawaxn--rsta-francaiseharaxn--ryken-vua" +
+ "xn--ryrvik-byawaraxn--s-1fareastcoastaldefencexn--s9brj9clinicol" +
+ "dwarmiamiastaplesavannahgaxn--sandnessjen-ogbizhevskrasnodarxn--" +
+ "sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratangenxn--skierv-ut" +
+ "azaskvolloabathsbcliniquenoharaxn--skjervy-v1axn--skjk-soaxn--sk" +
+ "nit-yqaxn--sknland-fxaxn--slat-5narviikanazawaxn--slt-elabourxn-" +
+ "-smla-hraxn--smna-gratis-a-bulls-fanxn--snase-nraxn--sndre-land-" +
+ "0cbremangerxn--snes-poaxn--snsa-roaxn--sr-aurdal-l8axn--sr-fron-" +
+ "q1axn--sr-odal-q1axn--sr-varanger-ggbernrtateshinanomachintaijin" +
+ "finitinfoggiaxn--srfold-byawatahamaxn--srreisa-q1axn--srum-grazx" +
+ "n--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbeskidynaliasco" +
+ "li-picenord-frontierxn--stre-toten-zcbstorenburgxn--t60b56axn--t" +
+ "ckweatherchannelxn--tjme-hraxn--tn0agrigentomologyeongbukrasnoya" +
+ "rskomonoxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgstad-r1axn" +
+ "--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atversicherungxn--uc0" +
+ "ay4axn--uist22hannanmokuizumodernxn--uisz3gxn--unjrga-rtaobaokin" +
+ "awashirosatobamagazinemurorangemologicallyxn--unup4yxn--uuwu58ax" +
+ "n--vads-jraxn--vard-jraxn--vegrshei-c0axn--vermgensberater-ctbes" +
+ "tbuyshousesalvadordalibabaikaliszczytnordlandupontarioceanograph" +
+ "iquepostfoldnavyatkaluganskasuyakutiaxn--vermgensberatung-pwbeta" +
+ "inaboxfordeatnuorogerschlesischesalzburglassassinationalheritage" +
+ "matsubarakawagoepsonyoursidegreevje-og-hornnesamegawaxn--vestvgy" +
+ "-ixa6oxn--vg-yiabcgxn--vgan-qoaxn--vgsy-qoa0jewishartgalleryxn--" +
+ "vgu402clintonoshoesaves-the-whalessandria-trani-barletta-andriat" +
+ "ranibarlettaandriaxn--vhquvestfoldxn--vler-qoaxn--vre-eiker-k8ax" +
+ "n--vrggt-xqadxn--vry-yla5gxn--vuq861bhartiffanynysafetydalindesn" +
+ "esamnangerxn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wgbh1clo" +
+ "thinguitarsavonaplesaxoxn--wgbl6axn--xhq521bielawallonieruchomos" +
+ "cienceandindustrynaval-d-aosta-valleyukuhashimojinuyamanouchikuh" +
+ "okuryugasakitashiobaraxn--xkc2al3hye2axn--xkc2dl3a5ee0hannovargg" +
+ "atraniandriabarlettatraniandriaxn--y9a3aquariumishimatsumaebashi" +
+ "modatexn--yer-znarvikredstonexn--yfro4i67oxn--ygarden-p1axn--ygb" +
+ "i2ammxn--42c2d9axn--ystre-slidre-ujbiellaakesvuemieleccexn--zbx0" +
+ "25dxn--zf0ao64axn--zf0avxn--45brj9choshibuyachiyodaxn--zfr164bie" +
+ "szczadygeyachimataipeigersundurbanamexeterxperiaxz"
// nodes is the list of nodes. Each node is represented as a uint32, which
// encodes the node's children, wildcard bit and node type (as an index into
@@ -452,7619 +464,7823 @@ const text = "biomutashinainfoggiabirdartdecodynaliascoli-picenord-frontierbir"
// [15 bits] text index
// [ 6 bits] text length
var nodes = [...]uint32{
- 0x00301443, // n0x0000 c0x0000 (---------------) + I aaa
- 0x002293c4, // n0x0001 c0x0000 (---------------) + I aarp
- 0x0036eb43, // n0x0002 c0x0000 (---------------) + I abb
- 0x0036eb46, // n0x0003 c0x0000 (---------------) + I abbott
- 0x0030cb04, // n0x0004 c0x0000 (---------------) + I able
- 0x00355b87, // n0x0005 c0x0000 (---------------) + I abogado
- 0x01a01e82, // n0x0006 c0x0006 (n0x0539-n0x053f) + I ac
- 0x002f2787, // n0x0007 c0x0000 (---------------) + I academy
- 0x0033dcc9, // n0x0008 c0x0000 (---------------) + I accenture
- 0x002d7e4a, // n0x0009 c0x0000 (---------------) + I accountant
- 0x002d7e4b, // n0x000a c0x0000 (---------------) + I accountants
- 0x00221483, // n0x000b c0x0000 (---------------) + I aco
- 0x0027d3c6, // n0x000c c0x0000 (---------------) + I active
- 0x00226f45, // n0x000d c0x0000 (---------------) + I actor
- 0x01e10a02, // n0x000e c0x0007 (n0x053f-n0x0540) + I ad
- 0x00262ac3, // n0x000f c0x0000 (---------------) + I ads
- 0x0036b745, // n0x0010 c0x0000 (---------------) + I adult
- 0x02204342, // n0x0011 c0x0008 (n0x0540-n0x0548) + I ae
- 0x003285c3, // n0x0012 c0x0000 (---------------) + I aeg
- 0x026751c4, // n0x0013 c0x0009 (n0x0548-n0x05a1) + I aero
- 0x0036de85, // n0x0014 c0x0000 (---------------) + I aetna
- 0x02a0c702, // n0x0015 c0x000a (n0x05a1-n0x05a6) + I af
- 0x0023a2c3, // n0x0016 c0x0000 (---------------) + I afl
- 0x00367c06, // n0x0017 c0x0000 (---------------) + I africa
- 0x00367c0b, // n0x0018 c0x0000 (---------------) + I africamagic
- 0x02e015c2, // n0x0019 c0x000b (n0x05a6-n0x05ab) + I ag
- 0x002d6e47, // n0x001a c0x0000 (---------------) + I agakhan
- 0x00229d46, // n0x001b c0x0000 (---------------) + I agency
- 0x032002c2, // n0x001c c0x000c (n0x05ab-n0x05af) + I ai
- 0x0024ef43, // n0x001d c0x0000 (---------------) + I aig
- 0x002e75c8, // n0x001e c0x0000 (---------------) + I airforce
- 0x00273406, // n0x001f c0x0000 (---------------) + I airtel
- 0x0036acc4, // n0x0020 c0x0000 (---------------) + I akdn
- 0x03600882, // n0x0021 c0x000d (n0x05af-n0x05b6) + I al
- 0x00342747, // n0x0022 c0x0000 (---------------) + I alibaba
- 0x002ab4c6, // n0x0023 c0x0000 (---------------) + I alipay
- 0x002a6589, // n0x0024 c0x0000 (---------------) + I allfinanz
- 0x0029c184, // n0x0025 c0x0000 (---------------) + I ally
- 0x00215bc6, // n0x0026 c0x0000 (---------------) + I alsace
- 0x03a04942, // n0x0027 c0x000e (n0x05b6-n0x05b7) + I am
- 0x0027d885, // n0x0028 c0x0000 (---------------) + I amica
- 0x002b6cc9, // n0x0029 c0x0000 (---------------) + I amsterdam
- 0x03e01242, // n0x002a c0x000f (n0x05b7-n0x05bb) + I an
- 0x0022f449, // n0x002b c0x0000 (---------------) + I analytics
- 0x002f8647, // n0x002c c0x0000 (---------------) + I android
- 0x00295a46, // n0x002d c0x0000 (---------------) + I anquan
- 0x0420fd82, // n0x002e c0x0010 (n0x05bb-n0x05c1) + I ao
- 0x0028df8a, // n0x002f c0x0000 (---------------) + I apartments
- 0x00212a03, // n0x0030 c0x0000 (---------------) + I app
- 0x002f0145, // n0x0031 c0x0000 (---------------) + I apple
- 0x00273fc2, // n0x0032 c0x0000 (---------------) + I aq
- 0x00273fc9, // n0x0033 c0x0000 (---------------) + I aquarelle
- 0x04600602, // n0x0034 c0x0011 (n0x05c1-n0x05ca) + I ar
- 0x00387dc6, // n0x0035 c0x0000 (---------------) + I aramco
- 0x0025dd45, // n0x0036 c0x0000 (---------------) + I archi
- 0x00333fc4, // n0x0037 c0x0000 (---------------) + I army
- 0x04e29404, // n0x0038 c0x0013 (n0x05cb-n0x05d1) + I arpa
- 0x00359e04, // n0x0039 c0x0000 (---------------) + I arte
- 0x05200182, // n0x003a c0x0014 (n0x05d1-n0x05d2) + I as
- 0x00209144, // n0x003b c0x0000 (---------------) + I asia
- 0x002729ca, // n0x003c c0x0000 (---------------) + I associates
- 0x05601642, // n0x003d c0x0015 (n0x05d2-n0x05d9) + I at
- 0x00389588, // n0x003e c0x0000 (---------------) + I attorney
- 0x05e05ac2, // n0x003f c0x0017 (n0x05da-n0x05ec) + I au
- 0x002f4487, // n0x0040 c0x0000 (---------------) + I auction
- 0x00222244, // n0x0041 c0x0000 (---------------) + I audi
- 0x00251707, // n0x0042 c0x0000 (---------------) + I audible
- 0x00222245, // n0x0043 c0x0000 (---------------) + I audio
- 0x002f8406, // n0x0044 c0x0000 (---------------) + I author
- 0x002eaac4, // n0x0045 c0x0000 (---------------) + I auto
- 0x00309645, // n0x0046 c0x0000 (---------------) + I autos
- 0x002c0747, // n0x0047 c0x0000 (---------------) + I avianca
- 0x06e02502, // n0x0048 c0x001b (n0x05fa-n0x05fb) + I aw
- 0x00272583, // n0x0049 c0x0000 (---------------) + I aws
- 0x00215282, // n0x004a c0x0000 (---------------) + I ax
- 0x0032b343, // n0x004b c0x0000 (---------------) + I axa
- 0x07208cc2, // n0x004c c0x001c (n0x05fb-n0x0607) + I az
- 0x0026c905, // n0x004d c0x0000 (---------------) + I azure
- 0x07605a82, // n0x004e c0x001d (n0x0607-n0x0612) + I ba
- 0x00343204, // n0x004f c0x0000 (---------------) + I baby
- 0x0026a085, // n0x0050 c0x0000 (---------------) + I baidu
- 0x00255704, // n0x0051 c0x0000 (---------------) + I band
- 0x00235dc4, // n0x0052 c0x0000 (---------------) + I bank
- 0x0020c103, // n0x0053 c0x0000 (---------------) + I bar
- 0x0036bf49, // n0x0054 c0x0000 (---------------) + I barcelona
- 0x0031934b, // n0x0055 c0x0000 (---------------) + I barclaycard
- 0x002afe08, // n0x0056 c0x0000 (---------------) + I barclays
- 0x0030b788, // n0x0057 c0x0000 (---------------) + I barefoot
- 0x002ed0c8, // n0x0058 c0x0000 (---------------) + I bargains
- 0x003297c7, // n0x0059 c0x0000 (---------------) + I bauhaus
- 0x002eef46, // n0x005a c0x0000 (---------------) + I bayern
- 0x07a791c2, // n0x005b c0x001e (n0x0612-n0x061c) + I bb
- 0x00331f83, // n0x005c c0x0000 (---------------) + I bbc
- 0x00340184, // n0x005d c0x0000 (---------------) + I bbva
- 0x0028bfc3, // n0x005e c0x0000 (---------------) + I bcg
- 0x002dbf83, // n0x005f c0x0000 (---------------) + I bcn
- 0x016fbc02, // n0x0060 c0x0005 (---------------)* o I bd
- 0x07e04702, // n0x0061 c0x001f (n0x061c-n0x061e) + I be
- 0x00243505, // n0x0062 c0x0000 (---------------) + I beats
- 0x00391984, // n0x0063 c0x0000 (---------------) + I beer
- 0x00352147, // n0x0064 c0x0000 (---------------) + I bentley
- 0x00251d46, // n0x0065 c0x0000 (---------------) + I berlin
- 0x0030a2c4, // n0x0066 c0x0000 (---------------) + I best
- 0x00227703, // n0x0067 c0x0000 (---------------) + I bet
- 0x08349f02, // n0x0068 c0x0020 (n0x061e-n0x061f) + I bf
- 0x08755e02, // n0x0069 c0x0021 (n0x061f-n0x0644) + I bg
- 0x08af6202, // n0x006a c0x0022 (n0x0644-n0x0649) + I bh
- 0x00375006, // n0x006b c0x0000 (---------------) + I bharti
- 0x08e00002, // n0x006c c0x0023 (n0x0649-n0x064e) + I bi
- 0x003628c5, // n0x006d c0x0000 (---------------) + I bible
- 0x002fd143, // n0x006e c0x0000 (---------------) + I bid
- 0x00390e04, // n0x006f c0x0000 (---------------) + I bike
- 0x002c7a44, // n0x0070 c0x0000 (---------------) + I bing
- 0x002c7a45, // n0x0071 c0x0000 (---------------) + I bingo
- 0x00200003, // n0x0072 c0x0000 (---------------) + I bio
- 0x09310603, // n0x0073 c0x0024 (n0x064e-n0x0655) + I biz
- 0x09602642, // n0x0074 c0x0025 (n0x0655-n0x0659) + I bj
- 0x00277b85, // n0x0075 c0x0000 (---------------) + I black
- 0x00277b8b, // n0x0076 c0x0000 (---------------) + I blackfriday
- 0x002d0084, // n0x0077 c0x0000 (---------------) + I blog
- 0x00205849, // n0x0078 c0x0000 (---------------) + I bloomberg
- 0x00207184, // n0x0079 c0x0000 (---------------) + I blue
- 0x09a09242, // n0x007a c0x0026 (n0x0659-n0x065e) + I bm
- 0x00209243, // n0x007b c0x0000 (---------------) + I bms
- 0x0020a103, // n0x007c c0x0000 (---------------) + I bmw
- 0x0160a282, // n0x007d c0x0005 (---------------)* o I bn
- 0x00243903, // n0x007e c0x0000 (---------------) + I bnl
- 0x0020a28a, // n0x007f c0x0000 (---------------) + I bnpparibas
- 0x09e0a702, // n0x0080 c0x0027 (n0x065e-n0x0667) + I bo
- 0x0034eb85, // n0x0081 c0x0000 (---------------) + I boats
- 0x0020aac3, // n0x0082 c0x0000 (---------------) + I bom
- 0x0020b104, // n0x0083 c0x0000 (---------------) + I bond
- 0x0020c2c3, // n0x0084 c0x0000 (---------------) + I boo
- 0x0020c2c5, // n0x0085 c0x0000 (---------------) + I boots
- 0x0020cb05, // n0x0086 c0x0000 (---------------) + I bosch
- 0x0020d286, // n0x0087 c0x0000 (---------------) + I bostik
- 0x0020e2c3, // n0x0088 c0x0000 (---------------) + I bot
- 0x00211048, // n0x0089 c0x0000 (---------------) + I boutique
- 0x0a212e82, // n0x008a c0x0028 (n0x0667-n0x06ad) + I br
- 0x00212e88, // n0x008b c0x0000 (---------------) + I bradesco
- 0x0021a14b, // n0x008c c0x0000 (---------------) + I bridgestone
- 0x002172c8, // n0x008d c0x0000 (---------------) + I broadway
- 0x00218046, // n0x008e c0x0000 (---------------) + I broker
- 0x00219347, // n0x008f c0x0000 (---------------) + I brother
- 0x0021be88, // n0x0090 c0x0000 (---------------) + I brussels
- 0x0aa35102, // n0x0091 c0x002a (n0x06ae-n0x06b3) + I bs
- 0x0ae16fc2, // n0x0092 c0x002b (n0x06b3-n0x06b8) + I bt
- 0x0033c648, // n0x0093 c0x0000 (---------------) + I budapest
- 0x002c67c5, // n0x0094 c0x0000 (---------------) + I build
- 0x00324908, // n0x0095 c0x0000 (---------------) + I builders
- 0x0025f008, // n0x0096 c0x0000 (---------------) + I business
- 0x0021d903, // n0x0097 c0x0000 (---------------) + I buy
- 0x0021e484, // n0x0098 c0x0000 (---------------) + I buzz
- 0x003401c2, // n0x0099 c0x0000 (---------------) + I bv
- 0x0b21f782, // n0x009a c0x002c (n0x06b8-n0x06ba) + I bw
- 0x0b616b42, // n0x009b c0x002d (n0x06ba-n0x06be) + I by
- 0x0be203c2, // n0x009c c0x002f (n0x06bf-n0x06c5) + I bz
- 0x002203c3, // n0x009d c0x0000 (---------------) + I bzh
- 0x0c2055c2, // n0x009e c0x0030 (n0x06c5-n0x06d6) + I ca
- 0x0036eb03, // n0x009f c0x0000 (---------------) + I cab
- 0x0026ab84, // n0x00a0 c0x0000 (---------------) + I cafe
- 0x0020e443, // n0x00a1 c0x0000 (---------------) + I cal
- 0x002a6544, // n0x00a2 c0x0000 (---------------) + I call
- 0x0022b406, // n0x00a3 c0x0000 (---------------) + I camera
- 0x0022c604, // n0x00a4 c0x0000 (---------------) + I camp
- 0x0029668e, // n0x00a5 c0x0000 (---------------) + I cancerresearch
- 0x00312a05, // n0x00a6 c0x0000 (---------------) + I canon
- 0x0021aac8, // n0x00a7 c0x0000 (---------------) + I capetown
- 0x002c0887, // n0x00a8 c0x0000 (---------------) + I capital
- 0x00205f83, // n0x00a9 c0x0000 (---------------) + I car
- 0x002291c7, // n0x00aa c0x0000 (---------------) + I caravan
- 0x00319505, // n0x00ab c0x0000 (---------------) + I cards
- 0x00205f84, // n0x00ac c0x0000 (---------------) + I care
- 0x00205f86, // n0x00ad c0x0000 (---------------) + I career
- 0x00205f87, // n0x00ae c0x0000 (---------------) + I careers
- 0x002b9384, // n0x00af c0x0000 (---------------) + I cars
- 0x00332007, // n0x00b0 c0x0000 (---------------) + I cartier
- 0x00383904, // n0x00b1 c0x0000 (---------------) + I casa
- 0x00261b04, // n0x00b2 c0x0000 (---------------) + I cash
- 0x002112c6, // n0x00b3 c0x0000 (---------------) + I casino
- 0x0020d0c3, // n0x00b4 c0x0000 (---------------) + I cat
- 0x003246c8, // n0x00b5 c0x0000 (---------------) + I catering
- 0x00235d83, // n0x00b6 c0x0000 (---------------) + I cba
- 0x002438c3, // n0x00b7 c0x0000 (---------------) + I cbn
- 0x0037dc04, // n0x00b8 c0x0000 (---------------) + I cbre
- 0x0c61aa82, // n0x00b9 c0x0031 (n0x06d6-n0x06da) + I cc
- 0x0ca2a082, // n0x00ba c0x0032 (n0x06da-n0x06db) + I cd
- 0x00215cc3, // n0x00bb c0x0000 (---------------) + I ceb
- 0x00233a06, // n0x00bc c0x0000 (---------------) + I center
- 0x002e7743, // n0x00bd c0x0000 (---------------) + I ceo
- 0x0021d7c4, // n0x00be c0x0000 (---------------) + I cern
- 0x0cf104c2, // n0x00bf c0x0033 (n0x06db-n0x06dc) + I cf
- 0x003104c3, // n0x00c0 c0x0000 (---------------) + I cfa
- 0x00366243, // n0x00c1 c0x0000 (---------------) + I cfd
- 0x0020ea02, // n0x00c2 c0x0000 (---------------) + I cg
- 0x0d204a02, // n0x00c3 c0x0034 (n0x06dc-n0x06dd) + I ch
- 0x002a9f06, // n0x00c4 c0x0000 (---------------) + I chanel
- 0x00227d87, // n0x00c5 c0x0000 (---------------) + I channel
- 0x002facc5, // n0x00c6 c0x0000 (---------------) + I chase
- 0x0023a704, // n0x00c7 c0x0000 (---------------) + I chat
- 0x0028dec5, // n0x00c8 c0x0000 (---------------) + I cheap
- 0x00353cc7, // n0x00c9 c0x0000 (---------------) + I chintai
- 0x00297d05, // n0x00ca c0x0000 (---------------) + I chloe
- 0x002e5109, // n0x00cb c0x0000 (---------------) + I christmas
- 0x002e6f86, // n0x00cc c0x0000 (---------------) + I chrome
- 0x002fabc6, // n0x00cd c0x0000 (---------------) + I church
- 0x0d6155c2, // n0x00ce c0x0035 (n0x06dd-n0x06ec) + I ci
- 0x0025f788, // n0x00cf c0x0000 (---------------) + I cipriani
- 0x00322106, // n0x00d0 c0x0000 (---------------) + I circle
- 0x00237905, // n0x00d1 c0x0000 (---------------) + I cisco
- 0x003245c5, // n0x00d2 c0x0000 (---------------) + I citic
- 0x002735c4, // n0x00d3 c0x0000 (---------------) + I city
- 0x002735c8, // n0x00d4 c0x0000 (---------------) + I cityeats
- 0x0da01782, // n0x00d5 c0x0036 (n0x06ec-n0x06ed)* o I ck
- 0x0de0af42, // n0x00d6 c0x0037 (n0x06ed-n0x06f2) + I cl
- 0x00357546, // n0x00d7 c0x0000 (---------------) + I claims
- 0x0032d748, // n0x00d8 c0x0000 (---------------) + I cleaning
- 0x00367205, // n0x00d9 c0x0000 (---------------) + I click
- 0x00368f86, // n0x00da c0x0000 (---------------) + I clinic
- 0x003784c8, // n0x00db c0x0000 (---------------) + I clothing
- 0x00332205, // n0x00dc c0x0000 (---------------) + I cloud
- 0x002752c4, // n0x00dd c0x0000 (---------------) + I club
- 0x002752c7, // n0x00de c0x0000 (---------------) + I clubmed
- 0x0e249082, // n0x00df c0x0038 (n0x06f2-n0x06f6) + I cm
- 0x0e6211c2, // n0x00e0 c0x0039 (n0x06f6-n0x0723) + I cn
- 0x0fe00742, // n0x00e1 c0x003f (n0x0728-n0x0735) + I co
- 0x0032ca05, // n0x00e2 c0x0000 (---------------) + I coach
- 0x0028ca05, // n0x00e3 c0x0000 (---------------) + I codes
- 0x003690c6, // n0x00e4 c0x0000 (---------------) + I coffee
- 0x0021e787, // n0x00e5 c0x0000 (---------------) + I college
- 0x002214c7, // n0x00e6 c0x0000 (---------------) + I cologne
- 0x10622ac3, // n0x00e7 c0x0041 (n0x0736-n0x07ff) + I com
- 0x002d4148, // n0x00e8 c0x0000 (---------------) + I commbank
- 0x00222ac9, // n0x00e9 c0x0000 (---------------) + I community
- 0x002232c7, // n0x00ea c0x0000 (---------------) + I company
- 0x002236c8, // n0x00eb c0x0000 (---------------) + I computer
- 0x00223ec6, // n0x00ec c0x0000 (---------------) + I comsec
- 0x00224306, // n0x00ed c0x0000 (---------------) + I condos
- 0x00224c0c, // n0x00ee c0x0000 (---------------) + I construction
- 0x00225a8a, // n0x00ef c0x0000 (---------------) + I consulting
- 0x00225f47, // n0x00f0 c0x0000 (---------------) + I contact
- 0x00226e0b, // n0x00f1 c0x0000 (---------------) + I contractors
- 0x00227bc7, // n0x00f2 c0x0000 (---------------) + I cooking
- 0x00227bce, // n0x00f3 c0x0000 (---------------) + I cookingchannel
- 0x00228384, // n0x00f4 c0x0000 (---------------) + I cool
- 0x00228d44, // n0x00f5 c0x0000 (---------------) + I coop
- 0x0022b2c7, // n0x00f6 c0x0000 (---------------) + I corsica
- 0x00362c07, // n0x00f7 c0x0000 (---------------) + I country
- 0x0022d906, // n0x00f8 c0x0000 (---------------) + I coupon
- 0x0022d907, // n0x00f9 c0x0000 (---------------) + I coupons
- 0x0022dc87, // n0x00fa c0x0000 (---------------) + I courses
- 0x11a0c502, // n0x00fb c0x0046 (n0x081d-n0x0824) + I cr
- 0x00230646, // n0x00fc c0x0000 (---------------) + I credit
- 0x0023064a, // n0x00fd c0x0000 (---------------) + I creditcard
- 0x002308cb, // n0x00fe c0x0000 (---------------) + I creditunion
- 0x002319c7, // n0x00ff c0x0000 (---------------) + I cricket
- 0x00232885, // n0x0100 c0x0000 (---------------) + I crown
- 0x002329c3, // n0x0101 c0x0000 (---------------) + I crs
- 0x00233147, // n0x0102 c0x0000 (---------------) + I cruises
- 0x00355d43, // n0x0103 c0x0000 (---------------) + I csc
- 0x11e24002, // n0x0104 c0x0047 (n0x0824-n0x082a) + I cu
- 0x002333ca, // n0x0105 c0x0000 (---------------) + I cuisinella
- 0x1233f802, // n0x0106 c0x0048 (n0x082a-n0x082b) + I cv
- 0x126b8942, // n0x0107 c0x0049 (n0x082b-n0x082f) + I cw
- 0x12a35882, // n0x0108 c0x004a (n0x082f-n0x0831) + I cx
- 0x12e29e42, // n0x0109 c0x004b (n0x0831-n0x083e) o I cy
- 0x002dcac5, // n0x010a c0x0000 (---------------) + I cymru
- 0x00235b84, // n0x010b c0x0000 (---------------) + I cyou
- 0x13614442, // n0x010c c0x004d (n0x083f-n0x0840) + I cz
- 0x0021bc05, // n0x010d c0x0000 (---------------) + I dabur
- 0x00264503, // n0x010e c0x0000 (---------------) + I dad
- 0x0032dec5, // n0x010f c0x0000 (---------------) + I dance
- 0x00209004, // n0x0110 c0x0000 (---------------) + I date
- 0x00390f06, // n0x0111 c0x0000 (---------------) + I dating
- 0x00207286, // n0x0112 c0x0000 (---------------) + I datsun
- 0x00277d83, // n0x0113 c0x0000 (---------------) + I day
- 0x00251304, // n0x0114 c0x0000 (---------------) + I dclk
- 0x002f9383, // n0x0115 c0x0000 (---------------) + I dds
- 0x13a006c2, // n0x0116 c0x004e (n0x0840-n0x0848) + I de
- 0x002196c4, // n0x0117 c0x0000 (---------------) + I deal
- 0x00364186, // n0x0118 c0x0000 (---------------) + I dealer
- 0x002196c5, // n0x0119 c0x0000 (---------------) + I deals
- 0x002528c6, // n0x011a c0x0000 (---------------) + I degree
- 0x00268948, // n0x011b c0x0000 (---------------) + I delivery
- 0x002297c4, // n0x011c c0x0000 (---------------) + I dell
- 0x0024f885, // n0x011d c0x0000 (---------------) + I delta
- 0x0022e548, // n0x011e c0x0000 (---------------) + I democrat
- 0x00298646, // n0x011f c0x0000 (---------------) + I dental
- 0x00234ec7, // n0x0120 c0x0000 (---------------) + I dentist
- 0x00232f44, // n0x0121 c0x0000 (---------------) + I desi
- 0x00232f46, // n0x0122 c0x0000 (---------------) + I design
- 0x0030a403, // n0x0123 c0x0000 (---------------) + I dev
- 0x002b0cc8, // n0x0124 c0x0000 (---------------) + I diamonds
- 0x002f6384, // n0x0125 c0x0000 (---------------) + I diet
- 0x002ef0c7, // n0x0126 c0x0000 (---------------) + I digital
- 0x00352bc6, // n0x0127 c0x0000 (---------------) + I direct
- 0x00352bc9, // n0x0128 c0x0000 (---------------) + I directory
- 0x002f87c8, // n0x0129 c0x0000 (---------------) + I discount
- 0x0020c7c2, // n0x012a c0x0000 (---------------) + I dj
- 0x13e71742, // n0x012b c0x004f (n0x0848-n0x0849) + I dk
- 0x142618c2, // n0x012c c0x0050 (n0x0849-n0x084e) + I dm
- 0x0036cd83, // n0x012d c0x0000 (---------------) + I dnp
- 0x14604002, // n0x012e c0x0051 (n0x084e-n0x0858) + I do
- 0x00355cc4, // n0x012f c0x0000 (---------------) + I docs
- 0x00204003, // n0x0130 c0x0000 (---------------) + I dog
- 0x0024f044, // n0x0131 c0x0000 (---------------) + I doha
- 0x002e8307, // n0x0132 c0x0000 (---------------) + I domains
- 0x0023ba06, // n0x0133 c0x0000 (---------------) + I doosan
- 0x0031c343, // n0x0134 c0x0000 (---------------) + I dot
- 0x002ede08, // n0x0135 c0x0000 (---------------) + I download
- 0x003102c5, // n0x0136 c0x0000 (---------------) + I drive
- 0x00394cc4, // n0x0137 c0x0000 (---------------) + I dstv
- 0x002482c3, // n0x0138 c0x0000 (---------------) + I dtv
- 0x0026a005, // n0x0139 c0x0000 (---------------) + I dubai
- 0x0031b886, // n0x013a c0x0000 (---------------) + I dunlop
- 0x0032a4c6, // n0x013b c0x0000 (---------------) + I dupont
- 0x00383246, // n0x013c c0x0000 (---------------) + I durban
- 0x00300bc4, // n0x013d c0x0000 (---------------) + I dvag
- 0x14aa3602, // n0x013e c0x0052 (n0x0858-n0x0860) + I dz
- 0x00330d85, // n0x013f c0x0000 (---------------) + I earth
- 0x00242e03, // n0x0140 c0x0000 (---------------) + I eat
- 0x14e00702, // n0x0141 c0x0053 (n0x0860-n0x086c) + I ec
- 0x0038d785, // n0x0142 c0x0000 (---------------) + I edeka
- 0x002d75c3, // n0x0143 c0x0000 (---------------) + I edu
- 0x00375549, // n0x0144 c0x0000 (---------------) + I education
- 0x15206042, // n0x0145 c0x0054 (n0x086c-n0x0876) + I ee
- 0x15a0df82, // n0x0146 c0x0056 (n0x0877-n0x0880) + I eg
- 0x003435c5, // n0x0147 c0x0000 (---------------) + I email
- 0x00312206, // n0x0148 c0x0000 (---------------) + I emerck
- 0x002ba7c6, // n0x0149 c0x0000 (---------------) + I energy
- 0x002a8a88, // n0x014a c0x0000 (---------------) + I engineer
- 0x002a8a8b, // n0x014b c0x0000 (---------------) + I engineering
- 0x0037a7cb, // n0x014c c0x0000 (---------------) + I enterprises
- 0x00364485, // n0x014d c0x0000 (---------------) + I epson
- 0x0021f909, // n0x014e c0x0000 (---------------) + I equipment
- 0x01600ec2, // n0x014f c0x0005 (---------------)* o I er
- 0x00259904, // n0x0150 c0x0000 (---------------) + I erni
- 0x162010c2, // n0x0151 c0x0058 (n0x0881-n0x0886) + I es
- 0x00275b43, // n0x0152 c0x0000 (---------------) + I esq
- 0x002b1846, // n0x0153 c0x0000 (---------------) + I estate
- 0x16a0bbc2, // n0x0154 c0x005a (n0x0887-n0x088f) + I et
- 0x0021d5c2, // n0x0155 c0x0000 (---------------) + I eu
- 0x002ef88a, // n0x0156 c0x0000 (---------------) + I eurovision
- 0x002b71c3, // n0x0157 c0x0000 (---------------) + I eus
- 0x003423c6, // n0x0158 c0x0000 (---------------) + I events
- 0x00381fc8, // n0x0159 c0x0000 (---------------) + I everbank
- 0x002f3908, // n0x015a c0x0000 (---------------) + I exchange
- 0x0030c7c6, // n0x015b c0x0000 (---------------) + I expert
- 0x00203e87, // n0x015c c0x0000 (---------------) + I exposed
- 0x0029ab47, // n0x015d c0x0000 (---------------) + I express
- 0x0021008a, // n0x015e c0x0000 (---------------) + I extraspace
- 0x00310504, // n0x015f c0x0000 (---------------) + I fage
- 0x00328344, // n0x0160 c0x0000 (---------------) + I fail
- 0x0033d609, // n0x0161 c0x0000 (---------------) + I fairwinds
- 0x00377ec5, // n0x0162 c0x0000 (---------------) + I faith
- 0x00311c06, // n0x0163 c0x0000 (---------------) + I family
- 0x0020f1c3, // n0x0164 c0x0000 (---------------) + I fan
- 0x002c5544, // n0x0165 c0x0000 (---------------) + I fans
- 0x0021f804, // n0x0166 c0x0000 (---------------) + I farm
- 0x0025d247, // n0x0167 c0x0000 (---------------) + I fashion
- 0x00287d44, // n0x0168 c0x0000 (---------------) + I fast
- 0x00369188, // n0x0169 c0x0000 (---------------) + I feedback
- 0x003127c7, // n0x016a c0x0000 (---------------) + I ferrero
- 0x16e099c2, // n0x016b c0x005b (n0x088f-n0x0892) + I fi
- 0x00356104, // n0x016c c0x0000 (---------------) + I film
- 0x00356745, // n0x016d c0x0000 (---------------) + I final
- 0x00368607, // n0x016e c0x0000 (---------------) + I finance
- 0x00371509, // n0x016f c0x0000 (---------------) + I financial
- 0x00236744, // n0x0170 c0x0000 (---------------) + I fire
- 0x00237d49, // n0x0171 c0x0000 (---------------) + I firestone
- 0x00238548, // n0x0172 c0x0000 (---------------) + I firmdale
- 0x00238904, // n0x0173 c0x0000 (---------------) + I fish
- 0x00238907, // n0x0174 c0x0000 (---------------) + I fishing
- 0x00238f03, // n0x0175 c0x0000 (---------------) + I fit
- 0x00239087, // n0x0176 c0x0000 (---------------) + I fitness
- 0x016241c2, // n0x0177 c0x0005 (---------------)* o I fj
- 0x01697782, // n0x0178 c0x0005 (---------------)* o I fk
- 0x0023a306, // n0x0179 c0x0000 (---------------) + I flickr
- 0x0023b147, // n0x017a c0x0000 (---------------) + I flights
- 0x0023c607, // n0x017b c0x0000 (---------------) + I florist
- 0x0023ef07, // n0x017c c0x0000 (---------------) + I flowers
- 0x0023f508, // n0x017d c0x0000 (---------------) + I flsmidth
- 0x0023ffc3, // n0x017e c0x0000 (---------------) + I fly
- 0x00358002, // n0x017f c0x0000 (---------------) + I fm
- 0x00200382, // n0x0180 c0x0000 (---------------) + I fo
- 0x00241943, // n0x0181 c0x0000 (---------------) + I foo
- 0x0024194b, // n0x0182 c0x0000 (---------------) + I foodnetwork
- 0x0030b888, // n0x0183 c0x0000 (---------------) + I football
- 0x003640c4, // n0x0184 c0x0000 (---------------) + I ford
- 0x00242f85, // n0x0185 c0x0000 (---------------) + I forex
- 0x00244a47, // n0x0186 c0x0000 (---------------) + I forsale
- 0x00246b45, // n0x0187 c0x0000 (---------------) + I forum
- 0x00303b8a, // n0x0188 c0x0000 (---------------) + I foundation
- 0x17200d42, // n0x0189 c0x005c (n0x0892-n0x08aa) + I fr
- 0x0024c6c3, // n0x018a c0x0000 (---------------) + I frl
- 0x0024c787, // n0x018b c0x0000 (---------------) + I frogans
- 0x003906c9, // n0x018c c0x0000 (---------------) + I frontdoor
- 0x00200d48, // n0x018d c0x0000 (---------------) + I frontier
- 0x0026fc04, // n0x018e c0x0000 (---------------) + I fund
- 0x00272f09, // n0x018f c0x0000 (---------------) + I furniture
- 0x002764c6, // n0x0190 c0x0000 (---------------) + I futbol
- 0x00277503, // n0x0191 c0x0000 (---------------) + I fyi
- 0x00201602, // n0x0192 c0x0000 (---------------) + I ga
- 0x00215b83, // n0x0193 c0x0000 (---------------) + I gal
- 0x00226607, // n0x0194 c0x0000 (---------------) + I gallery
- 0x00362a05, // n0x0195 c0x0000 (---------------) + I gallo
- 0x0036bd46, // n0x0196 c0x0000 (---------------) + I gallup
- 0x00212084, // n0x0197 c0x0000 (---------------) + I game
- 0x002d2145, // n0x0198 c0x0000 (---------------) + I games
- 0x0020e506, // n0x0199 c0x0000 (---------------) + I garden
- 0x00205a42, // n0x019a c0x0000 (---------------) + I gb
- 0x00378f84, // n0x019b c0x0000 (---------------) + I gbiz
- 0x0021b342, // n0x019c c0x0000 (---------------) + I gd
- 0x002d0143, // n0x019d c0x0000 (---------------) + I gdn
- 0x176012c2, // n0x019e c0x005d (n0x08aa-n0x08b1) + I ge
- 0x00237543, // n0x019f c0x0000 (---------------) + I gea
- 0x0020db04, // n0x01a0 c0x0000 (---------------) + I gent
- 0x0020db07, // n0x01a1 c0x0000 (---------------) + I genting
- 0x00248e82, // n0x01a2 c0x0000 (---------------) + I gf
- 0x17a00402, // n0x01a3 c0x005e (n0x08b1-n0x08b4) + I gg
- 0x00268b44, // n0x01a4 c0x0000 (---------------) + I ggee
- 0x17e36e42, // n0x01a5 c0x005f (n0x08b4-n0x08b9) + I gh
- 0x18200442, // n0x01a6 c0x0060 (n0x08b9-n0x08bf) + I gi
- 0x0030f704, // n0x01a7 c0x0000 (---------------) + I gift
- 0x0030f705, // n0x01a8 c0x0000 (---------------) + I gifts
- 0x002b9bc5, // n0x01a9 c0x0000 (---------------) + I gives
- 0x00213586, // n0x01aa c0x0000 (---------------) + I giving
- 0x18629902, // n0x01ab c0x0061 (n0x08bf-n0x08c4) + I gl
- 0x0034da85, // n0x01ac c0x0000 (---------------) + I glass
- 0x00274303, // n0x01ad c0x0000 (---------------) + I gle
- 0x00389c06, // n0x01ae c0x0000 (---------------) + I global
- 0x0038a445, // n0x01af c0x0000 (---------------) + I globo
- 0x002047c2, // n0x01b0 c0x0000 (---------------) + I gm
- 0x00323145, // n0x01b1 c0x0000 (---------------) + I gmail
- 0x00208443, // n0x01b2 c0x0000 (---------------) + I gmo
- 0x0020a643, // n0x01b3 c0x0000 (---------------) + I gmx
- 0x18a050c2, // n0x01b4 c0x0062 (n0x08c4-n0x08ca) + I gn
- 0x00238a84, // n0x01b5 c0x0000 (---------------) + I gold
- 0x00238a89, // n0x01b6 c0x0000 (---------------) + I goldpoint
- 0x0025d184, // n0x01b7 c0x0000 (---------------) + I golf
- 0x0028c883, // n0x01b8 c0x0000 (---------------) + I goo
- 0x00330c48, // n0x01b9 c0x0000 (---------------) + I goodyear
- 0x0028c884, // n0x01ba c0x0000 (---------------) + I goog
- 0x0028c886, // n0x01bb c0x0000 (---------------) + I google
- 0x0028e783, // n0x01bc c0x0000 (---------------) + I gop
- 0x0020bec3, // n0x01bd c0x0000 (---------------) + I got
- 0x0020bec4, // n0x01be c0x0000 (---------------) + I gotv
- 0x0021e283, // n0x01bf c0x0000 (---------------) + I gov
- 0x18ece142, // n0x01c0 c0x0063 (n0x08ca-n0x08d0) + I gp
- 0x0034f382, // n0x01c1 c0x0000 (---------------) + I gq
- 0x1920dc82, // n0x01c2 c0x0064 (n0x08d0-n0x08d6) + I gr
- 0x002ff248, // n0x01c3 c0x0000 (---------------) + I grainger
- 0x00341188, // n0x01c4 c0x0000 (---------------) + I graphics
- 0x0037d046, // n0x01c5 c0x0000 (---------------) + I gratis
- 0x0025b105, // n0x01c6 c0x0000 (---------------) + I green
- 0x0021dd45, // n0x01c7 c0x0000 (---------------) + I gripe
- 0x002646c5, // n0x01c8 c0x0000 (---------------) + I group
- 0x0026cd02, // n0x01c9 c0x0000 (---------------) + I gs
- 0x19651202, // n0x01ca c0x0065 (n0x08d6-n0x08dd) + I gt
- 0x01629702, // n0x01cb c0x0005 (---------------)* o I gu
- 0x0025f6c5, // n0x01cc c0x0000 (---------------) + I gucci
- 0x002ca244, // n0x01cd c0x0000 (---------------) + I guge
- 0x00229705, // n0x01ce c0x0000 (---------------) + I guide
- 0x0022d647, // n0x01cf c0x0000 (---------------) + I guitars
- 0x0025bc44, // n0x01d0 c0x0000 (---------------) + I guru
- 0x00204b82, // n0x01d1 c0x0000 (---------------) + I gw
- 0x19a25a02, // n0x01d2 c0x0066 (n0x08dd-n0x08e0) + I gy
- 0x0038a2c7, // n0x01d3 c0x0000 (---------------) + I hamburg
- 0x00392287, // n0x01d4 c0x0000 (---------------) + I hangout
- 0x00329884, // n0x01d5 c0x0000 (---------------) + I haus
- 0x00235cc8, // n0x01d6 c0x0000 (---------------) + I hdfcbank
- 0x00205e06, // n0x01d7 c0x0000 (---------------) + I health
- 0x00205e0a, // n0x01d8 c0x0000 (---------------) + I healthcare
- 0x00205204, // n0x01d9 c0x0000 (---------------) + I help
- 0x00209408, // n0x01da c0x0000 (---------------) + I helsinki
- 0x0023f784, // n0x01db c0x0000 (---------------) + I here
- 0x00219446, // n0x01dc c0x0000 (---------------) + I hermes
- 0x00280244, // n0x01dd c0x0000 (---------------) + I hgtv
- 0x0032cd06, // n0x01de c0x0000 (---------------) + I hiphop
- 0x0028d547, // n0x01df c0x0000 (---------------) + I hitachi
- 0x0025f603, // n0x01e0 c0x0000 (---------------) + I hiv
- 0x19e2ea02, // n0x01e1 c0x0067 (n0x08e0-n0x08f8) + I hk
- 0x0025ab03, // n0x01e2 c0x0000 (---------------) + I hkt
- 0x00206182, // n0x01e3 c0x0000 (---------------) + I hm
- 0x1a217542, // n0x01e4 c0x0068 (n0x08f8-n0x08fe) + I hn
- 0x002cd886, // n0x01e5 c0x0000 (---------------) + I hockey
- 0x0034b148, // n0x01e6 c0x0000 (---------------) + I holdings
- 0x00290807, // n0x01e7 c0x0000 (---------------) + I holiday
- 0x002b8e89, // n0x01e8 c0x0000 (---------------) + I homedepot
- 0x00291385, // n0x01e9 c0x0000 (---------------) + I homes
- 0x00292005, // n0x01ea c0x0000 (---------------) + I honda
- 0x00293c05, // n0x01eb c0x0000 (---------------) + I horse
- 0x00202fc4, // n0x01ec c0x0000 (---------------) + I host
- 0x002836c7, // n0x01ed c0x0000 (---------------) + I hosting
- 0x00294947, // n0x01ee c0x0000 (---------------) + I hoteles
- 0x00294fc7, // n0x01ef c0x0000 (---------------) + I hotmail
- 0x0021da05, // n0x01f0 c0x0000 (---------------) + I house
- 0x00297383, // n0x01f1 c0x0000 (---------------) + I how
- 0x1a625842, // n0x01f2 c0x0069 (n0x08fe-n0x0903) + I hr
- 0x002dbf04, // n0x01f3 c0x0000 (---------------) + I hsbc
- 0x1aa36e82, // n0x01f4 c0x006a (n0x0903-n0x0914) + I ht
- 0x00249003, // n0x01f5 c0x0000 (---------------) + I htc
- 0x1ae17d42, // n0x01f6 c0x006b (n0x0914-n0x0934) + I hu
- 0x0031b7c3, // n0x01f7 c0x0000 (---------------) + I ibm
- 0x0028bf44, // n0x01f8 c0x0000 (---------------) + I icbc
- 0x00200b43, // n0x01f9 c0x0000 (---------------) + I ice
- 0x0033c383, // n0x01fa c0x0000 (---------------) + I icu
- 0x1b206202, // n0x01fb c0x006c (n0x0934-n0x093f) + I id
- 0x1ba00e82, // n0x01fc c0x006e (n0x0940-n0x0942) + I ie
- 0x00370d03, // n0x01fd c0x0000 (---------------) + I ifm
- 0x0031cac5, // n0x01fe c0x0000 (---------------) + I iinet
- 0x1be036c2, // n0x01ff c0x006f (n0x0942-n0x0943)* o I il
- 0x1c603582, // n0x0200 c0x0071 (n0x0944-n0x094b) + I im
- 0x002f4284, // n0x0201 c0x0000 (---------------) + I imdb
- 0x00203584, // n0x0202 c0x0000 (---------------) + I immo
- 0x0020358a, // n0x0203 c0x0000 (---------------) + I immobilien
- 0x1ce00242, // n0x0204 c0x0073 (n0x094d-n0x095a) + I in
- 0x00353eca, // n0x0205 c0x0000 (---------------) + I industries
- 0x00355408, // n0x0206 c0x0000 (---------------) + I infiniti
- 0x1d200304, // n0x0207 c0x0074 (n0x095a-n0x0964) + I info
- 0x0020dc03, // n0x0208 c0x0000 (---------------) + I ing
- 0x00209503, // n0x0209 c0x0000 (---------------) + I ink
- 0x002ed209, // n0x020a c0x0000 (---------------) + I institute
- 0x002806c9, // n0x020b c0x0000 (---------------) + I insurance
- 0x002e8406, // n0x020c c0x0000 (---------------) + I insure
- 0x1d638c03, // n0x020d c0x0075 (n0x0964-n0x0965) + I int
- 0x002dd88d, // n0x020e c0x0000 (---------------) + I international
- 0x002087cb, // n0x020f c0x0000 (---------------) + I investments
- 0x1da00042, // n0x0210 c0x0076 (n0x0965-n0x0968) + I io
- 0x00331048, // n0x0211 c0x0000 (---------------) + I ipiranga
- 0x1de11142, // n0x0212 c0x0077 (n0x0968-n0x096e) + I iq
- 0x1e200542, // n0x0213 c0x0078 (n0x096e-n0x0977) + I ir
- 0x00294c05, // n0x0214 c0x0000 (---------------) + I irish
- 0x1e602b42, // n0x0215 c0x0079 (n0x0977-n0x097f) + I is
- 0x00370f07, // n0x0216 c0x0000 (---------------) + I iselect
- 0x00202b43, // n0x0217 c0x0000 (---------------) + I ist
- 0x00210c48, // n0x0218 c0x0000 (---------------) + I istanbul
- 0x1ea06e82, // n0x0219 c0x007a (n0x097f-n0x0af0) + I it
- 0x00206e84, // n0x021a c0x0000 (---------------) + I itau
- 0x003664c3, // n0x021b c0x0000 (---------------) + I iwc
- 0x002a51c6, // n0x021c c0x0000 (---------------) + I jaguar
- 0x0030ad84, // n0x021d c0x0000 (---------------) + I java
- 0x00243883, // n0x021e c0x0000 (---------------) + I jcb
- 0x0025b3c3, // n0x021f c0x0000 (---------------) + I jcp
- 0x1ee01f82, // n0x0220 c0x007b (n0x0af0-n0x0af3) + I je
- 0x0033ab85, // n0x0221 c0x0000 (---------------) + I jetzt
- 0x0034f487, // n0x0222 c0x0000 (---------------) + I jewelry
- 0x00266583, // n0x0223 c0x0000 (---------------) + I jio
- 0x00297c83, // n0x0224 c0x0000 (---------------) + I jlc
- 0x00297e43, // n0x0225 c0x0000 (---------------) + I jll
- 0x01697f02, // n0x0226 c0x0005 (---------------)* o I jm
- 0x00297f03, // n0x0227 c0x0000 (---------------) + I jmp
- 0x002987c3, // n0x0228 c0x0000 (---------------) + I jnj
- 0x1f202982, // n0x0229 c0x007c (n0x0af3-n0x0afb) + I jo
- 0x002a5d04, // n0x022a c0x0000 (---------------) + I jobs
- 0x00389ac6, // n0x022b c0x0000 (---------------) + I joburg
- 0x00203903, // n0x022c c0x0000 (---------------) + I jot
- 0x00298c43, // n0x022d c0x0000 (---------------) + I joy
- 0x1f6990c2, // n0x022e c0x007d (n0x0afb-n0x0b6a) + I jp
- 0x002990c8, // n0x022f c0x0000 (---------------) + I jpmorgan
- 0x0029ccc4, // n0x0230 c0x0000 (---------------) + I jprs
- 0x002faec6, // n0x0231 c0x0000 (---------------) + I juegos
- 0x002e6846, // n0x0232 c0x0000 (---------------) + I kaufen
- 0x00233fc4, // n0x0233 c0x0000 (---------------) + I kddi
- 0x2d201002, // n0x0234 c0x00b4 (n0x11fe-n0x11ff)* o I ke
- 0x002a6f4b, // n0x0235 c0x0000 (---------------) + I kerryhotels
- 0x0021268e, // n0x0236 c0x0000 (---------------) + I kerrylogistics
- 0x0021810f, // n0x0237 c0x0000 (---------------) + I kerryproperties
- 0x00235e83, // n0x0238 c0x0000 (---------------) + I kfh
- 0x2daa3fc2, // n0x0239 c0x00b6 (n0x1200-n0x1206) + I kg
- 0x016176c2, // n0x023a c0x0005 (---------------)* o I kh
- 0x2de01b02, // n0x023b c0x00b7 (n0x1206-n0x120d) + I ki
- 0x0027d603, // n0x023c c0x0000 (---------------) + I kim
- 0x002f33c6, // n0x023d c0x0000 (---------------) + I kinder
- 0x00227886, // n0x023e c0x0000 (---------------) + I kindle
- 0x00298f07, // n0x023f c0x0000 (---------------) + I kitchen
- 0x002d2dc4, // n0x0240 c0x0000 (---------------) + I kiwi
- 0x2e268d82, // n0x0241 c0x00b8 (n0x120d-n0x121e) + I km
- 0x2e656942, // n0x0242 c0x00b9 (n0x121e-n0x1222) + I kn
- 0x0021f385, // n0x0243 c0x0000 (---------------) + I koeln
- 0x002be447, // n0x0244 c0x0000 (---------------) + I komatsu
- 0x2ea08382, // n0x0245 c0x00ba (n0x1222-n0x1228) + I kp
- 0x00208384, // n0x0246 c0x0000 (---------------) + I kpmg
- 0x00360183, // n0x0247 c0x0000 (---------------) + I kpn
- 0x2ee034c2, // n0x0248 c0x00bb (n0x1228-n0x1246) + I kr
- 0x0033a003, // n0x0249 c0x0000 (---------------) + I krd
- 0x0029d8c4, // n0x024a c0x0000 (---------------) + I kred
- 0x002a3f09, // n0x024b c0x0000 (---------------) + I kuokgroup
- 0x016ac642, // n0x024c c0x0005 (---------------)* o I kw
- 0x2f229082, // n0x024d c0x00bc (n0x1246-n0x124b) + I ky
- 0x002568c6, // n0x024e c0x0000 (---------------) + I kyknet
- 0x002acb05, // n0x024f c0x0000 (---------------) + I kyoto
- 0x2f6f0002, // n0x0250 c0x00bd (n0x124b-n0x1251) + I kz
- 0x2fa01e42, // n0x0251 c0x00be (n0x1251-n0x125a) + I la
- 0x003276c7, // n0x0252 c0x0000 (---------------) + I lacaixa
- 0x0033df4b, // n0x0253 c0x0000 (---------------) + I lamborghini
- 0x002335c9, // n0x0254 c0x0000 (---------------) + I lancaster
- 0x002364c4, // n0x0255 c0x0000 (---------------) + I land
- 0x0036d989, // n0x0256 c0x0000 (---------------) + I landrover
- 0x002679c7, // n0x0257 c0x0000 (---------------) + I lasalle
- 0x00222143, // n0x0258 c0x0000 (---------------) + I lat
- 0x002c18c7, // n0x0259 c0x0000 (---------------) + I latrobe
- 0x00253883, // n0x025a c0x0000 (---------------) + I law
- 0x00270406, // n0x025b c0x0000 (---------------) + I lawyer
- 0x2fe0a542, // n0x025c c0x00bf (n0x125a-n0x125f) + I lb
- 0x302339c2, // n0x025d c0x00c0 (n0x125f-n0x1265) + I lc
- 0x0021fbc3, // n0x025e c0x0000 (---------------) + I lds
- 0x00267b05, // n0x025f c0x0000 (---------------) + I lease
- 0x0025f307, // n0x0260 c0x0000 (---------------) + I leclerc
- 0x00362985, // n0x0261 c0x0000 (---------------) + I legal
- 0x002ad945, // n0x0262 c0x0000 (---------------) + I lexus
- 0x002ce984, // n0x0263 c0x0000 (---------------) + I lgbt
- 0x306008c2, // n0x0264 c0x00c1 (n0x1265-n0x1266) + I li
- 0x002ee607, // n0x0265 c0x0000 (---------------) + I liaison
- 0x002aadc4, // n0x0266 c0x0000 (---------------) + I lidl
- 0x00247844, // n0x0267 c0x0000 (---------------) + I life
- 0x0031c64d, // n0x0268 c0x0000 (---------------) + I lifeinsurance
- 0x00247849, // n0x0269 c0x0000 (---------------) + I lifestyle
- 0x00236dc8, // n0x026a c0x0000 (---------------) + I lighting
- 0x00261684, // n0x026b c0x0000 (---------------) + I like
- 0x002edc87, // n0x026c c0x0000 (---------------) + I limited
- 0x002ee1c4, // n0x026d c0x0000 (---------------) + I limo
- 0x00251e07, // n0x026e c0x0000 (---------------) + I lincoln
- 0x0031dc05, // n0x026f c0x0000 (---------------) + I linde
- 0x0031e2c4, // n0x0270 c0x0000 (---------------) + I link
- 0x002bfc05, // n0x0271 c0x0000 (---------------) + I lipsy
- 0x0024b384, // n0x0272 c0x0000 (---------------) + I live
- 0x002d7785, // n0x0273 c0x0000 (---------------) + I lixil
- 0x30a08342, // n0x0274 c0x00c2 (n0x1266-n0x1275) + I lk
- 0x0020ab84, // n0x0275 c0x0000 (---------------) + I loan
- 0x0020ab85, // n0x0276 c0x0000 (---------------) + I loans
- 0x0020af86, // n0x0277 c0x0000 (---------------) + I locker
- 0x00362ac5, // n0x0278 c0x0000 (---------------) + I locus
- 0x002c1ec3, // n0x0279 c0x0000 (---------------) + I lol
- 0x00340906, // n0x027a c0x0000 (---------------) + I london
- 0x00364385, // n0x027b c0x0000 (---------------) + I lotte
- 0x00206505, // n0x027c c0x0000 (---------------) + I lotto
- 0x002123c4, // n0x027d c0x0000 (---------------) + I love
- 0x30e76e02, // n0x027e c0x00c3 (n0x1275-n0x127a) + I lr
- 0x31202d42, // n0x027f c0x00c4 (n0x127a-n0x127c) + I ls
- 0x31605ec2, // n0x0280 c0x00c5 (n0x127c-n0x127e) + I lt
- 0x003413c3, // n0x0281 c0x0000 (---------------) + I ltd
- 0x003413c4, // n0x0282 c0x0000 (---------------) + I ltda
- 0x31a071c2, // n0x0283 c0x00c6 (n0x127e-n0x127f) + I lu
- 0x0036be05, // n0x0284 c0x0000 (---------------) + I lupin
- 0x00222d84, // n0x0285 c0x0000 (---------------) + I luxe
- 0x00225dc6, // n0x0286 c0x0000 (---------------) + I luxury
- 0x31e27f02, // n0x0287 c0x00c7 (n0x127f-n0x1288) + I lv
- 0x32228b42, // n0x0288 c0x00c8 (n0x1288-n0x1291) + I ly
- 0x32604302, // n0x0289 c0x00c9 (n0x1291-n0x1297) + I ma
- 0x00300a86, // n0x028a c0x0000 (---------------) + I madrid
- 0x0032a984, // n0x028b c0x0000 (---------------) + I maif
- 0x0033c9c6, // n0x028c c0x0000 (---------------) + I maison
- 0x0026a746, // n0x028d c0x0000 (---------------) + I makeup
- 0x00206903, // n0x028e c0x0000 (---------------) + I man
- 0x00351aca, // n0x028f c0x0000 (---------------) + I management
- 0x0022a685, // n0x0290 c0x0000 (---------------) + I mango
- 0x0029bcc6, // n0x0291 c0x0000 (---------------) + I market
- 0x00357049, // n0x0292 c0x0000 (---------------) + I marketing
- 0x0029bcc7, // n0x0293 c0x0000 (---------------) + I markets
- 0x0027c808, // n0x0294 c0x0000 (---------------) + I marriott
- 0x00271143, // n0x0295 c0x0000 (---------------) + I mba
- 0x32a3a6c2, // n0x0296 c0x00ca (n0x1297-n0x1299) + I mc
- 0x32e38602, // n0x0297 c0x00cb (n0x1299-n0x129a) + I md
- 0x33208942, // n0x0298 c0x00cc (n0x129a-n0x12a2) + I me
- 0x002dc385, // n0x0299 c0x0000 (---------------) + I media
- 0x00282f44, // n0x029a c0x0000 (---------------) + I meet
- 0x0020fe89, // n0x029b c0x0000 (---------------) + I melbourne
- 0x003121c4, // n0x029c c0x0000 (---------------) + I meme
- 0x002edac8, // n0x029d c0x0000 (---------------) + I memorial
- 0x00208943, // n0x029e c0x0000 (---------------) + I men
- 0x0034d804, // n0x029f c0x0000 (---------------) + I menu
- 0x0023a883, // n0x02a0 c0x0000 (---------------) + I meo
- 0x0031c587, // n0x02a1 c0x0000 (---------------) + I metlife
- 0x33608402, // n0x02a2 c0x00cd (n0x12a2-n0x12aa) + I mg
- 0x00249282, // n0x02a3 c0x0000 (---------------) + I mh
- 0x002322c5, // n0x02a4 c0x0000 (---------------) + I miami
- 0x00257ec9, // n0x02a5 c0x0000 (---------------) + I microsoft
- 0x0023fa03, // n0x02a6 c0x0000 (---------------) + I mil
- 0x0026b344, // n0x02a7 c0x0000 (---------------) + I mini
- 0x00246f03, // n0x02a8 c0x0000 (---------------) + I mit
- 0x33b56d82, // n0x02a9 c0x00ce (n0x12aa-n0x12b2) + I mk
- 0x33e0ab42, // n0x02aa c0x00cf (n0x12b2-n0x12b9) + I ml
- 0x002afd83, // n0x02ab c0x0000 (---------------) + I mlb
- 0x00358b83, // n0x02ac c0x0000 (---------------) + I mls
- 0x016035c2, // n0x02ad c0x0005 (---------------)* o I mm
- 0x003679c3, // n0x02ae c0x0000 (---------------) + I mma
- 0x34217082, // n0x02af c0x00d0 (n0x12b9-n0x12bd) + I mn
- 0x00217084, // n0x02b0 c0x0000 (---------------) + I mnet
- 0x34603602, // n0x02b1 c0x00d1 (n0x12bd-n0x12c2) + I mo
- 0x00203604, // n0x02b2 c0x0000 (---------------) + I mobi
- 0x002cc406, // n0x02b3 c0x0000 (---------------) + I mobily
- 0x00208484, // n0x02b4 c0x0000 (---------------) + I moda
- 0x002fb2c3, // n0x02b5 c0x0000 (---------------) + I moe
- 0x0038f703, // n0x02b6 c0x0000 (---------------) + I moi
- 0x0021cfc3, // n0x02b7 c0x0000 (---------------) + I mom
- 0x00230c46, // n0x02b8 c0x0000 (---------------) + I monash
- 0x002b6185, // n0x02b9 c0x0000 (---------------) + I money
- 0x00261909, // n0x02ba c0x0000 (---------------) + I montblanc
- 0x002b60c6, // n0x02bb c0x0000 (---------------) + I mormon
- 0x002b66c8, // n0x02bc c0x0000 (---------------) + I mortgage
- 0x002b68c6, // n0x02bd c0x0000 (---------------) + I moscow
- 0x0025cb84, // n0x02be c0x0000 (---------------) + I moto
- 0x0028678b, // n0x02bf c0x0000 (---------------) + I motorcycles
- 0x002b8403, // n0x02c0 c0x0000 (---------------) + I mov
- 0x002b8405, // n0x02c1 c0x0000 (---------------) + I movie
- 0x002b8548, // n0x02c2 c0x0000 (---------------) + I movistar
- 0x00214902, // n0x02c3 c0x0000 (---------------) + I mp
- 0x003279c2, // n0x02c4 c0x0000 (---------------) + I mq
- 0x34adcb42, // n0x02c5 c0x00d2 (n0x12c2-n0x12c4) + I mr
- 0x34e09282, // n0x02c6 c0x00d3 (n0x12c4-n0x12c9) + I ms
- 0x35259642, // n0x02c7 c0x00d4 (n0x12c9-n0x12cd) + I mt
- 0x00259643, // n0x02c8 c0x0000 (---------------) + I mtn
- 0x002b8844, // n0x02c9 c0x0000 (---------------) + I mtpc
- 0x002b9703, // n0x02ca c0x0000 (---------------) + I mtr
- 0x35a000c2, // n0x02cb c0x00d6 (n0x12ce-n0x12d5) + I mu
- 0x002bae0b, // n0x02cc c0x0000 (---------------) + I multichoice
- 0x35ebd646, // n0x02cd c0x00d7 (n0x12d5-n0x14f9) + I museum
- 0x0036d306, // n0x02ce c0x0000 (---------------) + I mutual
- 0x002bdc88, // n0x02cf c0x0000 (---------------) + I mutuelle
- 0x3624ffc2, // n0x02d0 c0x00d8 (n0x14f9-n0x1507) + I mv
- 0x3660a142, // n0x02d1 c0x00d9 (n0x1507-n0x1512) + I mw
- 0x36a0a682, // n0x02d2 c0x00da (n0x1512-n0x1518) + I mx
- 0x36e20282, // n0x02d3 c0x00db (n0x1518-n0x1520) + I my
- 0x372c6c02, // n0x02d4 c0x00dc (n0x1520-n0x1521)* o I mz
- 0x002c6c0b, // n0x02d5 c0x0000 (---------------) + I mzansimagic
- 0x37600282, // n0x02d6 c0x00dd (n0x1521-n0x1532) + I na
- 0x002f3845, // n0x02d7 c0x0000 (---------------) + I nadex
- 0x0032b206, // n0x02d8 c0x0000 (---------------) + I nagoya
- 0x37a98944, // n0x02d9 c0x00de (n0x1532-n0x1534) + I name
- 0x0030cfc7, // n0x02da c0x0000 (---------------) + I naspers
- 0x00240dc6, // n0x02db c0x0000 (---------------) + I natura
- 0x0037fe44, // n0x02dc c0x0000 (---------------) + I navy
- 0x3861c742, // n0x02dd c0x00e1 (n0x1536-n0x1537) + I nc
- 0x00201082, // n0x02de c0x0000 (---------------) + I ne
- 0x00305e83, // n0x02df c0x0000 (---------------) + I nec
- 0x38a170c3, // n0x02e0 c0x00e2 (n0x1537-n0x1568) + I net
- 0x002efe87, // n0x02e1 c0x0000 (---------------) + I netbank
- 0x002d7687, // n0x02e2 c0x0000 (---------------) + I netflix
- 0x00241a47, // n0x02e3 c0x0000 (---------------) + I network
- 0x00319107, // n0x02e4 c0x0000 (---------------) + I neustar
- 0x0021a383, // n0x02e5 c0x0000 (---------------) + I new
- 0x00366d44, // n0x02e6 c0x0000 (---------------) + I news
- 0x00210044, // n0x02e7 c0x0000 (---------------) + I next
- 0x00352aca, // n0x02e8 c0x0000 (---------------) + I nextdirect
- 0x00255985, // n0x02e9 c0x0000 (---------------) + I nexus
- 0x39e00342, // n0x02ea c0x00e7 (n0x1570-n0x157a) + I nf
- 0x3a201282, // n0x02eb c0x00e8 (n0x157a-n0x1583) + I ng
- 0x00202303, // n0x02ec c0x0000 (---------------) + I ngo
- 0x0025aac3, // n0x02ed c0x0000 (---------------) + I nhk
- 0x01603d42, // n0x02ee c0x0005 (---------------)* o I ni
- 0x00369044, // n0x02ef c0x0000 (---------------) + I nico
- 0x00204c45, // n0x02f0 c0x0000 (---------------) + I nikon
- 0x002bbfc5, // n0x02f1 c0x0000 (---------------) + I ninja
- 0x0029c346, // n0x02f2 c0x0000 (---------------) + I nissan
- 0x3aa36482, // n0x02f3 c0x00ea (n0x1584-n0x1587) + I nl
- 0x3ae00c02, // n0x02f4 c0x00eb (n0x1587-n0x185d) + I no
- 0x00201b85, // n0x02f5 c0x0000 (---------------) + I nokia
- 0x0036d012, // n0x02f6 c0x0000 (---------------) + I northwesternmutual
- 0x00204546, // n0x02f7 c0x0000 (---------------) + I norton
- 0x0021c343, // n0x02f8 c0x0000 (---------------) + I now
- 0x0036a0c6, // n0x02f9 c0x0000 (---------------) + I nowruz
- 0x0030b645, // n0x02fa c0x0000 (---------------) + I nowtv
- 0x0160a2c2, // n0x02fb c0x0005 (---------------)* o I np
- 0x43209e82, // n0x02fc c0x010c (n0x1885-n0x188c) + I nr
- 0x002cc1c3, // n0x02fd c0x0000 (---------------) + I nra
- 0x00345903, // n0x02fe c0x0000 (---------------) + I nrw
- 0x00361083, // n0x02ff c0x0000 (---------------) + I ntt
- 0x43605bc2, // n0x0300 c0x010d (n0x188c-n0x188f) + I nu
- 0x00223403, // n0x0301 c0x0000 (---------------) + I nyc
- 0x43a078c2, // n0x0302 c0x010e (n0x188f-n0x189f) + I nz
- 0x00203643, // n0x0303 c0x0000 (---------------) + I obi
- 0x002a5d48, // n0x0304 c0x0000 (---------------) + I observer
- 0x00219c46, // n0x0305 c0x0000 (---------------) + I office
- 0x003954c7, // n0x0306 c0x0000 (---------------) + I okinawa
- 0x002a2686, // n0x0307 c0x0000 (---------------) + I olayan
- 0x002a268b, // n0x0308 c0x0000 (---------------) + I olayangroup
- 0x002dbd04, // n0x0309 c0x0000 (---------------) + I ollo
- 0x44200082, // n0x030a c0x0110 (n0x18a0-n0x18a9) + I om
- 0x0036bc85, // n0x030b c0x0000 (---------------) + I omega
- 0x0021a343, // n0x030c c0x0000 (---------------) + I one
- 0x00292c83, // n0x030d c0x0000 (---------------) + I ong
- 0x003023c3, // n0x030e c0x0000 (---------------) + I onl
- 0x003023c6, // n0x030f c0x0000 (---------------) + I online
- 0x0027b9c3, // n0x0310 c0x0000 (---------------) + I ooo
- 0x0032d686, // n0x0311 c0x0000 (---------------) + I oracle
- 0x002a6246, // n0x0312 c0x0000 (---------------) + I orange
- 0x4461dcc3, // n0x0313 c0x0111 (n0x18a9-n0x18e3) + I org
- 0x00299187, // n0x0314 c0x0000 (---------------) + I organic
- 0x0029a9cd, // n0x0315 c0x0000 (---------------) + I orientexpress
- 0x002864c5, // n0x0316 c0x0000 (---------------) + I osaka
- 0x00239506, // n0x0317 c0x0000 (---------------) + I otsuka
- 0x00206543, // n0x0318 c0x0000 (---------------) + I ott
- 0x00389e43, // n0x0319 c0x0000 (---------------) + I ovh
- 0x45e052c2, // n0x031a c0x0117 (n0x1920-n0x192b) + I pa
- 0x00310fc4, // n0x031b c0x0000 (---------------) + I page
- 0x002fb60c, // n0x031c c0x0000 (---------------) + I pamperedchef
- 0x0022c007, // n0x031d c0x0000 (---------------) + I panerai
- 0x0025b445, // n0x031e c0x0000 (---------------) + I paris
- 0x0028f504, // n0x031f c0x0000 (---------------) + I pars
- 0x00297f88, // n0x0320 c0x0000 (---------------) + I partners
- 0x002c2085, // n0x0321 c0x0000 (---------------) + I parts
- 0x002a2905, // n0x0322 c0x0000 (---------------) + I party
- 0x002a4109, // n0x0323 c0x0000 (---------------) + I passagens
- 0x002ab584, // n0x0324 c0x0000 (---------------) + I payu
- 0x002b88c4, // n0x0325 c0x0000 (---------------) + I pccw
- 0x46214942, // n0x0326 c0x0118 (n0x192b-n0x1933) + I pe
- 0x0021ab43, // n0x0327 c0x0000 (---------------) + I pet
- 0x46764f42, // n0x0328 c0x0119 (n0x1933-n0x1936) + I pf
- 0x016bf182, // n0x0329 c0x0005 (---------------)* o I pg
- 0x46a8f0c2, // n0x032a c0x011a (n0x1936-n0x193e) + I ph
- 0x002dc948, // n0x032b c0x0000 (---------------) + I pharmacy
- 0x002bfb47, // n0x032c c0x0000 (---------------) + I philips
- 0x0028f0c5, // n0x032d c0x0000 (---------------) + I photo
- 0x002c014b, // n0x032e c0x0000 (---------------) + I photography
- 0x002bea86, // n0x032f c0x0000 (---------------) + I photos
- 0x002c0346, // n0x0330 c0x0000 (---------------) + I physio
- 0x002c04c6, // n0x0331 c0x0000 (---------------) + I piaget
- 0x0021ec04, // n0x0332 c0x0000 (---------------) + I pics
- 0x002c0a46, // n0x0333 c0x0000 (---------------) + I pictet
- 0x002c0fc8, // n0x0334 c0x0000 (---------------) + I pictures
- 0x0022c6c3, // n0x0335 c0x0000 (---------------) + I pid
- 0x00243743, // n0x0336 c0x0000 (---------------) + I pin
- 0x00243744, // n0x0337 c0x0000 (---------------) + I ping
- 0x002c1c84, // n0x0338 c0x0000 (---------------) + I pink
- 0x002c3cc5, // n0x0339 c0x0000 (---------------) + I pizza
- 0x46ec3e02, // n0x033a c0x011b (n0x193e-n0x194c) + I pk
- 0x47201e02, // n0x033b c0x011c (n0x194c-n0x19f1) + I pl
- 0x00201e05, // n0x033c c0x0000 (---------------) + I place
- 0x00290d44, // n0x033d c0x0000 (---------------) + I play
- 0x002c61cb, // n0x033e c0x0000 (---------------) + I playstation
- 0x002c7948, // n0x033f c0x0000 (---------------) + I plumbing
- 0x002c7b84, // n0x0340 c0x0000 (---------------) + I plus
- 0x002083c2, // n0x0341 c0x0000 (---------------) + I pm
- 0x47a3df82, // n0x0342 c0x011e (n0x1a20-n0x1a25) + I pn
- 0x0029a743, // n0x0343 c0x0000 (---------------) + I pnc
- 0x002c7fc4, // n0x0344 c0x0000 (---------------) + I pohl
- 0x002c80c5, // n0x0345 c0x0000 (---------------) + I poker
- 0x002c9d84, // n0x0346 c0x0000 (---------------) + I porn
- 0x002b31c4, // n0x0347 c0x0000 (---------------) + I post
- 0x47e18242, // n0x0348 c0x011f (n0x1a25-n0x1a32) + I pr
- 0x0025da85, // n0x0349 c0x0000 (---------------) + I praxi
- 0x0029abc5, // n0x034a c0x0000 (---------------) + I press
- 0x002cad45, // n0x034b c0x0000 (---------------) + I prime
- 0x48218243, // n0x034c c0x0120 (n0x1a32-n0x1a39) + I pro
- 0x002cbe44, // n0x034d c0x0000 (---------------) + I prod
- 0x002cbe4b, // n0x034e c0x0000 (---------------) + I productions
- 0x002cc284, // n0x034f c0x0000 (---------------) + I prof
- 0x002cca85, // n0x0350 c0x0000 (---------------) + I promo
- 0x0021824a, // n0x0351 c0x0000 (---------------) + I properties
- 0x002cce48, // n0x0352 c0x0000 (---------------) + I property
- 0x002cd04a, // n0x0353 c0x0000 (---------------) + I protection
- 0x4861dc02, // n0x0354 c0x0121 (n0x1a39-n0x1a40) + I ps
- 0x48a95982, // n0x0355 c0x0122 (n0x1a40-n0x1a49) + I pt
- 0x00296543, // n0x0356 c0x0000 (---------------) + I pub
- 0x48f8ae42, // n0x0357 c0x0123 (n0x1a49-n0x1a4f) + I pw
- 0x492be202, // n0x0358 c0x0124 (n0x1a4f-n0x1a56) + I py
- 0x496fd8c2, // n0x0359 c0x0125 (n0x1a56-n0x1a5f) + I qa
- 0x002ce804, // n0x035a c0x0000 (---------------) + I qpon
- 0x00211186, // n0x035b c0x0000 (---------------) + I quebec
- 0x00222685, // n0x035c c0x0000 (---------------) + I quest
- 0x00301a06, // n0x035d c0x0000 (---------------) + I racing
- 0x49a030c2, // n0x035e c0x0126 (n0x1a5f-n0x1a63) + I re
- 0x0033d884, // n0x035f c0x0000 (---------------) + I read
- 0x0032e0c7, // n0x0360 c0x0000 (---------------) + I realtor
- 0x0036b3c6, // n0x0361 c0x0000 (---------------) + I realty
- 0x00307487, // n0x0362 c0x0000 (---------------) + I recipes
- 0x00230683, // n0x0363 c0x0000 (---------------) + I red
- 0x0029d908, // n0x0364 c0x0000 (---------------) + I redstone
- 0x003237cb, // n0x0365 c0x0000 (---------------) + I redumbrella
- 0x002730c5, // n0x0366 c0x0000 (---------------) + I rehab
- 0x002e8505, // n0x0367 c0x0000 (---------------) + I reise
- 0x002e8506, // n0x0368 c0x0000 (---------------) + I reisen
- 0x002a45c4, // n0x0369 c0x0000 (---------------) + I reit
- 0x00365b48, // n0x036a c0x0000 (---------------) + I reliance
- 0x00210403, // n0x036b c0x0000 (---------------) + I ren
- 0x00210404, // n0x036c c0x0000 (---------------) + I rent
- 0x00210407, // n0x036d c0x0000 (---------------) + I rentals
- 0x002117c6, // n0x036e c0x0000 (---------------) + I repair
- 0x0030ea86, // n0x036f c0x0000 (---------------) + I report
- 0x002964ca, // n0x0370 c0x0000 (---------------) + I republican
- 0x00237dc4, // n0x0371 c0x0000 (---------------) + I rest
- 0x003386ca, // n0x0372 c0x0000 (---------------) + I restaurant
- 0x0031bd06, // n0x0373 c0x0000 (---------------) + I review
- 0x0031bd07, // n0x0374 c0x0000 (---------------) + I reviews
- 0x00243007, // n0x0375 c0x0000 (---------------) + I rexroth
- 0x002614c4, // n0x0376 c0x0000 (---------------) + I rich
- 0x002614c9, // n0x0377 c0x0000 (---------------) + I richardli
- 0x0024ea05, // n0x0378 c0x0000 (---------------) + I ricoh
- 0x00228f83, // n0x0379 c0x0000 (---------------) + I ril
- 0x0022ad03, // n0x037a c0x0000 (---------------) + I rio
- 0x0021dd83, // n0x037b c0x0000 (---------------) + I rip
- 0x49e00d82, // n0x037c c0x0127 (n0x1a63-n0x1a6f) + I ro
- 0x0028e886, // n0x037d c0x0000 (---------------) + I rocher
- 0x00297105, // n0x037e c0x0000 (---------------) + I rocks
- 0x002c1b45, // n0x037f c0x0000 (---------------) + I rodeo
- 0x0023a144, // n0x0380 c0x0000 (---------------) + I room
- 0x4a2060c2, // n0x0381 c0x0128 (n0x1a6f-n0x1a76) + I rs
- 0x00324a84, // n0x0382 c0x0000 (---------------) + I rsvp
- 0x4a6044c2, // n0x0383 c0x0129 (n0x1a76-n0x1afa) + I ru
- 0x0024f144, // n0x0384 c0x0000 (---------------) + I ruhr
- 0x002044c3, // n0x0385 c0x0000 (---------------) + I run
- 0x4ab0d882, // n0x0386 c0x012a (n0x1afa-n0x1b03) + I rw
- 0x0031d103, // n0x0387 c0x0000 (---------------) + I rwe
- 0x00289606, // n0x0388 c0x0000 (---------------) + I ryukyu
- 0x4ae01a02, // n0x0389 c0x012b (n0x1b03-n0x1b0b) + I sa
- 0x00272608, // n0x038a c0x0000 (---------------) + I saarland
- 0x00234784, // n0x038b c0x0000 (---------------) + I safe
- 0x00234786, // n0x038c c0x0000 (---------------) + I safety
- 0x002f4d46, // n0x038d c0x0000 (---------------) + I sakura
- 0x00244b04, // n0x038e c0x0000 (---------------) + I sale
- 0x00340885, // n0x038f c0x0000 (---------------) + I salon
- 0x00395107, // n0x0390 c0x0000 (---------------) + I samsung
- 0x0029c407, // n0x0391 c0x0000 (---------------) + I sandvik
- 0x0029c40f, // n0x0392 c0x0000 (---------------) + I sandvikcoromant
- 0x002098c6, // n0x0393 c0x0000 (---------------) + I sanofi
- 0x00210583, // n0x0394 c0x0000 (---------------) + I sap
- 0x00210584, // n0x0395 c0x0000 (---------------) + I sapo
- 0x0021d684, // n0x0396 c0x0000 (---------------) + I sarl
- 0x002275c3, // n0x0397 c0x0000 (---------------) + I sas
- 0x00219584, // n0x0398 c0x0000 (---------------) + I save
- 0x002332c4, // n0x0399 c0x0000 (---------------) + I saxo
- 0x4b2046c2, // n0x039a c0x012c (n0x1b0b-n0x1b10) + I sb
- 0x00277ac3, // n0x039b c0x0000 (---------------) + I sbi
- 0x002350c3, // n0x039c c0x0000 (---------------) + I sbs
- 0x4b600982, // n0x039d c0x012d (n0x1b10-n0x1b15) + I sc
- 0x00229183, // n0x039e c0x0000 (---------------) + I sca
- 0x00355d83, // n0x039f c0x0000 (---------------) + I scb
- 0x00206107, // n0x03a0 c0x0000 (---------------) + I schmidt
- 0x0023514c, // n0x03a1 c0x0000 (---------------) + I scholarships
- 0x00235406, // n0x03a2 c0x0000 (---------------) + I school
- 0x002c39c6, // n0x03a3 c0x0000 (---------------) + I schule
- 0x00370987, // n0x03a4 c0x0000 (---------------) + I schwarz
- 0x00223b07, // n0x03a5 c0x0000 (---------------) + I science
- 0x00212fc4, // n0x03a6 c0x0000 (---------------) + I scor
- 0x00237984, // n0x03a7 c0x0000 (---------------) + I scot
- 0x4ba4f842, // n0x03a8 c0x012e (n0x1b15-n0x1b1d) + I sd
- 0x4be02e82, // n0x03a9 c0x012f (n0x1b1d-n0x1b46) + I se
- 0x003004c4, // n0x03aa c0x0000 (---------------) + I seat
- 0x00223f88, // n0x03ab c0x0000 (---------------) + I security
- 0x00267bc4, // n0x03ac c0x0000 (---------------) + I seek
- 0x002ba785, // n0x03ad c0x0000 (---------------) + I sener
- 0x00243bc8, // n0x03ae c0x0000 (---------------) + I services
- 0x002476c3, // n0x03af c0x0000 (---------------) + I sew
- 0x0029acc3, // n0x03b0 c0x0000 (---------------) + I sex
- 0x0029acc4, // n0x03b1 c0x0000 (---------------) + I sexy
- 0x4c262dc2, // n0x03b2 c0x0130 (n0x1b46-n0x1b4d) + I sg
- 0x4c6001c2, // n0x03b3 c0x0131 (n0x1b4d-n0x1b53) + I sh
- 0x00255e05, // n0x03b4 c0x0000 (---------------) + I sharp
- 0x00256344, // n0x03b5 c0x0000 (---------------) + I shaw
- 0x00208c04, // n0x03b6 c0x0000 (---------------) + I shia
- 0x002cb1c7, // n0x03b7 c0x0000 (---------------) + I shiksha
- 0x00369905, // n0x03b8 c0x0000 (---------------) + I shoes
- 0x002b0e86, // n0x03b9 c0x0000 (---------------) + I shouji
- 0x002b3884, // n0x03ba c0x0000 (---------------) + I show
- 0x002b6b87, // n0x03bb c0x0000 (---------------) + I shriram
- 0x4ca09182, // n0x03bc c0x0132 (n0x1b53-n0x1b54) + I si
- 0x0036b904, // n0x03bd c0x0000 (---------------) + I silk
- 0x002914c4, // n0x03be c0x0000 (---------------) + I sina
- 0x00274247, // n0x03bf c0x0000 (---------------) + I singles
- 0x00242b84, // n0x03c0 c0x0000 (---------------) + I site
- 0x0022e942, // n0x03c1 c0x0000 (---------------) + I sj
- 0x4ce07b42, // n0x03c2 c0x0133 (n0x1b54-n0x1b55) + I sk
- 0x00207b43, // n0x03c3 c0x0000 (---------------) + I ski
- 0x002f3384, // n0x03c4 c0x0000 (---------------) + I skin
- 0x00229043, // n0x03c5 c0x0000 (---------------) + I sky
- 0x00229045, // n0x03c6 c0x0000 (---------------) + I skype
- 0x4d212582, // n0x03c7 c0x0134 (n0x1b55-n0x1b5a) + I sl
- 0x0023f582, // n0x03c8 c0x0000 (---------------) + I sm
- 0x0034b305, // n0x03c9 c0x0000 (---------------) + I smile
- 0x4d610b02, // n0x03ca c0x0135 (n0x1b5a-n0x1b62) + I sn
- 0x00310444, // n0x03cb c0x0000 (---------------) + I sncf
- 0x4da01102, // n0x03cc c0x0136 (n0x1b62-n0x1b65) + I so
- 0x00240a06, // n0x03cd c0x0000 (---------------) + I soccer
- 0x002c27c6, // n0x03ce c0x0000 (---------------) + I social
- 0x00258008, // n0x03cf c0x0000 (---------------) + I softbank
- 0x002a6c88, // n0x03d0 c0x0000 (---------------) + I software
- 0x002de604, // n0x03d1 c0x0000 (---------------) + I sohu
- 0x002d0205, // n0x03d2 c0x0000 (---------------) + I solar
- 0x002d9149, // n0x03d3 c0x0000 (---------------) + I solutions
- 0x00364504, // n0x03d4 c0x0000 (---------------) + I song
- 0x002bc184, // n0x03d5 c0x0000 (---------------) + I sony
- 0x00207fc3, // n0x03d6 c0x0000 (---------------) + I soy
- 0x002101c5, // n0x03d7 c0x0000 (---------------) + I space
- 0x00379247, // n0x03d8 c0x0000 (---------------) + I spiegel
- 0x00236a04, // n0x03d9 c0x0000 (---------------) + I spot
- 0x0033d80d, // n0x03da c0x0000 (---------------) + I spreadbetting
- 0x002ceec2, // n0x03db c0x0000 (---------------) + I sr
- 0x002ceec3, // n0x03dc c0x0000 (---------------) + I srl
- 0x4de023c2, // n0x03dd c0x0137 (n0x1b65-n0x1b71) + I st
- 0x0035bf05, // n0x03de c0x0000 (---------------) + I stada
- 0x00232444, // n0x03df c0x0000 (---------------) + I star
- 0x003191c7, // n0x03e0 c0x0000 (---------------) + I starhub
- 0x002b1889, // n0x03e1 c0x0000 (---------------) + I statebank
- 0x0029ca07, // n0x03e2 c0x0000 (---------------) + I statoil
- 0x00264603, // n0x03e3 c0x0000 (---------------) + I stc
- 0x00264608, // n0x03e4 c0x0000 (---------------) + I stcgroup
- 0x00259f09, // n0x03e5 c0x0000 (---------------) + I stockholm
- 0x002cf147, // n0x03e6 c0x0000 (---------------) + I storage
- 0x002cf4c5, // n0x03e7 c0x0000 (---------------) + I store
- 0x002cfc86, // n0x03e8 c0x0000 (---------------) + I studio
- 0x002cfe05, // n0x03e9 c0x0000 (---------------) + I study
- 0x00247945, // n0x03ea c0x0000 (---------------) + I style
- 0x4e203a42, // n0x03eb c0x0138 (n0x1b71-n0x1b91) + I su
- 0x002f0b45, // n0x03ec c0x0000 (---------------) + I sucks
- 0x002acd0a, // n0x03ed c0x0000 (---------------) + I supersport
- 0x002b49c8, // n0x03ee c0x0000 (---------------) + I supplies
- 0x002cccc6, // n0x03ef c0x0000 (---------------) + I supply
- 0x00243e87, // n0x03f0 c0x0000 (---------------) + I support
- 0x00287c84, // n0x03f1 c0x0000 (---------------) + I surf
- 0x00330647, // n0x03f2 c0x0000 (---------------) + I surgery
- 0x002d2f46, // n0x03f3 c0x0000 (---------------) + I suzuki
- 0x4e61d0c2, // n0x03f4 c0x0139 (n0x1b91-n0x1b96) + I sv
- 0x0020ac86, // n0x03f5 c0x0000 (---------------) + I swatch
- 0x002d6685, // n0x03f6 c0x0000 (---------------) + I swiss
- 0x4ead6b42, // n0x03f7 c0x013a (n0x1b96-n0x1b97) + I sx
- 0x4ee84ec2, // n0x03f8 c0x013b (n0x1b97-n0x1b9d) + I sy
- 0x00368086, // n0x03f9 c0x0000 (---------------) + I sydney
- 0x0029d448, // n0x03fa c0x0000 (---------------) + I symantec
- 0x00392447, // n0x03fb c0x0000 (---------------) + I systems
- 0x4f207582, // n0x03fc c0x013c (n0x1b9d-n0x1ba0) + I sz
- 0x0020c083, // n0x03fd c0x0000 (---------------) + I tab
- 0x00382f46, // n0x03fe c0x0000 (---------------) + I taipei
- 0x00216944, // n0x03ff c0x0000 (---------------) + I talk
- 0x003879c6, // n0x0400 c0x0000 (---------------) + I taobao
- 0x0031cbca, // n0x0401 c0x0000 (---------------) + I tatamotors
- 0x0031df05, // n0x0402 c0x0000 (---------------) + I tatar
- 0x0020f886, // n0x0403 c0x0000 (---------------) + I tattoo
- 0x00217c43, // n0x0404 c0x0000 (---------------) + I tax
- 0x00217c44, // n0x0405 c0x0000 (---------------) + I taxi
- 0x0020ad42, // n0x0406 c0x0000 (---------------) + I tc
- 0x002f4203, // n0x0407 c0x0000 (---------------) + I tci
- 0x4f600682, // n0x0408 c0x013d (n0x1ba0-n0x1ba1) + I td
- 0x002c9803, // n0x0409 c0x0000 (---------------) + I tdk
- 0x00354144, // n0x040a c0x0000 (---------------) + I team
- 0x0029d584, // n0x040b c0x0000 (---------------) + I tech
- 0x0029d58a, // n0x040c c0x0000 (---------------) + I technology
- 0x0022ba83, // n0x040d c0x0000 (---------------) + I tel
- 0x002734c8, // n0x040e c0x0000 (---------------) + I telecity
- 0x00250a0a, // n0x040f c0x0000 (---------------) + I telefonica
- 0x00325507, // n0x0410 c0x0000 (---------------) + I temasek
- 0x002dab46, // n0x0411 c0x0000 (---------------) + I tennis
- 0x0033f0c4, // n0x0412 c0x0000 (---------------) + I teva
- 0x0027e202, // n0x0413 c0x0000 (---------------) + I tf
- 0x0021e342, // n0x0414 c0x0000 (---------------) + I tg
- 0x4fa01d82, // n0x0415 c0x013e (n0x1ba1-n0x1ba8) + I th
- 0x00235c83, // n0x0416 c0x0000 (---------------) + I thd
- 0x002f9147, // n0x0417 c0x0000 (---------------) + I theater
- 0x00242d87, // n0x0418 c0x0000 (---------------) + I theatre
- 0x00377f8b, // n0x0419 c0x0000 (---------------) + I theguardian
- 0x00340707, // n0x041a c0x0000 (---------------) + I tickets
- 0x0021bb06, // n0x041b c0x0000 (---------------) + I tienda
- 0x00375107, // n0x041c c0x0000 (---------------) + I tiffany
- 0x00354984, // n0x041d c0x0000 (---------------) + I tips
- 0x00355585, // n0x041e c0x0000 (---------------) + I tires
- 0x002a4985, // n0x041f c0x0000 (---------------) + I tirol
- 0x4fe02bc2, // n0x0420 c0x013f (n0x1ba8-n0x1bb7) + I tj
- 0x0023a7c2, // n0x0421 c0x0000 (---------------) + I tk
- 0x5020fc42, // n0x0422 c0x0140 (n0x1bb7-n0x1bb8) + I tl
- 0x50608902, // n0x0423 c0x0141 (n0x1bb8-n0x1bc0) + I tm
- 0x0026a9c5, // n0x0424 c0x0000 (---------------) + I tmall
- 0x50a1d1c2, // n0x0425 c0x0142 (n0x1bc0-n0x1bd4) + I tn
- 0x50e01682, // n0x0426 c0x0143 (n0x1bd4-n0x1bda) + I to
- 0x00312e85, // n0x0427 c0x0000 (---------------) + I today
- 0x00316545, // n0x0428 c0x0000 (---------------) + I tokyo
- 0x0020f945, // n0x0429 c0x0000 (---------------) + I tools
- 0x002469c3, // n0x042a c0x0000 (---------------) + I top
- 0x00338cc5, // n0x042b c0x0000 (---------------) + I toray
- 0x002beb47, // n0x042c c0x0000 (---------------) + I toshiba
- 0x00339905, // n0x042d c0x0000 (---------------) + I tours
- 0x0021abc4, // n0x042e c0x0000 (---------------) + I town
- 0x00338906, // n0x042f c0x0000 (---------------) + I toyota
- 0x00247b04, // n0x0430 c0x0000 (---------------) + I toys
- 0x00285142, // n0x0431 c0x0000 (---------------) + I tp
- 0x51202402, // n0x0432 c0x0144 (n0x1bda-n0x1bef) + I tr
- 0x00229a45, // n0x0433 c0x0000 (---------------) + I trade
- 0x0028fe07, // n0x0434 c0x0000 (---------------) + I trading
- 0x002b9748, // n0x0435 c0x0000 (---------------) + I training
- 0x0027f186, // n0x0436 c0x0000 (---------------) + I travel
- 0x0027f18d, // n0x0437 c0x0000 (---------------) + I travelchannel
- 0x00280489, // n0x0438 c0x0000 (---------------) + I travelers
- 0x00280492, // n0x0439 c0x0000 (---------------) + I travelersinsurance
- 0x00313185, // n0x043a c0x0000 (---------------) + I trust
- 0x0034a4c3, // n0x043b c0x0000 (---------------) + I trv
- 0x51e06582, // n0x043c c0x0147 (n0x1bf1-n0x1c02) + I tt
- 0x0035a104, // n0x043d c0x0000 (---------------) + I tube
- 0x002d71c3, // n0x043e c0x0000 (---------------) + I tui
- 0x002d83c5, // n0x043f c0x0000 (---------------) + I tunes
- 0x002d8e45, // n0x0440 c0x0000 (---------------) + I tushu
- 0x5220bf42, // n0x0441 c0x0148 (n0x1c02-n0x1c06) + I tv
- 0x0020bf43, // n0x0442 c0x0000 (---------------) + I tvs
- 0x52641ac2, // n0x0443 c0x0149 (n0x1c06-n0x1c14) + I tw
- 0x52a17142, // n0x0444 c0x014a (n0x1c14-n0x1c20) + I tz
- 0x52e17d82, // n0x0445 c0x014b (n0x1c20-n0x1c6e) + I ua
- 0x0032ba03, // n0x0446 c0x0000 (---------------) + I ubs
- 0x53205082, // n0x0447 c0x014c (n0x1c6e-n0x1c77) + I ug
- 0x5360cf02, // n0x0448 c0x014d (n0x1c77-n0x1c82) + I uk
- 0x0029f04a, // n0x0449 c0x0000 (---------------) + I university
- 0x00203a83, // n0x044a c0x0000 (---------------) + I uno
- 0x00245543, // n0x044b c0x0000 (---------------) + I uol
- 0x002c16c3, // n0x044c c0x0000 (---------------) + I ups
- 0x54209f42, // n0x044d c0x0150 (n0x1c84-n0x1cc3) + I us
- 0x62606842, // n0x044e c0x0189 (n0x1d66-n0x1d6c) + I uy
- 0x62e018c2, // n0x044f c0x018b (n0x1d6d-n0x1d71) + I uz
- 0x002013c2, // n0x0450 c0x0000 (---------------) + I va
- 0x00340209, // n0x0451 c0x0000 (---------------) + I vacations
- 0x002aba84, // n0x0452 c0x0000 (---------------) + I vana
- 0x6334a542, // n0x0453 c0x018c (n0x1d71-n0x1d77) + I vc
- 0x636014c2, // n0x0454 c0x018d (n0x1d77-n0x1d88) + I ve
- 0x0027d4c5, // n0x0455 c0x0000 (---------------) + I vegas
- 0x00227248, // n0x0456 c0x0000 (---------------) + I ventures
- 0x002d998c, // n0x0457 c0x0000 (---------------) + I versicherung
- 0x0022b9c3, // n0x0458 c0x0000 (---------------) + I vet
- 0x0024ad42, // n0x0459 c0x0000 (---------------) + I vg
- 0x63a13602, // n0x045a c0x018e (n0x1d88-n0x1d8d) + I vi
- 0x002b4346, // n0x045b c0x0000 (---------------) + I viajes
- 0x002db9c5, // n0x045c c0x0000 (---------------) + I video
- 0x002b1403, // n0x045d c0x0000 (---------------) + I vig
- 0x002c7686, // n0x045e c0x0000 (---------------) + I viking
- 0x002dbb06, // n0x045f c0x0000 (---------------) + I villas
- 0x00213603, // n0x0460 c0x0000 (---------------) + I vin
- 0x002dc703, // n0x0461 c0x0000 (---------------) + I vip
- 0x002dd146, // n0x0462 c0x0000 (---------------) + I virgin
- 0x00248b46, // n0x0463 c0x0000 (---------------) + I vision
- 0x002b85c5, // n0x0464 c0x0000 (---------------) + I vista
- 0x002dd6ca, // n0x0465 c0x0000 (---------------) + I vistaprint
- 0x0022cf04, // n0x0466 c0x0000 (---------------) + I viva
- 0x00332eca, // n0x0467 c0x0000 (---------------) + I vlaanderen
- 0x63e08102, // n0x0468 c0x018f (n0x1d8d-n0x1d9a) + I vn
- 0x002716c5, // n0x0469 c0x0000 (---------------) + I vodka
- 0x002e0c8a, // n0x046a c0x0000 (---------------) + I volkswagen
- 0x002e2484, // n0x046b c0x0000 (---------------) + I vote
- 0x002e2586, // n0x046c c0x0000 (---------------) + I voting
- 0x002e2704, // n0x046d c0x0000 (---------------) + I voto
- 0x0030c486, // n0x046e c0x0000 (---------------) + I voyage
- 0x6421d102, // n0x046f c0x0190 (n0x1d9a-n0x1d9e) + I vu
- 0x002a4e86, // n0x0470 c0x0000 (---------------) + I vuelos
- 0x0036cbc5, // n0x0471 c0x0000 (---------------) + I wales
- 0x0038b0c6, // n0x0472 c0x0000 (---------------) + I walter
- 0x003578c4, // n0x0473 c0x0000 (---------------) + I wang
- 0x003578c7, // n0x0474 c0x0000 (---------------) + I wanggou
- 0x00351a06, // n0x0475 c0x0000 (---------------) + I warman
- 0x0020acc5, // n0x0476 c0x0000 (---------------) + I watch
- 0x00293647, // n0x0477 c0x0000 (---------------) + I watches
- 0x00384107, // n0x0478 c0x0000 (---------------) + I weather
- 0x0038410e, // n0x0479 c0x0000 (---------------) + I weatherchannel
- 0x00219fc6, // n0x047a c0x0000 (---------------) + I webcam
- 0x00251cc5, // n0x047b c0x0000 (---------------) + I weber
- 0x002af047, // n0x047c c0x0000 (---------------) + I website
- 0x002d4bc3, // n0x047d c0x0000 (---------------) + I wed
- 0x0031c007, // n0x047e c0x0000 (---------------) + I wedding
- 0x003912c5, // n0x047f c0x0000 (---------------) + I weibo
- 0x0020a184, // n0x0480 c0x0000 (---------------) + I weir
- 0x0021f7c2, // n0x0481 c0x0000 (---------------) + I wf
- 0x002c7207, // n0x0482 c0x0000 (---------------) + I whoswho
- 0x002d2e44, // n0x0483 c0x0000 (---------------) + I wien
- 0x0025a484, // n0x0484 c0x0000 (---------------) + I wiki
- 0x0024910b, // n0x0485 c0x0000 (---------------) + I williamhill
- 0x00213c83, // n0x0486 c0x0000 (---------------) + I win
- 0x002b6a07, // n0x0487 c0x0000 (---------------) + I windows
- 0x00213c84, // n0x0488 c0x0000 (---------------) + I wine
- 0x00231fc3, // n0x0489 c0x0000 (---------------) + I wme
- 0x00241b04, // n0x048a c0x0000 (---------------) + I work
- 0x0029b085, // n0x048b c0x0000 (---------------) + I works
- 0x00314905, // n0x048c c0x0000 (---------------) + I world
- 0x6460ba82, // n0x048d c0x0191 (n0x1d9e-n0x1da5) + I ws
- 0x002e34c3, // n0x048e c0x0000 (---------------) + I wtc
- 0x002e3b03, // n0x048f c0x0000 (---------------) + I wtf
- 0x0020a6c4, // n0x0490 c0x0000 (---------------) + I xbox
- 0x0020a785, // n0x0491 c0x0000 (---------------) + I xerox
- 0x00217cc6, // n0x0492 c0x0000 (---------------) + I xihuan
- 0x00356e83, // n0x0493 c0x0000 (---------------) + I xin
- 0x002358cb, // n0x0494 c0x0000 (---------------) + I xn--11b4c3d
- 0x0023d74b, // n0x0495 c0x0000 (---------------) + I xn--1ck2e1b
- 0x00291d4b, // n0x0496 c0x0000 (---------------) + I xn--1qqw23a
- 0x002bfeca, // n0x0497 c0x0000 (---------------) + I xn--30rr7y
- 0x0033588b, // n0x0498 c0x0000 (---------------) + I xn--3bst00m
- 0x003942cb, // n0x0499 c0x0000 (---------------) + I xn--3ds443g
- 0x0039658c, // n0x049a c0x0000 (---------------) + I xn--3e0b707e
- 0x00397251, // n0x049b c0x0000 (---------------) + I xn--3oq18vl8pn36a
- 0x002e480a, // n0x049c c0x0000 (---------------) + I xn--3pxu8k
- 0x002e4bcb, // n0x049d c0x0000 (---------------) + I xn--42c2d9a
- 0x002e4e8b, // n0x049e c0x0000 (---------------) + I xn--45brj9c
- 0x002e6d4a, // n0x049f c0x0000 (---------------) + I xn--45q11c
- 0x002e780a, // n0x04a0 c0x0000 (---------------) + I xn--4gbrim
- 0x002e8b8e, // n0x04a1 c0x0000 (---------------) + I xn--54b7fta0cc
- 0x002e9e4b, // n0x04a2 c0x0000 (---------------) + I xn--55qw42g
- 0x002ea10a, // n0x04a3 c0x0000 (---------------) + I xn--55qx5d
- 0x002eb14a, // n0x04a4 c0x0000 (---------------) + I xn--5tzm5g
- 0x002eb64b, // n0x04a5 c0x0000 (---------------) + I xn--6frz82g
- 0x002ebb8e, // n0x04a6 c0x0000 (---------------) + I xn--6qq986b3xl
- 0x002ec6cc, // n0x04a7 c0x0000 (---------------) + I xn--80adxhks
- 0x002ecb4b, // n0x04a8 c0x0000 (---------------) + I xn--80ao21a
- 0x002ece0c, // n0x04a9 c0x0000 (---------------) + I xn--80asehdb
- 0x002f108a, // n0x04aa c0x0000 (---------------) + I xn--80aswg
- 0x002f228c, // n0x04ab c0x0000 (---------------) + I xn--8y0a063a
- 0x64af258a, // n0x04ac c0x0192 (n0x1da5-n0x1dab) + I xn--90a3ac
- 0x002f5849, // n0x04ad c0x0000 (---------------) + I xn--90ais
- 0x002f664a, // n0x04ae c0x0000 (---------------) + I xn--9dbq2a
- 0x002f68ca, // n0x04af c0x0000 (---------------) + I xn--9et52u
- 0x002f6b4b, // n0x04b0 c0x0000 (---------------) + I xn--9krt00a
- 0x002fa44e, // n0x04b1 c0x0000 (---------------) + I xn--b4w605ferd
- 0x002fa7d1, // n0x04b2 c0x0000 (---------------) + I xn--bck1b9a5dre4c
- 0x00303289, // n0x04b3 c0x0000 (---------------) + I xn--c1avg
- 0x003034ca, // n0x04b4 c0x0000 (---------------) + I xn--c2br7g
- 0x00303e0b, // n0x04b5 c0x0000 (---------------) + I xn--cck2b3b
- 0x0030618a, // n0x04b6 c0x0000 (---------------) + I xn--cg4bki
- 0x00306d16, // n0x04b7 c0x0000 (---------------) + I xn--clchc0ea0b2g2a9gcd
- 0x003091cb, // n0x04b8 c0x0000 (---------------) + I xn--czr694b
- 0x0030a9ca, // n0x04b9 c0x0000 (---------------) + I xn--czrs0t
- 0x0030d48a, // n0x04ba c0x0000 (---------------) + I xn--czru2d
- 0x0030f2cb, // n0x04bb c0x0000 (---------------) + I xn--d1acj3b
- 0x003125c9, // n0x04bc c0x0000 (---------------) + I xn--d1alf
- 0x0031508d, // n0x04bd c0x0000 (---------------) + I xn--eckvdtc9d
- 0x003167cb, // n0x04be c0x0000 (---------------) + I xn--efvy88h
- 0x003178cb, // n0x04bf c0x0000 (---------------) + I xn--estv75g
- 0x0031828b, // n0x04c0 c0x0000 (---------------) + I xn--fct429k
- 0x00319909, // n0x04c1 c0x0000 (---------------) + I xn--fhbei
- 0x00319f4e, // n0x04c2 c0x0000 (---------------) + I xn--fiq228c5hs
- 0x0031a48a, // n0x04c3 c0x0000 (---------------) + I xn--fiq64b
- 0x0031ec0a, // n0x04c4 c0x0000 (---------------) + I xn--fiqs8s
- 0x0031f0ca, // n0x04c5 c0x0000 (---------------) + I xn--fiqz9s
- 0x0031fa8b, // n0x04c6 c0x0000 (---------------) + I xn--fjq720a
- 0x003202cb, // n0x04c7 c0x0000 (---------------) + I xn--flw351e
- 0x0032058d, // n0x04c8 c0x0000 (---------------) + I xn--fpcrj9c3d
- 0x00321e0d, // n0x04c9 c0x0000 (---------------) + I xn--fzc2c9e2c
- 0x00322dd0, // n0x04ca c0x0000 (---------------) + I xn--fzys8d69uvgm
- 0x0032328b, // n0x04cb c0x0000 (---------------) + I xn--g2xx48c
- 0x00323ecc, // n0x04cc c0x0000 (---------------) + I xn--gckr3f0f
- 0x0032434b, // n0x04cd c0x0000 (---------------) + I xn--gecrj9c
- 0x0032880b, // n0x04ce c0x0000 (---------------) + I xn--h2brj9c
- 0x0032f14b, // n0x04cf c0x0000 (---------------) + I xn--hxt814e
- 0x0032fbcf, // n0x04d0 c0x0000 (---------------) + I xn--i1b6b1a6a2e
- 0x0032ff8b, // n0x04d1 c0x0000 (---------------) + I xn--imr513n
- 0x0033080a, // n0x04d2 c0x0000 (---------------) + I xn--io0a7i
- 0x00331249, // n0x04d3 c0x0000 (---------------) + I xn--j1aef
- 0x003315c9, // n0x04d4 c0x0000 (---------------) + I xn--j1amh
- 0x0033198b, // n0x04d5 c0x0000 (---------------) + I xn--j6w193g
- 0x00331c4e, // n0x04d6 c0x0000 (---------------) + I xn--jlq61u9w7b
- 0x0033354b, // n0x04d7 c0x0000 (---------------) + I xn--jvr189m
- 0x0033444f, // n0x04d8 c0x0000 (---------------) + I xn--kcrx77d1x4a
- 0x00337d8b, // n0x04d9 c0x0000 (---------------) + I xn--kprw13d
- 0x0033804b, // n0x04da c0x0000 (---------------) + I xn--kpry57d
- 0x0033830b, // n0x04db c0x0000 (---------------) + I xn--kpu716f
- 0x00338e0a, // n0x04dc c0x0000 (---------------) + I xn--kput3i
- 0x0033db49, // n0x04dd c0x0000 (---------------) + I xn--l1acc
- 0x00344dcf, // n0x04de c0x0000 (---------------) + I xn--lgbbat1ad8j
- 0x0034978c, // n0x04df c0x0000 (---------------) + I xn--mgb2ddes
- 0x00349c8c, // n0x04e0 c0x0000 (---------------) + I xn--mgb9awbf
- 0x0034a18e, // n0x04e1 c0x0000 (---------------) + I xn--mgba3a3ejt
- 0x0034a88f, // n0x04e2 c0x0000 (---------------) + I xn--mgba3a4f16a
- 0x0034ac4e, // n0x04e3 c0x0000 (---------------) + I xn--mgba3a4fra
- 0x0034b750, // n0x04e4 c0x0000 (---------------) + I xn--mgba7c0bbn0a
- 0x0034bb4e, // n0x04e5 c0x0000 (---------------) + I xn--mgbaam7a8h
- 0x0034c10c, // n0x04e6 c0x0000 (---------------) + I xn--mgbab2bd
- 0x0034c412, // n0x04e7 c0x0000 (---------------) + I xn--mgbai9a5eva00b
- 0x0034f091, // n0x04e8 c0x0000 (---------------) + I xn--mgbai9azgqp6j
- 0x0034f64e, // n0x04e9 c0x0000 (---------------) + I xn--mgbayh7gpa
- 0x0034fa8e, // n0x04ea c0x0000 (---------------) + I xn--mgbb9fbpob
- 0x0034ffce, // n0x04eb c0x0000 (---------------) + I xn--mgbbh1a71e
- 0x0035034f, // n0x04ec c0x0000 (---------------) + I xn--mgbc0a9azcg
- 0x00350713, // n0x04ed c0x0000 (---------------) + I xn--mgberp4a5d4a87g
- 0x00350bd1, // n0x04ee c0x0000 (---------------) + I xn--mgberp4a5d4ar
- 0x0035100c, // n0x04ef c0x0000 (---------------) + I xn--mgbpl2fh
- 0x00351453, // n0x04f0 c0x0000 (---------------) + I xn--mgbqly7c0a67fbc
- 0x00352310, // n0x04f1 c0x0000 (---------------) + I xn--mgbqly7cvafr
- 0x00352e0c, // n0x04f2 c0x0000 (---------------) + I xn--mgbt3dhd
- 0x0035310c, // n0x04f3 c0x0000 (---------------) + I xn--mgbtf8fl
- 0x003535cb, // n0x04f4 c0x0000 (---------------) + I xn--mgbtx2b
- 0x0035588e, // n0x04f5 c0x0000 (---------------) + I xn--mgbx4cd0ab
- 0x00355e8b, // n0x04f6 c0x0000 (---------------) + I xn--mix082f
- 0x003564cb, // n0x04f7 c0x0000 (---------------) + I xn--mix891f
- 0x0035728c, // n0x04f8 c0x0000 (---------------) + I xn--mk1bu44c
- 0x0035c6ca, // n0x04f9 c0x0000 (---------------) + I xn--mxtq1m
- 0x0035ca8c, // n0x04fa c0x0000 (---------------) + I xn--ngbc5azd
- 0x0035cd8c, // n0x04fb c0x0000 (---------------) + I xn--ngbe9e0a
- 0x0035f64b, // n0x04fc c0x0000 (---------------) + I xn--nnx388a
- 0x0035f908, // n0x04fd c0x0000 (---------------) + I xn--node
- 0x00360249, // n0x04fe c0x0000 (---------------) + I xn--nqv7f
- 0x0036024f, // n0x04ff c0x0000 (---------------) + I xn--nqv7fs00ema
- 0x00361f8b, // n0x0500 c0x0000 (---------------) + I xn--nyqy26a
- 0x003633ca, // n0x0501 c0x0000 (---------------) + I xn--o3cw4h
- 0x00364d8c, // n0x0502 c0x0000 (---------------) + I xn--ogbpf8fl
- 0x00366089, // n0x0503 c0x0000 (---------------) + I xn--p1acf
- 0x00366308, // n0x0504 c0x0000 (---------------) + I xn--p1ai
- 0x00366f8b, // n0x0505 c0x0000 (---------------) + I xn--pbt977c
- 0x003676cb, // n0x0506 c0x0000 (---------------) + I xn--pgbs0dh
- 0x00368a8a, // n0x0507 c0x0000 (---------------) + I xn--pssy2u
- 0x00368d0b, // n0x0508 c0x0000 (---------------) + I xn--q9jyb4c
- 0x0036944c, // n0x0509 c0x0000 (---------------) + I xn--qcka1pmc
- 0x0036a988, // n0x050a c0x0000 (---------------) + I xn--qxam
- 0x0037230b, // n0x050b c0x0000 (---------------) + I xn--rhqv96g
- 0x00374d8b, // n0x050c c0x0000 (---------------) + I xn--rovu88b
- 0x0037824b, // n0x050d c0x0000 (---------------) + I xn--s9brj9c
- 0x00379a8b, // n0x050e c0x0000 (---------------) + I xn--ses554g
- 0x00383c8b, // n0x050f c0x0000 (---------------) + I xn--t60b56a
- 0x00383f49, // n0x0510 c0x0000 (---------------) + I xn--tckwe
- 0x00387fca, // n0x0511 c0x0000 (---------------) + I xn--unup4y
- 0x00388f17, // n0x0512 c0x0000 (---------------) + I xn--vermgensberater-ctb
- 0x0038a918, // n0x0513 c0x0000 (---------------) + I xn--vermgensberatung-pwb
- 0x0038dcc9, // n0x0514 c0x0000 (---------------) + I xn--vhquv
- 0x0038f00b, // n0x0515 c0x0000 (---------------) + I xn--vuq861b
- 0x0038fb94, // n0x0516 c0x0000 (---------------) + I xn--w4r85el8fhu5dnra
- 0x0039034a, // n0x0517 c0x0000 (---------------) + I xn--wgbh1c
- 0x0039090a, // n0x0518 c0x0000 (---------------) + I xn--wgbl6a
- 0x00390b8b, // n0x0519 c0x0000 (---------------) + I xn--xhq521b
- 0x00391a90, // n0x051a c0x0000 (---------------) + I xn--xkc2al3hye2a
- 0x00391e91, // n0x051b c0x0000 (---------------) + I xn--xkc2dl3a5ee0h
- 0x0039290a, // n0x051c c0x0000 (---------------) + I xn--y9a3aq
- 0x003938cd, // n0x051d c0x0000 (---------------) + I xn--yfro4i67o
- 0x00393fcd, // n0x051e c0x0000 (---------------) + I xn--ygbi2ammx
- 0x0039688b, // n0x051f c0x0000 (---------------) + I xn--zfr164b
- 0x00397046, // n0x0520 c0x0000 (---------------) + I xperia
- 0x003971c3, // n0x0521 c0x0000 (---------------) + I xxx
- 0x0029ad43, // n0x0522 c0x0000 (---------------) + I xyz
- 0x00269586, // n0x0523 c0x0000 (---------------) + I yachts
- 0x0027b905, // n0x0524 c0x0000 (---------------) + I yahoo
- 0x002151c7, // n0x0525 c0x0000 (---------------) + I yamaxun
- 0x00326dc6, // n0x0526 c0x0000 (---------------) + I yandex
- 0x01614d82, // n0x0527 c0x0005 (---------------)* o I ye
- 0x002e3609, // n0x0528 c0x0000 (---------------) + I yodobashi
- 0x00301804, // n0x0529 c0x0000 (---------------) + I yoga
- 0x0032b5c8, // n0x052a c0x0000 (---------------) + I yokohama
- 0x00235bc3, // n0x052b c0x0000 (---------------) + I you
- 0x0035a047, // n0x052c c0x0000 (---------------) + I youtube
- 0x0022f542, // n0x052d c0x0000 (---------------) + I yt
- 0x00201943, // n0x052e c0x0000 (---------------) + I yun
- 0x64e043c2, // n0x052f c0x0193 (n0x1dab-n0x1dbc) o I za
- 0x002b3106, // n0x0530 c0x0000 (---------------) + I zappos
- 0x002b3c84, // n0x0531 c0x0000 (---------------) + I zara
- 0x00311384, // n0x0532 c0x0000 (---------------) + I zero
- 0x0023b443, // n0x0533 c0x0000 (---------------) + I zip
- 0x0023b445, // n0x0534 c0x0000 (---------------) + I zippo
- 0x016e4582, // n0x0535 c0x0005 (---------------)* o I zm
- 0x002c7ec4, // n0x0536 c0x0000 (---------------) + I zone
- 0x00261407, // n0x0537 c0x0000 (---------------) + I zuerich
- 0x016a0202, // n0x0538 c0x0005 (---------------)* o I zw
- 0x00222ac3, // n0x0539 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x053a c0x0000 (---------------) + I edu
- 0x0021e283, // n0x053b c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x053c c0x0000 (---------------) + I mil
- 0x002170c3, // n0x053d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x053e c0x0000 (---------------) + I org
- 0x00207cc3, // n0x053f c0x0000 (---------------) + I nom
- 0x00201e82, // n0x0540 c0x0000 (---------------) + I ac
- 0x000e4188, // n0x0541 c0x0000 (---------------) + blogspot
- 0x00200742, // n0x0542 c0x0000 (---------------) + I co
- 0x0021e283, // n0x0543 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x0544 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x0545 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0546 c0x0000 (---------------) + I org
- 0x00206103, // n0x0547 c0x0000 (---------------) + I sch
- 0x002ffad6, // n0x0548 c0x0000 (---------------) + I accident-investigation
- 0x00301f93, // n0x0549 c0x0000 (---------------) + I accident-prevention
- 0x00340589, // n0x054a c0x0000 (---------------) + I aerobatic
- 0x002751c8, // n0x054b c0x0000 (---------------) + I aeroclub
- 0x0036bb09, // n0x054c c0x0000 (---------------) + I aerodrome
- 0x002e0e06, // n0x054d c0x0000 (---------------) + I agents
- 0x0032cf10, // n0x054e c0x0000 (---------------) + I air-surveillance
- 0x00211893, // n0x054f c0x0000 (---------------) + I air-traffic-control
- 0x002fb3c8, // n0x0550 c0x0000 (---------------) + I aircraft
- 0x00262307, // n0x0551 c0x0000 (---------------) + I airline
- 0x00266e47, // n0x0552 c0x0000 (---------------) + I airport
- 0x0028bd4a, // n0x0553 c0x0000 (---------------) + I airtraffic
- 0x003541c9, // n0x0554 c0x0000 (---------------) + I ambulance
- 0x00309f89, // n0x0555 c0x0000 (---------------) + I amusement
- 0x002bbacb, // n0x0556 c0x0000 (---------------) + I association
- 0x002f8406, // n0x0557 c0x0000 (---------------) + I author
- 0x002ed6ca, // n0x0558 c0x0000 (---------------) + I ballooning
- 0x00218046, // n0x0559 c0x0000 (---------------) + I broker
- 0x00301403, // n0x055a c0x0000 (---------------) + I caa
- 0x002dc1c5, // n0x055b c0x0000 (---------------) + I cargo
- 0x003246c8, // n0x055c c0x0000 (---------------) + I catering
- 0x00240acd, // n0x055d c0x0000 (---------------) + I certification
- 0x0032cacc, // n0x055e c0x0000 (---------------) + I championship
- 0x0036c887, // n0x055f c0x0000 (---------------) + I charter
- 0x00328a8d, // n0x0560 c0x0000 (---------------) + I civilaviation
- 0x002752c4, // n0x0561 c0x0000 (---------------) + I club
- 0x0022498a, // n0x0562 c0x0000 (---------------) + I conference
- 0x002255ca, // n0x0563 c0x0000 (---------------) + I consultant
- 0x00225a8a, // n0x0564 c0x0000 (---------------) + I consulting
- 0x00211b87, // n0x0565 c0x0000 (---------------) + I control
- 0x0022cd47, // n0x0566 c0x0000 (---------------) + I council
- 0x00231004, // n0x0567 c0x0000 (---------------) + I crew
- 0x00232f46, // n0x0568 c0x0000 (---------------) + I design
- 0x002727c4, // n0x0569 c0x0000 (---------------) + I dgca
- 0x00336208, // n0x056a c0x0000 (---------------) + I educator
- 0x00343bc9, // n0x056b c0x0000 (---------------) + I emergency
- 0x002a8a86, // n0x056c c0x0000 (---------------) + I engine
- 0x002a8a88, // n0x056d c0x0000 (---------------) + I engineer
- 0x00233a4d, // n0x056e c0x0000 (---------------) + I entertainment
- 0x0021f909, // n0x056f c0x0000 (---------------) + I equipment
- 0x002f3908, // n0x0570 c0x0000 (---------------) + I exchange
- 0x0029ab47, // n0x0571 c0x0000 (---------------) + I express
- 0x0026ac0a, // n0x0572 c0x0000 (---------------) + I federation
- 0x0023b146, // n0x0573 c0x0000 (---------------) + I flight
- 0x00248ec7, // n0x0574 c0x0000 (---------------) + I freight
- 0x0024d004, // n0x0575 c0x0000 (---------------) + I fuel
- 0x00256007, // n0x0576 c0x0000 (---------------) + I gliding
- 0x00259a0a, // n0x0577 c0x0000 (---------------) + I government
- 0x0037868e, // n0x0578 c0x0000 (---------------) + I groundhandling
- 0x002646c5, // n0x0579 c0x0000 (---------------) + I group
- 0x0038718b, // n0x057a c0x0000 (---------------) + I hanggliding
- 0x00278ac9, // n0x057b c0x0000 (---------------) + I homebuilt
- 0x002806c9, // n0x057c c0x0000 (---------------) + I insurance
- 0x00202987, // n0x057d c0x0000 (---------------) + I journal
- 0x0020298a, // n0x057e c0x0000 (---------------) + I journalist
- 0x00274187, // n0x057f c0x0000 (---------------) + I leasing
- 0x002127c9, // n0x0580 c0x0000 (---------------) + I logistics
- 0x00395948, // n0x0581 c0x0000 (---------------) + I magazine
- 0x002a0c8b, // n0x0582 c0x0000 (---------------) + I maintenance
- 0x003117cb, // n0x0583 c0x0000 (---------------) + I marketplace
- 0x002dc385, // n0x0584 c0x0000 (---------------) + I media
- 0x00236c8a, // n0x0585 c0x0000 (---------------) + I microlight
- 0x002371c9, // n0x0586 c0x0000 (---------------) + I modelling
- 0x00354cca, // n0x0587 c0x0000 (---------------) + I navigation
- 0x0022948b, // n0x0588 c0x0000 (---------------) + I parachuting
- 0x00255f0b, // n0x0589 c0x0000 (---------------) + I paragliding
- 0x002bb855, // n0x058a c0x0000 (---------------) + I passenger-association
- 0x002c1505, // n0x058b c0x0000 (---------------) + I pilot
- 0x0029abc5, // n0x058c c0x0000 (---------------) + I press
- 0x002cbe4a, // n0x058d c0x0000 (---------------) + I production
- 0x002e634a, // n0x058e c0x0000 (---------------) + I recreation
- 0x002e0107, // n0x058f c0x0000 (---------------) + I repbody
- 0x00215503, // n0x0590 c0x0000 (---------------) + I res
- 0x00296808, // n0x0591 c0x0000 (---------------) + I research
- 0x002bc30a, // n0x0592 c0x0000 (---------------) + I rotorcraft
- 0x00234786, // n0x0593 c0x0000 (---------------) + I safety
- 0x0023f089, // n0x0594 c0x0000 (---------------) + I scientist
- 0x00243bc8, // n0x0595 c0x0000 (---------------) + I services
- 0x002b3884, // n0x0596 c0x0000 (---------------) + I show
- 0x00253c09, // n0x0597 c0x0000 (---------------) + I skydiving
- 0x002a6c88, // n0x0598 c0x0000 (---------------) + I software
- 0x00298587, // n0x0599 c0x0000 (---------------) + I student
- 0x00217c44, // n0x059a c0x0000 (---------------) + I taxi
- 0x00229a46, // n0x059b c0x0000 (---------------) + I trader
- 0x0028fe07, // n0x059c c0x0000 (---------------) + I trading
- 0x0028aec7, // n0x059d c0x0000 (---------------) + I trainer
- 0x00230a45, // n0x059e c0x0000 (---------------) + I union
- 0x002e04cc, // n0x059f c0x0000 (---------------) + I workinggroup
- 0x0029b085, // n0x05a0 c0x0000 (---------------) + I works
- 0x00222ac3, // n0x05a1 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x05a2 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x05a3 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x05a4 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x05a5 c0x0000 (---------------) + I org
- 0x00200742, // n0x05a6 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x05a7 c0x0000 (---------------) + I com
- 0x002170c3, // n0x05a8 c0x0000 (---------------) + I net
- 0x00207cc3, // n0x05a9 c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x05aa c0x0000 (---------------) + I org
- 0x00222ac3, // n0x05ab c0x0000 (---------------) + I com
- 0x002170c3, // n0x05ac c0x0000 (---------------) + I net
- 0x00219c43, // n0x05ad c0x0000 (---------------) + I off
- 0x0021dcc3, // n0x05ae c0x0000 (---------------) + I org
- 0x000e4188, // n0x05af c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x05b0 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x05b1 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x05b2 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x05b3 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x05b4 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x05b5 c0x0000 (---------------) + I org
- 0x000e4188, // n0x05b6 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x05b7 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x05b8 c0x0000 (---------------) + I edu
- 0x002170c3, // n0x05b9 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x05ba c0x0000 (---------------) + I org
- 0x00200742, // n0x05bb c0x0000 (---------------) + I co
- 0x00203fc2, // n0x05bc c0x0000 (---------------) + I ed
- 0x00225cc2, // n0x05bd c0x0000 (---------------) + I gv
- 0x00206e82, // n0x05be c0x0000 (---------------) + I it
- 0x002003c2, // n0x05bf c0x0000 (---------------) + I og
- 0x00268e82, // n0x05c0 c0x0000 (---------------) + I pb
- 0x04a22ac3, // n0x05c1 c0x0012 (n0x05ca-n0x05cb) + I com
- 0x002d75c3, // n0x05c2 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x05c3 c0x0000 (---------------) + I gob
- 0x0021e283, // n0x05c4 c0x0000 (---------------) + I gov
- 0x00238c03, // n0x05c5 c0x0000 (---------------) + I int
- 0x0023fa03, // n0x05c6 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x05c7 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x05c8 c0x0000 (---------------) + I org
- 0x00227303, // n0x05c9 c0x0000 (---------------) + I tur
- 0x000e4188, // n0x05ca c0x0000 (---------------) + blogspot
- 0x002f5744, // n0x05cb c0x0000 (---------------) + I e164
- 0x0034d5c7, // n0x05cc c0x0000 (---------------) + I in-addr
- 0x00213a43, // n0x05cd c0x0000 (---------------) + I ip6
- 0x00234684, // n0x05ce c0x0000 (---------------) + I iris
- 0x00202803, // n0x05cf c0x0000 (---------------) + I uri
- 0x00202a03, // n0x05d0 c0x0000 (---------------) + I urn
- 0x0021e283, // n0x05d1 c0x0000 (---------------) + I gov
- 0x00201e82, // n0x05d2 c0x0000 (---------------) + I ac
- 0x00110603, // n0x05d3 c0x0000 (---------------) + biz
- 0x05a00742, // n0x05d4 c0x0016 (n0x05d9-n0x05da) + I co
- 0x00225cc2, // n0x05d5 c0x0000 (---------------) + I gv
- 0x00000304, // n0x05d6 c0x0000 (---------------) + info
- 0x00200c42, // n0x05d7 c0x0000 (---------------) + I or
- 0x000cba44, // n0x05d8 c0x0000 (---------------) + priv
- 0x000e4188, // n0x05d9 c0x0000 (---------------) + blogspot
- 0x00226043, // n0x05da c0x0000 (---------------) + I act
- 0x002a00c3, // n0x05db c0x0000 (---------------) + I asn
- 0x06222ac3, // n0x05dc c0x0018 (n0x05ec-n0x05ed) + I com
- 0x00224984, // n0x05dd c0x0000 (---------------) + I conf
- 0x066d75c3, // n0x05de c0x0019 (n0x05ed-n0x05f5) + I edu
- 0x06a1e283, // n0x05df c0x001a (n0x05f5-n0x05fa) + I gov
- 0x00206202, // n0x05e0 c0x0000 (---------------) + I id
- 0x00200304, // n0x05e1 c0x0000 (---------------) + I info
- 0x002170c3, // n0x05e2 c0x0000 (---------------) + I net
- 0x0020ac43, // n0x05e3 c0x0000 (---------------) + I nsw
- 0x00200e02, // n0x05e4 c0x0000 (---------------) + I nt
- 0x0021dcc3, // n0x05e5 c0x0000 (---------------) + I org
- 0x00212bc2, // n0x05e6 c0x0000 (---------------) + I oz
- 0x002ce743, // n0x05e7 c0x0000 (---------------) + I qld
- 0x00201a02, // n0x05e8 c0x0000 (---------------) + I sa
- 0x00200143, // n0x05e9 c0x0000 (---------------) + I tas
- 0x00243c83, // n0x05ea c0x0000 (---------------) + I vic
- 0x00202542, // n0x05eb c0x0000 (---------------) + I wa
- 0x000e4188, // n0x05ec c0x0000 (---------------) + blogspot
- 0x00226043, // n0x05ed c0x0000 (---------------) + I act
- 0x0020ac43, // n0x05ee c0x0000 (---------------) + I nsw
- 0x00200e02, // n0x05ef c0x0000 (---------------) + I nt
- 0x002ce743, // n0x05f0 c0x0000 (---------------) + I qld
- 0x00201a02, // n0x05f1 c0x0000 (---------------) + I sa
- 0x00200143, // n0x05f2 c0x0000 (---------------) + I tas
- 0x00243c83, // n0x05f3 c0x0000 (---------------) + I vic
- 0x00202542, // n0x05f4 c0x0000 (---------------) + I wa
- 0x002ce743, // n0x05f5 c0x0000 (---------------) + I qld
- 0x00201a02, // n0x05f6 c0x0000 (---------------) + I sa
- 0x00200143, // n0x05f7 c0x0000 (---------------) + I tas
- 0x00243c83, // n0x05f8 c0x0000 (---------------) + I vic
- 0x00202542, // n0x05f9 c0x0000 (---------------) + I wa
- 0x00222ac3, // n0x05fa c0x0000 (---------------) + I com
- 0x00310603, // n0x05fb c0x0000 (---------------) + I biz
- 0x00222ac3, // n0x05fc c0x0000 (---------------) + I com
- 0x002d75c3, // n0x05fd c0x0000 (---------------) + I edu
- 0x0021e283, // n0x05fe c0x0000 (---------------) + I gov
- 0x00200304, // n0x05ff c0x0000 (---------------) + I info
- 0x00238c03, // n0x0600 c0x0000 (---------------) + I int
- 0x0023fa03, // n0x0601 c0x0000 (---------------) + I mil
- 0x00298944, // n0x0602 c0x0000 (---------------) + I name
- 0x002170c3, // n0x0603 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0604 c0x0000 (---------------) + I org
- 0x00207742, // n0x0605 c0x0000 (---------------) + I pp
- 0x00218243, // n0x0606 c0x0000 (---------------) + I pro
- 0x000e4188, // n0x0607 c0x0000 (---------------) + blogspot
- 0x00200742, // n0x0608 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x0609 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x060a c0x0000 (---------------) + I edu
- 0x0021e283, // n0x060b c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x060c c0x0000 (---------------) + I mil
- 0x002170c3, // n0x060d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x060e c0x0000 (---------------) + I org
- 0x002060c2, // n0x060f c0x0000 (---------------) + I rs
- 0x00262644, // n0x0610 c0x0000 (---------------) + I unbi
- 0x00201984, // n0x0611 c0x0000 (---------------) + I unsa
- 0x00310603, // n0x0612 c0x0000 (---------------) + I biz
- 0x00200742, // n0x0613 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x0614 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0615 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x0616 c0x0000 (---------------) + I gov
- 0x00200304, // n0x0617 c0x0000 (---------------) + I info
- 0x002170c3, // n0x0618 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0619 c0x0000 (---------------) + I org
- 0x002cf4c5, // n0x061a c0x0000 (---------------) + I store
- 0x0020bf42, // n0x061b c0x0000 (---------------) + I tv
- 0x00201e82, // n0x061c c0x0000 (---------------) + I ac
- 0x000e4188, // n0x061d c0x0000 (---------------) + blogspot
- 0x0021e283, // n0x061e c0x0000 (---------------) + I gov
- 0x00225381, // n0x061f c0x0000 (---------------) + I 0
- 0x00223681, // n0x0620 c0x0000 (---------------) + I 1
- 0x0023d901, // n0x0621 c0x0000 (---------------) + I 2
- 0x00235b01, // n0x0622 c0x0000 (---------------) + I 3
- 0x00235a81, // n0x0623 c0x0000 (---------------) + I 4
- 0x002b1e01, // n0x0624 c0x0000 (---------------) + I 5
- 0x00213ac1, // n0x0625 c0x0000 (---------------) + I 6
- 0x00225481, // n0x0626 c0x0000 (---------------) + I 7
- 0x002e4a01, // n0x0627 c0x0000 (---------------) + I 8
- 0x002e4e01, // n0x0628 c0x0000 (---------------) + I 9
- 0x00200181, // n0x0629 c0x0000 (---------------) + I a
- 0x00200001, // n0x062a c0x0000 (---------------) + I b
- 0x000e4188, // n0x062b c0x0000 (---------------) + blogspot
- 0x00200741, // n0x062c c0x0000 (---------------) + I c
- 0x002005c1, // n0x062d c0x0000 (---------------) + I d
- 0x00200701, // n0x062e c0x0000 (---------------) + I e
- 0x00200381, // n0x062f c0x0000 (---------------) + I f
- 0x00200401, // n0x0630 c0x0000 (---------------) + I g
- 0x00200201, // n0x0631 c0x0000 (---------------) + I h
- 0x00200041, // n0x0632 c0x0000 (---------------) + I i
- 0x00201f81, // n0x0633 c0x0000 (---------------) + I j
- 0x00201001, // n0x0634 c0x0000 (---------------) + I k
- 0x002008c1, // n0x0635 c0x0000 (---------------) + I l
- 0x002000c1, // n0x0636 c0x0000 (---------------) + I m
- 0x00200281, // n0x0637 c0x0000 (---------------) + I n
- 0x00200081, // n0x0638 c0x0000 (---------------) + I o
- 0x00200b01, // n0x0639 c0x0000 (---------------) + I p
- 0x00211181, // n0x063a c0x0000 (---------------) + I q
- 0x00200581, // n0x063b c0x0000 (---------------) + I r
- 0x002001c1, // n0x063c c0x0000 (---------------) + I s
- 0x00200141, // n0x063d c0x0000 (---------------) + I t
- 0x00200101, // n0x063e c0x0000 (---------------) + I u
- 0x002013c1, // n0x063f c0x0000 (---------------) + I v
- 0x00202541, // n0x0640 c0x0000 (---------------) + I w
- 0x00203ec1, // n0x0641 c0x0000 (---------------) + I x
- 0x00200801, // n0x0642 c0x0000 (---------------) + I y
- 0x00201901, // n0x0643 c0x0000 (---------------) + I z
- 0x00222ac3, // n0x0644 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0645 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x0646 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x0647 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0648 c0x0000 (---------------) + I org
- 0x00200742, // n0x0649 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x064a c0x0000 (---------------) + I com
- 0x002d75c3, // n0x064b c0x0000 (---------------) + I edu
- 0x00200c42, // n0x064c c0x0000 (---------------) + I or
- 0x0021dcc3, // n0x064d c0x0000 (---------------) + I org
- 0x00009ac6, // n0x064e c0x0000 (---------------) + dyndns
- 0x00041d4a, // n0x064f c0x0000 (---------------) + for-better
- 0x00076a48, // n0x0650 c0x0000 (---------------) + for-more
- 0x00042348, // n0x0651 c0x0000 (---------------) + for-some
- 0x00042c87, // n0x0652 c0x0000 (---------------) + for-the
- 0x00130f46, // n0x0653 c0x0000 (---------------) + selfip
- 0x00110e86, // n0x0654 c0x0000 (---------------) + webhop
- 0x002729c4, // n0x0655 c0x0000 (---------------) + I asso
- 0x002f4347, // n0x0656 c0x0000 (---------------) + I barreau
- 0x000e4188, // n0x0657 c0x0000 (---------------) + blogspot
- 0x003579c4, // n0x0658 c0x0000 (---------------) + I gouv
- 0x00222ac3, // n0x0659 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x065a c0x0000 (---------------) + I edu
- 0x0021e283, // n0x065b c0x0000 (---------------) + I gov
- 0x002170c3, // n0x065c c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x065d c0x0000 (---------------) + I org
- 0x00222ac3, // n0x065e c0x0000 (---------------) + I com
- 0x002d75c3, // n0x065f c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x0660 c0x0000 (---------------) + I gob
- 0x0021e283, // n0x0661 c0x0000 (---------------) + I gov
- 0x00238c03, // n0x0662 c0x0000 (---------------) + I int
- 0x0023fa03, // n0x0663 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x0664 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0665 c0x0000 (---------------) + I org
- 0x0020bf42, // n0x0666 c0x0000 (---------------) + I tv
- 0x002b2643, // n0x0667 c0x0000 (---------------) + I adm
- 0x002db303, // n0x0668 c0x0000 (---------------) + I adv
- 0x00256e43, // n0x0669 c0x0000 (---------------) + I agr
- 0x00204942, // n0x066a c0x0000 (---------------) + I am
- 0x00323d83, // n0x066b c0x0000 (---------------) + I arq
- 0x00200603, // n0x066c c0x0000 (---------------) + I art
- 0x00201643, // n0x066d c0x0000 (---------------) + I ato
- 0x00200001, // n0x066e c0x0000 (---------------) + I b
- 0x00200003, // n0x066f c0x0000 (---------------) + I bio
- 0x002d0084, // n0x0670 c0x0000 (---------------) + I blog
- 0x0031b803, // n0x0671 c0x0000 (---------------) + I bmd
- 0x002f4243, // n0x0672 c0x0000 (---------------) + I cim
- 0x002dbfc3, // n0x0673 c0x0000 (---------------) + I cng
- 0x002211c3, // n0x0674 c0x0000 (---------------) + I cnt
- 0x0a622ac3, // n0x0675 c0x0029 (n0x06ad-n0x06ae) + I com
- 0x00228d44, // n0x0676 c0x0000 (---------------) + I coop
- 0x00305ec3, // n0x0677 c0x0000 (---------------) + I ecn
- 0x00200703, // n0x0678 c0x0000 (---------------) + I eco
- 0x002d75c3, // n0x0679 c0x0000 (---------------) + I edu
- 0x00226343, // n0x067a c0x0000 (---------------) + I emp
- 0x002674c3, // n0x067b c0x0000 (---------------) + I eng
- 0x0028cac3, // n0x067c c0x0000 (---------------) + I esp
- 0x002f41c3, // n0x067d c0x0000 (---------------) + I etc
- 0x0021bac3, // n0x067e c0x0000 (---------------) + I eti
- 0x0021f803, // n0x067f c0x0000 (---------------) + I far
- 0x0023bdc4, // n0x0680 c0x0000 (---------------) + I flog
- 0x00358002, // n0x0681 c0x0000 (---------------) + I fm
- 0x002416c3, // n0x0682 c0x0000 (---------------) + I fnd
- 0x00247a83, // n0x0683 c0x0000 (---------------) + I fot
- 0x002645c3, // n0x0684 c0x0000 (---------------) + I fst
- 0x0036f1c3, // n0x0685 c0x0000 (---------------) + I g12
- 0x00311b83, // n0x0686 c0x0000 (---------------) + I ggf
- 0x0021e283, // n0x0687 c0x0000 (---------------) + I gov
- 0x002b7c43, // n0x0688 c0x0000 (---------------) + I imb
- 0x00215703, // n0x0689 c0x0000 (---------------) + I ind
- 0x00200303, // n0x068a c0x0000 (---------------) + I inf
- 0x00202c03, // n0x068b c0x0000 (---------------) + I jor
- 0x002de8c3, // n0x068c c0x0000 (---------------) + I jus
- 0x0021e843, // n0x068d c0x0000 (---------------) + I leg
- 0x002e3403, // n0x068e c0x0000 (---------------) + I lel
- 0x0020f583, // n0x068f c0x0000 (---------------) + I mat
- 0x0020b403, // n0x0690 c0x0000 (---------------) + I med
- 0x0023fa03, // n0x0691 c0x0000 (---------------) + I mil
- 0x00214902, // n0x0692 c0x0000 (---------------) + I mp
- 0x002bc903, // n0x0693 c0x0000 (---------------) + I mus
- 0x002170c3, // n0x0694 c0x0000 (---------------) + I net
- 0x01607cc3, // n0x0695 c0x0005 (---------------)* o I nom
- 0x0023fdc3, // n0x0696 c0x0000 (---------------) + I not
- 0x00211c03, // n0x0697 c0x0000 (---------------) + I ntr
- 0x0024f003, // n0x0698 c0x0000 (---------------) + I odo
- 0x0021dcc3, // n0x0699 c0x0000 (---------------) + I org
- 0x002bf143, // n0x069a c0x0000 (---------------) + I ppg
- 0x00218243, // n0x069b c0x0000 (---------------) + I pro
- 0x002353c3, // n0x069c c0x0000 (---------------) + I psc
- 0x002dc783, // n0x069d c0x0000 (---------------) + I psi
- 0x002ce903, // n0x069e c0x0000 (---------------) + I qsl
- 0x00250685, // n0x069f c0x0000 (---------------) + I radio
- 0x002e6343, // n0x06a0 c0x0000 (---------------) + I rec
- 0x002ce943, // n0x06a1 c0x0000 (---------------) + I slg
- 0x002cef83, // n0x06a2 c0x0000 (---------------) + I srv
- 0x00217c44, // n0x06a3 c0x0000 (---------------) + I taxi
- 0x00362ec3, // n0x06a4 c0x0000 (---------------) + I teo
- 0x002fb583, // n0x06a5 c0x0000 (---------------) + I tmp
- 0x00283003, // n0x06a6 c0x0000 (---------------) + I trd
- 0x00227303, // n0x06a7 c0x0000 (---------------) + I tur
- 0x0020bf42, // n0x06a8 c0x0000 (---------------) + I tv
- 0x0022b9c3, // n0x06a9 c0x0000 (---------------) + I vet
- 0x002df504, // n0x06aa c0x0000 (---------------) + I vlog
- 0x0025a484, // n0x06ab c0x0000 (---------------) + I wiki
- 0x0024dc43, // n0x06ac c0x0000 (---------------) + I zlg
- 0x000e4188, // n0x06ad c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x06ae c0x0000 (---------------) + I com
- 0x002d75c3, // n0x06af c0x0000 (---------------) + I edu
- 0x0021e283, // n0x06b0 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x06b1 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x06b2 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x06b3 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x06b4 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x06b5 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x06b6 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x06b7 c0x0000 (---------------) + I org
- 0x00200742, // n0x06b8 c0x0000 (---------------) + I co
- 0x0021dcc3, // n0x06b9 c0x0000 (---------------) + I org
- 0x0ba22ac3, // n0x06ba c0x002e (n0x06be-n0x06bf) + I com
- 0x0021e283, // n0x06bb c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x06bc c0x0000 (---------------) + I mil
- 0x00209982, // n0x06bd c0x0000 (---------------) + I of
- 0x000e4188, // n0x06be c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x06bf c0x0000 (---------------) + I com
- 0x002d75c3, // n0x06c0 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x06c1 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x06c2 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x06c3 c0x0000 (---------------) + I org
- 0x000043c2, // n0x06c4 c0x0000 (---------------) + za
- 0x002004c2, // n0x06c5 c0x0000 (---------------) + I ab
- 0x0021a042, // n0x06c6 c0x0000 (---------------) + I bc
- 0x000e4188, // n0x06c7 c0x0000 (---------------) + blogspot
- 0x00000742, // n0x06c8 c0x0000 (---------------) + co
- 0x00227d42, // n0x06c9 c0x0000 (---------------) + I gc
- 0x00205942, // n0x06ca c0x0000 (---------------) + I mb
- 0x00210d42, // n0x06cb c0x0000 (---------------) + I nb
- 0x00200342, // n0x06cc c0x0000 (---------------) + I nf
- 0x00236482, // n0x06cd c0x0000 (---------------) + I nl
- 0x002019c2, // n0x06ce c0x0000 (---------------) + I ns
- 0x00200e02, // n0x06cf c0x0000 (---------------) + I nt
- 0x00205bc2, // n0x06d0 c0x0000 (---------------) + I nu
- 0x00200dc2, // n0x06d1 c0x0000 (---------------) + I on
- 0x00214942, // n0x06d2 c0x0000 (---------------) + I pe
- 0x00369542, // n0x06d3 c0x0000 (---------------) + I qc
- 0x00207b42, // n0x06d4 c0x0000 (---------------) + I sk
- 0x002202c2, // n0x06d5 c0x0000 (---------------) + I yk
- 0x00085109, // n0x06d6 c0x0000 (---------------) + ftpaccess
- 0x0001208b, // n0x06d7 c0x0000 (---------------) + game-server
- 0x000bea08, // n0x06d8 c0x0000 (---------------) + myphotos
- 0x00043609, // n0x06d9 c0x0000 (---------------) + scrapping
- 0x0021e283, // n0x06da c0x0000 (---------------) + I gov
- 0x000e4188, // n0x06db c0x0000 (---------------) + blogspot
- 0x000e4188, // n0x06dc c0x0000 (---------------) + blogspot
- 0x00201e82, // n0x06dd c0x0000 (---------------) + I ac
- 0x002729c4, // n0x06de c0x0000 (---------------) + I asso
- 0x00200742, // n0x06df c0x0000 (---------------) + I co
- 0x00222ac3, // n0x06e0 c0x0000 (---------------) + I com
- 0x00203fc2, // n0x06e1 c0x0000 (---------------) + I ed
- 0x002d75c3, // n0x06e2 c0x0000 (---------------) + I edu
- 0x00202342, // n0x06e3 c0x0000 (---------------) + I go
- 0x003579c4, // n0x06e4 c0x0000 (---------------) + I gouv
- 0x00238c03, // n0x06e5 c0x0000 (---------------) + I int
- 0x00238602, // n0x06e6 c0x0000 (---------------) + I md
- 0x002170c3, // n0x06e7 c0x0000 (---------------) + I net
- 0x00200c42, // n0x06e8 c0x0000 (---------------) + I or
- 0x0021dcc3, // n0x06e9 c0x0000 (---------------) + I org
- 0x0029abc6, // n0x06ea c0x0000 (---------------) + I presse
- 0x002f710f, // n0x06eb c0x0000 (---------------) + I xn--aroport-bya
- 0x006e3e83, // n0x06ec c0x0001 (---------------) ! I www
- 0x000e4188, // n0x06ed c0x0000 (---------------) + blogspot
- 0x00200742, // n0x06ee c0x0000 (---------------) + I co
- 0x0034eb03, // n0x06ef c0x0000 (---------------) + I gob
- 0x0021e283, // n0x06f0 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x06f1 c0x0000 (---------------) + I mil
- 0x00200742, // n0x06f2 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x06f3 c0x0000 (---------------) + I com
- 0x0021e283, // n0x06f4 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x06f5 c0x0000 (---------------) + I net
- 0x00201e82, // n0x06f6 c0x0000 (---------------) + I ac
- 0x002076c2, // n0x06f7 c0x0000 (---------------) + I ah
- 0x0ea72409, // n0x06f8 c0x003a (n0x0723-n0x0724) o I amazonaws
- 0x00202642, // n0x06f9 c0x0000 (---------------) + I bj
- 0x0f222ac3, // n0x06fa c0x003c (n0x0725-n0x0726) + I com
- 0x0022e082, // n0x06fb c0x0000 (---------------) + I cq
- 0x002d75c3, // n0x06fc c0x0000 (---------------) + I edu
- 0x002241c2, // n0x06fd c0x0000 (---------------) + I fj
- 0x0021b342, // n0x06fe c0x0000 (---------------) + I gd
- 0x0021e283, // n0x06ff c0x0000 (---------------) + I gov
- 0x0026cd02, // n0x0700 c0x0000 (---------------) + I gs
- 0x0023d702, // n0x0701 c0x0000 (---------------) + I gx
- 0x00243802, // n0x0702 c0x0000 (---------------) + I gz
- 0x00202dc2, // n0x0703 c0x0000 (---------------) + I ha
- 0x002f6242, // n0x0704 c0x0000 (---------------) + I hb
- 0x00205202, // n0x0705 c0x0000 (---------------) + I he
- 0x00200202, // n0x0706 c0x0000 (---------------) + I hi
- 0x0022ea02, // n0x0707 c0x0000 (---------------) + I hk
- 0x0020cc02, // n0x0708 c0x0000 (---------------) + I hl
- 0x00217542, // n0x0709 c0x0000 (---------------) + I hn
- 0x00297c82, // n0x070a c0x0000 (---------------) + I jl
- 0x002bdf02, // n0x070b c0x0000 (---------------) + I js
- 0x002fc642, // n0x070c c0x0000 (---------------) + I jx
- 0x0021f442, // n0x070d c0x0000 (---------------) + I ln
- 0x0023fa03, // n0x070e c0x0000 (---------------) + I mil
- 0x00203602, // n0x070f c0x0000 (---------------) + I mo
- 0x002170c3, // n0x0710 c0x0000 (---------------) + I net
- 0x00233c42, // n0x0711 c0x0000 (---------------) + I nm
- 0x0026d802, // n0x0712 c0x0000 (---------------) + I nx
- 0x0021dcc3, // n0x0713 c0x0000 (---------------) + I org
- 0x0022e0c2, // n0x0714 c0x0000 (---------------) + I qh
- 0x00200982, // n0x0715 c0x0000 (---------------) + I sc
- 0x0024f842, // n0x0716 c0x0000 (---------------) + I sd
- 0x002001c2, // n0x0717 c0x0000 (---------------) + I sh
- 0x00210b02, // n0x0718 c0x0000 (---------------) + I sn
- 0x002d6b42, // n0x0719 c0x0000 (---------------) + I sx
- 0x00202bc2, // n0x071a c0x0000 (---------------) + I tj
- 0x00241ac2, // n0x071b c0x0000 (---------------) + I tw
- 0x0020a882, // n0x071c c0x0000 (---------------) + I xj
- 0x002ea10a, // n0x071d c0x0000 (---------------) + I xn--55qx5d
- 0x0033080a, // n0x071e c0x0000 (---------------) + I xn--io0a7i
- 0x0036394a, // n0x071f c0x0000 (---------------) + I xn--od0alg
- 0x00397682, // n0x0720 c0x0000 (---------------) + I xz
- 0x00200802, // n0x0721 c0x0000 (---------------) + I yn
- 0x00243842, // n0x0722 c0x0000 (---------------) + I zj
- 0x0ec23487, // n0x0723 c0x003b (n0x0724-n0x0725) + compute
- 0x00105f0a, // n0x0724 c0x0000 (---------------) + cn-north-1
- 0x0f672409, // n0x0725 c0x003d (n0x0726-n0x0727) o I amazonaws
- 0x0fb05f0a, // n0x0726 c0x003e (n0x0727-n0x0728) o I cn-north-1
- 0x000413c2, // n0x0727 c0x0000 (---------------) + s3
- 0x00246584, // n0x0728 c0x0000 (---------------) + I arts
- 0x10222ac3, // n0x0729 c0x0040 (n0x0735-n0x0736) + I com
- 0x002d75c3, // n0x072a c0x0000 (---------------) + I edu
- 0x00238544, // n0x072b c0x0000 (---------------) + I firm
- 0x0021e283, // n0x072c c0x0000 (---------------) + I gov
- 0x00200304, // n0x072d c0x0000 (---------------) + I info
- 0x00238c03, // n0x072e c0x0000 (---------------) + I int
- 0x0023fa03, // n0x072f c0x0000 (---------------) + I mil
- 0x002170c3, // n0x0730 c0x0000 (---------------) + I net
- 0x00207cc3, // n0x0731 c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x0732 c0x0000 (---------------) + I org
- 0x002e6343, // n0x0733 c0x0000 (---------------) + I rec
- 0x00219fc3, // n0x0734 c0x0000 (---------------) + I web
- 0x000e4188, // n0x0735 c0x0000 (---------------) + blogspot
- 0x000f00c5, // n0x0736 c0x0000 (---------------) + 1kapp
- 0x000f2202, // n0x0737 c0x0000 (---------------) + 4u
- 0x00167c06, // n0x0738 c0x0000 (---------------) + africa
- 0x10a72409, // n0x0739 c0x0042 (n0x07ff-n0x0811) o I amazonaws
- 0x00036947, // n0x073a c0x0000 (---------------) + appspot
- 0x00000602, // n0x073b c0x0000 (---------------) + ar
- 0x00163e4a, // n0x073c c0x0000 (---------------) + betainabox
- 0x000d0087, // n0x073d c0x0000 (---------------) + blogdns
- 0x000e4188, // n0x073e c0x0000 (---------------) + blogspot
- 0x00012e82, // n0x073f c0x0000 (---------------) + br
- 0x0012df87, // n0x0740 c0x0000 (---------------) + cechire
- 0x0013220f, // n0x0741 c0x0000 (---------------) + cloudcontrolapp
- 0x0018d44f, // n0x0742 c0x0000 (---------------) + cloudcontrolled
- 0x000211c2, // n0x0743 c0x0000 (---------------) + cn
- 0x00000742, // n0x0744 c0x0000 (---------------) + co
- 0x0008ca08, // n0x0745 c0x0000 (---------------) + codespot
- 0x000006c2, // n0x0746 c0x0000 (---------------) + de
- 0x00146fc8, // n0x0747 c0x0000 (---------------) + dnsalias
- 0x0006a247, // n0x0748 c0x0000 (---------------) + dnsdojo
- 0x00010a4b, // n0x0749 c0x0000 (---------------) + doesntexist
- 0x0015fdc9, // n0x074a c0x0000 (---------------) + dontexist
- 0x00146ec7, // n0x074b c0x0000 (---------------) + doomdns
- 0x000da58c, // n0x074c c0x0000 (---------------) + dreamhosters
- 0x0015aeca, // n0x074d c0x0000 (---------------) + dyn-o-saur
- 0x000007c8, // n0x074e c0x0000 (---------------) + dynalias
- 0x000b8c0e, // n0x074f c0x0000 (---------------) + dyndns-at-home
- 0x000e024e, // n0x0750 c0x0000 (---------------) + dyndns-at-work
- 0x000cfecb, // n0x0751 c0x0000 (---------------) + dyndns-blog
- 0x00009acb, // n0x0752 c0x0000 (---------------) + dyndns-free
- 0x0000b1cb, // n0x0753 c0x0000 (---------------) + dyndns-home
- 0x00013889, // n0x0754 c0x0000 (---------------) + dyndns-ip
- 0x00018d4b, // n0x0755 c0x0000 (---------------) + dyndns-mail
- 0x00019a8d, // n0x0756 c0x0000 (---------------) + dyndns-office
- 0x0001ea4b, // n0x0757 c0x0000 (---------------) + dyndns-pics
- 0x0001fd0d, // n0x0758 c0x0000 (---------------) + dyndns-remote
- 0x00020d4d, // n0x0759 c0x0000 (---------------) + dyndns-server
- 0x00051b0a, // n0x075a c0x0000 (---------------) + dyndns-web
- 0x0005a2cb, // n0x075b c0x0000 (---------------) + dyndns-wiki
- 0x0009aecb, // n0x075c c0x0000 (---------------) + dyndns-work
- 0x00016650, // n0x075d c0x0000 (---------------) + elasticbeanstalk
- 0x0013c78f, // n0x075e c0x0000 (---------------) + est-a-la-maison
- 0x0002270f, // n0x075f c0x0000 (---------------) + est-a-la-masion
- 0x000144cd, // n0x0760 c0x0000 (---------------) + est-le-patron
- 0x000ef550, // n0x0761 c0x0000 (---------------) + est-mon-blogueur
- 0x0001d5c2, // n0x0762 c0x0000 (---------------) + eu
- 0x0003674b, // n0x0763 c0x0000 (---------------) + firebaseapp
- 0x0003ffc8, // n0x0764 c0x0000 (---------------) + flynnhub
- 0x0004d407, // n0x0765 c0x0000 (---------------) + from-ak
- 0x0004d747, // n0x0766 c0x0000 (---------------) + from-al
- 0x0004d907, // n0x0767 c0x0000 (---------------) + from-ar
- 0x0004dd07, // n0x0768 c0x0000 (---------------) + from-ca
- 0x0004f607, // n0x0769 c0x0000 (---------------) + from-ct
- 0x00050247, // n0x076a c0x0000 (---------------) + from-dc
- 0x00052787, // n0x076b c0x0000 (---------------) + from-de
- 0x00052a47, // n0x076c c0x0000 (---------------) + from-fl
- 0x00054187, // n0x076d c0x0000 (---------------) + from-ga
- 0x00054487, // n0x076e c0x0000 (---------------) + from-hi
- 0x00054ec7, // n0x076f c0x0000 (---------------) + from-ia
- 0x00055087, // n0x0770 c0x0000 (---------------) + from-id
- 0x00055247, // n0x0771 c0x0000 (---------------) + from-il
- 0x00055407, // n0x0772 c0x0000 (---------------) + from-in
- 0x000561c7, // n0x0773 c0x0000 (---------------) + from-ks
- 0x00056787, // n0x0774 c0x0000 (---------------) + from-ky
- 0x00057247, // n0x0775 c0x0000 (---------------) + from-ma
- 0x00057647, // n0x0776 c0x0000 (---------------) + from-md
- 0x00057d87, // n0x0777 c0x0000 (---------------) + from-mi
- 0x00058887, // n0x0778 c0x0000 (---------------) + from-mn
- 0x00058a47, // n0x0779 c0x0000 (---------------) + from-mo
- 0x00059007, // n0x077a c0x0000 (---------------) + from-ms
- 0x00059507, // n0x077b c0x0000 (---------------) + from-mt
- 0x00059707, // n0x077c c0x0000 (---------------) + from-nc
- 0x0005a607, // n0x077d c0x0000 (---------------) + from-nd
- 0x0005a7c7, // n0x077e c0x0000 (---------------) + from-ne
- 0x0005a987, // n0x077f c0x0000 (---------------) + from-nh
- 0x0005b247, // n0x0780 c0x0000 (---------------) + from-nj
- 0x0005b747, // n0x0781 c0x0000 (---------------) + from-nm
- 0x0005c247, // n0x0782 c0x0000 (---------------) + from-nv
- 0x0005c847, // n0x0783 c0x0000 (---------------) + from-oh
- 0x0005cf07, // n0x0784 c0x0000 (---------------) + from-ok
- 0x0005d407, // n0x0785 c0x0000 (---------------) + from-or
- 0x0005d5c7, // n0x0786 c0x0000 (---------------) + from-pa
- 0x0005d947, // n0x0787 c0x0000 (---------------) + from-pr
- 0x0005e307, // n0x0788 c0x0000 (---------------) + from-ri
- 0x0005e687, // n0x0789 c0x0000 (---------------) + from-sc
- 0x0005ea87, // n0x078a c0x0000 (---------------) + from-sd
- 0x000604c7, // n0x078b c0x0000 (---------------) + from-tn
- 0x00060687, // n0x078c c0x0000 (---------------) + from-tx
- 0x00061207, // n0x078d c0x0000 (---------------) + from-ut
- 0x00062947, // n0x078e c0x0000 (---------------) + from-va
- 0x00062f87, // n0x078f c0x0000 (---------------) + from-vt
- 0x00063287, // n0x0790 c0x0000 (---------------) + from-wa
- 0x00063447, // n0x0791 c0x0000 (---------------) + from-wi
- 0x000637c7, // n0x0792 c0x0000 (---------------) + from-wv
- 0x00063a07, // n0x0793 c0x0000 (---------------) + from-wy
- 0x00005a42, // n0x0794 c0x0000 (---------------) + gb
- 0x000c0587, // n0x0795 c0x0000 (---------------) + getmyip
- 0x000b53d1, // n0x0796 c0x0000 (---------------) + githubusercontent
- 0x000cd58a, // n0x0797 c0x0000 (---------------) + googleapis
- 0x0008c88a, // n0x0798 c0x0000 (---------------) + googlecode
- 0x00043a86, // n0x0799 c0x0000 (---------------) + gotdns
- 0x0000dc82, // n0x079a c0x0000 (---------------) + gr
- 0x0008f309, // n0x079b c0x0000 (---------------) + herokuapp
- 0x0007fe89, // n0x079c c0x0000 (---------------) + herokussl
- 0x0002ea02, // n0x079d c0x0000 (---------------) + hk
- 0x0013eeca, // n0x079e c0x0000 (---------------) + hobby-site
- 0x00090ec9, // n0x079f c0x0000 (---------------) + homelinux
- 0x00091b88, // n0x07a0 c0x0000 (---------------) + homeunix
- 0x00017d42, // n0x07a1 c0x0000 (---------------) + hu
- 0x001008c9, // n0x07a2 c0x0000 (---------------) + iamallama
- 0x0005db8e, // n0x07a3 c0x0000 (---------------) + is-a-anarchist
- 0x000d5d8c, // n0x07a4 c0x0000 (---------------) + is-a-blogger
- 0x000bf2cf, // n0x07a5 c0x0000 (---------------) + is-a-bookkeeper
- 0x0017d14e, // n0x07a6 c0x0000 (---------------) + is-a-bulls-fan
- 0x0000cf8c, // n0x07a7 c0x0000 (---------------) + is-a-caterer
- 0x00166909, // n0x07a8 c0x0000 (---------------) + is-a-chef
- 0x00099ad1, // n0x07a9 c0x0000 (---------------) + is-a-conservative
- 0x0009a088, // n0x07aa c0x0000 (---------------) + is-a-cpa
- 0x00169b92, // n0x07ab c0x0000 (---------------) + is-a-cubicle-slave
- 0x0002e40d, // n0x07ac c0x0000 (---------------) + is-a-democrat
- 0x00032e0d, // n0x07ad c0x0000 (---------------) + is-a-designer
- 0x00138acb, // n0x07ae c0x0000 (---------------) + is-a-doctor
- 0x001713d5, // n0x07af c0x0000 (---------------) + is-a-financialadvisor
- 0x00052e49, // n0x07b0 c0x0000 (---------------) + is-a-geek
- 0x0005afca, // n0x07b1 c0x0000 (---------------) + is-a-green
- 0x0005bb09, // n0x07b2 c0x0000 (---------------) + is-a-guru
- 0x00060e10, // n0x07b3 c0x0000 (---------------) + is-a-hard-worker
- 0x00065f4b, // n0x07b4 c0x0000 (---------------) + is-a-hunter
- 0x0006f74f, // n0x07b5 c0x0000 (---------------) + is-a-landscaper
- 0x000702cb, // n0x07b6 c0x0000 (---------------) + is-a-lawyer
- 0x00073b0c, // n0x07b7 c0x0000 (---------------) + is-a-liberal
- 0x00077590, // n0x07b8 c0x0000 (---------------) + is-a-libertarian
- 0x001370ca, // n0x07b9 c0x0000 (---------------) + is-a-llama
- 0x00137a4d, // n0x07ba c0x0000 (---------------) + is-a-musician
- 0x00174a0e, // n0x07bb c0x0000 (---------------) + is-a-nascarfan
- 0x0007bf4a, // n0x07bc c0x0000 (---------------) + is-a-nurse
- 0x0007d0cc, // n0x07bd c0x0000 (---------------) + is-a-painter
- 0x0008ab94, // n0x07be c0x0000 (---------------) + is-a-personaltrainer
- 0x0008ef91, // n0x07bf c0x0000 (---------------) + is-a-photographer
- 0x00090c0b, // n0x07c0 c0x0000 (---------------) + is-a-player
- 0x0009638f, // n0x07c1 c0x0000 (---------------) + is-a-republican
- 0x00096fcd, // n0x07c2 c0x0000 (---------------) + is-a-rockstar
- 0x000c268e, // n0x07c3 c0x0000 (---------------) + is-a-socialist
- 0x0009844c, // n0x07c4 c0x0000 (---------------) + is-a-student
- 0x0009d08c, // n0x07c5 c0x0000 (---------------) + is-a-teacher
- 0x000c238b, // n0x07c6 c0x0000 (---------------) + is-a-techie
- 0x000c3f4e, // n0x07c7 c0x0000 (---------------) + is-a-therapist
- 0x000d7cd0, // n0x07c8 c0x0000 (---------------) + is-an-accountant
- 0x0015d44b, // n0x07c9 c0x0000 (---------------) + is-an-actor
- 0x000a110d, // n0x07ca c0x0000 (---------------) + is-an-actress
- 0x000a768f, // n0x07cb c0x0000 (---------------) + is-an-anarchist
- 0x000a814c, // n0x07cc c0x0000 (---------------) + is-an-artist
- 0x000a890e, // n0x07cd c0x0000 (---------------) + is-an-engineer
- 0x000a97d1, // n0x07ce c0x0000 (---------------) + is-an-entertainer
- 0x00135f8c, // n0x07cf c0x0000 (---------------) + is-certified
- 0x00133a07, // n0x07d0 c0x0000 (---------------) + is-gone
- 0x000b0fcd, // n0x07d1 c0x0000 (---------------) + is-into-anime
- 0x000b918c, // n0x07d2 c0x0000 (---------------) + is-into-cars
- 0x000d1250, // n0x07d3 c0x0000 (---------------) + is-into-cartoons
- 0x000d1f4d, // n0x07d4 c0x0000 (---------------) + is-into-games
- 0x000d3087, // n0x07d5 c0x0000 (---------------) + is-leet
- 0x000d7250, // n0x07d6 c0x0000 (---------------) + is-not-certified
- 0x000f9e48, // n0x07d7 c0x0000 (---------------) + is-slick
- 0x001063cb, // n0x07d8 c0x0000 (---------------) + is-uberleet
- 0x00146b4f, // n0x07d9 c0x0000 (---------------) + is-with-theband
- 0x00191648, // n0x07da c0x0000 (---------------) + isa-geek
- 0x000cd78d, // n0x07db c0x0000 (---------------) + isa-hockeynut
- 0x00159d10, // n0x07dc c0x0000 (---------------) + issmarterthanyou
- 0x0009a703, // n0x07dd c0x0000 (---------------) + jpn
- 0x000034c2, // n0x07de c0x0000 (---------------) + kr
- 0x00061689, // n0x07df c0x0000 (---------------) + likes-pie
- 0x0007878a, // n0x07e0 c0x0000 (---------------) + likescandy
- 0x00032003, // n0x07e1 c0x0000 (---------------) + mex
- 0x001024c8, // n0x07e2 c0x0000 (---------------) + neat-url
- 0x00002f07, // n0x07e3 c0x0000 (---------------) + nfshost
- 0x00000c02, // n0x07e4 c0x0000 (---------------) + no
- 0x0005080a, // n0x07e5 c0x0000 (---------------) + operaunite
- 0x0019238f, // n0x07e6 c0x0000 (---------------) + outsystemscloud
- 0x00110fd2, // n0x07e7 c0x0000 (---------------) + pagespeedmobilizer
- 0x00169542, // n0x07e8 c0x0000 (---------------) + qc
- 0x00132187, // n0x07e9 c0x0000 (---------------) + rhcloud
- 0x00000d82, // n0x07ea c0x0000 (---------------) + ro
- 0x000044c2, // n0x07eb c0x0000 (---------------) + ru
- 0x00001a02, // n0x07ec c0x0000 (---------------) + sa
- 0x0002f650, // n0x07ed c0x0000 (---------------) + saves-the-whales
- 0x00002e82, // n0x07ee c0x0000 (---------------) + se
- 0x00130f46, // n0x07ef c0x0000 (---------------) + selfip
- 0x000c368e, // n0x07f0 c0x0000 (---------------) + sells-for-less
- 0x0007ac8b, // n0x07f1 c0x0000 (---------------) + sells-for-u
- 0x00079088, // n0x07f2 c0x0000 (---------------) + servebbs
- 0x000e0a0a, // n0x07f3 c0x0000 (---------------) + simple-url
- 0x000dc7c7, // n0x07f4 c0x0000 (---------------) + sinaapp
- 0x000101cd, // n0x07f5 c0x0000 (---------------) + space-to-rent
- 0x0010160c, // n0x07f6 c0x0000 (---------------) + teaches-yoga
- 0x0000cf02, // n0x07f7 c0x0000 (---------------) + uk
- 0x00009f42, // n0x07f8 c0x0000 (---------------) + us
- 0x00006842, // n0x07f9 c0x0000 (---------------) + uy
- 0x000dc70a, // n0x07fa c0x0000 (---------------) + vipsinaapp
- 0x000cd48a, // n0x07fb c0x0000 (---------------) + withgoogle
- 0x000e3f0e, // n0x07fc c0x0000 (---------------) + writesthisblog
- 0x000c9948, // n0x07fd c0x0000 (---------------) + yolasite
- 0x000043c2, // n0x07fe c0x0000 (---------------) + za
- 0x10c23487, // n0x07ff c0x0043 (n0x0811-n0x081a) + compute
- 0x11023489, // n0x0800 c0x0044 (n0x081a-n0x081c) + compute-1
- 0x0000a503, // n0x0801 c0x0000 (---------------) + elb
- 0x1172bb4c, // n0x0802 c0x0045 (n0x081c-n0x081d) o I eu-central-1
- 0x000413c2, // n0x0803 c0x0000 (---------------) + s3
- 0x000f0c51, // n0x0804 c0x0000 (---------------) + s3-ap-northeast-1
- 0x000f9411, // n0x0805 c0x0000 (---------------) + s3-ap-southeast-1
- 0x0010a591, // n0x0806 c0x0000 (---------------) + s3-ap-southeast-2
- 0x0012ba8f, // n0x0807 c0x0000 (---------------) + s3-eu-central-1
- 0x00072c0c, // n0x0808 c0x0000 (---------------) + s3-eu-west-1
- 0x0010d14d, // n0x0809 c0x0000 (---------------) + s3-external-1
- 0x0010ef8d, // n0x080a c0x0000 (---------------) + s3-external-2
- 0x0011e6d5, // n0x080b c0x0000 (---------------) + s3-fips-us-gov-west-1
- 0x000413cc, // n0x080c c0x0000 (---------------) + s3-sa-east-1
- 0x000696d0, // n0x080d c0x0000 (---------------) + s3-us-gov-west-1
- 0x0011960c, // n0x080e c0x0000 (---------------) + s3-us-west-1
- 0x000affcc, // n0x080f c0x0000 (---------------) + s3-us-west-2
- 0x0002b6c9, // n0x0810 c0x0000 (---------------) + us-east-1
- 0x000f0d0e, // n0x0811 c0x0000 (---------------) + ap-northeast-1
- 0x000f94ce, // n0x0812 c0x0000 (---------------) + ap-southeast-1
- 0x0010a64e, // n0x0813 c0x0000 (---------------) + ap-southeast-2
- 0x0012bb4c, // n0x0814 c0x0000 (---------------) + eu-central-1
- 0x00072cc9, // n0x0815 c0x0000 (---------------) + eu-west-1
- 0x00041489, // n0x0816 c0x0000 (---------------) + sa-east-1
- 0x0006978d, // n0x0817 c0x0000 (---------------) + us-gov-west-1
- 0x001196c9, // n0x0818 c0x0000 (---------------) + us-west-1
- 0x000b0089, // n0x0819 c0x0000 (---------------) + us-west-2
- 0x000f0043, // n0x081a c0x0000 (---------------) + z-1
- 0x000c8c03, // n0x081b c0x0000 (---------------) + z-2
- 0x000413c2, // n0x081c c0x0000 (---------------) + s3
- 0x00201e82, // n0x081d c0x0000 (---------------) + I ac
- 0x00200742, // n0x081e c0x0000 (---------------) + I co
- 0x00203fc2, // n0x081f c0x0000 (---------------) + I ed
- 0x002099c2, // n0x0820 c0x0000 (---------------) + I fi
- 0x00202342, // n0x0821 c0x0000 (---------------) + I go
- 0x00200c42, // n0x0822 c0x0000 (---------------) + I or
- 0x00201a02, // n0x0823 c0x0000 (---------------) + I sa
- 0x00222ac3, // n0x0824 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0825 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x0826 c0x0000 (---------------) + I gov
- 0x00200303, // n0x0827 c0x0000 (---------------) + I inf
- 0x002170c3, // n0x0828 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0829 c0x0000 (---------------) + I org
- 0x000e4188, // n0x082a c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x082b c0x0000 (---------------) + I com
- 0x002d75c3, // n0x082c c0x0000 (---------------) + I edu
- 0x002170c3, // n0x082d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x082e c0x0000 (---------------) + I org
- 0x00078a43, // n0x082f c0x0000 (---------------) + ath
- 0x0021e283, // n0x0830 c0x0000 (---------------) + I gov
- 0x00201e82, // n0x0831 c0x0000 (---------------) + I ac
- 0x00310603, // n0x0832 c0x0000 (---------------) + I biz
- 0x13222ac3, // n0x0833 c0x004c (n0x083e-n0x083f) + I com
- 0x00267c47, // n0x0834 c0x0000 (---------------) + I ekloges
- 0x0021e283, // n0x0835 c0x0000 (---------------) + I gov
- 0x003413c3, // n0x0836 c0x0000 (---------------) + I ltd
- 0x00298944, // n0x0837 c0x0000 (---------------) + I name
- 0x002170c3, // n0x0838 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0839 c0x0000 (---------------) + I org
- 0x002647ca, // n0x083a c0x0000 (---------------) + I parliament
- 0x0029abc5, // n0x083b c0x0000 (---------------) + I press
- 0x00218243, // n0x083c c0x0000 (---------------) + I pro
- 0x00208902, // n0x083d c0x0000 (---------------) + I tm
- 0x000e4188, // n0x083e c0x0000 (---------------) + blogspot
- 0x000e4188, // n0x083f c0x0000 (---------------) + blogspot
- 0x000e4188, // n0x0840 c0x0000 (---------------) + blogspot
- 0x00022ac3, // n0x0841 c0x0000 (---------------) + com
- 0x0009fe8f, // n0x0842 c0x0000 (---------------) + fuettertdasnetz
- 0x0015ff4a, // n0x0843 c0x0000 (---------------) + isteingeek
- 0x000c2947, // n0x0844 c0x0000 (---------------) + istmein
- 0x00016f4a, // n0x0845 c0x0000 (---------------) + lebtimnetz
- 0x0006cb8a, // n0x0846 c0x0000 (---------------) + leitungsen
- 0x000e8f4d, // n0x0847 c0x0000 (---------------) + traeumtgerade
- 0x000e4188, // n0x0848 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x0849 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x084a c0x0000 (---------------) + I edu
- 0x0021e283, // n0x084b c0x0000 (---------------) + I gov
- 0x002170c3, // n0x084c c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x084d c0x0000 (---------------) + I org
- 0x00200603, // n0x084e c0x0000 (---------------) + I art
- 0x00222ac3, // n0x084f c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0850 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x0851 c0x0000 (---------------) + I gob
- 0x0021e283, // n0x0852 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x0853 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x0854 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0855 c0x0000 (---------------) + I org
- 0x00280043, // n0x0856 c0x0000 (---------------) + I sld
- 0x00219fc3, // n0x0857 c0x0000 (---------------) + I web
- 0x00200603, // n0x0858 c0x0000 (---------------) + I art
- 0x002729c4, // n0x0859 c0x0000 (---------------) + I asso
- 0x00222ac3, // n0x085a c0x0000 (---------------) + I com
- 0x002d75c3, // n0x085b c0x0000 (---------------) + I edu
- 0x0021e283, // n0x085c c0x0000 (---------------) + I gov
- 0x002170c3, // n0x085d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x085e c0x0000 (---------------) + I org
- 0x00218943, // n0x085f c0x0000 (---------------) + I pol
- 0x00222ac3, // n0x0860 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0861 c0x0000 (---------------) + I edu
- 0x00236403, // n0x0862 c0x0000 (---------------) + I fin
- 0x0034eb03, // n0x0863 c0x0000 (---------------) + I gob
- 0x0021e283, // n0x0864 c0x0000 (---------------) + I gov
- 0x00200304, // n0x0865 c0x0000 (---------------) + I info
- 0x00312503, // n0x0866 c0x0000 (---------------) + I k12
- 0x0020b403, // n0x0867 c0x0000 (---------------) + I med
- 0x0023fa03, // n0x0868 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x0869 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x086a c0x0000 (---------------) + I org
- 0x00218243, // n0x086b c0x0000 (---------------) + I pro
- 0x00382f83, // n0x086c c0x0000 (---------------) + I aip
- 0x15622ac3, // n0x086d c0x0055 (n0x0876-n0x0877) + I com
- 0x002d75c3, // n0x086e c0x0000 (---------------) + I edu
- 0x002099c3, // n0x086f c0x0000 (---------------) + I fie
- 0x0021e283, // n0x0870 c0x0000 (---------------) + I gov
- 0x00273c43, // n0x0871 c0x0000 (---------------) + I lib
- 0x0020b403, // n0x0872 c0x0000 (---------------) + I med
- 0x0021dcc3, // n0x0873 c0x0000 (---------------) + I org
- 0x0025f803, // n0x0874 c0x0000 (---------------) + I pri
- 0x00375bc4, // n0x0875 c0x0000 (---------------) + I riik
- 0x000e4188, // n0x0876 c0x0000 (---------------) + blogspot
- 0x15e22ac3, // n0x0877 c0x0057 (n0x0880-n0x0881) + I com
- 0x002d75c3, // n0x0878 c0x0000 (---------------) + I edu
- 0x00291c43, // n0x0879 c0x0000 (---------------) + I eun
- 0x0021e283, // n0x087a c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x087b c0x0000 (---------------) + I mil
- 0x00298944, // n0x087c c0x0000 (---------------) + I name
- 0x002170c3, // n0x087d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x087e c0x0000 (---------------) + I org
- 0x00215583, // n0x087f c0x0000 (---------------) + I sci
- 0x000e4188, // n0x0880 c0x0000 (---------------) + blogspot
- 0x16622ac3, // n0x0881 c0x0059 (n0x0886-n0x0887) + I com
- 0x002d75c3, // n0x0882 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x0883 c0x0000 (---------------) + I gob
- 0x00207cc3, // n0x0884 c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x0885 c0x0000 (---------------) + I org
- 0x000e4188, // n0x0886 c0x0000 (---------------) + blogspot
- 0x00310603, // n0x0887 c0x0000 (---------------) + I biz
- 0x00222ac3, // n0x0888 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0889 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x088a c0x0000 (---------------) + I gov
- 0x00200304, // n0x088b c0x0000 (---------------) + I info
- 0x00298944, // n0x088c c0x0000 (---------------) + I name
- 0x002170c3, // n0x088d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x088e c0x0000 (---------------) + I org
- 0x002f85c5, // n0x088f c0x0000 (---------------) + I aland
- 0x000e4188, // n0x0890 c0x0000 (---------------) + blogspot
- 0x00006743, // n0x0891 c0x0000 (---------------) + iki
- 0x0036e608, // n0x0892 c0x0000 (---------------) + I aeroport
- 0x00383787, // n0x0893 c0x0000 (---------------) + I assedic
- 0x002729c4, // n0x0894 c0x0000 (---------------) + I asso
- 0x00310b86, // n0x0895 c0x0000 (---------------) + I avocat
- 0x0031e586, // n0x0896 c0x0000 (---------------) + I avoues
- 0x000e4188, // n0x0897 c0x0000 (---------------) + blogspot
- 0x0025f743, // n0x0898 c0x0000 (---------------) + I cci
- 0x003011c9, // n0x0899 c0x0000 (---------------) + I chambagri
- 0x00234bd5, // n0x089a c0x0000 (---------------) + I chirurgiens-dentistes
- 0x00222ac3, // n0x089b c0x0000 (---------------) + I com
- 0x0030c7d2, // n0x089c c0x0000 (---------------) + I experts-comptables
- 0x0030c58f, // n0x089d c0x0000 (---------------) + I geometre-expert
- 0x003579c4, // n0x089e c0x0000 (---------------) + I gouv
- 0x0020dc85, // n0x089f c0x0000 (---------------) + I greta
- 0x002de690, // n0x08a0 c0x0000 (---------------) + I huissier-justice
- 0x002753c7, // n0x08a1 c0x0000 (---------------) + I medecin
- 0x00207cc3, // n0x08a2 c0x0000 (---------------) + I nom
- 0x00265c08, // n0x08a3 c0x0000 (---------------) + I notaires
- 0x002e078a, // n0x08a4 c0x0000 (---------------) + I pharmacien
- 0x0021a444, // n0x08a5 c0x0000 (---------------) + I port
- 0x002ca783, // n0x08a6 c0x0000 (---------------) + I prd
- 0x0029abc6, // n0x08a7 c0x0000 (---------------) + I presse
- 0x00208902, // n0x08a8 c0x0000 (---------------) + I tm
- 0x0036b18b, // n0x08a9 c0x0000 (---------------) + I veterinaire
- 0x00222ac3, // n0x08aa c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08ab c0x0000 (---------------) + I edu
- 0x0021e283, // n0x08ac c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x08ad c0x0000 (---------------) + I mil
- 0x002170c3, // n0x08ae c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08af c0x0000 (---------------) + I org
- 0x002ce243, // n0x08b0 c0x0000 (---------------) + I pvt
- 0x00200742, // n0x08b1 c0x0000 (---------------) + I co
- 0x002170c3, // n0x08b2 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08b3 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x08b4 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08b5 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x08b6 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x08b7 c0x0000 (---------------) + I mil
- 0x0021dcc3, // n0x08b8 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x08b9 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08ba c0x0000 (---------------) + I edu
- 0x0021e283, // n0x08bb c0x0000 (---------------) + I gov
- 0x003413c3, // n0x08bc c0x0000 (---------------) + I ltd
- 0x00208483, // n0x08bd c0x0000 (---------------) + I mod
- 0x0021dcc3, // n0x08be c0x0000 (---------------) + I org
- 0x00200742, // n0x08bf c0x0000 (---------------) + I co
- 0x00222ac3, // n0x08c0 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08c1 c0x0000 (---------------) + I edu
- 0x002170c3, // n0x08c2 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08c3 c0x0000 (---------------) + I org
- 0x00201e82, // n0x08c4 c0x0000 (---------------) + I ac
- 0x00222ac3, // n0x08c5 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08c6 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x08c7 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x08c8 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08c9 c0x0000 (---------------) + I org
- 0x002729c4, // n0x08ca c0x0000 (---------------) + I asso
- 0x00222ac3, // n0x08cb c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08cc c0x0000 (---------------) + I edu
- 0x00203604, // n0x08cd c0x0000 (---------------) + I mobi
- 0x002170c3, // n0x08ce c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08cf c0x0000 (---------------) + I org
- 0x000e4188, // n0x08d0 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x08d1 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08d2 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x08d3 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x08d4 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08d5 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x08d6 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08d7 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x08d8 c0x0000 (---------------) + I gob
- 0x00215703, // n0x08d9 c0x0000 (---------------) + I ind
- 0x0023fa03, // n0x08da c0x0000 (---------------) + I mil
- 0x002170c3, // n0x08db c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08dc c0x0000 (---------------) + I org
- 0x00200742, // n0x08dd c0x0000 (---------------) + I co
- 0x00222ac3, // n0x08de c0x0000 (---------------) + I com
- 0x002170c3, // n0x08df c0x0000 (---------------) + I net
- 0x000e4188, // n0x08e0 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x08e1 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08e2 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x08e3 c0x0000 (---------------) + I gov
- 0x00300b83, // n0x08e4 c0x0000 (---------------) + I idv
- 0x00051e43, // n0x08e5 c0x0000 (---------------) + inc
- 0x001413c3, // n0x08e6 c0x0000 (---------------) + ltd
- 0x002170c3, // n0x08e7 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08e8 c0x0000 (---------------) + I org
- 0x002ea10a, // n0x08e9 c0x0000 (---------------) + I xn--55qx5d
- 0x00306ac9, // n0x08ea c0x0000 (---------------) + I xn--ciqpn
- 0x0032788b, // n0x08eb c0x0000 (---------------) + I xn--gmq050i
- 0x00327f0a, // n0x08ec c0x0000 (---------------) + I xn--gmqw5a
- 0x0033080a, // n0x08ed c0x0000 (---------------) + I xn--io0a7i
- 0x0033f6cb, // n0x08ee c0x0000 (---------------) + I xn--lcvr32d
- 0x00356c8a, // n0x08ef c0x0000 (---------------) + I xn--mk0axi
- 0x0035c6ca, // n0x08f0 c0x0000 (---------------) + I xn--mxtq1m
- 0x0036394a, // n0x08f1 c0x0000 (---------------) + I xn--od0alg
- 0x00363bcb, // n0x08f2 c0x0000 (---------------) + I xn--od0aq3b
- 0x00384789, // n0x08f3 c0x0000 (---------------) + I xn--tn0ag
- 0x003867ca, // n0x08f4 c0x0000 (---------------) + I xn--uc0atv
- 0x00386c4b, // n0x08f5 c0x0000 (---------------) + I xn--uc0ay4a
- 0x0039008b, // n0x08f6 c0x0000 (---------------) + I xn--wcvs22d
- 0x0039634a, // n0x08f7 c0x0000 (---------------) + I xn--zf0avx
- 0x00222ac3, // n0x08f8 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x08f9 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x08fa c0x0000 (---------------) + I gob
- 0x0023fa03, // n0x08fb c0x0000 (---------------) + I mil
- 0x002170c3, // n0x08fc c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x08fd c0x0000 (---------------) + I org
- 0x000e4188, // n0x08fe c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x08ff c0x0000 (---------------) + I com
- 0x0024d404, // n0x0900 c0x0000 (---------------) + I from
- 0x00209782, // n0x0901 c0x0000 (---------------) + I iz
- 0x00298944, // n0x0902 c0x0000 (---------------) + I name
- 0x0036b745, // n0x0903 c0x0000 (---------------) + I adult
- 0x00200603, // n0x0904 c0x0000 (---------------) + I art
- 0x002729c4, // n0x0905 c0x0000 (---------------) + I asso
- 0x00222ac3, // n0x0906 c0x0000 (---------------) + I com
- 0x00228d44, // n0x0907 c0x0000 (---------------) + I coop
- 0x002d75c3, // n0x0908 c0x0000 (---------------) + I edu
- 0x00238544, // n0x0909 c0x0000 (---------------) + I firm
- 0x003579c4, // n0x090a c0x0000 (---------------) + I gouv
- 0x00200304, // n0x090b c0x0000 (---------------) + I info
- 0x0020b403, // n0x090c c0x0000 (---------------) + I med
- 0x002170c3, // n0x090d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x090e c0x0000 (---------------) + I org
- 0x0028acc5, // n0x090f c0x0000 (---------------) + I perso
- 0x00218943, // n0x0910 c0x0000 (---------------) + I pol
- 0x00218243, // n0x0911 c0x0000 (---------------) + I pro
- 0x00241283, // n0x0912 c0x0000 (---------------) + I rel
- 0x0029b184, // n0x0913 c0x0000 (---------------) + I shop
- 0x0036f244, // n0x0914 c0x0000 (---------------) + I 2000
- 0x00256e45, // n0x0915 c0x0000 (---------------) + I agrar
- 0x000e4188, // n0x0916 c0x0000 (---------------) + blogspot
- 0x002de404, // n0x0917 c0x0000 (---------------) + I bolt
- 0x002112c6, // n0x0918 c0x0000 (---------------) + I casino
- 0x002735c4, // n0x0919 c0x0000 (---------------) + I city
- 0x00200742, // n0x091a c0x0000 (---------------) + I co
- 0x003128c7, // n0x091b c0x0000 (---------------) + I erotica
- 0x0023a507, // n0x091c c0x0000 (---------------) + I erotika
- 0x00356104, // n0x091d c0x0000 (---------------) + I film
- 0x00246b45, // n0x091e c0x0000 (---------------) + I forum
- 0x002d2145, // n0x091f c0x0000 (---------------) + I games
- 0x00294945, // n0x0920 c0x0000 (---------------) + I hotel
- 0x00200304, // n0x0921 c0x0000 (---------------) + I info
- 0x0032d888, // n0x0922 c0x0000 (---------------) + I ingatlan
- 0x00207486, // n0x0923 c0x0000 (---------------) + I jogasz
- 0x002c1d48, // n0x0924 c0x0000 (---------------) + I konyvelo
- 0x0023b745, // n0x0925 c0x0000 (---------------) + I lakas
- 0x002dc385, // n0x0926 c0x0000 (---------------) + I media
- 0x00366d44, // n0x0927 c0x0000 (---------------) + I news
- 0x0021dcc3, // n0x0928 c0x0000 (---------------) + I org
- 0x002cba44, // n0x0929 c0x0000 (---------------) + I priv
- 0x0033de86, // n0x092a c0x0000 (---------------) + I reklam
- 0x0029acc3, // n0x092b c0x0000 (---------------) + I sex
- 0x0029b184, // n0x092c c0x0000 (---------------) + I shop
- 0x0027cac5, // n0x092d c0x0000 (---------------) + I sport
- 0x00278704, // n0x092e c0x0000 (---------------) + I suli
- 0x0020bac4, // n0x092f c0x0000 (---------------) + I szex
- 0x00208902, // n0x0930 c0x0000 (---------------) + I tm
- 0x0024f786, // n0x0931 c0x0000 (---------------) + I tozsde
- 0x0037a486, // n0x0932 c0x0000 (---------------) + I utazas
- 0x002db9c5, // n0x0933 c0x0000 (---------------) + I video
- 0x00201e82, // n0x0934 c0x0000 (---------------) + I ac
- 0x00310603, // n0x0935 c0x0000 (---------------) + I biz
- 0x1b600742, // n0x0936 c0x006d (n0x093f-n0x0940) + I co
- 0x00227544, // n0x0937 c0x0000 (---------------) + I desa
- 0x00202342, // n0x0938 c0x0000 (---------------) + I go
- 0x0023fa03, // n0x0939 c0x0000 (---------------) + I mil
- 0x00220282, // n0x093a c0x0000 (---------------) + I my
- 0x002170c3, // n0x093b c0x0000 (---------------) + I net
- 0x00200c42, // n0x093c c0x0000 (---------------) + I or
- 0x00206103, // n0x093d c0x0000 (---------------) + I sch
- 0x00219fc3, // n0x093e c0x0000 (---------------) + I web
- 0x000e4188, // n0x093f c0x0000 (---------------) + blogspot
- 0x000e4188, // n0x0940 c0x0000 (---------------) + blogspot
- 0x0021e283, // n0x0941 c0x0000 (---------------) + I gov
- 0x1c200742, // n0x0942 c0x0070 (n0x0943-n0x0944) o I co
- 0x000e4188, // n0x0943 c0x0000 (---------------) + blogspot
- 0x00201e82, // n0x0944 c0x0000 (---------------) + I ac
- 0x1ca00742, // n0x0945 c0x0072 (n0x094b-n0x094d) + I co
- 0x00222ac3, // n0x0946 c0x0000 (---------------) + I com
- 0x002170c3, // n0x0947 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0948 c0x0000 (---------------) + I org
- 0x00206582, // n0x0949 c0x0000 (---------------) + I tt
- 0x0020bf42, // n0x094a c0x0000 (---------------) + I tv
- 0x003413c3, // n0x094b c0x0000 (---------------) + I ltd
- 0x002c65c3, // n0x094c c0x0000 (---------------) + I plc
- 0x00201e82, // n0x094d c0x0000 (---------------) + I ac
- 0x000e4188, // n0x094e c0x0000 (---------------) + blogspot
- 0x00200742, // n0x094f c0x0000 (---------------) + I co
- 0x002d75c3, // n0x0950 c0x0000 (---------------) + I edu
- 0x00238544, // n0x0951 c0x0000 (---------------) + I firm
- 0x002012c3, // n0x0952 c0x0000 (---------------) + I gen
- 0x0021e283, // n0x0953 c0x0000 (---------------) + I gov
- 0x00215703, // n0x0954 c0x0000 (---------------) + I ind
- 0x0023fa03, // n0x0955 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x0956 c0x0000 (---------------) + I net
- 0x0020e3c3, // n0x0957 c0x0000 (---------------) + I nic
- 0x0021dcc3, // n0x0958 c0x0000 (---------------) + I org
- 0x00215503, // n0x0959 c0x0000 (---------------) + I res
- 0x000f7e53, // n0x095a c0x0000 (---------------) + barrel-of-knowledge
- 0x00104094, // n0x095b c0x0000 (---------------) + barrell-of-knowledge
- 0x00009ac6, // n0x095c c0x0000 (---------------) + dyndns
- 0x00042187, // n0x095d c0x0000 (---------------) + for-our
- 0x000f8fc9, // n0x095e c0x0000 (---------------) + groks-the
- 0x0009b5ca, // n0x095f c0x0000 (---------------) + groks-this
- 0x0007690d, // n0x0960 c0x0000 (---------------) + here-for-more
- 0x0009bfca, // n0x0961 c0x0000 (---------------) + knowsitall
- 0x00130f46, // n0x0962 c0x0000 (---------------) + selfip
- 0x00110e86, // n0x0963 c0x0000 (---------------) + webhop
- 0x0021d5c2, // n0x0964 c0x0000 (---------------) + I eu
- 0x00222ac3, // n0x0965 c0x0000 (---------------) + I com
- 0x000b53c6, // n0x0966 c0x0000 (---------------) + github
- 0x000f9303, // n0x0967 c0x0000 (---------------) + nid
- 0x00222ac3, // n0x0968 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0969 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x096a c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x096b c0x0000 (---------------) + I mil
- 0x002170c3, // n0x096c c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x096d c0x0000 (---------------) + I org
- 0x00201e82, // n0x096e c0x0000 (---------------) + I ac
- 0x00200742, // n0x096f c0x0000 (---------------) + I co
- 0x0021e283, // n0x0970 c0x0000 (---------------) + I gov
- 0x00206202, // n0x0971 c0x0000 (---------------) + I id
- 0x002170c3, // n0x0972 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0973 c0x0000 (---------------) + I org
- 0x00206103, // n0x0974 c0x0000 (---------------) + I sch
- 0x0034a88f, // n0x0975 c0x0000 (---------------) + I xn--mgba3a4f16a
- 0x0034ac4e, // n0x0976 c0x0000 (---------------) + I xn--mgba3a4fra
- 0x000e4188, // n0x0977 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x0978 c0x0000 (---------------) + I com
- 0x000356c7, // n0x0979 c0x0000 (---------------) + cupcake
- 0x002d75c3, // n0x097a c0x0000 (---------------) + I edu
- 0x0021e283, // n0x097b c0x0000 (---------------) + I gov
- 0x00238c03, // n0x097c c0x0000 (---------------) + I int
- 0x002170c3, // n0x097d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x097e c0x0000 (---------------) + I org
- 0x00214a43, // n0x097f c0x0000 (---------------) + I abr
- 0x0038b8c7, // n0x0980 c0x0000 (---------------) + I abruzzo
- 0x002015c2, // n0x0981 c0x0000 (---------------) + I ag
- 0x00384949, // n0x0982 c0x0000 (---------------) + I agrigento
- 0x00200882, // n0x0983 c0x0000 (---------------) + I al
- 0x0022f94b, // n0x0984 c0x0000 (---------------) + I alessandria
- 0x002d344a, // n0x0985 c0x0000 (---------------) + I alto-adige
- 0x002c0d89, // n0x0986 c0x0000 (---------------) + I altoadige
- 0x00201242, // n0x0987 c0x0000 (---------------) + I an
- 0x00295b46, // n0x0988 c0x0000 (---------------) + I ancona
- 0x00264b95, // n0x0989 c0x0000 (---------------) + I andria-barletta-trani
- 0x0022fa95, // n0x098a c0x0000 (---------------) + I andria-trani-barletta
- 0x0026bc93, // n0x098b c0x0000 (---------------) + I andriabarlettatrani
- 0x00230013, // n0x098c c0x0000 (---------------) + I andriatranibarletta
- 0x0020fd82, // n0x098d c0x0000 (---------------) + I ao
- 0x00218745, // n0x098e c0x0000 (---------------) + I aosta
- 0x00341e0c, // n0x098f c0x0000 (---------------) + I aosta-valley
- 0x0029a44b, // n0x0990 c0x0000 (---------------) + I aostavalley
- 0x00258685, // n0x0991 c0x0000 (---------------) + I aoste
- 0x002105c2, // n0x0992 c0x0000 (---------------) + I ap
- 0x00273fc2, // n0x0993 c0x0000 (---------------) + I aq
- 0x002d7986, // n0x0994 c0x0000 (---------------) + I aquila
- 0x00200602, // n0x0995 c0x0000 (---------------) + I ar
- 0x00363106, // n0x0996 c0x0000 (---------------) + I arezzo
- 0x0020094d, // n0x0997 c0x0000 (---------------) + I ascoli-piceno
- 0x0034714c, // n0x0998 c0x0000 (---------------) + I ascolipiceno
- 0x002166c4, // n0x0999 c0x0000 (---------------) + I asti
- 0x00201642, // n0x099a c0x0000 (---------------) + I at
- 0x00201482, // n0x099b c0x0000 (---------------) + I av
- 0x00369f48, // n0x099c c0x0000 (---------------) + I avellino
- 0x00205a82, // n0x099d c0x0000 (---------------) + I ba
- 0x00240186, // n0x099e c0x0000 (---------------) + I balsan
- 0x0027eb84, // n0x099f c0x0000 (---------------) + I bari
- 0x00264d55, // n0x09a0 c0x0000 (---------------) + I barletta-trani-andria
- 0x0026be13, // n0x09a1 c0x0000 (---------------) + I barlettatraniandria
- 0x0020a443, // n0x09a2 c0x0000 (---------------) + I bas
- 0x0030d98a, // n0x09a3 c0x0000 (---------------) + I basilicata
- 0x002c5dc7, // n0x09a4 c0x0000 (---------------) + I belluno
- 0x0030fa49, // n0x09a5 c0x0000 (---------------) + I benevento
- 0x0023dc87, // n0x09a6 c0x0000 (---------------) + I bergamo
- 0x00355e02, // n0x09a7 c0x0000 (---------------) + I bg
- 0x00200002, // n0x09a8 c0x0000 (---------------) + I bi
- 0x00381ac6, // n0x09a9 c0x0000 (---------------) + I biella
- 0x00205842, // n0x09aa c0x0000 (---------------) + I bl
- 0x000e4188, // n0x09ab c0x0000 (---------------) + blogspot
- 0x0020a282, // n0x09ac c0x0000 (---------------) + I bn
- 0x0020a702, // n0x09ad c0x0000 (---------------) + I bo
- 0x0034c987, // n0x09ae c0x0000 (---------------) + I bologna
- 0x00391387, // n0x09af c0x0000 (---------------) + I bolzano
- 0x00212b85, // n0x09b0 c0x0000 (---------------) + I bozen
- 0x00212e82, // n0x09b1 c0x0000 (---------------) + I br
- 0x002154c7, // n0x09b2 c0x0000 (---------------) + I brescia
- 0x00215688, // n0x09b3 c0x0000 (---------------) + I brindisi
- 0x00235102, // n0x09b4 c0x0000 (---------------) + I bs
- 0x00216fc2, // n0x09b5 c0x0000 (---------------) + I bt
- 0x002203c2, // n0x09b6 c0x0000 (---------------) + I bz
- 0x002055c2, // n0x09b7 c0x0000 (---------------) + I ca
- 0x00250c08, // n0x09b8 c0x0000 (---------------) + I cagliari
- 0x0020e443, // n0x09b9 c0x0000 (---------------) + I cal
- 0x00238348, // n0x09ba c0x0000 (---------------) + I calabria
- 0x002e718d, // n0x09bb c0x0000 (---------------) + I caltanissetta
- 0x0021a083, // n0x09bc c0x0000 (---------------) + I cam
- 0x00300748, // n0x09bd c0x0000 (---------------) + I campania
- 0x0022c60f, // n0x09be c0x0000 (---------------) + I campidano-medio
- 0x0022c9ce, // n0x09bf c0x0000 (---------------) + I campidanomedio
- 0x0027284a, // n0x09c0 c0x0000 (---------------) + I campobasso
- 0x002d4e91, // n0x09c1 c0x0000 (---------------) + I carbonia-iglesias
- 0x002d5310, // n0x09c2 c0x0000 (---------------) + I carboniaiglesias
- 0x0031888d, // n0x09c3 c0x0000 (---------------) + I carrara-massa
- 0x00318bcc, // n0x09c4 c0x0000 (---------------) + I carraramassa
- 0x002055c7, // n0x09c5 c0x0000 (---------------) + I caserta
- 0x0030db07, // n0x09c6 c0x0000 (---------------) + I catania
- 0x00310c49, // n0x09c7 c0x0000 (---------------) + I catanzaro
- 0x002167c2, // n0x09c8 c0x0000 (---------------) + I cb
- 0x00200b82, // n0x09c9 c0x0000 (---------------) + I ce
- 0x0024434c, // n0x09ca c0x0000 (---------------) + I cesena-forli
- 0x0024464b, // n0x09cb c0x0000 (---------------) + I cesenaforli
- 0x00204a02, // n0x09cc c0x0000 (---------------) + I ch
- 0x002c2546, // n0x09cd c0x0000 (---------------) + I chieti
- 0x002155c2, // n0x09ce c0x0000 (---------------) + I ci
- 0x0020af42, // n0x09cf c0x0000 (---------------) + I cl
- 0x002211c2, // n0x09d0 c0x0000 (---------------) + I cn
- 0x00200742, // n0x09d1 c0x0000 (---------------) + I co
- 0x002230c4, // n0x09d2 c0x0000 (---------------) + I como
- 0x0022bdc7, // n0x09d3 c0x0000 (---------------) + I cosenza
- 0x0020c502, // n0x09d4 c0x0000 (---------------) + I cr
- 0x00230b87, // n0x09d5 c0x0000 (---------------) + I cremona
- 0x00231e07, // n0x09d6 c0x0000 (---------------) + I crotone
- 0x0020f142, // n0x09d7 c0x0000 (---------------) + I cs
- 0x00223d82, // n0x09d8 c0x0000 (---------------) + I ct
- 0x00235585, // n0x09d9 c0x0000 (---------------) + I cuneo
- 0x00214442, // n0x09da c0x0000 (---------------) + I cz
- 0x002e990e, // n0x09db c0x0000 (---------------) + I dell-ogliastra
- 0x002297cd, // n0x09dc c0x0000 (---------------) + I dellogliastra
- 0x002d75c3, // n0x09dd c0x0000 (---------------) + I edu
- 0x0023f9ce, // n0x09de c0x0000 (---------------) + I emilia-romagna
- 0x00261dcd, // n0x09df c0x0000 (---------------) + I emiliaromagna
- 0x0034efc3, // n0x09e0 c0x0000 (---------------) + I emr
- 0x00200bc2, // n0x09e1 c0x0000 (---------------) + I en
- 0x00201504, // n0x09e2 c0x0000 (---------------) + I enna
- 0x00235d42, // n0x09e3 c0x0000 (---------------) + I fc
- 0x0020c742, // n0x09e4 c0x0000 (---------------) + I fe
- 0x002cc345, // n0x09e5 c0x0000 (---------------) + I fermo
- 0x002e3b87, // n0x09e6 c0x0000 (---------------) + I ferrara
- 0x00331442, // n0x09e7 c0x0000 (---------------) + I fg
- 0x002099c2, // n0x09e8 c0x0000 (---------------) + I fi
- 0x00237b87, // n0x09e9 c0x0000 (---------------) + I firenze
- 0x0023c248, // n0x09ea c0x0000 (---------------) + I florence
- 0x00358002, // n0x09eb c0x0000 (---------------) + I fm
- 0x00200386, // n0x09ec c0x0000 (---------------) + I foggia
- 0x002441cc, // n0x09ed c0x0000 (---------------) + I forli-cesena
- 0x0024450b, // n0x09ee c0x0000 (---------------) + I forlicesena
- 0x00200d42, // n0x09ef c0x0000 (---------------) + I fr
- 0x002495cf, // n0x09f0 c0x0000 (---------------) + I friuli-v-giulia
- 0x00249990, // n0x09f1 c0x0000 (---------------) + I friuli-ve-giulia
- 0x00249d8f, // n0x09f2 c0x0000 (---------------) + I friuli-vegiulia
- 0x0024a155, // n0x09f3 c0x0000 (---------------) + I friuli-venezia-giulia
- 0x0024a694, // n0x09f4 c0x0000 (---------------) + I friuli-veneziagiulia
- 0x0024ab8e, // n0x09f5 c0x0000 (---------------) + I friuli-vgiulia
- 0x0024af0e, // n0x09f6 c0x0000 (---------------) + I friuliv-giulia
- 0x0024b28f, // n0x09f7 c0x0000 (---------------) + I friulive-giulia
- 0x0024b64e, // n0x09f8 c0x0000 (---------------) + I friulivegiulia
- 0x0024b9d4, // n0x09f9 c0x0000 (---------------) + I friulivenezia-giulia
- 0x0024bed3, // n0x09fa c0x0000 (---------------) + I friuliveneziagiulia
- 0x0024c38d, // n0x09fb c0x0000 (---------------) + I friulivgiulia
- 0x00263bc9, // n0x09fc c0x0000 (---------------) + I frosinone
- 0x00277443, // n0x09fd c0x0000 (---------------) + I fvg
- 0x002012c2, // n0x09fe c0x0000 (---------------) + I ge
- 0x0030bb05, // n0x09ff c0x0000 (---------------) + I genoa
- 0x002012c6, // n0x0a00 c0x0000 (---------------) + I genova
- 0x00202342, // n0x0a01 c0x0000 (---------------) + I go
- 0x002473c7, // n0x0a02 c0x0000 (---------------) + I gorizia
- 0x0021e283, // n0x0a03 c0x0000 (---------------) + I gov
- 0x0020dc82, // n0x0a04 c0x0000 (---------------) + I gr
- 0x002e9508, // n0x0a05 c0x0000 (---------------) + I grosseto
- 0x002d50d1, // n0x0a06 c0x0000 (---------------) + I iglesias-carbonia
- 0x002d5510, // n0x0a07 c0x0000 (---------------) + I iglesiascarbonia
- 0x00203582, // n0x0a08 c0x0000 (---------------) + I im
- 0x002148c7, // n0x0a09 c0x0000 (---------------) + I imperia
- 0x00202b42, // n0x0a0a c0x0000 (---------------) + I is
- 0x002ee307, // n0x0a0b c0x0000 (---------------) + I isernia
- 0x002034c2, // n0x0a0c c0x0000 (---------------) + I kr
- 0x0036dc89, // n0x0a0d c0x0000 (---------------) + I la-spezia
- 0x002d7947, // n0x0a0e c0x0000 (---------------) + I laquila
- 0x00257b88, // n0x0a0f c0x0000 (---------------) + I laspezia
- 0x0035dc46, // n0x0a10 c0x0000 (---------------) + I latina
- 0x002c64c3, // n0x0a11 c0x0000 (---------------) + I laz
- 0x0035a705, // n0x0a12 c0x0000 (---------------) + I lazio
- 0x002339c2, // n0x0a13 c0x0000 (---------------) + I lc
- 0x00203c42, // n0x0a14 c0x0000 (---------------) + I le
- 0x00381ec5, // n0x0a15 c0x0000 (---------------) + I lecce
- 0x0021e6c5, // n0x0a16 c0x0000 (---------------) + I lecco
- 0x002008c2, // n0x0a17 c0x0000 (---------------) + I li
- 0x0021a583, // n0x0a18 c0x0000 (---------------) + I lig
- 0x00244887, // n0x0a19 c0x0000 (---------------) + I liguria
- 0x003436c7, // n0x0a1a c0x0000 (---------------) + I livorno
- 0x00205882, // n0x0a1b c0x0000 (---------------) + I lo
- 0x002455c4, // n0x0a1c c0x0000 (---------------) + I lodi
- 0x00260a43, // n0x0a1d c0x0000 (---------------) + I lom
- 0x002b0b49, // n0x0a1e c0x0000 (---------------) + I lombardia
- 0x002b8a88, // n0x0a1f c0x0000 (---------------) + I lombardy
- 0x00205ec2, // n0x0a20 c0x0000 (---------------) + I lt
- 0x002071c2, // n0x0a21 c0x0000 (---------------) + I lu
- 0x00219187, // n0x0a22 c0x0000 (---------------) + I lucania
- 0x0021aa05, // n0x0a23 c0x0000 (---------------) + I lucca
- 0x00300248, // n0x0a24 c0x0000 (---------------) + I macerata
- 0x0029c6c7, // n0x0a25 c0x0000 (---------------) + I mantova
- 0x00216503, // n0x0a26 c0x0000 (---------------) + I mar
- 0x0028de06, // n0x0a27 c0x0000 (---------------) + I marche
- 0x0031870d, // n0x0a28 c0x0000 (---------------) + I massa-carrara
- 0x00318a8c, // n0x0a29 c0x0000 (---------------) + I massacarrara
- 0x0029f6c6, // n0x0a2a c0x0000 (---------------) + I matera
- 0x00205942, // n0x0a2b c0x0000 (---------------) + I mb
- 0x0023a6c2, // n0x0a2c c0x0000 (---------------) + I mc
- 0x00208942, // n0x0a2d c0x0000 (---------------) + I me
- 0x0022c48f, // n0x0a2e c0x0000 (---------------) + I medio-campidano
- 0x0022c88e, // n0x0a2f c0x0000 (---------------) + I mediocampidano
- 0x00291407, // n0x0a30 c0x0000 (---------------) + I messina
- 0x00204802, // n0x0a31 c0x0000 (---------------) + I mi
- 0x002f1e85, // n0x0a32 c0x0000 (---------------) + I milan
- 0x002f1e86, // n0x0a33 c0x0000 (---------------) + I milano
- 0x00217082, // n0x0a34 c0x0000 (---------------) + I mn
- 0x00203602, // n0x0a35 c0x0000 (---------------) + I mo
- 0x00278386, // n0x0a36 c0x0000 (---------------) + I modena
- 0x00285643, // n0x0a37 c0x0000 (---------------) + I mol
- 0x002ee246, // n0x0a38 c0x0000 (---------------) + I molise
- 0x002b1e85, // n0x0a39 c0x0000 (---------------) + I monza
- 0x002b1e8d, // n0x0a3a c0x0000 (---------------) + I monza-brianza
- 0x002b26d5, // n0x0a3b c0x0000 (---------------) + I monza-e-della-brianza
- 0x002b2e8c, // n0x0a3c c0x0000 (---------------) + I monzabrianza
- 0x002b39cd, // n0x0a3d c0x0000 (---------------) + I monzaebrianza
- 0x002b3d92, // n0x0a3e c0x0000 (---------------) + I monzaedellabrianza
- 0x00209282, // n0x0a3f c0x0000 (---------------) + I ms
- 0x00259642, // n0x0a40 c0x0000 (---------------) + I mt
- 0x00200282, // n0x0a41 c0x0000 (---------------) + I na
- 0x002b7886, // n0x0a42 c0x0000 (---------------) + I naples
- 0x002d5c46, // n0x0a43 c0x0000 (---------------) + I napoli
- 0x00200c02, // n0x0a44 c0x0000 (---------------) + I no
- 0x00201346, // n0x0a45 c0x0000 (---------------) + I novara
- 0x00205bc2, // n0x0a46 c0x0000 (---------------) + I nu
- 0x00205bc5, // n0x0a47 c0x0000 (---------------) + I nuoro
- 0x002003c2, // n0x0a48 c0x0000 (---------------) + I og
- 0x002298c9, // n0x0a49 c0x0000 (---------------) + I ogliastra
- 0x0022840c, // n0x0a4a c0x0000 (---------------) + I olbia-tempio
- 0x0022874b, // n0x0a4b c0x0000 (---------------) + I olbiatempio
- 0x00200c42, // n0x0a4c c0x0000 (---------------) + I or
- 0x0023c688, // n0x0a4d c0x0000 (---------------) + I oristano
- 0x002031c2, // n0x0a4e c0x0000 (---------------) + I ot
- 0x002052c2, // n0x0a4f c0x0000 (---------------) + I pa
- 0x0029a206, // n0x0a50 c0x0000 (---------------) + I padova
- 0x0034f945, // n0x0a51 c0x0000 (---------------) + I padua
- 0x0021ce87, // n0x0a52 c0x0000 (---------------) + I palermo
- 0x003927c5, // n0x0a53 c0x0000 (---------------) + I parma
- 0x002c0705, // n0x0a54 c0x0000 (---------------) + I pavia
- 0x00203e02, // n0x0a55 c0x0000 (---------------) + I pc
- 0x0029b282, // n0x0a56 c0x0000 (---------------) + I pd
- 0x00214942, // n0x0a57 c0x0000 (---------------) + I pe
- 0x0026fa47, // n0x0a58 c0x0000 (---------------) + I perugia
- 0x0030758d, // n0x0a59 c0x0000 (---------------) + I pesaro-urbino
- 0x0030790c, // n0x0a5a c0x0000 (---------------) + I pesarourbino
- 0x00229107, // n0x0a5b c0x0000 (---------------) + I pescara
- 0x002bf182, // n0x0a5c c0x0000 (---------------) + I pg
- 0x00200b02, // n0x0a5d c0x0000 (---------------) + I pi
- 0x00207788, // n0x0a5e c0x0000 (---------------) + I piacenza
- 0x00261808, // n0x0a5f c0x0000 (---------------) + I piedmont
- 0x002c1308, // n0x0a60 c0x0000 (---------------) + I piemonte
- 0x002cd744, // n0x0a61 c0x0000 (---------------) + I pisa
- 0x002c41c7, // n0x0a62 c0x0000 (---------------) + I pistoia
- 0x002c7d43, // n0x0a63 c0x0000 (---------------) + I pmn
- 0x0023df82, // n0x0a64 c0x0000 (---------------) + I pn
- 0x00203f02, // n0x0a65 c0x0000 (---------------) + I po
- 0x002c9b49, // n0x0a66 c0x0000 (---------------) + I pordenone
- 0x00236a47, // n0x0a67 c0x0000 (---------------) + I potenza
- 0x00218242, // n0x0a68 c0x0000 (---------------) + I pr
- 0x00346185, // n0x0a69 c0x0000 (---------------) + I prato
- 0x00295982, // n0x0a6a c0x0000 (---------------) + I pt
- 0x00223542, // n0x0a6b c0x0000 (---------------) + I pu
- 0x0025cd83, // n0x0a6c c0x0000 (---------------) + I pug
- 0x0025cd86, // n0x0a6d c0x0000 (---------------) + I puglia
- 0x002ce242, // n0x0a6e c0x0000 (---------------) + I pv
- 0x002ce6c2, // n0x0a6f c0x0000 (---------------) + I pz
- 0x00201442, // n0x0a70 c0x0000 (---------------) + I ra
- 0x0038c106, // n0x0a71 c0x0000 (---------------) + I ragusa
- 0x00201447, // n0x0a72 c0x0000 (---------------) + I ravenna
- 0x00227b82, // n0x0a73 c0x0000 (---------------) + I rc
- 0x002030c2, // n0x0a74 c0x0000 (---------------) + I re
- 0x0023818f, // n0x0a75 c0x0000 (---------------) + I reggio-calabria
- 0x0023f80d, // n0x0a76 c0x0000 (---------------) + I reggio-emilia
- 0x0025df8e, // n0x0a77 c0x0000 (---------------) + I reggiocalabria
- 0x00261c4c, // n0x0a78 c0x0000 (---------------) + I reggioemilia
- 0x00204782, // n0x0a79 c0x0000 (---------------) + I rg
- 0x00202842, // n0x0a7a c0x0000 (---------------) + I ri
- 0x0021ba45, // n0x0a7b c0x0000 (---------------) + I rieti
- 0x002e79c6, // n0x0a7c c0x0000 (---------------) + I rimini
- 0x002194c2, // n0x0a7d c0x0000 (---------------) + I rm
- 0x00202182, // n0x0a7e c0x0000 (---------------) + I rn
- 0x00200d82, // n0x0a7f c0x0000 (---------------) + I ro
- 0x0023fb84, // n0x0a80 c0x0000 (---------------) + I roma
- 0x002e7004, // n0x0a81 c0x0000 (---------------) + I rome
- 0x002b1386, // n0x0a82 c0x0000 (---------------) + I rovigo
- 0x00201a02, // n0x0a83 c0x0000 (---------------) + I sa
- 0x002671c7, // n0x0a84 c0x0000 (---------------) + I salerno
- 0x00218483, // n0x0a85 c0x0000 (---------------) + I sar
- 0x0021c048, // n0x0a86 c0x0000 (---------------) + I sardegna
- 0x0021ca08, // n0x0a87 c0x0000 (---------------) + I sardinia
- 0x00369a07, // n0x0a88 c0x0000 (---------------) + I sassari
- 0x00232a46, // n0x0a89 c0x0000 (---------------) + I savona
- 0x00209182, // n0x0a8a c0x0000 (---------------) + I si
- 0x00215803, // n0x0a8b c0x0000 (---------------) + I sic
- 0x00215807, // n0x0a8c c0x0000 (---------------) + I sicilia
- 0x0026b646, // n0x0a8d c0x0000 (---------------) + I sicily
- 0x002b77c5, // n0x0a8e c0x0000 (---------------) + I siena
- 0x002d0d88, // n0x0a8f c0x0000 (---------------) + I siracusa
- 0x00201102, // n0x0a90 c0x0000 (---------------) + I so
- 0x0033ca87, // n0x0a91 c0x0000 (---------------) + I sondrio
- 0x002101c2, // n0x0a92 c0x0000 (---------------) + I sp
- 0x002ceec2, // n0x0a93 c0x0000 (---------------) + I sr
- 0x00211f02, // n0x0a94 c0x0000 (---------------) + I ss
- 0x002b5a09, // n0x0a95 c0x0000 (---------------) + I suedtirol
- 0x0021d0c2, // n0x0a96 c0x0000 (---------------) + I sv
- 0x00200142, // n0x0a97 c0x0000 (---------------) + I ta
- 0x00229383, // n0x0a98 c0x0000 (---------------) + I taa
- 0x0036ec87, // n0x0a99 c0x0000 (---------------) + I taranto
- 0x00203202, // n0x0a9a c0x0000 (---------------) + I te
- 0x0022858c, // n0x0a9b c0x0000 (---------------) + I tempio-olbia
- 0x0022888b, // n0x0a9c c0x0000 (---------------) + I tempioolbia
- 0x0029f746, // n0x0a9d c0x0000 (---------------) + I teramo
- 0x002f9245, // n0x0a9e c0x0000 (---------------) + I terni
- 0x0021d1c2, // n0x0a9f c0x0000 (---------------) + I tn
- 0x00201682, // n0x0aa0 c0x0000 (---------------) + I to
- 0x0029f3c6, // n0x0aa1 c0x0000 (---------------) + I torino
- 0x002520c3, // n0x0aa2 c0x0000 (---------------) + I tos
- 0x003096c7, // n0x0aa3 c0x0000 (---------------) + I toscana
- 0x00285142, // n0x0aa4 c0x0000 (---------------) + I tp
- 0x00202402, // n0x0aa5 c0x0000 (---------------) + I tr
- 0x00264a15, // n0x0aa6 c0x0000 (---------------) + I trani-andria-barletta
- 0x0022fc55, // n0x0aa7 c0x0000 (---------------) + I trani-barletta-andria
- 0x0026bb53, // n0x0aa8 c0x0000 (---------------) + I traniandriabarletta
- 0x00230193, // n0x0aa9 c0x0000 (---------------) + I tranibarlettaandria
- 0x0027cbc7, // n0x0aaa c0x0000 (---------------) + I trapani
- 0x0028cbc8, // n0x0aab c0x0000 (---------------) + I trentino
- 0x0028cbd0, // n0x0aac c0x0000 (---------------) + I trentino-a-adige
- 0x0029458f, // n0x0aad c0x0000 (---------------) + I trentino-aadige
- 0x002d3213, // n0x0aae c0x0000 (---------------) + I trentino-alto-adige
- 0x00306652, // n0x0aaf c0x0000 (---------------) + I trentino-altoadige
- 0x0033be90, // n0x0ab0 c0x0000 (---------------) + I trentino-s-tirol
- 0x0033ac8f, // n0x0ab1 c0x0000 (---------------) + I trentino-stirol
- 0x0038cd52, // n0x0ab2 c0x0000 (---------------) + I trentino-sud-tirol
- 0x002a4691, // n0x0ab3 c0x0000 (---------------) + I trentino-sudtirol
- 0x002acf53, // n0x0ab4 c0x0000 (---------------) + I trentino-sued-tirol
- 0x002b57d2, // n0x0ab5 c0x0000 (---------------) + I trentino-suedtirol
- 0x002bc54f, // n0x0ab6 c0x0000 (---------------) + I trentinoa-adige
- 0x002bd2ce, // n0x0ab7 c0x0000 (---------------) + I trentinoaadige
- 0x002dccd2, // n0x0ab8 c0x0000 (---------------) + I trentinoalto-adige
- 0x002c0b91, // n0x0ab9 c0x0000 (---------------) + I trentinoaltoadige
- 0x002cb48f, // n0x0aba c0x0000 (---------------) + I trentinos-tirol
- 0x002cc70e, // n0x0abb c0x0000 (---------------) + I trentinostirol
- 0x002cda91, // n0x0abc c0x0000 (---------------) + I trentinosud-tirol
- 0x002ce2d0, // n0x0abd c0x0000 (---------------) + I trentinosudtirol
- 0x002cea52, // n0x0abe c0x0000 (---------------) + I trentinosued-tirol
- 0x002dde91, // n0x0abf c0x0000 (---------------) + I trentinosuedtirol
- 0x002d0946, // n0x0ac0 c0x0000 (---------------) + I trento
- 0x002de4c7, // n0x0ac1 c0x0000 (---------------) + I treviso
- 0x00354007, // n0x0ac2 c0x0000 (---------------) + I trieste
- 0x00203a02, // n0x0ac3 c0x0000 (---------------) + I ts
- 0x002af6c5, // n0x0ac4 c0x0000 (---------------) + I turin
- 0x002d8c87, // n0x0ac5 c0x0000 (---------------) + I tuscany
- 0x0020bf42, // n0x0ac6 c0x0000 (---------------) + I tv
- 0x002070c2, // n0x0ac7 c0x0000 (---------------) + I ud
- 0x00319045, // n0x0ac8 c0x0000 (---------------) + I udine
- 0x00215fc3, // n0x0ac9 c0x0000 (---------------) + I umb
- 0x002570c6, // n0x0aca c0x0000 (---------------) + I umbria
- 0x0030774d, // n0x0acb c0x0000 (---------------) + I urbino-pesaro
- 0x00307a8c, // n0x0acc c0x0000 (---------------) + I urbinopesaro
- 0x002013c2, // n0x0acd c0x0000 (---------------) + I va
- 0x00341c8b, // n0x0ace c0x0000 (---------------) + I val-d-aosta
- 0x0029a30a, // n0x0acf c0x0000 (---------------) + I val-daosta
- 0x0030ae0a, // n0x0ad0 c0x0000 (---------------) + I vald-aosta
- 0x0029e789, // n0x0ad1 c0x0000 (---------------) + I valdaosta
- 0x0029c80b, // n0x0ad2 c0x0000 (---------------) + I valle-aosta
- 0x002c904d, // n0x0ad3 c0x0000 (---------------) + I valle-d-aosta
- 0x002d958c, // n0x0ad4 c0x0000 (---------------) + I valle-daosta
- 0x0021860a, // n0x0ad5 c0x0000 (---------------) + I valleaosta
- 0x00244e8c, // n0x0ad6 c0x0000 (---------------) + I valled-aosta
- 0x0024cc8b, // n0x0ad7 c0x0000 (---------------) + I valledaosta
- 0x002584cc, // n0x0ad8 c0x0000 (---------------) + I vallee-aoste
- 0x0025be8b, // n0x0ad9 c0x0000 (---------------) + I valleeaoste
- 0x00263943, // n0x0ada c0x0000 (---------------) + I vao
- 0x00278f86, // n0x0adb c0x0000 (---------------) + I varese
- 0x0030b742, // n0x0adc c0x0000 (---------------) + I vb
- 0x0034a542, // n0x0add c0x0000 (---------------) + I vc
- 0x00211603, // n0x0ade c0x0000 (---------------) + I vda
- 0x002014c2, // n0x0adf c0x0000 (---------------) + I ve
- 0x002014c3, // n0x0ae0 c0x0000 (---------------) + I ven
- 0x003546c6, // n0x0ae1 c0x0000 (---------------) + I veneto
- 0x0024a307, // n0x0ae2 c0x0000 (---------------) + I venezia
- 0x0025c506, // n0x0ae3 c0x0000 (---------------) + I venice
- 0x00220fc8, // n0x0ae4 c0x0000 (---------------) + I verbania
- 0x002a5e88, // n0x0ae5 c0x0000 (---------------) + I vercelli
- 0x00248346, // n0x0ae6 c0x0000 (---------------) + I verona
- 0x00213602, // n0x0ae7 c0x0000 (---------------) + I vi
- 0x002db38d, // n0x0ae8 c0x0000 (---------------) + I vibo-valentia
- 0x002db6cc, // n0x0ae9 c0x0000 (---------------) + I vibovalentia
- 0x00357a87, // n0x0aea c0x0000 (---------------) + I vicenza
- 0x002de2c7, // n0x0aeb c0x0000 (---------------) + I viterbo
- 0x00211782, // n0x0aec c0x0000 (---------------) + I vr
- 0x0020bf82, // n0x0aed c0x0000 (---------------) + I vs
- 0x0021e302, // n0x0aee c0x0000 (---------------) + I vt
- 0x0024ebc2, // n0x0aef c0x0000 (---------------) + I vv
- 0x00200742, // n0x0af0 c0x0000 (---------------) + I co
- 0x002170c3, // n0x0af1 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0af2 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x0af3 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x0af4 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x0af5 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x0af6 c0x0000 (---------------) + I mil
- 0x00298944, // n0x0af7 c0x0000 (---------------) + I name
- 0x002170c3, // n0x0af8 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x0af9 c0x0000 (---------------) + I org
- 0x00206103, // n0x0afa c0x0000 (---------------) + I sch
- 0x00201e82, // n0x0afb c0x0000 (---------------) + I ac
- 0x00210a02, // n0x0afc c0x0000 (---------------) + I ad
- 0x1fa34b45, // n0x0afd c0x007e (n0x0b6a-n0x0b9e) + I aichi
- 0x1fe06e05, // n0x0afe c0x007f (n0x0b9e-n0x0bba) + I akita
- 0x20387ac6, // n0x0aff c0x0080 (n0x0bba-n0x0bd0) + I aomori
- 0x000e4188, // n0x0b00 c0x0000 (---------------) + blogspot
- 0x206a0745, // n0x0b01 c0x0081 (n0x0bd0-n0x0c0a) + I chiba
- 0x00200742, // n0x0b02 c0x0000 (---------------) + I co
- 0x00203fc2, // n0x0b03 c0x0000 (---------------) + I ed
- 0x20b1c945, // n0x0b04 c0x0082 (n0x0c0a-n0x0c20) + I ehime
- 0x20e6b7c5, // n0x0b05 c0x0083 (n0x0c20-n0x0c2f) + I fukui
- 0x2126c587, // n0x0b06 c0x0084 (n0x0c2f-n0x0c6e) + I fukuoka
- 0x2166d5c9, // n0x0b07 c0x0085 (n0x0c6e-n0x0ca1) + I fukushima
- 0x21a89804, // n0x0b08 c0x0086 (n0x0ca1-n0x0cc7) + I gifu
- 0x00202342, // n0x0b09 c0x0000 (---------------) + I go
- 0x0020dc82, // n0x0b0a c0x0000 (---------------) + I gr
- 0x21e36f85, // n0x0b0b c0x0087 (n0x0cc7-n0x0ceb) + I gunma
- 0x2227c649, // n0x0b0c c0x0088 (n0x0ceb-n0x0d04) + I hiroshima
- 0x2275fc48, // n0x0b0d c0x0089 (n0x0d04-n0x0d92) + I hokkaido
- 0x22a96e45, // n0x0b0e c0x008a (n0x0d92-n0x0dc0) + I hyogo
- 0x22f16ac7, // n0x0b0f c0x008b (n0x0dc0-n0x0df3) + I ibaraki
- 0x23214e48, // n0x0b10 c0x008c (n0x0df3-n0x0e06) + I ishikawa
- 0x236c3b85, // n0x0b11 c0x008d (n0x0e06-n0x0e28) + I iwate
- 0x23a81f06, // n0x0b12 c0x008e (n0x0e28-n0x0e37) + I kagawa
- 0x23e71789, // n0x0b13 c0x008f (n0x0e37-n0x0e4b) + I kagoshima
- 0x24332808, // n0x0b14 c0x0090 (n0x0e4b-n0x0e69) + I kanagawa
- 0x246a8748, // n0x0b15 c0x0091 (n0x0e69-n0x0e6a)* o I kawasaki
- 0x24a8294a, // n0x0b16 c0x0092 (n0x0e6a-n0x0e6b)* o I kitakyushu
- 0x24e43484, // n0x0b17 c0x0093 (n0x0e6b-n0x0e6c)* o I kobe
- 0x252ba445, // n0x0b18 c0x0094 (n0x0e6c-n0x0e8b) + I kochi
- 0x256a2d48, // n0x0b19 c0x0095 (n0x0e8b-n0x0ea5) + I kumamoto
- 0x25aacb05, // n0x0b1a c0x0096 (n0x0ea5-n0x0ec4) + I kyoto
- 0x0020e4c2, // n0x0b1b c0x0000 (---------------) + I lg
- 0x25e28143, // n0x0b1c c0x0097 (n0x0ec4-n0x0ee2) + I mie
- 0x2628d746, // n0x0b1d c0x0098 (n0x0ee2-n0x0f03) + I miyagi
- 0x26771208, // n0x0b1e c0x0099 (n0x0f03-n0x0f1e) + I miyazaki
- 0x26b4e4c6, // n0x0b1f c0x009a (n0x0f1e-n0x0f69) + I nagano
- 0x26f6c108, // n0x0b20 c0x009b (n0x0f69-n0x0f7f) + I nagasaki
- 0x2732b206, // n0x0b21 c0x009c (n0x0f7f-n0x0f80)* o I nagoya
- 0x276da0c4, // n0x0b22 c0x009d (n0x0f80-n0x0fa6) + I nara
- 0x00201082, // n0x0b23 c0x0000 (---------------) + I ne
- 0x27a5f907, // n0x0b24 c0x009e (n0x0fa6-n0x0fc8) + I niigata
- 0x27e98d04, // n0x0b25 c0x009f (n0x0fc8-n0x0fdb) + I oita
- 0x28266607, // n0x0b26 c0x00a0 (n0x0fdb-n0x0ff5) + I okayama
- 0x287954c7, // n0x0b27 c0x00a1 (n0x0ff5-n0x101f) + I okinawa
- 0x00200c42, // n0x0b28 c0x0000 (---------------) + I or
- 0x28a864c5, // n0x0b29 c0x00a2 (n0x101f-n0x1051) + I osaka
- 0x28e75104, // n0x0b2a c0x00a3 (n0x1051-n0x106b) + I saga
- 0x292d0f07, // n0x0b2b c0x00a4 (n0x106b-n0x10b0) + I saitama
- 0x296129c7, // n0x0b2c c0x00a5 (n0x10b0-n0x10b1)* o I sapporo
- 0x29a6f286, // n0x0b2d c0x00a6 (n0x10b1-n0x10b2)* o I sendai
- 0x29e525c5, // n0x0b2e c0x00a7 (n0x10b2-n0x10c9) + I shiga
- 0x2a281087, // n0x0b2f c0x00a8 (n0x10c9-n0x10e0) + I shimane
- 0x2a6b4b88, // n0x0b30 c0x00a9 (n0x10e0-n0x1104) + I shizuoka
- 0x2ab0f5c7, // n0x0b31 c0x00aa (n0x1104-n0x1123) + I tochigi
- 0x2ae8e2c9, // n0x0b32 c0x00ab (n0x1123-n0x1134) + I tokushima
- 0x2b316545, // n0x0b33 c0x00ac (n0x1134-n0x116d) + I tokyo
- 0x2b6e2787, // n0x0b34 c0x00ad (n0x116d-n0x117a) + I tottori
- 0x2ba7c346, // n0x0b35 c0x00ae (n0x117a-n0x1192) + I toyama
- 0x2bf2dc48, // n0x0b36 c0x00af (n0x1192-n0x11af) + I wakayama
- 0x0022528d, // n0x0b37 c0x0000 (---------------) + I xn--0trq7p7nn
- 0x00260809, // n0x0b38 c0x0000 (---------------) + I xn--1ctwo
- 0x0026d84b, // n0x0b39 c0x0000 (---------------) + I xn--1lqs03n
- 0x002910cb, // n0x0b3a c0x0000 (---------------) + I xn--1lqs71d
- 0x002b1bcb, // n0x0b3b c0x0000 (---------------) + I xn--2m4a15e
- 0x002d6b8b, // n0x0b3c c0x0000 (---------------) + I xn--32vp30h
- 0x002e7bcb, // n0x0b3d c0x0000 (---------------) + I xn--4it168d
- 0x002e7e8b, // n0x0b3e c0x0000 (---------------) + I xn--4it797k
- 0x002e8689, // n0x0b3f c0x0000 (---------------) + I xn--4pvxs
- 0x002ea38b, // n0x0b40 c0x0000 (---------------) + I xn--5js045d
- 0x002ea64b, // n0x0b41 c0x0000 (---------------) + I xn--5rtp49c
- 0x002ead0b, // n0x0b42 c0x0000 (---------------) + I xn--5rtq34k
- 0x002eb3ca, // n0x0b43 c0x0000 (---------------) + I xn--6btw5a
- 0x002eb90a, // n0x0b44 c0x0000 (---------------) + I xn--6orx2r
- 0x002ebf0c, // n0x0b45 c0x0000 (---------------) + I xn--7t0a264c
- 0x002f16cb, // n0x0b46 c0x0000 (---------------) + I xn--8ltr62k
- 0x002f200a, // n0x0b47 c0x0000 (---------------) + I xn--8pvr4u
- 0x0030374a, // n0x0b48 c0x0000 (---------------) + I xn--c3s14m
- 0x0031334e, // n0x0b49 c0x0000 (---------------) + I xn--d5qv7z876c
- 0x00313d4e, // n0x0b4a c0x0000 (---------------) + I xn--djrs72d6uy
- 0x003140ca, // n0x0b4b c0x0000 (---------------) + I xn--djty4k
- 0x003153ca, // n0x0b4c c0x0000 (---------------) + I xn--efvn9s
- 0x0031700b, // n0x0b4d c0x0000 (---------------) + I xn--ehqz56n
- 0x003172cb, // n0x0b4e c0x0000 (---------------) + I xn--elqq16h
- 0x00317fcb, // n0x0b4f c0x0000 (---------------) + I xn--f6qx53a
- 0x00333bcb, // n0x0b50 c0x0000 (---------------) + I xn--k7yn95e
- 0x003341ca, // n0x0b51 c0x0000 (---------------) + I xn--kbrq7o
- 0x00334e8b, // n0x0b52 c0x0000 (---------------) + I xn--klt787d
- 0x0033514a, // n0x0b53 c0x0000 (---------------) + I xn--kltp7d
- 0x003353ca, // n0x0b54 c0x0000 (---------------) + I xn--kltx9a
- 0x0033564a, // n0x0b55 c0x0000 (---------------) + I xn--klty5x
- 0x00357c4b, // n0x0b56 c0x0000 (---------------) + I xn--mkru45i
- 0x0035d08b, // n0x0b57 c0x0000 (---------------) + I xn--nit225k
- 0x0036094e, // n0x0b58 c0x0000 (---------------) + I xn--ntso0iqx3a
- 0x00360ccb, // n0x0b59 c0x0000 (---------------) + I xn--ntsq17g
- 0x003687cb, // n0x0b5a c0x0000 (---------------) + I xn--pssu33l
- 0x0036a44b, // n0x0b5b c0x0000 (---------------) + I xn--qqqt11m
- 0x003725ca, // n0x0b5c c0x0000 (---------------) + I xn--rht27z
- 0x00372849, // n0x0b5d c0x0000 (---------------) + I xn--rht3d
- 0x00372a8a, // n0x0b5e c0x0000 (---------------) + I xn--rht61e
- 0x0037410a, // n0x0b5f c0x0000 (---------------) + I xn--rny31h
- 0x0038548b, // n0x0b60 c0x0000 (---------------) + I xn--tor131o
- 0x00386f0b, // n0x0b61 c0x0000 (---------------) + I xn--uist22h
- 0x0038744a, // n0x0b62 c0x0000 (---------------) + I xn--uisz3g
- 0x0038824b, // n0x0b63 c0x0000 (---------------) + I xn--uuwu58a
- 0x0038d1cb, // n0x0b64 c0x0000 (---------------) + I xn--vgu402c
- 0x00395d8b, // n0x0b65 c0x0000 (---------------) + I xn--zbx025d
- 0x2c26dc08, // n0x0b66 c0x00b0 (n0x11af-n0x11d1) + I yamagata
- 0x2c676089, // n0x0b67 c0x00b1 (n0x11d1-n0x11e1) + I yamaguchi
- 0x2ca9b889, // n0x0b68 c0x00b2 (n0x11e1-n0x11fd) + I yamanashi
- 0x2cf2b5c8, // n0x0b69 c0x00b3 (n0x11fd-n0x11fe)* o I yokohama
- 0x002a2345, // n0x0b6a c0x0000 (---------------) + I aisai
- 0x002068c3, // n0x0b6b c0x0000 (---------------) + I ama
- 0x00203884, // n0x0b6c c0x0000 (---------------) + I anjo
- 0x0034cb85, // n0x0b6d c0x0000 (---------------) + I asuke
- 0x00289546, // n0x0b6e c0x0000 (---------------) + I chiryu
- 0x002932c5, // n0x0b6f c0x0000 (---------------) + I chita
- 0x00274d84, // n0x0b70 c0x0000 (---------------) + I fuso
- 0x002472c8, // n0x0b71 c0x0000 (---------------) + I gamagori
- 0x00242045, // n0x0b72 c0x0000 (---------------) + I handa
- 0x0027ed44, // n0x0b73 c0x0000 (---------------) + I hazu
- 0x002b2387, // n0x0b74 c0x0000 (---------------) + I hekinan
- 0x00288d0a, // n0x0b75 c0x0000 (---------------) + I higashiura
- 0x002a580a, // n0x0b76 c0x0000 (---------------) + I ichinomiya
- 0x0031f587, // n0x0b77 c0x0000 (---------------) + I inazawa
- 0x002067c7, // n0x0b78 c0x0000 (---------------) + I inuyama
- 0x002d6707, // n0x0b79 c0x0000 (---------------) + I isshiki
- 0x00248887, // n0x0b7a c0x0000 (---------------) + I iwakura
- 0x00203cc5, // n0x0b7b c0x0000 (---------------) + I kanie
- 0x00311ec6, // n0x0b7c c0x0000 (---------------) + I kariya
- 0x0027cf47, // n0x0b7d c0x0000 (---------------) + I kasugai
- 0x0025a504, // n0x0b7e c0x0000 (---------------) + I kira
- 0x002fe646, // n0x0b7f c0x0000 (---------------) + I kiyosu
- 0x002977c6, // n0x0b80 c0x0000 (---------------) + I komaki
- 0x00204cc5, // n0x0b81 c0x0000 (---------------) + I konan
- 0x0024c9c4, // n0x0b82 c0x0000 (---------------) + I kota
- 0x00292a46, // n0x0b83 c0x0000 (---------------) + I mihama
- 0x00288107, // n0x0b84 c0x0000 (---------------) + I miyoshi
- 0x002209c6, // n0x0b85 c0x0000 (---------------) + I nishio
- 0x002e6987, // n0x0b86 c0x0000 (---------------) + I nisshin
- 0x0027e743, // n0x0b87 c0x0000 (---------------) + I obu
- 0x0023be46, // n0x0b88 c0x0000 (---------------) + I oguchi
- 0x0024f085, // n0x0b89 c0x0000 (---------------) + I oharu
- 0x0026c687, // n0x0b8a c0x0000 (---------------) + I okazaki
- 0x002ad48a, // n0x0b8b c0x0000 (---------------) + I owariasahi
- 0x002e9604, // n0x0b8c c0x0000 (---------------) + I seto
- 0x00213308, // n0x0b8d c0x0000 (---------------) + I shikatsu
- 0x0028d309, // n0x0b8e c0x0000 (---------------) + I shinshiro
- 0x002a4307, // n0x0b8f c0x0000 (---------------) + I shitara
- 0x0026a586, // n0x0b90 c0x0000 (---------------) + I tahara
- 0x00248648, // n0x0b91 c0x0000 (---------------) + I takahama
- 0x0030be89, // n0x0b92 c0x0000 (---------------) + I tobishima
- 0x00366704, // n0x0b93 c0x0000 (---------------) + I toei
- 0x0025d104, // n0x0b94 c0x0000 (---------------) + I togo
- 0x002df1c5, // n0x0b95 c0x0000 (---------------) + I tokai
- 0x00376b08, // n0x0b96 c0x0000 (---------------) + I tokoname
- 0x002aeb47, // n0x0b97 c0x0000 (---------------) + I toyoake
- 0x00286c89, // n0x0b98 c0x0000 (---------------) + I toyohashi
- 0x00322bc8, // n0x0b99 c0x0000 (---------------) + I toyokawa
- 0x00221246, // n0x0b9a c0x0000 (---------------) + I toyone
- 0x00338906, // n0x0b9b c0x0000 (---------------) + I toyota
- 0x00283308, // n0x0b9c c0x0000 (---------------) + I tsushima
- 0x00359906, // n0x0b9d c0x0000 (---------------) + I yatomi
- 0x00206e05, // n0x0b9e c0x0000 (---------------) + I akita
- 0x0026f346, // n0x0b9f c0x0000 (---------------) + I daisen
- 0x00266b48, // n0x0ba0 c0x0000 (---------------) + I fujisato
- 0x002dc286, // n0x0ba1 c0x0000 (---------------) + I gojome
- 0x0024608b, // n0x0ba2 c0x0000 (---------------) + I hachirogata
- 0x00279ac6, // n0x0ba3 c0x0000 (---------------) + I happou
- 0x00284b0d, // n0x0ba4 c0x0000 (---------------) + I higashinaruse
- 0x002028c5, // n0x0ba5 c0x0000 (---------------) + I honjo
- 0x00292e46, // n0x0ba6 c0x0000 (---------------) + I honjyo
- 0x00214f05, // n0x0ba7 c0x0000 (---------------) + I ikawa
- 0x00281889, // n0x0ba8 c0x0000 (---------------) + I kamikoani
- 0x0022ea47, // n0x0ba9 c0x0000 (---------------) + I kamioka
- 0x0033ecc8, // n0x0baa c0x0000 (---------------) + I katagami
- 0x0022bc46, // n0x0bab c0x0000 (---------------) + I kazuno
- 0x00283c89, // n0x0bac c0x0000 (---------------) + I kitaakita
- 0x0036b9c6, // n0x0bad c0x0000 (---------------) + I kosaka
- 0x002ad405, // n0x0bae c0x0000 (---------------) + I kyowa
- 0x0028b246, // n0x0baf c0x0000 (---------------) + I misato
- 0x002bf786, // n0x0bb0 c0x0000 (---------------) + I mitane
- 0x002b5c49, // n0x0bb1 c0x0000 (---------------) + I moriyoshi
- 0x00226806, // n0x0bb2 c0x0000 (---------------) + I nikaho
- 0x0023a007, // n0x0bb3 c0x0000 (---------------) + I noshiro
- 0x0027bd85, // n0x0bb4 c0x0000 (---------------) + I odate
- 0x00204043, // n0x0bb5 c0x0000 (---------------) + I oga
- 0x00246205, // n0x0bb6 c0x0000 (---------------) + I ogata
- 0x00293cc7, // n0x0bb7 c0x0000 (---------------) + I semboku
- 0x0023ed06, // n0x0bb8 c0x0000 (---------------) + I yokote
- 0x002027c9, // n0x0bb9 c0x0000 (---------------) + I yurihonjo
- 0x00387ac6, // n0x0bba c0x0000 (---------------) + I aomori
- 0x0026f586, // n0x0bbb c0x0000 (---------------) + I gonohe
- 0x0022e109, // n0x0bbc c0x0000 (---------------) + I hachinohe
- 0x0026ed49, // n0x0bbd c0x0000 (---------------) + I hashikami
- 0x0028bc07, // n0x0bbe c0x0000 (---------------) + I hiranai
- 0x00305a08, // n0x0bbf c0x0000 (---------------) + I hirosaki
- 0x00273909, // n0x0bc0 c0x0000 (---------------) + I itayanagi
- 0x0026ce88, // n0x0bc1 c0x0000 (---------------) + I kuroishi
- 0x0035c906, // n0x0bc2 c0x0000 (---------------) + I misawa
- 0x002bda45, // n0x0bc3 c0x0000 (---------------) + I mutsu
- 0x0021638a, // n0x0bc4 c0x0000 (---------------) + I nakadomari
- 0x0026f606, // n0x0bc5 c0x0000 (---------------) + I noheji
- 0x0035e1c6, // n0x0bc6 c0x0000 (---------------) + I oirase
- 0x0028d905, // n0x0bc7 c0x0000 (---------------) + I owani
- 0x00205c88, // n0x0bc8 c0x0000 (---------------) + I rokunohe
- 0x002092c7, // n0x0bc9 c0x0000 (---------------) + I sannohe
- 0x0029ba0a, // n0x0bca c0x0000 (---------------) + I shichinohe
- 0x00238986, // n0x0bcb c0x0000 (---------------) + I shingo
- 0x0024cec5, // n0x0bcc c0x0000 (---------------) + I takko
- 0x0023e846, // n0x0bcd c0x0000 (---------------) + I towada
- 0x002e1a47, // n0x0bce c0x0000 (---------------) + I tsugaru
- 0x0026a447, // n0x0bcf c0x0000 (---------------) + I tsuruta
- 0x002041c5, // n0x0bd0 c0x0000 (---------------) + I abiko
- 0x002ad5c5, // n0x0bd1 c0x0000 (---------------) + I asahi
- 0x002c6646, // n0x0bd2 c0x0000 (---------------) + I chonan
- 0x002c6e86, // n0x0bd3 c0x0000 (---------------) + I chosei
- 0x0034a586, // n0x0bd4 c0x0000 (---------------) + I choshi
- 0x002be904, // n0x0bd5 c0x0000 (---------------) + I chuo
- 0x0026e2c9, // n0x0bd6 c0x0000 (---------------) + I funabashi
- 0x00276f46, // n0x0bd7 c0x0000 (---------------) + I futtsu
- 0x002d6f4a, // n0x0bd8 c0x0000 (---------------) + I hanamigawa
- 0x0027df48, // n0x0bd9 c0x0000 (---------------) + I ichihara
- 0x00312b88, // n0x0bda c0x0000 (---------------) + I ichikawa
- 0x002a580a, // n0x0bdb c0x0000 (---------------) + I ichinomiya
- 0x00329b05, // n0x0bdc c0x0000 (---------------) + I inzai
- 0x00288045, // n0x0bdd c0x0000 (---------------) + I isumi
- 0x00269408, // n0x0bde c0x0000 (---------------) + I kamagaya
- 0x002ba1c8, // n0x0bdf c0x0000 (---------------) + I kamogawa
- 0x00375c87, // n0x0be0 c0x0000 (---------------) + I kashiwa
- 0x00335e46, // n0x0be1 c0x0000 (---------------) + I katori
- 0x002fd408, // n0x0be2 c0x0000 (---------------) + I katsuura
- 0x0027d607, // n0x0be3 c0x0000 (---------------) + I kimitsu
- 0x0026c7c8, // n0x0be4 c0x0000 (---------------) + I kisarazu
- 0x0035d306, // n0x0be5 c0x0000 (---------------) + I kozaki
- 0x0026ff48, // n0x0be6 c0x0000 (---------------) + I kujukuri
- 0x0027e846, // n0x0be7 c0x0000 (---------------) + I kyonan
- 0x0023b8c7, // n0x0be8 c0x0000 (---------------) + I matsudo
- 0x002846c6, // n0x0be9 c0x0000 (---------------) + I midori
- 0x00292a46, // n0x0bea c0x0000 (---------------) + I mihama
- 0x00213fca, // n0x0beb c0x0000 (---------------) + I minamiboso
- 0x00223146, // n0x0bec c0x0000 (---------------) + I mobara
- 0x002bda49, // n0x0bed c0x0000 (---------------) + I mutsuzawa
- 0x0032a1c6, // n0x0bee c0x0000 (---------------) + I nagara
- 0x002a0a8a, // n0x0bef c0x0000 (---------------) + I nagareyama
- 0x002da0c9, // n0x0bf0 c0x0000 (---------------) + I narashino
- 0x0025ac46, // n0x0bf1 c0x0000 (---------------) + I narita
- 0x00384f84, // n0x0bf2 c0x0000 (---------------) + I noda
- 0x0030bbcd, // n0x0bf3 c0x0000 (---------------) + I oamishirasato
- 0x00276307, // n0x0bf4 c0x0000 (---------------) + I omigawa
- 0x002fffc6, // n0x0bf5 c0x0000 (---------------) + I onjuku
- 0x002a8605, // n0x0bf6 c0x0000 (---------------) + I otaki
- 0x0036ba45, // n0x0bf7 c0x0000 (---------------) + I sakae
- 0x002f4d46, // n0x0bf8 c0x0000 (---------------) + I sakura
- 0x002a73c9, // n0x0bf9 c0x0000 (---------------) + I shimofusa
- 0x002b9447, // n0x0bfa c0x0000 (---------------) + I shirako
- 0x00268406, // n0x0bfb c0x0000 (---------------) + I shiroi
- 0x0029fd06, // n0x0bfc c0x0000 (---------------) + I shisui
- 0x00274e09, // n0x0bfd c0x0000 (---------------) + I sodegaura
- 0x0022a904, // n0x0bfe c0x0000 (---------------) + I sosa
- 0x0021f304, // n0x0bff c0x0000 (---------------) + I tako
- 0x0038a708, // n0x0c00 c0x0000 (---------------) + I tateyama
- 0x002e5fc6, // n0x0c01 c0x0000 (---------------) + I togane
- 0x00340e08, // n0x0c02 c0x0000 (---------------) + I tohnosho
- 0x003163c8, // n0x0c03 c0x0000 (---------------) + I tomisato
- 0x00206f47, // n0x0c04 c0x0000 (---------------) + I urayasu
- 0x00382d89, // n0x0c05 c0x0000 (---------------) + I yachimata
- 0x002e38c7, // n0x0c06 c0x0000 (---------------) + I yachiyo
- 0x002a060a, // n0x0c07 c0x0000 (---------------) + I yokaichiba
- 0x00315d8f, // n0x0c08 c0x0000 (---------------) + I yokoshibahikari
- 0x002394ca, // n0x0c09 c0x0000 (---------------) + I yotsukaido
- 0x0021b845, // n0x0c0a c0x0000 (---------------) + I ainan
- 0x00266d85, // n0x0c0b c0x0000 (---------------) + I honai
- 0x0020f345, // n0x0c0c c0x0000 (---------------) + I ikata
- 0x0027eac7, // n0x0c0d c0x0000 (---------------) + I imabari
- 0x00253503, // n0x0c0e c0x0000 (---------------) + I iyo
- 0x00305c08, // n0x0c0f c0x0000 (---------------) + I kamijima
- 0x0037aec6, // n0x0c10 c0x0000 (---------------) + I kihoku
- 0x0037afc9, // n0x0c11 c0x0000 (---------------) + I kumakogen
- 0x002e5286, // n0x0c12 c0x0000 (---------------) + I masaki
- 0x00392e07, // n0x0c13 c0x0000 (---------------) + I matsuno
- 0x00283a49, // n0x0c14 c0x0000 (---------------) + I matsuyama
- 0x0033ebc8, // n0x0c15 c0x0000 (---------------) + I namikata
- 0x0028d9c7, // n0x0c16 c0x0000 (---------------) + I niihama
- 0x002e3dc3, // n0x0c17 c0x0000 (---------------) + I ozu
- 0x002a23c5, // n0x0c18 c0x0000 (---------------) + I saijo
- 0x00315cc5, // n0x0c19 c0x0000 (---------------) + I seiyo
- 0x002be74b, // n0x0c1a c0x0000 (---------------) + I shikokuchuo
- 0x002acbc4, // n0x0c1b c0x0000 (---------------) + I tobe
- 0x002d1504, // n0x0c1c c0x0000 (---------------) + I toon
- 0x00265706, // n0x0c1d c0x0000 (---------------) + I uchiko
- 0x002e4647, // n0x0c1e c0x0000 (---------------) + I uwajima
- 0x003804ca, // n0x0c1f c0x0000 (---------------) + I yawatahama
- 0x002281c7, // n0x0c20 c0x0000 (---------------) + I echizen
- 0x00366787, // n0x0c21 c0x0000 (---------------) + I eiheiji
- 0x0026b7c5, // n0x0c22 c0x0000 (---------------) + I fukui
- 0x00390e45, // n0x0c23 c0x0000 (---------------) + I ikeda
- 0x00260149, // n0x0c24 c0x0000 (---------------) + I katsuyama
- 0x00292a46, // n0x0c25 c0x0000 (---------------) + I mihama
- 0x0022804d, // n0x0c26 c0x0000 (---------------) + I minamiechizen
- 0x00395885, // n0x0c27 c0x0000 (---------------) + I obama
- 0x00285a43, // n0x0c28 c0x0000 (---------------) + I ohi
- 0x00207e83, // n0x0c29 c0x0000 (---------------) + I ono
- 0x003404c5, // n0x0c2a c0x0000 (---------------) + I sabae
- 0x003396c5, // n0x0c2b c0x0000 (---------------) + I sakai
- 0x00248648, // n0x0c2c c0x0000 (---------------) + I takahama
- 0x00277007, // n0x0c2d c0x0000 (---------------) + I tsuruga
- 0x0021f086, // n0x0c2e c0x0000 (---------------) + I wakasa
- 0x00289c86, // n0x0c2f c0x0000 (---------------) + I ashiya
- 0x0021de85, // n0x0c30 c0x0000 (---------------) + I buzen
- 0x00375807, // n0x0c31 c0x0000 (---------------) + I chikugo
- 0x00206a47, // n0x0c32 c0x0000 (---------------) + I chikuho
- 0x002a5bc7, // n0x0c33 c0x0000 (---------------) + I chikujo
- 0x002ba4ca, // n0x0c34 c0x0000 (---------------) + I chikushino
- 0x0023bf08, // n0x0c35 c0x0000 (---------------) + I chikuzen
- 0x002be904, // n0x0c36 c0x0000 (---------------) + I chuo
- 0x0024ed47, // n0x0c37 c0x0000 (---------------) + I dazaifu
- 0x0026ae87, // n0x0c38 c0x0000 (---------------) + I fukuchi
- 0x00317546, // n0x0c39 c0x0000 (---------------) + I hakata
- 0x002545c7, // n0x0c3a c0x0000 (---------------) + I higashi
- 0x002c5b48, // n0x0c3b c0x0000 (---------------) + I hirokawa
- 0x0029b788, // n0x0c3c c0x0000 (---------------) + I hisayama
- 0x00246d86, // n0x0c3d c0x0000 (---------------) + I iizuka
- 0x0023abc8, // n0x0c3e c0x0000 (---------------) + I inatsuki
- 0x00226884, // n0x0c3f c0x0000 (---------------) + I kaho
- 0x0027cf46, // n0x0c40 c0x0000 (---------------) + I kasuga
- 0x0020d3c6, // n0x0c41 c0x0000 (---------------) + I kasuya
- 0x003824c6, // n0x0c42 c0x0000 (---------------) + I kawara
- 0x00295dc6, // n0x0c43 c0x0000 (---------------) + I keisen
- 0x00232c84, // n0x0c44 c0x0000 (---------------) + I koga
- 0x00248946, // n0x0c45 c0x0000 (---------------) + I kurate
- 0x002a67c6, // n0x0c46 c0x0000 (---------------) + I kurogi
- 0x00282e46, // n0x0c47 c0x0000 (---------------) + I kurume
- 0x00213fc6, // n0x0c48 c0x0000 (---------------) + I minami
- 0x00207d46, // n0x0c49 c0x0000 (---------------) + I miyako
- 0x00272346, // n0x0c4a c0x0000 (---------------) + I miyama
- 0x0021ef88, // n0x0c4b c0x0000 (---------------) + I miyawaka
- 0x002fe4c8, // n0x0c4c c0x0000 (---------------) + I mizumaki
- 0x002bb0c8, // n0x0c4d c0x0000 (---------------) + I munakata
- 0x002934c8, // n0x0c4e c0x0000 (---------------) + I nakagawa
- 0x00269386, // n0x0c4f c0x0000 (---------------) + I nakama
- 0x00208b85, // n0x0c50 c0x0000 (---------------) + I nishi
- 0x0031b486, // n0x0c51 c0x0000 (---------------) + I nogata
- 0x00296ec5, // n0x0c52 c0x0000 (---------------) + I ogori
- 0x0035c047, // n0x0c53 c0x0000 (---------------) + I okagaki
- 0x0022ecc5, // n0x0c54 c0x0000 (---------------) + I okawa
- 0x00201bc3, // n0x0c55 c0x0000 (---------------) + I oki
- 0x00200085, // n0x0c56 c0x0000 (---------------) + I omuta
- 0x002c7844, // n0x0c57 c0x0000 (---------------) + I onga
- 0x00207e85, // n0x0c58 c0x0000 (---------------) + I onojo
- 0x0020fdc3, // n0x0c59 c0x0000 (---------------) + I oto
- 0x002d47c7, // n0x0c5a c0x0000 (---------------) + I saigawa
- 0x00333848, // n0x0c5b c0x0000 (---------------) + I sasaguri
- 0x002e6a46, // n0x0c5c c0x0000 (---------------) + I shingu
- 0x0029230d, // n0x0c5d c0x0000 (---------------) + I shinyoshitomi
- 0x00266d46, // n0x0c5e c0x0000 (---------------) + I shonai
- 0x002823c5, // n0x0c5f c0x0000 (---------------) + I soeda
- 0x002ad183, // n0x0c60 c0x0000 (---------------) + I sue
- 0x002a2189, // n0x0c61 c0x0000 (---------------) + I tachiarai
- 0x0020e146, // n0x0c62 c0x0000 (---------------) + I tagawa
- 0x002344c6, // n0x0c63 c0x0000 (---------------) + I takata
- 0x00253644, // n0x0c64 c0x0000 (---------------) + I toho
- 0x00239447, // n0x0c65 c0x0000 (---------------) + I toyotsu
- 0x00227786, // n0x0c66 c0x0000 (---------------) + I tsuiki
- 0x00289985, // n0x0c67 c0x0000 (---------------) + I ukiha
- 0x00209803, // n0x0c68 c0x0000 (---------------) + I umi
- 0x00211e04, // n0x0c69 c0x0000 (---------------) + I usui
- 0x0026b046, // n0x0c6a c0x0000 (---------------) + I yamada
- 0x002d81c4, // n0x0c6b c0x0000 (---------------) + I yame
- 0x002f7448, // n0x0c6c c0x0000 (---------------) + I yanagawa
- 0x0038f4c9, // n0x0c6d c0x0000 (---------------) + I yukuhashi
- 0x0022ef49, // n0x0c6e c0x0000 (---------------) + I aizubange
- 0x0028b14a, // n0x0c6f c0x0000 (---------------) + I aizumisato
- 0x0023124d, // n0x0c70 c0x0000 (---------------) + I aizuwakamatsu
- 0x00240607, // n0x0c71 c0x0000 (---------------) + I asakawa
- 0x00255706, // n0x0c72 c0x0000 (---------------) + I bandai
- 0x00209004, // n0x0c73 c0x0000 (---------------) + I date
- 0x0026d5c9, // n0x0c74 c0x0000 (---------------) + I fukushima
- 0x00274788, // n0x0c75 c0x0000 (---------------) + I furudono
- 0x00275f06, // n0x0c76 c0x0000 (---------------) + I futaba
- 0x002e9cc6, // n0x0c77 c0x0000 (---------------) + I hanawa
- 0x002545c7, // n0x0c78 c0x0000 (---------------) + I higashi
- 0x0029cdc6, // n0x0c79 c0x0000 (---------------) + I hirata
- 0x0021af86, // n0x0c7a c0x0000 (---------------) + I hirono
- 0x00329c06, // n0x0c7b c0x0000 (---------------) + I iitate
- 0x0039554a, // n0x0c7c c0x0000 (---------------) + I inawashiro
- 0x00214e48, // n0x0c7d c0x0000 (---------------) + I ishikawa
- 0x002999c5, // n0x0c7e c0x0000 (---------------) + I iwaki
- 0x00254a09, // n0x0c7f c0x0000 (---------------) + I izumizaki
- 0x002af2ca, // n0x0c80 c0x0000 (---------------) + I kagamiishi
- 0x002150c8, // n0x0c81 c0x0000 (---------------) + I kaneyama
- 0x00287448, // n0x0c82 c0x0000 (---------------) + I kawamata
- 0x002815c8, // n0x0c83 c0x0000 (---------------) + I kitakata
- 0x00293e8c, // n0x0c84 c0x0000 (---------------) + I kitashiobara
- 0x002c3e45, // n0x0c85 c0x0000 (---------------) + I koori
- 0x00289f08, // n0x0c86 c0x0000 (---------------) + I koriyama
- 0x002f1d86, // n0x0c87 c0x0000 (---------------) + I kunimi
- 0x002d1906, // n0x0c88 c0x0000 (---------------) + I miharu
- 0x00392cc7, // n0x0c89 c0x0000 (---------------) + I mishima
- 0x002280c5, // n0x0c8a c0x0000 (---------------) + I namie
- 0x0026f4c5, // n0x0c8b c0x0000 (---------------) + I nango
- 0x0022ee09, // n0x0c8c c0x0000 (---------------) + I nishiaizu
- 0x0020bd87, // n0x0c8d c0x0000 (---------------) + I nishigo
- 0x0037af85, // n0x0c8e c0x0000 (---------------) + I okuma
- 0x0021e147, // n0x0c8f c0x0000 (---------------) + I omotego
- 0x00207e83, // n0x0c90 c0x0000 (---------------) + I ono
- 0x002af985, // n0x0c91 c0x0000 (---------------) + I otama
- 0x00355688, // n0x0c92 c0x0000 (---------------) + I samegawa
- 0x0026e047, // n0x0c93 c0x0000 (---------------) + I shimogo
- 0x00287309, // n0x0c94 c0x0000 (---------------) + I shirakawa
- 0x002b3885, // n0x0c95 c0x0000 (---------------) + I showa
- 0x0038e104, // n0x0c96 c0x0000 (---------------) + I soma
- 0x0028c348, // n0x0c97 c0x0000 (---------------) + I sukagawa
- 0x0025fa47, // n0x0c98 c0x0000 (---------------) + I taishin
- 0x0028db88, // n0x0c99 c0x0000 (---------------) + I tamakawa
- 0x003109c8, // n0x0c9a c0x0000 (---------------) + I tanagura
- 0x0034d1c5, // n0x0c9b c0x0000 (---------------) + I tenei
- 0x00389946, // n0x0c9c c0x0000 (---------------) + I yabuki
- 0x0022afc6, // n0x0c9d c0x0000 (---------------) + I yamato
- 0x00346949, // n0x0c9e c0x0000 (---------------) + I yamatsuri
- 0x002fdc47, // n0x0c9f c0x0000 (---------------) + I yanaizu
- 0x00297546, // n0x0ca0 c0x0000 (---------------) + I yugawa
- 0x00383347, // n0x0ca1 c0x0000 (---------------) + I anpachi
- 0x00244403, // n0x0ca2 c0x0000 (---------------) + I ena
- 0x00289804, // n0x0ca3 c0x0000 (---------------) + I gifu
- 0x003746c5, // n0x0ca4 c0x0000 (---------------) + I ginan
- 0x0024efc4, // n0x0ca5 c0x0000 (---------------) + I godo
- 0x00232644, // n0x0ca6 c0x0000 (---------------) + I gujo
- 0x0023ca07, // n0x0ca7 c0x0000 (---------------) + I hashima
- 0x002e5907, // n0x0ca8 c0x0000 (---------------) + I hichiso
- 0x002685c4, // n0x0ca9 c0x0000 (---------------) + I hida
- 0x00287150, // n0x0caa c0x0000 (---------------) + I higashishirakawa
- 0x002f4ec7, // n0x0cab c0x0000 (---------------) + I ibigawa
- 0x00390e45, // n0x0cac c0x0000 (---------------) + I ikeda
- 0x00271acc, // n0x0cad c0x0000 (---------------) + I kakamigahara
- 0x00203cc4, // n0x0cae c0x0000 (---------------) + I kani
- 0x0028f7c8, // n0x0caf c0x0000 (---------------) + I kasahara
- 0x0023b7c9, // n0x0cb0 c0x0000 (---------------) + I kasamatsu
- 0x00298ac6, // n0x0cb1 c0x0000 (---------------) + I kawaue
- 0x0022aa08, // n0x0cb2 c0x0000 (---------------) + I kitagata
- 0x0022ec04, // n0x0cb3 c0x0000 (---------------) + I mino
- 0x002fb148, // n0x0cb4 c0x0000 (---------------) + I minokamo
- 0x002adf86, // n0x0cb5 c0x0000 (---------------) + I mitake
- 0x00252288, // n0x0cb6 c0x0000 (---------------) + I mizunami
- 0x00289146, // n0x0cb7 c0x0000 (---------------) + I motosu
- 0x0021d20b, // n0x0cb8 c0x0000 (---------------) + I nakatsugawa
- 0x00394b85, // n0x0cb9 c0x0000 (---------------) + I ogaki
- 0x002b5248, // n0x0cba c0x0000 (---------------) + I sakahogi
- 0x0020d984, // n0x0cbb c0x0000 (---------------) + I seki
- 0x0038f90a, // n0x0cbc c0x0000 (---------------) + I sekigahara
- 0x00287309, // n0x0cbd c0x0000 (---------------) + I shirakawa
- 0x0024f946, // n0x0cbe c0x0000 (---------------) + I tajimi
- 0x0020f408, // n0x0cbf c0x0000 (---------------) + I takayama
- 0x002b9085, // n0x0cc0 c0x0000 (---------------) + I tarui
- 0x002add84, // n0x0cc1 c0x0000 (---------------) + I toki
- 0x0028f6c6, // n0x0cc2 c0x0000 (---------------) + I tomika
- 0x002e55c8, // n0x0cc3 c0x0000 (---------------) + I wanouchi
- 0x0026dc08, // n0x0cc4 c0x0000 (---------------) + I yamagata
- 0x00330546, // n0x0cc5 c0x0000 (---------------) + I yaotsu
- 0x00396e84, // n0x0cc6 c0x0000 (---------------) + I yoro
- 0x00216306, // n0x0cc7 c0x0000 (---------------) + I annaka
- 0x002e3947, // n0x0cc8 c0x0000 (---------------) + I chiyoda
- 0x00266507, // n0x0cc9 c0x0000 (---------------) + I fujioka
- 0x002545cf, // n0x0cca c0x0000 (---------------) + I higashiagatsuma
- 0x0037a987, // n0x0ccb c0x0000 (---------------) + I isesaki
- 0x0025ad07, // n0x0ccc c0x0000 (---------------) + I itakura
- 0x002d17c5, // n0x0ccd c0x0000 (---------------) + I kanna
- 0x002cc145, // n0x0cce c0x0000 (---------------) + I kanra
- 0x0028b8c9, // n0x0ccf c0x0000 (---------------) + I katashina
- 0x00343106, // n0x0cd0 c0x0000 (---------------) + I kawaba
- 0x00258d45, // n0x0cd1 c0x0000 (---------------) + I kiryu
- 0x0026f047, // n0x0cd2 c0x0000 (---------------) + I kusatsu
- 0x002cb088, // n0x0cd3 c0x0000 (---------------) + I maebashi
- 0x002cae05, // n0x0cd4 c0x0000 (---------------) + I meiwa
- 0x002846c6, // n0x0cd5 c0x0000 (---------------) + I midori
- 0x00204808, // n0x0cd6 c0x0000 (---------------) + I minakami
- 0x0034e4ca, // n0x0cd7 c0x0000 (---------------) + I naganohara
- 0x00364808, // n0x0cd8 c0x0000 (---------------) + I nakanojo
- 0x00278107, // n0x0cd9 c0x0000 (---------------) + I nanmoku
- 0x003161c6, // n0x0cda c0x0000 (---------------) + I numata
- 0x002549c6, // n0x0cdb c0x0000 (---------------) + I oizumi
- 0x0020ca43, // n0x0cdc c0x0000 (---------------) + I ora
- 0x00203943, // n0x0cdd c0x0000 (---------------) + I ota
- 0x0034a649, // n0x0cde c0x0000 (---------------) + I shibukawa
- 0x00273789, // n0x0cdf c0x0000 (---------------) + I shimonita
- 0x0028e1c6, // n0x0ce0 c0x0000 (---------------) + I shinto
- 0x002b3885, // n0x0ce1 c0x0000 (---------------) + I showa
- 0x00298d88, // n0x0ce2 c0x0000 (---------------) + I takasaki
- 0x0020f408, // n0x0ce3 c0x0000 (---------------) + I takayama
- 0x003936c8, // n0x0ce4 c0x0000 (---------------) + I tamamura
- 0x00329c8b, // n0x0ce5 c0x0000 (---------------) + I tatebayashi
- 0x00292547, // n0x0ce6 c0x0000 (---------------) + I tomioka
- 0x0030b489, // n0x0ce7 c0x0000 (---------------) + I tsukiyono
- 0x00254848, // n0x0ce8 c0x0000 (---------------) + I tsumagoi
- 0x0038dac4, // n0x0ce9 c0x0000 (---------------) + I ueno
- 0x002b5d48, // n0x0cea c0x0000 (---------------) + I yoshioka
- 0x0027a909, // n0x0ceb c0x0000 (---------------) + I asaminami
- 0x002557c5, // n0x0cec c0x0000 (---------------) + I daiwa
- 0x0020dd07, // n0x0ced c0x0000 (---------------) + I etajima
- 0x002ab685, // n0x0cee c0x0000 (---------------) + I fuchu
- 0x0026db08, // n0x0cef c0x0000 (---------------) + I fukuyama
- 0x0027dd8b, // n0x0cf0 c0x0000 (---------------) + I hatsukaichi
- 0x00280dd0, // n0x0cf1 c0x0000 (---------------) + I higashihiroshima
- 0x00292c45, // n0x0cf2 c0x0000 (---------------) + I hongo
- 0x0020d8cc, // n0x0cf3 c0x0000 (---------------) + I jinsekikogen
- 0x0021f245, // n0x0cf4 c0x0000 (---------------) + I kaita
- 0x0026b843, // n0x0cf5 c0x0000 (---------------) + I kui
- 0x00285906, // n0x0cf6 c0x0000 (---------------) + I kumano
- 0x002a4544, // n0x0cf7 c0x0000 (---------------) + I kure
- 0x003637c6, // n0x0cf8 c0x0000 (---------------) + I mihara
- 0x00288107, // n0x0cf9 c0x0000 (---------------) + I miyoshi
- 0x00204884, // n0x0cfa c0x0000 (---------------) + I naka
- 0x002a5708, // n0x0cfb c0x0000 (---------------) + I onomichi
- 0x00305acd, // n0x0cfc c0x0000 (---------------) + I osakikamijima
- 0x00335c85, // n0x0cfd c0x0000 (---------------) + I otake
- 0x00201a04, // n0x0cfe c0x0000 (---------------) + I saka
- 0x0021b584, // n0x0cff c0x0000 (---------------) + I sera
- 0x00325cc9, // n0x0d00 c0x0000 (---------------) + I seranishi
- 0x0027f9c8, // n0x0d01 c0x0000 (---------------) + I shinichi
- 0x002f5a47, // n0x0d02 c0x0000 (---------------) + I shobara
- 0x002ae008, // n0x0d03 c0x0000 (---------------) + I takehara
- 0x0026e388, // n0x0d04 c0x0000 (---------------) + I abashiri
- 0x00268705, // n0x0d05 c0x0000 (---------------) + I abira
- 0x0031acc7, // n0x0d06 c0x0000 (---------------) + I aibetsu
- 0x00268687, // n0x0d07 c0x0000 (---------------) + I akabira
- 0x00300f87, // n0x0d08 c0x0000 (---------------) + I akkeshi
- 0x002ad5c9, // n0x0d09 c0x0000 (---------------) + I asahikawa
- 0x00227609, // n0x0d0a c0x0000 (---------------) + I ashibetsu
- 0x00230d06, // n0x0d0b c0x0000 (---------------) + I ashoro
- 0x00318dc6, // n0x0d0c c0x0000 (---------------) + I assabu
- 0x00254806, // n0x0d0d c0x0000 (---------------) + I atsuma
- 0x00323c05, // n0x0d0e c0x0000 (---------------) + I bibai
- 0x002626c4, // n0x0d0f c0x0000 (---------------) + I biei
- 0x0038aec6, // n0x0d10 c0x0000 (---------------) + I bifuka
- 0x0038f286, // n0x0d11 c0x0000 (---------------) + I bihoro
- 0x00268748, // n0x0d12 c0x0000 (---------------) + I biratori
- 0x002e170b, // n0x0d13 c0x0000 (---------------) + I chippubetsu
- 0x00366547, // n0x0d14 c0x0000 (---------------) + I chitose
- 0x00209004, // n0x0d15 c0x0000 (---------------) + I date
- 0x0032d2c6, // n0x0d16 c0x0000 (---------------) + I ebetsu
- 0x00337807, // n0x0d17 c0x0000 (---------------) + I embetsu
- 0x00271f45, // n0x0d18 c0x0000 (---------------) + I eniwa
- 0x002f35c5, // n0x0d19 c0x0000 (---------------) + I erimo
- 0x00202244, // n0x0d1a c0x0000 (---------------) + I esan
- 0x00227586, // n0x0d1b c0x0000 (---------------) + I esashi
- 0x0038af48, // n0x0d1c c0x0000 (---------------) + I fukagawa
- 0x0026d5c9, // n0x0d1d c0x0000 (---------------) + I fukushima
- 0x00239f06, // n0x0d1e c0x0000 (---------------) + I furano
- 0x00273e08, // n0x0d1f c0x0000 (---------------) + I furubira
- 0x002e3146, // n0x0d20 c0x0000 (---------------) + I haboro
- 0x00325388, // n0x0d21 c0x0000 (---------------) + I hakodate
- 0x002a154c, // n0x0d22 c0x0000 (---------------) + I hamatonbetsu
- 0x002685c6, // n0x0d23 c0x0000 (---------------) + I hidaka
- 0x0028208d, // n0x0d24 c0x0000 (---------------) + I higashikagura
- 0x0028250b, // n0x0d25 c0x0000 (---------------) + I higashikawa
- 0x0023a0c5, // n0x0d26 c0x0000 (---------------) + I hiroo
- 0x00206b87, // n0x0d27 c0x0000 (---------------) + I hokuryu
- 0x00226906, // n0x0d28 c0x0000 (---------------) + I hokuto
- 0x00305188, // n0x0d29 c0x0000 (---------------) + I honbetsu
- 0x00230d89, // n0x0d2a c0x0000 (---------------) + I horokanai
- 0x00346588, // n0x0d2b c0x0000 (---------------) + I horonobe
- 0x00390e45, // n0x0d2c c0x0000 (---------------) + I ikeda
- 0x0020de07, // n0x0d2d c0x0000 (---------------) + I imakane
- 0x002af448, // n0x0d2e c0x0000 (---------------) + I ishikari
- 0x0023e509, // n0x0d2f c0x0000 (---------------) + I iwamizawa
- 0x002e74c6, // n0x0d30 c0x0000 (---------------) + I iwanai
- 0x00239e0a, // n0x0d31 c0x0000 (---------------) + I kamifurano
- 0x00304f08, // n0x0d32 c0x0000 (---------------) + I kamikawa
- 0x003463cb, // n0x0d33 c0x0000 (---------------) + I kamishihoro
- 0x002ae7cc, // n0x0d34 c0x0000 (---------------) + I kamisunagawa
- 0x002fb248, // n0x0d35 c0x0000 (---------------) + I kamoenai
- 0x00269e06, // n0x0d36 c0x0000 (---------------) + I kayabe
- 0x002a5a88, // n0x0d37 c0x0000 (---------------) + I kembuchi
- 0x0035e007, // n0x0d38 c0x0000 (---------------) + I kikonai
- 0x002e5389, // n0x0d39 c0x0000 (---------------) + I kimobetsu
- 0x0027c54d, // n0x0d3a c0x0000 (---------------) + I kitahiroshima
- 0x002885c6, // n0x0d3b c0x0000 (---------------) + I kitami
- 0x002534c8, // n0x0d3c c0x0000 (---------------) + I kiyosato
- 0x002fe389, // n0x0d3d c0x0000 (---------------) + I koshimizu
- 0x002a3148, // n0x0d3e c0x0000 (---------------) + I kunneppu
- 0x00270048, // n0x0d3f c0x0000 (---------------) + I kuriyama
- 0x002a7e8c, // n0x0d40 c0x0000 (---------------) + I kuromatsunai
- 0x002a9347, // n0x0d41 c0x0000 (---------------) + I kushiro
- 0x002a9e47, // n0x0d42 c0x0000 (---------------) + I kutchan
- 0x002ad405, // n0x0d43 c0x0000 (---------------) + I kyowa
- 0x00260307, // n0x0d44 c0x0000 (---------------) + I mashike
- 0x002caf48, // n0x0d45 c0x0000 (---------------) + I matsumae
- 0x0028f746, // n0x0d46 c0x0000 (---------------) + I mikasa
- 0x003561cc, // n0x0d47 c0x0000 (---------------) + I minamifurano
- 0x002ccb48, // n0x0d48 c0x0000 (---------------) + I mombetsu
- 0x002b7108, // n0x0d49 c0x0000 (---------------) + I moseushi
- 0x0024e806, // n0x0d4a c0x0000 (---------------) + I mukawa
- 0x002a6187, // n0x0d4b c0x0000 (---------------) + I muroran
- 0x00230f04, // n0x0d4c c0x0000 (---------------) + I naie
- 0x002934c8, // n0x0d4d c0x0000 (---------------) + I nakagawa
- 0x0026208c, // n0x0d4e c0x0000 (---------------) + I nakasatsunai
- 0x0027848c, // n0x0d4f c0x0000 (---------------) + I nakatombetsu
- 0x0021b8c5, // n0x0d50 c0x0000 (---------------) + I nanae
- 0x0037c587, // n0x0d51 c0x0000 (---------------) + I nanporo
- 0x00396e06, // n0x0d52 c0x0000 (---------------) + I nayoro
- 0x002a6106, // n0x0d53 c0x0000 (---------------) + I nemuro
- 0x00281a48, // n0x0d54 c0x0000 (---------------) + I niikappu
- 0x0037ae44, // n0x0d55 c0x0000 (---------------) + I niki
- 0x002209cb, // n0x0d56 c0x0000 (---------------) + I nishiokoppe
- 0x002f090b, // n0x0d57 c0x0000 (---------------) + I noboribetsu
- 0x003161c6, // n0x0d58 c0x0000 (---------------) + I numata
- 0x00305947, // n0x0d59 c0x0000 (---------------) + I obihiro
- 0x00311445, // n0x0d5a c0x0000 (---------------) + I obira
- 0x0025d045, // n0x0d5b c0x0000 (---------------) + I oketo
- 0x00220b06, // n0x0d5c c0x0000 (---------------) + I okoppe
- 0x002b9045, // n0x0d5d c0x0000 (---------------) + I otaru
- 0x002acb85, // n0x0d5e c0x0000 (---------------) + I otobe
- 0x002c4a07, // n0x0d5f c0x0000 (---------------) + I otofuke
- 0x0025cbc9, // n0x0d60 c0x0000 (---------------) + I otoineppu
- 0x002f3c44, // n0x0d61 c0x0000 (---------------) + I oumu
- 0x0035f085, // n0x0d62 c0x0000 (---------------) + I ozora
- 0x002c2c45, // n0x0d63 c0x0000 (---------------) + I pippu
- 0x0028eb48, // n0x0d64 c0x0000 (---------------) + I rankoshi
- 0x002a5545, // n0x0d65 c0x0000 (---------------) + I rebun
- 0x002b4809, // n0x0d66 c0x0000 (---------------) + I rikubetsu
- 0x00294c47, // n0x0d67 c0x0000 (---------------) + I rishiri
- 0x00294c4b, // n0x0d68 c0x0000 (---------------) + I rishirifuji
- 0x00307c86, // n0x0d69 c0x0000 (---------------) + I saroma
- 0x0021ecc9, // n0x0d6a c0x0000 (---------------) + I sarufutsu
- 0x0024c908, // n0x0d6b c0x0000 (---------------) + I shakotan
- 0x00252d45, // n0x0d6c c0x0000 (---------------) + I shari
- 0x00301088, // n0x0d6d c0x0000 (---------------) + I shibecha
- 0x00227648, // n0x0d6e c0x0000 (---------------) + I shibetsu
- 0x00251507, // n0x0d6f c0x0000 (---------------) + I shikabe
- 0x002d3e87, // n0x0d70 c0x0000 (---------------) + I shikaoi
- 0x0023ca89, // n0x0d71 c0x0000 (---------------) + I shimamaki
- 0x002521c7, // n0x0d72 c0x0000 (---------------) + I shimizu
- 0x00266909, // n0x0d73 c0x0000 (---------------) + I shimokawa
- 0x00287a0c, // n0x0d74 c0x0000 (---------------) + I shinshinotsu
- 0x0028e1c8, // n0x0d75 c0x0000 (---------------) + I shintoku
- 0x002d1609, // n0x0d76 c0x0000 (---------------) + I shiranuka
- 0x002d2247, // n0x0d77 c0x0000 (---------------) + I shiraoi
- 0x0026e449, // n0x0d78 c0x0000 (---------------) + I shiriuchi
- 0x002e5a47, // n0x0d79 c0x0000 (---------------) + I sobetsu
- 0x002ae8c8, // n0x0d7a c0x0000 (---------------) + I sunagawa
- 0x0028ee85, // n0x0d7b c0x0000 (---------------) + I taiki
- 0x0027cec6, // n0x0d7c c0x0000 (---------------) + I takasu
- 0x002a8648, // n0x0d7d c0x0000 (---------------) + I takikawa
- 0x00245108, // n0x0d7e c0x0000 (---------------) + I takinoue
- 0x002af189, // n0x0d7f c0x0000 (---------------) + I teshikaga
- 0x002acbc7, // n0x0d80 c0x0000 (---------------) + I tobetsu
- 0x0028b345, // n0x0d81 c0x0000 (---------------) + I tohma
- 0x002b9dc9, // n0x0d82 c0x0000 (---------------) + I tomakomai
- 0x0036edc6, // n0x0d83 c0x0000 (---------------) + I tomari
- 0x0027c344, // n0x0d84 c0x0000 (---------------) + I toya
- 0x00346246, // n0x0d85 c0x0000 (---------------) + I toyako
- 0x00371088, // n0x0d86 c0x0000 (---------------) + I toyotomi
- 0x00244007, // n0x0d87 c0x0000 (---------------) + I toyoura
- 0x002e1908, // n0x0d88 c0x0000 (---------------) + I tsubetsu
- 0x0023ac89, // n0x0d89 c0x0000 (---------------) + I tsukigata
- 0x0024e587, // n0x0d8a c0x0000 (---------------) + I urakawa
- 0x00288ec6, // n0x0d8b c0x0000 (---------------) + I urausu
- 0x00206c44, // n0x0d8c c0x0000 (---------------) + I uryu
- 0x00200109, // n0x0d8d c0x0000 (---------------) + I utashinai
- 0x00342f08, // n0x0d8e c0x0000 (---------------) + I wakkanai
- 0x0024e6c7, // n0x0d8f c0x0000 (---------------) + I wassamu
- 0x00311fc6, // n0x0d90 c0x0000 (---------------) + I yakumo
- 0x00292f46, // n0x0d91 c0x0000 (---------------) + I yoichi
- 0x0035e144, // n0x0d92 c0x0000 (---------------) + I aioi
- 0x00341846, // n0x0d93 c0x0000 (---------------) + I akashi
- 0x00207e03, // n0x0d94 c0x0000 (---------------) + I ako
- 0x0038bd09, // n0x0d95 c0x0000 (---------------) + I amagasaki
- 0x00394b46, // n0x0d96 c0x0000 (---------------) + I aogaki
- 0x0028c7c5, // n0x0d97 c0x0000 (---------------) + I asago
- 0x00289c86, // n0x0d98 c0x0000 (---------------) + I ashiya
- 0x0028dcc5, // n0x0d99 c0x0000 (---------------) + I awaji
- 0x0026d348, // n0x0d9a c0x0000 (---------------) + I fukusaki
- 0x002faf87, // n0x0d9b c0x0000 (---------------) + I goshiki
- 0x002f8c46, // n0x0d9c c0x0000 (---------------) + I harima
- 0x0031c986, // n0x0d9d c0x0000 (---------------) + I himeji
- 0x00312b88, // n0x0d9e c0x0000 (---------------) + I ichikawa
- 0x0028ba47, // n0x0d9f c0x0000 (---------------) + I inagawa
- 0x00288605, // n0x0da0 c0x0000 (---------------) + I itami
- 0x0028a188, // n0x0da1 c0x0000 (---------------) + I kakogawa
- 0x003744c8, // n0x0da2 c0x0000 (---------------) + I kamigori
- 0x00304f08, // n0x0da3 c0x0000 (---------------) + I kamikawa
- 0x0021f105, // n0x0da4 c0x0000 (---------------) + I kasai
- 0x0027cf46, // n0x0da5 c0x0000 (---------------) + I kasuga
- 0x0022ed09, // n0x0da6 c0x0000 (---------------) + I kawanishi
- 0x0022ae44, // n0x0da7 c0x0000 (---------------) + I miki
- 0x00359a0b, // n0x0da8 c0x0000 (---------------) + I minamiawaji
- 0x0021ac8b, // n0x0da9 c0x0000 (---------------) + I nishinomiya
- 0x002998c9, // n0x0daa c0x0000 (---------------) + I nishiwaki
- 0x00207e83, // n0x0dab c0x0000 (---------------) + I ono
- 0x002453c5, // n0x0dac c0x0000 (---------------) + I sanda
- 0x00208a46, // n0x0dad c0x0000 (---------------) + I sannan
- 0x002937c8, // n0x0dae c0x0000 (---------------) + I sasayama
- 0x002349c4, // n0x0daf c0x0000 (---------------) + I sayo
- 0x002e6a46, // n0x0db0 c0x0000 (---------------) + I shingu
- 0x002ba609, // n0x0db1 c0x0000 (---------------) + I shinonsen
- 0x003081c5, // n0x0db2 c0x0000 (---------------) + I shiso
- 0x002c4946, // n0x0db3 c0x0000 (---------------) + I sumoto
- 0x0025fa46, // n0x0db4 c0x0000 (---------------) + I taishi
- 0x00209604, // n0x0db5 c0x0000 (---------------) + I taka
- 0x002875ca, // n0x0db6 c0x0000 (---------------) + I takarazuka
- 0x0028c708, // n0x0db7 c0x0000 (---------------) + I takasago
- 0x00245106, // n0x0db8 c0x0000 (---------------) + I takino
- 0x0035ee85, // n0x0db9 c0x0000 (---------------) + I tamba
- 0x00203987, // n0x0dba c0x0000 (---------------) + I tatsuno
- 0x0022e707, // n0x0dbb c0x0000 (---------------) + I toyooka
- 0x00389944, // n0x0dbc c0x0000 (---------------) + I yabu
- 0x0021aec7, // n0x0dbd c0x0000 (---------------) + I yashiro
- 0x002a0604, // n0x0dbe c0x0000 (---------------) + I yoka
- 0x00322c46, // n0x0dbf c0x0000 (---------------) + I yokawa
- 0x00204943, // n0x0dc0 c0x0000 (---------------) + I ami
- 0x002ad5c5, // n0x0dc1 c0x0000 (---------------) + I asahi
- 0x00346e05, // n0x0dc2 c0x0000 (---------------) + I bando
- 0x002e5708, // n0x0dc3 c0x0000 (---------------) + I chikusei
- 0x0024ef05, // n0x0dc4 c0x0000 (---------------) + I daigo
- 0x00268309, // n0x0dc5 c0x0000 (---------------) + I fujishiro
- 0x0028d547, // n0x0dc6 c0x0000 (---------------) + I hitachi
- 0x0029330b, // n0x0dc7 c0x0000 (---------------) + I hitachinaka
- 0x0028d54c, // n0x0dc8 c0x0000 (---------------) + I hitachiomiya
- 0x0028e50a, // n0x0dc9 c0x0000 (---------------) + I hitachiota
- 0x00316ac7, // n0x0dca c0x0000 (---------------) + I ibaraki
- 0x00200243, // n0x0dcb c0x0000 (---------------) + I ina
- 0x00291508, // n0x0dcc c0x0000 (---------------) + I inashiki
- 0x0021f2c5, // n0x0dcd c0x0000 (---------------) + I itako
- 0x002cae85, // n0x0dce c0x0000 (---------------) + I iwama
- 0x00207f44, // n0x0dcf c0x0000 (---------------) + I joso
- 0x002ae7c6, // n0x0dd0 c0x0000 (---------------) + I kamisu
- 0x0023b7c6, // n0x0dd1 c0x0000 (---------------) + I kasama
- 0x00341887, // n0x0dd2 c0x0000 (---------------) + I kashima
- 0x0020b60b, // n0x0dd3 c0x0000 (---------------) + I kasumigaura
- 0x00232c84, // n0x0dd4 c0x0000 (---------------) + I koga
- 0x0033ee44, // n0x0dd5 c0x0000 (---------------) + I miho
- 0x00246f04, // n0x0dd6 c0x0000 (---------------) + I mito
- 0x002b4f86, // n0x0dd7 c0x0000 (---------------) + I moriya
- 0x00204884, // n0x0dd8 c0x0000 (---------------) + I naka
- 0x00376c08, // n0x0dd9 c0x0000 (---------------) + I namegata
- 0x00321385, // n0x0dda c0x0000 (---------------) + I oarai
- 0x00204045, // n0x0ddb c0x0000 (---------------) + I ogawa
- 0x00393607, // n0x0ddc c0x0000 (---------------) + I omitama
- 0x00206c89, // n0x0ddd c0x0000 (---------------) + I ryugasaki
- 0x003396c5, // n0x0dde c0x0000 (---------------) + I sakai
- 0x0030cc0a, // n0x0ddf c0x0000 (---------------) + I sakuragawa
- 0x0027bc89, // n0x0de0 c0x0000 (---------------) + I shimodate
- 0x0027db0a, // n0x0de1 c0x0000 (---------------) + I shimotsuma
- 0x00395689, // n0x0de2 c0x0000 (---------------) + I shirosato
- 0x00339a04, // n0x0de3 c0x0000 (---------------) + I sowa
- 0x0029fdc5, // n0x0de4 c0x0000 (---------------) + I suifu
- 0x0029cec8, // n0x0de5 c0x0000 (---------------) + I takahagi
- 0x002d0fcb, // n0x0de6 c0x0000 (---------------) + I tamatsukuri
- 0x002df1c5, // n0x0de7 c0x0000 (---------------) + I tokai
- 0x00352046, // n0x0de8 c0x0000 (---------------) + I tomobe
- 0x0021a304, // n0x0de9 c0x0000 (---------------) + I tone
- 0x00268846, // n0x0dea c0x0000 (---------------) + I toride
- 0x0024e409, // n0x0deb c0x0000 (---------------) + I tsuchiura
- 0x0032d387, // n0x0dec c0x0000 (---------------) + I tsukuba
- 0x00387c88, // n0x0ded c0x0000 (---------------) + I uchihara
- 0x002315c6, // n0x0dee c0x0000 (---------------) + I ushiku
- 0x002e38c7, // n0x0def c0x0000 (---------------) + I yachiyo
- 0x0026dc08, // n0x0df0 c0x0000 (---------------) + I yamagata
- 0x00377b86, // n0x0df1 c0x0000 (---------------) + I yawara
- 0x00260d44, // n0x0df2 c0x0000 (---------------) + I yuki
- 0x0034af87, // n0x0df3 c0x0000 (---------------) + I anamizu
- 0x00336fc5, // n0x0df4 c0x0000 (---------------) + I hakui
- 0x0034be87, // n0x0df5 c0x0000 (---------------) + I hakusan
- 0x00281f04, // n0x0df6 c0x0000 (---------------) + I kaga
- 0x00226886, // n0x0df7 c0x0000 (---------------) + I kahoku
- 0x0037ffc8, // n0x0df8 c0x0000 (---------------) + I kanazawa
- 0x002826c8, // n0x0df9 c0x0000 (---------------) + I kawakita
- 0x002be447, // n0x0dfa c0x0000 (---------------) + I komatsu
- 0x0023fcc8, // n0x0dfb c0x0000 (---------------) + I nakanoto
- 0x0027e905, // n0x0dfc c0x0000 (---------------) + I nanao
- 0x00207cc4, // n0x0dfd c0x0000 (---------------) + I nomi
- 0x00312a88, // n0x0dfe c0x0000 (---------------) + I nonoichi
- 0x0023fdc4, // n0x0dff c0x0000 (---------------) + I noto
- 0x0020f2c5, // n0x0e00 c0x0000 (---------------) + I shika
- 0x002d2b84, // n0x0e01 c0x0000 (---------------) + I suzu
- 0x0027d707, // n0x0e02 c0x0000 (---------------) + I tsubata
- 0x0031c3c7, // n0x0e03 c0x0000 (---------------) + I tsurugi
- 0x0026e588, // n0x0e04 c0x0000 (---------------) + I uchinada
- 0x0028dd06, // n0x0e05 c0x0000 (---------------) + I wajima
- 0x0024ee85, // n0x0e06 c0x0000 (---------------) + I fudai
- 0x00268108, // n0x0e07 c0x0000 (---------------) + I fujisawa
- 0x00364a08, // n0x0e08 c0x0000 (---------------) + I hanamaki
- 0x0028b089, // n0x0e09 c0x0000 (---------------) + I hiraizumi
- 0x0021af86, // n0x0e0a c0x0000 (---------------) + I hirono
- 0x0029ba88, // n0x0e0b c0x0000 (---------------) + I ichinohe
- 0x0038f78a, // n0x0e0c c0x0000 (---------------) + I ichinoseki
- 0x00271fc8, // n0x0e0d c0x0000 (---------------) + I iwaizumi
- 0x002c3b85, // n0x0e0e c0x0000 (---------------) + I iwate
- 0x0031b686, // n0x0e0f c0x0000 (---------------) + I joboji
- 0x0027bb48, // n0x0e10 c0x0000 (---------------) + I kamaishi
- 0x0020deca, // n0x0e11 c0x0000 (---------------) + I kanegasaki
- 0x0032a887, // n0x0e12 c0x0000 (---------------) + I karumai
- 0x00273345, // n0x0e13 c0x0000 (---------------) + I kawai
- 0x00209588, // n0x0e14 c0x0000 (---------------) + I kitakami
- 0x00224704, // n0x0e15 c0x0000 (---------------) + I kuji
- 0x00205d06, // n0x0e16 c0x0000 (---------------) + I kunohe
- 0x002aa5c8, // n0x0e17 c0x0000 (---------------) + I kuzumaki
- 0x00207d46, // n0x0e18 c0x0000 (---------------) + I miyako
- 0x00304788, // n0x0e19 c0x0000 (---------------) + I mizusawa
- 0x0022ac87, // n0x0e1a c0x0000 (---------------) + I morioka
- 0x00205106, // n0x0e1b c0x0000 (---------------) + I ninohe
- 0x00384f84, // n0x0e1c c0x0000 (---------------) + I noda
- 0x0029a847, // n0x0e1d c0x0000 (---------------) + I ofunato
- 0x002e13c4, // n0x0e1e c0x0000 (---------------) + I oshu
- 0x0024e3c7, // n0x0e1f c0x0000 (---------------) + I otsuchi
- 0x0023430d, // n0x0e20 c0x0000 (---------------) + I rikuzentakata
- 0x0026d185, // n0x0e21 c0x0000 (---------------) + I shiwa
- 0x002a71cb, // n0x0e22 c0x0000 (---------------) + I shizukuishi
- 0x002fe746, // n0x0e23 c0x0000 (---------------) + I sumita
- 0x0023c788, // n0x0e24 c0x0000 (---------------) + I tanohata
- 0x00369804, // n0x0e25 c0x0000 (---------------) + I tono
- 0x00264306, // n0x0e26 c0x0000 (---------------) + I yahaba
- 0x0026b046, // n0x0e27 c0x0000 (---------------) + I yamada
- 0x0036c587, // n0x0e28 c0x0000 (---------------) + I ayagawa
- 0x00281d4d, // n0x0e29 c0x0000 (---------------) + I higashikagawa
- 0x002982c7, // n0x0e2a c0x0000 (---------------) + I kanonji
- 0x002e8108, // n0x0e2b c0x0000 (---------------) + I kotohira
- 0x00257385, // n0x0e2c c0x0000 (---------------) + I manno
- 0x00283488, // n0x0e2d c0x0000 (---------------) + I marugame
- 0x002aeac6, // n0x0e2e c0x0000 (---------------) + I mitoyo
- 0x0027e988, // n0x0e2f c0x0000 (---------------) + I naoshima
- 0x0020ce46, // n0x0e30 c0x0000 (---------------) + I sanuki
- 0x0031c2c7, // n0x0e31 c0x0000 (---------------) + I tadotsu
- 0x0026e909, // n0x0e32 c0x0000 (---------------) + I takamatsu
- 0x00369807, // n0x0e33 c0x0000 (---------------) + I tonosho
- 0x002761c8, // n0x0e34 c0x0000 (---------------) + I uchinomi
- 0x00261345, // n0x0e35 c0x0000 (---------------) + I utazu
- 0x00212c08, // n0x0e36 c0x0000 (---------------) + I zentsuji
- 0x00305dc5, // n0x0e37 c0x0000 (---------------) + I akune
- 0x00236bc5, // n0x0e38 c0x0000 (---------------) + I amami
- 0x0030fcc5, // n0x0e39 c0x0000 (---------------) + I hioki
- 0x00209883, // n0x0e3a c0x0000 (---------------) + I isa
- 0x0026f3c4, // n0x0e3b c0x0000 (---------------) + I isen
- 0x00209785, // n0x0e3c c0x0000 (---------------) + I izumi
- 0x00271789, // n0x0e3d c0x0000 (---------------) + I kagoshima
- 0x002b4d06, // n0x0e3e c0x0000 (---------------) + I kanoya
- 0x002c5c48, // n0x0e3f c0x0000 (---------------) + I kawanabe
- 0x002d3c45, // n0x0e40 c0x0000 (---------------) + I kinko
- 0x00314307, // n0x0e41 c0x0000 (---------------) + I kouyama
- 0x002d3a4a, // n0x0e42 c0x0000 (---------------) + I makurazaki
- 0x002c4889, // n0x0e43 c0x0000 (---------------) + I matsumoto
- 0x002bf68a, // n0x0e44 c0x0000 (---------------) + I minamitane
- 0x002bb148, // n0x0e45 c0x0000 (---------------) + I nakatane
- 0x0021df8c, // n0x0e46 c0x0000 (---------------) + I nishinoomote
- 0x0026f0cd, // n0x0e47 c0x0000 (---------------) + I satsumasendai
- 0x002da843, // n0x0e48 c0x0000 (---------------) + I soo
- 0x00304688, // n0x0e49 c0x0000 (---------------) + I tarumizu
- 0x00211dc5, // n0x0e4a c0x0000 (---------------) + I yusui
- 0x00343086, // n0x0e4b c0x0000 (---------------) + I aikawa
- 0x0033ea46, // n0x0e4c c0x0000 (---------------) + I atsugi
- 0x002c35c5, // n0x0e4d c0x0000 (---------------) + I ayase
- 0x00383449, // n0x0e4e c0x0000 (---------------) + I chigasaki
- 0x00240845, // n0x0e4f c0x0000 (---------------) + I ebina
- 0x00268108, // n0x0e50 c0x0000 (---------------) + I fujisawa
- 0x00265b06, // n0x0e51 c0x0000 (---------------) + I hadano
- 0x00328686, // n0x0e52 c0x0000 (---------------) + I hakone
- 0x0028c209, // n0x0e53 c0x0000 (---------------) + I hiratsuka
- 0x00377387, // n0x0e54 c0x0000 (---------------) + I isehara
- 0x00315c06, // n0x0e55 c0x0000 (---------------) + I kaisei
- 0x002d39c8, // n0x0e56 c0x0000 (---------------) + I kamakura
- 0x003823c8, // n0x0e57 c0x0000 (---------------) + I kiyokawa
- 0x0032b7c7, // n0x0e58 c0x0000 (---------------) + I matsuda
- 0x0025240e, // n0x0e59 c0x0000 (---------------) + I minamiashigara
- 0x002aed05, // n0x0e5a c0x0000 (---------------) + I miura
- 0x0023e405, // n0x0e5b c0x0000 (---------------) + I nakai
- 0x00207c48, // n0x0e5c c0x0000 (---------------) + I ninomiya
- 0x00202487, // n0x0e5d c0x0000 (---------------) + I odawara
- 0x00238bc2, // n0x0e5e c0x0000 (---------------) + I oi
- 0x002a6c04, // n0x0e5f c0x0000 (---------------) + I oiso
- 0x003636ca, // n0x0e60 c0x0000 (---------------) + I sagamihara
- 0x0024e788, // n0x0e61 c0x0000 (---------------) + I samukawa
- 0x00337906, // n0x0e62 c0x0000 (---------------) + I tsukui
- 0x00283b88, // n0x0e63 c0x0000 (---------------) + I yamakita
- 0x0022afc6, // n0x0e64 c0x0000 (---------------) + I yamato
- 0x00311d48, // n0x0e65 c0x0000 (---------------) + I yokosuka
- 0x00297548, // n0x0e66 c0x0000 (---------------) + I yugawara
- 0x00236b84, // n0x0e67 c0x0000 (---------------) + I zama
- 0x003185c5, // n0x0e68 c0x0000 (---------------) + I zushi
- 0x006735c4, // n0x0e69 c0x0001 (---------------) ! I city
- 0x006735c4, // n0x0e6a c0x0001 (---------------) ! I city
- 0x006735c4, // n0x0e6b c0x0001 (---------------) ! I city
- 0x00201ac3, // n0x0e6c c0x0000 (---------------) + I aki
- 0x002f3a86, // n0x0e6d c0x0000 (---------------) + I geisei
- 0x002685c6, // n0x0e6e c0x0000 (---------------) + I hidaka
- 0x0028888c, // n0x0e6f c0x0000 (---------------) + I higashitsuno
- 0x00201b43, // n0x0e70 c0x0000 (---------------) + I ino
- 0x002ab006, // n0x0e71 c0x0000 (---------------) + I kagami
- 0x00204904, // n0x0e72 c0x0000 (---------------) + I kami
- 0x0020e0c8, // n0x0e73 c0x0000 (---------------) + I kitagawa
- 0x002ba445, // n0x0e74 c0x0000 (---------------) + I kochi
- 0x003637c6, // n0x0e75 c0x0000 (---------------) + I mihara
- 0x002a2e48, // n0x0e76 c0x0000 (---------------) + I motoyama
- 0x002bc286, // n0x0e77 c0x0000 (---------------) + I muroto
- 0x002f8bc6, // n0x0e78 c0x0000 (---------------) + I nahari
- 0x00248448, // n0x0e79 c0x0000 (---------------) + I nakamura
- 0x00374747, // n0x0e7a c0x0000 (---------------) + I nankoku
- 0x00251f89, // n0x0e7b c0x0000 (---------------) + I nishitosa
- 0x00328d8a, // n0x0e7c c0x0000 (---------------) + I niyodogawa
- 0x00240384, // n0x0e7d c0x0000 (---------------) + I ochi
- 0x0022ecc5, // n0x0e7e c0x0000 (---------------) + I okawa
- 0x00286c45, // n0x0e7f c0x0000 (---------------) + I otoyo
- 0x0022a786, // n0x0e80 c0x0000 (---------------) + I otsuki
- 0x00240646, // n0x0e81 c0x0000 (---------------) + I sakawa
- 0x00291906, // n0x0e82 c0x0000 (---------------) + I sukumo
- 0x002d1e06, // n0x0e83 c0x0000 (---------------) + I susaki
- 0x002520c4, // n0x0e84 c0x0000 (---------------) + I tosa
- 0x002520cb, // n0x0e85 c0x0000 (---------------) + I tosashimizu
- 0x00221244, // n0x0e86 c0x0000 (---------------) + I toyo
- 0x00203a05, // n0x0e87 c0x0000 (---------------) + I tsuno
- 0x00296285, // n0x0e88 c0x0000 (---------------) + I umaji
- 0x00207006, // n0x0e89 c0x0000 (---------------) + I yasuda
- 0x00209f08, // n0x0e8a c0x0000 (---------------) + I yusuhara
- 0x0026ef87, // n0x0e8b c0x0000 (---------------) + I amakusa
- 0x0034e684, // n0x0e8c c0x0000 (---------------) + I arao
- 0x00209dc3, // n0x0e8d c0x0000 (---------------) + I aso
- 0x002e3545, // n0x0e8e c0x0000 (---------------) + I choyo
- 0x00351f07, // n0x0e8f c0x0000 (---------------) + I gyokuto
- 0x0028f9c9, // n0x0e90 c0x0000 (---------------) + I hitoyoshi
- 0x0026ee8b, // n0x0e91 c0x0000 (---------------) + I kamiamakusa
- 0x00341887, // n0x0e92 c0x0000 (---------------) + I kashima
- 0x0036c287, // n0x0e93 c0x0000 (---------------) + I kikuchi
- 0x002d4744, // n0x0e94 c0x0000 (---------------) + I kosa
- 0x002a2d48, // n0x0e95 c0x0000 (---------------) + I kumamoto
- 0x00253387, // n0x0e96 c0x0000 (---------------) + I mashiki
- 0x0028fc06, // n0x0e97 c0x0000 (---------------) + I mifune
- 0x00260ac8, // n0x0e98 c0x0000 (---------------) + I minamata
- 0x0029ee4b, // n0x0e99 c0x0000 (---------------) + I minamioguni
- 0x0034cac6, // n0x0e9a c0x0000 (---------------) + I nagasu
- 0x0020e649, // n0x0e9b c0x0000 (---------------) + I nishihara
- 0x0029efc5, // n0x0e9c c0x0000 (---------------) + I oguni
- 0x002e3dc3, // n0x0e9d c0x0000 (---------------) + I ozu
- 0x002c4946, // n0x0e9e c0x0000 (---------------) + I sumoto
- 0x0022ab88, // n0x0e9f c0x0000 (---------------) + I takamori
- 0x0020cf03, // n0x0ea0 c0x0000 (---------------) + I uki
- 0x002269c3, // n0x0ea1 c0x0000 (---------------) + I uto
- 0x0026dc06, // n0x0ea2 c0x0000 (---------------) + I yamaga
- 0x0022afc6, // n0x0ea3 c0x0000 (---------------) + I yamato
- 0x00373e8a, // n0x0ea4 c0x0000 (---------------) + I yatsushiro
- 0x00269e45, // n0x0ea5 c0x0000 (---------------) + I ayabe
- 0x0026ae8b, // n0x0ea6 c0x0000 (---------------) + I fukuchiyama
- 0x00289bcb, // n0x0ea7 c0x0000 (---------------) + I higashiyama
- 0x00229783, // n0x0ea8 c0x0000 (---------------) + I ide
- 0x00213cc3, // n0x0ea9 c0x0000 (---------------) + I ine
- 0x00298c44, // n0x0eaa c0x0000 (---------------) + I joyo
- 0x0023a807, // n0x0eab c0x0000 (---------------) + I kameoka
- 0x0022ac04, // n0x0eac c0x0000 (---------------) + I kamo
- 0x00206e44, // n0x0ead c0x0000 (---------------) + I kita
- 0x002f1c04, // n0x0eae c0x0000 (---------------) + I kizu
- 0x002722c8, // n0x0eaf c0x0000 (---------------) + I kumiyama
- 0x0035edc8, // n0x0eb0 c0x0000 (---------------) + I kyotamba
- 0x0030f889, // n0x0eb1 c0x0000 (---------------) + I kyotanabe
- 0x003165c8, // n0x0eb2 c0x0000 (---------------) + I kyotango
- 0x0030c047, // n0x0eb3 c0x0000 (---------------) + I maizuru
- 0x00213fc6, // n0x0eb4 c0x0000 (---------------) + I minami
- 0x002c588f, // n0x0eb5 c0x0000 (---------------) + I minamiyamashiro
- 0x002aee46, // n0x0eb6 c0x0000 (---------------) + I miyazu
- 0x002ba3c4, // n0x0eb7 c0x0000 (---------------) + I muko
- 0x0035ec0a, // n0x0eb8 c0x0000 (---------------) + I nagaokakyo
- 0x00351e07, // n0x0eb9 c0x0000 (---------------) + I nakagyo
- 0x00204d46, // n0x0eba c0x0000 (---------------) + I nantan
- 0x0027c389, // n0x0ebb c0x0000 (---------------) + I oyamazaki
- 0x0030f805, // n0x0ebc c0x0000 (---------------) + I sakyo
- 0x002c6f45, // n0x0ebd c0x0000 (---------------) + I seika
- 0x0030f946, // n0x0ebe c0x0000 (---------------) + I tanabe
- 0x00212d43, // n0x0ebf c0x0000 (---------------) + I uji
- 0x00224749, // n0x0ec0 c0x0000 (---------------) + I ujitawara
- 0x00214fc6, // n0x0ec1 c0x0000 (---------------) + I wazuka
- 0x0023aa49, // n0x0ec2 c0x0000 (---------------) + I yamashina
- 0x003804c6, // n0x0ec3 c0x0000 (---------------) + I yawata
- 0x002ad5c5, // n0x0ec4 c0x0000 (---------------) + I asahi
- 0x0035dd05, // n0x0ec5 c0x0000 (---------------) + I inabe
- 0x00233203, // n0x0ec6 c0x0000 (---------------) + I ise
- 0x0023a948, // n0x0ec7 c0x0000 (---------------) + I kameyama
- 0x002406c7, // n0x0ec8 c0x0000 (---------------) + I kawagoe
- 0x0037aec4, // n0x0ec9 c0x0000 (---------------) + I kiho
- 0x0022a888, // n0x0eca c0x0000 (---------------) + I kisosaki
- 0x002927c4, // n0x0ecb c0x0000 (---------------) + I kiwa
- 0x002d4306, // n0x0ecc c0x0000 (---------------) + I komono
- 0x00285906, // n0x0ecd c0x0000 (---------------) + I kumano
- 0x0022f386, // n0x0ece c0x0000 (---------------) + I kuwana
- 0x002b5109, // n0x0ecf c0x0000 (---------------) + I matsusaka
- 0x002cae05, // n0x0ed0 c0x0000 (---------------) + I meiwa
- 0x00292a46, // n0x0ed1 c0x0000 (---------------) + I mihama
- 0x00370d89, // n0x0ed2 c0x0000 (---------------) + I minamiise
- 0x002adc06, // n0x0ed3 c0x0000 (---------------) + I misugi
- 0x00272346, // n0x0ed4 c0x0000 (---------------) + I miyama
- 0x0036fe46, // n0x0ed5 c0x0000 (---------------) + I nabari
- 0x0021f645, // n0x0ed6 c0x0000 (---------------) + I shima
- 0x002d2b86, // n0x0ed7 c0x0000 (---------------) + I suzuka
- 0x0031c2c4, // n0x0ed8 c0x0000 (---------------) + I tado
- 0x0028ee85, // n0x0ed9 c0x0000 (---------------) + I taiki
- 0x00245104, // n0x0eda c0x0000 (---------------) + I taki
- 0x002f1b06, // n0x0edb c0x0000 (---------------) + I tamaki
- 0x00395844, // n0x0edc c0x0000 (---------------) + I toba
- 0x00203a03, // n0x0edd c0x0000 (---------------) + I tsu
- 0x00274845, // n0x0ede c0x0000 (---------------) + I udono
- 0x00227348, // n0x0edf c0x0000 (---------------) + I ureshino
- 0x00253ec7, // n0x0ee0 c0x0000 (---------------) + I watarai
- 0x00234a49, // n0x0ee1 c0x0000 (---------------) + I yokkaichi
- 0x00274a88, // n0x0ee2 c0x0000 (---------------) + I furukawa
- 0x002830d1, // n0x0ee3 c0x0000 (---------------) + I higashimatsushima
- 0x0025faca, // n0x0ee4 c0x0000 (---------------) + I ishinomaki
- 0x00316107, // n0x0ee5 c0x0000 (---------------) + I iwanuma
- 0x0038d846, // n0x0ee6 c0x0000 (---------------) + I kakuda
- 0x00204904, // n0x0ee7 c0x0000 (---------------) + I kami
- 0x002a8748, // n0x0ee8 c0x0000 (---------------) + I kawasaki
- 0x0034cc49, // n0x0ee9 c0x0000 (---------------) + I kesennuma
- 0x0028b408, // n0x0eea c0x0000 (---------------) + I marumori
- 0x0028328a, // n0x0eeb c0x0000 (---------------) + I matsushima
- 0x002b45cd, // n0x0eec c0x0000 (---------------) + I minamisanriku
- 0x0028b246, // n0x0eed c0x0000 (---------------) + I misato
- 0x00248546, // n0x0eee c0x0000 (---------------) + I murata
- 0x0029a906, // n0x0eef c0x0000 (---------------) + I natori
- 0x00204047, // n0x0ef0 c0x0000 (---------------) + I ogawara
- 0x002e81c5, // n0x0ef1 c0x0000 (---------------) + I ohira
- 0x00295c07, // n0x0ef2 c0x0000 (---------------) + I onagawa
- 0x0022a945, // n0x0ef3 c0x0000 (---------------) + I osaki
- 0x00294d84, // n0x0ef4 c0x0000 (---------------) + I rifu
- 0x0027c146, // n0x0ef5 c0x0000 (---------------) + I semine
- 0x003416c7, // n0x0ef6 c0x0000 (---------------) + I shibata
- 0x0022444d, // n0x0ef7 c0x0000 (---------------) + I shichikashuku
- 0x0027ba87, // n0x0ef8 c0x0000 (---------------) + I shikama
- 0x002471c8, // n0x0ef9 c0x0000 (---------------) + I shiogama
- 0x00268409, // n0x0efa c0x0000 (---------------) + I shiroishi
- 0x0031b586, // n0x0efb c0x0000 (---------------) + I tagajo
- 0x002e7445, // n0x0efc c0x0000 (---------------) + I taiwa
- 0x0020fe04, // n0x0efd c0x0000 (---------------) + I tome
- 0x00371186, // n0x0efe c0x0000 (---------------) + I tomiya
- 0x00389846, // n0x0eff c0x0000 (---------------) + I wakuya
- 0x0024e906, // n0x0f00 c0x0000 (---------------) + I watari
- 0x00286688, // n0x0f01 c0x0000 (---------------) + I yamamoto
- 0x00395443, // n0x0f02 c0x0000 (---------------) + I zao
- 0x00206fc3, // n0x0f03 c0x0000 (---------------) + I aya
- 0x0036cf45, // n0x0f04 c0x0000 (---------------) + I ebino
- 0x00375946, // n0x0f05 c0x0000 (---------------) + I gokase
- 0x00297505, // n0x0f06 c0x0000 (---------------) + I hyuga
- 0x002317c8, // n0x0f07 c0x0000 (---------------) + I kadogawa
- 0x002882ca, // n0x0f08 c0x0000 (---------------) + I kawaminami
- 0x00389a44, // n0x0f09 c0x0000 (---------------) + I kijo
- 0x0020e0c8, // n0x0f0a c0x0000 (---------------) + I kitagawa
- 0x002815c8, // n0x0f0b c0x0000 (---------------) + I kitakata
- 0x00206e47, // n0x0f0c c0x0000 (---------------) + I kitaura
- 0x002d3d09, // n0x0f0d c0x0000 (---------------) + I kobayashi
- 0x002a2a48, // n0x0f0e c0x0000 (---------------) + I kunitomi
- 0x0026d647, // n0x0f0f c0x0000 (---------------) + I kushima
- 0x0027cdc6, // n0x0f10 c0x0000 (---------------) + I mimata
- 0x00207d4a, // n0x0f11 c0x0000 (---------------) + I miyakonojo
- 0x00371208, // n0x0f12 c0x0000 (---------------) + I miyazaki
- 0x002ae609, // n0x0f13 c0x0000 (---------------) + I morotsuka
- 0x0027fa88, // n0x0f14 c0x0000 (---------------) + I nichinan
- 0x00217e09, // n0x0f15 c0x0000 (---------------) + I nishimera
- 0x00346687, // n0x0f16 c0x0000 (---------------) + I nobeoka
- 0x00302b45, // n0x0f17 c0x0000 (---------------) + I saito
- 0x00329e86, // n0x0f18 c0x0000 (---------------) + I shiiba
- 0x0028f5c8, // n0x0f19 c0x0000 (---------------) + I shintomi
- 0x0023ae48, // n0x0f1a c0x0000 (---------------) + I takaharu
- 0x002462c8, // n0x0f1b c0x0000 (---------------) + I takanabe
- 0x002f9c88, // n0x0f1c c0x0000 (---------------) + I takazaki
- 0x00203a05, // n0x0f1d c0x0000 (---------------) + I tsuno
- 0x0022e144, // n0x0f1e c0x0000 (---------------) + I achi
- 0x0034e008, // n0x0f1f c0x0000 (---------------) + I agematsu
- 0x00204e44, // n0x0f20 c0x0000 (---------------) + I anan
- 0x00395484, // n0x0f21 c0x0000 (---------------) + I aoki
- 0x002ad5c5, // n0x0f22 c0x0000 (---------------) + I asahi
- 0x0027ed87, // n0x0f23 c0x0000 (---------------) + I azumino
- 0x00206a49, // n0x0f24 c0x0000 (---------------) + I chikuhoku
- 0x0036c387, // n0x0f25 c0x0000 (---------------) + I chikuma
- 0x0022e185, // n0x0f26 c0x0000 (---------------) + I chino
- 0x00265906, // n0x0f27 c0x0000 (---------------) + I fujimi
- 0x003317c6, // n0x0f28 c0x0000 (---------------) + I hakuba
- 0x0020a004, // n0x0f29 c0x0000 (---------------) + I hara
- 0x0028c546, // n0x0f2a c0x0000 (---------------) + I hiraya
- 0x0024ecc4, // n0x0f2b c0x0000 (---------------) + I iida
- 0x00256486, // n0x0f2c c0x0000 (---------------) + I iijima
- 0x0034d2c6, // n0x0f2d c0x0000 (---------------) + I iiyama
- 0x0020ec86, // n0x0f2e c0x0000 (---------------) + I iizuna
- 0x00390e45, // n0x0f2f c0x0000 (---------------) + I ikeda
- 0x00231687, // n0x0f30 c0x0000 (---------------) + I ikusaka
- 0x00200243, // n0x0f31 c0x0000 (---------------) + I ina
- 0x0031e389, // n0x0f32 c0x0000 (---------------) + I karuizawa
- 0x00315908, // n0x0f33 c0x0000 (---------------) + I kawakami
- 0x0022a884, // n0x0f34 c0x0000 (---------------) + I kiso
- 0x0026d4cd, // n0x0f35 c0x0000 (---------------) + I kisofukushima
- 0x002827c8, // n0x0f36 c0x0000 (---------------) + I kitaaiki
- 0x002fa008, // n0x0f37 c0x0000 (---------------) + I komagane
- 0x002ae586, // n0x0f38 c0x0000 (---------------) + I komoro
- 0x0026ea09, // n0x0f39 c0x0000 (---------------) + I matsukawa
- 0x002c4889, // n0x0f3a c0x0000 (---------------) + I matsumoto
- 0x0024e105, // n0x0f3b c0x0000 (---------------) + I miasa
- 0x002883ca, // n0x0f3c c0x0000 (---------------) + I minamiaiki
- 0x0025b8ca, // n0x0f3d c0x0000 (---------------) + I minamimaki
- 0x002b064c, // n0x0f3e c0x0000 (---------------) + I minamiminowa
- 0x002b07c6, // n0x0f3f c0x0000 (---------------) + I minowa
- 0x00266386, // n0x0f40 c0x0000 (---------------) + I miyada
- 0x002af8c6, // n0x0f41 c0x0000 (---------------) + I miyota
- 0x00258b89, // n0x0f42 c0x0000 (---------------) + I mochizuki
- 0x0034e4c6, // n0x0f43 c0x0000 (---------------) + I nagano
- 0x0028ba86, // n0x0f44 c0x0000 (---------------) + I nagawa
- 0x00240906, // n0x0f45 c0x0000 (---------------) + I nagiso
- 0x002934c8, // n0x0f46 c0x0000 (---------------) + I nakagawa
- 0x0023fcc6, // n0x0f47 c0x0000 (---------------) + I nakano
- 0x002fe9cb, // n0x0f48 c0x0000 (---------------) + I nozawaonsen
- 0x0027ef05, // n0x0f49 c0x0000 (---------------) + I obuse
- 0x00204045, // n0x0f4a c0x0000 (---------------) + I ogawa
- 0x00266605, // n0x0f4b c0x0000 (---------------) + I okaya
- 0x00353c06, // n0x0f4c c0x0000 (---------------) + I omachi
- 0x00207d03, // n0x0f4d c0x0000 (---------------) + I omi
- 0x0022f306, // n0x0f4e c0x0000 (---------------) + I ookuwa
- 0x0027ba07, // n0x0f4f c0x0000 (---------------) + I ooshika
- 0x002a8605, // n0x0f50 c0x0000 (---------------) + I otaki
- 0x003389c5, // n0x0f51 c0x0000 (---------------) + I otari
- 0x0036ba45, // n0x0f52 c0x0000 (---------------) + I sakae
- 0x00201a06, // n0x0f53 c0x0000 (---------------) + I sakaki
- 0x0024e1c4, // n0x0f54 c0x0000 (---------------) + I saku
- 0x0035fb46, // n0x0f55 c0x0000 (---------------) + I sakuho
- 0x00325709, // n0x0f56 c0x0000 (---------------) + I shimosuwa
- 0x00353a8c, // n0x0f57 c0x0000 (---------------) + I shinanomachi
- 0x00294ac8, // n0x0f58 c0x0000 (---------------) + I shiojiri
- 0x002e5544, // n0x0f59 c0x0000 (---------------) + I suwa
- 0x002d2806, // n0x0f5a c0x0000 (---------------) + I suzaka
- 0x002fe846, // n0x0f5b c0x0000 (---------------) + I takagi
- 0x0022ab88, // n0x0f5c c0x0000 (---------------) + I takamori
- 0x0020f408, // n0x0f5d c0x0000 (---------------) + I takayama
- 0x00353989, // n0x0f5e c0x0000 (---------------) + I tateshina
- 0x00203987, // n0x0f5f c0x0000 (---------------) + I tatsuno
- 0x002e5d09, // n0x0f60 c0x0000 (---------------) + I togakushi
- 0x0025e506, // n0x0f61 c0x0000 (---------------) + I togura
- 0x002204c4, // n0x0f62 c0x0000 (---------------) + I tomi
- 0x00207204, // n0x0f63 c0x0000 (---------------) + I ueda
- 0x0023e8c4, // n0x0f64 c0x0000 (---------------) + I wada
- 0x0026dc08, // n0x0f65 c0x0000 (---------------) + I yamagata
- 0x0020688a, // n0x0f66 c0x0000 (---------------) + I yamanouchi
- 0x00339646, // n0x0f67 c0x0000 (---------------) + I yasaka
- 0x0033e847, // n0x0f68 c0x0000 (---------------) + I yasuoka
- 0x002e9747, // n0x0f69 c0x0000 (---------------) + I chijiwa
- 0x0021edc5, // n0x0f6a c0x0000 (---------------) + I futsu
- 0x00286c04, // n0x0f6b c0x0000 (---------------) + I goto
- 0x0027a8c6, // n0x0f6c c0x0000 (---------------) + I hasami
- 0x002e8206, // n0x0f6d c0x0000 (---------------) + I hirado
- 0x00206743, // n0x0f6e c0x0000 (---------------) + I iki
- 0x00315747, // n0x0f6f c0x0000 (---------------) + I isahaya
- 0x003108c8, // n0x0f70 c0x0000 (---------------) + I kawatana
- 0x0024e24a, // n0x0f71 c0x0000 (---------------) + I kuchinotsu
- 0x002bcc48, // n0x0f72 c0x0000 (---------------) + I matsuura
- 0x0036c108, // n0x0f73 c0x0000 (---------------) + I nagasaki
- 0x00395885, // n0x0f74 c0x0000 (---------------) + I obama
- 0x0023a1c5, // n0x0f75 c0x0000 (---------------) + I omura
- 0x00366645, // n0x0f76 c0x0000 (---------------) + I oseto
- 0x0021f186, // n0x0f77 c0x0000 (---------------) + I saikai
- 0x0029be46, // n0x0f78 c0x0000 (---------------) + I sasebo
- 0x002e5845, // n0x0f79 c0x0000 (---------------) + I seihi
- 0x0038bf49, // n0x0f7a c0x0000 (---------------) + I shimabara
- 0x00286a0c, // n0x0f7b c0x0000 (---------------) + I shinkamigoto
- 0x00226a07, // n0x0f7c c0x0000 (---------------) + I togitsu
- 0x00283308, // n0x0f7d c0x0000 (---------------) + I tsushima
- 0x00279c05, // n0x0f7e c0x0000 (---------------) + I unzen
- 0x006735c4, // n0x0f7f c0x0001 (---------------) ! I city
- 0x00346e44, // n0x0f80 c0x0000 (---------------) + I ando
- 0x0026e184, // n0x0f81 c0x0000 (---------------) + I gose
- 0x0022e2c6, // n0x0f82 c0x0000 (---------------) + I heguri
- 0x0028a74e, // n0x0f83 c0x0000 (---------------) + I higashiyoshino
- 0x00344187, // n0x0f84 c0x0000 (---------------) + I ikaruga
- 0x00204245, // n0x0f85 c0x0000 (---------------) + I ikoma
- 0x0022adcc, // n0x0f86 c0x0000 (---------------) + I kamikitayama
- 0x00292687, // n0x0f87 c0x0000 (---------------) + I kanmaki
- 0x00341647, // n0x0f88 c0x0000 (---------------) + I kashiba
- 0x00344809, // n0x0f89 c0x0000 (---------------) + I kashihara
- 0x002133c9, // n0x0f8a c0x0000 (---------------) + I katsuragi
- 0x00273345, // n0x0f8b c0x0000 (---------------) + I kawai
- 0x00315908, // n0x0f8c c0x0000 (---------------) + I kawakami
- 0x0022ed09, // n0x0f8d c0x0000 (---------------) + I kawanishi
- 0x002c9885, // n0x0f8e c0x0000 (---------------) + I koryo
- 0x002a8548, // n0x0f8f c0x0000 (---------------) + I kurotaki
- 0x002b5f46, // n0x0f90 c0x0000 (---------------) + I mitsue
- 0x002a5986, // n0x0f91 c0x0000 (---------------) + I miyake
- 0x002da0c4, // n0x0f92 c0x0000 (---------------) + I nara
- 0x00257448, // n0x0f93 c0x0000 (---------------) + I nosegawa
- 0x002432c3, // n0x0f94 c0x0000 (---------------) + I oji
- 0x00392684, // n0x0f95 c0x0000 (---------------) + I ouda
- 0x002e35c5, // n0x0f96 c0x0000 (---------------) + I oyodo
- 0x002f4d47, // n0x0f97 c0x0000 (---------------) + I sakurai
- 0x00202285, // n0x0f98 c0x0000 (---------------) + I sango
- 0x0038f649, // n0x0f99 c0x0000 (---------------) + I shimoichi
- 0x00267dcd, // n0x0f9a c0x0000 (---------------) + I shimokitayama
- 0x00285306, // n0x0f9b c0x0000 (---------------) + I shinjo
- 0x00220944, // n0x0f9c c0x0000 (---------------) + I soni
- 0x00335dc8, // n0x0f9d c0x0000 (---------------) + I takatori
- 0x0025ca0a, // n0x0f9e c0x0000 (---------------) + I tawaramoto
- 0x00203207, // n0x0f9f c0x0000 (---------------) + I tenkawa
- 0x0027be45, // n0x0fa0 c0x0000 (---------------) + I tenri
- 0x002070c3, // n0x0fa1 c0x0000 (---------------) + I uda
- 0x00289d8e, // n0x0fa2 c0x0000 (---------------) + I yamatokoriyama
- 0x0022afcc, // n0x0fa3 c0x0000 (---------------) + I yamatotakada
- 0x0027b147, // n0x0fa4 c0x0000 (---------------) + I yamazoe
- 0x0028a907, // n0x0fa5 c0x0000 (---------------) + I yoshino
- 0x002015c3, // n0x0fa6 c0x0000 (---------------) + I aga
- 0x0034e505, // n0x0fa7 c0x0000 (---------------) + I agano
- 0x0026e185, // n0x0fa8 c0x0000 (---------------) + I gosen
- 0x00283f48, // n0x0fa9 c0x0000 (---------------) + I itoigawa
- 0x00281409, // n0x0faa c0x0000 (---------------) + I izumozaki
- 0x0026a386, // n0x0fab c0x0000 (---------------) + I joetsu
- 0x0022ac04, // n0x0fac c0x0000 (---------------) + I kamo
- 0x00316046, // n0x0fad c0x0000 (---------------) + I kariwa
- 0x0038218b, // n0x0fae c0x0000 (---------------) + I kashiwazaki
- 0x002c460c, // n0x0faf c0x0000 (---------------) + I minamiuonuma
- 0x0026c3c7, // n0x0fb0 c0x0000 (---------------) + I mitsuke
- 0x002ba105, // n0x0fb1 c0x0000 (---------------) + I muika
- 0x003743c8, // n0x0fb2 c0x0000 (---------------) + I murakami
- 0x0032b585, // n0x0fb3 c0x0000 (---------------) + I myoko
- 0x0035ec07, // n0x0fb4 c0x0000 (---------------) + I nagaoka
- 0x0025f907, // n0x0fb5 c0x0000 (---------------) + I niigata
- 0x002432c5, // n0x0fb6 c0x0000 (---------------) + I ojiya
- 0x00207d03, // n0x0fb7 c0x0000 (---------------) + I omi
- 0x002109c4, // n0x0fb8 c0x0000 (---------------) + I sado
- 0x00203845, // n0x0fb9 c0x0000 (---------------) + I sanjo
- 0x002f3b45, // n0x0fba c0x0000 (---------------) + I seiro
- 0x002f3b46, // n0x0fbb c0x0000 (---------------) + I seirou
- 0x00274588, // n0x0fbc c0x0000 (---------------) + I sekikawa
- 0x003416c7, // n0x0fbd c0x0000 (---------------) + I shibata
- 0x0033ed46, // n0x0fbe c0x0000 (---------------) + I tagami
- 0x0031abc6, // n0x0fbf c0x0000 (---------------) + I tainai
- 0x0030fc06, // n0x0fc0 c0x0000 (---------------) + I tochio
- 0x002e1589, // n0x0fc1 c0x0000 (---------------) + I tokamachi
- 0x0031adc7, // n0x0fc2 c0x0000 (---------------) + I tsubame
- 0x00207306, // n0x0fc3 c0x0000 (---------------) + I tsunan
- 0x002c4786, // n0x0fc4 c0x0000 (---------------) + I uonuma
- 0x00243386, // n0x0fc5 c0x0000 (---------------) + I yahiko
- 0x00298cc5, // n0x0fc6 c0x0000 (---------------) + I yoita
- 0x00216b86, // n0x0fc7 c0x0000 (---------------) + I yuzawa
- 0x0034c845, // n0x0fc8 c0x0000 (---------------) + I beppu
- 0x002a55c8, // n0x0fc9 c0x0000 (---------------) + I bungoono
- 0x0024facb, // n0x0fca c0x0000 (---------------) + I bungotakada
- 0x0027a6c6, // n0x0fcb c0x0000 (---------------) + I hasama
- 0x002e9784, // n0x0fcc c0x0000 (---------------) + I hiji
- 0x00336449, // n0x0fcd c0x0000 (---------------) + I himeshima
- 0x0028d544, // n0x0fce c0x0000 (---------------) + I hita
- 0x002b5ec8, // n0x0fcf c0x0000 (---------------) + I kamitsue
- 0x0027b5c7, // n0x0fd0 c0x0000 (---------------) + I kokonoe
- 0x0026ff44, // n0x0fd1 c0x0000 (---------------) + I kuju
- 0x002a0f48, // n0x0fd2 c0x0000 (---------------) + I kunisaki
- 0x002a9c04, // n0x0fd3 c0x0000 (---------------) + I kusu
- 0x00298d04, // n0x0fd4 c0x0000 (---------------) + I oita
- 0x002a7585, // n0x0fd5 c0x0000 (---------------) + I saiki
- 0x00335cc6, // n0x0fd6 c0x0000 (---------------) + I taketa
- 0x00272207, // n0x0fd7 c0x0000 (---------------) + I tsukumi
- 0x00222503, // n0x0fd8 c0x0000 (---------------) + I usa
- 0x00288f85, // n0x0fd9 c0x0000 (---------------) + I usuki
- 0x002ab604, // n0x0fda c0x0000 (---------------) + I yufu
- 0x0023e446, // n0x0fdb c0x0000 (---------------) + I akaiwa
- 0x0024e188, // n0x0fdc c0x0000 (---------------) + I asakuchi
- 0x00310605, // n0x0fdd c0x0000 (---------------) + I bizen
- 0x0027e449, // n0x0fde c0x0000 (---------------) + I hayashima
- 0x002b9fc5, // n0x0fdf c0x0000 (---------------) + I ibara
- 0x002ab008, // n0x0fe0 c0x0000 (---------------) + I kagamino
- 0x00340b47, // n0x0fe1 c0x0000 (---------------) + I kasaoka
- 0x0035c188, // n0x0fe2 c0x0000 (---------------) + I kibichuo
- 0x002a0447, // n0x0fe3 c0x0000 (---------------) + I kumenan
- 0x0025adc9, // n0x0fe4 c0x0000 (---------------) + I kurashiki
- 0x002487c6, // n0x0fe5 c0x0000 (---------------) + I maniwa
- 0x00303986, // n0x0fe6 c0x0000 (---------------) + I misaki
- 0x00240904, // n0x0fe7 c0x0000 (---------------) + I nagi
- 0x0027cd05, // n0x0fe8 c0x0000 (---------------) + I niimi
- 0x002dac0c, // n0x0fe9 c0x0000 (---------------) + I nishiawakura
- 0x00266607, // n0x0fea c0x0000 (---------------) + I okayama
- 0x00266c47, // n0x0feb c0x0000 (---------------) + I satosho
- 0x002e9608, // n0x0fec c0x0000 (---------------) + I setouchi
- 0x00285306, // n0x0fed c0x0000 (---------------) + I shinjo
- 0x00340f44, // n0x0fee c0x0000 (---------------) + I shoo
- 0x0030ad04, // n0x0fef c0x0000 (---------------) + I soja
- 0x0023c909, // n0x0ff0 c0x0000 (---------------) + I takahashi
- 0x002af9c6, // n0x0ff1 c0x0000 (---------------) + I tamano
- 0x002601c7, // n0x0ff2 c0x0000 (---------------) + I tsuyama
- 0x00295d44, // n0x0ff3 c0x0000 (---------------) + I wake
- 0x002b4e06, // n0x0ff4 c0x0000 (---------------) + I yakage
- 0x00342185, // n0x0ff5 c0x0000 (---------------) + I aguni
- 0x0028d847, // n0x0ff6 c0x0000 (---------------) + I ginowan
- 0x002fe946, // n0x0ff7 c0x0000 (---------------) + I ginoza
- 0x00239cc9, // n0x0ff8 c0x0000 (---------------) + I gushikami
- 0x002b0487, // n0x0ff9 c0x0000 (---------------) + I haebaru
- 0x002545c7, // n0x0ffa c0x0000 (---------------) + I higashi
- 0x0028c086, // n0x0ffb c0x0000 (---------------) + I hirara
- 0x00231145, // n0x0ffc c0x0000 (---------------) + I iheya
- 0x0026cf88, // n0x0ffd c0x0000 (---------------) + I ishigaki
- 0x00214e48, // n0x0ffe c0x0000 (---------------) + I ishikawa
- 0x0022a5c6, // n0x0fff c0x0000 (---------------) + I itoman
- 0x00310645, // n0x1000 c0x0000 (---------------) + I izena
- 0x002f0446, // n0x1001 c0x0000 (---------------) + I kadena
- 0x00201b03, // n0x1002 c0x0000 (---------------) + I kin
- 0x00283dc9, // n0x1003 c0x0000 (---------------) + I kitadaito
- 0x0029168e, // n0x1004 c0x0000 (---------------) + I kitanakagusuku
- 0x0029f548, // n0x1005 c0x0000 (---------------) + I kumejima
- 0x002928c8, // n0x1006 c0x0000 (---------------) + I kunigami
- 0x0022a3cb, // n0x1007 c0x0000 (---------------) + I minamidaito
- 0x0027e686, // n0x1008 c0x0000 (---------------) + I motobu
- 0x002402c4, // n0x1009 c0x0000 (---------------) + I nago
- 0x0026ecc4, // n0x100a c0x0000 (---------------) + I naha
- 0x0029178a, // n0x100b c0x0000 (---------------) + I nakagusuku
- 0x0020d7c7, // n0x100c c0x0000 (---------------) + I nakijin
- 0x002073c5, // n0x100d c0x0000 (---------------) + I nanjo
- 0x0020e649, // n0x100e c0x0000 (---------------) + I nishihara
- 0x002a6885, // n0x100f c0x0000 (---------------) + I ogimi
- 0x003954c7, // n0x1010 c0x0000 (---------------) + I okinawa
- 0x002988c4, // n0x1011 c0x0000 (---------------) + I onna
- 0x00265dc7, // n0x1012 c0x0000 (---------------) + I shimoji
- 0x003162c8, // n0x1013 c0x0000 (---------------) + I taketomi
- 0x002a43c6, // n0x1014 c0x0000 (---------------) + I tarama
- 0x002065c9, // n0x1015 c0x0000 (---------------) + I tokashiki
- 0x002a2b4a, // n0x1016 c0x0000 (---------------) + I tomigusuku
- 0x0020d746, // n0x1017 c0x0000 (---------------) + I tonaki
- 0x00282306, // n0x1018 c0x0000 (---------------) + I urasoe
- 0x00296205, // n0x1019 c0x0000 (---------------) + I uruma
- 0x00361285, // n0x101a c0x0000 (---------------) + I yaese
- 0x00305787, // n0x101b c0x0000 (---------------) + I yomitan
- 0x00309c08, // n0x101c c0x0000 (---------------) + I yonabaru
- 0x003420c8, // n0x101d c0x0000 (---------------) + I yonaguni
- 0x00236b86, // n0x101e c0x0000 (---------------) + I zamami
- 0x0031d9c5, // n0x101f c0x0000 (---------------) + I abeno
- 0x002403ce, // n0x1020 c0x0000 (---------------) + I chihayaakasaka
- 0x002be904, // n0x1021 c0x0000 (---------------) + I chuo
- 0x0022a545, // n0x1022 c0x0000 (---------------) + I daito
- 0x00265289, // n0x1023 c0x0000 (---------------) + I fujiidera
- 0x00273148, // n0x1024 c0x0000 (---------------) + I habikino
- 0x00278046, // n0x1025 c0x0000 (---------------) + I hannan
- 0x0028630c, // n0x1026 c0x0000 (---------------) + I higashiosaka
- 0x00287ed0, // n0x1027 c0x0000 (---------------) + I higashisumiyoshi
- 0x0028a38f, // n0x1028 c0x0000 (---------------) + I higashiyodogawa
- 0x0028b7c8, // n0x1029 c0x0000 (---------------) + I hirakata
- 0x00316ac7, // n0x102a c0x0000 (---------------) + I ibaraki
- 0x00390e45, // n0x102b c0x0000 (---------------) + I ikeda
- 0x00209785, // n0x102c c0x0000 (---------------) + I izumi
- 0x00272089, // n0x102d c0x0000 (---------------) + I izumiotsu
- 0x00209789, // n0x102e c0x0000 (---------------) + I izumisano
- 0x00216406, // n0x102f c0x0000 (---------------) + I kadoma
- 0x002df247, // n0x1030 c0x0000 (---------------) + I kaizuka
- 0x0037c505, // n0x1031 c0x0000 (---------------) + I kanan
- 0x00375c89, // n0x1032 c0x0000 (---------------) + I kashiwara
- 0x003175c6, // n0x1033 c0x0000 (---------------) + I katano
- 0x0034e30d, // n0x1034 c0x0000 (---------------) + I kawachinagano
- 0x0026d109, // n0x1035 c0x0000 (---------------) + I kishiwada
- 0x00206e44, // n0x1036 c0x0000 (---------------) + I kita
- 0x0029f2c8, // n0x1037 c0x0000 (---------------) + I kumatori
- 0x0034e0c9, // n0x1038 c0x0000 (---------------) + I matsubara
- 0x00339806, // n0x1039 c0x0000 (---------------) + I minato
- 0x00265a05, // n0x103a c0x0000 (---------------) + I minoh
- 0x00303986, // n0x103b c0x0000 (---------------) + I misaki
- 0x00387b49, // n0x103c c0x0000 (---------------) + I moriguchi
- 0x003896c8, // n0x103d c0x0000 (---------------) + I neyagawa
- 0x00208b85, // n0x103e c0x0000 (---------------) + I nishi
- 0x00257444, // n0x103f c0x0000 (---------------) + I nose
- 0x002864cb, // n0x1040 c0x0000 (---------------) + I osakasayama
- 0x003396c5, // n0x1041 c0x0000 (---------------) + I sakai
- 0x00286606, // n0x1042 c0x0000 (---------------) + I sayama
- 0x0026f406, // n0x1043 c0x0000 (---------------) + I sennan
- 0x00243d86, // n0x1044 c0x0000 (---------------) + I settsu
- 0x003260cb, // n0x1045 c0x0000 (---------------) + I shijonawate
- 0x0027e549, // n0x1046 c0x0000 (---------------) + I shimamoto
- 0x002e5b85, // n0x1047 c0x0000 (---------------) + I suita
- 0x0035bf47, // n0x1048 c0x0000 (---------------) + I tadaoka
- 0x0025fa46, // n0x1049 c0x0000 (---------------) + I taishi
- 0x002345c6, // n0x104a c0x0000 (---------------) + I tajiri
- 0x0026df08, // n0x104b c0x0000 (---------------) + I takaishi
- 0x00376d89, // n0x104c c0x0000 (---------------) + I takatsuki
- 0x00246f8c, // n0x104d c0x0000 (---------------) + I tondabayashi
- 0x00351d08, // n0x104e c0x0000 (---------------) + I toyonaka
- 0x002260c6, // n0x104f c0x0000 (---------------) + I toyono
- 0x00330543, // n0x1050 c0x0000 (---------------) + I yao
- 0x0027ebc6, // n0x1051 c0x0000 (---------------) + I ariake
- 0x0025ac85, // n0x1052 c0x0000 (---------------) + I arita
- 0x0026b1c8, // n0x1053 c0x0000 (---------------) + I fukudomi
- 0x0021b746, // n0x1054 c0x0000 (---------------) + I genkai
- 0x0028da88, // n0x1055 c0x0000 (---------------) + I hamatama
- 0x00228245, // n0x1056 c0x0000 (---------------) + I hizen
- 0x00352985, // n0x1057 c0x0000 (---------------) + I imari
- 0x002877c8, // n0x1058 c0x0000 (---------------) + I kamimine
- 0x002d2c87, // n0x1059 c0x0000 (---------------) + I kanzaki
- 0x0033e987, // n0x105a c0x0000 (---------------) + I karatsu
- 0x00341887, // n0x105b c0x0000 (---------------) + I kashima
- 0x0022aa08, // n0x105c c0x0000 (---------------) + I kitagata
- 0x00316c08, // n0x105d c0x0000 (---------------) + I kitahata
- 0x00253286, // n0x105e c0x0000 (---------------) + I kiyama
- 0x002f1947, // n0x105f c0x0000 (---------------) + I kouhoku
- 0x002896c7, // n0x1060 c0x0000 (---------------) + I kyuragi
- 0x00325dca, // n0x1061 c0x0000 (---------------) + I nishiarita
- 0x00212803, // n0x1062 c0x0000 (---------------) + I ogi
- 0x00353c06, // n0x1063 c0x0000 (---------------) + I omachi
- 0x002069c5, // n0x1064 c0x0000 (---------------) + I ouchi
- 0x00275104, // n0x1065 c0x0000 (---------------) + I saga
- 0x00268409, // n0x1066 c0x0000 (---------------) + I shiroishi
- 0x0025ad44, // n0x1067 c0x0000 (---------------) + I taku
- 0x00253f44, // n0x1068 c0x0000 (---------------) + I tara
- 0x002891c4, // n0x1069 c0x0000 (---------------) + I tosu
- 0x0028a90b, // n0x106a c0x0000 (---------------) + I yoshinogari
- 0x0034e247, // n0x106b c0x0000 (---------------) + I arakawa
- 0x00240605, // n0x106c c0x0000 (---------------) + I asaka
- 0x00280ac8, // n0x106d c0x0000 (---------------) + I chichibu
- 0x00265906, // n0x106e c0x0000 (---------------) + I fujimi
- 0x00265908, // n0x106f c0x0000 (---------------) + I fujimino
- 0x00269d86, // n0x1070 c0x0000 (---------------) + I fukaya
- 0x00278e45, // n0x1071 c0x0000 (---------------) + I hanno
- 0x002794c5, // n0x1072 c0x0000 (---------------) + I hanyu
- 0x0027b306, // n0x1073 c0x0000 (---------------) + I hasuda
- 0x0027b788, // n0x1074 c0x0000 (---------------) + I hatogaya
- 0x0027c2c8, // n0x1075 c0x0000 (---------------) + I hatoyama
- 0x002685c6, // n0x1076 c0x0000 (---------------) + I hidaka
- 0x0028090f, // n0x1077 c0x0000 (---------------) + I higashichichibu
- 0x00283890, // n0x1078 c0x0000 (---------------) + I higashimatsuyama
- 0x002028c5, // n0x1079 c0x0000 (---------------) + I honjo
- 0x00200243, // n0x107a c0x0000 (---------------) + I ina
- 0x002797c5, // n0x107b c0x0000 (---------------) + I iruma
- 0x0030b3c8, // n0x107c c0x0000 (---------------) + I iwatsuki
- 0x00209689, // n0x107d c0x0000 (---------------) + I kamiizumi
- 0x00304f08, // n0x107e c0x0000 (---------------) + I kamikawa
- 0x00340c88, // n0x107f c0x0000 (---------------) + I kamisato
- 0x00391808, // n0x1080 c0x0000 (---------------) + I kasukabe
- 0x002406c7, // n0x1081 c0x0000 (---------------) + I kawagoe
- 0x002655c9, // n0x1082 c0x0000 (---------------) + I kawaguchi
- 0x0028dc88, // n0x1083 c0x0000 (---------------) + I kawajima
- 0x00369344, // n0x1084 c0x0000 (---------------) + I kazo
- 0x00289048, // n0x1085 c0x0000 (---------------) + I kitamoto
- 0x0028ec09, // n0x1086 c0x0000 (---------------) + I koshigaya
- 0x00307ec7, // n0x1087 c0x0000 (---------------) + I kounosu
- 0x00293e04, // n0x1088 c0x0000 (---------------) + I kuki
- 0x0036c448, // n0x1089 c0x0000 (---------------) + I kumagaya
- 0x0023144a, // n0x108a c0x0000 (---------------) + I matsubushi
- 0x0031ef46, // n0x108b c0x0000 (---------------) + I minano
- 0x0028b246, // n0x108c c0x0000 (---------------) + I misato
- 0x0021ae49, // n0x108d c0x0000 (---------------) + I miyashiro
- 0x00288107, // n0x108e c0x0000 (---------------) + I miyoshi
- 0x002b62c8, // n0x108f c0x0000 (---------------) + I moroyama
- 0x00201588, // n0x1090 c0x0000 (---------------) + I nagatoro
- 0x00342d88, // n0x1091 c0x0000 (---------------) + I namegawa
- 0x003721c5, // n0x1092 c0x0000 (---------------) + I niiza
- 0x00362605, // n0x1093 c0x0000 (---------------) + I ogano
- 0x00204045, // n0x1094 c0x0000 (---------------) + I ogawa
- 0x0026e145, // n0x1095 c0x0000 (---------------) + I ogose
- 0x00259347, // n0x1096 c0x0000 (---------------) + I okegawa
- 0x00207d05, // n0x1097 c0x0000 (---------------) + I omiya
- 0x002a8605, // n0x1098 c0x0000 (---------------) + I otaki
- 0x00386ac6, // n0x1099 c0x0000 (---------------) + I ranzan
- 0x00304e47, // n0x109a c0x0000 (---------------) + I ryokami
- 0x002d0f07, // n0x109b c0x0000 (---------------) + I saitama
- 0x00231746, // n0x109c c0x0000 (---------------) + I sakado
- 0x002bb685, // n0x109d c0x0000 (---------------) + I satte
- 0x00286606, // n0x109e c0x0000 (---------------) + I sayama
- 0x002066c5, // n0x109f c0x0000 (---------------) + I shiki
- 0x00298148, // n0x10a0 c0x0000 (---------------) + I shiraoka
- 0x002cc0c4, // n0x10a1 c0x0000 (---------------) + I soka
- 0x002adc86, // n0x10a2 c0x0000 (---------------) + I sugito
- 0x00312e84, // n0x10a3 c0x0000 (---------------) + I toda
- 0x002add88, // n0x10a4 c0x0000 (---------------) + I tokigawa
- 0x00302c0a, // n0x10a5 c0x0000 (---------------) + I tokorozawa
- 0x0027700c, // n0x10a6 c0x0000 (---------------) + I tsurugashima
- 0x0020b805, // n0x10a7 c0x0000 (---------------) + I urawa
- 0x00204106, // n0x10a8 c0x0000 (---------------) + I warabi
- 0x00247146, // n0x10a9 c0x0000 (---------------) + I yashio
- 0x002f5606, // n0x10aa c0x0000 (---------------) + I yokoze
- 0x00226144, // n0x10ab c0x0000 (---------------) + I yono
- 0x00375b45, // n0x10ac c0x0000 (---------------) + I yorii
- 0x00269bc7, // n0x10ad c0x0000 (---------------) + I yoshida
- 0x00288189, // n0x10ae c0x0000 (---------------) + I yoshikawa
- 0x0028fac7, // n0x10af c0x0000 (---------------) + I yoshimi
- 0x006735c4, // n0x10b0 c0x0001 (---------------) ! I city
- 0x006735c4, // n0x10b1 c0x0001 (---------------) ! I city
- 0x002f59c5, // n0x10b2 c0x0000 (---------------) + I aisho
- 0x0023dd44, // n0x10b3 c0x0000 (---------------) + I gamo
- 0x00285cca, // n0x10b4 c0x0000 (---------------) + I higashiomi
- 0x00265786, // n0x10b5 c0x0000 (---------------) + I hikone
- 0x00346344, // n0x10b6 c0x0000 (---------------) + I koka
- 0x00204cc5, // n0x10b7 c0x0000 (---------------) + I konan
- 0x002d7bc5, // n0x10b8 c0x0000 (---------------) + I kosei
- 0x002e8104, // n0x10b9 c0x0000 (---------------) + I koto
- 0x0026f047, // n0x10ba c0x0000 (---------------) + I kusatsu
- 0x002b9f47, // n0x10bb c0x0000 (---------------) + I maibara
- 0x002b4f88, // n0x10bc c0x0000 (---------------) + I moriyama
- 0x0036df48, // n0x10bd c0x0000 (---------------) + I nagahama
- 0x00208b89, // n0x10be c0x0000 (---------------) + I nishiazai
- 0x003176c8, // n0x10bf c0x0000 (---------------) + I notogawa
- 0x00285e8b, // n0x10c0 c0x0000 (---------------) + I omihachiman
- 0x0022a784, // n0x10c1 c0x0000 (---------------) + I otsu
- 0x0025e445, // n0x10c2 c0x0000 (---------------) + I ritto
- 0x00258dc5, // n0x10c3 c0x0000 (---------------) + I ryuoh
- 0x00341809, // n0x10c4 c0x0000 (---------------) + I takashima
- 0x00376d89, // n0x10c5 c0x0000 (---------------) + I takatsuki
- 0x00336348, // n0x10c6 c0x0000 (---------------) + I torahime
- 0x00233d48, // n0x10c7 c0x0000 (---------------) + I toyosato
- 0x00207004, // n0x10c8 c0x0000 (---------------) + I yasu
- 0x002fe885, // n0x10c9 c0x0000 (---------------) + I akagi
- 0x002068c3, // n0x10ca c0x0000 (---------------) + I ama
- 0x0022a745, // n0x10cb c0x0000 (---------------) + I gotsu
- 0x00292ac6, // n0x10cc c0x0000 (---------------) + I hamada
- 0x0028124c, // n0x10cd c0x0000 (---------------) + I higashiizumo
- 0x00214ec6, // n0x10ce c0x0000 (---------------) + I hikawa
- 0x002fb046, // n0x10cf c0x0000 (---------------) + I hikimi
- 0x002782c5, // n0x10d0 c0x0000 (---------------) + I izumo
- 0x00201a88, // n0x10d1 c0x0000 (---------------) + I kakinoki
- 0x002a2fc6, // n0x10d2 c0x0000 (---------------) + I masuda
- 0x0038d9c6, // n0x10d3 c0x0000 (---------------) + I matsue
- 0x0028b246, // n0x10d4 c0x0000 (---------------) + I misato
- 0x0021f48c, // n0x10d5 c0x0000 (---------------) + I nishinoshima
- 0x0024eac4, // n0x10d6 c0x0000 (---------------) + I ohda
- 0x0030fd4a, // n0x10d7 c0x0000 (---------------) + I okinoshima
- 0x00278208, // n0x10d8 c0x0000 (---------------) + I okuizumo
- 0x00281087, // n0x10d9 c0x0000 (---------------) + I shimane
- 0x00260c46, // n0x10da c0x0000 (---------------) + I tamayu
- 0x002e5507, // n0x10db c0x0000 (---------------) + I tsuwano
- 0x002ca4c5, // n0x10dc c0x0000 (---------------) + I unnan
- 0x00311fc6, // n0x10dd c0x0000 (---------------) + I yakumo
- 0x0033ba46, // n0x10de c0x0000 (---------------) + I yasugi
- 0x00365987, // n0x10df c0x0000 (---------------) + I yatsuka
- 0x00253f84, // n0x10e0 c0x0000 (---------------) + I arai
- 0x0027d805, // n0x10e1 c0x0000 (---------------) + I atami
- 0x00265284, // n0x10e2 c0x0000 (---------------) + I fuji
- 0x00294e07, // n0x10e3 c0x0000 (---------------) + I fujieda
- 0x002654c8, // n0x10e4 c0x0000 (---------------) + I fujikawa
- 0x0026620a, // n0x10e5 c0x0000 (---------------) + I fujinomiya
- 0x0026ce07, // n0x10e6 c0x0000 (---------------) + I fukuroi
- 0x00271047, // n0x10e7 c0x0000 (---------------) + I gotemba
- 0x00316a47, // n0x10e8 c0x0000 (---------------) + I haibara
- 0x0032b6c9, // n0x10e9 c0x0000 (---------------) + I hamamatsu
- 0x0028124a, // n0x10ea c0x0000 (---------------) + I higashiizu
- 0x00220483, // n0x10eb c0x0000 (---------------) + I ito
- 0x00253e85, // n0x10ec c0x0000 (---------------) + I iwata
- 0x00209783, // n0x10ed c0x0000 (---------------) + I izu
- 0x002f1c49, // n0x10ee c0x0000 (---------------) + I izunokuni
- 0x002c7008, // n0x10ef c0x0000 (---------------) + I kakegawa
- 0x002d17c7, // n0x10f0 c0x0000 (---------------) + I kannami
- 0x00305009, // n0x10f1 c0x0000 (---------------) + I kawanehon
- 0x00214f46, // n0x10f2 c0x0000 (---------------) + I kawazu
- 0x0025fcc8, // n0x10f3 c0x0000 (---------------) + I kikugawa
- 0x002d4745, // n0x10f4 c0x0000 (---------------) + I kosai
- 0x00364b0a, // n0x10f5 c0x0000 (---------------) + I makinohara
- 0x00355209, // n0x10f6 c0x0000 (---------------) + I matsuzaki
- 0x00246c49, // n0x10f7 c0x0000 (---------------) + I minamiizu
- 0x00392cc7, // n0x10f8 c0x0000 (---------------) + I mishima
- 0x0028b509, // n0x10f9 c0x0000 (---------------) + I morimachi
- 0x0020eb88, // n0x10fa c0x0000 (---------------) + I nishiizu
- 0x002d2986, // n0x10fb c0x0000 (---------------) + I numazu
- 0x002042c8, // n0x10fc c0x0000 (---------------) + I omaezaki
- 0x0034e807, // n0x10fd c0x0000 (---------------) + I shimada
- 0x002521c7, // n0x10fe c0x0000 (---------------) + I shimizu
- 0x0027bc87, // n0x10ff c0x0000 (---------------) + I shimoda
- 0x002b4b88, // n0x1100 c0x0000 (---------------) + I shizuoka
- 0x002d2686, // n0x1101 c0x0000 (---------------) + I susono
- 0x00231205, // n0x1102 c0x0000 (---------------) + I yaizu
- 0x00269bc7, // n0x1103 c0x0000 (---------------) + I yoshida
- 0x00281e08, // n0x1104 c0x0000 (---------------) + I ashikaga
- 0x0030f544, // n0x1105 c0x0000 (---------------) + I bato
- 0x002d6e04, // n0x1106 c0x0000 (---------------) + I haga
- 0x00315b07, // n0x1107 c0x0000 (---------------) + I ichikai
- 0x00255847, // n0x1108 c0x0000 (---------------) + I iwafune
- 0x0022eb8a, // n0x1109 c0x0000 (---------------) + I kaminokawa
- 0x002d2906, // n0x110a c0x0000 (---------------) + I kanuma
- 0x0027afca, // n0x110b c0x0000 (---------------) + I karasuyama
- 0x002a6b47, // n0x110c c0x0000 (---------------) + I kuroiso
- 0x002be6c7, // n0x110d c0x0000 (---------------) + I mashiko
- 0x0024fa44, // n0x110e c0x0000 (---------------) + I mibu
- 0x002669c4, // n0x110f c0x0000 (---------------) + I moka
- 0x0021ff46, // n0x1110 c0x0000 (---------------) + I motegi
- 0x002efac4, // n0x1111 c0x0000 (---------------) + I nasu
- 0x002efacc, // n0x1112 c0x0000 (---------------) + I nasushiobara
- 0x0033e185, // n0x1113 c0x0000 (---------------) + I nikko
- 0x0020f249, // n0x1114 c0x0000 (---------------) + I nishikata
- 0x00267304, // n0x1115 c0x0000 (---------------) + I nogi
- 0x002e81c5, // n0x1116 c0x0000 (---------------) + I ohira
- 0x0025c988, // n0x1117 c0x0000 (---------------) + I ohtawara
- 0x0027c385, // n0x1118 c0x0000 (---------------) + I oyama
- 0x002f4d46, // n0x1119 c0x0000 (---------------) + I sakura
- 0x002098c4, // n0x111a c0x0000 (---------------) + I sano
- 0x0027924a, // n0x111b c0x0000 (---------------) + I shimotsuke
- 0x002d80c6, // n0x111c c0x0000 (---------------) + I shioya
- 0x00316d8a, // n0x111d c0x0000 (---------------) + I takanezawa
- 0x0030f5c7, // n0x111e c0x0000 (---------------) + I tochigi
- 0x0021d305, // n0x111f c0x0000 (---------------) + I tsuga
- 0x00212d45, // n0x1120 c0x0000 (---------------) + I ujiie
- 0x0021ee0a, // n0x1121 c0x0000 (---------------) + I utsunomiya
- 0x0028c645, // n0x1122 c0x0000 (---------------) + I yaita
- 0x00272046, // n0x1123 c0x0000 (---------------) + I aizumi
- 0x00204e44, // n0x1124 c0x0000 (---------------) + I anan
- 0x002a0706, // n0x1125 c0x0000 (---------------) + I ichiba
- 0x00305845, // n0x1126 c0x0000 (---------------) + I itano
- 0x0021b806, // n0x1127 c0x0000 (---------------) + I kainan
- 0x002be44c, // n0x1128 c0x0000 (---------------) + I komatsushima
- 0x002b644a, // n0x1129 c0x0000 (---------------) + I matsushige
- 0x0025b9c4, // n0x112a c0x0000 (---------------) + I mima
- 0x00213fc6, // n0x112b c0x0000 (---------------) + I minami
- 0x00288107, // n0x112c c0x0000 (---------------) + I miyoshi
- 0x002b9b44, // n0x112d c0x0000 (---------------) + I mugi
- 0x002934c8, // n0x112e c0x0000 (---------------) + I nakagawa
- 0x00376a06, // n0x112f c0x0000 (---------------) + I naruto
- 0x00240249, // n0x1130 c0x0000 (---------------) + I sanagochi
- 0x002c2189, // n0x1131 c0x0000 (---------------) + I shishikui
- 0x0028e2c9, // n0x1132 c0x0000 (---------------) + I tokushima
- 0x00359bc6, // n0x1133 c0x0000 (---------------) + I wajiki
- 0x0034e906, // n0x1134 c0x0000 (---------------) + I adachi
- 0x00204407, // n0x1135 c0x0000 (---------------) + I akiruno
- 0x0038be88, // n0x1136 c0x0000 (---------------) + I akishima
- 0x0034e709, // n0x1137 c0x0000 (---------------) + I aogashima
- 0x0034e247, // n0x1138 c0x0000 (---------------) + I arakawa
- 0x0027e786, // n0x1139 c0x0000 (---------------) + I bunkyo
- 0x002e3947, // n0x113a c0x0000 (---------------) + I chiyoda
- 0x0029a7c5, // n0x113b c0x0000 (---------------) + I chofu
- 0x002be904, // n0x113c c0x0000 (---------------) + I chuo
- 0x00203fc7, // n0x113d c0x0000 (---------------) + I edogawa
- 0x002ab685, // n0x113e c0x0000 (---------------) + I fuchu
- 0x00275045, // n0x113f c0x0000 (---------------) + I fussa
- 0x00389ec7, // n0x1140 c0x0000 (---------------) + I hachijo
- 0x00243188, // n0x1141 c0x0000 (---------------) + I hachioji
- 0x00374346, // n0x1142 c0x0000 (---------------) + I hamura
- 0x00282c8d, // n0x1143 c0x0000 (---------------) + I higashikurume
- 0x0028414f, // n0x1144 c0x0000 (---------------) + I higashimurayama
- 0x00289bcd, // n0x1145 c0x0000 (---------------) + I higashiyamato
- 0x0021ad44, // n0x1146 c0x0000 (---------------) + I hino
- 0x00227446, // n0x1147 c0x0000 (---------------) + I hinode
- 0x002bcf88, // n0x1148 c0x0000 (---------------) + I hinohara
- 0x002408c5, // n0x1149 c0x0000 (---------------) + I inagi
- 0x00325f88, // n0x114a c0x0000 (---------------) + I itabashi
- 0x002513ca, // n0x114b c0x0000 (---------------) + I katsushika
- 0x00206e44, // n0x114c c0x0000 (---------------) + I kita
- 0x002978c6, // n0x114d c0x0000 (---------------) + I kiyose
- 0x002a3687, // n0x114e c0x0000 (---------------) + I kodaira
- 0x00232c87, // n0x114f c0x0000 (---------------) + I koganei
- 0x00374809, // n0x1150 c0x0000 (---------------) + I kokubunji
- 0x00204285, // n0x1151 c0x0000 (---------------) + I komae
- 0x002e8104, // n0x1152 c0x0000 (---------------) + I koto
- 0x0031850a, // n0x1153 c0x0000 (---------------) + I kouzushima
- 0x002a2089, // n0x1154 c0x0000 (---------------) + I kunitachi
- 0x0028b607, // n0x1155 c0x0000 (---------------) + I machida
- 0x002b1286, // n0x1156 c0x0000 (---------------) + I meguro
- 0x00339806, // n0x1157 c0x0000 (---------------) + I minato
- 0x002fe7c6, // n0x1158 c0x0000 (---------------) + I mitaka
- 0x0034b046, // n0x1159 c0x0000 (---------------) + I mizuho
- 0x002bc90f, // n0x115a c0x0000 (---------------) + I musashimurayama
- 0x002bce49, // n0x115b c0x0000 (---------------) + I musashino
- 0x0023fcc6, // n0x115c c0x0000 (---------------) + I nakano
- 0x003528c6, // n0x115d c0x0000 (---------------) + I nerima
- 0x00301849, // n0x115e c0x0000 (---------------) + I ogasawara
- 0x002f1a47, // n0x115f c0x0000 (---------------) + I okutama
- 0x0020b3c3, // n0x1160 c0x0000 (---------------) + I ome
- 0x0021f606, // n0x1161 c0x0000 (---------------) + I oshima
- 0x00203943, // n0x1162 c0x0000 (---------------) + I ota
- 0x002c3488, // n0x1163 c0x0000 (---------------) + I setagaya
- 0x002e3787, // n0x1164 c0x0000 (---------------) + I shibuya
- 0x0028b9c9, // n0x1165 c0x0000 (---------------) + I shinagawa
- 0x00285788, // n0x1166 c0x0000 (---------------) + I shinjuku
- 0x0033eac8, // n0x1167 c0x0000 (---------------) + I suginami
- 0x00289246, // n0x1168 c0x0000 (---------------) + I sumida
- 0x0032da89, // n0x1169 c0x0000 (---------------) + I tachikawa
- 0x002e5c45, // n0x116a c0x0000 (---------------) + I taito
- 0x00260c44, // n0x116b c0x0000 (---------------) + I tama
- 0x002d0a47, // n0x116c c0x0000 (---------------) + I toshima
- 0x00258c05, // n0x116d c0x0000 (---------------) + I chizu
- 0x0021ad44, // n0x116e c0x0000 (---------------) + I hino
- 0x00274b88, // n0x116f c0x0000 (---------------) + I kawahara
- 0x0020da84, // n0x1170 c0x0000 (---------------) + I koge
- 0x002eaf87, // n0x1171 c0x0000 (---------------) + I kotoura
- 0x003337c6, // n0x1172 c0x0000 (---------------) + I misasa
- 0x002c6705, // n0x1173 c0x0000 (---------------) + I nanbu
- 0x0027fa88, // n0x1174 c0x0000 (---------------) + I nichinan
- 0x003396cb, // n0x1175 c0x0000 (---------------) + I sakaiminato
- 0x002e2787, // n0x1176 c0x0000 (---------------) + I tottori
- 0x0021f086, // n0x1177 c0x0000 (---------------) + I wakasa
- 0x002aeec4, // n0x1178 c0x0000 (---------------) + I yazu
- 0x0032b186, // n0x1179 c0x0000 (---------------) + I yonago
- 0x002ad5c5, // n0x117a c0x0000 (---------------) + I asahi
- 0x002ab685, // n0x117b c0x0000 (---------------) + I fuchu
- 0x0026c2c9, // n0x117c c0x0000 (---------------) + I fukumitsu
- 0x0026ec49, // n0x117d c0x0000 (---------------) + I funahashi
- 0x00252204, // n0x117e c0x0000 (---------------) + I himi
- 0x00252245, // n0x117f c0x0000 (---------------) + I imizu
- 0x00214005, // n0x1180 c0x0000 (---------------) + I inami
- 0x00364986, // n0x1181 c0x0000 (---------------) + I johana
- 0x00315a08, // n0x1182 c0x0000 (---------------) + I kamiichi
- 0x002a4c46, // n0x1183 c0x0000 (---------------) + I kurobe
- 0x0031070b, // n0x1184 c0x0000 (---------------) + I nakaniikawa
- 0x0029894a, // n0x1185 c0x0000 (---------------) + I namerikawa
- 0x002e14c5, // n0x1186 c0x0000 (---------------) + I nanto
- 0x00279546, // n0x1187 c0x0000 (---------------) + I nyuzen
- 0x0031d945, // n0x1188 c0x0000 (---------------) + I oyabe
- 0x00205705, // n0x1189 c0x0000 (---------------) + I taira
- 0x00281747, // n0x118a c0x0000 (---------------) + I takaoka
- 0x0038a708, // n0x118b c0x0000 (---------------) + I tateyama
- 0x0027b804, // n0x118c c0x0000 (---------------) + I toga
- 0x0024e006, // n0x118d c0x0000 (---------------) + I tonami
- 0x0027c346, // n0x118e c0x0000 (---------------) + I toyama
- 0x0020ed47, // n0x118f c0x0000 (---------------) + I unazuki
- 0x002e3d84, // n0x1190 c0x0000 (---------------) + I uozu
- 0x0026b046, // n0x1191 c0x0000 (---------------) + I yamada
- 0x00250d45, // n0x1192 c0x0000 (---------------) + I arida
- 0x00250d49, // n0x1193 c0x0000 (---------------) + I aridagawa
- 0x0034eb04, // n0x1194 c0x0000 (---------------) + I gobo
- 0x00286d89, // n0x1195 c0x0000 (---------------) + I hashimoto
- 0x002685c6, // n0x1196 c0x0000 (---------------) + I hidaka
- 0x002a9408, // n0x1197 c0x0000 (---------------) + I hirogawa
- 0x00214005, // n0x1198 c0x0000 (---------------) + I inami
- 0x002e9845, // n0x1199 c0x0000 (---------------) + I iwade
- 0x0021b806, // n0x119a c0x0000 (---------------) + I kainan
- 0x00246e89, // n0x119b c0x0000 (---------------) + I kamitonda
- 0x002133c9, // n0x119c c0x0000 (---------------) + I katsuragi
- 0x002fb0c6, // n0x119d c0x0000 (---------------) + I kimino
- 0x00273248, // n0x119e c0x0000 (---------------) + I kinokawa
- 0x0022aec8, // n0x119f c0x0000 (---------------) + I kitayama
- 0x0031d904, // n0x11a0 c0x0000 (---------------) + I koya
- 0x0034b544, // n0x11a1 c0x0000 (---------------) + I koza
- 0x0034b548, // n0x11a2 c0x0000 (---------------) + I kozagawa
- 0x003000c8, // n0x11a3 c0x0000 (---------------) + I kudoyama
- 0x002e5e09, // n0x11a4 c0x0000 (---------------) + I kushimoto
- 0x00292a46, // n0x11a5 c0x0000 (---------------) + I mihama
- 0x0028b246, // n0x11a6 c0x0000 (---------------) + I misato
- 0x002fd2cd, // n0x11a7 c0x0000 (---------------) + I nachikatsuura
- 0x002e6a46, // n0x11a8 c0x0000 (---------------) + I shingu
- 0x002a1409, // n0x11a9 c0x0000 (---------------) + I shirahama
- 0x00353dc5, // n0x11aa c0x0000 (---------------) + I taiji
- 0x0030f946, // n0x11ab c0x0000 (---------------) + I tanabe
- 0x0032dc48, // n0x11ac c0x0000 (---------------) + I wakayama
- 0x002f9ac5, // n0x11ad c0x0000 (---------------) + I yuasa
- 0x00289704, // n0x11ae c0x0000 (---------------) + I yura
- 0x002ad5c5, // n0x11af c0x0000 (---------------) + I asahi
- 0x0026e788, // n0x11b0 c0x0000 (---------------) + I funagata
- 0x00285a89, // n0x11b1 c0x0000 (---------------) + I higashine
- 0x00265344, // n0x11b2 c0x0000 (---------------) + I iide
- 0x00226886, // n0x11b3 c0x0000 (---------------) + I kahoku
- 0x003467ca, // n0x11b4 c0x0000 (---------------) + I kaminoyama
- 0x002150c8, // n0x11b5 c0x0000 (---------------) + I kaneyama
- 0x0022ed09, // n0x11b6 c0x0000 (---------------) + I kawanishi
- 0x002f8d4a, // n0x11b7 c0x0000 (---------------) + I mamurogawa
- 0x00304f86, // n0x11b8 c0x0000 (---------------) + I mikawa
- 0x00284308, // n0x11b9 c0x0000 (---------------) + I murayama
- 0x0035e9c5, // n0x11ba c0x0000 (---------------) + I nagai
- 0x00355088, // n0x11bb c0x0000 (---------------) + I nakayama
- 0x002a0545, // n0x11bc c0x0000 (---------------) + I nanyo
- 0x00214e09, // n0x11bd c0x0000 (---------------) + I nishikawa
- 0x0034fd89, // n0x11be c0x0000 (---------------) + I obanazawa
- 0x00210a82, // n0x11bf c0x0000 (---------------) + I oe
- 0x0029efc5, // n0x11c0 c0x0000 (---------------) + I oguni
- 0x00258e86, // n0x11c1 c0x0000 (---------------) + I ohkura
- 0x00268507, // n0x11c2 c0x0000 (---------------) + I oishida
- 0x00275105, // n0x11c3 c0x0000 (---------------) + I sagae
- 0x002f9b86, // n0x11c4 c0x0000 (---------------) + I sakata
- 0x00359408, // n0x11c5 c0x0000 (---------------) + I sakegawa
- 0x00285306, // n0x11c6 c0x0000 (---------------) + I shinjo
- 0x0029cd89, // n0x11c7 c0x0000 (---------------) + I shirataka
- 0x00266d46, // n0x11c8 c0x0000 (---------------) + I shonai
- 0x0026dd88, // n0x11c9 c0x0000 (---------------) + I takahata
- 0x00294245, // n0x11ca c0x0000 (---------------) + I tendo
- 0x00247ec6, // n0x11cb c0x0000 (---------------) + I tozawa
- 0x003052c8, // n0x11cc c0x0000 (---------------) + I tsuruoka
- 0x0026dc08, // n0x11cd c0x0000 (---------------) + I yamagata
- 0x0034d348, // n0x11ce c0x0000 (---------------) + I yamanobe
- 0x002212c8, // n0x11cf c0x0000 (---------------) + I yonezawa
- 0x00216b84, // n0x11d0 c0x0000 (---------------) + I yuza
- 0x0021bc43, // n0x11d1 c0x0000 (---------------) + I abu
- 0x0029cfc4, // n0x11d2 c0x0000 (---------------) + I hagi
- 0x002af4c6, // n0x11d3 c0x0000 (---------------) + I hikari
- 0x0029a804, // n0x11d4 c0x0000 (---------------) + I hofu
- 0x00292807, // n0x11d5 c0x0000 (---------------) + I iwakuni
- 0x0038d8c9, // n0x11d6 c0x0000 (---------------) + I kudamatsu
- 0x002ae205, // n0x11d7 c0x0000 (---------------) + I mitou
- 0x00201586, // n0x11d8 c0x0000 (---------------) + I nagato
- 0x0021f606, // n0x11d9 c0x0000 (---------------) + I oshima
- 0x002743cb, // n0x11da c0x0000 (---------------) + I shimonoseki
- 0x002e1406, // n0x11db c0x0000 (---------------) + I shunan
- 0x003003c6, // n0x11dc c0x0000 (---------------) + I tabuse
- 0x00286f48, // n0x11dd c0x0000 (---------------) + I tokuyama
- 0x00338906, // n0x11de c0x0000 (---------------) + I toyota
- 0x002b48c3, // n0x11df c0x0000 (---------------) + I ube
- 0x00213ec3, // n0x11e0 c0x0000 (---------------) + I yuu
- 0x002be904, // n0x11e1 c0x0000 (---------------) + I chuo
- 0x002243c5, // n0x11e2 c0x0000 (---------------) + I doshi
- 0x00289887, // n0x11e3 c0x0000 (---------------) + I fuefuki
- 0x002654c8, // n0x11e4 c0x0000 (---------------) + I fujikawa
- 0x002654cf, // n0x11e5 c0x0000 (---------------) + I fujikawaguchiko
- 0x00269acb, // n0x11e6 c0x0000 (---------------) + I fujiyoshida
- 0x00315808, // n0x11e7 c0x0000 (---------------) + I hayakawa
- 0x00226906, // n0x11e8 c0x0000 (---------------) + I hokuto
- 0x00312b8e, // n0x11e9 c0x0000 (---------------) + I ichikawamisato
- 0x0021b803, // n0x11ea c0x0000 (---------------) + I kai
- 0x0024cf84, // n0x11eb c0x0000 (---------------) + I kofu
- 0x002e1385, // n0x11ec c0x0000 (---------------) + I koshu
- 0x002e4a46, // n0x11ed c0x0000 (---------------) + I kosuge
- 0x0027a9cb, // n0x11ee c0x0000 (---------------) + I minami-alps
- 0x0027ee46, // n0x11ef c0x0000 (---------------) + I minobu
- 0x00204889, // n0x11f0 c0x0000 (---------------) + I nakamichi
- 0x002c6705, // n0x11f1 c0x0000 (---------------) + I nanbu
- 0x00372f88, // n0x11f2 c0x0000 (---------------) + I narusawa
- 0x00208608, // n0x11f3 c0x0000 (---------------) + I nirasaki
- 0x0021328c, // n0x11f4 c0x0000 (---------------) + I nishikatsura
- 0x0028a946, // n0x11f5 c0x0000 (---------------) + I oshino
- 0x0022a786, // n0x11f6 c0x0000 (---------------) + I otsuki
- 0x002b3885, // n0x11f7 c0x0000 (---------------) + I showa
- 0x00275f88, // n0x11f8 c0x0000 (---------------) + I tabayama
- 0x0026a445, // n0x11f9 c0x0000 (---------------) + I tsuru
- 0x0038dac8, // n0x11fa c0x0000 (---------------) + I uenohara
- 0x0028a00a, // n0x11fb c0x0000 (---------------) + I yamanakako
- 0x0029b889, // n0x11fc c0x0000 (---------------) + I yamanashi
- 0x006735c4, // n0x11fd c0x0001 (---------------) ! I city
- 0x2d600742, // n0x11fe c0x00b5 (n0x11ff-n0x1200) o I co
- 0x000e4188, // n0x11ff c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1200 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1201 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1202 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1203 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1204 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1205 c0x0000 (---------------) + I org
- 0x00310603, // n0x1206 c0x0000 (---------------) + I biz
- 0x00222ac3, // n0x1207 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1208 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1209 c0x0000 (---------------) + I gov
- 0x00200304, // n0x120a c0x0000 (---------------) + I info
- 0x002170c3, // n0x120b c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x120c c0x0000 (---------------) + I org
- 0x002362c3, // n0x120d c0x0000 (---------------) + I ass
- 0x002729c4, // n0x120e c0x0000 (---------------) + I asso
- 0x00222ac3, // n0x120f c0x0000 (---------------) + I com
- 0x00228d44, // n0x1210 c0x0000 (---------------) + I coop
- 0x002d75c3, // n0x1211 c0x0000 (---------------) + I edu
- 0x003579c4, // n0x1212 c0x0000 (---------------) + I gouv
- 0x0021e283, // n0x1213 c0x0000 (---------------) + I gov
- 0x002753c7, // n0x1214 c0x0000 (---------------) + I medecin
- 0x0023fa03, // n0x1215 c0x0000 (---------------) + I mil
- 0x00207cc3, // n0x1216 c0x0000 (---------------) + I nom
- 0x00265c08, // n0x1217 c0x0000 (---------------) + I notaires
- 0x0021dcc3, // n0x1218 c0x0000 (---------------) + I org
- 0x002e078b, // n0x1219 c0x0000 (---------------) + I pharmaciens
- 0x002ca783, // n0x121a c0x0000 (---------------) + I prd
- 0x0029abc6, // n0x121b c0x0000 (---------------) + I presse
- 0x00208902, // n0x121c c0x0000 (---------------) + I tm
- 0x0036b18b, // n0x121d c0x0000 (---------------) + I veterinaire
- 0x002d75c3, // n0x121e c0x0000 (---------------) + I edu
- 0x0021e283, // n0x121f c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1220 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1221 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1222 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1223 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1224 c0x0000 (---------------) + I gov
- 0x0021dcc3, // n0x1225 c0x0000 (---------------) + I org
- 0x002117c3, // n0x1226 c0x0000 (---------------) + I rep
- 0x00210103, // n0x1227 c0x0000 (---------------) + I tra
- 0x00201e82, // n0x1228 c0x0000 (---------------) + I ac
- 0x000e4188, // n0x1229 c0x0000 (---------------) + blogspot
- 0x002224c5, // n0x122a c0x0000 (---------------) + I busan
- 0x002ea8c8, // n0x122b c0x0000 (---------------) + I chungbuk
- 0x002ec1c8, // n0x122c c0x0000 (---------------) + I chungnam
- 0x00200742, // n0x122d c0x0000 (---------------) + I co
- 0x0032b905, // n0x122e c0x0000 (---------------) + I daegu
- 0x0023e947, // n0x122f c0x0000 (---------------) + I daejeon
- 0x002010c2, // n0x1230 c0x0000 (---------------) + I es
- 0x00204ac7, // n0x1231 c0x0000 (---------------) + I gangwon
- 0x00202342, // n0x1232 c0x0000 (---------------) + I go
- 0x00370b47, // n0x1233 c0x0000 (---------------) + I gwangju
- 0x00384c89, // n0x1234 c0x0000 (---------------) + I gyeongbuk
- 0x0035e588, // n0x1235 c0x0000 (---------------) + I gyeonggi
- 0x00342c09, // n0x1236 c0x0000 (---------------) + I gyeongnam
- 0x00203802, // n0x1237 c0x0000 (---------------) + I hs
- 0x002c2a87, // n0x1238 c0x0000 (---------------) + I incheon
- 0x002fae44, // n0x1239 c0x0000 (---------------) + I jeju
- 0x0023ea07, // n0x123a c0x0000 (---------------) + I jeonbuk
- 0x00298847, // n0x123b c0x0000 (---------------) + I jeonnam
- 0x002a3fc2, // n0x123c c0x0000 (---------------) + I kg
- 0x0023fa03, // n0x123d c0x0000 (---------------) + I mil
- 0x00209282, // n0x123e c0x0000 (---------------) + I ms
- 0x00201082, // n0x123f c0x0000 (---------------) + I ne
- 0x00200c42, // n0x1240 c0x0000 (---------------) + I or
- 0x00214942, // n0x1241 c0x0000 (---------------) + I pe
- 0x002030c2, // n0x1242 c0x0000 (---------------) + I re
- 0x00200982, // n0x1243 c0x0000 (---------------) + I sc
- 0x002baac5, // n0x1244 c0x0000 (---------------) + I seoul
- 0x002376c5, // n0x1245 c0x0000 (---------------) + I ulsan
- 0x00222ac3, // n0x1246 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1247 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1248 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1249 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x124a c0x0000 (---------------) + I org
- 0x00222ac3, // n0x124b c0x0000 (---------------) + I com
- 0x002d75c3, // n0x124c c0x0000 (---------------) + I edu
- 0x0021e283, // n0x124d c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x124e c0x0000 (---------------) + I mil
- 0x002170c3, // n0x124f c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1250 c0x0000 (---------------) + I org
- 0x00000741, // n0x1251 c0x0000 (---------------) + c
- 0x00222ac3, // n0x1252 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1253 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1254 c0x0000 (---------------) + I gov
- 0x00200304, // n0x1255 c0x0000 (---------------) + I info
- 0x00238c03, // n0x1256 c0x0000 (---------------) + I int
- 0x002170c3, // n0x1257 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1258 c0x0000 (---------------) + I org
- 0x00214943, // n0x1259 c0x0000 (---------------) + I per
- 0x00222ac3, // n0x125a c0x0000 (---------------) + I com
- 0x002d75c3, // n0x125b c0x0000 (---------------) + I edu
- 0x0021e283, // n0x125c c0x0000 (---------------) + I gov
- 0x002170c3, // n0x125d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x125e c0x0000 (---------------) + I org
- 0x00200742, // n0x125f c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1260 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1261 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1262 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1263 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1264 c0x0000 (---------------) + I org
- 0x000e4188, // n0x1265 c0x0000 (---------------) + blogspot
- 0x00201e82, // n0x1266 c0x0000 (---------------) + I ac
- 0x002aa2c4, // n0x1267 c0x0000 (---------------) + I assn
- 0x00222ac3, // n0x1268 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1269 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x126a c0x0000 (---------------) + I gov
- 0x00221d03, // n0x126b c0x0000 (---------------) + I grp
- 0x00294945, // n0x126c c0x0000 (---------------) + I hotel
- 0x00238c03, // n0x126d c0x0000 (---------------) + I int
- 0x003413c3, // n0x126e c0x0000 (---------------) + I ltd
- 0x002170c3, // n0x126f c0x0000 (---------------) + I net
- 0x00202303, // n0x1270 c0x0000 (---------------) + I ngo
- 0x0021dcc3, // n0x1271 c0x0000 (---------------) + I org
- 0x00206103, // n0x1272 c0x0000 (---------------) + I sch
- 0x00240a03, // n0x1273 c0x0000 (---------------) + I soc
- 0x00219fc3, // n0x1274 c0x0000 (---------------) + I web
- 0x00222ac3, // n0x1275 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1276 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1277 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1278 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1279 c0x0000 (---------------) + I org
- 0x00200742, // n0x127a c0x0000 (---------------) + I co
- 0x0021dcc3, // n0x127b c0x0000 (---------------) + I org
- 0x000e4188, // n0x127c c0x0000 (---------------) + blogspot
- 0x0021e283, // n0x127d c0x0000 (---------------) + I gov
- 0x000e4188, // n0x127e c0x0000 (---------------) + blogspot
- 0x002a00c3, // n0x127f c0x0000 (---------------) + I asn
- 0x00222ac3, // n0x1280 c0x0000 (---------------) + I com
- 0x00224984, // n0x1281 c0x0000 (---------------) + I conf
- 0x002d75c3, // n0x1282 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1283 c0x0000 (---------------) + I gov
- 0x00206202, // n0x1284 c0x0000 (---------------) + I id
- 0x0023fa03, // n0x1285 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1286 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1287 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1288 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1289 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x128a c0x0000 (---------------) + I gov
- 0x00206202, // n0x128b c0x0000 (---------------) + I id
- 0x0020b403, // n0x128c c0x0000 (---------------) + I med
- 0x002170c3, // n0x128d c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x128e c0x0000 (---------------) + I org
- 0x002c65c3, // n0x128f c0x0000 (---------------) + I plc
- 0x00206103, // n0x1290 c0x0000 (---------------) + I sch
- 0x00201e82, // n0x1291 c0x0000 (---------------) + I ac
- 0x00200742, // n0x1292 c0x0000 (---------------) + I co
- 0x0021e283, // n0x1293 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1294 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1295 c0x0000 (---------------) + I org
- 0x0029abc5, // n0x1296 c0x0000 (---------------) + I press
- 0x002729c4, // n0x1297 c0x0000 (---------------) + I asso
- 0x00208902, // n0x1298 c0x0000 (---------------) + I tm
- 0x000e4188, // n0x1299 c0x0000 (---------------) + blogspot
- 0x00201e82, // n0x129a c0x0000 (---------------) + I ac
- 0x00200742, // n0x129b c0x0000 (---------------) + I co
- 0x002d75c3, // n0x129c c0x0000 (---------------) + I edu
- 0x0021e283, // n0x129d c0x0000 (---------------) + I gov
- 0x00226ac3, // n0x129e c0x0000 (---------------) + I its
- 0x002170c3, // n0x129f c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x12a0 c0x0000 (---------------) + I org
- 0x002cba44, // n0x12a1 c0x0000 (---------------) + I priv
- 0x00222ac3, // n0x12a2 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x12a3 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x12a4 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x12a5 c0x0000 (---------------) + I mil
- 0x00207cc3, // n0x12a6 c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x12a7 c0x0000 (---------------) + I org
- 0x002ca783, // n0x12a8 c0x0000 (---------------) + I prd
- 0x00208902, // n0x12a9 c0x0000 (---------------) + I tm
- 0x000e4188, // n0x12aa c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x12ab c0x0000 (---------------) + I com
- 0x002d75c3, // n0x12ac c0x0000 (---------------) + I edu
- 0x0021e283, // n0x12ad c0x0000 (---------------) + I gov
- 0x00200303, // n0x12ae c0x0000 (---------------) + I inf
- 0x00298944, // n0x12af c0x0000 (---------------) + I name
- 0x002170c3, // n0x12b0 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x12b1 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x12b2 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x12b3 c0x0000 (---------------) + I edu
- 0x003579c4, // n0x12b4 c0x0000 (---------------) + I gouv
- 0x0021e283, // n0x12b5 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x12b6 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x12b7 c0x0000 (---------------) + I org
- 0x0029abc6, // n0x12b8 c0x0000 (---------------) + I presse
- 0x002d75c3, // n0x12b9 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x12ba c0x0000 (---------------) + I gov
- 0x00023403, // n0x12bb c0x0000 (---------------) + nyc
- 0x0021dcc3, // n0x12bc c0x0000 (---------------) + I org
- 0x00222ac3, // n0x12bd c0x0000 (---------------) + I com
- 0x002d75c3, // n0x12be c0x0000 (---------------) + I edu
- 0x0021e283, // n0x12bf c0x0000 (---------------) + I gov
- 0x002170c3, // n0x12c0 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x12c1 c0x0000 (---------------) + I org
- 0x000e4188, // n0x12c2 c0x0000 (---------------) + blogspot
- 0x0021e283, // n0x12c3 c0x0000 (---------------) + I gov
- 0x00222ac3, // n0x12c4 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x12c5 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x12c6 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x12c7 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x12c8 c0x0000 (---------------) + I org
- 0x35622ac3, // n0x12c9 c0x00d5 (n0x12cd-n0x12ce) + I com
- 0x002d75c3, // n0x12ca c0x0000 (---------------) + I edu
- 0x002170c3, // n0x12cb c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x12cc c0x0000 (---------------) + I org
- 0x000e4188, // n0x12cd c0x0000 (---------------) + blogspot
- 0x00201e82, // n0x12ce c0x0000 (---------------) + I ac
- 0x00200742, // n0x12cf c0x0000 (---------------) + I co
- 0x00222ac3, // n0x12d0 c0x0000 (---------------) + I com
- 0x0021e283, // n0x12d1 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x12d2 c0x0000 (---------------) + I net
- 0x00200c42, // n0x12d3 c0x0000 (---------------) + I or
- 0x0021dcc3, // n0x12d4 c0x0000 (---------------) + I org
- 0x002f2787, // n0x12d5 c0x0000 (---------------) + I academy
- 0x0033c2cb, // n0x12d6 c0x0000 (---------------) + I agriculture
- 0x00205743, // n0x12d7 c0x0000 (---------------) + I air
- 0x0022c148, // n0x12d8 c0x0000 (---------------) + I airguard
- 0x0038bc07, // n0x12d9 c0x0000 (---------------) + I alabama
- 0x00267646, // n0x12da c0x0000 (---------------) + I alaska
- 0x002b6e85, // n0x12db c0x0000 (---------------) + I amber
- 0x003541c9, // n0x12dc c0x0000 (---------------) + I ambulance
- 0x002757c8, // n0x12dd c0x0000 (---------------) + I american
- 0x002757c9, // n0x12de c0x0000 (---------------) + I americana
- 0x002757d0, // n0x12df c0x0000 (---------------) + I americanantiques
- 0x0031aecb, // n0x12e0 c0x0000 (---------------) + I americanart
- 0x002b6cc9, // n0x12e1 c0x0000 (---------------) + I amsterdam
- 0x00208f03, // n0x12e2 c0x0000 (---------------) + I and
- 0x003228c9, // n0x12e3 c0x0000 (---------------) + I annefrank
- 0x00225786, // n0x12e4 c0x0000 (---------------) + I anthro
- 0x0022578c, // n0x12e5 c0x0000 (---------------) + I anthropology
- 0x00222588, // n0x12e6 c0x0000 (---------------) + I antiques
- 0x00392b08, // n0x12e7 c0x0000 (---------------) + I aquarium
- 0x00256f09, // n0x12e8 c0x0000 (---------------) + I arboretum
- 0x0029690e, // n0x12e9 c0x0000 (---------------) + I archaeological
- 0x003429cb, // n0x12ea c0x0000 (---------------) + I archaeology
- 0x002a52cc, // n0x12eb c0x0000 (---------------) + I architecture
- 0x00200603, // n0x12ec c0x0000 (---------------) + I art
- 0x0031b0cc, // n0x12ed c0x0000 (---------------) + I artanddesign
- 0x0037a6c9, // n0x12ee c0x0000 (---------------) + I artcenter
- 0x00200607, // n0x12ef c0x0000 (---------------) + I artdeco
- 0x0037548c, // n0x12f0 c0x0000 (---------------) + I arteducation
- 0x0022654a, // n0x12f1 c0x0000 (---------------) + I artgallery
- 0x00246584, // n0x12f2 c0x0000 (---------------) + I arts
- 0x0024658d, // n0x12f3 c0x0000 (---------------) + I artsandcrafts
- 0x0037a588, // n0x12f4 c0x0000 (---------------) + I asmatart
- 0x0034db0d, // n0x12f5 c0x0000 (---------------) + I assassination
- 0x0037ac46, // n0x12f6 c0x0000 (---------------) + I assisi
- 0x002bbacb, // n0x12f7 c0x0000 (---------------) + I association
- 0x0032b3c9, // n0x12f8 c0x0000 (---------------) + I astronomy
- 0x0032d947, // n0x12f9 c0x0000 (---------------) + I atlanta
- 0x0030ce46, // n0x12fa c0x0000 (---------------) + I austin
- 0x002ee489, // n0x12fb c0x0000 (---------------) + I australia
- 0x0030494a, // n0x12fc c0x0000 (---------------) + I automotive
- 0x00328bc8, // n0x12fd c0x0000 (---------------) + I aviation
- 0x0025db04, // n0x12fe c0x0000 (---------------) + I axis
- 0x0035ef47, // n0x12ff c0x0000 (---------------) + I badajoz
- 0x00264407, // n0x1300 c0x0000 (---------------) + I baghdad
- 0x00295f44, // n0x1301 c0x0000 (---------------) + I bahn
- 0x0023d9c4, // n0x1302 c0x0000 (---------------) + I bale
- 0x002708c9, // n0x1303 c0x0000 (---------------) + I baltimore
- 0x0036bf49, // n0x1304 c0x0000 (---------------) + I barcelona
- 0x002ed5c8, // n0x1305 c0x0000 (---------------) + I baseball
- 0x0020a445, // n0x1306 c0x0000 (---------------) + I basel
- 0x002dbe45, // n0x1307 c0x0000 (---------------) + I baths
- 0x00205a86, // n0x1308 c0x0000 (---------------) + I bauern
- 0x00246449, // n0x1309 c0x0000 (---------------) + I beauxarts
- 0x0035a18d, // n0x130a c0x0000 (---------------) + I beeldengeluid
- 0x002a4d48, // n0x130b c0x0000 (---------------) + I bellevue
- 0x00205987, // n0x130c c0x0000 (---------------) + I bergbau
- 0x002b6f08, // n0x130d c0x0000 (---------------) + I berkeley
- 0x00251d46, // n0x130e c0x0000 (---------------) + I berlin
- 0x00353844, // n0x130f c0x0000 (---------------) + I bern
- 0x003628c5, // n0x1310 c0x0000 (---------------) + I bible
- 0x00394a46, // n0x1311 c0x0000 (---------------) + I bilbao
- 0x00396b04, // n0x1312 c0x0000 (---------------) + I bill
- 0x00200507, // n0x1313 c0x0000 (---------------) + I birdart
- 0x00201cca, // n0x1314 c0x0000 (---------------) + I birthplace
- 0x0020bcc4, // n0x1315 c0x0000 (---------------) + I bonn
- 0x0020d686, // n0x1316 c0x0000 (---------------) + I boston
- 0x0020e2c9, // n0x1317 c0x0000 (---------------) + I botanical
- 0x0020e2cf, // n0x1318 c0x0000 (---------------) + I botanicalgarden
- 0x0020e88d, // n0x1319 c0x0000 (---------------) + I botanicgarden
- 0x002107c6, // n0x131a c0x0000 (---------------) + I botany
- 0x00213b10, // n0x131b c0x0000 (---------------) + I brandywinevalley
- 0x00214a86, // n0x131c c0x0000 (---------------) + I brasil
- 0x002159c7, // n0x131d c0x0000 (---------------) + I bristol
- 0x00215d47, // n0x131e c0x0000 (---------------) + I british
- 0x00215d4f, // n0x131f c0x0000 (---------------) + I britishcolumbia
- 0x00216d09, // n0x1320 c0x0000 (---------------) + I broadcast
- 0x0021b106, // n0x1321 c0x0000 (---------------) + I brunel
- 0x0021be87, // n0x1322 c0x0000 (---------------) + I brussel
- 0x0021be88, // n0x1323 c0x0000 (---------------) + I brussels
- 0x0021c809, // n0x1324 c0x0000 (---------------) + I bruxelles
- 0x002c67c8, // n0x1325 c0x0000 (---------------) + I building
- 0x002c2fc7, // n0x1326 c0x0000 (---------------) + I burghof
- 0x002224c3, // n0x1327 c0x0000 (---------------) + I bus
- 0x00280c46, // n0x1328 c0x0000 (---------------) + I bushey
- 0x0027d948, // n0x1329 c0x0000 (---------------) + I cadaques
- 0x00296bca, // n0x132a c0x0000 (---------------) + I california
- 0x0021a089, // n0x132b c0x0000 (---------------) + I cambridge
- 0x00208ec3, // n0x132c c0x0000 (---------------) + I can
- 0x00309786, // n0x132d c0x0000 (---------------) + I canada
- 0x0024de4a, // n0x132e c0x0000 (---------------) + I capebreton
- 0x0031bb87, // n0x132f c0x0000 (---------------) + I carrier
- 0x003752ca, // n0x1330 c0x0000 (---------------) + I cartoonart
- 0x0038390e, // n0x1331 c0x0000 (---------------) + I casadelamoneda
- 0x00216e46, // n0x1332 c0x0000 (---------------) + I castle
- 0x0021c487, // n0x1333 c0x0000 (---------------) + I castres
- 0x0020f006, // n0x1334 c0x0000 (---------------) + I celtic
- 0x00233a06, // n0x1335 c0x0000 (---------------) + I center
- 0x0036240b, // n0x1336 c0x0000 (---------------) + I chattanooga
- 0x002503ca, // n0x1337 c0x0000 (---------------) + I cheltenham
- 0x002eeccd, // n0x1338 c0x0000 (---------------) + I chesapeakebay
- 0x0034e9c7, // n0x1339 c0x0000 (---------------) + I chicago
- 0x00262bc8, // n0x133a c0x0000 (---------------) + I children
- 0x00262bc9, // n0x133b c0x0000 (---------------) + I childrens
- 0x00262bcf, // n0x133c c0x0000 (---------------) + I childrensgarden
- 0x0029300c, // n0x133d c0x0000 (---------------) + I chiropractic
- 0x00299309, // n0x133e c0x0000 (---------------) + I chocolate
- 0x0022d30e, // n0x133f c0x0000 (---------------) + I christiansburg
- 0x002754ca, // n0x1340 c0x0000 (---------------) + I cincinnati
- 0x00343506, // n0x1341 c0x0000 (---------------) + I cinema
- 0x00323506, // n0x1342 c0x0000 (---------------) + I circus
- 0x0034564c, // n0x1343 c0x0000 (---------------) + I civilisation
- 0x0034878c, // n0x1344 c0x0000 (---------------) + I civilization
- 0x003518c8, // n0x1345 c0x0000 (---------------) + I civilwar
- 0x00369707, // n0x1346 c0x0000 (---------------) + I clinton
- 0x0020af45, // n0x1347 c0x0000 (---------------) + I clock
- 0x00387ec4, // n0x1348 c0x0000 (---------------) + I coal
- 0x0032ac0e, // n0x1349 c0x0000 (---------------) + I coastaldefence
- 0x00200744, // n0x134a c0x0000 (---------------) + I cody
- 0x00232107, // n0x134b c0x0000 (---------------) + I coldwar
- 0x0024f38a, // n0x134c c0x0000 (---------------) + I collection
- 0x00221854, // n0x134d c0x0000 (---------------) + I colonialwilliamsburg
- 0x00221f0f, // n0x134e c0x0000 (---------------) + I coloradoplateau
- 0x00215f08, // n0x134f c0x0000 (---------------) + I columbia
- 0x00222388, // n0x1350 c0x0000 (---------------) + I columbus
- 0x002b354d, // n0x1351 c0x0000 (---------------) + I communication
- 0x002b354e, // n0x1352 c0x0000 (---------------) + I communications
- 0x00222ac9, // n0x1353 c0x0000 (---------------) + I community
- 0x002236c8, // n0x1354 c0x0000 (---------------) + I computer
- 0x002236cf, // n0x1355 c0x0000 (---------------) + I computerhistory
- 0x0022624c, // n0x1356 c0x0000 (---------------) + I contemporary
- 0x0022624f, // n0x1357 c0x0000 (---------------) + I contemporaryart
- 0x00227187, // n0x1358 c0x0000 (---------------) + I convent
- 0x00229bca, // n0x1359 c0x0000 (---------------) + I copenhagen
- 0x0021300b, // n0x135a c0x0000 (---------------) + I corporation
- 0x0022b908, // n0x135b c0x0000 (---------------) + I corvette
- 0x0022c347, // n0x135c c0x0000 (---------------) + I costume
- 0x00362c0d, // n0x135d c0x0000 (---------------) + I countryestate
- 0x002f8886, // n0x135e c0x0000 (---------------) + I county
- 0x00246746, // n0x135f c0x0000 (---------------) + I crafts
- 0x0022f189, // n0x1360 c0x0000 (---------------) + I cranbrook
- 0x002e63c8, // n0x1361 c0x0000 (---------------) + I creation
- 0x00233808, // n0x1362 c0x0000 (---------------) + I cultural
- 0x0023380e, // n0x1363 c0x0000 (---------------) + I culturalcenter
- 0x00323687, // n0x1364 c0x0000 (---------------) + I culture
- 0x00343d85, // n0x1365 c0x0000 (---------------) + I cyber
- 0x002dcac5, // n0x1366 c0x0000 (---------------) + I cymru
- 0x00270d04, // n0x1367 c0x0000 (---------------) + I dali
- 0x00267906, // n0x1368 c0x0000 (---------------) + I dallas
- 0x002ed4c8, // n0x1369 c0x0000 (---------------) + I database
- 0x0034d6c3, // n0x136a c0x0000 (---------------) + I ddr
- 0x00255ace, // n0x136b c0x0000 (---------------) + I decorativearts
- 0x00362fc8, // n0x136c c0x0000 (---------------) + I delaware
- 0x0029f90b, // n0x136d c0x0000 (---------------) + I delmenhorst
- 0x00311707, // n0x136e c0x0000 (---------------) + I denmark
- 0x002b8f85, // n0x136f c0x0000 (---------------) + I depot
- 0x00232f46, // n0x1370 c0x0000 (---------------) + I design
- 0x00295507, // n0x1371 c0x0000 (---------------) + I detroit
- 0x002dff48, // n0x1372 c0x0000 (---------------) + I dinosaur
- 0x00304c89, // n0x1373 c0x0000 (---------------) + I discovery
- 0x002250c5, // n0x1374 c0x0000 (---------------) + I dolls
- 0x00274888, // n0x1375 c0x0000 (---------------) + I donostia
- 0x0038a206, // n0x1376 c0x0000 (---------------) + I durham
- 0x00367b0a, // n0x1377 c0x0000 (---------------) + I eastafrica
- 0x0032ab09, // n0x1378 c0x0000 (---------------) + I eastcoast
- 0x00375549, // n0x1379 c0x0000 (---------------) + I education
- 0x0037554b, // n0x137a c0x0000 (---------------) + I educational
- 0x002958c8, // n0x137b c0x0000 (---------------) + I egyptian
- 0x00295e09, // n0x137c c0x0000 (---------------) + I eisenbahn
- 0x0020a506, // n0x137d c0x0000 (---------------) + I elburg
- 0x0034cf0a, // n0x137e c0x0000 (---------------) + I elvendrell
- 0x0032af4a, // n0x137f c0x0000 (---------------) + I embroidery
- 0x00229dcc, // n0x1380 c0x0000 (---------------) + I encyclopedic
- 0x0037b187, // n0x1381 c0x0000 (---------------) + I england
- 0x00384a8a, // n0x1382 c0x0000 (---------------) + I entomology
- 0x0030de4b, // n0x1383 c0x0000 (---------------) + I environment
- 0x0030de59, // n0x1384 c0x0000 (---------------) + I environmentalconservation
- 0x003543c8, // n0x1385 c0x0000 (---------------) + I epilepsy
- 0x0029ac45, // n0x1386 c0x0000 (---------------) + I essex
- 0x002b1846, // n0x1387 c0x0000 (---------------) + I estate
- 0x002f6409, // n0x1388 c0x0000 (---------------) + I ethnology
- 0x0020bb46, // n0x1389 c0x0000 (---------------) + I exeter
- 0x00326eca, // n0x138a c0x0000 (---------------) + I exhibition
- 0x00311c06, // n0x138b c0x0000 (---------------) + I family
- 0x0021f804, // n0x138c c0x0000 (---------------) + I farm
- 0x0021f80d, // n0x138d c0x0000 (---------------) + I farmequipment
- 0x00366b07, // n0x138e c0x0000 (---------------) + I farmers
- 0x002fb8c9, // n0x138f c0x0000 (---------------) + I farmstead
- 0x002099c5, // n0x1390 c0x0000 (---------------) + I field
- 0x00338588, // n0x1391 c0x0000 (---------------) + I figueres
- 0x00349f49, // n0x1392 c0x0000 (---------------) + I filatelia
- 0x00356104, // n0x1393 c0x0000 (---------------) + I film
- 0x003707c7, // n0x1394 c0x0000 (---------------) + I fineart
- 0x003707c8, // n0x1395 c0x0000 (---------------) + I finearts
- 0x00236407, // n0x1396 c0x0000 (---------------) + I finland
- 0x00252b88, // n0x1397 c0x0000 (---------------) + I flanders
- 0x0023c447, // n0x1398 c0x0000 (---------------) + I florida
- 0x002e7685, // n0x1399 c0x0000 (---------------) + I force
- 0x002457cc, // n0x139a c0x0000 (---------------) + I fortmissoula
- 0x00245e89, // n0x139b c0x0000 (---------------) + I fortworth
- 0x00303b8a, // n0x139c c0x0000 (---------------) + I foundation
- 0x00377209, // n0x139d c0x0000 (---------------) + I francaise
- 0x003229c9, // n0x139e c0x0000 (---------------) + I frankfurt
- 0x0035268c, // n0x139f c0x0000 (---------------) + I franziskaner
- 0x00209c8b, // n0x13a0 c0x0000 (---------------) + I freemasonry
- 0x00248cc8, // n0x13a1 c0x0000 (---------------) + I freiburg
- 0x002493c8, // n0x13a2 c0x0000 (---------------) + I fribourg
- 0x0024c784, // n0x13a3 c0x0000 (---------------) + I frog
- 0x0026fc08, // n0x13a4 c0x0000 (---------------) + I fundacio
- 0x00272f09, // n0x13a5 c0x0000 (---------------) + I furniture
- 0x00226607, // n0x13a6 c0x0000 (---------------) + I gallery
- 0x0020e506, // n0x13a7 c0x0000 (---------------) + I garden
- 0x0021a607, // n0x13a8 c0x0000 (---------------) + I gateway
- 0x00268b89, // n0x13a9 c0x0000 (---------------) + I geelvinck
- 0x002a634b, // n0x13aa c0x0000 (---------------) + I gemological
- 0x00309a87, // n0x13ab c0x0000 (---------------) + I geology
- 0x002f8287, // n0x13ac c0x0000 (---------------) + I georgia
- 0x00267387, // n0x13ad c0x0000 (---------------) + I giessen
- 0x0034da84, // n0x13ae c0x0000 (---------------) + I glas
- 0x0034da85, // n0x13af c0x0000 (---------------) + I glass
- 0x00292d05, // n0x13b0 c0x0000 (---------------) + I gorge
- 0x00320b0b, // n0x13b1 c0x0000 (---------------) + I grandrapids
- 0x00380d44, // n0x13b2 c0x0000 (---------------) + I graz
- 0x002e6b48, // n0x13b3 c0x0000 (---------------) + I guernsey
- 0x002a19ca, // n0x13b4 c0x0000 (---------------) + I halloffame
- 0x0038a2c7, // n0x13b5 c0x0000 (---------------) + I hamburg
- 0x00372047, // n0x13b6 c0x0000 (---------------) + I handson
- 0x0027a252, // n0x13b7 c0x0000 (---------------) + I harvestcelebration
- 0x00256386, // n0x13b8 c0x0000 (---------------) + I hawaii
- 0x00205e06, // n0x13b9 c0x0000 (---------------) + I health
- 0x002f518e, // n0x13ba c0x0000 (---------------) + I heimatunduhren
- 0x00257ac6, // n0x13bb c0x0000 (---------------) + I hellas
- 0x00209408, // n0x13bc c0x0000 (---------------) + I helsinki
- 0x0027f4cf, // n0x13bd c0x0000 (---------------) + I hembygdsforbund
- 0x0034dec8, // n0x13be c0x0000 (---------------) + I heritage
- 0x0025de08, // n0x13bf c0x0000 (---------------) + I histoire
- 0x002a794a, // n0x13c0 c0x0000 (---------------) + I historical
- 0x002a7951, // n0x13c1 c0x0000 (---------------) + I historicalsociety
- 0x0028cfce, // n0x13c2 c0x0000 (---------------) + I historichouses
- 0x0024268a, // n0x13c3 c0x0000 (---------------) + I historisch
- 0x0024268c, // n0x13c4 c0x0000 (---------------) + I historisches
- 0x002238c7, // n0x13c5 c0x0000 (---------------) + I history
- 0x002238d0, // n0x13c6 c0x0000 (---------------) + I historyofscience
- 0x0038f308, // n0x13c7 c0x0000 (---------------) + I horology
- 0x0021da05, // n0x13c8 c0x0000 (---------------) + I house
- 0x002d8f0a, // n0x13c9 c0x0000 (---------------) + I humanities
- 0x00396b4c, // n0x13ca c0x0000 (---------------) + I illustration
- 0x003365cd, // n0x13cb c0x0000 (---------------) + I imageandsound
- 0x002d5b06, // n0x13cc c0x0000 (---------------) + I indian
- 0x002d5b07, // n0x13cd c0x0000 (---------------) + I indiana
- 0x002d5b0c, // n0x13ce c0x0000 (---------------) + I indianapolis
- 0x00356ecc, // n0x13cf c0x0000 (---------------) + I indianmarket
- 0x00238c0c, // n0x13d0 c0x0000 (---------------) + I intelligence
- 0x0027d28b, // n0x13d1 c0x0000 (---------------) + I interactive
- 0x00273f44, // n0x13d2 c0x0000 (---------------) + I iraq
- 0x0021afc4, // n0x13d3 c0x0000 (---------------) + I iron
- 0x00357ec9, // n0x13d4 c0x0000 (---------------) + I isleofman
- 0x002bc087, // n0x13d5 c0x0000 (---------------) + I jamison
- 0x002207c9, // n0x13d6 c0x0000 (---------------) + I jefferson
- 0x00337649, // n0x13d7 c0x0000 (---------------) + I jerusalem
- 0x0034f487, // n0x13d8 c0x0000 (---------------) + I jewelry
- 0x0038cb46, // n0x13d9 c0x0000 (---------------) + I jewish
- 0x0038cb49, // n0x13da c0x0000 (---------------) + I jewishart
- 0x00297743, // n0x13db c0x0000 (---------------) + I jfk
- 0x0028540a, // n0x13dc c0x0000 (---------------) + I journalism
- 0x0036e9c7, // n0x13dd c0x0000 (---------------) + I judaica
- 0x0035f38b, // n0x13de c0x0000 (---------------) + I judygarland
- 0x002eeb4a, // n0x13df c0x0000 (---------------) + I juedisches
- 0x00370c84, // n0x13e0 c0x0000 (---------------) + I juif
- 0x002df386, // n0x13e1 c0x0000 (---------------) + I karate
- 0x002af549, // n0x13e2 c0x0000 (---------------) + I karikatur
- 0x00394c44, // n0x13e3 c0x0000 (---------------) + I kids
- 0x0033e24a, // n0x13e4 c0x0000 (---------------) + I koebenhavn
- 0x0021f385, // n0x13e5 c0x0000 (---------------) + I koeln
- 0x002a3845, // n0x13e6 c0x0000 (---------------) + I kunst
- 0x002a384d, // n0x13e7 c0x0000 (---------------) + I kunstsammlung
- 0x002a3b8e, // n0x13e8 c0x0000 (---------------) + I kunstunddesign
- 0x002feec5, // n0x13e9 c0x0000 (---------------) + I labor
- 0x0037c986, // n0x13ea c0x0000 (---------------) + I labour
- 0x00323a07, // n0x13eb c0x0000 (---------------) + I lajolla
- 0x00261a4a, // n0x13ec c0x0000 (---------------) + I lancashire
- 0x0035b146, // n0x13ed c0x0000 (---------------) + I landes
- 0x002856c4, // n0x13ee c0x0000 (---------------) + I lans
- 0x002d0287, // n0x13ef c0x0000 (---------------) + I larsson
- 0x0029eacb, // n0x13f0 c0x0000 (---------------) + I lewismiller
- 0x00251e07, // n0x13f1 c0x0000 (---------------) + I lincoln
- 0x00329ac4, // n0x13f2 c0x0000 (---------------) + I linz
- 0x002a1d46, // n0x13f3 c0x0000 (---------------) + I living
- 0x002a1d4d, // n0x13f4 c0x0000 (---------------) + I livinghistory
- 0x0032254c, // n0x13f5 c0x0000 (---------------) + I localhistory
- 0x00340906, // n0x13f6 c0x0000 (---------------) + I london
- 0x002a4f4a, // n0x13f7 c0x0000 (---------------) + I losangeles
- 0x002116c6, // n0x13f8 c0x0000 (---------------) + I louvre
- 0x00259d88, // n0x13f9 c0x0000 (---------------) + I loyalist
- 0x0021d747, // n0x13fa c0x0000 (---------------) + I lucerne
- 0x00222d8a, // n0x13fb c0x0000 (---------------) + I luxembourg
- 0x00226c86, // n0x13fc c0x0000 (---------------) + I luzern
- 0x0026b0c3, // n0x13fd c0x0000 (---------------) + I mad
- 0x00300a86, // n0x13fe c0x0000 (---------------) + I madrid
- 0x0026aa08, // n0x13ff c0x0000 (---------------) + I mallorca
- 0x0028608a, // n0x1400 c0x0000 (---------------) + I manchester
- 0x00266747, // n0x1401 c0x0000 (---------------) + I mansion
- 0x00266748, // n0x1402 c0x0000 (---------------) + I mansions
- 0x0026d784, // n0x1403 c0x0000 (---------------) + I manx
- 0x00277287, // n0x1404 c0x0000 (---------------) + I marburg
- 0x0036ee48, // n0x1405 c0x0000 (---------------) + I maritime
- 0x00237048, // n0x1406 c0x0000 (---------------) + I maritimo
- 0x00256588, // n0x1407 c0x0000 (---------------) + I maryland
- 0x003372ca, // n0x1408 c0x0000 (---------------) + I marylhurst
- 0x002dc385, // n0x1409 c0x0000 (---------------) + I media
- 0x002e7087, // n0x140a c0x0000 (---------------) + I medical
- 0x002424d3, // n0x140b c0x0000 (---------------) + I medizinhistorisches
- 0x00257946, // n0x140c c0x0000 (---------------) + I meeres
- 0x002edac8, // n0x140d c0x0000 (---------------) + I memorial
- 0x00219509, // n0x140e c0x0000 (---------------) + I mesaverde
- 0x00204988, // n0x140f c0x0000 (---------------) + I michigan
- 0x002892cb, // n0x1410 c0x0000 (---------------) + I midatlantic
- 0x002a6948, // n0x1411 c0x0000 (---------------) + I military
- 0x0029ec04, // n0x1412 c0x0000 (---------------) + I mill
- 0x002878c6, // n0x1413 c0x0000 (---------------) + I miners
- 0x002e7a46, // n0x1414 c0x0000 (---------------) + I mining
- 0x00335b09, // n0x1415 c0x0000 (---------------) + I minnesota
- 0x002ad807, // n0x1416 c0x0000 (---------------) + I missile
- 0x002458c8, // n0x1417 c0x0000 (---------------) + I missoula
- 0x00291a06, // n0x1418 c0x0000 (---------------) + I modern
- 0x0021cfc4, // n0x1419 c0x0000 (---------------) + I moma
- 0x002b6185, // n0x141a c0x0000 (---------------) + I money
- 0x002b02c8, // n0x141b c0x0000 (---------------) + I monmouth
- 0x002b094a, // n0x141c c0x0000 (---------------) + I monticello
- 0x002b1648, // n0x141d c0x0000 (---------------) + I montreal
- 0x002b68c6, // n0x141e c0x0000 (---------------) + I moscow
- 0x0028678a, // n0x141f c0x0000 (---------------) + I motorcycle
- 0x002f3cc8, // n0x1420 c0x0000 (---------------) + I muenchen
- 0x002b9948, // n0x1421 c0x0000 (---------------) + I muenster
- 0x002ba948, // n0x1422 c0x0000 (---------------) + I mulhouse
- 0x002bb346, // n0x1423 c0x0000 (---------------) + I muncie
- 0x002bd186, // n0x1424 c0x0000 (---------------) + I museet
- 0x0030e7cc, // n0x1425 c0x0000 (---------------) + I museumcenter
- 0x002bd650, // n0x1426 c0x0000 (---------------) + I museumvereniging
- 0x00337b85, // n0x1427 c0x0000 (---------------) + I music
- 0x002dd9c8, // n0x1428 c0x0000 (---------------) + I national
- 0x002dd9d0, // n0x1429 c0x0000 (---------------) + I nationalfirearms
- 0x0034dcd0, // n0x142a c0x0000 (---------------) + I nationalheritage
- 0x0027564e, // n0x142b c0x0000 (---------------) + I nativeamerican
- 0x0030e44e, // n0x142c c0x0000 (---------------) + I naturalhistory
- 0x0030e454, // n0x142d c0x0000 (---------------) + I naturalhistorymuseum
- 0x00240dcf, // n0x142e c0x0000 (---------------) + I naturalsciences
- 0x00241186, // n0x142f c0x0000 (---------------) + I nature
- 0x002f4951, // n0x1430 c0x0000 (---------------) + I naturhistorisches
- 0x0031cfd3, // n0x1431 c0x0000 (---------------) + I natuurwetenschappen
- 0x0031d448, // n0x1432 c0x0000 (---------------) + I naumburg
- 0x00341c05, // n0x1433 c0x0000 (---------------) + I naval
- 0x00262448, // n0x1434 c0x0000 (---------------) + I nebraska
- 0x0021d585, // n0x1435 c0x0000 (---------------) + I neues
- 0x002e60cc, // n0x1436 c0x0000 (---------------) + I newhampshire
- 0x00221609, // n0x1437 c0x0000 (---------------) + I newjersey
- 0x00231f49, // n0x1438 c0x0000 (---------------) + I newmexico
- 0x0021a387, // n0x1439 c0x0000 (---------------) + I newport
- 0x00366d49, // n0x143a c0x0000 (---------------) + I newspaper
- 0x00237f07, // n0x143b c0x0000 (---------------) + I newyork
- 0x00203d46, // n0x143c c0x0000 (---------------) + I niepce
- 0x003626c7, // n0x143d c0x0000 (---------------) + I norfolk
- 0x002f0dc5, // n0x143e c0x0000 (---------------) + I north
- 0x00345903, // n0x143f c0x0000 (---------------) + I nrw
- 0x0034d889, // n0x1440 c0x0000 (---------------) + I nuernberg
- 0x002e9309, // n0x1441 c0x0000 (---------------) + I nuremberg
- 0x00223403, // n0x1442 c0x0000 (---------------) + I nyc
- 0x002108c4, // n0x1443 c0x0000 (---------------) + I nyny
- 0x0034100d, // n0x1444 c0x0000 (---------------) + I oceanographic
- 0x0034384f, // n0x1445 c0x0000 (---------------) + I oceanographique
- 0x002e3085, // n0x1446 c0x0000 (---------------) + I omaha
- 0x003023c6, // n0x1447 c0x0000 (---------------) + I online
- 0x0032a587, // n0x1448 c0x0000 (---------------) + I ontario
- 0x0032ce07, // n0x1449 c0x0000 (---------------) + I openair
- 0x00276b86, // n0x144a c0x0000 (---------------) + I oregon
- 0x00276b8b, // n0x144b c0x0000 (---------------) + I oregontrail
- 0x0028e6c5, // n0x144c c0x0000 (---------------) + I otago
- 0x00364046, // n0x144d c0x0000 (---------------) + I oxford
- 0x0031ba07, // n0x144e c0x0000 (---------------) + I pacific
- 0x0025d709, // n0x144f c0x0000 (---------------) + I paderborn
- 0x0036ce06, // n0x1450 c0x0000 (---------------) + I palace
- 0x002052c5, // n0x1451 c0x0000 (---------------) + I paleo
- 0x00324b4b, // n0x1452 c0x0000 (---------------) + I palmsprings
- 0x00221d86, // n0x1453 c0x0000 (---------------) + I panama
- 0x0025b445, // n0x1454 c0x0000 (---------------) + I paris
- 0x002a3348, // n0x1455 c0x0000 (---------------) + I pasadena
- 0x002dc948, // n0x1456 c0x0000 (---------------) + I pharmacy
- 0x0036150c, // n0x1457 c0x0000 (---------------) + I philadelphia
- 0x00361510, // n0x1458 c0x0000 (---------------) + I philadelphiaarea
- 0x002bf909, // n0x1459 c0x0000 (---------------) + I philately
- 0x002bfd47, // n0x145a c0x0000 (---------------) + I phoenix
- 0x002c014b, // n0x145b c0x0000 (---------------) + I photography
- 0x002c1506, // n0x145c c0x0000 (---------------) + I pilots
- 0x002c2e8a, // n0x145d c0x0000 (---------------) + I pittsburgh
- 0x002c438b, // n0x145e c0x0000 (---------------) + I planetarium
- 0x002c4bca, // n0x145f c0x0000 (---------------) + I plantation
- 0x002c4e46, // n0x1460 c0x0000 (---------------) + I plants
- 0x002c6485, // n0x1461 c0x0000 (---------------) + I plaza
- 0x0036e706, // n0x1462 c0x0000 (---------------) + I portal
- 0x00266f08, // n0x1463 c0x0000 (---------------) + I portland
- 0x0021a44a, // n0x1464 c0x0000 (---------------) + I portlligat
- 0x002b31dc, // n0x1465 c0x0000 (---------------) + I posts-and-telecommunications
- 0x002ca84c, // n0x1466 c0x0000 (---------------) + I preservation
- 0x002cab48, // n0x1467 c0x0000 (---------------) + I presidio
- 0x0029abc5, // n0x1468 c0x0000 (---------------) + I press
- 0x002cc587, // n0x1469 c0x0000 (---------------) + I project
- 0x00296546, // n0x146a c0x0000 (---------------) + I public
- 0x0034c905, // n0x146b c0x0000 (---------------) + I pubol
- 0x00211186, // n0x146c c0x0000 (---------------) + I quebec
- 0x00276d48, // n0x146d c0x0000 (---------------) + I railroad
- 0x00253fc7, // n0x146e c0x0000 (---------------) + I railway
- 0x00296808, // n0x146f c0x0000 (---------------) + I research
- 0x0021c58a, // n0x1470 c0x0000 (---------------) + I resistance
- 0x0033cb8c, // n0x1471 c0x0000 (---------------) + I riodejaneiro
- 0x0033ce09, // n0x1472 c0x0000 (---------------) + I rochester
- 0x00201707, // n0x1473 c0x0000 (---------------) + I rockart
- 0x0023fb84, // n0x1474 c0x0000 (---------------) + I roma
- 0x0023afc6, // n0x1475 c0x0000 (---------------) + I russia
- 0x002c508a, // n0x1476 c0x0000 (---------------) + I saintlouis
- 0x00337745, // n0x1477 c0x0000 (---------------) + I salem
- 0x0034250c, // n0x1478 c0x0000 (---------------) + I salvadordali
- 0x0034ec88, // n0x1479 c0x0000 (---------------) + I salzburg
- 0x00270ec8, // n0x147a c0x0000 (---------------) + I sandiego
- 0x0023774c, // n0x147b c0x0000 (---------------) + I sanfrancisco
- 0x0020bfcc, // n0x147c c0x0000 (---------------) + I santabarbara
- 0x0020c3c9, // n0x147d c0x0000 (---------------) + I santacruz
- 0x0020c607, // n0x147e c0x0000 (---------------) + I santafe
- 0x0035768c, // n0x147f c0x0000 (---------------) + I saskatchewan
- 0x002251c4, // n0x1480 c0x0000 (---------------) + I satx
- 0x0022de0a, // n0x1481 c0x0000 (---------------) + I savannahga
- 0x0020cb8c, // n0x1482 c0x0000 (---------------) + I schlesisches
- 0x00354a4b, // n0x1483 c0x0000 (---------------) + I schoenbrunn
- 0x0025e7cb, // n0x1484 c0x0000 (---------------) + I schokoladen
- 0x00235406, // n0x1485 c0x0000 (---------------) + I school
- 0x0023b2c7, // n0x1486 c0x0000 (---------------) + I schweiz
- 0x00223b07, // n0x1487 c0x0000 (---------------) + I science
- 0x00223b0f, // n0x1488 c0x0000 (---------------) + I science-fiction
- 0x002d6251, // n0x1489 c0x0000 (---------------) + I scienceandhistory
- 0x0037f9d2, // n0x148a c0x0000 (---------------) + I scienceandindustry
- 0x0023ce0d, // n0x148b c0x0000 (---------------) + I sciencecenter
- 0x0023ce0e, // n0x148c c0x0000 (---------------) + I sciencecenters
- 0x0023d14e, // n0x148d c0x0000 (---------------) + I sciencehistory
- 0x00240f88, // n0x148e c0x0000 (---------------) + I sciences
- 0x00240f92, // n0x148f c0x0000 (---------------) + I sciencesnaturelles
- 0x00237988, // n0x1490 c0x0000 (---------------) + I scotland
- 0x002dfc87, // n0x1491 c0x0000 (---------------) + I seaport
- 0x0023920a, // n0x1492 c0x0000 (---------------) + I settlement
- 0x0020fb88, // n0x1493 c0x0000 (---------------) + I settlers
- 0x00257a85, // n0x1494 c0x0000 (---------------) + I shell
- 0x0025918a, // n0x1495 c0x0000 (---------------) + I sherbrooke
- 0x0037ad47, // n0x1496 c0x0000 (---------------) + I sibenik
- 0x0036b904, // n0x1497 c0x0000 (---------------) + I silk
- 0x00207b43, // n0x1498 c0x0000 (---------------) + I ski
- 0x002e3345, // n0x1499 c0x0000 (---------------) + I skole
- 0x002a7bc7, // n0x149a c0x0000 (---------------) + I society
- 0x002d84c7, // n0x149b c0x0000 (---------------) + I sologne
- 0x003367ce, // n0x149c c0x0000 (---------------) + I soundandvision
- 0x0031f30d, // n0x149d c0x0000 (---------------) + I southcarolina
- 0x00320d89, // n0x149e c0x0000 (---------------) + I southwest
- 0x002101c5, // n0x149f c0x0000 (---------------) + I space
- 0x00349a43, // n0x14a0 c0x0000 (---------------) + I spy
- 0x00275b86, // n0x14a1 c0x0000 (---------------) + I square
- 0x00248205, // n0x14a2 c0x0000 (---------------) + I stadt
- 0x0029fb48, // n0x14a3 c0x0000 (---------------) + I stalbans
- 0x00232449, // n0x14a4 c0x0000 (---------------) + I starnberg
- 0x002b1885, // n0x14a5 c0x0000 (---------------) + I state
- 0x00362e0f, // n0x14a6 c0x0000 (---------------) + I stateofdelaware
- 0x002c62c7, // n0x14a7 c0x0000 (---------------) + I station
- 0x00354105, // n0x14a8 c0x0000 (---------------) + I steam
- 0x002f2f8a, // n0x14a9 c0x0000 (---------------) + I steiermark
- 0x002a83c6, // n0x14aa c0x0000 (---------------) + I stjohn
- 0x00259f09, // n0x14ab c0x0000 (---------------) + I stockholm
- 0x002cf98c, // n0x14ac c0x0000 (---------------) + I stpetersburg
- 0x002d0749, // n0x14ad c0x0000 (---------------) + I stuttgart
- 0x00211e46, // n0x14ae c0x0000 (---------------) + I suisse
- 0x002a17cc, // n0x14af c0x0000 (---------------) + I surgeonshall
- 0x002d1c86, // n0x14b0 c0x0000 (---------------) + I surrey
- 0x002d4988, // n0x14b1 c0x0000 (---------------) + I svizzera
- 0x002d4b86, // n0x14b2 c0x0000 (---------------) + I sweden
- 0x00368086, // n0x14b3 c0x0000 (---------------) + I sydney
- 0x0024ca44, // n0x14b4 c0x0000 (---------------) + I tank
- 0x00249043, // n0x14b5 c0x0000 (---------------) + I tcm
- 0x0029d58a, // n0x14b6 c0x0000 (---------------) + I technology
- 0x002994d1, // n0x14b7 c0x0000 (---------------) + I telekommunikation
- 0x00248a4a, // n0x14b8 c0x0000 (---------------) + I television
- 0x00209085, // n0x14b9 c0x0000 (---------------) + I texas
- 0x00326307, // n0x14ba c0x0000 (---------------) + I textile
- 0x002f9147, // n0x14bb c0x0000 (---------------) + I theater
- 0x0036ef44, // n0x14bc c0x0000 (---------------) + I time
- 0x0036ef4b, // n0x14bd c0x0000 (---------------) + I timekeeping
- 0x0035e408, // n0x14be c0x0000 (---------------) + I topology
- 0x0029f3c6, // n0x14bf c0x0000 (---------------) + I torino
- 0x002e9685, // n0x14c0 c0x0000 (---------------) + I touch
- 0x0021abc4, // n0x14c1 c0x0000 (---------------) + I town
- 0x0027c9c9, // n0x14c2 c0x0000 (---------------) + I transport
- 0x00242e84, // n0x14c3 c0x0000 (---------------) + I tree
- 0x00211c47, // n0x14c4 c0x0000 (---------------) + I trolley
- 0x00313185, // n0x14c5 c0x0000 (---------------) + I trust
- 0x00313187, // n0x14c6 c0x0000 (---------------) + I trustee
- 0x002f53c5, // n0x14c7 c0x0000 (---------------) + I uhren
- 0x00213f43, // n0x14c8 c0x0000 (---------------) + I ulm
- 0x002dfb48, // n0x14c9 c0x0000 (---------------) + I undersea
- 0x0029f04a, // n0x14ca c0x0000 (---------------) + I university
- 0x00222503, // n0x14cb c0x0000 (---------------) + I usa
- 0x0022250a, // n0x14cc c0x0000 (---------------) + I usantiques
- 0x0038c1c6, // n0x14cd c0x0000 (---------------) + I usarts
- 0x00362b8f, // n0x14ce c0x0000 (---------------) + I uscountryestate
- 0x00323609, // n0x14cf c0x0000 (---------------) + I usculture
- 0x00255a50, // n0x14d0 c0x0000 (---------------) + I usdecorativearts
- 0x002ada08, // n0x14d1 c0x0000 (---------------) + I usgarden
- 0x002b7209, // n0x14d2 c0x0000 (---------------) + I ushistory
- 0x00282ac7, // n0x14d3 c0x0000 (---------------) + I ushuaia
- 0x002a1ccf, // n0x14d4 c0x0000 (---------------) + I uslivinghistory
- 0x0026a544, // n0x14d5 c0x0000 (---------------) + I utah
- 0x00357a44, // n0x14d6 c0x0000 (---------------) + I uvic
- 0x00213d86, // n0x14d7 c0x0000 (---------------) + I valley
- 0x002292c6, // n0x14d8 c0x0000 (---------------) + I vantaa
- 0x0038deca, // n0x14d9 c0x0000 (---------------) + I versailles
- 0x002c7686, // n0x14da c0x0000 (---------------) + I viking
- 0x00327d47, // n0x14db c0x0000 (---------------) + I village
- 0x002dd148, // n0x14dc c0x0000 (---------------) + I virginia
- 0x002dd347, // n0x14dd c0x0000 (---------------) + I virtual
- 0x002dd507, // n0x14de c0x0000 (---------------) + I virtuel
- 0x00332eca, // n0x14df c0x0000 (---------------) + I vlaanderen
- 0x002df98b, // n0x14e0 c0x0000 (---------------) + I volkenkunde
- 0x0036cbc5, // n0x14e1 c0x0000 (---------------) + I wales
- 0x0037f608, // n0x14e2 c0x0000 (---------------) + I wallonie
- 0x00202543, // n0x14e3 c0x0000 (---------------) + I war
- 0x0025108c, // n0x14e4 c0x0000 (---------------) + I washingtondc
- 0x0020accf, // n0x14e5 c0x0000 (---------------) + I watch-and-clock
- 0x0025fe4d, // n0x14e6 c0x0000 (---------------) + I watchandclock
- 0x0036d147, // n0x14e7 c0x0000 (---------------) + I western
- 0x00320ec9, // n0x14e8 c0x0000 (---------------) + I westfalen
- 0x0029b447, // n0x14e9 c0x0000 (---------------) + I whaling
- 0x00247748, // n0x14ea c0x0000 (---------------) + I wildlife
- 0x00221a4c, // n0x14eb c0x0000 (---------------) + I williamsburg
- 0x002a0248, // n0x14ec c0x0000 (---------------) + I windmill
- 0x0029b088, // n0x14ed c0x0000 (---------------) + I workshop
- 0x002f608e, // n0x14ee c0x0000 (---------------) + I xn--9dbhblg6di
- 0x003083d4, // n0x14ef c0x0000 (---------------) + I xn--comunicaes-v6a2o
- 0x003088e4, // n0x14f0 c0x0000 (---------------) + I xn--correios-e-telecomunicaes-ghc29a
- 0x0032844a, // n0x14f1 c0x0000 (---------------) + I xn--h1aegh
- 0x0034760b, // n0x14f2 c0x0000 (---------------) + I xn--lns-qla
- 0x00237fc4, // n0x14f3 c0x0000 (---------------) + I york
- 0x00237fc9, // n0x14f4 c0x0000 (---------------) + I yorkshire
- 0x00297948, // n0x14f5 c0x0000 (---------------) + I yosemite
- 0x00235bc5, // n0x14f6 c0x0000 (---------------) + I youth
- 0x0038ba0a, // n0x14f7 c0x0000 (---------------) + I zoological
- 0x00363207, // n0x14f8 c0x0000 (---------------) + I zoology
- 0x002751c4, // n0x14f9 c0x0000 (---------------) + I aero
- 0x00310603, // n0x14fa c0x0000 (---------------) + I biz
- 0x00222ac3, // n0x14fb c0x0000 (---------------) + I com
- 0x00228d44, // n0x14fc c0x0000 (---------------) + I coop
- 0x002d75c3, // n0x14fd c0x0000 (---------------) + I edu
- 0x0021e283, // n0x14fe c0x0000 (---------------) + I gov
- 0x00200304, // n0x14ff c0x0000 (---------------) + I info
- 0x00238c03, // n0x1500 c0x0000 (---------------) + I int
- 0x0023fa03, // n0x1501 c0x0000 (---------------) + I mil
- 0x002bd646, // n0x1502 c0x0000 (---------------) + I museum
- 0x00298944, // n0x1503 c0x0000 (---------------) + I name
- 0x002170c3, // n0x1504 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1505 c0x0000 (---------------) + I org
- 0x00218243, // n0x1506 c0x0000 (---------------) + I pro
- 0x00201e82, // n0x1507 c0x0000 (---------------) + I ac
- 0x00310603, // n0x1508 c0x0000 (---------------) + I biz
- 0x00200742, // n0x1509 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x150a c0x0000 (---------------) + I com
- 0x00228d44, // n0x150b c0x0000 (---------------) + I coop
- 0x002d75c3, // n0x150c c0x0000 (---------------) + I edu
- 0x0021e283, // n0x150d c0x0000 (---------------) + I gov
- 0x00238c03, // n0x150e c0x0000 (---------------) + I int
- 0x002bd646, // n0x150f c0x0000 (---------------) + I museum
- 0x002170c3, // n0x1510 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1511 c0x0000 (---------------) + I org
- 0x000e4188, // n0x1512 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1513 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1514 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x1515 c0x0000 (---------------) + I gob
- 0x002170c3, // n0x1516 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1517 c0x0000 (---------------) + I org
- 0x000e4188, // n0x1518 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1519 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x151a c0x0000 (---------------) + I edu
- 0x0021e283, // n0x151b c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x151c c0x0000 (---------------) + I mil
- 0x00298944, // n0x151d c0x0000 (---------------) + I name
- 0x002170c3, // n0x151e c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x151f c0x0000 (---------------) + I org
- 0x006ed3c8, // n0x1520 c0x0001 (---------------) ! I teledata
- 0x002055c2, // n0x1521 c0x0000 (---------------) + I ca
- 0x0021aa82, // n0x1522 c0x0000 (---------------) + I cc
- 0x00200742, // n0x1523 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1524 c0x0000 (---------------) + I com
- 0x0022fb02, // n0x1525 c0x0000 (---------------) + I dr
- 0x00200242, // n0x1526 c0x0000 (---------------) + I in
- 0x00200304, // n0x1527 c0x0000 (---------------) + I info
- 0x00203604, // n0x1528 c0x0000 (---------------) + I mobi
- 0x0020a682, // n0x1529 c0x0000 (---------------) + I mx
- 0x00298944, // n0x152a c0x0000 (---------------) + I name
- 0x00200c42, // n0x152b c0x0000 (---------------) + I or
- 0x0021dcc3, // n0x152c c0x0000 (---------------) + I org
- 0x00218243, // n0x152d c0x0000 (---------------) + I pro
- 0x00235406, // n0x152e c0x0000 (---------------) + I school
- 0x0020bf42, // n0x152f c0x0000 (---------------) + I tv
- 0x00209f42, // n0x1530 c0x0000 (---------------) + I us
- 0x0020ba82, // n0x1531 c0x0000 (---------------) + I ws
- 0x37e19443, // n0x1532 c0x00df (n0x1534-n0x1535) o I her
- 0x382238c3, // n0x1533 c0x00e0 (n0x1535-n0x1536) o I his
- 0x000439c6, // n0x1534 c0x0000 (---------------) + forgot
- 0x000439c6, // n0x1535 c0x0000 (---------------) + forgot
- 0x002729c4, // n0x1536 c0x0000 (---------------) + I asso
- 0x0010054c, // n0x1537 c0x0000 (---------------) + at-band-camp
- 0x0006c90c, // n0x1538 c0x0000 (---------------) + azure-mobile
- 0x000aef0d, // n0x1539 c0x0000 (---------------) + azurewebsites
- 0x000d0087, // n0x153a c0x0000 (---------------) + blogdns
- 0x00017a88, // n0x153b c0x0000 (---------------) + broke-it
- 0x0001d90a, // n0x153c c0x0000 (---------------) + buyshouses
- 0x38e2a085, // n0x153d c0x00e3 (n0x1568-n0x1569) o I cdn77
- 0x0002a089, // n0x153e c0x0000 (---------------) + cdn77-ssl
- 0x00192608, // n0x153f c0x0000 (---------------) + cloudapp
- 0x0019058a, // n0x1540 c0x0000 (---------------) + cloudfront
- 0x00146fc8, // n0x1541 c0x0000 (---------------) + dnsalias
- 0x0006a247, // n0x1542 c0x0000 (---------------) + dnsdojo
- 0x0018a587, // n0x1543 c0x0000 (---------------) + does-it
- 0x0015fdc9, // n0x1544 c0x0000 (---------------) + dontexist
- 0x000007c8, // n0x1545 c0x0000 (---------------) + dynalias
- 0x00078989, // n0x1546 c0x0000 (---------------) + dynathome
- 0x0009428d, // n0x1547 c0x0000 (---------------) + endofinternet
- 0x39287d46, // n0x1548 c0x00e4 (n0x1569-n0x156b) o I fastly
- 0x0004dac7, // n0x1549 c0x0000 (---------------) + from-az
- 0x0004f247, // n0x154a c0x0000 (---------------) + from-co
- 0x00056b87, // n0x154b c0x0000 (---------------) + from-la
- 0x0005c687, // n0x154c c0x0000 (---------------) + from-ny
- 0x00005a42, // n0x154d c0x0000 (---------------) + gb
- 0x00104507, // n0x154e c0x0000 (---------------) + gets-it
- 0x0005058c, // n0x154f c0x0000 (---------------) + ham-radio-op
- 0x00085007, // n0x1550 c0x0000 (---------------) + homeftp
- 0x000909c6, // n0x1551 c0x0000 (---------------) + homeip
- 0x00090ec9, // n0x1552 c0x0000 (---------------) + homelinux
- 0x00091b88, // n0x1553 c0x0000 (---------------) + homeunix
- 0x00017d42, // n0x1554 c0x0000 (---------------) + hu
- 0x00000242, // n0x1555 c0x0000 (---------------) + in
- 0x0005554b, // n0x1556 c0x0000 (---------------) + in-the-band
- 0x00166909, // n0x1557 c0x0000 (---------------) + is-a-chef
- 0x00052e49, // n0x1558 c0x0000 (---------------) + is-a-geek
- 0x00191648, // n0x1559 c0x0000 (---------------) + isa-geek
- 0x000990c2, // n0x155a c0x0000 (---------------) + jp
- 0x00183609, // n0x155b c0x0000 (---------------) + kicks-ass
- 0x00019c4d, // n0x155c c0x0000 (---------------) + office-on-the
- 0x000c7e07, // n0x155d c0x0000 (---------------) + podzone
- 0x0004294d, // n0x155e c0x0000 (---------------) + scrapper-site
- 0x00002e82, // n0x155f c0x0000 (---------------) + se
- 0x00130f46, // n0x1560 c0x0000 (---------------) + selfip
- 0x0007efc8, // n0x1561 c0x0000 (---------------) + sells-it
- 0x00079088, // n0x1562 c0x0000 (---------------) + servebbs
- 0x00161348, // n0x1563 c0x0000 (---------------) + serveftp
- 0x0003f688, // n0x1564 c0x0000 (---------------) + thruhere
- 0x0000cf02, // n0x1565 c0x0000 (---------------) + uk
- 0x00110e86, // n0x1566 c0x0000 (---------------) + webhop
- 0x000043c2, // n0x1567 c0x0000 (---------------) + za
- 0x00000581, // n0x1568 c0x0000 (---------------) + r
- 0x396cbe44, // n0x1569 c0x00e5 (n0x156b-n0x156d) o I prod
- 0x39a2a203, // n0x156a c0x00e6 (n0x156d-n0x1570) o I ssl
- 0x00000181, // n0x156b c0x0000 (---------------) + a
- 0x00189c06, // n0x156c c0x0000 (---------------) + global
- 0x00000181, // n0x156d c0x0000 (---------------) + a
- 0x00000001, // n0x156e c0x0000 (---------------) + b
- 0x00189c06, // n0x156f c0x0000 (---------------) + global
- 0x00246584, // n0x1570 c0x0000 (---------------) + I arts
- 0x00222ac3, // n0x1571 c0x0000 (---------------) + I com
- 0x00238544, // n0x1572 c0x0000 (---------------) + I firm
- 0x00200304, // n0x1573 c0x0000 (---------------) + I info
- 0x002170c3, // n0x1574 c0x0000 (---------------) + I net
- 0x002193c5, // n0x1575 c0x0000 (---------------) + I other
- 0x00214943, // n0x1576 c0x0000 (---------------) + I per
- 0x002e6343, // n0x1577 c0x0000 (---------------) + I rec
- 0x002cf4c5, // n0x1578 c0x0000 (---------------) + I store
- 0x00219fc3, // n0x1579 c0x0000 (---------------) + I web
- 0x3a622ac3, // n0x157a c0x00e9 (n0x1583-n0x1584) + I com
- 0x002d75c3, // n0x157b c0x0000 (---------------) + I edu
- 0x0021e283, // n0x157c c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x157d c0x0000 (---------------) + I mil
- 0x00203604, // n0x157e c0x0000 (---------------) + I mobi
- 0x00298944, // n0x157f c0x0000 (---------------) + I name
- 0x002170c3, // n0x1580 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1581 c0x0000 (---------------) + I org
- 0x00206103, // n0x1582 c0x0000 (---------------) + I sch
- 0x000e4188, // n0x1583 c0x0000 (---------------) + blogspot
- 0x000e4188, // n0x1584 c0x0000 (---------------) + blogspot
- 0x003401c2, // n0x1585 c0x0000 (---------------) + I bv
- 0x00000742, // n0x1586 c0x0000 (---------------) + co
- 0x3b21b502, // n0x1587 c0x00ec (n0x185d-n0x185e) + I aa
- 0x00301488, // n0x1588 c0x0000 (---------------) + I aarborte
- 0x0021b986, // n0x1589 c0x0000 (---------------) + I aejrie
- 0x002aa946, // n0x158a c0x0000 (---------------) + I afjord
- 0x0021b307, // n0x158b c0x0000 (---------------) + I agdenes
- 0x3b6076c2, // n0x158c c0x00ed (n0x185e-n0x185f) + I ah
- 0x3ba2b548, // n0x158d c0x00ee (n0x185f-n0x1860) o I akershus
- 0x0031a9ca, // n0x158e c0x0000 (---------------) + I aknoluokta
- 0x0024d548, // n0x158f c0x0000 (---------------) + I akrehamn
- 0x00200882, // n0x1590 c0x0000 (---------------) + I al
- 0x0036e809, // n0x1591 c0x0000 (---------------) + I alaheadju
- 0x0036cc07, // n0x1592 c0x0000 (---------------) + I alesund
- 0x0020e486, // n0x1593 c0x0000 (---------------) + I algard
- 0x00219749, // n0x1594 c0x0000 (---------------) + I alstahaug
- 0x0028ee04, // n0x1595 c0x0000 (---------------) + I alta
- 0x002ab3c6, // n0x1596 c0x0000 (---------------) + I alvdal
- 0x002aad44, // n0x1597 c0x0000 (---------------) + I amli
- 0x0025cb44, // n0x1598 c0x0000 (---------------) + I amot
- 0x00245409, // n0x1599 c0x0000 (---------------) + I andasuolo
- 0x002ee906, // n0x159a c0x0000 (---------------) + I andebu
- 0x0034bfc5, // n0x159b c0x0000 (---------------) + I andoy
- 0x00279985, // n0x159c c0x0000 (---------------) + I ardal
- 0x002a6dc7, // n0x159d c0x0000 (---------------) + I aremark
- 0x00275c47, // n0x159e c0x0000 (---------------) + I arendal
- 0x002798c4, // n0x159f c0x0000 (---------------) + I arna
- 0x0021b546, // n0x15a0 c0x0000 (---------------) + I aseral
- 0x00212605, // n0x15a1 c0x0000 (---------------) + I asker
- 0x0027d585, // n0x15a2 c0x0000 (---------------) + I askim
- 0x0031d885, // n0x15a3 c0x0000 (---------------) + I askoy
- 0x002dbc07, // n0x15a4 c0x0000 (---------------) + I askvoll
- 0x00311545, // n0x15a5 c0x0000 (---------------) + I asnes
- 0x002f1489, // n0x15a6 c0x0000 (---------------) + I audnedaln
- 0x00271305, // n0x15a7 c0x0000 (---------------) + I aukra
- 0x002e0084, // n0x15a8 c0x0000 (---------------) + I aure
- 0x0035b087, // n0x15a9 c0x0000 (---------------) + I aurland
- 0x0036d70e, // n0x15aa c0x0000 (---------------) + I aurskog-holand
- 0x003298c9, // n0x15ab c0x0000 (---------------) + I austevoll
- 0x002f5049, // n0x15ac c0x0000 (---------------) + I austrheim
- 0x0030dc86, // n0x15ad c0x0000 (---------------) + I averoy
- 0x00321688, // n0x15ae c0x0000 (---------------) + I badaddja
- 0x00329f8b, // n0x15af c0x0000 (---------------) + I bahcavuotna
- 0x002a080c, // n0x15b0 c0x0000 (---------------) + I bahccavuotna
- 0x00323c86, // n0x15b1 c0x0000 (---------------) + I baidar
- 0x00342887, // n0x15b2 c0x0000 (---------------) + I bajddar
- 0x0035dbc5, // n0x15b3 c0x0000 (---------------) + I balat
- 0x0023d9ca, // n0x15b4 c0x0000 (---------------) + I balestrand
- 0x0030b989, // n0x15b5 c0x0000 (---------------) + I ballangen
- 0x00268ec9, // n0x15b6 c0x0000 (---------------) + I balsfjord
- 0x002c8706, // n0x15b7 c0x0000 (---------------) + I bamble
- 0x002d37c5, // n0x15b8 c0x0000 (---------------) + I bardu
- 0x002b0545, // n0x15b9 c0x0000 (---------------) + I barum
- 0x0031a6c9, // n0x15ba c0x0000 (---------------) + I batsfjord
- 0x0035ddcb, // n0x15bb c0x0000 (---------------) + I bearalvahki
- 0x00269f06, // n0x15bc c0x0000 (---------------) + I beardu
- 0x00319a86, // n0x15bd c0x0000 (---------------) + I beiarn
- 0x00204704, // n0x15be c0x0000 (---------------) + I berg
- 0x00279f06, // n0x15bf c0x0000 (---------------) + I bergen
- 0x00343e08, // n0x15c0 c0x0000 (---------------) + I berlevag
- 0x00389486, // n0x15c1 c0x0000 (---------------) + I bievat
- 0x00219046, // n0x15c2 c0x0000 (---------------) + I bindal
- 0x00200f48, // n0x15c3 c0x0000 (---------------) + I birkenes
- 0x00202647, // n0x15c4 c0x0000 (---------------) + I bjarkoy
- 0x002033c9, // n0x15c5 c0x0000 (---------------) + I bjerkreim
- 0x00205005, // n0x15c6 c0x0000 (---------------) + I bjugn
- 0x000e4188, // n0x15c7 c0x0000 (---------------) + blogspot
- 0x0038a504, // n0x15c8 c0x0000 (---------------) + I bodo
- 0x0029bf44, // n0x15c9 c0x0000 (---------------) + I bokn
- 0x0020aac5, // n0x15ca c0x0000 (---------------) + I bomlo
- 0x0037dc49, // n0x15cb c0x0000 (---------------) + I bremanger
- 0x00218ac7, // n0x15cc c0x0000 (---------------) + I bronnoy
- 0x00218acb, // n0x15cd c0x0000 (---------------) + I bronnoysund
- 0x0021a7ca, // n0x15ce c0x0000 (---------------) + I brumunddal
- 0x0021d4c5, // n0x15cf c0x0000 (---------------) + I bryne
- 0x3be0a582, // n0x15d0 c0x00ef (n0x1860-n0x1861) + I bu
- 0x002eea07, // n0x15d1 c0x0000 (---------------) + I budejju
- 0x3c318ec8, // n0x15d2 c0x00f0 (n0x1861-n0x1862) o I buskerud
- 0x00251987, // n0x15d3 c0x0000 (---------------) + I bygland
- 0x0025f245, // n0x15d4 c0x0000 (---------------) + I bykle
- 0x0032234a, // n0x15d5 c0x0000 (---------------) + I cahcesuolo
- 0x00000742, // n0x15d6 c0x0000 (---------------) + co
- 0x0024fd0b, // n0x15d7 c0x0000 (---------------) + I davvenjarga
- 0x0024eb4a, // n0x15d8 c0x0000 (---------------) + I davvesiida
- 0x002e9206, // n0x15d9 c0x0000 (---------------) + I deatnu
- 0x002b8f83, // n0x15da c0x0000 (---------------) + I dep
- 0x0023404d, // n0x15db c0x0000 (---------------) + I dielddanuorri
- 0x0023e18c, // n0x15dc c0x0000 (---------------) + I divtasvuodna
- 0x002690cd, // n0x15dd c0x0000 (---------------) + I divttasvuotna
- 0x002f8b05, // n0x15de c0x0000 (---------------) + I donna
- 0x002396c5, // n0x15df c0x0000 (---------------) + I dovre
- 0x0034d707, // n0x15e0 c0x0000 (---------------) + I drammen
- 0x002edfc9, // n0x15e1 c0x0000 (---------------) + I drangedal
- 0x0031a8c6, // n0x15e2 c0x0000 (---------------) + I drobak
- 0x002c7505, // n0x15e3 c0x0000 (---------------) + I dyroy
- 0x0021e888, // n0x15e4 c0x0000 (---------------) + I egersund
- 0x00262743, // n0x15e5 c0x0000 (---------------) + I eid
- 0x002ec4c8, // n0x15e6 c0x0000 (---------------) + I eidfjord
- 0x00279e08, // n0x15e7 c0x0000 (---------------) + I eidsberg
- 0x002ac2c7, // n0x15e8 c0x0000 (---------------) + I eidskog
- 0x00262748, // n0x15e9 c0x0000 (---------------) + I eidsvoll
- 0x00383049, // n0x15ea c0x0000 (---------------) + I eigersund
- 0x00227ec7, // n0x15eb c0x0000 (---------------) + I elverum
- 0x00300e87, // n0x15ec c0x0000 (---------------) + I enebakk
- 0x002674c8, // n0x15ed c0x0000 (---------------) + I engerdal
- 0x002569c4, // n0x15ee c0x0000 (---------------) + I etne
- 0x002569c7, // n0x15ef c0x0000 (---------------) + I etnedal
- 0x0037ab48, // n0x15f0 c0x0000 (---------------) + I evenassi
- 0x0030a446, // n0x15f1 c0x0000 (---------------) + I evenes
- 0x00201f0f, // n0x15f2 c0x0000 (---------------) + I evje-og-hornnes
- 0x00345a07, // n0x15f3 c0x0000 (---------------) + I farsund
- 0x002c3146, // n0x15f4 c0x0000 (---------------) + I fauske
- 0x0020c745, // n0x15f5 c0x0000 (---------------) + I fedje
- 0x00234803, // n0x15f6 c0x0000 (---------------) + I fet
- 0x00324187, // n0x15f7 c0x0000 (---------------) + I fetsund
- 0x00235ec3, // n0x15f8 c0x0000 (---------------) + I fhs
- 0x002365c6, // n0x15f9 c0x0000 (---------------) + I finnoy
- 0x00238f06, // n0x15fa c0x0000 (---------------) + I fitjar
- 0x00239986, // n0x15fb c0x0000 (---------------) + I fjaler
- 0x0027e245, // n0x15fc c0x0000 (---------------) + I fjell
- 0x00252b83, // n0x15fd c0x0000 (---------------) + I fla
- 0x0035be08, // n0x15fe c0x0000 (---------------) + I flakstad
- 0x00353389, // n0x15ff c0x0000 (---------------) + I flatanger
- 0x0036500b, // n0x1600 c0x0000 (---------------) + I flekkefjord
- 0x00239b08, // n0x1601 c0x0000 (---------------) + I flesberg
- 0x0023c105, // n0x1602 c0x0000 (---------------) + I flora
- 0x0023d4c5, // n0x1603 c0x0000 (---------------) + I floro
- 0x3c758002, // n0x1604 c0x00f1 (n0x1862-n0x1863) + I fm
- 0x00362789, // n0x1605 c0x0000 (---------------) + I folkebibl
- 0x00241787, // n0x1606 c0x0000 (---------------) + I folldal
- 0x003640c5, // n0x1607 c0x0000 (---------------) + I forde
- 0x00245307, // n0x1608 c0x0000 (---------------) + I forsand
- 0x00247586, // n0x1609 c0x0000 (---------------) + I fosnes
- 0x0034af05, // n0x160a c0x0000 (---------------) + I frana
- 0x0024804b, // n0x160b c0x0000 (---------------) + I fredrikstad
- 0x00248cc4, // n0x160c c0x0000 (---------------) + I frei
- 0x0024d105, // n0x160d c0x0000 (---------------) + I frogn
- 0x0024d247, // n0x160e c0x0000 (---------------) + I froland
- 0x00263e06, // n0x160f c0x0000 (---------------) + I frosta
- 0x00264245, // n0x1610 c0x0000 (---------------) + I froya
- 0x0026fe07, // n0x1611 c0x0000 (---------------) + I fuoisku
- 0x00270587, // n0x1612 c0x0000 (---------------) + I fuossko
- 0x002a7504, // n0x1613 c0x0000 (---------------) + I fusa
- 0x0027798a, // n0x1614 c0x0000 (---------------) + I fylkesbibl
- 0x00277e48, // n0x1615 c0x0000 (---------------) + I fyresdal
- 0x0035ea49, // n0x1616 c0x0000 (---------------) + I gaivuotna
- 0x00215b85, // n0x1617 c0x0000 (---------------) + I galsa
- 0x0024ff46, // n0x1618 c0x0000 (---------------) + I gamvik
- 0x00343fca, // n0x1619 c0x0000 (---------------) + I gangaviika
- 0x003442c6, // n0x161a c0x0000 (---------------) + I gaular
- 0x002542c7, // n0x161b c0x0000 (---------------) + I gausdal
- 0x0035e70d, // n0x161c c0x0000 (---------------) + I giehtavuoatna
- 0x00220049, // n0x161d c0x0000 (---------------) + I gildeskal
- 0x00347945, // n0x161e c0x0000 (---------------) + I giske
- 0x0030ee07, // n0x161f c0x0000 (---------------) + I gjemnes
- 0x002ed908, // n0x1620 c0x0000 (---------------) + I gjerdrum
- 0x0031c188, // n0x1621 c0x0000 (---------------) + I gjerstad
- 0x0031d607, // n0x1622 c0x0000 (---------------) + I gjesdal
- 0x003446c6, // n0x1623 c0x0000 (---------------) + I gjovik
- 0x00395287, // n0x1624 c0x0000 (---------------) + I gloppen
- 0x00238a83, // n0x1625 c0x0000 (---------------) + I gol
- 0x00320b04, // n0x1626 c0x0000 (---------------) + I gran
- 0x00348cc5, // n0x1627 c0x0000 (---------------) + I grane
- 0x00376107, // n0x1628 c0x0000 (---------------) + I granvin
- 0x00379f89, // n0x1629 c0x0000 (---------------) + I gratangen
- 0x002136c8, // n0x162a c0x0000 (---------------) + I grimstad
- 0x002c77c5, // n0x162b c0x0000 (---------------) + I grong
- 0x00222fc4, // n0x162c c0x0000 (---------------) + I grue
- 0x00331485, // n0x162d c0x0000 (---------------) + I gulen
- 0x002373cd, // n0x162e c0x0000 (---------------) + I guovdageaidnu
- 0x00202dc2, // n0x162f c0x0000 (---------------) + I ha
- 0x00289a46, // n0x1630 c0x0000 (---------------) + I habmer
- 0x00330e86, // n0x1631 c0x0000 (---------------) + I hadsel
- 0x002f5e0a, // n0x1632 c0x0000 (---------------) + I hagebostad
- 0x0035b7c6, // n0x1633 c0x0000 (---------------) + I halden
- 0x00363605, // n0x1634 c0x0000 (---------------) + I halsa
- 0x0036e045, // n0x1635 c0x0000 (---------------) + I hamar
- 0x0036e047, // n0x1636 c0x0000 (---------------) + I hamaroy
- 0x0036794c, // n0x1637 c0x0000 (---------------) + I hammarfeasta
- 0x002ef38a, // n0x1638 c0x0000 (---------------) + I hammerfest
- 0x002796c6, // n0x1639 c0x0000 (---------------) + I hapmir
- 0x002ae105, // n0x163a c0x0000 (---------------) + I haram
- 0x00279d46, // n0x163b c0x0000 (---------------) + I hareid
- 0x0027a087, // n0x163c c0x0000 (---------------) + I harstad
- 0x0027b486, // n0x163d c0x0000 (---------------) + I hasvik
- 0x0027e14c, // n0x163e c0x0000 (---------------) + I hattfjelldal
- 0x00219889, // n0x163f c0x0000 (---------------) + I haugesund
- 0x3ca9bc07, // n0x1640 c0x00f2 (n0x1863-n0x1866) o I hedmark
- 0x0027f885, // n0x1641 c0x0000 (---------------) + I hemne
- 0x0027f886, // n0x1642 c0x0000 (---------------) + I hemnes
- 0x0027fc88, // n0x1643 c0x0000 (---------------) + I hemsedal
- 0x0022db45, // n0x1644 c0x0000 (---------------) + I herad
- 0x0028fd85, // n0x1645 c0x0000 (---------------) + I hitra
- 0x0028ffc8, // n0x1646 c0x0000 (---------------) + I hjartdal
- 0x002901ca, // n0x1647 c0x0000 (---------------) + I hjelmeland
- 0x3ce0cc02, // n0x1648 c0x00f3 (n0x1866-n0x1867) + I hl
- 0x3d206182, // n0x1649 c0x00f4 (n0x1867-n0x1868) + I hm
- 0x002536c5, // n0x164a c0x0000 (---------------) + I hobol
- 0x0029a803, // n0x164b c0x0000 (---------------) + I hof
- 0x002c7348, // n0x164c c0x0000 (---------------) + I hokksund
- 0x002351c3, // n0x164d c0x0000 (---------------) + I hol
- 0x00290444, // n0x164e c0x0000 (---------------) + I hole
- 0x0025a04b, // n0x164f c0x0000 (---------------) + I holmestrand
- 0x00271dc8, // n0x1650 c0x0000 (---------------) + I holtalen
- 0x00292148, // n0x1651 c0x0000 (---------------) + I honefoss
- 0x3d6f84c9, // n0x1652 c0x00f5 (n0x1868-n0x1869) o I hordaland
- 0x002939c9, // n0x1653 c0x0000 (---------------) + I hornindal
- 0x00294186, // n0x1654 c0x0000 (---------------) + I horten
- 0x00295188, // n0x1655 c0x0000 (---------------) + I hoyanger
- 0x00295389, // n0x1656 c0x0000 (---------------) + I hoylandet
- 0x00296046, // n0x1657 c0x0000 (---------------) + I hurdal
- 0x002961c5, // n0x1658 c0x0000 (---------------) + I hurum
- 0x003512c6, // n0x1659 c0x0000 (---------------) + I hvaler
- 0x0036b589, // n0x165a c0x0000 (---------------) + I hyllestad
- 0x0030a287, // n0x165b c0x0000 (---------------) + I ibestad
- 0x00247d86, // n0x165c c0x0000 (---------------) + I idrett
- 0x002f3407, // n0x165d c0x0000 (---------------) + I inderoy
- 0x00304b07, // n0x165e c0x0000 (---------------) + I iveland
- 0x0025f644, // n0x165f c0x0000 (---------------) + I ivgu
- 0x3da14c09, // n0x1660 c0x00f6 (n0x1869-n0x186a) + I jan-mayen
- 0x002b4408, // n0x1661 c0x0000 (---------------) + I jessheim
- 0x00345148, // n0x1662 c0x0000 (---------------) + I jevnaker
- 0x002326c7, // n0x1663 c0x0000 (---------------) + I jolster
- 0x002afb86, // n0x1664 c0x0000 (---------------) + I jondal
- 0x0038a009, // n0x1665 c0x0000 (---------------) + I jorpeland
- 0x002ab887, // n0x1666 c0x0000 (---------------) + I kafjord
- 0x0022e84a, // n0x1667 c0x0000 (---------------) + I karasjohka
- 0x002d8848, // n0x1668 c0x0000 (---------------) + I karasjok
- 0x0023eb87, // n0x1669 c0x0000 (---------------) + I karlsoy
- 0x00305646, // n0x166a c0x0000 (---------------) + I karmoy
- 0x002eaa8a, // n0x166b c0x0000 (---------------) + I kautokeino
- 0x0023cc48, // n0x166c c0x0000 (---------------) + I kirkenes
- 0x0025ef45, // n0x166d c0x0000 (---------------) + I klabu
- 0x0021cd85, // n0x166e c0x0000 (---------------) + I klepp
- 0x002ac947, // n0x166f c0x0000 (---------------) + I kommune
- 0x002b7dc9, // n0x1670 c0x0000 (---------------) + I kongsberg
- 0x002b814b, // n0x1671 c0x0000 (---------------) + I kongsvinger
- 0x002c83c8, // n0x1672 c0x0000 (---------------) + I kopervik
- 0x00271389, // n0x1673 c0x0000 (---------------) + I kraanghke
- 0x0023a407, // n0x1674 c0x0000 (---------------) + I kragero
- 0x0029db0c, // n0x1675 c0x0000 (---------------) + I kristiansand
- 0x0029df8c, // n0x1676 c0x0000 (---------------) + I kristiansund
- 0x0029e28a, // n0x1677 c0x0000 (---------------) + I krodsherad
- 0x0029e50c, // n0x1678 c0x0000 (---------------) + I krokstadelva
- 0x002aa8c8, // n0x1679 c0x0000 (---------------) + I kvafjord
- 0x002aaac8, // n0x167a c0x0000 (---------------) + I kvalsund
- 0x002aacc4, // n0x167b c0x0000 (---------------) + I kvam
- 0x002aba49, // n0x167c c0x0000 (---------------) + I kvanangen
- 0x002abc89, // n0x167d c0x0000 (---------------) + I kvinesdal
- 0x002abeca, // n0x167e c0x0000 (---------------) + I kvinnherad
- 0x002ac149, // n0x167f c0x0000 (---------------) + I kviteseid
- 0x002ac487, // n0x1680 c0x0000 (---------------) + I kvitsoy
- 0x00381bcc, // n0x1681 c0x0000 (---------------) + I laakesvuemie
- 0x00207686, // n0x1682 c0x0000 (---------------) + I lahppi
- 0x00256cc8, // n0x1683 c0x0000 (---------------) + I langevag
- 0x00344386, // n0x1684 c0x0000 (---------------) + I lardal
- 0x002d7a86, // n0x1685 c0x0000 (---------------) + I larvik
- 0x00347847, // n0x1686 c0x0000 (---------------) + I lavagis
- 0x00358888, // n0x1687 c0x0000 (---------------) + I lavangen
- 0x002f020b, // n0x1688 c0x0000 (---------------) + I leangaviika
- 0x00251847, // n0x1689 c0x0000 (---------------) + I lebesby
- 0x00227989, // n0x168a c0x0000 (---------------) + I leikanger
- 0x002386c9, // n0x168b c0x0000 (---------------) + I leirfjord
- 0x00244b87, // n0x168c c0x0000 (---------------) + I leirvik
- 0x00203c44, // n0x168d c0x0000 (---------------) + I leka
- 0x0034b3c7, // n0x168e c0x0000 (---------------) + I leksvik
- 0x00364686, // n0x168f c0x0000 (---------------) + I lenvik
- 0x00364246, // n0x1690 c0x0000 (---------------) + I lerdal
- 0x002a5105, // n0x1691 c0x0000 (---------------) + I lesja
- 0x00326448, // n0x1692 c0x0000 (---------------) + I levanger
- 0x002a6004, // n0x1693 c0x0000 (---------------) + I lier
- 0x002a6006, // n0x1694 c0x0000 (---------------) + I lierne
- 0x002ef24b, // n0x1695 c0x0000 (---------------) + I lillehammer
- 0x00270d89, // n0x1696 c0x0000 (---------------) + I lillesand
- 0x0031d786, // n0x1697 c0x0000 (---------------) + I lindas
- 0x0031dc09, // n0x1698 c0x0000 (---------------) + I lindesnes
- 0x002dbd86, // n0x1699 c0x0000 (---------------) + I loabat
- 0x002455c8, // n0x169a c0x0000 (---------------) + I lodingen
- 0x00260a43, // n0x169b c0x0000 (---------------) + I lom
- 0x0031b945, // n0x169c c0x0000 (---------------) + I loppa
- 0x003444c9, // n0x169d c0x0000 (---------------) + I lorenskog
- 0x0034d145, // n0x169e c0x0000 (---------------) + I loten
- 0x002d8b84, // n0x169f c0x0000 (---------------) + I lund
- 0x00263646, // n0x16a0 c0x0000 (---------------) + I lunner
- 0x0029cb85, // n0x16a1 c0x0000 (---------------) + I luroy
- 0x002c7bc6, // n0x16a2 c0x0000 (---------------) + I luster
- 0x002e1c87, // n0x16a3 c0x0000 (---------------) + I lyngdal
- 0x0029c206, // n0x16a4 c0x0000 (---------------) + I lyngen
- 0x0028448b, // n0x16a5 c0x0000 (---------------) + I malatvuopmi
- 0x0034ce07, // n0x16a6 c0x0000 (---------------) + I malselv
- 0x00307d86, // n0x16a7 c0x0000 (---------------) + I malvik
- 0x00358046, // n0x16a8 c0x0000 (---------------) + I mandal
- 0x002a6e86, // n0x16a9 c0x0000 (---------------) + I marker
- 0x00279889, // n0x16aa c0x0000 (---------------) + I marnardal
- 0x003419ca, // n0x16ab c0x0000 (---------------) + I masfjorden
- 0x00314445, // n0x16ac c0x0000 (---------------) + I masoy
- 0x0020f58d, // n0x16ad c0x0000 (---------------) + I matta-varjjat
- 0x002902c6, // n0x16ae c0x0000 (---------------) + I meland
- 0x002d8246, // n0x16af c0x0000 (---------------) + I meldal
- 0x002a1bc6, // n0x16b0 c0x0000 (---------------) + I melhus
- 0x00259d05, // n0x16b1 c0x0000 (---------------) + I meloy
- 0x0022b487, // n0x16b2 c0x0000 (---------------) + I meraker
- 0x002886c7, // n0x16b3 c0x0000 (---------------) + I midsund
- 0x002061ce, // n0x16b4 c0x0000 (---------------) + I midtre-gauldal
- 0x0023fa03, // n0x16b5 c0x0000 (---------------) + I mil
- 0x002afb49, // n0x16b6 c0x0000 (---------------) + I mjondalen
- 0x002f3689, // n0x16b7 c0x0000 (---------------) + I mo-i-rana
- 0x0023ddc7, // n0x16b8 c0x0000 (---------------) + I moareke
- 0x00208487, // n0x16b9 c0x0000 (---------------) + I modalen
- 0x003120c5, // n0x16ba c0x0000 (---------------) + I modum
- 0x0029f845, // n0x16bb c0x0000 (---------------) + I molde
- 0x3de70a0f, // n0x16bc c0x00f7 (n0x186a-n0x186c) o I more-og-romsdal
- 0x002b7447, // n0x16bd c0x0000 (---------------) + I mosjoen
- 0x002b7608, // n0x16be c0x0000 (---------------) + I moskenes
- 0x002b7b44, // n0x16bf c0x0000 (---------------) + I moss
- 0x002b8006, // n0x16c0 c0x0000 (---------------) + I mosvik
- 0x3e2dcb42, // n0x16c1 c0x00f8 (n0x186c-n0x186d) + I mr
- 0x002bb5c6, // n0x16c2 c0x0000 (---------------) + I muosat
- 0x002bd646, // n0x16c3 c0x0000 (---------------) + I museum
- 0x002f054e, // n0x16c4 c0x0000 (---------------) + I naamesjevuemie
- 0x002ec30a, // n0x16c5 c0x0000 (---------------) + I namdalseid
- 0x0021c1c6, // n0x16c6 c0x0000 (---------------) + I namsos
- 0x00232b4a, // n0x16c7 c0x0000 (---------------) + I namsskogan
- 0x002b2489, // n0x16c8 c0x0000 (---------------) + I nannestad
- 0x002ff685, // n0x16c9 c0x0000 (---------------) + I naroy
- 0x0037c388, // n0x16ca c0x0000 (---------------) + I narviika
- 0x00393206, // n0x16cb c0x0000 (---------------) + I narvik
- 0x0031e108, // n0x16cc c0x0000 (---------------) + I naustdal
- 0x00354f08, // n0x16cd c0x0000 (---------------) + I navuotna
- 0x00395acb, // n0x16ce c0x0000 (---------------) + I nedre-eiker
- 0x0021b405, // n0x16cf c0x0000 (---------------) + I nesna
- 0x003115c8, // n0x16d0 c0x0000 (---------------) + I nesodden
- 0x0020108c, // n0x16d1 c0x0000 (---------------) + I nesoddtangen
- 0x0025f107, // n0x16d2 c0x0000 (---------------) + I nesseby
- 0x00239146, // n0x16d3 c0x0000 (---------------) + I nesset
- 0x002e6588, // n0x16d4 c0x0000 (---------------) + I nissedal
- 0x002677c8, // n0x16d5 c0x0000 (---------------) + I nittedal
- 0x3e636482, // n0x16d6 c0x00f9 (n0x186d-n0x186e) + I nl
- 0x002ab18b, // n0x16d7 c0x0000 (---------------) + I nord-aurdal
- 0x00200c09, // n0x16d8 c0x0000 (---------------) + I nord-fron
- 0x003473c9, // n0x16d9 c0x0000 (---------------) + I nord-odal
- 0x0031da87, // n0x16da c0x0000 (---------------) + I norddal
- 0x002befc8, // n0x16db c0x0000 (---------------) + I nordkapp
- 0x3ea3dfc8, // n0x16dc c0x00fa (n0x186e-n0x1872) o I nordland
- 0x002c5f0b, // n0x16dd c0x0000 (---------------) + I nordre-land
- 0x003914c9, // n0x16de c0x0000 (---------------) + I nordreisa
- 0x002113cd, // n0x16df c0x0000 (---------------) + I nore-og-uvdal
- 0x0023fdc8, // n0x16e0 c0x0000 (---------------) + I notodden
- 0x00288b08, // n0x16e1 c0x0000 (---------------) + I notteroy
- 0x3ee00e02, // n0x16e2 c0x00fb (n0x1872-n0x1873) + I nt
- 0x00396f44, // n0x16e3 c0x0000 (---------------) + I odda
- 0x3f209982, // n0x16e4 c0x00fc (n0x1873-n0x1874) + I of
- 0x002d89c6, // n0x16e5 c0x0000 (---------------) + I oksnes
- 0x3f600a02, // n0x16e6 c0x00fd (n0x1874-n0x1875) + I ol
- 0x0021d00a, // n0x16e7 c0x0000 (---------------) + I omasvuotna
- 0x0029b206, // n0x16e8 c0x0000 (---------------) + I oppdal
- 0x00220b88, // n0x16e9 c0x0000 (---------------) + I oppegard
- 0x00241b48, // n0x16ea c0x0000 (---------------) + I orkanger
- 0x00321986, // n0x16eb c0x0000 (---------------) + I orkdal
- 0x0032e206, // n0x16ec c0x0000 (---------------) + I orland
- 0x002ce006, // n0x16ed c0x0000 (---------------) + I orskog
- 0x0029fac5, // n0x16ee c0x0000 (---------------) + I orsta
- 0x0022be04, // n0x16ef c0x0000 (---------------) + I osen
- 0x3fab8a04, // n0x16f0 c0x00fe (n0x1875-n0x1876) + I oslo
- 0x00207f86, // n0x16f1 c0x0000 (---------------) + I osoyro
- 0x002586c7, // n0x16f2 c0x0000 (---------------) + I osteroy
- 0x3fed6987, // n0x16f3 c0x00ff (n0x1876-n0x1877) o I ostfold
- 0x0020300b, // n0x16f4 c0x0000 (---------------) + I ostre-toten
- 0x0036dac9, // n0x16f5 c0x0000 (---------------) + I overhalla
- 0x0023970a, // n0x16f6 c0x0000 (---------------) + I ovre-eiker
- 0x002f3544, // n0x16f7 c0x0000 (---------------) + I oyer
- 0x00300d08, // n0x16f8 c0x0000 (---------------) + I oygarden
- 0x00247b4d, // n0x16f9 c0x0000 (---------------) + I oystre-slidre
- 0x002c9e89, // n0x16fa c0x0000 (---------------) + I porsanger
- 0x002ca0c8, // n0x16fb c0x0000 (---------------) + I porsangu
- 0x002ca349, // n0x16fc c0x0000 (---------------) + I porsgrunn
- 0x002cba44, // n0x16fd c0x0000 (---------------) + I priv
- 0x00212ec4, // n0x16fe c0x0000 (---------------) + I rade
- 0x00254d85, // n0x16ff c0x0000 (---------------) + I radoy
- 0x0035f14b, // n0x1700 c0x0000 (---------------) + I rahkkeravju
- 0x00271d46, // n0x1701 c0x0000 (---------------) + I raholt
- 0x002a2305, // n0x1702 c0x0000 (---------------) + I raisa
- 0x0032a2c9, // n0x1703 c0x0000 (---------------) + I rakkestad
- 0x0021b608, // n0x1704 c0x0000 (---------------) + I ralingen
- 0x0025abc4, // n0x1705 c0x0000 (---------------) + I rana
- 0x0023db49, // n0x1706 c0x0000 (---------------) + I randaberg
- 0x0026a685, // n0x1707 c0x0000 (---------------) + I rauma
- 0x00275c88, // n0x1708 c0x0000 (---------------) + I rendalen
- 0x0033c507, // n0x1709 c0x0000 (---------------) + I rennebu
- 0x002f5448, // n0x170a c0x0000 (---------------) + I rennesoy
- 0x002af746, // n0x170b c0x0000 (---------------) + I rindal
- 0x003247c7, // n0x170c c0x0000 (---------------) + I ringebu
- 0x002a8c49, // n0x170d c0x0000 (---------------) + I ringerike
- 0x00324cc9, // n0x170e c0x0000 (---------------) + I ringsaker
- 0x0025b4c5, // n0x170f c0x0000 (---------------) + I risor
- 0x002346c5, // n0x1710 c0x0000 (---------------) + I rissa
- 0x4021d702, // n0x1711 c0x0100 (n0x1877-n0x1878) + I rl
- 0x002dfe44, // n0x1712 c0x0000 (---------------) + I roan
- 0x0036a305, // n0x1713 c0x0000 (---------------) + I rodoy
- 0x0033c1c6, // n0x1714 c0x0000 (---------------) + I rollag
- 0x00302a85, // n0x1715 c0x0000 (---------------) + I romsa
- 0x0023d587, // n0x1716 c0x0000 (---------------) + I romskog
- 0x002e3245, // n0x1717 c0x0000 (---------------) + I roros
- 0x00263e44, // n0x1718 c0x0000 (---------------) + I rost
- 0x0030dd46, // n0x1719 c0x0000 (---------------) + I royken
- 0x002c7587, // n0x171a c0x0000 (---------------) + I royrvik
- 0x002dcb86, // n0x171b c0x0000 (---------------) + I ruovat
- 0x00268ac5, // n0x171c c0x0000 (---------------) + I rygge
- 0x0031ce08, // n0x171d c0x0000 (---------------) + I salangen
- 0x0031de05, // n0x171e c0x0000 (---------------) + I salat
- 0x00341347, // n0x171f c0x0000 (---------------) + I saltdal
- 0x0035b289, // n0x1720 c0x0000 (---------------) + I samnanger
- 0x0029dd0a, // n0x1721 c0x0000 (---------------) + I sandefjord
- 0x0023bac7, // n0x1722 c0x0000 (---------------) + I sandnes
- 0x0023bacc, // n0x1723 c0x0000 (---------------) + I sandnessjoen
- 0x0034bf86, // n0x1724 c0x0000 (---------------) + I sandoy
- 0x0021db49, // n0x1725 c0x0000 (---------------) + I sarpsborg
- 0x0022d7c5, // n0x1726 c0x0000 (---------------) + I sauda
- 0x0022da88, // n0x1727 c0x0000 (---------------) + I sauherad
- 0x0020a4c3, // n0x1728 c0x0000 (---------------) + I sel
- 0x0020a4c5, // n0x1729 c0x0000 (---------------) + I selbu
- 0x002fad85, // n0x172a c0x0000 (---------------) + I selje
- 0x00245cc7, // n0x172b c0x0000 (---------------) + I seljord
- 0x4060f182, // n0x172c c0x0101 (n0x1878-n0x1879) + I sf
- 0x0023b647, // n0x172d c0x0000 (---------------) + I siellak
- 0x002b79c6, // n0x172e c0x0000 (---------------) + I sigdal
- 0x00214b46, // n0x172f c0x0000 (---------------) + I siljan
- 0x002c1186, // n0x1730 c0x0000 (---------------) + I sirdal
- 0x00267706, // n0x1731 c0x0000 (---------------) + I skanit
- 0x00310108, // n0x1732 c0x0000 (---------------) + I skanland
- 0x00262585, // n0x1733 c0x0000 (---------------) + I skaun
- 0x002c3207, // n0x1734 c0x0000 (---------------) + I skedsmo
- 0x002c320d, // n0x1735 c0x0000 (---------------) + I skedsmokorset
- 0x00207b43, // n0x1736 c0x0000 (---------------) + I ski
- 0x00207b45, // n0x1737 c0x0000 (---------------) + I skien
- 0x002f2d47, // n0x1738 c0x0000 (---------------) + I skierva
- 0x0036b048, // n0x1739 c0x0000 (---------------) + I skiptvet
- 0x0036ac05, // n0x173a c0x0000 (---------------) + I skjak
- 0x0030c348, // n0x173b c0x0000 (---------------) + I skjervoy
- 0x002206c6, // n0x173c c0x0000 (---------------) + I skodje
- 0x0022a247, // n0x173d c0x0000 (---------------) + I slattum
- 0x00285605, // n0x173e c0x0000 (---------------) + I smola
- 0x0021b486, // n0x173f c0x0000 (---------------) + I snaase
- 0x00340405, // n0x1740 c0x0000 (---------------) + I snasa
- 0x002aa34a, // n0x1741 c0x0000 (---------------) + I snillfjord
- 0x002c4f86, // n0x1742 c0x0000 (---------------) + I snoasa
- 0x002141c7, // n0x1743 c0x0000 (---------------) + I sogndal
- 0x00308285, // n0x1744 c0x0000 (---------------) + I sogne
- 0x002d9347, // n0x1745 c0x0000 (---------------) + I sokndal
- 0x002d0204, // n0x1746 c0x0000 (---------------) + I sola
- 0x002d8b06, // n0x1747 c0x0000 (---------------) + I solund
- 0x002da005, // n0x1748 c0x0000 (---------------) + I somna
- 0x002ee70b, // n0x1749 c0x0000 (---------------) + I sondre-land
- 0x00364509, // n0x174a c0x0000 (---------------) + I songdalen
- 0x0037184a, // n0x174b c0x0000 (---------------) + I sor-aurdal
- 0x0025b548, // n0x174c c0x0000 (---------------) + I sor-fron
- 0x002e0f48, // n0x174d c0x0000 (---------------) + I sor-odal
- 0x002e888c, // n0x174e c0x0000 (---------------) + I sor-varanger
- 0x002ec987, // n0x174f c0x0000 (---------------) + I sorfold
- 0x00315608, // n0x1750 c0x0000 (---------------) + I sorreisa
- 0x0031a288, // n0x1751 c0x0000 (---------------) + I sortland
- 0x0031ee45, // n0x1752 c0x0000 (---------------) + I sorum
- 0x002ac70a, // n0x1753 c0x0000 (---------------) + I spjelkavik
- 0x00349a49, // n0x1754 c0x0000 (---------------) + I spydeberg
- 0x40a023c2, // n0x1755 c0x0102 (n0x1879-n0x187a) + I st
- 0x00309986, // n0x1756 c0x0000 (---------------) + I stange
- 0x0029ca04, // n0x1757 c0x0000 (---------------) + I stat
- 0x0029e909, // n0x1758 c0x0000 (---------------) + I stathelle
- 0x002c92c9, // n0x1759 c0x0000 (---------------) + I stavanger
- 0x002d97c7, // n0x175a c0x0000 (---------------) + I stavern
- 0x0025c087, // n0x175b c0x0000 (---------------) + I steigen
- 0x003374c9, // n0x175c c0x0000 (---------------) + I steinkjer
- 0x00202b88, // n0x175d c0x0000 (---------------) + I stjordal
- 0x00202b8f, // n0x175e c0x0000 (---------------) + I stjordalshalsen
- 0x00228bc6, // n0x175f c0x0000 (---------------) + I stokke
- 0x0023f24b, // n0x1760 c0x0000 (---------------) + I stor-elvdal
- 0x002cf305, // n0x1761 c0x0000 (---------------) + I stord
- 0x002cf307, // n0x1762 c0x0000 (---------------) + I stordal
- 0x002cf749, // n0x1763 c0x0000 (---------------) + I storfjord
- 0x0023dac6, // n0x1764 c0x0000 (---------------) + I strand
- 0x0023dac7, // n0x1765 c0x0000 (---------------) + I stranda
- 0x0037fd45, // n0x1766 c0x0000 (---------------) + I stryn
- 0x00224fc4, // n0x1767 c0x0000 (---------------) + I sula
- 0x00226b46, // n0x1768 c0x0000 (---------------) + I suldal
- 0x00218c84, // n0x1769 c0x0000 (---------------) + I sund
- 0x002a9c87, // n0x176a c0x0000 (---------------) + I sunndal
- 0x002d1a88, // n0x176b c0x0000 (---------------) + I surnadal
- 0x40ed36c8, // n0x176c c0x0103 (n0x187a-n0x187b) + I svalbard
- 0x002d4485, // n0x176d c0x0000 (---------------) + I sveio
- 0x002d45c7, // n0x176e c0x0000 (---------------) + I svelvik
- 0x00354549, // n0x176f c0x0000 (---------------) + I sykkylven
- 0x00204e04, // n0x1770 c0x0000 (---------------) + I tana
- 0x00204e08, // n0x1771 c0x0000 (---------------) + I tananger
- 0x4122ba88, // n0x1772 c0x0104 (n0x187b-n0x187d) o I telemark
- 0x0036ef44, // n0x1773 c0x0000 (---------------) + I time
- 0x00225c08, // n0x1774 c0x0000 (---------------) + I tingvoll
- 0x0030cf04, // n0x1775 c0x0000 (---------------) + I tinn
- 0x0021fb09, // n0x1776 c0x0000 (---------------) + I tjeldsund
- 0x00259c45, // n0x1777 c0x0000 (---------------) + I tjome
- 0x41608902, // n0x1778 c0x0105 (n0x187d-n0x187e) + I tm
- 0x00228c05, // n0x1779 c0x0000 (---------------) + I tokke
- 0x00215ac5, // n0x177a c0x0000 (---------------) + I tolga
- 0x00204608, // n0x177b c0x0000 (---------------) + I tonsberg
- 0x00226fc7, // n0x177c c0x0000 (---------------) + I torsken
- 0x41a02402, // n0x177d c0x0106 (n0x187e-n0x187f) + I tr
- 0x0025ab85, // n0x177e c0x0000 (---------------) + I trana
- 0x00263106, // n0x177f c0x0000 (---------------) + I tranby
- 0x00278cc6, // n0x1780 c0x0000 (---------------) + I tranoy
- 0x002dfe08, // n0x1781 c0x0000 (---------------) + I troandin
- 0x002e4348, // n0x1782 c0x0000 (---------------) + I trogstad
- 0x00302a46, // n0x1783 c0x0000 (---------------) + I tromsa
- 0x0030ac06, // n0x1784 c0x0000 (---------------) + I tromso
- 0x00214709, // n0x1785 c0x0000 (---------------) + I trondheim
- 0x0036b846, // n0x1786 c0x0000 (---------------) + I trysil
- 0x00394d4b, // n0x1787 c0x0000 (---------------) + I tvedestrand
- 0x00222c85, // n0x1788 c0x0000 (---------------) + I tydal
- 0x0020fac6, // n0x1789 c0x0000 (---------------) + I tynset
- 0x00224108, // n0x178a c0x0000 (---------------) + I tysfjord
- 0x00234886, // n0x178b c0x0000 (---------------) + I tysnes
- 0x002f8986, // n0x178c c0x0000 (---------------) + I tysvar
- 0x00210dca, // n0x178d c0x0000 (---------------) + I ullensaker
- 0x002bab8a, // n0x178e c0x0000 (---------------) + I ullensvang
- 0x0025bd05, // n0x178f c0x0000 (---------------) + I ulvik
- 0x00215307, // n0x1790 c0x0000 (---------------) + I unjarga
- 0x002d0d06, // n0x1791 c0x0000 (---------------) + I utsira
- 0x41e013c2, // n0x1792 c0x0107 (n0x187f-n0x1880) + I va
- 0x002f2e87, // n0x1793 c0x0000 (---------------) + I vaapste
- 0x00262a85, // n0x1794 c0x0000 (---------------) + I vadso
- 0x00343f44, // n0x1795 c0x0000 (---------------) + I vaga
- 0x00343f45, // n0x1796 c0x0000 (---------------) + I vagan
- 0x00300c06, // n0x1797 c0x0000 (---------------) + I vagsoy
- 0x0033f147, // n0x1798 c0x0000 (---------------) + I vaksdal
- 0x00213d85, // n0x1799 c0x0000 (---------------) + I valle
- 0x002bad04, // n0x179a c0x0000 (---------------) + I vang
- 0x0025c3c8, // n0x179b c0x0000 (---------------) + I vanylven
- 0x002f8a45, // n0x179c c0x0000 (---------------) + I vardo
- 0x00280307, // n0x179d c0x0000 (---------------) + I varggat
- 0x002cf005, // n0x179e c0x0000 (---------------) + I varoy
- 0x00310385, // n0x179f c0x0000 (---------------) + I vefsn
- 0x00212004, // n0x17a0 c0x0000 (---------------) + I vega
- 0x00299e89, // n0x17a1 c0x0000 (---------------) + I vegarshei
- 0x00212448, // n0x17a2 c0x0000 (---------------) + I vennesla
- 0x00212286, // n0x17a3 c0x0000 (---------------) + I verdal
- 0x00386a06, // n0x17a4 c0x0000 (---------------) + I verran
- 0x002b9c46, // n0x17a5 c0x0000 (---------------) + I vestby
- 0x422d9c88, // n0x17a6 c0x0108 (n0x1880-n0x1881) o I vestfold
- 0x002d9e87, // n0x17a7 c0x0000 (---------------) + I vestnes
- 0x002da30d, // n0x17a8 c0x0000 (---------------) + I vestre-slidre
- 0x002da90c, // n0x17a9 c0x0000 (---------------) + I vestre-toten
- 0x002daf09, // n0x17aa c0x0000 (---------------) + I vestvagoy
- 0x002db149, // n0x17ab c0x0000 (---------------) + I vevelstad
- 0x4273b4c2, // n0x17ac c0x0109 (n0x1881-n0x1882) + I vf
- 0x0038c903, // n0x17ad c0x0000 (---------------) + I vgs
- 0x00244c83, // n0x17ae c0x0000 (---------------) + I vik
- 0x00364745, // n0x17af c0x0000 (---------------) + I vikna
- 0x0037620a, // n0x17b0 c0x0000 (---------------) + I vindafjord
- 0x00302906, // n0x17b1 c0x0000 (---------------) + I voagat
- 0x002df605, // n0x17b2 c0x0000 (---------------) + I volda
- 0x002e21c4, // n0x17b3 c0x0000 (---------------) + I voss
- 0x002e21cb, // n0x17b4 c0x0000 (---------------) + I vossevangen
- 0x002f6e0c, // n0x17b5 c0x0000 (---------------) + I xn--andy-ira
- 0x002f764c, // n0x17b6 c0x0000 (---------------) + I xn--asky-ira
- 0x002f7955, // n0x17b7 c0x0000 (---------------) + I xn--aurskog-hland-jnb
- 0x002f984d, // n0x17b8 c0x0000 (---------------) + I xn--avery-yua
- 0x002fbb0f, // n0x17b9 c0x0000 (---------------) + I xn--bdddj-mrabd
- 0x002fbed2, // n0x17ba c0x0000 (---------------) + I xn--bearalvhki-y4a
- 0x002fc34f, // n0x17bb c0x0000 (---------------) + I xn--berlevg-jxa
- 0x002fc712, // n0x17bc c0x0000 (---------------) + I xn--bhcavuotna-s4a
- 0x002fcb93, // n0x17bd c0x0000 (---------------) + I xn--bhccavuotna-k7a
- 0x002fd04d, // n0x17be c0x0000 (---------------) + I xn--bidr-5nac
- 0x002fd60d, // n0x17bf c0x0000 (---------------) + I xn--bievt-0qa
- 0x002fd94e, // n0x17c0 c0x0000 (---------------) + I xn--bjarky-fya
- 0x002fde0e, // n0x17c1 c0x0000 (---------------) + I xn--bjddar-pta
- 0x002fec8c, // n0x17c2 c0x0000 (---------------) + I xn--blt-elab
- 0x002ff00c, // n0x17c3 c0x0000 (---------------) + I xn--bmlo-gra
- 0x002ff44b, // n0x17c4 c0x0000 (---------------) + I xn--bod-2na
- 0x002ff7ce, // n0x17c5 c0x0000 (---------------) + I xn--brnny-wuac
- 0x00301b92, // n0x17c6 c0x0000 (---------------) + I xn--brnnysund-m8ac
- 0x003026cc, // n0x17c7 c0x0000 (---------------) + I xn--brum-voa
- 0x00302e90, // n0x17c8 c0x0000 (---------------) + I xn--btsfjord-9za
- 0x003138d2, // n0x17c9 c0x0000 (---------------) + I xn--davvenjrga-y4a
- 0x0031458c, // n0x17ca c0x0000 (---------------) + I xn--dnna-gra
- 0x00314a4d, // n0x17cb c0x0000 (---------------) + I xn--drbak-wua
- 0x00314d8c, // n0x17cc c0x0000 (---------------) + I xn--dyry-ira
- 0x00317b91, // n0x17cd c0x0000 (---------------) + I xn--eveni-0qa01ga
- 0x00319c0d, // n0x17ce c0x0000 (---------------) + I xn--finny-yua
- 0x0031f74d, // n0x17cf c0x0000 (---------------) + I xn--fjord-lra
- 0x0031fd4a, // n0x17d0 c0x0000 (---------------) + I xn--fl-zia
- 0x0031ffcc, // n0x17d1 c0x0000 (---------------) + I xn--flor-jra
- 0x003208cc, // n0x17d2 c0x0000 (---------------) + I xn--frde-gra
- 0x0032110c, // n0x17d3 c0x0000 (---------------) + I xn--frna-woa
- 0x00321b0c, // n0x17d4 c0x0000 (---------------) + I xn--frya-hra
- 0x00324f13, // n0x17d5 c0x0000 (---------------) + I xn--ggaviika-8ya47h
- 0x00326650, // n0x17d6 c0x0000 (---------------) + I xn--gildeskl-g0a
- 0x00326a50, // n0x17d7 c0x0000 (---------------) + I xn--givuotna-8ya
- 0x0032714d, // n0x17d8 c0x0000 (---------------) + I xn--gjvik-wua
- 0x0032748c, // n0x17d9 c0x0000 (---------------) + I xn--gls-elac
- 0x00328189, // n0x17da c0x0000 (---------------) + I xn--h-2fa
- 0x0032900d, // n0x17db c0x0000 (---------------) + I xn--hbmer-xqa
- 0x00329353, // n0x17dc c0x0000 (---------------) + I xn--hcesuolo-7ya35b
- 0x0032c151, // n0x17dd c0x0000 (---------------) + I xn--hgebostad-g3a
- 0x0032c593, // n0x17de c0x0000 (---------------) + I xn--hmmrfeasta-s4ac
- 0x0032e38f, // n0x17df c0x0000 (---------------) + I xn--hnefoss-q1a
- 0x0032e74c, // n0x17e0 c0x0000 (---------------) + I xn--hobl-ira
- 0x0032ea4f, // n0x17e1 c0x0000 (---------------) + I xn--holtlen-hxa
- 0x0032ee0d, // n0x17e2 c0x0000 (---------------) + I xn--hpmir-xqa
- 0x0032f40f, // n0x17e3 c0x0000 (---------------) + I xn--hyanger-q1a
- 0x0032f7d0, // n0x17e4 c0x0000 (---------------) + I xn--hylandet-54a
- 0x0033024e, // n0x17e5 c0x0000 (---------------) + I xn--indery-fya
- 0x00332a0e, // n0x17e6 c0x0000 (---------------) + I xn--jlster-bya
- 0x00333150, // n0x17e7 c0x0000 (---------------) + I xn--jrpeland-54a
- 0x00333e8d, // n0x17e8 c0x0000 (---------------) + I xn--karmy-yua
- 0x0033480e, // n0x17e9 c0x0000 (---------------) + I xn--kfjord-iua
- 0x00334b8c, // n0x17ea c0x0000 (---------------) + I xn--klbu-woa
- 0x00336b53, // n0x17eb c0x0000 (---------------) + I xn--koluokta-7ya57h
- 0x0033934e, // n0x17ec c0x0000 (---------------) + I xn--krager-gya
- 0x00339b10, // n0x17ed c0x0000 (---------------) + I xn--kranghke-b0a
- 0x00339f11, // n0x17ee c0x0000 (---------------) + I xn--krdsherad-m8a
- 0x0033a34f, // n0x17ef c0x0000 (---------------) + I xn--krehamn-dxa
- 0x0033a713, // n0x17f0 c0x0000 (---------------) + I xn--krjohka-hwab49j
- 0x0033b04d, // n0x17f1 c0x0000 (---------------) + I xn--ksnes-uua
- 0x0033b38f, // n0x17f2 c0x0000 (---------------) + I xn--kvfjord-nxa
- 0x0033b74e, // n0x17f3 c0x0000 (---------------) + I xn--kvitsy-fya
- 0x0033d050, // n0x17f4 c0x0000 (---------------) + I xn--kvnangen-k0a
- 0x0033d449, // n0x17f5 c0x0000 (---------------) + I xn--l-1fa
- 0x0033e4d0, // n0x17f6 c0x0000 (---------------) + I xn--laheadju-7ya
- 0x0033f30f, // n0x17f7 c0x0000 (---------------) + I xn--langevg-jxa
- 0x0033f98f, // n0x17f8 c0x0000 (---------------) + I xn--ldingen-q1a
- 0x0033fd52, // n0x17f9 c0x0000 (---------------) + I xn--leagaviika-52b
- 0x00344a4e, // n0x17fa c0x0000 (---------------) + I xn--lesund-hua
- 0x0034534d, // n0x17fb c0x0000 (---------------) + I xn--lgrd-poac
- 0x00345bcd, // n0x17fc c0x0000 (---------------) + I xn--lhppi-xqa
- 0x00345f0d, // n0x17fd c0x0000 (---------------) + I xn--linds-pra
- 0x00347a8d, // n0x17fe c0x0000 (---------------) + I xn--loabt-0qa
- 0x00347dcd, // n0x17ff c0x0000 (---------------) + I xn--lrdal-sra
- 0x00348110, // n0x1800 c0x0000 (---------------) + I xn--lrenskog-54a
- 0x0034850b, // n0x1801 c0x0000 (---------------) + I xn--lt-liac
- 0x00348a8c, // n0x1802 c0x0000 (---------------) + I xn--lten-gra
- 0x00348e0c, // n0x1803 c0x0000 (---------------) + I xn--lury-ira
- 0x0034910c, // n0x1804 c0x0000 (---------------) + I xn--mely-ira
- 0x0034940e, // n0x1805 c0x0000 (---------------) + I xn--merker-kua
- 0x00356890, // n0x1806 c0x0000 (---------------) + I xn--mjndalen-64a
- 0x003581d2, // n0x1807 c0x0000 (---------------) + I xn--mlatvuopmi-s4a
- 0x0035864b, // n0x1808 c0x0000 (---------------) + I xn--mli-tla
- 0x00358a8e, // n0x1809 c0x0000 (---------------) + I xn--mlselv-iua
- 0x00358e0e, // n0x180a c0x0000 (---------------) + I xn--moreke-jua
- 0x0035960e, // n0x180b c0x0000 (---------------) + I xn--mosjen-eya
- 0x0035a4cb, // n0x180c c0x0000 (---------------) + I xn--mot-tla
- 0x42b5a856, // n0x180d c0x010a (n0x1882-n0x1884) o I xn--mre-og-romsdal-qqb
- 0x0035b4cd, // n0x180e c0x0000 (---------------) + I xn--msy-ula0h
- 0x0035b954, // n0x180f c0x0000 (---------------) + I xn--mtta-vrjjat-k7af
- 0x0035c38d, // n0x1810 c0x0000 (---------------) + I xn--muost-0qa
- 0x0035d715, // n0x1811 c0x0000 (---------------) + I xn--nmesjevuemie-tcba
- 0x0036060d, // n0x1812 c0x0000 (---------------) + I xn--nry-yla5g
- 0x00360f8f, // n0x1813 c0x0000 (---------------) + I xn--nttery-byae
- 0x00361bcf, // n0x1814 c0x0000 (---------------) + I xn--nvuotna-hwa
- 0x003652cf, // n0x1815 c0x0000 (---------------) + I xn--oppegrd-ixa
- 0x0036568e, // n0x1816 c0x0000 (---------------) + I xn--ostery-fya
- 0x00365d4d, // n0x1817 c0x0000 (---------------) + I xn--osyro-wua
- 0x00368211, // n0x1818 c0x0000 (---------------) + I xn--porsgu-sta26f
- 0x0036f34c, // n0x1819 c0x0000 (---------------) + I xn--rady-ira
- 0x0036f64c, // n0x181a c0x0000 (---------------) + I xn--rdal-poa
- 0x0036f94b, // n0x181b c0x0000 (---------------) + I xn--rde-ula
- 0x0036fc0c, // n0x181c c0x0000 (---------------) + I xn--rdy-0nab
- 0x0036ffcf, // n0x181d c0x0000 (---------------) + I xn--rennesy-v1a
- 0x00370392, // n0x181e c0x0000 (---------------) + I xn--rhkkervju-01af
- 0x00371acd, // n0x181f c0x0000 (---------------) + I xn--rholt-mra
- 0x00372d0c, // n0x1820 c0x0000 (---------------) + I xn--risa-5na
- 0x0037318c, // n0x1821 c0x0000 (---------------) + I xn--risr-ira
- 0x0037348d, // n0x1822 c0x0000 (---------------) + I xn--rland-uua
- 0x003737cf, // n0x1823 c0x0000 (---------------) + I xn--rlingen-mxa
- 0x00373b8e, // n0x1824 c0x0000 (---------------) + I xn--rmskog-bya
- 0x00375ecc, // n0x1825 c0x0000 (---------------) + I xn--rros-gra
- 0x0037648d, // n0x1826 c0x0000 (---------------) + I xn--rskog-uua
- 0x003767cb, // n0x1827 c0x0000 (---------------) + I xn--rst-0na
- 0x00376fcc, // n0x1828 c0x0000 (---------------) + I xn--rsta-fra
- 0x0037754d, // n0x1829 c0x0000 (---------------) + I xn--ryken-vua
- 0x0037788e, // n0x182a c0x0000 (---------------) + I xn--ryrvik-bya
- 0x00377d09, // n0x182b c0x0000 (---------------) + I xn--s-1fa
- 0x00378b53, // n0x182c c0x0000 (---------------) + I xn--sandnessjen-ogb
- 0x0037940d, // n0x182d c0x0000 (---------------) + I xn--sandy-yua
- 0x0037974d, // n0x182e c0x0000 (---------------) + I xn--seral-lra
- 0x00379d4c, // n0x182f c0x0000 (---------------) + I xn--sgne-gra
- 0x0037a1ce, // n0x1830 c0x0000 (---------------) + I xn--skierv-uta
- 0x0037b34f, // n0x1831 c0x0000 (---------------) + I xn--skjervy-v1a
- 0x0037b70c, // n0x1832 c0x0000 (---------------) + I xn--skjk-soa
- 0x0037ba0d, // n0x1833 c0x0000 (---------------) + I xn--sknit-yqa
- 0x0037bd4f, // n0x1834 c0x0000 (---------------) + I xn--sknland-fxa
- 0x0037c10c, // n0x1835 c0x0000 (---------------) + I xn--slat-5na
- 0x0037c74c, // n0x1836 c0x0000 (---------------) + I xn--slt-elab
- 0x0037cb0c, // n0x1837 c0x0000 (---------------) + I xn--smla-hra
- 0x0037ce0c, // n0x1838 c0x0000 (---------------) + I xn--smna-gra
- 0x0037d4cd, // n0x1839 c0x0000 (---------------) + I xn--snase-nra
- 0x0037d812, // n0x183a c0x0000 (---------------) + I xn--sndre-land-0cb
- 0x0037de8c, // n0x183b c0x0000 (---------------) + I xn--snes-poa
- 0x0037e18c, // n0x183c c0x0000 (---------------) + I xn--snsa-roa
- 0x0037e491, // n0x183d c0x0000 (---------------) + I xn--sr-aurdal-l8a
- 0x0037e8cf, // n0x183e c0x0000 (---------------) + I xn--sr-fron-q1a
- 0x0037ec8f, // n0x183f c0x0000 (---------------) + I xn--sr-odal-q1a
- 0x0037f053, // n0x1840 c0x0000 (---------------) + I xn--sr-varanger-ggb
- 0x003801ce, // n0x1841 c0x0000 (---------------) + I xn--srfold-bya
- 0x0038074f, // n0x1842 c0x0000 (---------------) + I xn--srreisa-q1a
- 0x00380b0c, // n0x1843 c0x0000 (---------------) + I xn--srum-gra
- 0x42f80e4e, // n0x1844 c0x010b (n0x1884-n0x1885) o I xn--stfold-9xa
- 0x003811cf, // n0x1845 c0x0000 (---------------) + I xn--stjrdal-s1a
- 0x00381596, // n0x1846 c0x0000 (---------------) + I xn--stjrdalshalsen-sqb
- 0x00382652, // n0x1847 c0x0000 (---------------) + I xn--stre-toten-zcb
- 0x0038448c, // n0x1848 c0x0000 (---------------) + I xn--tjme-hra
- 0x003850cf, // n0x1849 c0x0000 (---------------) + I xn--tnsberg-q1a
- 0x0038574d, // n0x184a c0x0000 (---------------) + I xn--trany-yua
- 0x00385a8f, // n0x184b c0x0000 (---------------) + I xn--trgstad-r1a
- 0x00385e4c, // n0x184c c0x0000 (---------------) + I xn--trna-woa
- 0x0038614d, // n0x184d c0x0000 (---------------) + I xn--troms-zua
- 0x0038648d, // n0x184e c0x0000 (---------------) + I xn--tysvr-vra
- 0x003876ce, // n0x184f c0x0000 (---------------) + I xn--unjrga-rta
- 0x0038850c, // n0x1850 c0x0000 (---------------) + I xn--vads-jra
- 0x0038880c, // n0x1851 c0x0000 (---------------) + I xn--vard-jra
- 0x00388b10, // n0x1852 c0x0000 (---------------) + I xn--vegrshei-c0a
- 0x0038b251, // n0x1853 c0x0000 (---------------) + I xn--vestvgy-ixa6o
- 0x0038b68b, // n0x1854 c0x0000 (---------------) + I xn--vg-yiab
- 0x0038c50c, // n0x1855 c0x0000 (---------------) + I xn--vgan-qoa
- 0x0038c80e, // n0x1856 c0x0000 (---------------) + I xn--vgsy-qoa0j
- 0x0038e511, // n0x1857 c0x0000 (---------------) + I xn--vre-eiker-k8a
- 0x0038e94e, // n0x1858 c0x0000 (---------------) + I xn--vrggt-xqad
- 0x0038eccd, // n0x1859 c0x0000 (---------------) + I xn--vry-yla5g
- 0x00392fcb, // n0x185a c0x0000 (---------------) + I xn--yer-zna
- 0x00393c0f, // n0x185b c0x0000 (---------------) + I xn--ygarden-p1a
- 0x00394594, // n0x185c c0x0000 (---------------) + I xn--ystre-slidre-ujb
- 0x0026cd02, // n0x185d c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x185e c0x0000 (---------------) + I gs
- 0x00201083, // n0x185f c0x0000 (---------------) + I nes
- 0x0026cd02, // n0x1860 c0x0000 (---------------) + I gs
- 0x00201083, // n0x1861 c0x0000 (---------------) + I nes
- 0x0026cd02, // n0x1862 c0x0000 (---------------) + I gs
- 0x00202382, // n0x1863 c0x0000 (---------------) + I os
- 0x00351305, // n0x1864 c0x0000 (---------------) + I valer
- 0x0038e20c, // n0x1865 c0x0000 (---------------) + I xn--vler-qoa
- 0x0026cd02, // n0x1866 c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x1867 c0x0000 (---------------) + I gs
- 0x00202382, // n0x1868 c0x0000 (---------------) + I os
- 0x0026cd02, // n0x1869 c0x0000 (---------------) + I gs
- 0x00280105, // n0x186a c0x0000 (---------------) + I heroy
- 0x0029dd05, // n0x186b c0x0000 (---------------) + I sande
- 0x0026cd02, // n0x186c c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x186d c0x0000 (---------------) + I gs
- 0x0020a702, // n0x186e c0x0000 (---------------) + I bo
- 0x00280105, // n0x186f c0x0000 (---------------) + I heroy
- 0x002fa209, // n0x1870 c0x0000 (---------------) + I xn--b-5ga
- 0x0032be4c, // n0x1871 c0x0000 (---------------) + I xn--hery-ira
- 0x0026cd02, // n0x1872 c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x1873 c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x1874 c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x1875 c0x0000 (---------------) + I gs
- 0x00351305, // n0x1876 c0x0000 (---------------) + I valer
- 0x0026cd02, // n0x1877 c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x1878 c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x1879 c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x187a c0x0000 (---------------) + I gs
- 0x0020a702, // n0x187b c0x0000 (---------------) + I bo
- 0x002fa209, // n0x187c c0x0000 (---------------) + I xn--b-5ga
- 0x0026cd02, // n0x187d c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x187e c0x0000 (---------------) + I gs
- 0x0026cd02, // n0x187f c0x0000 (---------------) + I gs
- 0x0029dd05, // n0x1880 c0x0000 (---------------) + I sande
- 0x0026cd02, // n0x1881 c0x0000 (---------------) + I gs
- 0x0029dd05, // n0x1882 c0x0000 (---------------) + I sande
- 0x0032be4c, // n0x1883 c0x0000 (---------------) + I xn--hery-ira
- 0x0038e20c, // n0x1884 c0x0000 (---------------) + I xn--vler-qoa
- 0x00310603, // n0x1885 c0x0000 (---------------) + I biz
- 0x00222ac3, // n0x1886 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1887 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1888 c0x0000 (---------------) + I gov
- 0x00200304, // n0x1889 c0x0000 (---------------) + I info
- 0x002170c3, // n0x188a c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x188b c0x0000 (---------------) + I org
- 0x00166bc8, // n0x188c c0x0000 (---------------) + merseine
- 0x0007c1c4, // n0x188d c0x0000 (---------------) + mine
- 0x000cb2c8, // n0x188e c0x0000 (---------------) + shacknet
- 0x00201e82, // n0x188f c0x0000 (---------------) + I ac
- 0x43e00742, // n0x1890 c0x010f (n0x189f-n0x18a0) + I co
- 0x002319c3, // n0x1891 c0x0000 (---------------) + I cri
- 0x00252f84, // n0x1892 c0x0000 (---------------) + I geek
- 0x002012c3, // n0x1893 c0x0000 (---------------) + I gen
- 0x0021e284, // n0x1894 c0x0000 (---------------) + I govt
- 0x00205e06, // n0x1895 c0x0000 (---------------) + I health
- 0x002d2e03, // n0x1896 c0x0000 (---------------) + I iwi
- 0x002d2dc4, // n0x1897 c0x0000 (---------------) + I kiwi
- 0x002701c5, // n0x1898 c0x0000 (---------------) + I maori
- 0x0023fa03, // n0x1899 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x189a c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x189b c0x0000 (---------------) + I org
- 0x002647ca, // n0x189c c0x0000 (---------------) + I parliament
- 0x00235406, // n0x189d c0x0000 (---------------) + I school
- 0x0035918c, // n0x189e c0x0000 (---------------) + I xn--mori-qsa
- 0x000e4188, // n0x189f c0x0000 (---------------) + blogspot
- 0x00200742, // n0x18a0 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x18a1 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x18a2 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x18a3 c0x0000 (---------------) + I gov
- 0x0020b403, // n0x18a4 c0x0000 (---------------) + I med
- 0x002bd646, // n0x18a5 c0x0000 (---------------) + I museum
- 0x002170c3, // n0x18a6 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x18a7 c0x0000 (---------------) + I org
- 0x00218243, // n0x18a8 c0x0000 (---------------) + I pro
- 0x00004342, // n0x18a9 c0x0000 (---------------) + ae
- 0x000d0087, // n0x18aa c0x0000 (---------------) + blogdns
- 0x001619c8, // n0x18ab c0x0000 (---------------) + blogsite
- 0x00076592, // n0x18ac c0x0000 (---------------) + boldlygoingnowhere
- 0x44a2a085, // n0x18ad c0x0112 (n0x18e3-n0x18e5) o I cdn77
- 0x44f0720c, // n0x18ae c0x0113 (n0x18e5-n0x18e6) o I cdn77-secure
- 0x00146fc8, // n0x18af c0x0000 (---------------) + dnsalias
- 0x0006a247, // n0x18b0 c0x0000 (---------------) + dnsdojo
- 0x00010a4b, // n0x18b1 c0x0000 (---------------) + doesntexist
- 0x0015fdc9, // n0x18b2 c0x0000 (---------------) + dontexist
- 0x00146ec7, // n0x18b3 c0x0000 (---------------) + doomdns
- 0x0006a147, // n0x18b4 c0x0000 (---------------) + duckdns
- 0x00194fc6, // n0x18b5 c0x0000 (---------------) + dvrdns
- 0x000007c8, // n0x18b6 c0x0000 (---------------) + dynalias
- 0x45409ac6, // n0x18b7 c0x0115 (n0x18e7-n0x18e9) + dyndns
- 0x0009428d, // n0x18b8 c0x0000 (---------------) + endofinternet
- 0x000f3e50, // n0x18b9 c0x0000 (---------------) + endoftheinternet
- 0x4581d5c2, // n0x18ba c0x0116 (n0x18e9-n0x1920) + eu
- 0x00057807, // n0x18bb c0x0000 (---------------) + from-me
- 0x00083589, // n0x18bc c0x0000 (---------------) + game-host
- 0x00043a86, // n0x18bd c0x0000 (---------------) + gotdns
- 0x0002ea02, // n0x18be c0x0000 (---------------) + hk
- 0x0013eeca, // n0x18bf c0x0000 (---------------) + hobby-site
- 0x0000b387, // n0x18c0 c0x0000 (---------------) + homedns
- 0x00085007, // n0x18c1 c0x0000 (---------------) + homeftp
- 0x00090ec9, // n0x18c2 c0x0000 (---------------) + homelinux
- 0x00091b88, // n0x18c3 c0x0000 (---------------) + homeunix
- 0x000c528e, // n0x18c4 c0x0000 (---------------) + is-a-bruinsfan
- 0x00008d8e, // n0x18c5 c0x0000 (---------------) + is-a-candidate
- 0x0000eecf, // n0x18c6 c0x0000 (---------------) + is-a-celticsfan
- 0x00166909, // n0x18c7 c0x0000 (---------------) + is-a-chef
- 0x00052e49, // n0x18c8 c0x0000 (---------------) + is-a-geek
- 0x0006b8cb, // n0x18c9 c0x0000 (---------------) + is-a-knight
- 0x001259cf, // n0x18ca c0x0000 (---------------) + is-a-linux-user
- 0x0008480c, // n0x18cb c0x0000 (---------------) + is-a-patsfan
- 0x000d23cb, // n0x18cc c0x0000 (---------------) + is-a-soxfan
- 0x00103ac8, // n0x18cd c0x0000 (---------------) + is-found
- 0x000d6887, // n0x18ce c0x0000 (---------------) + is-lost
- 0x000e2908, // n0x18cf c0x0000 (---------------) + is-saved
- 0x0012148b, // n0x18d0 c0x0000 (---------------) + is-very-bad
- 0x00127b0c, // n0x18d1 c0x0000 (---------------) + is-very-evil
- 0x00130a4c, // n0x18d2 c0x0000 (---------------) + is-very-good
- 0x0013904c, // n0x18d3 c0x0000 (---------------) + is-very-nice
- 0x0013bb8d, // n0x18d4 c0x0000 (---------------) + is-very-sweet
- 0x00191648, // n0x18d5 c0x0000 (---------------) + isa-geek
- 0x00183609, // n0x18d6 c0x0000 (---------------) + kicks-ass
- 0x0016a6cb, // n0x18d7 c0x0000 (---------------) + misconfused
- 0x000c7e07, // n0x18d8 c0x0000 (---------------) + podzone
- 0x0016184a, // n0x18d9 c0x0000 (---------------) + readmyblog
- 0x00130f46, // n0x18da c0x0000 (---------------) + selfip
- 0x00084dcd, // n0x18db c0x0000 (---------------) + sellsyourhome
- 0x00079088, // n0x18dc c0x0000 (---------------) + servebbs
- 0x00161348, // n0x18dd c0x0000 (---------------) + serveftp
- 0x00011f49, // n0x18de c0x0000 (---------------) + servegame
- 0x000d044c, // n0x18df c0x0000 (---------------) + stuff-4-sale
- 0x00009f42, // n0x18e0 c0x0000 (---------------) + us
- 0x00110e86, // n0x18e1 c0x0000 (---------------) + webhop
- 0x000043c2, // n0x18e2 c0x0000 (---------------) + za
- 0x00000741, // n0x18e3 c0x0000 (---------------) + c
- 0x000060c3, // n0x18e4 c0x0000 (---------------) + rsc
- 0x45374606, // n0x18e5 c0x0114 (n0x18e6-n0x18e7) o I origin
- 0x0002a203, // n0x18e6 c0x0000 (---------------) + ssl
- 0x00002342, // n0x18e7 c0x0000 (---------------) + go
- 0x0000b384, // n0x18e8 c0x0000 (---------------) + home
- 0x00000882, // n0x18e9 c0x0000 (---------------) + al
- 0x000729c4, // n0x18ea c0x0000 (---------------) + asso
- 0x00001642, // n0x18eb c0x0000 (---------------) + at
- 0x00005ac2, // n0x18ec c0x0000 (---------------) + au
- 0x00004702, // n0x18ed c0x0000 (---------------) + be
- 0x00155e02, // n0x18ee c0x0000 (---------------) + bg
- 0x000055c2, // n0x18ef c0x0000 (---------------) + ca
- 0x0002a082, // n0x18f0 c0x0000 (---------------) + cd
- 0x00004a02, // n0x18f1 c0x0000 (---------------) + ch
- 0x000211c2, // n0x18f2 c0x0000 (---------------) + cn
- 0x00029e42, // n0x18f3 c0x0000 (---------------) + cy
- 0x00014442, // n0x18f4 c0x0000 (---------------) + cz
- 0x000006c2, // n0x18f5 c0x0000 (---------------) + de
- 0x00071742, // n0x18f6 c0x0000 (---------------) + dk
- 0x000d75c3, // n0x18f7 c0x0000 (---------------) + edu
- 0x00006042, // n0x18f8 c0x0000 (---------------) + ee
- 0x000010c2, // n0x18f9 c0x0000 (---------------) + es
- 0x000099c2, // n0x18fa c0x0000 (---------------) + fi
- 0x00000d42, // n0x18fb c0x0000 (---------------) + fr
- 0x0000dc82, // n0x18fc c0x0000 (---------------) + gr
- 0x00025842, // n0x18fd c0x0000 (---------------) + hr
- 0x00017d42, // n0x18fe c0x0000 (---------------) + hu
- 0x00000e82, // n0x18ff c0x0000 (---------------) + ie
- 0x000036c2, // n0x1900 c0x0000 (---------------) + il
- 0x00000242, // n0x1901 c0x0000 (---------------) + in
- 0x00038c03, // n0x1902 c0x0000 (---------------) + int
- 0x00002b42, // n0x1903 c0x0000 (---------------) + is
- 0x00006e82, // n0x1904 c0x0000 (---------------) + it
- 0x000990c2, // n0x1905 c0x0000 (---------------) + jp
- 0x000034c2, // n0x1906 c0x0000 (---------------) + kr
- 0x00005ec2, // n0x1907 c0x0000 (---------------) + lt
- 0x000071c2, // n0x1908 c0x0000 (---------------) + lu
- 0x00027f02, // n0x1909 c0x0000 (---------------) + lv
- 0x0003a6c2, // n0x190a c0x0000 (---------------) + mc
- 0x00008942, // n0x190b c0x0000 (---------------) + me
- 0x00156d82, // n0x190c c0x0000 (---------------) + mk
- 0x00059642, // n0x190d c0x0000 (---------------) + mt
- 0x00020282, // n0x190e c0x0000 (---------------) + my
- 0x000170c3, // n0x190f c0x0000 (---------------) + net
- 0x00001282, // n0x1910 c0x0000 (---------------) + ng
- 0x00036482, // n0x1911 c0x0000 (---------------) + nl
- 0x00000c02, // n0x1912 c0x0000 (---------------) + no
- 0x000078c2, // n0x1913 c0x0000 (---------------) + nz
- 0x0005b445, // n0x1914 c0x0000 (---------------) + paris
- 0x00001e02, // n0x1915 c0x0000 (---------------) + pl
- 0x00095982, // n0x1916 c0x0000 (---------------) + pt
- 0x00123e03, // n0x1917 c0x0000 (---------------) + q-a
- 0x00000d82, // n0x1918 c0x0000 (---------------) + ro
- 0x000044c2, // n0x1919 c0x0000 (---------------) + ru
- 0x00002e82, // n0x191a c0x0000 (---------------) + se
- 0x00009182, // n0x191b c0x0000 (---------------) + si
- 0x00007b42, // n0x191c c0x0000 (---------------) + sk
- 0x00002402, // n0x191d c0x0000 (---------------) + tr
- 0x0000cf02, // n0x191e c0x0000 (---------------) + uk
- 0x00009f42, // n0x191f c0x0000 (---------------) + us
- 0x0020c283, // n0x1920 c0x0000 (---------------) + I abo
- 0x00201e82, // n0x1921 c0x0000 (---------------) + I ac
- 0x00222ac3, // n0x1922 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1923 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x1924 c0x0000 (---------------) + I gob
- 0x0020dc03, // n0x1925 c0x0000 (---------------) + I ing
- 0x0020b403, // n0x1926 c0x0000 (---------------) + I med
- 0x002170c3, // n0x1927 c0x0000 (---------------) + I net
- 0x00207cc3, // n0x1928 c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x1929 c0x0000 (---------------) + I org
- 0x00280043, // n0x192a c0x0000 (---------------) + I sld
- 0x000e4188, // n0x192b c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x192c c0x0000 (---------------) + I com
- 0x002d75c3, // n0x192d c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x192e c0x0000 (---------------) + I gob
- 0x0023fa03, // n0x192f c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1930 c0x0000 (---------------) + I net
- 0x00207cc3, // n0x1931 c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x1932 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1933 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1934 c0x0000 (---------------) + I edu
- 0x0021dcc3, // n0x1935 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1936 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1937 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1938 c0x0000 (---------------) + I gov
- 0x00200041, // n0x1939 c0x0000 (---------------) + I i
- 0x0023fa03, // n0x193a c0x0000 (---------------) + I mil
- 0x002170c3, // n0x193b c0x0000 (---------------) + I net
- 0x00202303, // n0x193c c0x0000 (---------------) + I ngo
- 0x0021dcc3, // n0x193d c0x0000 (---------------) + I org
- 0x00310603, // n0x193e c0x0000 (---------------) + I biz
- 0x00222ac3, // n0x193f c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1940 c0x0000 (---------------) + I edu
- 0x002a1b43, // n0x1941 c0x0000 (---------------) + I fam
- 0x0034eb03, // n0x1942 c0x0000 (---------------) + I gob
- 0x00375943, // n0x1943 c0x0000 (---------------) + I gok
- 0x0026f583, // n0x1944 c0x0000 (---------------) + I gon
- 0x0028e783, // n0x1945 c0x0000 (---------------) + I gop
- 0x00202343, // n0x1946 c0x0000 (---------------) + I gos
- 0x0021e283, // n0x1947 c0x0000 (---------------) + I gov
- 0x00200304, // n0x1948 c0x0000 (---------------) + I info
- 0x002170c3, // n0x1949 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x194a c0x0000 (---------------) + I org
- 0x00219fc3, // n0x194b c0x0000 (---------------) + I web
- 0x002f8f84, // n0x194c c0x0000 (---------------) + I agro
- 0x002375c3, // n0x194d c0x0000 (---------------) + I aid
- 0x00000603, // n0x194e c0x0000 (---------------) + art
- 0x0026a983, // n0x194f c0x0000 (---------------) + I atm
- 0x0023e708, // n0x1950 c0x0000 (---------------) + I augustow
- 0x002eaac4, // n0x1951 c0x0000 (---------------) + I auto
- 0x0032d4ca, // n0x1952 c0x0000 (---------------) + I babia-gora
- 0x0034d4c6, // n0x1953 c0x0000 (---------------) + I bedzin
- 0x0035ad87, // n0x1954 c0x0000 (---------------) + I beskidy
- 0x0021604a, // n0x1955 c0x0000 (---------------) + I bialowieza
- 0x00228a89, // n0x1956 c0x0000 (---------------) + I bialystok
- 0x0037f4c7, // n0x1957 c0x0000 (---------------) + I bielawa
- 0x00382a8a, // n0x1958 c0x0000 (---------------) + I bieszczady
- 0x00310603, // n0x1959 c0x0000 (---------------) + I biz
- 0x0025374b, // n0x195a c0x0000 (---------------) + I boleslawiec
- 0x00343289, // n0x195b c0x0000 (---------------) + I bydgoszcz
- 0x002b9d45, // n0x195c c0x0000 (---------------) + I bytom
- 0x002bb407, // n0x195d c0x0000 (---------------) + I cieszyn
- 0x00000742, // n0x195e c0x0000 (---------------) + co
- 0x00222ac3, // n0x195f c0x0000 (---------------) + I com
- 0x002c8a87, // n0x1960 c0x0000 (---------------) + I czeladz
- 0x00214445, // n0x1961 c0x0000 (---------------) + I czest
- 0x002aae49, // n0x1962 c0x0000 (---------------) + I dlugoleka
- 0x002d75c3, // n0x1963 c0x0000 (---------------) + I edu
- 0x0021b206, // n0x1964 c0x0000 (---------------) + I elblag
- 0x002aa003, // n0x1965 c0x0000 (---------------) + I elk
- 0x000b7a43, // n0x1966 c0x0000 (---------------) + gda
- 0x000e1246, // n0x1967 c0x0000 (---------------) + gdansk
- 0x0016e4c6, // n0x1968 c0x0000 (---------------) + gdynia
- 0x0014ee47, // n0x1969 c0x0000 (---------------) + gliwice
- 0x00391046, // n0x196a c0x0000 (---------------) + I glogow
- 0x002047c5, // n0x196b c0x0000 (---------------) + I gmina
- 0x0031b347, // n0x196c c0x0000 (---------------) + I gniezno
- 0x002b1487, // n0x196d c0x0000 (---------------) + I gorlice
- 0x4761e283, // n0x196e c0x011d (n0x19f1-n0x1a20) + I gov
- 0x003147c7, // n0x196f c0x0000 (---------------) + I grajewo
- 0x0034b2c3, // n0x1970 c0x0000 (---------------) + I gsm
- 0x0036cb05, // n0x1971 c0x0000 (---------------) + I ilawa
- 0x00200304, // n0x1972 c0x0000 (---------------) + I info
- 0x0020a8c8, // n0x1973 c0x0000 (---------------) + I jaworzno
- 0x0020c80c, // n0x1974 c0x0000 (---------------) + I jelenia-gora
- 0x00297b45, // n0x1975 c0x0000 (---------------) + I jgora
- 0x002bed46, // n0x1976 c0x0000 (---------------) + I kalisz
- 0x002c8947, // n0x1977 c0x0000 (---------------) + I karpacz
- 0x002017c7, // n0x1978 c0x0000 (---------------) + I kartuzy
- 0x00216a07, // n0x1979 c0x0000 (---------------) + I kaszuby
- 0x00217888, // n0x197a c0x0000 (---------------) + I katowice
- 0x0036730f, // n0x197b c0x0000 (---------------) + I kazimierz-dolny
- 0x0023df05, // n0x197c c0x0000 (---------------) + I kepno
- 0x00231ac7, // n0x197d c0x0000 (---------------) + I ketrzyn
- 0x002a3547, // n0x197e c0x0000 (---------------) + I klodzko
- 0x0029058a, // n0x197f c0x0000 (---------------) + I kobierzyce
- 0x00295709, // n0x1980 c0x0000 (---------------) + I kolobrzeg
- 0x002bbf45, // n0x1981 c0x0000 (---------------) + I konin
- 0x002bdf8a, // n0x1982 c0x0000 (---------------) + I konskowola
- 0x0011bec6, // n0x1983 c0x0000 (---------------) + krakow
- 0x002aa085, // n0x1984 c0x0000 (---------------) + I kutno
- 0x002be184, // n0x1985 c0x0000 (---------------) + I lapy
- 0x002c8806, // n0x1986 c0x0000 (---------------) + I lebork
- 0x00322207, // n0x1987 c0x0000 (---------------) + I legnica
- 0x002bde07, // n0x1988 c0x0000 (---------------) + I lezajsk
- 0x0036d448, // n0x1989 c0x0000 (---------------) + I limanowa
- 0x002c6b85, // n0x198a c0x0000 (---------------) + I lomza
- 0x00214346, // n0x198b c0x0000 (---------------) + I lowicz
- 0x00218fc5, // n0x198c c0x0000 (---------------) + I lubin
- 0x0029b345, // n0x198d c0x0000 (---------------) + I lukow
- 0x00218f04, // n0x198e c0x0000 (---------------) + I mail
- 0x00321887, // n0x198f c0x0000 (---------------) + I malbork
- 0x0030ff4a, // n0x1990 c0x0000 (---------------) + I malopolska
- 0x0020b988, // n0x1991 c0x0000 (---------------) + I mazowsze
- 0x002d2a06, // n0x1992 c0x0000 (---------------) + I mazury
- 0x0000b403, // n0x1993 c0x0000 (---------------) + med
- 0x002dc385, // n0x1994 c0x0000 (---------------) + I media
- 0x00232386, // n0x1995 c0x0000 (---------------) + I miasta
- 0x00381e06, // n0x1996 c0x0000 (---------------) + I mielec
- 0x002f0806, // n0x1997 c0x0000 (---------------) + I mielno
- 0x0023fa03, // n0x1998 c0x0000 (---------------) + I mil
- 0x00371d47, // n0x1999 c0x0000 (---------------) + I mragowo
- 0x002a34c5, // n0x199a c0x0000 (---------------) + I naklo
- 0x002170c3, // n0x199b c0x0000 (---------------) + I net
- 0x0037f74d, // n0x199c c0x0000 (---------------) + I nieruchomosci
- 0x00207cc3, // n0x199d c0x0000 (---------------) + I nom
- 0x0036d548, // n0x199e c0x0000 (---------------) + I nowaruda
- 0x00210944, // n0x199f c0x0000 (---------------) + I nysa
- 0x00264105, // n0x19a0 c0x0000 (---------------) + I olawa
- 0x00290486, // n0x19a1 c0x0000 (---------------) + I olecko
- 0x002c1f06, // n0x19a2 c0x0000 (---------------) + I olkusz
- 0x0020f9c7, // n0x19a3 c0x0000 (---------------) + I olsztyn
- 0x00228dc7, // n0x19a4 c0x0000 (---------------) + I opoczno
- 0x00246a05, // n0x19a5 c0x0000 (---------------) + I opole
- 0x0021dcc3, // n0x19a6 c0x0000 (---------------) + I org
- 0x00202387, // n0x19a7 c0x0000 (---------------) + I ostroda
- 0x00203b09, // n0x19a8 c0x0000 (---------------) + I ostroleka
- 0x002053c9, // n0x19a9 c0x0000 (---------------) + I ostrowiec
- 0x0020818a, // n0x19aa c0x0000 (---------------) + I ostrowwlkp
- 0x00203e02, // n0x19ab c0x0000 (---------------) + I pc
- 0x0036cac4, // n0x19ac c0x0000 (---------------) + I pila
- 0x002c2d84, // n0x19ad c0x0000 (---------------) + I pisz
- 0x00210607, // n0x19ae c0x0000 (---------------) + I podhale
- 0x0023b508, // n0x19af c0x0000 (---------------) + I podlasie
- 0x002c8cc9, // n0x19b0 c0x0000 (---------------) + I polkowice
- 0x00207a09, // n0x19b1 c0x0000 (---------------) + I pomorskie
- 0x002c9507, // n0x19b2 c0x0000 (---------------) + I pomorze
- 0x0026a886, // n0x19b3 c0x0000 (---------------) + I powiat
- 0x000ca606, // n0x19b4 c0x0000 (---------------) + poznan
- 0x002cba44, // n0x19b5 c0x0000 (---------------) + I priv
- 0x002cbbca, // n0x19b6 c0x0000 (---------------) + I prochowice
- 0x002cd2c8, // n0x19b7 c0x0000 (---------------) + I pruszkow
- 0x002cdec9, // n0x19b8 c0x0000 (---------------) + I przeworsk
- 0x00281bc6, // n0x19b9 c0x0000 (---------------) + I pulawy
- 0x002e8285, // n0x19ba c0x0000 (---------------) + I radom
- 0x0020b848, // n0x19bb c0x0000 (---------------) + I rawa-maz
- 0x002b174a, // n0x19bc c0x0000 (---------------) + I realestate
- 0x00241283, // n0x19bd c0x0000 (---------------) + I rel
- 0x00226746, // n0x19be c0x0000 (---------------) + I rybnik
- 0x002c9607, // n0x19bf c0x0000 (---------------) + I rzeszow
- 0x0020b505, // n0x19c0 c0x0000 (---------------) + I sanok
- 0x00375a45, // n0x19c1 c0x0000 (---------------) + I sejny
- 0x0029acc3, // n0x19c2 c0x0000 (---------------) + I sex
- 0x0029b184, // n0x19c3 c0x0000 (---------------) + I shop
- 0x0021cd45, // n0x19c4 c0x0000 (---------------) + I sklep
- 0x00270687, // n0x19c5 c0x0000 (---------------) + I skoczow
- 0x00212585, // n0x19c6 c0x0000 (---------------) + I slask
- 0x002c1646, // n0x19c7 c0x0000 (---------------) + I slupsk
- 0x000ddd85, // n0x19c8 c0x0000 (---------------) + sopot
- 0x0021c283, // n0x19c9 c0x0000 (---------------) + I sos
- 0x0021c289, // n0x19ca c0x0000 (---------------) + I sosnowiec
- 0x00263ecc, // n0x19cb c0x0000 (---------------) + I stalowa-wola
- 0x0029720c, // n0x19cc c0x0000 (---------------) + I starachowice
- 0x002b8648, // n0x19cd c0x0000 (---------------) + I stargard
- 0x00325847, // n0x19ce c0x0000 (---------------) + I suwalki
- 0x002d4d08, // n0x19cf c0x0000 (---------------) + I swidnica
- 0x002d590a, // n0x19d0 c0x0000 (---------------) + I swiebodzin
- 0x002d608b, // n0x19d1 c0x0000 (---------------) + I swinoujscie
- 0x003433c8, // n0x19d2 c0x0000 (---------------) + I szczecin
- 0x002bee48, // n0x19d3 c0x0000 (---------------) + I szczytno
- 0x00207586, // n0x19d4 c0x0000 (---------------) + I szkola
- 0x0030a185, // n0x19d5 c0x0000 (---------------) + I targi
- 0x0030ebca, // n0x19d6 c0x0000 (---------------) + I tarnobrzeg
- 0x0021e345, // n0x19d7 c0x0000 (---------------) + I tgory
- 0x00208902, // n0x19d8 c0x0000 (---------------) + I tm
- 0x002ae287, // n0x19d9 c0x0000 (---------------) + I tourism
- 0x0027f186, // n0x19da c0x0000 (---------------) + I travel
- 0x0033de05, // n0x19db c0x0000 (---------------) + I turek
- 0x002d8689, // n0x19dc c0x0000 (---------------) + I turystyka
- 0x0036b4c5, // n0x19dd c0x0000 (---------------) + I tychy
- 0x0027af05, // n0x19de c0x0000 (---------------) + I ustka
- 0x0036c6c9, // n0x19df c0x0000 (---------------) + I walbrzych
- 0x00232206, // n0x19e0 c0x0000 (---------------) + I warmia
- 0x00250f08, // n0x19e1 c0x0000 (---------------) + I warszawa
- 0x002c7183, // n0x19e2 c0x0000 (---------------) + I waw
- 0x00391186, // n0x19e3 c0x0000 (---------------) + I wegrow
- 0x00263586, // n0x19e4 c0x0000 (---------------) + I wielun
- 0x002e2d45, // n0x19e5 c0x0000 (---------------) + I wlocl
- 0x002e2d49, // n0x19e6 c0x0000 (---------------) + I wloclawek
- 0x0030b189, // n0x19e7 c0x0000 (---------------) + I wodzislaw
- 0x002609c7, // n0x19e8 c0x0000 (---------------) + I wolomin
- 0x000e2bc4, // n0x19e9 c0x0000 (---------------) + wroc
- 0x002e2bc7, // n0x19ea c0x0000 (---------------) + I wroclaw
- 0x00207909, // n0x19eb c0x0000 (---------------) + I zachpomor
- 0x00216245, // n0x19ec c0x0000 (---------------) + I zagan
- 0x0002bf08, // n0x19ed c0x0000 (---------------) + zakopane
- 0x00310d85, // n0x19ee c0x0000 (---------------) + I zarow
- 0x00217185, // n0x19ef c0x0000 (---------------) + I zgora
- 0x0021e549, // n0x19f0 c0x0000 (---------------) + I zgorzelec
- 0x002105c2, // n0x19f1 c0x0000 (---------------) + I ap
- 0x00253e04, // n0x19f2 c0x0000 (---------------) + I griw
- 0x00200b42, // n0x19f3 c0x0000 (---------------) + I ic
- 0x00202b42, // n0x19f4 c0x0000 (---------------) + I is
- 0x00268d85, // n0x19f5 c0x0000 (---------------) + I kmpsp
- 0x002c1788, // n0x19f6 c0x0000 (---------------) + I konsulat
- 0x00379185, // n0x19f7 c0x0000 (---------------) + I kppsp
- 0x002ac643, // n0x19f8 c0x0000 (---------------) + I kwp
- 0x002ac645, // n0x19f9 c0x0000 (---------------) + I kwpsp
- 0x002bb7c3, // n0x19fa c0x0000 (---------------) + I mup
- 0x0020a142, // n0x19fb c0x0000 (---------------) + I mw
- 0x002d3fc4, // n0x19fc c0x0000 (---------------) + I oirm
- 0x002f3c43, // n0x19fd c0x0000 (---------------) + I oum
- 0x002052c2, // n0x19fe c0x0000 (---------------) + I pa
- 0x0036be84, // n0x19ff c0x0000 (---------------) + I pinb
- 0x002c3b43, // n0x1a00 c0x0000 (---------------) + I piw
- 0x00203f02, // n0x1a01 c0x0000 (---------------) + I po
- 0x002369c3, // n0x1a02 c0x0000 (---------------) + I psp
- 0x0027ac04, // n0x1a03 c0x0000 (---------------) + I psse
- 0x002a32c3, // n0x1a04 c0x0000 (---------------) + I pup
- 0x00370ac4, // n0x1a05 c0x0000 (---------------) + I rzgw
- 0x00201a02, // n0x1a06 c0x0000 (---------------) + I sa
- 0x0025ebc3, // n0x1a07 c0x0000 (---------------) + I sdn
- 0x002206c3, // n0x1a08 c0x0000 (---------------) + I sko
- 0x00201102, // n0x1a09 c0x0000 (---------------) + I so
- 0x002ceec2, // n0x1a0a c0x0000 (---------------) + I sr
- 0x0030afc9, // n0x1a0b c0x0000 (---------------) + I starostwo
- 0x00205082, // n0x1a0c c0x0000 (---------------) + I ug
- 0x0031c4c4, // n0x1a0d c0x0000 (---------------) + I ugim
- 0x00209802, // n0x1a0e c0x0000 (---------------) + I um
- 0x0020b6c4, // n0x1a0f c0x0000 (---------------) + I umig
- 0x0026a844, // n0x1a10 c0x0000 (---------------) + I upow
- 0x00243ec4, // n0x1a11 c0x0000 (---------------) + I uppo
- 0x00209f42, // n0x1a12 c0x0000 (---------------) + I us
- 0x0022f3c2, // n0x1a13 c0x0000 (---------------) + I uw
- 0x0020c583, // n0x1a14 c0x0000 (---------------) + I uzs
- 0x00345983, // n0x1a15 c0x0000 (---------------) + I wif
- 0x002310c4, // n0x1a16 c0x0000 (---------------) + I wiih
- 0x00270804, // n0x1a17 c0x0000 (---------------) + I winb
- 0x002b8984, // n0x1a18 c0x0000 (---------------) + I wios
- 0x002c9784, // n0x1a19 c0x0000 (---------------) + I witd
- 0x0030b383, // n0x1a1a c0x0000 (---------------) + I wiw
- 0x002725c3, // n0x1a1b c0x0000 (---------------) + I wsa
- 0x0031be44, // n0x1a1c c0x0000 (---------------) + I wskr
- 0x002e3d44, // n0x1a1d c0x0000 (---------------) + I wuoz
- 0x002e4546, // n0x1a1e c0x0000 (---------------) + I wzmiuw
- 0x002c2042, // n0x1a1f c0x0000 (---------------) + I zp
- 0x00200742, // n0x1a20 c0x0000 (---------------) + I co
- 0x002d75c3, // n0x1a21 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1a22 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1a23 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1a24 c0x0000 (---------------) + I org
- 0x00201e82, // n0x1a25 c0x0000 (---------------) + I ac
- 0x00310603, // n0x1a26 c0x0000 (---------------) + I biz
- 0x00222ac3, // n0x1a27 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1a28 c0x0000 (---------------) + I edu
- 0x00208883, // n0x1a29 c0x0000 (---------------) + I est
- 0x0021e283, // n0x1a2a c0x0000 (---------------) + I gov
- 0x00200304, // n0x1a2b c0x0000 (---------------) + I info
- 0x0030b284, // n0x1a2c c0x0000 (---------------) + I isla
- 0x00298944, // n0x1a2d c0x0000 (---------------) + I name
- 0x002170c3, // n0x1a2e c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1a2f c0x0000 (---------------) + I org
- 0x00218243, // n0x1a30 c0x0000 (---------------) + I pro
- 0x002cc284, // n0x1a31 c0x0000 (---------------) + I prof
- 0x002f2783, // n0x1a32 c0x0000 (---------------) + I aca
- 0x0020c103, // n0x1a33 c0x0000 (---------------) + I bar
- 0x0025b403, // n0x1a34 c0x0000 (---------------) + I cpa
- 0x002674c3, // n0x1a35 c0x0000 (---------------) + I eng
- 0x0029d803, // n0x1a36 c0x0000 (---------------) + I jur
- 0x00253883, // n0x1a37 c0x0000 (---------------) + I law
- 0x0020b403, // n0x1a38 c0x0000 (---------------) + I med
- 0x00222ac3, // n0x1a39 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1a3a c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1a3b c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1a3c c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1a3d c0x0000 (---------------) + I org
- 0x002c6b43, // n0x1a3e c0x0000 (---------------) + I plo
- 0x00223f83, // n0x1a3f c0x0000 (---------------) + I sec
- 0x000e4188, // n0x1a40 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1a41 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1a42 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1a43 c0x0000 (---------------) + I gov
- 0x00238c03, // n0x1a44 c0x0000 (---------------) + I int
- 0x002170c3, // n0x1a45 c0x0000 (---------------) + I net
- 0x0022cb84, // n0x1a46 c0x0000 (---------------) + I nome
- 0x0021dcc3, // n0x1a47 c0x0000 (---------------) + I org
- 0x00296544, // n0x1a48 c0x0000 (---------------) + I publ
- 0x00251645, // n0x1a49 c0x0000 (---------------) + I belau
- 0x00200742, // n0x1a4a c0x0000 (---------------) + I co
- 0x00203fc2, // n0x1a4b c0x0000 (---------------) + I ed
- 0x00202342, // n0x1a4c c0x0000 (---------------) + I go
- 0x00201082, // n0x1a4d c0x0000 (---------------) + I ne
- 0x00200c42, // n0x1a4e c0x0000 (---------------) + I or
- 0x00222ac3, // n0x1a4f c0x0000 (---------------) + I com
- 0x00228d44, // n0x1a50 c0x0000 (---------------) + I coop
- 0x002d75c3, // n0x1a51 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1a52 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1a53 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1a54 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1a55 c0x0000 (---------------) + I org
- 0x000e4188, // n0x1a56 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1a57 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1a58 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1a59 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1a5a c0x0000 (---------------) + I mil
- 0x00298944, // n0x1a5b c0x0000 (---------------) + I name
- 0x002170c3, // n0x1a5c c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1a5d c0x0000 (---------------) + I org
- 0x00206103, // n0x1a5e c0x0000 (---------------) + I sch
- 0x002729c4, // n0x1a5f c0x0000 (---------------) + I asso
- 0x000e4188, // n0x1a60 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1a61 c0x0000 (---------------) + I com
- 0x00207cc3, // n0x1a62 c0x0000 (---------------) + I nom
- 0x00246584, // n0x1a63 c0x0000 (---------------) + I arts
- 0x000e4188, // n0x1a64 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1a65 c0x0000 (---------------) + I com
- 0x00238544, // n0x1a66 c0x0000 (---------------) + I firm
- 0x00200304, // n0x1a67 c0x0000 (---------------) + I info
- 0x00207cc3, // n0x1a68 c0x0000 (---------------) + I nom
- 0x00200e02, // n0x1a69 c0x0000 (---------------) + I nt
- 0x0021dcc3, // n0x1a6a c0x0000 (---------------) + I org
- 0x002e6343, // n0x1a6b c0x0000 (---------------) + I rec
- 0x002cf4c5, // n0x1a6c c0x0000 (---------------) + I store
- 0x00208902, // n0x1a6d c0x0000 (---------------) + I tm
- 0x002e3e83, // n0x1a6e c0x0000 (---------------) + I www
- 0x00201e82, // n0x1a6f c0x0000 (---------------) + I ac
- 0x000e4188, // n0x1a70 c0x0000 (---------------) + blogspot
- 0x00200742, // n0x1a71 c0x0000 (---------------) + I co
- 0x002d75c3, // n0x1a72 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1a73 c0x0000 (---------------) + I gov
- 0x00200242, // n0x1a74 c0x0000 (---------------) + I in
- 0x0021dcc3, // n0x1a75 c0x0000 (---------------) + I org
- 0x00201e82, // n0x1a76 c0x0000 (---------------) + I ac
- 0x00382c47, // n0x1a77 c0x0000 (---------------) + I adygeya
- 0x0028ee05, // n0x1a78 c0x0000 (---------------) + I altai
- 0x00248504, // n0x1a79 c0x0000 (---------------) + I amur
- 0x0036ab06, // n0x1a7a c0x0000 (---------------) + I amursk
- 0x002f314b, // n0x1a7b c0x0000 (---------------) + I arkhangelsk
- 0x002e9b49, // n0x1a7c c0x0000 (---------------) + I astrakhan
- 0x002bec86, // n0x1a7d c0x0000 (---------------) + I baikal
- 0x00309449, // n0x1a7e c0x0000 (---------------) + I bashkiria
- 0x002c1a08, // n0x1a7f c0x0000 (---------------) + I belgorod
- 0x00200503, // n0x1a80 c0x0000 (---------------) + I bir
- 0x000e4188, // n0x1a81 c0x0000 (---------------) + blogspot
- 0x0021cc07, // n0x1a82 c0x0000 (---------------) + I bryansk
- 0x0021bc88, // n0x1a83 c0x0000 (---------------) + I buryatia
- 0x00355dc3, // n0x1a84 c0x0000 (---------------) + I cbg
- 0x002503c4, // n0x1a85 c0x0000 (---------------) + I chel
- 0x002539cb, // n0x1a86 c0x0000 (---------------) + I chelyabinsk
- 0x002932c5, // n0x1a87 c0x0000 (---------------) + I chita
- 0x002ab708, // n0x1a88 c0x0000 (---------------) + I chukotka
- 0x00313689, // n0x1a89 c0x0000 (---------------) + I chuvashia
- 0x00249083, // n0x1a8a c0x0000 (---------------) + I cmw
- 0x00222ac3, // n0x1a8b c0x0000 (---------------) + I com
- 0x00309888, // n0x1a8c c0x0000 (---------------) + I dagestan
- 0x002d3887, // n0x1a8d c0x0000 (---------------) + I dudinka
- 0x00311a46, // n0x1a8e c0x0000 (---------------) + I e-burg
- 0x002d75c3, // n0x1a8f c0x0000 (---------------) + I edu
- 0x0032aa47, // n0x1a90 c0x0000 (---------------) + I fareast
- 0x0021e283, // n0x1a91 c0x0000 (---------------) + I gov
- 0x003789c6, // n0x1a92 c0x0000 (---------------) + I grozny
- 0x00238c03, // n0x1a93 c0x0000 (---------------) + I int
- 0x00220587, // n0x1a94 c0x0000 (---------------) + I irkutsk
- 0x002f2a47, // n0x1a95 c0x0000 (---------------) + I ivanovo
- 0x00379007, // n0x1a96 c0x0000 (---------------) + I izhevsk
- 0x00321805, // n0x1a97 c0x0000 (---------------) + I jamal
- 0x00202683, // n0x1a98 c0x0000 (---------------) + I jar
- 0x002a248b, // n0x1a99 c0x0000 (---------------) + I joshkar-ola
- 0x00312348, // n0x1a9a c0x0000 (---------------) + I k-uralsk
- 0x002201c8, // n0x1a9b c0x0000 (---------------) + I kalmykia
- 0x00305446, // n0x1a9c c0x0000 (---------------) + I kaluga
- 0x0023a649, // n0x1a9d c0x0000 (---------------) + I kamchatka
- 0x00365ac7, // n0x1a9e c0x0000 (---------------) + I karelia
- 0x002dec85, // n0x1a9f c0x0000 (---------------) + I kazan
- 0x0022d2c4, // n0x1aa0 c0x0000 (---------------) + I kchr
- 0x00271548, // n0x1aa1 c0x0000 (---------------) + I kemerovo
- 0x00235f8a, // n0x1aa2 c0x0000 (---------------) + I khabarovsk
- 0x002361c9, // n0x1aa3 c0x0000 (---------------) + I khakassia
- 0x0025be03, // n0x1aa4 c0x0000 (---------------) + I khv
- 0x00254bc5, // n0x1aa5 c0x0000 (---------------) + I kirov
- 0x00325683, // n0x1aa6 c0x0000 (---------------) + I kms
- 0x002b9586, // n0x1aa7 c0x0000 (---------------) + I koenig
- 0x003935c4, // n0x1aa8 c0x0000 (---------------) + I komi
- 0x002e2f48, // n0x1aa9 c0x0000 (---------------) + I kostroma
- 0x0039334b, // n0x1aaa c0x0000 (---------------) + I krasnoyarsk
- 0x00331845, // n0x1aab c0x0000 (---------------) + I kuban
- 0x002a4ac6, // n0x1aac c0x0000 (---------------) + I kurgan
- 0x002a8e85, // n0x1aad c0x0000 (---------------) + I kursk
- 0x002a9608, // n0x1aae c0x0000 (---------------) + I kustanai
- 0x002aa1c7, // n0x1aaf c0x0000 (---------------) + I kuzbass
- 0x003414c7, // n0x1ab0 c0x0000 (---------------) + I lipetsk
- 0x0032ddc7, // n0x1ab1 c0x0000 (---------------) + I magadan
- 0x00271948, // n0x1ab2 c0x0000 (---------------) + I magnitka
- 0x00216504, // n0x1ab3 c0x0000 (---------------) + I mari
- 0x00216507, // n0x1ab4 c0x0000 (---------------) + I mari-el
- 0x003529c6, // n0x1ab5 c0x0000 (---------------) + I marine
- 0x0023fa03, // n0x1ab6 c0x0000 (---------------) + I mil
- 0x002b4208, // n0x1ab7 c0x0000 (---------------) + I mordovia
- 0x00233f43, // n0x1ab8 c0x0000 (---------------) + I msk
- 0x002bbd88, // n0x1ab9 c0x0000 (---------------) + I murmansk
- 0x002bf205, // n0x1aba c0x0000 (---------------) + I mytis
- 0x00332688, // n0x1abb c0x0000 (---------------) + I nakhodka
- 0x00375747, // n0x1abc c0x0000 (---------------) + I nalchik
- 0x002170c3, // n0x1abd c0x0000 (---------------) + I net
- 0x002effc3, // n0x1abe c0x0000 (---------------) + I nkz
- 0x00278ec4, // n0x1abf c0x0000 (---------------) + I nnov
- 0x00228f07, // n0x1ac0 c0x0000 (---------------) + I norilsk
- 0x00201343, // n0x1ac1 c0x0000 (---------------) + I nov
- 0x002f2b0b, // n0x1ac2 c0x0000 (---------------) + I novosibirsk
- 0x00217803, // n0x1ac3 c0x0000 (---------------) + I nsk
- 0x00233f04, // n0x1ac4 c0x0000 (---------------) + I omsk
- 0x002cf548, // n0x1ac5 c0x0000 (---------------) + I orenburg
- 0x0021dcc3, // n0x1ac6 c0x0000 (---------------) + I org
- 0x002c98c5, // n0x1ac7 c0x0000 (---------------) + I oryol
- 0x002e3305, // n0x1ac8 c0x0000 (---------------) + I oskol
- 0x00332586, // n0x1ac9 c0x0000 (---------------) + I palana
- 0x00395385, // n0x1aca c0x0000 (---------------) + I penza
- 0x002bf5c4, // n0x1acb c0x0000 (---------------) + I perm
- 0x00207742, // n0x1acc c0x0000 (---------------) + I pp
- 0x002ce183, // n0x1acd c0x0000 (---------------) + I ptz
- 0x002be20a, // n0x1ace c0x0000 (---------------) + I pyatigorsk
- 0x002ef043, // n0x1acf c0x0000 (---------------) + I rnd
- 0x0030c189, // n0x1ad0 c0x0000 (---------------) + I rubtsovsk
- 0x003227c6, // n0x1ad1 c0x0000 (---------------) + I ryazan
- 0x00217648, // n0x1ad2 c0x0000 (---------------) + I sakhalin
- 0x0027a746, // n0x1ad3 c0x0000 (---------------) + I samara
- 0x00218487, // n0x1ad4 c0x0000 (---------------) + I saratov
- 0x002b7c08, // n0x1ad5 c0x0000 (---------------) + I simbirsk
- 0x002ae3c8, // n0x1ad6 c0x0000 (---------------) + I smolensk
- 0x002c5603, // n0x1ad7 c0x0000 (---------------) + I snz
- 0x00268e43, // n0x1ad8 c0x0000 (---------------) + I spb
- 0x002187c9, // n0x1ad9 c0x0000 (---------------) + I stavropol
- 0x002daf83, // n0x1ada c0x0000 (---------------) + I stv
- 0x002d0c06, // n0x1adb c0x0000 (---------------) + I surgut
- 0x0028ea86, // n0x1adc c0x0000 (---------------) + I syzran
- 0x002fe106, // n0x1add c0x0000 (---------------) + I tambov
- 0x0031df09, // n0x1ade c0x0000 (---------------) + I tatarstan
- 0x002e3fc4, // n0x1adf c0x0000 (---------------) + I test
- 0x0020fe03, // n0x1ae0 c0x0000 (---------------) + I tom
- 0x00233ec5, // n0x1ae1 c0x0000 (---------------) + I tomsk
- 0x0038c2c9, // n0x1ae2 c0x0000 (---------------) + I tsaritsyn
- 0x00220683, // n0x1ae3 c0x0000 (---------------) + I tsk
- 0x002d78c4, // n0x1ae4 c0x0000 (---------------) + I tula
- 0x002d9504, // n0x1ae5 c0x0000 (---------------) + I tuva
- 0x00248304, // n0x1ae6 c0x0000 (---------------) + I tver
- 0x002a7d06, // n0x1ae7 c0x0000 (---------------) + I tyumen
- 0x00309dc3, // n0x1ae8 c0x0000 (---------------) + I udm
- 0x00309dc8, // n0x1ae9 c0x0000 (---------------) + I udmurtia
- 0x00245a08, // n0x1aea c0x0000 (---------------) + I ulan-ude
- 0x002fe246, // n0x1aeb c0x0000 (---------------) + I vdonsk
- 0x002dea8b, // n0x1aec c0x0000 (---------------) + I vladikavkaz
- 0x002dedc8, // n0x1aed c0x0000 (---------------) + I vladimir
- 0x002defcb, // n0x1aee c0x0000 (---------------) + I vladivostok
- 0x002df749, // n0x1aef c0x0000 (---------------) + I volgograd
- 0x002e1147, // n0x1af0 c0x0000 (---------------) + I vologda
- 0x002e1e48, // n0x1af1 c0x0000 (---------------) + I voronezh
- 0x002e2b03, // n0x1af2 c0x0000 (---------------) + I vrn
- 0x0037fec6, // n0x1af3 c0x0000 (---------------) + I vyatka
- 0x0020d4c7, // n0x1af4 c0x0000 (---------------) + I yakutia
- 0x00284405, // n0x1af5 c0x0000 (---------------) + I yamal
- 0x00332d09, // n0x1af6 c0x0000 (---------------) + I yaroslavl
- 0x0036e1cd, // n0x1af7 c0x0000 (---------------) + I yekaterinburg
- 0x00217491, // n0x1af8 c0x0000 (---------------) + I yuzhno-sakhalinsk
- 0x0029adc5, // n0x1af9 c0x0000 (---------------) + I zgrad
- 0x00201e82, // n0x1afa c0x0000 (---------------) + I ac
- 0x00200742, // n0x1afb c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1afc c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1afd c0x0000 (---------------) + I edu
- 0x003579c4, // n0x1afe c0x0000 (---------------) + I gouv
- 0x0021e283, // n0x1aff c0x0000 (---------------) + I gov
- 0x00238c03, // n0x1b00 c0x0000 (---------------) + I int
- 0x0023fa03, // n0x1b01 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1b02 c0x0000 (---------------) + I net
- 0x00222ac3, // n0x1b03 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b04 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1b05 c0x0000 (---------------) + I gov
- 0x0020b403, // n0x1b06 c0x0000 (---------------) + I med
- 0x002170c3, // n0x1b07 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b08 c0x0000 (---------------) + I org
- 0x00296543, // n0x1b09 c0x0000 (---------------) + I pub
- 0x00206103, // n0x1b0a c0x0000 (---------------) + I sch
- 0x00222ac3, // n0x1b0b c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b0c c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1b0d c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1b0e c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b0f c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1b10 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b11 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1b12 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1b13 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b14 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1b15 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b16 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1b17 c0x0000 (---------------) + I gov
- 0x00200304, // n0x1b18 c0x0000 (---------------) + I info
- 0x0020b403, // n0x1b19 c0x0000 (---------------) + I med
- 0x002170c3, // n0x1b1a c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b1b c0x0000 (---------------) + I org
- 0x0020bf42, // n0x1b1c c0x0000 (---------------) + I tv
- 0x00200181, // n0x1b1d c0x0000 (---------------) + I a
- 0x00201e82, // n0x1b1e c0x0000 (---------------) + I ac
- 0x00200001, // n0x1b1f c0x0000 (---------------) + I b
- 0x002fbc02, // n0x1b20 c0x0000 (---------------) + I bd
- 0x000e4188, // n0x1b21 c0x0000 (---------------) + blogspot
- 0x00213b05, // n0x1b22 c0x0000 (---------------) + I brand
- 0x00200741, // n0x1b23 c0x0000 (---------------) + I c
- 0x00022ac3, // n0x1b24 c0x0000 (---------------) + com
- 0x002005c1, // n0x1b25 c0x0000 (---------------) + I d
- 0x00200701, // n0x1b26 c0x0000 (---------------) + I e
- 0x00200381, // n0x1b27 c0x0000 (---------------) + I f
- 0x00235ec2, // n0x1b28 c0x0000 (---------------) + I fh
- 0x00235ec4, // n0x1b29 c0x0000 (---------------) + I fhsk
- 0x00351283, // n0x1b2a c0x0000 (---------------) + I fhv
- 0x00200401, // n0x1b2b c0x0000 (---------------) + I g
- 0x00200201, // n0x1b2c c0x0000 (---------------) + I h
- 0x00200041, // n0x1b2d c0x0000 (---------------) + I i
- 0x00201001, // n0x1b2e c0x0000 (---------------) + I k
- 0x002c8587, // n0x1b2f c0x0000 (---------------) + I komforb
- 0x002a8f8f, // n0x1b30 c0x0000 (---------------) + I kommunalforbund
- 0x002b1a86, // n0x1b31 c0x0000 (---------------) + I komvux
- 0x002008c1, // n0x1b32 c0x0000 (---------------) + I l
- 0x00323b46, // n0x1b33 c0x0000 (---------------) + I lanbib
- 0x002000c1, // n0x1b34 c0x0000 (---------------) + I m
- 0x00200281, // n0x1b35 c0x0000 (---------------) + I n
- 0x002f460e, // n0x1b36 c0x0000 (---------------) + I naturbruksgymn
- 0x00200081, // n0x1b37 c0x0000 (---------------) + I o
- 0x0021dcc3, // n0x1b38 c0x0000 (---------------) + I org
- 0x00200b01, // n0x1b39 c0x0000 (---------------) + I p
- 0x00290b05, // n0x1b3a c0x0000 (---------------) + I parti
- 0x00207742, // n0x1b3b c0x0000 (---------------) + I pp
- 0x0029abc5, // n0x1b3c c0x0000 (---------------) + I press
- 0x00200581, // n0x1b3d c0x0000 (---------------) + I r
- 0x002001c1, // n0x1b3e c0x0000 (---------------) + I s
- 0x00200141, // n0x1b3f c0x0000 (---------------) + I t
- 0x00208902, // n0x1b40 c0x0000 (---------------) + I tm
- 0x00200101, // n0x1b41 c0x0000 (---------------) + I u
- 0x00202541, // n0x1b42 c0x0000 (---------------) + I w
- 0x00203ec1, // n0x1b43 c0x0000 (---------------) + I x
- 0x00200801, // n0x1b44 c0x0000 (---------------) + I y
- 0x00201901, // n0x1b45 c0x0000 (---------------) + I z
- 0x000e4188, // n0x1b46 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1b47 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b48 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1b49 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1b4a c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b4b c0x0000 (---------------) + I org
- 0x00214943, // n0x1b4c c0x0000 (---------------) + I per
- 0x00222ac3, // n0x1b4d c0x0000 (---------------) + I com
- 0x0021e283, // n0x1b4e c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1b4f c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1b50 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b51 c0x0000 (---------------) + I org
- 0x014c56c8, // n0x1b52 c0x0005 (---------------)* o platform
- 0x000e4188, // n0x1b53 c0x0000 (---------------) + blogspot
- 0x000e4188, // n0x1b54 c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1b55 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b56 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1b57 c0x0000 (---------------) + I gov
- 0x002170c3, // n0x1b58 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b59 c0x0000 (---------------) + I org
- 0x00200603, // n0x1b5a c0x0000 (---------------) + I art
- 0x000e4188, // n0x1b5b c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1b5c c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b5d c0x0000 (---------------) + I edu
- 0x003579c4, // n0x1b5e c0x0000 (---------------) + I gouv
- 0x0021dcc3, // n0x1b5f c0x0000 (---------------) + I org
- 0x0028acc5, // n0x1b60 c0x0000 (---------------) + I perso
- 0x0029f044, // n0x1b61 c0x0000 (---------------) + I univ
- 0x00222ac3, // n0x1b62 c0x0000 (---------------) + I com
- 0x002170c3, // n0x1b63 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b64 c0x0000 (---------------) + I org
- 0x00200742, // n0x1b65 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1b66 c0x0000 (---------------) + I com
- 0x00224f09, // n0x1b67 c0x0000 (---------------) + I consulado
- 0x002d75c3, // n0x1b68 c0x0000 (---------------) + I edu
- 0x00271109, // n0x1b69 c0x0000 (---------------) + I embaixada
- 0x0021e283, // n0x1b6a c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1b6b c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1b6c c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b6d c0x0000 (---------------) + I org
- 0x002cb848, // n0x1b6e c0x0000 (---------------) + I principe
- 0x0020fd47, // n0x1b6f c0x0000 (---------------) + I saotome
- 0x002cf4c5, // n0x1b70 c0x0000 (---------------) + I store
- 0x00382c47, // n0x1b71 c0x0000 (---------------) + I adygeya
- 0x002f314b, // n0x1b72 c0x0000 (---------------) + I arkhangelsk
- 0x00389cc8, // n0x1b73 c0x0000 (---------------) + I balashov
- 0x00309449, // n0x1b74 c0x0000 (---------------) + I bashkiria
- 0x0021cc07, // n0x1b75 c0x0000 (---------------) + I bryansk
- 0x00309888, // n0x1b76 c0x0000 (---------------) + I dagestan
- 0x003789c6, // n0x1b77 c0x0000 (---------------) + I grozny
- 0x002f2a47, // n0x1b78 c0x0000 (---------------) + I ivanovo
- 0x002201c8, // n0x1b79 c0x0000 (---------------) + I kalmykia
- 0x00305446, // n0x1b7a c0x0000 (---------------) + I kaluga
- 0x00365ac7, // n0x1b7b c0x0000 (---------------) + I karelia
- 0x002361c9, // n0x1b7c c0x0000 (---------------) + I khakassia
- 0x00384e89, // n0x1b7d c0x0000 (---------------) + I krasnodar
- 0x002a4ac6, // n0x1b7e c0x0000 (---------------) + I kurgan
- 0x00275dc5, // n0x1b7f c0x0000 (---------------) + I lenug
- 0x002b4208, // n0x1b80 c0x0000 (---------------) + I mordovia
- 0x00233f43, // n0x1b81 c0x0000 (---------------) + I msk
- 0x002bbd88, // n0x1b82 c0x0000 (---------------) + I murmansk
- 0x00375747, // n0x1b83 c0x0000 (---------------) + I nalchik
- 0x00201343, // n0x1b84 c0x0000 (---------------) + I nov
- 0x0032a707, // n0x1b85 c0x0000 (---------------) + I obninsk
- 0x00395385, // n0x1b86 c0x0000 (---------------) + I penza
- 0x002c8208, // n0x1b87 c0x0000 (---------------) + I pokrovsk
- 0x00262b45, // n0x1b88 c0x0000 (---------------) + I sochi
- 0x00268e43, // n0x1b89 c0x0000 (---------------) + I spb
- 0x003547c9, // n0x1b8a c0x0000 (---------------) + I togliatti
- 0x00295587, // n0x1b8b c0x0000 (---------------) + I troitsk
- 0x002d78c4, // n0x1b8c c0x0000 (---------------) + I tula
- 0x002d9504, // n0x1b8d c0x0000 (---------------) + I tuva
- 0x002dea8b, // n0x1b8e c0x0000 (---------------) + I vladikavkaz
- 0x002dedc8, // n0x1b8f c0x0000 (---------------) + I vladimir
- 0x002e1147, // n0x1b90 c0x0000 (---------------) + I vologda
- 0x00222ac3, // n0x1b91 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b92 c0x0000 (---------------) + I edu
- 0x0034eb03, // n0x1b93 c0x0000 (---------------) + I gob
- 0x0021dcc3, // n0x1b94 c0x0000 (---------------) + I org
- 0x00230683, // n0x1b95 c0x0000 (---------------) + I red
- 0x0021e283, // n0x1b96 c0x0000 (---------------) + I gov
- 0x00222ac3, // n0x1b97 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1b98 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1b99 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1b9a c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1b9b c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1b9c c0x0000 (---------------) + I org
- 0x00201e82, // n0x1b9d c0x0000 (---------------) + I ac
- 0x00200742, // n0x1b9e c0x0000 (---------------) + I co
- 0x0021dcc3, // n0x1b9f c0x0000 (---------------) + I org
- 0x000e4188, // n0x1ba0 c0x0000 (---------------) + blogspot
- 0x00201e82, // n0x1ba1 c0x0000 (---------------) + I ac
- 0x00200742, // n0x1ba2 c0x0000 (---------------) + I co
- 0x00202342, // n0x1ba3 c0x0000 (---------------) + I go
- 0x00200242, // n0x1ba4 c0x0000 (---------------) + I in
- 0x00204802, // n0x1ba5 c0x0000 (---------------) + I mi
- 0x002170c3, // n0x1ba6 c0x0000 (---------------) + I net
- 0x00200c42, // n0x1ba7 c0x0000 (---------------) + I or
- 0x00201e82, // n0x1ba8 c0x0000 (---------------) + I ac
- 0x00310603, // n0x1ba9 c0x0000 (---------------) + I biz
- 0x00200742, // n0x1baa c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1bab c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1bac c0x0000 (---------------) + I edu
- 0x00202342, // n0x1bad c0x0000 (---------------) + I go
- 0x0021e283, // n0x1bae c0x0000 (---------------) + I gov
- 0x00238c03, // n0x1baf c0x0000 (---------------) + I int
- 0x0023fa03, // n0x1bb0 c0x0000 (---------------) + I mil
- 0x00298944, // n0x1bb1 c0x0000 (---------------) + I name
- 0x002170c3, // n0x1bb2 c0x0000 (---------------) + I net
- 0x0020e3c3, // n0x1bb3 c0x0000 (---------------) + I nic
- 0x0021dcc3, // n0x1bb4 c0x0000 (---------------) + I org
- 0x002e3fc4, // n0x1bb5 c0x0000 (---------------) + I test
- 0x00219fc3, // n0x1bb6 c0x0000 (---------------) + I web
- 0x0021e283, // n0x1bb7 c0x0000 (---------------) + I gov
- 0x00200742, // n0x1bb8 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1bb9 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1bba c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1bbb c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1bbc c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1bbd c0x0000 (---------------) + I net
- 0x00207cc3, // n0x1bbe c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x1bbf c0x0000 (---------------) + I org
- 0x002efd87, // n0x1bc0 c0x0000 (---------------) + I agrinet
- 0x00222ac3, // n0x1bc1 c0x0000 (---------------) + I com
- 0x00245b87, // n0x1bc2 c0x0000 (---------------) + I defense
- 0x002d75c6, // n0x1bc3 c0x0000 (---------------) + I edunet
- 0x00210e83, // n0x1bc4 c0x0000 (---------------) + I ens
- 0x00236403, // n0x1bc5 c0x0000 (---------------) + I fin
- 0x0021e283, // n0x1bc6 c0x0000 (---------------) + I gov
- 0x00215703, // n0x1bc7 c0x0000 (---------------) + I ind
- 0x00200304, // n0x1bc8 c0x0000 (---------------) + I info
- 0x002c5104, // n0x1bc9 c0x0000 (---------------) + I intl
- 0x002d4086, // n0x1bca c0x0000 (---------------) + I mincom
- 0x0023ac03, // n0x1bcb c0x0000 (---------------) + I nat
- 0x002170c3, // n0x1bcc c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1bcd c0x0000 (---------------) + I org
- 0x0028acc5, // n0x1bce c0x0000 (---------------) + I perso
- 0x003538c4, // n0x1bcf c0x0000 (---------------) + I rnrt
- 0x002e6c03, // n0x1bd0 c0x0000 (---------------) + I rns
- 0x00205b83, // n0x1bd1 c0x0000 (---------------) + I rnu
- 0x002ae287, // n0x1bd2 c0x0000 (---------------) + I tourism
- 0x0033c485, // n0x1bd3 c0x0000 (---------------) + I turen
- 0x00222ac3, // n0x1bd4 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1bd5 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1bd6 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1bd7 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1bd8 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1bd9 c0x0000 (---------------) + I org
- 0x00201482, // n0x1bda c0x0000 (---------------) + I av
- 0x002791c3, // n0x1bdb c0x0000 (---------------) + I bbs
- 0x00251643, // n0x1bdc c0x0000 (---------------) + I bel
- 0x00310603, // n0x1bdd c0x0000 (---------------) + I biz
- 0x51622ac3, // n0x1bde c0x0145 (n0x1bef-n0x1bf0) + I com
- 0x0022fb02, // n0x1bdf c0x0000 (---------------) + I dr
- 0x002d75c3, // n0x1be0 c0x0000 (---------------) + I edu
- 0x002012c3, // n0x1be1 c0x0000 (---------------) + I gen
- 0x0021e283, // n0x1be2 c0x0000 (---------------) + I gov
- 0x00200304, // n0x1be3 c0x0000 (---------------) + I info
- 0x00312503, // n0x1be4 c0x0000 (---------------) + I k12
- 0x0023df03, // n0x1be5 c0x0000 (---------------) + I kep
- 0x0023fa03, // n0x1be6 c0x0000 (---------------) + I mil
- 0x00298944, // n0x1be7 c0x0000 (---------------) + I name
- 0x51a1c742, // n0x1be8 c0x0146 (n0x1bf0-n0x1bf1) + I nc
- 0x002170c3, // n0x1be9 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1bea c0x0000 (---------------) + I org
- 0x00218943, // n0x1beb c0x0000 (---------------) + I pol
- 0x0022ba83, // n0x1bec c0x0000 (---------------) + I tel
- 0x0020bf42, // n0x1bed c0x0000 (---------------) + I tv
- 0x00219fc3, // n0x1bee c0x0000 (---------------) + I web
- 0x000e4188, // n0x1bef c0x0000 (---------------) + blogspot
- 0x0021e283, // n0x1bf0 c0x0000 (---------------) + I gov
- 0x002751c4, // n0x1bf1 c0x0000 (---------------) + I aero
- 0x00310603, // n0x1bf2 c0x0000 (---------------) + I biz
- 0x00200742, // n0x1bf3 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1bf4 c0x0000 (---------------) + I com
- 0x00228d44, // n0x1bf5 c0x0000 (---------------) + I coop
- 0x002d75c3, // n0x1bf6 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1bf7 c0x0000 (---------------) + I gov
- 0x00200304, // n0x1bf8 c0x0000 (---------------) + I info
- 0x00238c03, // n0x1bf9 c0x0000 (---------------) + I int
- 0x002a5d04, // n0x1bfa c0x0000 (---------------) + I jobs
- 0x00203604, // n0x1bfb c0x0000 (---------------) + I mobi
- 0x002bd646, // n0x1bfc c0x0000 (---------------) + I museum
- 0x00298944, // n0x1bfd c0x0000 (---------------) + I name
- 0x002170c3, // n0x1bfe c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1bff c0x0000 (---------------) + I org
- 0x00218243, // n0x1c00 c0x0000 (---------------) + I pro
- 0x0027f186, // n0x1c01 c0x0000 (---------------) + I travel
- 0x00041e4b, // n0x1c02 c0x0000 (---------------) + better-than
- 0x00009ac6, // n0x1c03 c0x0000 (---------------) + dyndns
- 0x00019e0a, // n0x1c04 c0x0000 (---------------) + on-the-web
- 0x00171e8a, // n0x1c05 c0x0000 (---------------) + worse-than
- 0x000e4188, // n0x1c06 c0x0000 (---------------) + blogspot
- 0x002752c4, // n0x1c07 c0x0000 (---------------) + I club
- 0x00222ac3, // n0x1c08 c0x0000 (---------------) + I com
- 0x003105c4, // n0x1c09 c0x0000 (---------------) + I ebiz
- 0x002d75c3, // n0x1c0a c0x0000 (---------------) + I edu
- 0x00212084, // n0x1c0b c0x0000 (---------------) + I game
- 0x0021e283, // n0x1c0c c0x0000 (---------------) + I gov
- 0x00300b83, // n0x1c0d c0x0000 (---------------) + I idv
- 0x0023fa03, // n0x1c0e c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1c0f c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1c10 c0x0000 (---------------) + I org
- 0x0030d70b, // n0x1c11 c0x0000 (---------------) + I xn--czrw28b
- 0x003867ca, // n0x1c12 c0x0000 (---------------) + I xn--uc0atv
- 0x0039604c, // n0x1c13 c0x0000 (---------------) + I xn--zf0ao64a
- 0x00201e82, // n0x1c14 c0x0000 (---------------) + I ac
- 0x00200742, // n0x1c15 c0x0000 (---------------) + I co
- 0x00202342, // n0x1c16 c0x0000 (---------------) + I go
- 0x00294945, // n0x1c17 c0x0000 (---------------) + I hotel
- 0x00200304, // n0x1c18 c0x0000 (---------------) + I info
- 0x00208942, // n0x1c19 c0x0000 (---------------) + I me
- 0x0023fa03, // n0x1c1a c0x0000 (---------------) + I mil
- 0x00203604, // n0x1c1b c0x0000 (---------------) + I mobi
- 0x00201082, // n0x1c1c c0x0000 (---------------) + I ne
- 0x00200c42, // n0x1c1d c0x0000 (---------------) + I or
- 0x00200982, // n0x1c1e c0x0000 (---------------) + I sc
- 0x0020bf42, // n0x1c1f c0x0000 (---------------) + I tv
- 0x0029d289, // n0x1c20 c0x0000 (---------------) + I cherkassy
- 0x0028e908, // n0x1c21 c0x0000 (---------------) + I cherkasy
- 0x00259889, // n0x1c22 c0x0000 (---------------) + I chernigov
- 0x0025f489, // n0x1c23 c0x0000 (---------------) + I chernihiv
- 0x0026b44a, // n0x1c24 c0x0000 (---------------) + I chernivtsi
- 0x00367e8a, // n0x1c25 c0x0000 (---------------) + I chernovtsy
- 0x00201782, // n0x1c26 c0x0000 (---------------) + I ck
- 0x002211c2, // n0x1c27 c0x0000 (---------------) + I cn
- 0x00200742, // n0x1c28 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1c29 c0x0000 (---------------) + I com
- 0x0020c502, // n0x1c2a c0x0000 (---------------) + I cr
- 0x00231c86, // n0x1c2b c0x0000 (---------------) + I crimea
- 0x0033f802, // n0x1c2c c0x0000 (---------------) + I cv
- 0x00209b82, // n0x1c2d c0x0000 (---------------) + I dn
- 0x0036ad4e, // n0x1c2e c0x0000 (---------------) + I dnepropetrovsk
- 0x0025ec0e, // n0x1c2f c0x0000 (---------------) + I dnipropetrovsk
- 0x0026b2c7, // n0x1c30 c0x0000 (---------------) + I dominic
- 0x003409c7, // n0x1c31 c0x0000 (---------------) + I donetsk
- 0x00238b42, // n0x1c32 c0x0000 (---------------) + I dp
- 0x002d75c3, // n0x1c33 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1c34 c0x0000 (---------------) + I gov
- 0x00239ec2, // n0x1c35 c0x0000 (---------------) + I if
- 0x00200242, // n0x1c36 c0x0000 (---------------) + I in
- 0x0022cf4f, // n0x1c37 c0x0000 (---------------) + I ivano-frankivsk
- 0x002176c2, // n0x1c38 c0x0000 (---------------) + I kh
- 0x00244d07, // n0x1c39 c0x0000 (---------------) + I kharkiv
- 0x0024cb07, // n0x1c3a c0x0000 (---------------) + I kharkov
- 0x00250087, // n0x1c3b c0x0000 (---------------) + I kherson
- 0x0025304c, // n0x1c3c c0x0000 (---------------) + I khmelnitskiy
- 0x002581cc, // n0x1c3d c0x0000 (---------------) + I khmelnytskyi
- 0x0037aac4, // n0x1c3e c0x0000 (---------------) + I kiev
- 0x00254bca, // n0x1c3f c0x0000 (---------------) + I kirovograd
- 0x00268d82, // n0x1c40 c0x0000 (---------------) + I km
- 0x002034c2, // n0x1c41 c0x0000 (---------------) + I kr
- 0x0029ed84, // n0x1c42 c0x0000 (---------------) + I krym
- 0x00238082, // n0x1c43 c0x0000 (---------------) + I ks
- 0x002aa8c2, // n0x1c44 c0x0000 (---------------) + I kv
- 0x00258404, // n0x1c45 c0x0000 (---------------) + I kyiv
- 0x0020e4c2, // n0x1c46 c0x0000 (---------------) + I lg
- 0x00205ec2, // n0x1c47 c0x0000 (---------------) + I lt
- 0x003054c7, // n0x1c48 c0x0000 (---------------) + I lugansk
- 0x002e6745, // n0x1c49 c0x0000 (---------------) + I lutsk
- 0x00227f02, // n0x1c4a c0x0000 (---------------) + I lv
- 0x0022cec4, // n0x1c4b c0x0000 (---------------) + I lviv
- 0x00356d82, // n0x1c4c c0x0000 (---------------) + I mk
- 0x002f28c8, // n0x1c4d c0x0000 (---------------) + I mykolaiv
- 0x002170c3, // n0x1c4e c0x0000 (---------------) + I net
- 0x00342248, // n0x1c4f c0x0000 (---------------) + I nikolaev
- 0x00200782, // n0x1c50 c0x0000 (---------------) + I od
- 0x00227505, // n0x1c51 c0x0000 (---------------) + I odesa
- 0x0035fa46, // n0x1c52 c0x0000 (---------------) + I odessa
- 0x0021dcc3, // n0x1c53 c0x0000 (---------------) + I org
- 0x00201e02, // n0x1c54 c0x0000 (---------------) + I pl
- 0x002c8f07, // n0x1c55 c0x0000 (---------------) + I poltava
- 0x00207742, // n0x1c56 c0x0000 (---------------) + I pp
- 0x002cba85, // n0x1c57 c0x0000 (---------------) + I rivne
- 0x00208085, // n0x1c58 c0x0000 (---------------) + I rovno
- 0x00211fc2, // n0x1c59 c0x0000 (---------------) + I rv
- 0x002046c2, // n0x1c5a c0x0000 (---------------) + I sb
- 0x0035e2ca, // n0x1c5b c0x0000 (---------------) + I sebastopol
- 0x0024688a, // n0x1c5c c0x0000 (---------------) + I sevastopol
- 0x0023f582, // n0x1c5d c0x0000 (---------------) + I sm
- 0x00308004, // n0x1c5e c0x0000 (---------------) + I sumy
- 0x00203202, // n0x1c5f c0x0000 (---------------) + I te
- 0x0036c988, // n0x1c60 c0x0000 (---------------) + I ternopil
- 0x002018c2, // n0x1c61 c0x0000 (---------------) + I uz
- 0x0036a1c8, // n0x1c62 c0x0000 (---------------) + I uzhgorod
- 0x002dc087, // n0x1c63 c0x0000 (---------------) + I vinnica
- 0x002dc4c9, // n0x1c64 c0x0000 (---------------) + I vinnytsia
- 0x00208102, // n0x1c65 c0x0000 (---------------) + I vn
- 0x002e1c05, // n0x1c66 c0x0000 (---------------) + I volyn
- 0x0028edc5, // n0x1c67 c0x0000 (---------------) + I yalta
- 0x002b214b, // n0x1c68 c0x0000 (---------------) + I zaporizhzhe
- 0x002b2b8c, // n0x1c69 c0x0000 (---------------) + I zaporizhzhia
- 0x00220408, // n0x1c6a c0x0000 (---------------) + I zhitomir
- 0x002e1fc8, // n0x1c6b c0x0000 (---------------) + I zhytomyr
- 0x002c2042, // n0x1c6c c0x0000 (---------------) + I zp
- 0x0020fa82, // n0x1c6d c0x0000 (---------------) + I zt
- 0x00201e82, // n0x1c6e c0x0000 (---------------) + I ac
- 0x000e4188, // n0x1c6f c0x0000 (---------------) + blogspot
- 0x00200742, // n0x1c70 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1c71 c0x0000 (---------------) + I com
- 0x00202342, // n0x1c72 c0x0000 (---------------) + I go
- 0x00201082, // n0x1c73 c0x0000 (---------------) + I ne
- 0x00200c42, // n0x1c74 c0x0000 (---------------) + I or
- 0x0021dcc3, // n0x1c75 c0x0000 (---------------) + I org
- 0x00200982, // n0x1c76 c0x0000 (---------------) + I sc
- 0x00201e82, // n0x1c77 c0x0000 (---------------) + I ac
- 0x53a00742, // n0x1c78 c0x014e (n0x1c82-n0x1c83) + I co
- 0x53e1e283, // n0x1c79 c0x014f (n0x1c83-n0x1c84) + I gov
- 0x003413c3, // n0x1c7a c0x0000 (---------------) + I ltd
- 0x00208942, // n0x1c7b c0x0000 (---------------) + I me
- 0x002170c3, // n0x1c7c c0x0000 (---------------) + I net
- 0x002037c3, // n0x1c7d c0x0000 (---------------) + I nhs
- 0x0021dcc3, // n0x1c7e c0x0000 (---------------) + I org
- 0x002c65c3, // n0x1c7f c0x0000 (---------------) + I plc
- 0x00218946, // n0x1c80 c0x0000 (---------------) + I police
- 0x01606103, // n0x1c81 c0x0005 (---------------)* o I sch
- 0x000e4188, // n0x1c82 c0x0000 (---------------) + blogspot
- 0x00043bc7, // n0x1c83 c0x0000 (---------------) + service
- 0x54601a42, // n0x1c84 c0x0151 (n0x1cc3-n0x1cc6) + I ak
- 0x54a00882, // n0x1c85 c0x0152 (n0x1cc6-n0x1cc9) + I al
- 0x54e00602, // n0x1c86 c0x0153 (n0x1cc9-n0x1ccc) + I ar
- 0x55200182, // n0x1c87 c0x0154 (n0x1ccc-n0x1ccf) + I as
- 0x55608cc2, // n0x1c88 c0x0155 (n0x1ccf-n0x1cd2) + I az
- 0x55a055c2, // n0x1c89 c0x0156 (n0x1cd2-n0x1cd5) + I ca
- 0x55e00742, // n0x1c8a c0x0157 (n0x1cd5-n0x1cd8) + I co
- 0x56223d82, // n0x1c8b c0x0158 (n0x1cd8-n0x1cdb) + I ct
- 0x56616e02, // n0x1c8c c0x0159 (n0x1cdb-n0x1cde) + I dc
- 0x56a006c2, // n0x1c8d c0x015a (n0x1cde-n0x1ce1) + I de
- 0x0025ec03, // n0x1c8e c0x0000 (---------------) + I dni
- 0x0020c743, // n0x1c8f c0x0000 (---------------) + I fed
- 0x56e39b02, // n0x1c90 c0x015b (n0x1ce1-n0x1ce4) + I fl
- 0x57201602, // n0x1c91 c0x015c (n0x1ce4-n0x1ce7) + I ga
- 0x57629702, // n0x1c92 c0x015d (n0x1ce7-n0x1cea) + I gu
- 0x57a00202, // n0x1c93 c0x015e (n0x1cea-n0x1cec) + I hi
- 0x57e00482, // n0x1c94 c0x015f (n0x1cec-n0x1cef) + I ia
- 0x58206202, // n0x1c95 c0x0160 (n0x1cef-n0x1cf2) + I id
- 0x586036c2, // n0x1c96 c0x0161 (n0x1cf2-n0x1cf5) + I il
- 0x58a00242, // n0x1c97 c0x0162 (n0x1cf5-n0x1cf8) + I in
- 0x000aa785, // n0x1c98 c0x0000 (---------------) + is-by
- 0x00209883, // n0x1c99 c0x0000 (---------------) + I isa
- 0x00394c44, // n0x1c9a c0x0000 (---------------) + I kids
- 0x58e38082, // n0x1c9b c0x0163 (n0x1cf8-n0x1cfb) + I ks
- 0x59229082, // n0x1c9c c0x0164 (n0x1cfb-n0x1cfe) + I ky
- 0x59601e42, // n0x1c9d c0x0165 (n0x1cfe-n0x1d01) + I la
- 0x0006700b, // n0x1c9e c0x0000 (---------------) + land-4-sale
- 0x59a04302, // n0x1c9f c0x0166 (n0x1d01-n0x1d04) + I ma
- 0x5a238602, // n0x1ca0 c0x0168 (n0x1d07-n0x1d0a) + I md
- 0x5a608942, // n0x1ca1 c0x0169 (n0x1d0a-n0x1d0d) + I me
- 0x5aa04802, // n0x1ca2 c0x016a (n0x1d0d-n0x1d10) + I mi
- 0x5ae17082, // n0x1ca3 c0x016b (n0x1d10-n0x1d13) + I mn
- 0x5b203602, // n0x1ca4 c0x016c (n0x1d13-n0x1d16) + I mo
- 0x5b609282, // n0x1ca5 c0x016d (n0x1d16-n0x1d19) + I ms
- 0x5ba59642, // n0x1ca6 c0x016e (n0x1d19-n0x1d1c) + I mt
- 0x5be1c742, // n0x1ca7 c0x016f (n0x1d1c-n0x1d1f) + I nc
- 0x5c208f42, // n0x1ca8 c0x0170 (n0x1d1f-n0x1d21) + I nd
- 0x5c601082, // n0x1ca9 c0x0171 (n0x1d21-n0x1d24) + I ne
- 0x5ca037c2, // n0x1caa c0x0172 (n0x1d24-n0x1d27) + I nh
- 0x5ce02942, // n0x1cab c0x0173 (n0x1d27-n0x1d2a) + I nj
- 0x5d233c42, // n0x1cac c0x0174 (n0x1d2a-n0x1d2d) + I nm
- 0x002c55c3, // n0x1cad c0x0000 (---------------) + I nsn
- 0x5d608802, // n0x1cae c0x0175 (n0x1d2d-n0x1d30) + I nv
- 0x5da108c2, // n0x1caf c0x0176 (n0x1d30-n0x1d33) + I ny
- 0x5de051c2, // n0x1cb0 c0x0177 (n0x1d33-n0x1d36) + I oh
- 0x5e201bc2, // n0x1cb1 c0x0178 (n0x1d36-n0x1d39) + I ok
- 0x5e600c42, // n0x1cb2 c0x0179 (n0x1d39-n0x1d3c) + I or
- 0x5ea052c2, // n0x1cb3 c0x017a (n0x1d3c-n0x1d3f) + I pa
- 0x5ee18242, // n0x1cb4 c0x017b (n0x1d3f-n0x1d42) + I pr
- 0x5f202842, // n0x1cb5 c0x017c (n0x1d42-n0x1d45) + I ri
- 0x5f600982, // n0x1cb6 c0x017d (n0x1d45-n0x1d48) + I sc
- 0x5fa4f842, // n0x1cb7 c0x017e (n0x1d48-n0x1d4a) + I sd
- 0x000d044c, // n0x1cb8 c0x0000 (---------------) + stuff-4-sale
- 0x5fe1d1c2, // n0x1cb9 c0x017f (n0x1d4a-n0x1d4d) + I tn
- 0x60225242, // n0x1cba c0x0180 (n0x1d4d-n0x1d50) + I tx
- 0x60600102, // n0x1cbb c0x0181 (n0x1d50-n0x1d53) + I ut
- 0x60a013c2, // n0x1cbc c0x0182 (n0x1d53-n0x1d56) + I va
- 0x60e13602, // n0x1cbd c0x0183 (n0x1d56-n0x1d59) + I vi
- 0x6121e302, // n0x1cbe c0x0184 (n0x1d59-n0x1d5c) + I vt
- 0x61602542, // n0x1cbf c0x0185 (n0x1d5c-n0x1d5f) + I wa
- 0x61a05502, // n0x1cc0 c0x0186 (n0x1d5f-n0x1d62) + I wi
- 0x61e63902, // n0x1cc1 c0x0187 (n0x1d62-n0x1d63) + I wv
- 0x62237f82, // n0x1cc2 c0x0188 (n0x1d63-n0x1d66) + I wy
- 0x0021aa82, // n0x1cc3 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cc4 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cc5 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cc6 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cc7 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cc8 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cc9 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cca c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1ccb c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1ccc c0x0000 (---------------) + I cc
- 0x00312503, // n0x1ccd c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cce c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1ccf c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cd0 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cd1 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cd2 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cd3 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cd4 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cd5 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cd6 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cd7 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cd8 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cd9 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cda c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cdb c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cdc c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cdd c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cde c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cdf c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1ce0 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1ce1 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1ce2 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1ce3 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1ce4 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1ce5 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1ce6 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1ce7 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1ce8 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1ce9 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cea c0x0000 (---------------) + I cc
- 0x00273c43, // n0x1ceb c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cec c0x0000 (---------------) + I cc
- 0x00312503, // n0x1ced c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cee c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cef c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cf0 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cf1 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cf2 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cf3 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cf4 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cf5 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cf6 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cf7 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cf8 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cf9 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cfa c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cfb c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cfc c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1cfd c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1cfe c0x0000 (---------------) + I cc
- 0x00312503, // n0x1cff c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d00 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d01 c0x0000 (---------------) + I cc
- 0x59f12503, // n0x1d02 c0x0167 (n0x1d04-n0x1d07) + I k12
- 0x00273c43, // n0x1d03 c0x0000 (---------------) + I lib
- 0x002e8ec4, // n0x1d04 c0x0000 (---------------) + I chtr
- 0x0028e806, // n0x1d05 c0x0000 (---------------) + I paroch
- 0x002ce243, // n0x1d06 c0x0000 (---------------) + I pvt
- 0x0021aa82, // n0x1d07 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d08 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d09 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d0a c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d0b c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d0c c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d0d c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d0e c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d0f c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d10 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d11 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d12 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d13 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d14 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d15 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d16 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d17 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d18 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d19 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d1a c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d1b c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d1c c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d1d c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d1e c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d1f c0x0000 (---------------) + I cc
- 0x00273c43, // n0x1d20 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d21 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d22 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d23 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d24 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d25 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d26 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d27 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d28 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d29 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d2a c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d2b c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d2c c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d2d c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d2e c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d2f c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d30 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d31 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d32 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d33 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d34 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d35 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d36 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d37 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d38 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d39 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d3a c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d3b c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d3c c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d3d c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d3e c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d3f c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d40 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d41 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d42 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d43 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d44 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d45 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d46 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d47 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d48 c0x0000 (---------------) + I cc
- 0x00273c43, // n0x1d49 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d4a c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d4b c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d4c c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d4d c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d4e c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d4f c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d50 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d51 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d52 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d53 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d54 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d55 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d56 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d57 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d58 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d59 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d5a c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d5b c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d5c c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d5d c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d5e c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d5f c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d60 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d61 c0x0000 (---------------) + I lib
- 0x0021aa82, // n0x1d62 c0x0000 (---------------) + I cc
- 0x0021aa82, // n0x1d63 c0x0000 (---------------) + I cc
- 0x00312503, // n0x1d64 c0x0000 (---------------) + I k12
- 0x00273c43, // n0x1d65 c0x0000 (---------------) + I lib
- 0x62a22ac3, // n0x1d66 c0x018a (n0x1d6c-n0x1d6d) + I com
- 0x002d75c3, // n0x1d67 c0x0000 (---------------) + I edu
- 0x0032b9c3, // n0x1d68 c0x0000 (---------------) + I gub
- 0x0023fa03, // n0x1d69 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1d6a c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1d6b c0x0000 (---------------) + I org
- 0x000e4188, // n0x1d6c c0x0000 (---------------) + blogspot
- 0x00200742, // n0x1d6d c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1d6e c0x0000 (---------------) + I com
- 0x002170c3, // n0x1d6f c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1d70 c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1d71 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1d72 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1d73 c0x0000 (---------------) + I gov
- 0x0023fa03, // n0x1d74 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1d75 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1d76 c0x0000 (---------------) + I org
- 0x00246584, // n0x1d77 c0x0000 (---------------) + I arts
- 0x00200742, // n0x1d78 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1d79 c0x0000 (---------------) + I com
- 0x0023ee43, // n0x1d7a c0x0000 (---------------) + I e12
- 0x002d75c3, // n0x1d7b c0x0000 (---------------) + I edu
- 0x00238544, // n0x1d7c c0x0000 (---------------) + I firm
- 0x0034eb03, // n0x1d7d c0x0000 (---------------) + I gob
- 0x0021e283, // n0x1d7e c0x0000 (---------------) + I gov
- 0x00200304, // n0x1d7f c0x0000 (---------------) + I info
- 0x00238c03, // n0x1d80 c0x0000 (---------------) + I int
- 0x0023fa03, // n0x1d81 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1d82 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1d83 c0x0000 (---------------) + I org
- 0x002e6343, // n0x1d84 c0x0000 (---------------) + I rec
- 0x002cf4c5, // n0x1d85 c0x0000 (---------------) + I store
- 0x0029d583, // n0x1d86 c0x0000 (---------------) + I tec
- 0x00219fc3, // n0x1d87 c0x0000 (---------------) + I web
- 0x00200742, // n0x1d88 c0x0000 (---------------) + I co
- 0x00222ac3, // n0x1d89 c0x0000 (---------------) + I com
- 0x00312503, // n0x1d8a c0x0000 (---------------) + I k12
- 0x002170c3, // n0x1d8b c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1d8c c0x0000 (---------------) + I org
- 0x00201e82, // n0x1d8d c0x0000 (---------------) + I ac
- 0x00310603, // n0x1d8e c0x0000 (---------------) + I biz
- 0x000e4188, // n0x1d8f c0x0000 (---------------) + blogspot
- 0x00222ac3, // n0x1d90 c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1d91 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1d92 c0x0000 (---------------) + I gov
- 0x00205e06, // n0x1d93 c0x0000 (---------------) + I health
- 0x00200304, // n0x1d94 c0x0000 (---------------) + I info
- 0x00238c03, // n0x1d95 c0x0000 (---------------) + I int
- 0x00298944, // n0x1d96 c0x0000 (---------------) + I name
- 0x002170c3, // n0x1d97 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1d98 c0x0000 (---------------) + I org
- 0x00218243, // n0x1d99 c0x0000 (---------------) + I pro
- 0x00222ac3, // n0x1d9a c0x0000 (---------------) + I com
- 0x002d75c3, // n0x1d9b c0x0000 (---------------) + I edu
- 0x002170c3, // n0x1d9c c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1d9d c0x0000 (---------------) + I org
- 0x00222ac3, // n0x1d9e c0x0000 (---------------) + I com
- 0x00009ac6, // n0x1d9f c0x0000 (---------------) + dyndns
- 0x002d75c3, // n0x1da0 c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1da1 c0x0000 (---------------) + I gov
- 0x00108086, // n0x1da2 c0x0000 (---------------) + mypets
- 0x002170c3, // n0x1da3 c0x0000 (---------------) + I net
- 0x0021dcc3, // n0x1da4 c0x0000 (---------------) + I org
- 0x002f1308, // n0x1da5 c0x0000 (---------------) + I xn--80au
- 0x002f5c09, // n0x1da6 c0x0000 (---------------) + I xn--90azh
- 0x00303289, // n0x1da7 c0x0000 (---------------) + I xn--c1avg
- 0x00312fc8, // n0x1da8 c0x0000 (---------------) + I xn--d1at
- 0x00362248, // n0x1da9 c0x0000 (---------------) + I xn--o1ac
- 0x00362249, // n0x1daa c0x0000 (---------------) + I xn--o1ach
- 0x00201e82, // n0x1dab c0x0000 (---------------) + I ac
- 0x00301306, // n0x1dac c0x0000 (---------------) + I agrica
- 0x00205e83, // n0x1dad c0x0000 (---------------) + I alt
- 0x65200742, // n0x1dae c0x0194 (n0x1dbc-n0x1dbd) + I co
- 0x002d75c3, // n0x1daf c0x0000 (---------------) + I edu
- 0x0021e283, // n0x1db0 c0x0000 (---------------) + I gov
- 0x002c6987, // n0x1db1 c0x0000 (---------------) + I grondar
- 0x00253883, // n0x1db2 c0x0000 (---------------) + I law
- 0x0023fa03, // n0x1db3 c0x0000 (---------------) + I mil
- 0x002170c3, // n0x1db4 c0x0000 (---------------) + I net
- 0x00202303, // n0x1db5 c0x0000 (---------------) + I ngo
- 0x00208b83, // n0x1db6 c0x0000 (---------------) + I nis
- 0x00207cc3, // n0x1db7 c0x0000 (---------------) + I nom
- 0x0021dcc3, // n0x1db8 c0x0000 (---------------) + I org
- 0x00235406, // n0x1db9 c0x0000 (---------------) + I school
- 0x00208902, // n0x1dba c0x0000 (---------------) + I tm
- 0x00219fc3, // n0x1dbb c0x0000 (---------------) + I web
- 0x000e4188, // n0x1dbc c0x0000 (---------------) + blogspot
+ 0x00379643, // n0x0000 c0x0000 (---------------) + I aaa
+ 0x002ff504, // n0x0001 c0x0000 (---------------) + I aarp
+ 0x00243386, // n0x0002 c0x0000 (---------------) + I abarth
+ 0x0030f843, // n0x0003 c0x0000 (---------------) + I abb
+ 0x0030f846, // n0x0004 c0x0000 (---------------) + I abbott
+ 0x00364206, // n0x0005 c0x0000 (---------------) + I abbvie
+ 0x003973c3, // n0x0006 c0x0000 (---------------) + I abc
+ 0x002a8884, // n0x0007 c0x0000 (---------------) + I able
+ 0x00226607, // n0x0008 c0x0000 (---------------) + I abogado
+ 0x00242fc8, // n0x0009 c0x0000 (---------------) + I abudhabi
+ 0x01a05882, // n0x000a c0x0006 (n0x05f6-n0x05fc) + I ac
+ 0x00305387, // n0x000b c0x0000 (---------------) + I academy
+ 0x0034d409, // n0x000c c0x0000 (---------------) + I accenture
+ 0x002eda0a, // n0x000d c0x0000 (---------------) + I accountant
+ 0x002eda0b, // n0x000e c0x0000 (---------------) + I accountants
+ 0x0022f6c3, // n0x000f c0x0000 (---------------) + I aco
+ 0x002820c6, // n0x0010 c0x0000 (---------------) + I active
+ 0x00235dc5, // n0x0011 c0x0000 (---------------) + I actor
+ 0x01e03d82, // n0x0012 c0x0007 (n0x05fc-n0x05fd) + I ad
+ 0x00209d04, // n0x0013 c0x0000 (---------------) + I adac
+ 0x00253903, // n0x0014 c0x0000 (---------------) + I ads
+ 0x00299105, // n0x0015 c0x0000 (---------------) + I adult
+ 0x0220ac02, // n0x0016 c0x0008 (n0x05fd-n0x0605) + I ae
+ 0x0024d5c3, // n0x0017 c0x0000 (---------------) + I aeg
+ 0x026bcb84, // n0x0018 c0x0009 (n0x0605-n0x065e) + I aero
+ 0x003023c5, // n0x0019 c0x0000 (---------------) + I aetna
+ 0x02a00342, // n0x001a c0x000a (n0x065e-n0x0663) + I af
+ 0x0036c30e, // n0x001b c0x0000 (---------------) + I afamilycompany
+ 0x00249ec3, // n0x001c c0x0000 (---------------) + I afl
+ 0x0036af06, // n0x001d c0x0000 (---------------) + I africa
+ 0x0036af0b, // n0x001e c0x0000 (---------------) + I africamagic
+ 0x02e01002, // n0x001f c0x000b (n0x0663-n0x0668) + I ag
+ 0x00279c47, // n0x0020 c0x0000 (---------------) + I agakhan
+ 0x002393c6, // n0x0021 c0x0000 (---------------) + I agency
+ 0x03202142, // n0x0022 c0x000c (n0x0668-n0x066c) + I ai
+ 0x0025cc83, // n0x0023 c0x0000 (---------------) + I aig
+ 0x0025cc84, // n0x0024 c0x0000 (---------------) + I aigo
+ 0x00204686, // n0x0025 c0x0000 (---------------) + I airbus
+ 0x0023ba48, // n0x0026 c0x0000 (---------------) + I airforce
+ 0x0027e646, // n0x0027 c0x0000 (---------------) + I airtel
+ 0x00377d04, // n0x0028 c0x0000 (---------------) + I akdn
+ 0x036001c2, // n0x0029 c0x000d (n0x066c-n0x0673) + I al
+ 0x00324e49, // n0x002a c0x0000 (---------------) + I alfaromeo
+ 0x003934c7, // n0x002b c0x0000 (---------------) + I alibaba
+ 0x002b7146, // n0x002c c0x0000 (---------------) + I alipay
+ 0x0033a7c9, // n0x002d c0x0000 (---------------) + I allfinanz
+ 0x0028e708, // n0x002e c0x0000 (---------------) + I allstate
+ 0x00391984, // n0x002f c0x0000 (---------------) + I ally
+ 0x0021c6c6, // n0x0030 c0x0000 (---------------) + I alsace
+ 0x003353c6, // n0x0031 c0x0000 (---------------) + I alstom
+ 0x03a01382, // n0x0032 c0x000e (n0x0673-n0x0674) + I am
+ 0x00240a8f, // n0x0033 c0x0000 (---------------) + I americanexpress
+ 0x00378c8e, // n0x0034 c0x0000 (---------------) + I americanfamily
+ 0x003a3884, // n0x0035 c0x0000 (---------------) + I amex
+ 0x00365985, // n0x0036 c0x0000 (---------------) + I amfam
+ 0x00229685, // n0x0037 c0x0000 (---------------) + I amica
+ 0x002b0d09, // n0x0038 c0x0000 (---------------) + I amsterdam
+ 0x03e00b42, // n0x0039 c0x000f (n0x0674-n0x0678) + I an
+ 0x0023dc09, // n0x003a c0x0000 (---------------) + I analytics
+ 0x0031e587, // n0x003b c0x0000 (---------------) + I android
+ 0x0034c406, // n0x003c c0x0000 (---------------) + I anquan
+ 0x0024fa83, // n0x003d c0x0000 (---------------) + I anz
+ 0x04203042, // n0x003e c0x0010 (n0x0678-n0x067e) + I ao
+ 0x00267903, // n0x003f c0x0000 (---------------) + I aol
+ 0x002136ca, // n0x0040 c0x0000 (---------------) + I apartments
+ 0x00220503, // n0x0041 c0x0000 (---------------) + I app
+ 0x002bda45, // n0x0042 c0x0000 (---------------) + I apple
+ 0x00229802, // n0x0043 c0x0000 (---------------) + I aq
+ 0x0027d0c9, // n0x0044 c0x0000 (---------------) + I aquarelle
+ 0x046011c2, // n0x0045 c0x0011 (n0x067e-n0x0687) + I ar
+ 0x0030f386, // n0x0046 c0x0000 (---------------) + I aramco
+ 0x002c3405, // n0x0047 c0x0000 (---------------) + I archi
+ 0x00344984, // n0x0048 c0x0000 (---------------) + I army
+ 0x04e51f04, // n0x0049 c0x0013 (n0x0688-n0x068e) + I arpa
+ 0x00234904, // n0x004a c0x0000 (---------------) + I arte
+ 0x05202002, // n0x004b c0x0014 (n0x068e-n0x068f) + I as
+ 0x002ff244, // n0x004c c0x0000 (---------------) + I asda
+ 0x0036a844, // n0x004d c0x0000 (---------------) + I asia
+ 0x0033014a, // n0x004e c0x0000 (---------------) + I associates
+ 0x05600102, // n0x004f c0x0015 (n0x068f-n0x0696) + I at
+ 0x00308207, // n0x0050 c0x0000 (---------------) + I athleta
+ 0x00378648, // n0x0051 c0x0000 (---------------) + I attorney
+ 0x05e09602, // n0x0052 c0x0017 (n0x0697-n0x06a9) + I au
+ 0x00319547, // n0x0053 c0x0000 (---------------) + I auction
+ 0x0022e9c4, // n0x0054 c0x0000 (---------------) + I audi
+ 0x002cae47, // n0x0055 c0x0000 (---------------) + I audible
+ 0x0022e9c5, // n0x0056 c0x0000 (---------------) + I audio
+ 0x0035d247, // n0x0057 c0x0000 (---------------) + I auspost
+ 0x0031e346, // n0x0058 c0x0000 (---------------) + I author
+ 0x00216404, // n0x0059 c0x0000 (---------------) + I auto
+ 0x00321605, // n0x005a c0x0000 (---------------) + I autos
+ 0x002ca387, // n0x005b c0x0000 (---------------) + I avianca
+ 0x06e01082, // n0x005c c0x001b (n0x06b7-n0x06b8) + I aw
+ 0x002eb603, // n0x005d c0x0000 (---------------) + I aws
+ 0x0020d002, // n0x005e c0x0000 (---------------) + I ax
+ 0x00362dc3, // n0x005f c0x0000 (---------------) + I axa
+ 0x07212502, // n0x0060 c0x001c (n0x06b8-n0x06c4) + I az
+ 0x00277585, // n0x0061 c0x0000 (---------------) + I azure
+ 0x07603002, // n0x0062 c0x001d (n0x06c4-n0x06cf) + I ba
+ 0x00301844, // n0x0063 c0x0000 (---------------) + I baby
+ 0x00274445, // n0x0064 c0x0000 (---------------) + I baidu
+ 0x003a37c7, // n0x0065 c0x0000 (---------------) + I banamex
+ 0x002dcc8e, // n0x0066 c0x0000 (---------------) + I bananarepublic
+ 0x00300944, // n0x0067 c0x0000 (---------------) + I band
+ 0x0020ad44, // n0x0068 c0x0000 (---------------) + I bank
+ 0x00211783, // n0x0069 c0x0000 (---------------) + I bar
+ 0x002bb549, // n0x006a c0x0000 (---------------) + I barcelona
+ 0x002d690b, // n0x006b c0x0000 (---------------) + I barclaycard
+ 0x002fe188, // n0x006c c0x0000 (---------------) + I barclays
+ 0x00307708, // n0x006d c0x0000 (---------------) + I barefoot
+ 0x0030dc48, // n0x006e c0x0000 (---------------) + I bargains
+ 0x0033a60a, // n0x006f c0x0000 (---------------) + I basketball
+ 0x0035d147, // n0x0070 c0x0000 (---------------) + I bauhaus
+ 0x0030b746, // n0x0071 c0x0000 (---------------) + I bayern
+ 0x07ac9742, // n0x0072 c0x001e (n0x06cf-n0x06d9) + I bb
+ 0x00362043, // n0x0073 c0x0000 (---------------) + I bbc
+ 0x0036a303, // n0x0074 c0x0000 (---------------) + I bbt
+ 0x00373384, // n0x0075 c0x0000 (---------------) + I bbva
+ 0x00397403, // n0x0076 c0x0000 (---------------) + I bcg
+ 0x0035bb43, // n0x0077 c0x0000 (---------------) + I bcn
+ 0x01712842, // n0x0078 c0x0005 (---------------)* o I bd
+ 0x07e094c2, // n0x0079 c0x001f (n0x06d9-n0x06db) + I be
+ 0x00215745, // n0x007a c0x0000 (---------------) + I beats
+ 0x0020b084, // n0x007b c0x0000 (---------------) + I beer
+ 0x002de9c7, // n0x007c c0x0000 (---------------) + I bentley
+ 0x00351e06, // n0x007d c0x0000 (---------------) + I berlin
+ 0x003633c4, // n0x007e c0x0000 (---------------) + I best
+ 0x00392f47, // n0x007f c0x0000 (---------------) + I bestbuy
+ 0x00210503, // n0x0080 c0x0000 (---------------) + I bet
+ 0x08357082, // n0x0081 c0x0020 (n0x06db-n0x06dc) + I bf
+ 0x08626882, // n0x0082 c0x0021 (n0x06dc-n0x0701) + I bg
+ 0x08b0c002, // n0x0083 c0x0022 (n0x0701-n0x0706) + I bh
+ 0x0039a906, // n0x0084 c0x0000 (---------------) + I bharti
+ 0x08e00002, // n0x0085 c0x0023 (n0x0706-n0x070b) + I bi
+ 0x00351845, // n0x0086 c0x0000 (---------------) + I bible
+ 0x00313d83, // n0x0087 c0x0000 (---------------) + I bid
+ 0x00202b44, // n0x0088 c0x0000 (---------------) + I bike
+ 0x002d6744, // n0x0089 c0x0000 (---------------) + I bing
+ 0x002d6745, // n0x008a c0x0000 (---------------) + I bingo
+ 0x00203a43, // n0x008b c0x0000 (---------------) + I bio
+ 0x0930a143, // n0x008c c0x0024 (n0x070b-n0x0712) + I biz
+ 0x096066c2, // n0x008d c0x0025 (n0x0712-n0x0716) + I bj
+ 0x002828c5, // n0x008e c0x0000 (---------------) + I black
+ 0x002828cb, // n0x008f c0x0000 (---------------) + I blackfriday
+ 0x00251446, // n0x0090 c0x0000 (---------------) + I blanco
+ 0x00208dcb, // n0x0091 c0x0000 (---------------) + I blockbuster
+ 0x00229004, // n0x0092 c0x0000 (---------------) + I blog
+ 0x00209389, // n0x0093 c0x0000 (---------------) + I bloomberg
+ 0x0020b184, // n0x0094 c0x0000 (---------------) + I blue
+ 0x09a0c542, // n0x0095 c0x0026 (n0x0716-n0x071b) + I bm
+ 0x0020d543, // n0x0096 c0x0000 (---------------) + I bms
+ 0x0020f283, // n0x0097 c0x0000 (---------------) + I bmw
+ 0x0160f402, // n0x0098 c0x0005 (---------------)* o I bn
+ 0x0023e043, // n0x0099 c0x0000 (---------------) + I bnl
+ 0x0020f40a, // n0x009a c0x0000 (---------------) + I bnpparibas
+ 0x09e06dc2, // n0x009b c0x0027 (n0x071b-n0x0724) + I bo
+ 0x00209f85, // n0x009c c0x0000 (---------------) + I boats
+ 0x0028888a, // n0x009d c0x0000 (---------------) + I boehringer
+ 0x002d5184, // n0x009e c0x0000 (---------------) + I bofa
+ 0x00211483, // n0x009f c0x0000 (---------------) + I bom
+ 0x00211944, // n0x00a0 c0x0000 (---------------) + I bond
+ 0x002149c3, // n0x00a1 c0x0000 (---------------) + I boo
+ 0x002149c4, // n0x00a2 c0x0000 (---------------) + I book
+ 0x002149c7, // n0x00a3 c0x0000 (---------------) + I booking
+ 0x00214f85, // n0x00a4 c0x0000 (---------------) + I boots
+ 0x00215cc5, // n0x00a5 c0x0000 (---------------) + I bosch
+ 0x00216286, // n0x00a6 c0x0000 (---------------) + I bostik
+ 0x00217083, // n0x00a7 c0x0000 (---------------) + I bot
+ 0x00219ec8, // n0x00a8 c0x0000 (---------------) + I boutique
+ 0x0a20bb42, // n0x00a9 c0x0028 (n0x0724-n0x076a) + I br
+ 0x0021ab08, // n0x00aa c0x0000 (---------------) + I bradesco
+ 0x0021fc0b, // n0x00ab c0x0000 (---------------) + I bridgestone
+ 0x0021ef88, // n0x00ac c0x0000 (---------------) + I broadway
+ 0x00220086, // n0x00ad c0x0000 (---------------) + I broker
+ 0x00221247, // n0x00ae c0x0000 (---------------) + I brother
+ 0x002230c8, // n0x00af c0x0000 (---------------) + I brussels
+ 0x0aa311c2, // n0x00b0 c0x002a (n0x076b-n0x0770) + I bs
+ 0x0ae1d7c2, // n0x00b1 c0x002b (n0x0770-n0x0775) + I bt
+ 0x002ce848, // n0x00b2 c0x0000 (---------------) + I budapest
+ 0x002338c7, // n0x00b3 c0x0000 (---------------) + I bugatti
+ 0x002dfcc5, // n0x00b4 c0x0000 (---------------) + I build
+ 0x002dfcc8, // n0x00b5 c0x0000 (---------------) + I builders
+ 0x002ac908, // n0x00b6 c0x0000 (---------------) + I business
+ 0x00393043, // n0x00b7 c0x0000 (---------------) + I buy
+ 0x00229f84, // n0x00b8 c0x0000 (---------------) + I buzz
+ 0x00364282, // n0x00b9 c0x0000 (---------------) + I bv
+ 0x0b22a802, // n0x00ba c0x002c (n0x0775-n0x0777) + I bw
+ 0x0b602902, // n0x00bb c0x002d (n0x0777-n0x077b) + I by
+ 0x0be2b202, // n0x00bc c0x002f (n0x077c-n0x0782) + I bz
+ 0x0022b203, // n0x00bd c0x0000 (---------------) + I bzh
+ 0x0c200302, // n0x00be c0x0030 (n0x0782-n0x0793) + I ca
+ 0x0030f803, // n0x00bf c0x0000 (---------------) + I cab
+ 0x00200304, // n0x00c0 c0x0000 (---------------) + I cafe
+ 0x00217203, // n0x00c1 c0x0000 (---------------) + I cal
+ 0x00391944, // n0x00c2 c0x0000 (---------------) + I call
+ 0x00225dcb, // n0x00c3 c0x0000 (---------------) + I calvinklein
+ 0x0031b3c6, // n0x00c4 c0x0000 (---------------) + I camera
+ 0x0023bf44, // n0x00c5 c0x0000 (---------------) + I camp
+ 0x0029008e, // n0x00c6 c0x0000 (---------------) + I cancerresearch
+ 0x00333445, // n0x00c7 c0x0000 (---------------) + I canon
+ 0x002a9308, // n0x00c8 c0x0000 (---------------) + I capetown
+ 0x002ca4c7, // n0x00c9 c0x0000 (---------------) + I capital
+ 0x002ca4ca, // n0x00ca c0x0000 (---------------) + I capitalone
+ 0x0023e283, // n0x00cb c0x0000 (---------------) + I car
+ 0x00265e07, // n0x00cc c0x0000 (---------------) + I caravan
+ 0x002d6ac5, // n0x00cd c0x0000 (---------------) + I cards
+ 0x002a5344, // n0x00ce c0x0000 (---------------) + I care
+ 0x002a5346, // n0x00cf c0x0000 (---------------) + I career
+ 0x002a5347, // n0x00d0 c0x0000 (---------------) + I careers
+ 0x002b6284, // n0x00d1 c0x0000 (---------------) + I cars
+ 0x00350687, // n0x00d2 c0x0000 (---------------) + I cartier
+ 0x00203cc4, // n0x00d3 c0x0000 (---------------) + I casa
+ 0x002108c4, // n0x00d4 c0x0000 (---------------) + I case
+ 0x002108c6, // n0x00d5 c0x0000 (---------------) + I caseih
+ 0x002c7944, // n0x00d6 c0x0000 (---------------) + I cash
+ 0x00351546, // n0x00d7 c0x0000 (---------------) + I casino
+ 0x0020c383, // n0x00d8 c0x0000 (---------------) + I cat
+ 0x00233688, // n0x00d9 c0x0000 (---------------) + I catering
+ 0x00242e43, // n0x00da c0x0000 (---------------) + I cba
+ 0x0023e003, // n0x00db c0x0000 (---------------) + I cbn
+ 0x00388044, // n0x00dc c0x0000 (---------------) + I cbre
+ 0x0038c903, // n0x00dd c0x0000 (---------------) + I cbs
+ 0x0c61db82, // n0x00de c0x0031 (n0x0793-n0x0797) + I cc
+ 0x0ca39702, // n0x00df c0x0032 (n0x0797-n0x0798) + I cd
+ 0x00202ec3, // n0x00e0 c0x0000 (---------------) + I ceb
+ 0x00204206, // n0x00e1 c0x0000 (---------------) + I center
+ 0x0023bbc3, // n0x00e2 c0x0000 (---------------) + I ceo
+ 0x00312604, // n0x00e3 c0x0000 (---------------) + I cern
+ 0x0ce12ac2, // n0x00e4 c0x0033 (n0x0798-n0x0799) + I cf
+ 0x00212ac3, // n0x00e5 c0x0000 (---------------) + I cfa
+ 0x00374e83, // n0x00e6 c0x0000 (---------------) + I cfd
+ 0x00219182, // n0x00e7 c0x0000 (---------------) + I cg
+ 0x0d2058c2, // n0x00e8 c0x0034 (n0x0799-n0x079a) + I ch
+ 0x002b5806, // n0x00e9 c0x0000 (---------------) + I chanel
+ 0x00236cc7, // n0x00ea c0x0000 (---------------) + I channel
+ 0x00332285, // n0x00eb c0x0000 (---------------) + I chase
+ 0x00322a84, // n0x00ec c0x0000 (---------------) + I chat
+ 0x0027f485, // n0x00ed c0x0000 (---------------) + I cheap
+ 0x00389d87, // n0x00ee c0x0000 (---------------) + I chintai
+ 0x002a9945, // n0x00ef c0x0000 (---------------) + I chloe
+ 0x002f9e89, // n0x00f0 c0x0000 (---------------) + I christmas
+ 0x002fb446, // n0x00f1 c0x0000 (---------------) + I chrome
+ 0x002fcf88, // n0x00f2 c0x0000 (---------------) + I chrysler
+ 0x00332186, // n0x00f3 c0x0000 (---------------) + I church
+ 0x0d6080c2, // n0x00f4 c0x0035 (n0x079a-n0x07a9) + I ci
+ 0x0036b488, // n0x00f5 c0x0000 (---------------) + I cipriani
+ 0x00337906, // n0x00f6 c0x0000 (---------------) + I circle
+ 0x002080c5, // n0x00f7 c0x0000 (---------------) + I cisco
+ 0x0034e707, // n0x00f8 c0x0000 (---------------) + I citadel
+ 0x00351444, // n0x00f9 c0x0000 (---------------) + I citi
+ 0x00351445, // n0x00fa c0x0000 (---------------) + I citic
+ 0x0027e804, // n0x00fb c0x0000 (---------------) + I city
+ 0x0027e808, // n0x00fc c0x0000 (---------------) + I cityeats
+ 0x0da08e82, // n0x00fd c0x0036 (n0x07a9-n0x07aa)* o I ck
+ 0x0de02502, // n0x00fe c0x0037 (n0x07aa-n0x07af) + I cl
+ 0x003753c6, // n0x00ff c0x0000 (---------------) + I claims
+ 0x0033d548, // n0x0100 c0x0000 (---------------) + I cleaning
+ 0x00376805, // n0x0101 c0x0000 (---------------) + I click
+ 0x00382e06, // n0x0102 c0x0000 (---------------) + I clinic
+ 0x00385448, // n0x0103 c0x0000 (---------------) + I clinique
+ 0x0039bf48, // n0x0104 c0x0000 (---------------) + I clothing
+ 0x0022b985, // n0x0105 c0x0000 (---------------) + I cloud
+ 0x00202504, // n0x0106 c0x0000 (---------------) + I club
+ 0x0035aac7, // n0x0107 c0x0000 (---------------) + I clubmed
+ 0x0e255882, // n0x0108 c0x0038 (n0x07af-n0x07b3) + I cm
+ 0x0e61a142, // n0x0109 c0x0039 (n0x07b3-n0x07e0) + I cn
+ 0x0fe08182, // n0x010a c0x003f (n0x07e5-n0x07f2) + I co
+ 0x0033c805, // n0x010b c0x0000 (---------------) + I coach
+ 0x002932c5, // n0x010c c0x0000 (---------------) + I codes
+ 0x003623c6, // n0x010d c0x0000 (---------------) + I coffee
+ 0x0025d8c7, // n0x010e c0x0000 (---------------) + I college
+ 0x0021dbc7, // n0x010f c0x0000 (---------------) + I cologne
+ 0x1062edc3, // n0x0110 c0x0041 (n0x07f3-n0x08bf) + I com
+ 0x002d2dc7, // n0x0111 c0x0000 (---------------) + I comcast
+ 0x0022edc8, // n0x0112 c0x0000 (---------------) + I commbank
+ 0x0022f149, // n0x0113 c0x0000 (---------------) + I community
+ 0x0036c4c7, // n0x0114 c0x0000 (---------------) + I company
+ 0x0022f707, // n0x0115 c0x0000 (---------------) + I compare
+ 0x00230608, // n0x0116 c0x0000 (---------------) + I computer
+ 0x00230e06, // n0x0117 c0x0000 (---------------) + I comsec
+ 0x002314c6, // n0x0118 c0x0000 (---------------) + I condos
+ 0x0023224c, // n0x0119 c0x0000 (---------------) + I construction
+ 0x00232dca, // n0x011a c0x0000 (---------------) + I consulting
+ 0x00233287, // n0x011b c0x0000 (---------------) + I contact
+ 0x00235c8b, // n0x011c c0x0000 (---------------) + I contractors
+ 0x00236b07, // n0x011d c0x0000 (---------------) + I cooking
+ 0x00236b0e, // n0x011e c0x0000 (---------------) + I cookingchannel
+ 0x00237604, // n0x011f c0x0000 (---------------) + I cool
+ 0x00238284, // n0x0120 c0x0000 (---------------) + I coop
+ 0x00239e47, // n0x0121 c0x0000 (---------------) + I corsica
+ 0x00337c87, // n0x0122 c0x0000 (---------------) + I country
+ 0x0023c846, // n0x0123 c0x0000 (---------------) + I coupon
+ 0x0023c847, // n0x0124 c0x0000 (---------------) + I coupons
+ 0x0023cf87, // n0x0125 c0x0000 (---------------) + I courses
+ 0x11a11e82, // n0x0126 c0x0046 (n0x08dd-n0x08e4) + I cr
+ 0x0023e106, // n0x0127 c0x0000 (---------------) + I credit
+ 0x0023e10a, // n0x0128 c0x0000 (---------------) + I creditcard
+ 0x0023e38b, // n0x0129 c0x0000 (---------------) + I creditunion
+ 0x0023eec7, // n0x012a c0x0000 (---------------) + I cricket
+ 0x0023f885, // n0x012b c0x0000 (---------------) + I crown
+ 0x0023f9c3, // n0x012c c0x0000 (---------------) + I crs
+ 0x00240107, // n0x012d c0x0000 (---------------) + I cruises
+ 0x002267c3, // n0x012e c0x0000 (---------------) + I csc
+ 0x11e17882, // n0x012f c0x0047 (n0x08e4-n0x08ea) + I cu
+ 0x0024070a, // n0x0130 c0x0000 (---------------) + I cuisinella
+ 0x1234f802, // n0x0131 c0x0048 (n0x08ea-n0x08eb) + I cv
+ 0x126c7542, // n0x0132 c0x0049 (n0x08eb-n0x08ef) + I cw
+ 0x12a41b02, // n0x0133 c0x004a (n0x08ef-n0x08f1) + I cx
+ 0x12e394c2, // n0x0134 c0x004b (n0x08f1-n0x08fe) o I cy
+ 0x00242545, // n0x0135 c0x0000 (---------------) + I cymru
+ 0x00242c44, // n0x0136 c0x0000 (---------------) + I cyou
+ 0x13633fc2, // n0x0137 c0x004d (n0x08ff-n0x0900) + I cz
+ 0x002ff2c5, // n0x0138 c0x0000 (---------------) + I dabur
+ 0x0025cd83, // n0x0139 c0x0000 (---------------) + I dad
+ 0x0033dcc5, // n0x013a c0x0000 (---------------) + I dance
+ 0x00205dc4, // n0x013b c0x0000 (---------------) + I date
+ 0x00202c46, // n0x013c c0x0000 (---------------) + I dating
+ 0x0020b286, // n0x013d c0x0000 (---------------) + I datsun
+ 0x00282ac3, // n0x013e c0x0000 (---------------) + I day
+ 0x00227e04, // n0x013f c0x0000 (---------------) + I dclk
+ 0x002bd543, // n0x0140 c0x0000 (---------------) + I dds
+ 0x13a00402, // n0x0141 c0x004e (n0x0900-n0x0908) + I de
+ 0x00235884, // n0x0142 c0x0000 (---------------) + I deal
+ 0x0035b046, // n0x0143 c0x0000 (---------------) + I dealer
+ 0x00235885, // n0x0144 c0x0000 (---------------) + I deals
+ 0x00396686, // n0x0145 c0x0000 (---------------) + I degree
+ 0x0034e808, // n0x0146 c0x0000 (---------------) + I delivery
+ 0x00253184, // n0x0147 c0x0000 (---------------) + I dell
+ 0x00319dc8, // n0x0148 c0x0000 (---------------) + I deloitte
+ 0x00331185, // n0x0149 c0x0000 (---------------) + I delta
+ 0x00218588, // n0x014a c0x0000 (---------------) + I democrat
+ 0x002a3206, // n0x014b c0x0000 (---------------) + I dental
+ 0x002ae147, // n0x014c c0x0000 (---------------) + I dentist
+ 0x00222ec4, // n0x014d c0x0000 (---------------) + I desi
+ 0x00222ec6, // n0x014e c0x0000 (---------------) + I design
+ 0x0036d143, // n0x014f c0x0000 (---------------) + I dev
+ 0x00375943, // n0x0150 c0x0000 (---------------) + I dhl
+ 0x002c13c8, // n0x0151 c0x0000 (---------------) + I diamonds
+ 0x0030c184, // n0x0152 c0x0000 (---------------) + I diet
+ 0x00363507, // n0x0153 c0x0000 (---------------) + I digital
+ 0x002477c6, // n0x0154 c0x0000 (---------------) + I direct
+ 0x002477c9, // n0x0155 c0x0000 (---------------) + I directory
+ 0x0031e708, // n0x0156 c0x0000 (---------------) + I discount
+ 0x0033b448, // n0x0157 c0x0000 (---------------) + I discover
+ 0x00224b44, // n0x0158 c0x0000 (---------------) + I dish
+ 0x0022b5c2, // n0x0159 c0x0000 (---------------) + I dj
+ 0x13e00ac2, // n0x015a c0x004f (n0x0908-n0x0909) + I dk
+ 0x14214142, // n0x015b c0x0050 (n0x0909-n0x090e) + I dm
+ 0x002a1143, // n0x015c c0x0000 (---------------) + I dnp
+ 0x14606e42, // n0x015d c0x0051 (n0x090e-n0x0918) + I do
+ 0x00226744, // n0x015e c0x0000 (---------------) + I docs
+ 0x0035db05, // n0x015f c0x0000 (---------------) + I dodge
+ 0x0022c703, // n0x0160 c0x0000 (---------------) + I dog
+ 0x00232704, // n0x0161 c0x0000 (---------------) + I doha
+ 0x002f90c7, // n0x0162 c0x0000 (---------------) + I domains
+ 0x00237d86, // n0x0163 c0x0000 (---------------) + I doosan
+ 0x003227c3, // n0x0164 c0x0000 (---------------) + I dot
+ 0x0035f648, // n0x0165 c0x0000 (---------------) + I download
+ 0x0030e985, // n0x0166 c0x0000 (---------------) + I drive
+ 0x002839c4, // n0x0167 c0x0000 (---------------) + I dstv
+ 0x00361303, // n0x0168 c0x0000 (---------------) + I dtv
+ 0x002743c5, // n0x0169 c0x0000 (---------------) + I dubai
+ 0x00274504, // n0x016a c0x0000 (---------------) + I duck
+ 0x00350386, // n0x016b c0x0000 (---------------) + I dunlop
+ 0x00362ac4, // n0x016c c0x0000 (---------------) + I duns
+ 0x00393b06, // n0x016d c0x0000 (---------------) + I dupont
+ 0x003a3706, // n0x016e c0x0000 (---------------) + I durban
+ 0x00306f44, // n0x016f c0x0000 (---------------) + I dvag
+ 0x00210183, // n0x0170 c0x0000 (---------------) + I dwg
+ 0x14aa1402, // n0x0171 c0x0052 (n0x0918-n0x0920) + I dz
+ 0x00279b05, // n0x0172 c0x0000 (---------------) + I earth
+ 0x00215783, // n0x0173 c0x0000 (---------------) + I eat
+ 0x14e03c82, // n0x0174 c0x0053 (n0x0920-n0x092c) + I ec
+ 0x0022bcc5, // n0x0175 c0x0000 (---------------) + I edeka
+ 0x002349c3, // n0x0176 c0x0000 (---------------) + I edu
+ 0x002349c9, // n0x0177 c0x0000 (---------------) + I education
+ 0x1520b0c2, // n0x0178 c0x0054 (n0x092c-n0x0936) + I ee
+ 0x15a05a42, // n0x0179 c0x0056 (n0x0937-n0x0940) + I eg
+ 0x00301c05, // n0x017a c0x0000 (---------------) + I email
+ 0x002ae506, // n0x017b c0x0000 (---------------) + I emerck
+ 0x0031fc47, // n0x017c c0x0000 (---------------) + I emerson
+ 0x002c9306, // n0x017d c0x0000 (---------------) + I energy
+ 0x0032a108, // n0x017e c0x0000 (---------------) + I engineer
+ 0x0032a10b, // n0x017f c0x0000 (---------------) + I engineering
+ 0x0020424b, // n0x0180 c0x0000 (---------------) + I enterprises
+ 0x003940c5, // n0x0181 c0x0000 (---------------) + I epost
+ 0x003963c5, // n0x0182 c0x0000 (---------------) + I epson
+ 0x002bf809, // n0x0183 c0x0000 (---------------) + I equipment
+ 0x01600442, // n0x0184 c0x0005 (---------------)* o I er
+ 0x003061c8, // n0x0185 c0x0000 (---------------) + I ericsson
+ 0x00218044, // n0x0186 c0x0000 (---------------) + I erni
+ 0x16202242, // n0x0187 c0x0058 (n0x0941-n0x0946) + I es
+ 0x0027c5c3, // n0x0188 c0x0000 (---------------) + I esq
+ 0x002bf586, // n0x0189 c0x0000 (---------------) + I estate
+ 0x002032c8, // n0x018a c0x0000 (---------------) + I esurance
+ 0x16a0a502, // n0x018b c0x005a (n0x0947-n0x094f) + I et
+ 0x00222708, // n0x018c c0x0000 (---------------) + I etisalat
+ 0x00224542, // n0x018d c0x0000 (---------------) + I eu
+ 0x0027df0a, // n0x018e c0x0000 (---------------) + I eurovision
+ 0x00224543, // n0x018f c0x0000 (---------------) + I eus
+ 0x0036d186, // n0x0190 c0x0000 (---------------) + I events
+ 0x0020ac48, // n0x0191 c0x0000 (---------------) + I everbank
+ 0x0035b488, // n0x0192 c0x0000 (---------------) + I exchange
+ 0x002a8546, // n0x0193 c0x0000 (---------------) + I expert
+ 0x0037ffc7, // n0x0194 c0x0000 (---------------) + I exposed
+ 0x00240c87, // n0x0195 c0x0000 (---------------) + I express
+ 0x00334f4a, // n0x0196 c0x0000 (---------------) + I extraspace
+ 0x002d5204, // n0x0197 c0x0000 (---------------) + I fage
+ 0x00212b04, // n0x0198 c0x0000 (---------------) + I fail
+ 0x00336b89, // n0x0199 c0x0000 (---------------) + I fairwinds
+ 0x0034c105, // n0x019a c0x0000 (---------------) + I faith
+ 0x0036c346, // n0x019b c0x0000 (---------------) + I family
+ 0x0020dd43, // n0x019c c0x0000 (---------------) + I fan
+ 0x002da484, // n0x019d c0x0000 (---------------) + I fans
+ 0x002a0f44, // n0x019e c0x0000 (---------------) + I farm
+ 0x00302a87, // n0x019f c0x0000 (---------------) + I farmers
+ 0x0022a887, // n0x01a0 c0x0000 (---------------) + I fashion
+ 0x002e01c4, // n0x01a1 c0x0000 (---------------) + I fast
+ 0x002120c5, // n0x01a2 c0x0000 (---------------) + I fedex
+ 0x00362488, // n0x01a3 c0x0000 (---------------) + I feedback
+ 0x002f6847, // n0x01a4 c0x0000 (---------------) + I ferrari
+ 0x00333207, // n0x01a5 c0x0000 (---------------) + I ferrero
+ 0x16e0e002, // n0x01a6 c0x005b (n0x094f-n0x0952) + I fi
+ 0x0028b4c4, // n0x01a7 c0x0000 (---------------) + I fiat
+ 0x003570c8, // n0x01a8 c0x0000 (---------------) + I fidelity
+ 0x00359c84, // n0x01a9 c0x0000 (---------------) + I fido
+ 0x00243ec4, // n0x01aa c0x0000 (---------------) + I film
+ 0x00244285, // n0x01ab c0x0000 (---------------) + I final
+ 0x002443c7, // n0x01ac c0x0000 (---------------) + I finance
+ 0x0020e009, // n0x01ad c0x0000 (---------------) + I financial
+ 0x00245884, // n0x01ae c0x0000 (---------------) + I fire
+ 0x00247509, // n0x01af c0x0000 (---------------) + I firestone
+ 0x00247a08, // n0x01b0 c0x0000 (---------------) + I firmdale
+ 0x00248504, // n0x01b1 c0x0000 (---------------) + I fish
+ 0x00248507, // n0x01b2 c0x0000 (---------------) + I fishing
+ 0x00248b03, // n0x01b3 c0x0000 (---------------) + I fit
+ 0x00249187, // n0x01b4 c0x0000 (---------------) + I fitness
+ 0x0162f3c2, // n0x01b5 c0x0005 (---------------)* o I fj
+ 0x016a4482, // n0x01b6 c0x0005 (---------------)* o I fk
+ 0x00249846, // n0x01b7 c0x0000 (---------------) + I flickr
+ 0x00249f07, // n0x01b8 c0x0000 (---------------) + I flights
+ 0x0024a344, // n0x01b9 c0x0000 (---------------) + I flir
+ 0x0024b087, // n0x01ba c0x0000 (---------------) + I florist
+ 0x0024bbc7, // n0x01bb c0x0000 (---------------) + I flowers
+ 0x0024c108, // n0x01bc c0x0000 (---------------) + I flsmidth
+ 0x0024c783, // n0x01bd c0x0000 (---------------) + I fly
+ 0x0023d4c2, // n0x01be c0x0000 (---------------) + I fm
+ 0x0023bb02, // n0x01bf c0x0000 (---------------) + I fo
+ 0x0024dc83, // n0x01c0 c0x0000 (---------------) + I foo
+ 0x0024dc8b, // n0x01c1 c0x0000 (---------------) + I foodnetwork
+ 0x00307808, // n0x01c2 c0x0000 (---------------) + I football
+ 0x00395184, // n0x01c3 c0x0000 (---------------) + I ford
+ 0x0024f2c5, // n0x01c4 c0x0000 (---------------) + I forex
+ 0x00252587, // n0x01c5 c0x0000 (---------------) + I forsale
+ 0x00253c85, // n0x01c6 c0x0000 (---------------) + I forum
+ 0x002b370a, // n0x01c7 c0x0000 (---------------) + I foundation
+ 0x00255183, // n0x01c8 c0x0000 (---------------) + I fox
+ 0x17207fc2, // n0x01c9 c0x005c (n0x0952-n0x096a) + I fr
+ 0x00256cc9, // n0x01ca c0x0000 (---------------) + I fresenius
+ 0x0025a843, // n0x01cb c0x0000 (---------------) + I frl
+ 0x0025a907, // n0x01cc c0x0000 (---------------) + I frogans
+ 0x0022c9c9, // n0x01cd c0x0000 (---------------) + I frontdoor
+ 0x0038c308, // n0x01ce c0x0000 (---------------) + I frontier
+ 0x00235583, // n0x01cf c0x0000 (---------------) + I ftr
+ 0x00273507, // n0x01d0 c0x0000 (---------------) + I fujitsu
+ 0x00273a09, // n0x01d1 c0x0000 (---------------) + I fujixerox
+ 0x00279fc4, // n0x01d2 c0x0000 (---------------) + I fund
+ 0x0027ae09, // n0x01d3 c0x0000 (---------------) + I furniture
+ 0x00280b06, // n0x01d4 c0x0000 (---------------) + I futbol
+ 0x00281d43, // n0x01d5 c0x0000 (---------------) + I fyi
+ 0x002006c2, // n0x01d6 c0x0000 (---------------) + I ga
+ 0x0021c683, // n0x01d7 c0x0000 (---------------) + I gal
+ 0x00397d47, // n0x01d8 c0x0000 (---------------) + I gallery
+ 0x00337a85, // n0x01d9 c0x0000 (---------------) + I gallo
+ 0x002dca86, // n0x01da c0x0000 (---------------) + I gallup
+ 0x0029f084, // n0x01db c0x0000 (---------------) + I game
+ 0x00318cc5, // n0x01dc c0x0000 (---------------) + I games
+ 0x00213683, // n0x01dd c0x0000 (---------------) + I gap
+ 0x002172c6, // n0x01de c0x0000 (---------------) + I garden
+ 0x00209582, // n0x01df c0x0000 (---------------) + I gb
+ 0x00383ac4, // n0x01e0 c0x0000 (---------------) + I gbiz
+ 0x00221f82, // n0x01e1 c0x0000 (---------------) + I gd
+ 0x002290c3, // n0x01e2 c0x0000 (---------------) + I gdn
+ 0x17603982, // n0x01e3 c0x005d (n0x096a-n0x0971) + I ge
+ 0x00244ac3, // n0x01e4 c0x0000 (---------------) + I gea
+ 0x00216ac4, // n0x01e5 c0x0000 (---------------) + I gent
+ 0x00216ac7, // n0x01e6 c0x0000 (---------------) + I genting
+ 0x0031e0c6, // n0x01e7 c0x0000 (---------------) + I george
+ 0x00255682, // n0x01e8 c0x0000 (---------------) + I gf
+ 0x17a4c482, // n0x01e9 c0x005e (n0x0971-n0x0974) + I gg
+ 0x0033b684, // n0x01ea c0x0000 (---------------) + I ggee
+ 0x17e45f82, // n0x01eb c0x005f (n0x0974-n0x0979) + I gh
+ 0x18212e42, // n0x01ec c0x0060 (n0x0979-n0x097f) + I gi
+ 0x00342584, // n0x01ed c0x0000 (---------------) + I gift
+ 0x00342585, // n0x01ee c0x0000 (---------------) + I gifts
+ 0x00219605, // n0x01ef c0x0000 (---------------) + I gives
+ 0x00261a06, // n0x01f0 c0x0000 (---------------) + I giving
+ 0x18602d82, // n0x01f1 c0x0061 (n0x097f-n0x0984) + I gl
+ 0x00319d05, // n0x01f2 c0x0000 (---------------) + I glade
+ 0x003959c5, // n0x01f3 c0x0000 (---------------) + I glass
+ 0x0027d403, // n0x01f4 c0x0000 (---------------) + I gle
+ 0x00205586, // n0x01f5 c0x0000 (---------------) + I global
+ 0x00206d05, // n0x01f6 c0x0000 (---------------) + I globo
+ 0x0020f7c2, // n0x01f7 c0x0000 (---------------) + I gm
+ 0x00331dc5, // n0x01f8 c0x0000 (---------------) + I gmail
+ 0x00210203, // n0x01f9 c0x0000 (---------------) + I gmo
+ 0x00214b43, // n0x01fa c0x0000 (---------------) + I gmx
+ 0x18a07e42, // n0x01fb c0x0062 (n0x0984-n0x098a) + I gn
+ 0x0025cd07, // n0x01fc c0x0000 (---------------) + I godaddy
+ 0x002f6ac4, // n0x01fd c0x0000 (---------------) + I gold
+ 0x002f6ac9, // n0x01fe c0x0000 (---------------) + I goldpoint
+ 0x00247c04, // n0x01ff c0x0000 (---------------) + I golf
+ 0x002799c3, // n0x0200 c0x0000 (---------------) + I goo
+ 0x0031bd09, // n0x0201 c0x0000 (---------------) + I goodhands
+ 0x002799c8, // n0x0202 c0x0000 (---------------) + I goodyear
+ 0x00293144, // n0x0203 c0x0000 (---------------) + I goog
+ 0x00293146, // n0x0204 c0x0000 (---------------) + I google
+ 0x0029ae43, // n0x0205 c0x0000 (---------------) + I gop
+ 0x00214503, // n0x0206 c0x0000 (---------------) + I got
+ 0x002d6804, // n0x0207 c0x0000 (---------------) + I gotv
+ 0x00275003, // n0x0208 c0x0000 (---------------) + I gov
+ 0x18edee02, // n0x0209 c0x0063 (n0x098a-n0x0990) + I gp
+ 0x002f83c2, // n0x020a c0x0000 (---------------) + I gq
+ 0x192089c2, // n0x020b c0x0064 (n0x0990-n0x0996) + I gr
+ 0x00315bc8, // n0x020c c0x0000 (---------------) + I grainger
+ 0x002ff848, // n0x020d c0x0000 (---------------) + I graphics
+ 0x00387486, // n0x020e c0x0000 (---------------) + I gratis
+ 0x0036bb45, // n0x020f c0x0000 (---------------) + I green
+ 0x00219c05, // n0x0210 c0x0000 (---------------) + I gripe
+ 0x0020eb45, // n0x0211 c0x0000 (---------------) + I group
+ 0x002242c2, // n0x0212 c0x0000 (---------------) + I gs
+ 0x19627d02, // n0x0213 c0x0065 (n0x0996-n0x099d) + I gt
+ 0x01605a82, // n0x0214 c0x0005 (---------------)* o I gu
+ 0x0034c288, // n0x0215 c0x0000 (---------------) + I guardian
+ 0x0036b3c5, // n0x0216 c0x0000 (---------------) + I gucci
+ 0x002d9b84, // n0x0217 c0x0000 (---------------) + I guge
+ 0x0036d085, // n0x0218 c0x0000 (---------------) + I guide
+ 0x0039c107, // n0x0219 c0x0000 (---------------) + I guitars
+ 0x00330644, // n0x021a c0x0000 (---------------) + I guru
+ 0x0020fb82, // n0x021b c0x0000 (---------------) + I gw
+ 0x19a01642, // n0x021c c0x0066 (n0x099d-n0x09a0) + I gy
+ 0x00205407, // n0x021d c0x0000 (---------------) + I hamburg
+ 0x0037e0c7, // n0x021e c0x0000 (---------------) + I hangout
+ 0x0035d204, // n0x021f c0x0000 (---------------) + I haus
+ 0x00288843, // n0x0220 c0x0000 (---------------) + I hbo
+ 0x00242d84, // n0x0221 c0x0000 (---------------) + I hdfc
+ 0x00242d88, // n0x0222 c0x0000 (---------------) + I hdfcbank
+ 0x002a51c6, // n0x0223 c0x0000 (---------------) + I health
+ 0x002a51ca, // n0x0224 c0x0000 (---------------) + I healthcare
+ 0x0020dec4, // n0x0225 c0x0000 (---------------) + I help
+ 0x0020c9c8, // n0x0226 c0x0000 (---------------) + I helsinki
+ 0x0024c384, // n0x0227 c0x0000 (---------------) + I here
+ 0x00221346, // n0x0228 c0x0000 (---------------) + I hermes
+ 0x00289a84, // n0x0229 c0x0000 (---------------) + I hgtv
+ 0x0033cb06, // n0x022a c0x0000 (---------------) + I hiphop
+ 0x00229cc9, // n0x022b c0x0000 (---------------) + I hisamitsu
+ 0x00299f47, // n0x022c c0x0000 (---------------) + I hitachi
+ 0x0036b303, // n0x022d c0x0000 (---------------) + I hiv
+ 0x19e0e882, // n0x022e c0x0067 (n0x09a0-n0x09b8) + I hk
+ 0x002667c3, // n0x022f c0x0000 (---------------) + I hkt
+ 0x0020c742, // n0x0230 c0x0000 (---------------) + I hm
+ 0x1a218902, // n0x0231 c0x0068 (n0x09b8-n0x09be) + I hn
+ 0x002d8e06, // n0x0232 c0x0000 (---------------) + I hockey
+ 0x00358bc8, // n0x0233 c0x0000 (---------------) + I holdings
+ 0x0029c0c7, // n0x0234 c0x0000 (---------------) + I holiday
+ 0x0026c749, // n0x0235 c0x0000 (---------------) + I homedepot
+ 0x00290d49, // n0x0236 c0x0000 (---------------) + I homegoods
+ 0x0029cc05, // n0x0237 c0x0000 (---------------) + I homes
+ 0x0029cc09, // n0x0238 c0x0000 (---------------) + I homesense
+ 0x0029e045, // n0x0239 c0x0000 (---------------) + I honda
+ 0x0029e7c9, // n0x023a c0x0000 (---------------) + I honeywell
+ 0x0029f5c5, // n0x023b c0x0000 (---------------) + I horse
+ 0x00207a84, // n0x023c c0x0000 (---------------) + I host
+ 0x0029f1c7, // n0x023d c0x0000 (---------------) + I hosting
+ 0x0022fac3, // n0x023e c0x0000 (---------------) + I hot
+ 0x0029fcc7, // n0x023f c0x0000 (---------------) + I hoteles
+ 0x002a0287, // n0x0240 c0x0000 (---------------) + I hotmail
+ 0x00299885, // n0x0241 c0x0000 (---------------) + I house
+ 0x00296183, // n0x0242 c0x0000 (---------------) + I how
+ 0x1a632882, // n0x0243 c0x0069 (n0x09be-n0x09c3) + I hr
+ 0x00385384, // n0x0244 c0x0000 (---------------) + I hsbc
+ 0x1aa45fc2, // n0x0245 c0x006a (n0x09c3-n0x09d4) + I ht
+ 0x00255803, // n0x0246 c0x0000 (---------------) + I htc
+ 0x1ae0d0c2, // n0x0247 c0x006b (n0x09d4-n0x09f4) + I hu
+ 0x002ef4c6, // n0x0248 c0x0000 (---------------) + I hughes
+ 0x003785c5, // n0x0249 c0x0000 (---------------) + I hyatt
+ 0x002a4107, // n0x024a c0x0000 (---------------) + I hyundai
+ 0x00264103, // n0x024b c0x0000 (---------------) + I ibm
+ 0x0035bac4, // n0x024c c0x0000 (---------------) + I icbc
+ 0x00202e83, // n0x024d c0x0000 (---------------) + I ice
+ 0x002ce583, // n0x024e c0x0000 (---------------) + I icu
+ 0x1b205d82, // n0x024f c0x006c (n0x09f4-n0x09ff) + I id
+ 0x1ba00042, // n0x0250 c0x006e (n0x0a00-n0x0a02) + I ie
+ 0x00364304, // n0x0251 c0x0000 (---------------) + I ieee
+ 0x0023d483, // n0x0252 c0x0000 (---------------) + I ifm
+ 0x002bc045, // n0x0253 c0x0000 (---------------) + I iinet
+ 0x002bbe85, // n0x0254 c0x0000 (---------------) + I ikano
+ 0x1be02f82, // n0x0255 c0x006f (n0x0a02-n0x0a0a) + I il
+ 0x1c607242, // n0x0256 c0x0071 (n0x0a0b-n0x0a12) + I im
+ 0x0024fd06, // n0x0257 c0x0000 (---------------) + I imamat
+ 0x00307644, // n0x0258 c0x0000 (---------------) + I imdb
+ 0x00207784, // n0x0259 c0x0000 (---------------) + I immo
+ 0x0020778a, // n0x025a c0x0000 (---------------) + I immobilien
+ 0x1ce020c2, // n0x025b c0x0073 (n0x0a14-n0x0a21) + I in
+ 0x0036568a, // n0x025c c0x0000 (---------------) + I industries
+ 0x00389f88, // n0x025d c0x0000 (---------------) + I infiniti
+ 0x1d38a144, // n0x025e c0x0074 (n0x0a21-n0x0a2b) + I info
+ 0x00202d03, // n0x025f c0x0000 (---------------) + I ing
+ 0x00202743, // n0x0260 c0x0000 (---------------) + I ink
+ 0x0030dd89, // n0x0261 c0x0000 (---------------) + I institute
+ 0x00239c09, // n0x0262 c0x0000 (---------------) + I insurance
+ 0x002f91c6, // n0x0263 c0x0000 (---------------) + I insure
+ 0x1d66f683, // n0x0264 c0x0075 (n0x0a2b-n0x0a2c) + I int
+ 0x002f6c45, // n0x0265 c0x0000 (---------------) + I intel
+ 0x002fd58d, // n0x0266 c0x0000 (---------------) + I international
+ 0x002efac6, // n0x0267 c0x0000 (---------------) + I intuit
+ 0x0020218b, // n0x0268 c0x0000 (---------------) + I investments
+ 0x1da00542, // n0x0269 c0x0076 (n0x0a2c-n0x0a31) + I io
+ 0x00253a88, // n0x026a c0x0000 (---------------) + I ipiranga
+ 0x1de048c2, // n0x026b c0x0077 (n0x0a31-n0x0a37) + I iq
+ 0x1e204082, // n0x026c c0x0078 (n0x0a37-n0x0a40) + I ir
+ 0x00291085, // n0x026d c0x0000 (---------------) + I irish
+ 0x1e601a02, // n0x026e c0x0079 (n0x0a40-n0x0a48) + I is
+ 0x00253f07, // n0x026f c0x0000 (---------------) + I iselect
+ 0x0027d787, // n0x0270 c0x0000 (---------------) + I ismaili
+ 0x00201a03, // n0x0271 c0x0000 (---------------) + I ist
+ 0x002ec0c8, // n0x0272 c0x0000 (---------------) + I istanbul
+ 0x1ea06f82, // n0x0273 c0x007a (n0x0a48-n0x0bb9) + I it
+ 0x0026a984, // n0x0274 c0x0000 (---------------) + I itau
+ 0x00206f83, // n0x0275 c0x0000 (---------------) + I itv
+ 0x00320745, // n0x0276 c0x0000 (---------------) + I iveco
+ 0x00366503, // n0x0277 c0x0000 (---------------) + I iwc
+ 0x002c3306, // n0x0278 c0x0000 (---------------) + I jaguar
+ 0x00317a04, // n0x0279 c0x0000 (---------------) + I java
+ 0x0023dfc3, // n0x027a c0x0000 (---------------) + I jcb
+ 0x00266b43, // n0x027b c0x0000 (---------------) + I jcp
+ 0x1ee07602, // n0x027c c0x007b (n0x0bb9-n0x0bbc) + I je
+ 0x0022b604, // n0x027d c0x0000 (---------------) + I jeep
+ 0x0034a685, // n0x027e c0x0000 (---------------) + I jetzt
+ 0x0035e0c7, // n0x027f c0x0000 (---------------) + I jewelry
+ 0x002716c3, // n0x0280 c0x0000 (---------------) + I jio
+ 0x002a49c3, // n0x0281 c0x0000 (---------------) + I jlc
+ 0x002a6003, // n0x0282 c0x0000 (---------------) + I jll
+ 0x01675282, // n0x0283 c0x0005 (---------------)* o I jm
+ 0x002a60c3, // n0x0284 c0x0000 (---------------) + I jmp
+ 0x002a7143, // n0x0285 c0x0000 (---------------) + I jnj
+ 0x1f201842, // n0x0286 c0x007c (n0x0bbc-n0x0bc4) + I jo
+ 0x002cd804, // n0x0287 c0x0000 (---------------) + I jobs
+ 0x00274746, // n0x0288 c0x0000 (---------------) + I joburg
+ 0x0020a143, // n0x0289 c0x0000 (---------------) + I jot
+ 0x002a74c3, // n0x028a c0x0000 (---------------) + I joy
+ 0x1f6a8bc2, // n0x028b c0x007d (n0x0bc4-n0x0c33) + I jp
+ 0x002a8bc8, // n0x028c c0x0000 (---------------) + I jpmorgan
+ 0x002a9a84, // n0x028d c0x0000 (---------------) + I jprs
+ 0x00247e06, // n0x028e c0x0000 (---------------) + I juegos
+ 0x002a9fc7, // n0x028f c0x0000 (---------------) + I juniper
+ 0x0020e386, // n0x0290 c0x0000 (---------------) + I kaufen
+ 0x002ad104, // n0x0291 c0x0000 (---------------) + I kddi
+ 0x2d202bc2, // n0x0292 c0x00b4 (n0x12c7-n0x12c8)* o I ke
+ 0x0022f98b, // n0x0293 c0x0000 (---------------) + I kerryhotels
+ 0x002dc18e, // n0x0294 c0x0000 (---------------) + I kerrylogistics
+ 0x0022014f, // n0x0295 c0x0000 (---------------) + I kerryproperties
+ 0x00325a03, // n0x0296 c0x0000 (---------------) + I kfh
+ 0x2dab1882, // n0x0297 c0x00b6 (n0x12c9-n0x12cf) + I kg
+ 0x01600a02, // n0x0298 c0x0005 (---------------)* o I kh
+ 0x2de03142, // n0x0299 c0x00b7 (n0x12cf-n0x12d6) + I ki
+ 0x0022a743, // n0x029a c0x0000 (---------------) + I kia
+ 0x00229403, // n0x029b c0x0000 (---------------) + I kim
+ 0x00305fc6, // n0x029c c0x0000 (---------------) + I kinder
+ 0x0032fd86, // n0x029d c0x0000 (---------------) + I kindle
+ 0x00318fc7, // n0x029e c0x0000 (---------------) + I kitchen
+ 0x002e2c84, // n0x029f c0x0000 (---------------) + I kiwi
+ 0x2e22ccc2, // n0x02a0 c0x00b8 (n0x12d6-n0x12e7) + I km
+ 0x2e651942, // n0x02a1 c0x00b9 (n0x12e7-n0x12eb) + I kn
+ 0x002a5b85, // n0x02a2 c0x0000 (---------------) + I koeln
+ 0x0028e9c7, // n0x02a3 c0x0000 (---------------) + I komatsu
+ 0x002e4886, // n0x02a4 c0x0000 (---------------) + I kosher
+ 0x2ea08742, // n0x02a5 c0x00ba (n0x12eb-n0x12f1) + I kp
+ 0x00208744, // n0x02a6 c0x0000 (---------------) + I kpmg
+ 0x0036e383, // n0x02a7 c0x0000 (---------------) + I kpn
+ 0x2ee076c2, // n0x02a8 c0x00bb (n0x12f1-n0x130f) + I kr
+ 0x00349b03, // n0x02a9 c0x0000 (---------------) + I krd
+ 0x003a0504, // n0x02aa c0x0000 (---------------) + I kred
+ 0x002b17c9, // n0x02ab c0x0000 (---------------) + I kuokgroup
+ 0x016b82c2, // n0x02ac c0x0005 (---------------)* o I kw
+ 0x2f23ae42, // n0x02ad c0x00bc (n0x130f-n0x1314) + I ky
+ 0x00261cc6, // n0x02ae c0x0000 (---------------) + I kyknet
+ 0x002b8805, // n0x02af c0x0000 (---------------) + I kyoto
+ 0x2f70a942, // n0x02b0 c0x00bd (n0x1314-n0x131a) + I kz
+ 0x2fa03842, // n0x02b1 c0x00be (n0x131a-n0x1323) + I la
+ 0x00336007, // n0x02b2 c0x0000 (---------------) + I lacaixa
+ 0x0020ba89, // n0x02b3 c0x0000 (---------------) + I ladbrokes
+ 0x0034d68b, // n0x02b4 c0x0000 (---------------) + I lamborghini
+ 0x00240a45, // n0x02b5 c0x0000 (---------------) + I lamer
+ 0x00369b89, // n0x02b6 c0x0000 (---------------) + I lancaster
+ 0x002ba286, // n0x02b7 c0x0000 (---------------) + I lancia
+ 0x00251487, // n0x02b8 c0x0000 (---------------) + I lancome
+ 0x00204e44, // n0x02b9 c0x0000 (---------------) + I land
+ 0x002bc689, // n0x02ba c0x0000 (---------------) + I landrover
+ 0x00353a07, // n0x02bb c0x0000 (---------------) + I lanxess
+ 0x0027c207, // n0x02bc c0x0000 (---------------) + I lasalle
+ 0x00203843, // n0x02bd c0x0000 (---------------) + I lat
+ 0x002247c6, // n0x02be c0x0000 (---------------) + I latino
+ 0x002cac47, // n0x02bf c0x0000 (---------------) + I latrobe
+ 0x00209183, // n0x02c0 c0x0000 (---------------) + I law
+ 0x0025d606, // n0x02c1 c0x0000 (---------------) + I lawyer
+ 0x2fe02fc2, // n0x02c2 c0x00bf (n0x1323-n0x1328) + I lb
+ 0x30234c42, // n0x02c3 c0x00c0 (n0x1328-n0x132e) + I lc
+ 0x0021f403, // n0x02c4 c0x0000 (---------------) + I lds
+ 0x0027c345, // n0x02c5 c0x0000 (---------------) + I lease
+ 0x002acc07, // n0x02c6 c0x0000 (---------------) + I leclerc
+ 0x00351906, // n0x02c7 c0x0000 (---------------) + I lefrak
+ 0x00337a05, // n0x02c8 c0x0000 (---------------) + I legal
+ 0x00247b84, // n0x02c9 c0x0000 (---------------) + I lego
+ 0x002d8305, // n0x02ca c0x0000 (---------------) + I lexus
+ 0x002df5c4, // n0x02cb c0x0000 (---------------) + I lgbt
+ 0x306019c2, // n0x02cc c0x00c1 (n0x132e-n0x132f) + I li
+ 0x00310b07, // n0x02cd c0x0000 (---------------) + I liaison
+ 0x002b6a44, // n0x02ce c0x0000 (---------------) + I lidl
+ 0x00239b04, // n0x02cf c0x0000 (---------------) + I life
+ 0x00239b0d, // n0x02d0 c0x0000 (---------------) + I lifeinsurance
+ 0x0023ec89, // n0x02d1 c0x0000 (---------------) + I lifestyle
+ 0x00245f08, // n0x02d2 c0x0000 (---------------) + I lighting
+ 0x002510c4, // n0x02d3 c0x0000 (---------------) + I like
+ 0x00263dc5, // n0x02d4 c0x0000 (---------------) + I lilly
+ 0x0030e807, // n0x02d5 c0x0000 (---------------) + I limited
+ 0x00342804, // n0x02d6 c0x0000 (---------------) + I limo
+ 0x00351ec7, // n0x02d7 c0x0000 (---------------) + I lincoln
+ 0x0039ae45, // n0x02d8 c0x0000 (---------------) + I linde
+ 0x00202704, // n0x02d9 c0x0000 (---------------) + I link
+ 0x002cfd05, // n0x02da c0x0000 (---------------) + I lipsy
+ 0x00259504, // n0x02db c0x0000 (---------------) + I live
+ 0x002d8446, // n0x02dc c0x0000 (---------------) + I living
+ 0x003581c5, // n0x02dd c0x0000 (---------------) + I lixil
+ 0x30a08702, // n0x02de c0x00c2 (n0x132f-n0x133e) + I lk
+ 0x00211544, // n0x02df c0x0000 (---------------) + I loan
+ 0x00211545, // n0x02e0 c0x0000 (---------------) + I loans
+ 0x00373906, // n0x02e1 c0x0000 (---------------) + I locker
+ 0x00337b45, // n0x02e2 c0x0000 (---------------) + I locus
+ 0x002cdfc4, // n0x02e3 c0x0000 (---------------) + I loft
+ 0x002bf2c3, // n0x02e4 c0x0000 (---------------) + I lol
+ 0x00310546, // n0x02e5 c0x0000 (---------------) + I london
+ 0x0021a6c5, // n0x02e6 c0x0000 (---------------) + I lotte
+ 0x00221a85, // n0x02e7 c0x0000 (---------------) + I lotto
+ 0x00229244, // n0x02e8 c0x0000 (---------------) + I love
+ 0x0020df43, // n0x02e9 c0x0000 (---------------) + I lpl
+ 0x0020df4c, // n0x02ea c0x0000 (---------------) + I lplfinancial
+ 0x30e81442, // n0x02eb c0x00c3 (n0x133e-n0x1343) + I lr
+ 0x31201c02, // n0x02ec c0x00c4 (n0x1343-n0x1345) + I ls
+ 0x31608bc2, // n0x02ed c0x00c5 (n0x1345-n0x1347) + I lt
+ 0x00342703, // n0x02ee c0x0000 (---------------) + I ltd
+ 0x00342704, // n0x02ef c0x0000 (---------------) + I ltda
+ 0x31a02542, // n0x02f0 c0x00c6 (n0x1347-n0x1348) + I lu
+ 0x002dc548, // n0x02f1 c0x0000 (---------------) + I lundbeck
+ 0x002dcb45, // n0x02f2 c0x0000 (---------------) + I lupin
+ 0x00339384, // n0x02f3 c0x0000 (---------------) + I luxe
+ 0x00231e46, // n0x02f4 c0x0000 (---------------) + I luxury
+ 0x31e07302, // n0x02f5 c0x00c7 (n0x1348-n0x1351) + I lv
+ 0x3223dcc2, // n0x02f6 c0x00c8 (n0x1351-n0x135a) + I ly
+ 0x32600182, // n0x02f7 c0x00c9 (n0x135a-n0x1360) + I ma
+ 0x002eca45, // n0x02f8 c0x0000 (---------------) + I macys
+ 0x00306e06, // n0x02f9 c0x0000 (---------------) + I madrid
+ 0x002a0e84, // n0x02fa c0x0000 (---------------) + I maif
+ 0x00204bc6, // n0x02fb c0x0000 (---------------) + I maison
+ 0x00307fc6, // n0x02fc c0x0000 (---------------) + I makeup
+ 0x00237243, // n0x02fd c0x0000 (---------------) + I man
+ 0x0036c88a, // n0x02fe c0x0000 (---------------) + I management
+ 0x00237245, // n0x02ff c0x0000 (---------------) + I mango
+ 0x0022dc46, // n0x0300 c0x0000 (---------------) + I market
+ 0x002e5f89, // n0x0301 c0x0000 (---------------) + I marketing
+ 0x002318c7, // n0x0302 c0x0000 (---------------) + I markets
+ 0x0020ce08, // n0x0303 c0x0000 (---------------) + I marriott
+ 0x0028e5c9, // n0x0304 c0x0000 (---------------) + I marshalls
+ 0x0020d888, // n0x0305 c0x0000 (---------------) + I maserati
+ 0x00339746, // n0x0306 c0x0000 (---------------) + I mattel
+ 0x0022ee83, // n0x0307 c0x0000 (---------------) + I mba
+ 0x32ad2e42, // n0x0308 c0x00ca (n0x1360-n0x1362) + I mc
+ 0x003770c3, // n0x0309 c0x0000 (---------------) + I mcd
+ 0x003770c9, // n0x030a c0x0000 (---------------) + I mcdonalds
+ 0x00309e08, // n0x030b c0x0000 (---------------) + I mckinsey
+ 0x32e47ac2, // n0x030c c0x00cb (n0x1362-n0x1363) + I md
+ 0x33202302, // n0x030d c0x00cc (n0x1363-n0x136b) + I me
+ 0x00211c43, // n0x030e c0x0000 (---------------) + I med
+ 0x002fb545, // n0x030f c0x0000 (---------------) + I media
+ 0x00262d84, // n0x0310 c0x0000 (---------------) + I meet
+ 0x002dae09, // n0x0311 c0x0000 (---------------) + I melbourne
+ 0x002ae4c4, // n0x0312 c0x0000 (---------------) + I meme
+ 0x00338b08, // n0x0313 c0x0000 (---------------) + I memorial
+ 0x00202303, // n0x0314 c0x0000 (---------------) + I men
+ 0x00226244, // n0x0315 c0x0000 (---------------) + I menu
+ 0x00322c03, // n0x0316 c0x0000 (---------------) + I meo
+ 0x00239a47, // n0x0317 c0x0000 (---------------) + I metlife
+ 0x336087c2, // n0x0318 c0x00cd (n0x136b-n0x1374) + I mg
+ 0x0024ee82, // n0x0319 c0x0000 (---------------) + I mh
+ 0x00383105, // n0x031a c0x0000 (---------------) + I miami
+ 0x002634c9, // n0x031b c0x0000 (---------------) + I microsoft
+ 0x00215b43, // n0x031c c0x0000 (---------------) + I mil
+ 0x00274d84, // n0x031d c0x0000 (---------------) + I mini
+ 0x002fd544, // n0x031e c0x0000 (---------------) + I mint
+ 0x00229483, // n0x031f c0x0000 (---------------) + I mit
+ 0x00275e4a, // n0x0320 c0x0000 (---------------) + I mitsubishi
+ 0x33b65542, // n0x0321 c0x00ce (n0x1374-n0x137c) + I mk
+ 0x33e11502, // n0x0322 c0x00cf (n0x137c-n0x1383) + I ml
+ 0x002bb4c3, // n0x0323 c0x0000 (---------------) + I mlb
+ 0x00367c83, // n0x0324 c0x0000 (---------------) + I mls
+ 0x016077c2, // n0x0325 c0x0005 (---------------)* o I mm
+ 0x0036acc3, // n0x0326 c0x0000 (---------------) + I mma
+ 0x3421d882, // n0x0327 c0x00d0 (n0x1383-n0x1387) + I mn
+ 0x0021d884, // n0x0328 c0x0000 (---------------) + I mnet
+ 0x34603ec2, // n0x0329 c0x00d1 (n0x1387-n0x138c) + I mo
+ 0x00207804, // n0x032a c0x0000 (---------------) + I mobi
+ 0x002d2346, // n0x032b c0x0000 (---------------) + I mobily
+ 0x00264dc4, // n0x032c c0x0000 (---------------) + I moda
+ 0x00248203, // n0x032d c0x0000 (---------------) + I moe
+ 0x00278c03, // n0x032e c0x0000 (---------------) + I moi
+ 0x0020ed83, // n0x032f c0x0000 (---------------) + I mom
+ 0x0023e706, // n0x0330 c0x0000 (---------------) + I monash
+ 0x002c5005, // n0x0331 c0x0000 (---------------) + I money
+ 0x002bef07, // n0x0332 c0x0000 (---------------) + I monster
+ 0x00251349, // n0x0333 c0x0000 (---------------) + I montblanc
+ 0x002c2245, // n0x0334 c0x0000 (---------------) + I mopar
+ 0x002c4f46, // n0x0335 c0x0000 (---------------) + I mormon
+ 0x002c58c8, // n0x0336 c0x0000 (---------------) + I mortgage
+ 0x002c5ac6, // n0x0337 c0x0000 (---------------) + I moscow
+ 0x00270fc4, // n0x0338 c0x0000 (---------------) + I moto
+ 0x0029214b, // n0x0339 c0x0000 (---------------) + I motorcycles
+ 0x002c7003, // n0x033a c0x0000 (---------------) + I mov
+ 0x002c7005, // n0x033b c0x0000 (---------------) + I movie
+ 0x002c7148, // n0x033c c0x0000 (---------------) + I movistar
+ 0x00226dc2, // n0x033d c0x0000 (---------------) + I mp
+ 0x00336302, // n0x033e c0x0000 (---------------) + I mq
+ 0x34a425c2, // n0x033f c0x00d2 (n0x138c-n0x138e) + I mr
+ 0x34e02482, // n0x0340 c0x00d3 (n0x138e-n0x1393) + I ms
+ 0x00263cc3, // n0x0341 c0x0000 (---------------) + I msd
+ 0x35235702, // n0x0342 c0x00d4 (n0x1393-n0x1397) + I mt
+ 0x00265803, // n0x0343 c0x0000 (---------------) + I mtn
+ 0x002c7444, // n0x0344 c0x0000 (---------------) + I mtpc
+ 0x002c7c03, // n0x0345 c0x0000 (---------------) + I mtr
+ 0x35a01f42, // n0x0346 c0x00d6 (n0x1398-n0x139f) + I mu
+ 0x002c990b, // n0x0347 c0x0000 (---------------) + I multichoice
+ 0x35ecc746, // n0x0348 c0x00d7 (n0x139f-n0x15c3) + I museum
+ 0x00238746, // n0x0349 c0x0000 (---------------) + I mutual
+ 0x002ccd88, // n0x034a c0x0000 (---------------) + I mutuelle
+ 0x362878c2, // n0x034b c0x00d8 (n0x15c3-n0x15d1) + I mv
+ 0x3660f2c2, // n0x034c c0x00d9 (n0x15d1-n0x15dc) + I mw
+ 0x36a14b82, // n0x034d c0x00da (n0x15dc-n0x15e2) + I mx
+ 0x36e2a6c2, // n0x034e c0x00db (n0x15e2-n0x15ea) + I my
+ 0x37212c42, // n0x034f c0x00dc (n0x15ea-n0x15eb)* o I mz
+ 0x00212c4b, // n0x0350 c0x0000 (---------------) + I mzansimagic
+ 0x376005c2, // n0x0351 c0x00dd (n0x15eb-n0x15fc) + I na
+ 0x002156c3, // n0x0352 c0x0000 (---------------) + I nab
+ 0x0035b3c5, // n0x0353 c0x0000 (---------------) + I nadex
+ 0x0022d886, // n0x0354 c0x0000 (---------------) + I nagoya
+ 0x37a7ca84, // n0x0355 c0x00de (n0x15fc-n0x15fe) + I name
+ 0x003036c7, // n0x0356 c0x0000 (---------------) + I naspers
+ 0x0035ae4a, // n0x0357 c0x0000 (---------------) + I nationwide
+ 0x00308d86, // n0x0358 c0x0000 (---------------) + I natura
+ 0x00394304, // n0x0359 c0x0000 (---------------) + I navy
+ 0x00255983, // n0x035a c0x0000 (---------------) + I nba
+ 0x38603402, // n0x035b c0x00e1 (n0x1600-n0x1601) + I nc
+ 0x00203282, // n0x035c c0x0000 (---------------) + I ne
+ 0x00322303, // n0x035d c0x0000 (---------------) + I nec
+ 0x38a1d8c3, // n0x035e c0x00e2 (n0x1601-n0x1632) + I net
+ 0x0030a7c7, // n0x035f c0x0000 (---------------) + I netbank
+ 0x003580c7, // n0x0360 c0x0000 (---------------) + I netflix
+ 0x0024dd87, // n0x0361 c0x0000 (---------------) + I network
+ 0x00224507, // n0x0362 c0x0000 (---------------) + I neustar
+ 0x0021dd03, // n0x0363 c0x0000 (---------------) + I new
+ 0x002ca6ca, // n0x0364 c0x0000 (---------------) + I newholland
+ 0x0021fe44, // n0x0365 c0x0000 (---------------) + I news
+ 0x002476c4, // n0x0366 c0x0000 (---------------) + I next
+ 0x002476ca, // n0x0367 c0x0000 (---------------) + I nextdirect
+ 0x00266385, // n0x0368 c0x0000 (---------------) + I nexus
+ 0x39e037c2, // n0x0369 c0x00e7 (n0x163a-n0x1644) + I nf
+ 0x002037c3, // n0x036a c0x0000 (---------------) + I nfl
+ 0x3a202d42, // n0x036b c0x00e8 (n0x1644-n0x164d) + I ng
+ 0x002084c3, // n0x036c c0x0000 (---------------) + I ngo
+ 0x00266783, // n0x036d c0x0000 (---------------) + I nhk
+ 0x0160a7c2, // n0x036e c0x0005 (---------------)* o I ni
+ 0x00382ec4, // n0x036f c0x0000 (---------------) + I nico
+ 0x0021c3c4, // n0x0370 c0x0000 (---------------) + I nike
+ 0x0020d185, // n0x0371 c0x0000 (---------------) + I nikon
+ 0x002c6d85, // n0x0372 c0x0000 (---------------) + I ninja
+ 0x0036bc46, // n0x0373 c0x0000 (---------------) + I nissan
+ 0x3aa3e082, // n0x0374 c0x00ea (n0x164e-n0x1651) + I nl
+ 0x3ae00d82, // n0x0375 c0x00eb (n0x1651-n0x1927) + I no
+ 0x002f5685, // n0x0376 c0x0000 (---------------) + I nokia
+ 0x00238452, // n0x0377 c0x0000 (---------------) + I northwesternmutual
+ 0x003099c6, // n0x0378 c0x0000 (---------------) + I norton
+ 0x00217c83, // n0x0379 c0x0000 (---------------) + I now
+ 0x00294486, // n0x037a c0x0000 (---------------) + I nowruz
+ 0x00217c85, // n0x037b c0x0000 (---------------) + I nowtv
+ 0x01600c02, // n0x037c c0x0005 (---------------)* o I np
+ 0x4329d602, // n0x037d c0x010c (n0x194f-n0x1956) + I nr
+ 0x002f3043, // n0x037e c0x0000 (---------------) + I nra
+ 0x00332603, // n0x037f c0x0000 (---------------) + I nrw
+ 0x003702c3, // n0x0380 c0x0000 (---------------) + I ntt
+ 0x43609702, // n0x0381 c0x010d (n0x1956-n0x1959) + I nu
+ 0x0036c603, // n0x0382 c0x0000 (---------------) + I nyc
+ 0x43a09a82, // n0x0383 c0x010e (n0x1959-n0x1969) + I nz
+ 0x00207843, // n0x0384 c0x0000 (---------------) + I obi
+ 0x002cd848, // n0x0385 c0x0000 (---------------) + I observer
+ 0x0021f703, // n0x0386 c0x0000 (---------------) + I off
+ 0x0021f706, // n0x0387 c0x0000 (---------------) + I office
+ 0x00390f07, // n0x0388 c0x0000 (---------------) + I okinawa
+ 0x0020e9c6, // n0x0389 c0x0000 (---------------) + I olayan
+ 0x0020e9cb, // n0x038a c0x0000 (---------------) + I olayangroup
+ 0x00394247, // n0x038b c0x0000 (---------------) + I oldnavy
+ 0x00385184, // n0x038c c0x0000 (---------------) + I ollo
+ 0x44201f02, // n0x038d c0x0110 (n0x196a-n0x1973) + I om
+ 0x002dc9c5, // n0x038e c0x0000 (---------------) + I omega
+ 0x00203f03, // n0x038f c0x0000 (---------------) + I one
+ 0x0027c9c3, // n0x0390 c0x0000 (---------------) + I ong
+ 0x00316943, // n0x0391 c0x0000 (---------------) + I onl
+ 0x00316946, // n0x0392 c0x0000 (---------------) + I online
+ 0x0039648a, // n0x0393 c0x0000 (---------------) + I onyourside
+ 0x00285703, // n0x0394 c0x0000 (---------------) + I ooo
+ 0x00239284, // n0x0395 c0x0000 (---------------) + I open
+ 0x0033d486, // n0x0396 c0x0000 (---------------) + I oracle
+ 0x00391646, // n0x0397 c0x0000 (---------------) + I orange
+ 0x44629a83, // n0x0398 c0x0111 (n0x1973-n0x19ae) + I org
+ 0x002a8c87, // n0x0399 c0x0000 (---------------) + I organic
+ 0x002d4d8d, // n0x039a c0x0000 (---------------) + I orientexpress
+ 0x00371dc7, // n0x039b c0x0000 (---------------) + I origins
+ 0x00291e85, // n0x039c c0x0000 (---------------) + I osaka
+ 0x0025de06, // n0x039d c0x0000 (---------------) + I otsuka
+ 0x0020cf43, // n0x039e c0x0000 (---------------) + I ott
+ 0x002057c3, // n0x039f c0x0000 (---------------) + I ovh
+ 0x45e0ec42, // n0x03a0 c0x0117 (n0x19eb-n0x19f6) + I pa
+ 0x00323c44, // n0x03a1 c0x0000 (---------------) + I page
+ 0x002dff0c, // n0x03a2 c0x0000 (---------------) + I pamperedchef
+ 0x00233489, // n0x03a3 c0x0000 (---------------) + I panasonic
+ 0x0023b907, // n0x03a4 c0x0000 (---------------) + I panerai
+ 0x00252285, // n0x03a5 c0x0000 (---------------) + I paris
+ 0x0027f584, // n0x03a6 c0x0000 (---------------) + I pars
+ 0x0037ec88, // n0x03a7 c0x0000 (---------------) + I partners
+ 0x0029aec5, // n0x03a8 c0x0000 (---------------) + I parts
+ 0x0029c3c5, // n0x03a9 c0x0000 (---------------) + I party
+ 0x002b09c9, // n0x03aa c0x0000 (---------------) + I passagens
+ 0x002b7203, // n0x03ab c0x0000 (---------------) + I pay
+ 0x002b7204, // n0x03ac c0x0000 (---------------) + I payu
+ 0x002c74c4, // n0x03ad c0x0000 (---------------) + I pccw
+ 0x46209a02, // n0x03ae c0x0118 (n0x19f6-n0x19fe) + I pe
+ 0x0020e283, // n0x03af c0x0000 (---------------) + I pet
+ 0x466d0882, // n0x03b0 c0x0119 (n0x19fe-n0x1a01) + I pf
+ 0x002d0886, // n0x03b1 c0x0000 (---------------) + I pfizer
+ 0x01708882, // n0x03b2 c0x0005 (---------------)* o I pg
+ 0x46acd182, // n0x03b3 c0x011a (n0x1a01-n0x1a09) + I ph
+ 0x002ec948, // n0x03b4 c0x0000 (---------------) + I pharmacy
+ 0x002cfc47, // n0x03b5 c0x0000 (---------------) + I philips
+ 0x002cd185, // n0x03b6 c0x0000 (---------------) + I photo
+ 0x002d02cb, // n0x03b7 c0x0000 (---------------) + I photography
+ 0x002cd186, // n0x03b8 c0x0000 (---------------) + I photos
+ 0x002d04c6, // n0x03b9 c0x0000 (---------------) + I physio
+ 0x002d0646, // n0x03ba c0x0000 (---------------) + I piaget
+ 0x00220ac4, // n0x03bb c0x0000 (---------------) + I pics
+ 0x002d0a06, // n0x03bc c0x0000 (---------------) + I pictet
+ 0x002d0ec8, // n0x03bd c0x0000 (---------------) + I pictures
+ 0x0023c003, // n0x03be c0x0000 (---------------) + I pid
+ 0x00219b43, // n0x03bf c0x0000 (---------------) + I pin
+ 0x00219b44, // n0x03c0 c0x0000 (---------------) + I ping
+ 0x002d1784, // n0x03c1 c0x0000 (---------------) + I pink
+ 0x002d1bc7, // n0x03c2 c0x0000 (---------------) + I pioneer
+ 0x002d2645, // n0x03c3 c0x0000 (---------------) + I pizza
+ 0x46ed2782, // n0x03c4 c0x011b (n0x1a09-n0x1a17) + I pk
+ 0x47206582, // n0x03c5 c0x011c (n0x1a17-n0x1abc) + I pl
+ 0x00206585, // n0x03c6 c0x0000 (---------------) + I place
+ 0x0028bd84, // n0x03c7 c0x0000 (---------------) + I play
+ 0x002d470b, // n0x03c8 c0x0000 (---------------) + I playstation
+ 0x002d6648, // n0x03c9 c0x0000 (---------------) + I plumbing
+ 0x002d6ec4, // n0x03ca c0x0000 (---------------) + I plus
+ 0x00208782, // n0x03cb c0x0000 (---------------) + I pm
+ 0x47aa98c2, // n0x03cc c0x011e (n0x1aeb-n0x1af0) + I pn
+ 0x002a98c3, // n0x03cd c0x0000 (---------------) + I pnc
+ 0x002d7304, // n0x03ce c0x0000 (---------------) + I pohl
+ 0x002d7405, // n0x03cf c0x0000 (---------------) + I poker
+ 0x002d7947, // n0x03d0 c0x0000 (---------------) + I politie
+ 0x002d96c4, // n0x03d1 c0x0000 (---------------) + I porn
+ 0x0035d304, // n0x03d2 c0x0000 (---------------) + I post
+ 0x47e04382, // n0x03d3 c0x011f (n0x1af0-n0x1afd) + I pr
+ 0x00352e09, // n0x03d4 c0x0000 (---------------) + I pramerica
+ 0x002da0c5, // n0x03d5 c0x0000 (---------------) + I praxi
+ 0x00240d05, // n0x03d6 c0x0000 (---------------) + I press
+ 0x002dad45, // n0x03d7 c0x0000 (---------------) + I prime
+ 0x48220283, // n0x03d8 c0x0120 (n0x1afd-n0x1b04) + I pro
+ 0x002db644, // n0x03d9 c0x0000 (---------------) + I prod
+ 0x002db64b, // n0x03da c0x0000 (---------------) + I productions
+ 0x002dba84, // n0x03db c0x0000 (---------------) + I prof
+ 0x002dbd0b, // n0x03dc c0x0000 (---------------) + I progressive
+ 0x002dd745, // n0x03dd c0x0000 (---------------) + I promo
+ 0x0022028a, // n0x03de c0x0000 (---------------) + I properties
+ 0x002ddec8, // n0x03df c0x0000 (---------------) + I property
+ 0x002de0ca, // n0x03e0 c0x0000 (---------------) + I protection
+ 0x002de343, // n0x03e1 c0x0000 (---------------) + I pru
+ 0x002de34a, // n0x03e2 c0x0000 (---------------) + I prudential
+ 0x48626e02, // n0x03e3 c0x0121 (n0x1b04-n0x1b0b) + I ps
+ 0x48a835c2, // n0x03e4 c0x0122 (n0x1b0b-n0x1b14) + I pt
+ 0x00287e83, // n0x03e5 c0x0000 (---------------) + I pub
+ 0x48f94e82, // n0x03e6 c0x0123 (n0x1b14-n0x1b1a) + I pw
+ 0x4932e602, // n0x03e7 c0x0124 (n0x1b1a-n0x1b21) + I py
+ 0x49714502, // n0x03e8 c0x0125 (n0x1b21-n0x1b2a) + I qa
+ 0x002df444, // n0x03e9 c0x0000 (---------------) + I qpon
+ 0x0021a006, // n0x03ea c0x0000 (---------------) + I quebec
+ 0x00204905, // n0x03eb c0x0000 (---------------) + I quest
+ 0x002dfac3, // n0x03ec c0x0000 (---------------) + I qvc
+ 0x00379c06, // n0x03ed c0x0000 (---------------) + I racing
+ 0x0021a384, // n0x03ee c0x0000 (---------------) + I raid
+ 0x49a04d82, // n0x03ef c0x0126 (n0x1b2a-n0x1b2e) + I re
+ 0x002cf684, // n0x03f0 c0x0000 (---------------) + I read
+ 0x002bf48a, // n0x03f1 c0x0000 (---------------) + I realestate
+ 0x0033dec7, // n0x03f2 c0x0000 (---------------) + I realtor
+ 0x00378406, // n0x03f3 c0x0000 (---------------) + I realty
+ 0x00226f07, // n0x03f4 c0x0000 (---------------) + I recipes
+ 0x0023e143, // n0x03f5 c0x0000 (---------------) + I red
+ 0x003a0548, // n0x03f6 c0x0000 (---------------) + I redstone
+ 0x003381cb, // n0x03f7 c0x0000 (---------------) + I redumbrella
+ 0x0035c805, // n0x03f8 c0x0000 (---------------) + I rehab
+ 0x002c7a85, // n0x03f9 c0x0000 (---------------) + I reise
+ 0x002c7a86, // n0x03fa c0x0000 (---------------) + I reisen
+ 0x002f92c4, // n0x03fb c0x0000 (---------------) + I reit
+ 0x00374788, // n0x03fc c0x0000 (---------------) + I reliance
+ 0x00215383, // n0x03fd c0x0000 (---------------) + I ren
+ 0x002b5304, // n0x03fe c0x0000 (---------------) + I rent
+ 0x003352c7, // n0x03ff c0x0000 (---------------) + I rentals
+ 0x002b1f86, // n0x0400 c0x0000 (---------------) + I repair
+ 0x002eff06, // n0x0401 c0x0000 (---------------) + I report
+ 0x0028feca, // n0x0402 c0x0000 (---------------) + I republican
+ 0x00247584, // n0x0403 c0x0000 (---------------) + I rest
+ 0x00364b8a, // n0x0404 c0x0000 (---------------) + I restaurant
+ 0x00323806, // n0x0405 c0x0000 (---------------) + I review
+ 0x00323807, // n0x0406 c0x0000 (---------------) + I reviews
+ 0x0024f347, // n0x0407 c0x0000 (---------------) + I rexroth
+ 0x0026c104, // n0x0408 c0x0000 (---------------) + I rich
+ 0x0026c109, // n0x0409 c0x0000 (---------------) + I richardli
+ 0x0025c745, // n0x040a c0x0000 (---------------) + I ricoh
+ 0x002ad44b, // n0x040b c0x0000 (---------------) + I rightathome
+ 0x00250403, // n0x040c c0x0000 (---------------) + I ril
+ 0x0020cec3, // n0x040d c0x0000 (---------------) + I rio
+ 0x00219c43, // n0x040e c0x0000 (---------------) + I rip
+ 0x49e00cc2, // n0x040f c0x0127 (n0x1b2e-n0x1b3a) + I ro
+ 0x0026fb46, // n0x0410 c0x0000 (---------------) + I rocher
+ 0x00295f05, // n0x0411 c0x0000 (---------------) + I rocks
+ 0x002b2985, // n0x0412 c0x0000 (---------------) + I rodeo
+ 0x00395406, // n0x0413 c0x0000 (---------------) + I rogers
+ 0x0024a684, // n0x0414 c0x0000 (---------------) + I room
+ 0x4a20a642, // n0x0415 c0x0128 (n0x1b3a-n0x1b41) + I rs
+ 0x002dfe44, // n0x0416 c0x0000 (---------------) + I rsvp
+ 0x4a611ec2, // n0x0417 c0x0129 (n0x1b41-n0x1bc5) + I ru
+ 0x00232804, // n0x0418 c0x0000 (---------------) + I ruhr
+ 0x00221d83, // n0x0419 c0x0000 (---------------) + I run
+ 0x4ab19802, // n0x041a c0x012a (n0x1bc5-n0x1bce) + I rw
+ 0x00319803, // n0x041b c0x0000 (---------------) + I rwe
+ 0x002a4b06, // n0x041c c0x0000 (---------------) + I ryukyu
+ 0x4ae02402, // n0x041d c0x012b (n0x1bce-n0x1bd6) + I sa
+ 0x002bd388, // n0x041e c0x0000 (---------------) + I saarland
+ 0x0039ac44, // n0x041f c0x0000 (---------------) + I safe
+ 0x0039ac46, // n0x0420 c0x0000 (---------------) + I safety
+ 0x002fe346, // n0x0421 c0x0000 (---------------) + I sakura
+ 0x00252644, // n0x0422 c0x0000 (---------------) + I sale
+ 0x003104c5, // n0x0423 c0x0000 (---------------) + I salon
+ 0x00202408, // n0x0424 c0x0000 (---------------) + I samsclub
+ 0x00206b87, // n0x0425 c0x0000 (---------------) + I samsung
+ 0x00244cc7, // n0x0426 c0x0000 (---------------) + I sandvik
+ 0x00244ccf, // n0x0427 c0x0000 (---------------) + I sandvikcoromant
+ 0x0028b3c6, // n0x0428 c0x0000 (---------------) + I sanofi
+ 0x00215843, // n0x0429 c0x0000 (---------------) + I sap
+ 0x00215844, // n0x042a c0x0000 (---------------) + I sapo
+ 0x00229184, // n0x042b c0x0000 (---------------) + I sarl
+ 0x00236443, // n0x042c c0x0000 (---------------) + I sas
+ 0x00221484, // n0x042d c0x0000 (---------------) + I save
+ 0x0039c4c4, // n0x042e c0x0000 (---------------) + I saxo
+ 0x4b229a02, // n0x042f c0x012c (n0x1bd6-n0x1bdb) + I sb
+ 0x00282803, // n0x0430 c0x0000 (---------------) + I sbi
+ 0x00231183, // n0x0431 c0x0000 (---------------) + I sbs
+ 0x4b6024c2, // n0x0432 c0x012d (n0x1bdb-n0x1be0) + I sc
+ 0x00254f03, // n0x0433 c0x0000 (---------------) + I sca
+ 0x00226803, // n0x0434 c0x0000 (---------------) + I scb
+ 0x00215d4a, // n0x0435 c0x0000 (---------------) + I schaeffler
+ 0x00233ac7, // n0x0436 c0x0000 (---------------) + I schmidt
+ 0x00231a4c, // n0x0437 c0x0000 (---------------) + I scholarships
+ 0x00231d06, // n0x0438 c0x0000 (---------------) + I school
+ 0x0023c9c6, // n0x0439 c0x0000 (---------------) + I schule
+ 0x0023d107, // n0x043a c0x0000 (---------------) + I schwarz
+ 0x00230a47, // n0x043b c0x0000 (---------------) + I science
+ 0x00243c89, // n0x043c c0x0000 (---------------) + I scjohnson
+ 0x0021ac44, // n0x043d c0x0000 (---------------) + I scor
+ 0x00208144, // n0x043e c0x0000 (---------------) + I scot
+ 0x4ba56ec2, // n0x043f c0x012e (n0x1be0-n0x1be8) + I sd
+ 0x4be01d42, // n0x0440 c0x012f (n0x1be8-n0x1c11) + I se
+ 0x00306844, // n0x0441 c0x0000 (---------------) + I seat
+ 0x0031c886, // n0x0442 c0x0000 (---------------) + I secure
+ 0x00230ec8, // n0x0443 c0x0000 (---------------) + I security
+ 0x0027c404, // n0x0444 c0x0000 (---------------) + I seek
+ 0x00253f46, // n0x0445 c0x0000 (---------------) + I select
+ 0x002c92c5, // n0x0446 c0x0000 (---------------) + I sener
+ 0x002069c8, // n0x0447 c0x0000 (---------------) + I services
+ 0x00204443, // n0x0448 c0x0000 (---------------) + I ses
+ 0x0024bd45, // n0x0449 c0x0000 (---------------) + I seven
+ 0x0024ec83, // n0x044a c0x0000 (---------------) + I sew
+ 0x00240e03, // n0x044b c0x0000 (---------------) + I sex
+ 0x00240e04, // n0x044c c0x0000 (---------------) + I sexy
+ 0x0024f9c3, // n0x044d c0x0000 (---------------) + I sfr
+ 0x4c266482, // n0x044e c0x0130 (n0x1c11-n0x1c18) + I sg
+ 0x4c601c42, // n0x044f c0x0131 (n0x1c18-n0x1c1e) + I sh
+ 0x002502c9, // n0x0450 c0x0000 (---------------) + I shangrila
+ 0x00251e85, // n0x0451 c0x0000 (---------------) + I sharp
+ 0x00254484, // n0x0452 c0x0000 (---------------) + I shaw
+ 0x00257245, // n0x0453 c0x0000 (---------------) + I shell
+ 0x00212444, // n0x0454 c0x0000 (---------------) + I shia
+ 0x002af887, // n0x0455 c0x0000 (---------------) + I shiksha
+ 0x00398385, // n0x0456 c0x0000 (---------------) + I shoes
+ 0x002aa606, // n0x0457 c0x0000 (---------------) + I shouji
+ 0x002ab744, // n0x0458 c0x0000 (---------------) + I show
+ 0x002ae348, // n0x0459 c0x0000 (---------------) + I showtime
+ 0x002b0bc7, // n0x045a c0x0000 (---------------) + I shriram
+ 0x4ca0ca82, // n0x045b c0x0132 (n0x1c1e-n0x1c1f) + I si
+ 0x003531c4, // n0x045c c0x0000 (---------------) + I silk
+ 0x002ec7c4, // n0x045d c0x0000 (---------------) + I sina
+ 0x0027d347, // n0x045e c0x0000 (---------------) + I singles
+ 0x00247244, // n0x045f c0x0000 (---------------) + I site
+ 0x00251cc2, // n0x0460 c0x0000 (---------------) + I sj
+ 0x4ce0e342, // n0x0461 c0x0133 (n0x1c1f-n0x1c20) + I sk
+ 0x0021cf83, // n0x0462 c0x0000 (---------------) + I ski
+ 0x00305f84, // n0x0463 c0x0000 (---------------) + I skin
+ 0x0023ae03, // n0x0464 c0x0000 (---------------) + I sky
+ 0x00265c85, // n0x0465 c0x0000 (---------------) + I skype
+ 0x4d217a82, // n0x0466 c0x0134 (n0x1c20-n0x1c25) + I sl
+ 0x002c97c5, // n0x0467 c0x0000 (---------------) + I sling
+ 0x00215b02, // n0x0468 c0x0000 (---------------) + I sm
+ 0x0034b7c5, // n0x0469 c0x0000 (---------------) + I smart
+ 0x00358d85, // n0x046a c0x0000 (---------------) + I smile
+ 0x4d612a42, // n0x046b c0x0135 (n0x1c25-n0x1c2d) + I sn
+ 0x00212a44, // n0x046c c0x0000 (---------------) + I sncf
+ 0x4da04c82, // n0x046d c0x0136 (n0x1c2d-n0x1c30) + I so
+ 0x002a1a46, // n0x046e c0x0000 (---------------) + I soccer
+ 0x00298406, // n0x046f c0x0000 (---------------) + I social
+ 0x00263608, // n0x0470 c0x0000 (---------------) + I softbank
+ 0x002b2f88, // n0x0471 c0x0000 (---------------) + I software
+ 0x002ef444, // n0x0472 c0x0000 (---------------) + I sohu
+ 0x002da545, // n0x0473 c0x0000 (---------------) + I solar
+ 0x002ef609, // n0x0474 c0x0000 (---------------) + I solutions
+ 0x0031fd44, // n0x0475 c0x0000 (---------------) + I song
+ 0x00396444, // n0x0476 c0x0000 (---------------) + I sony
+ 0x002566c3, // n0x0477 c0x0000 (---------------) + I soy
+ 0x00335085, // n0x0478 c0x0000 (---------------) + I space
+ 0x0037a7c7, // n0x0479 c0x0000 (---------------) + I spiegel
+ 0x00245b44, // n0x047a c0x0000 (---------------) + I spot
+ 0x0032cc4d, // n0x047b c0x0000 (---------------) + I spreadbetting
+ 0x00336d82, // n0x047c c0x0000 (---------------) + I sr
+ 0x00336d83, // n0x047d c0x0000 (---------------) + I srl
+ 0x00353b83, // n0x047e c0x0000 (---------------) + I srt
+ 0x4de01a42, // n0x047f c0x0137 (n0x1c30-n0x1c3c) + I st
+ 0x0037b645, // n0x0480 c0x0000 (---------------) + I stada
+ 0x00383287, // n0x0481 c0x0000 (---------------) + I staples
+ 0x002245c4, // n0x0482 c0x0000 (---------------) + I star
+ 0x002245c7, // n0x0483 c0x0000 (---------------) + I starhub
+ 0x0028e7c9, // n0x0484 c0x0000 (---------------) + I statebank
+ 0x002bf5c9, // n0x0485 c0x0000 (---------------) + I statefarm
+ 0x002e88c7, // n0x0486 c0x0000 (---------------) + I statoil
+ 0x0026f903, // n0x0487 c0x0000 (---------------) + I stc
+ 0x0026f908, // n0x0488 c0x0000 (---------------) + I stcgroup
+ 0x00292749, // n0x0489 c0x0000 (---------------) + I stockholm
+ 0x003613c7, // n0x048a c0x0000 (---------------) + I storage
+ 0x0038c985, // n0x048b c0x0000 (---------------) + I store
+ 0x002e0886, // n0x048c c0x0000 (---------------) + I studio
+ 0x002e0a05, // n0x048d c0x0000 (---------------) + I study
+ 0x0023ed85, // n0x048e c0x0000 (---------------) + I style
+ 0x4e2029c2, // n0x048f c0x0138 (n0x1c3c-n0x1c5c) + I su
+ 0x002be445, // n0x0490 c0x0000 (---------------) + I sucks
+ 0x002b508a, // n0x0491 c0x0000 (---------------) + I supersport
+ 0x002b8a08, // n0x0492 c0x0000 (---------------) + I supplies
+ 0x0029d806, // n0x0493 c0x0000 (---------------) + I supply
+ 0x002dd987, // n0x0494 c0x0000 (---------------) + I support
+ 0x002466c4, // n0x0495 c0x0000 (---------------) + I surf
+ 0x00299d87, // n0x0496 c0x0000 (---------------) + I surgery
+ 0x002e3846, // n0x0497 c0x0000 (---------------) + I suzuki
+ 0x4e60ee82, // n0x0498 c0x0139 (n0x1c5c-n0x1c61) + I sv
+ 0x00373606, // n0x0499 c0x0000 (---------------) + I swatch
+ 0x002e61ca, // n0x049a c0x0000 (---------------) + I swiftcover
+ 0x002e6b85, // n0x049b c0x0000 (---------------) + I swiss
+ 0x4eae7402, // n0x049c c0x013a (n0x1c61-n0x1c62) + I sx
+ 0x4ee2b802, // n0x049d c0x013b (n0x1c62-n0x1c68) + I sy
+ 0x0022b806, // n0x049e c0x0000 (---------------) + I sydney
+ 0x002a3b08, // n0x049f c0x0000 (---------------) + I symantec
+ 0x0037e287, // n0x04a0 c0x0000 (---------------) + I systems
+ 0x4f202842, // n0x04a1 c0x013c (n0x1c68-n0x1c6b) + I sz
+ 0x00211703, // n0x04a2 c0x0000 (---------------) + I tab
+ 0x003a3406, // n0x04a3 c0x0000 (---------------) + I taipei
+ 0x0023ab44, // n0x04a4 c0x0000 (---------------) + I talk
+ 0x00390dc6, // n0x04a5 c0x0000 (---------------) + I taobao
+ 0x00363046, // n0x04a6 c0x0000 (---------------) + I target
+ 0x0030f98a, // n0x04a7 c0x0000 (---------------) + I tatamotors
+ 0x0036a385, // n0x04a8 c0x0000 (---------------) + I tatar
+ 0x0020a1c6, // n0x04a9 c0x0000 (---------------) + I tattoo
+ 0x0020cfc3, // n0x04aa c0x0000 (---------------) + I tax
+ 0x0020cfc4, // n0x04ab c0x0000 (---------------) + I taxi
+ 0x002041c2, // n0x04ac c0x0000 (---------------) + I tc
+ 0x003075c3, // n0x04ad c0x0000 (---------------) + I tci
+ 0x4f62cac2, // n0x04ae c0x013d (n0x1c6b-n0x1c6c) + I td
+ 0x002c7603, // n0x04af c0x0000 (---------------) + I tdk
+ 0x00365904, // n0x04b0 c0x0000 (---------------) + I team
+ 0x002a3c44, // n0x04b1 c0x0000 (---------------) + I tech
+ 0x002a3c4a, // n0x04b2 c0x0000 (---------------) + I technology
+ 0x0022fb43, // n0x04b3 c0x0000 (---------------) + I tel
+ 0x0027e708, // n0x04b4 c0x0000 (---------------) + I telecity
+ 0x0030df4a, // n0x04b5 c0x0000 (---------------) + I telefonica
+ 0x00319f47, // n0x04b6 c0x0000 (---------------) + I temasek
+ 0x002e9886, // n0x04b7 c0x0000 (---------------) + I tennis
+ 0x00328784, // n0x04b8 c0x0000 (---------------) + I teva
+ 0x00286e42, // n0x04b9 c0x0000 (---------------) + I tf
+ 0x00218742, // n0x04ba c0x0000 (---------------) + I tg
+ 0x4fa06502, // n0x04bb c0x013e (n0x1c6c-n0x1c73) + I th
+ 0x00242d43, // n0x04bc c0x0000 (---------------) + I thd
+ 0x0031b107, // n0x04bd c0x0000 (---------------) + I theater
+ 0x0024f0c7, // n0x04be c0x0000 (---------------) + I theatre
+ 0x0034c1cb, // n0x04bf c0x0000 (---------------) + I theguardian
+ 0x002ff484, // n0x04c0 c0x0000 (---------------) + I tiaa
+ 0x002eb8c7, // n0x04c1 c0x0000 (---------------) + I tickets
+ 0x002d7a46, // n0x04c2 c0x0000 (---------------) + I tienda
+ 0x0039aa07, // n0x04c3 c0x0000 (---------------) + I tiffany
+ 0x00233a04, // n0x04c4 c0x0000 (---------------) + I tips
+ 0x0034ee05, // n0x04c5 c0x0000 (---------------) + I tires
+ 0x002b5605, // n0x04c6 c0x0000 (---------------) + I tirol
+ 0x4fe01a82, // n0x04c7 c0x013f (n0x1c73-n0x1c82) + I tj
+ 0x00275246, // n0x04c8 c0x0000 (---------------) + I tjmaxx
+ 0x0036cac3, // n0x04c9 c0x0000 (---------------) + I tjx
+ 0x0022cc82, // n0x04ca c0x0000 (---------------) + I tk
+ 0x0022cc86, // n0x04cb c0x0000 (---------------) + I tkmaxx
+ 0x50208202, // n0x04cc c0x0140 (n0x1c82-n0x1c83) + I tl
+ 0x50600142, // n0x04cd c0x0141 (n0x1c83-n0x1c8b) + I tm
+ 0x00200145, // n0x04ce c0x0000 (---------------) + I tmall
+ 0x50a00942, // n0x04cf c0x0142 (n0x1c8b-n0x1c9f) + I tn
+ 0x50e07442, // n0x04d0 c0x0143 (n0x1c9f-n0x1ca5) + I to
+ 0x003338c5, // n0x04d1 c0x0000 (---------------) + I today
+ 0x002ef045, // n0x04d2 c0x0000 (---------------) + I tokyo
+ 0x0020a285, // n0x04d3 c0x0000 (---------------) + I tools
+ 0x0024a1c3, // n0x04d4 c0x0000 (---------------) + I top
+ 0x002238c5, // n0x04d5 c0x0000 (---------------) + I toray
+ 0x002cd247, // n0x04d6 c0x0000 (---------------) + I toshiba
+ 0x00254205, // n0x04d7 c0x0000 (---------------) + I total
+ 0x002f3c85, // n0x04d8 c0x0000 (---------------) + I tours
+ 0x002a9404, // n0x04d9 c0x0000 (---------------) + I town
+ 0x00254b06, // n0x04da c0x0000 (---------------) + I toyota
+ 0x00262e44, // n0x04db c0x0000 (---------------) + I toys
+ 0x00214582, // n0x04dc c0x0000 (---------------) + I tp
+ 0x51203642, // n0x04dd c0x0144 (n0x1ca5-n0x1cba) + I tr
+ 0x0025f785, // n0x04de c0x0000 (---------------) + I trade
+ 0x0029b6c7, // n0x04df c0x0000 (---------------) + I trading
+ 0x00312148, // n0x04e0 c0x0000 (---------------) + I training
+ 0x00293486, // n0x04e1 c0x0000 (---------------) + I travel
+ 0x0029348d, // n0x04e2 c0x0000 (---------------) + I travelchannel
+ 0x00299209, // n0x04e3 c0x0000 (---------------) + I travelers
+ 0x00299212, // n0x04e4 c0x0000 (---------------) + I travelersinsurance
+ 0x0031f0c5, // n0x04e5 c0x0000 (---------------) + I trust
+ 0x00325243, // n0x04e6 c0x0000 (---------------) + I trv
+ 0x51e0a242, // n0x04e7 c0x0147 (n0x1cbc-n0x1ccd) + I tt
+ 0x002de944, // n0x04e8 c0x0000 (---------------) + I tube
+ 0x002efb43, // n0x04e9 c0x0000 (---------------) + I tui
+ 0x002e7885, // n0x04ea c0x0000 (---------------) + I tunes
+ 0x002e8105, // n0x04eb c0x0000 (---------------) + I tushu
+ 0x52206fc2, // n0x04ec c0x0148 (n0x1ccd-n0x1cd1) + I tv
+ 0x00361343, // n0x04ed c0x0000 (---------------) + I tvs
+ 0x52641cc2, // n0x04ee c0x0149 (n0x1cd1-n0x1cdf) + I tw
+ 0x52a1d942, // n0x04ef c0x014a (n0x1cdf-n0x1ceb) + I tz
+ 0x52e0d102, // n0x04f0 c0x014b (n0x1ceb-n0x1d3a) + I ua
+ 0x00334405, // n0x04f1 c0x0000 (---------------) + I ubank
+ 0x0024d683, // n0x04f2 c0x0000 (---------------) + I ubs
+ 0x00322208, // n0x04f3 c0x0000 (---------------) + I uconnect
+ 0x53207e02, // n0x04f4 c0x014c (n0x1d3a-n0x1d43) + I ug
+ 0x53600f82, // n0x04f5 c0x014d (n0x1d43-n0x1d4e) + I uk
+ 0x00281a0a, // n0x04f6 c0x0000 (---------------) + I university
+ 0x00208d03, // n0x04f7 c0x0000 (---------------) + I uno
+ 0x0023a103, // n0x04f8 c0x0000 (---------------) + I uol
+ 0x002cdd83, // n0x04f9 c0x0000 (---------------) + I ups
+ 0x54202982, // n0x04fa c0x0150 (n0x1d50-n0x1d8f) + I us
+ 0x6260d7c2, // n0x04fb c0x0189 (n0x1e32-n0x1e38) + I uy
+ 0x62e11f02, // n0x04fc c0x018b (n0x1e39-n0x1e3d) + I uz
+ 0x002000c2, // n0x04fd c0x0000 (---------------) + I va
+ 0x00373409, // n0x04fe c0x0000 (---------------) + I vacations
+ 0x002b7704, // n0x04ff c0x0000 (---------------) + I vana
+ 0x00275b48, // n0x0500 c0x0000 (---------------) + I vanguard
+ 0x632dfb02, // n0x0501 c0x018c (n0x1e3d-n0x1e43) + I vc
+ 0x63602202, // n0x0502 c0x018d (n0x1e43-n0x1e54) + I ve
+ 0x002292c5, // n0x0503 c0x0000 (---------------) + I vegas
+ 0x002360c8, // n0x0504 c0x0000 (---------------) + I ventures
+ 0x002e6388, // n0x0505 c0x0000 (---------------) + I verisign
+ 0x0038fb4c, // n0x0506 c0x0000 (---------------) + I versicherung
+ 0x0023b383, // n0x0507 c0x0000 (---------------) + I vet
+ 0x00258ec2, // n0x0508 c0x0000 (---------------) + I vg
+ 0x63a00642, // n0x0509 c0x018e (n0x1e54-n0x1e59) + I vi
+ 0x002c26c6, // n0x050a c0x0000 (---------------) + I viajes
+ 0x002ea705, // n0x050b c0x0000 (---------------) + I video
+ 0x00200643, // n0x050c c0x0000 (---------------) + I vig
+ 0x0036cf46, // n0x050d c0x0000 (---------------) + I viking
+ 0x002ea846, // n0x050e c0x0000 (---------------) + I villas
+ 0x00225e83, // n0x050f c0x0000 (---------------) + I vin
+ 0x002ec703, // n0x0510 c0x0000 (---------------) + I vip
+ 0x002ee6c6, // n0x0511 c0x0000 (---------------) + I virgin
+ 0x002eec44, // n0x0512 c0x0000 (---------------) + I visa
+ 0x0023b546, // n0x0513 c0x0000 (---------------) + I vision
+ 0x002c71c5, // n0x0514 c0x0000 (---------------) + I vista
+ 0x002ef90a, // n0x0515 c0x0000 (---------------) + I vistaprint
+ 0x002388c4, // n0x0516 c0x0000 (---------------) + I viva
+ 0x002f0b04, // n0x0517 c0x0000 (---------------) + I vivo
+ 0x003434ca, // n0x0518 c0x0000 (---------------) + I vlaanderen
+ 0x63e00d42, // n0x0519 c0x018f (n0x1e59-n0x1e66) + I vn
+ 0x002c3d45, // n0x051a c0x0000 (---------------) + I vodka
+ 0x002f210a, // n0x051b c0x0000 (---------------) + I volkswagen
+ 0x002f3984, // n0x051c c0x0000 (---------------) + I vote
+ 0x002f3a86, // n0x051d c0x0000 (---------------) + I voting
+ 0x002f3c04, // n0x051e c0x0000 (---------------) + I voto
+ 0x002a8206, // n0x051f c0x0000 (---------------) + I voyage
+ 0x64200882, // n0x0520 c0x0190 (n0x1e66-n0x1e6a) + I vu
+ 0x002c2fc6, // n0x0521 c0x0000 (---------------) + I vuelos
+ 0x0030e445, // n0x0522 c0x0000 (---------------) + I wales
+ 0x002010c7, // n0x0523 c0x0000 (---------------) + I walmart
+ 0x00209206, // n0x0524 c0x0000 (---------------) + I walter
+ 0x0023d304, // n0x0525 c0x0000 (---------------) + I wang
+ 0x002fa647, // n0x0526 c0x0000 (---------------) + I wanggou
+ 0x0036c7c6, // n0x0527 c0x0000 (---------------) + I warman
+ 0x002a6905, // n0x0528 c0x0000 (---------------) + I watch
+ 0x002fa287, // n0x0529 c0x0000 (---------------) + I watches
+ 0x0038d087, // n0x052a c0x0000 (---------------) + I weather
+ 0x0038d08e, // n0x052b c0x0000 (---------------) + I weatherchannel
+ 0x0021fa86, // n0x052c c0x0000 (---------------) + I webcam
+ 0x00351d85, // n0x052d c0x0000 (---------------) + I weber
+ 0x002ba987, // n0x052e c0x0000 (---------------) + I website
+ 0x002e4ec3, // n0x052f c0x0000 (---------------) + I wed
+ 0x0033adc7, // n0x0530 c0x0000 (---------------) + I wedding
+ 0x00208a85, // n0x0531 c0x0000 (---------------) + I weibo
+ 0x0020f304, // n0x0532 c0x0000 (---------------) + I weir
+ 0x0022a842, // n0x0533 c0x0000 (---------------) + I wf
+ 0x00332687, // n0x0534 c0x0000 (---------------) + I whoswho
+ 0x002e2d04, // n0x0535 c0x0000 (---------------) + I wien
+ 0x0032fd04, // n0x0536 c0x0000 (---------------) + I wiki
+ 0x0024ed0b, // n0x0537 c0x0000 (---------------) + I williamhill
+ 0x0021b743, // n0x0538 c0x0000 (---------------) + I win
+ 0x0027a9c7, // n0x0539 c0x0000 (---------------) + I windows
+ 0x0021b744, // n0x053a c0x0000 (---------------) + I wine
+ 0x002ab5c7, // n0x053b c0x0000 (---------------) + I winners
+ 0x0021dd83, // n0x053c c0x0000 (---------------) + I wme
+ 0x0032704d, // n0x053d c0x0000 (---------------) + I wolterskluwer
+ 0x0037be88, // n0x053e c0x0000 (---------------) + I woodside
+ 0x002423c4, // n0x053f c0x0000 (---------------) + I work
+ 0x00332b45, // n0x0540 c0x0000 (---------------) + I works
+ 0x002f7105, // n0x0541 c0x0000 (---------------) + I world
+ 0x002f4c03, // n0x0542 c0x0000 (---------------) + I wow
+ 0x6461fec2, // n0x0543 c0x0191 (n0x1e6a-n0x1e71) + I ws
+ 0x002f60c3, // n0x0544 c0x0000 (---------------) + I wtc
+ 0x002f67c3, // n0x0545 c0x0000 (---------------) + I wtf
+ 0x00214bc4, // n0x0546 c0x0000 (---------------) + I xbox
+ 0x00273b05, // n0x0547 c0x0000 (---------------) + I xerox
+ 0x00214c87, // n0x0548 c0x0000 (---------------) + I xfinity
+ 0x0020d046, // n0x0549 c0x0000 (---------------) + I xihuan
+ 0x00365643, // n0x054a c0x0000 (---------------) + I xin
+ 0x0036cb4b, // n0x054b c0x0000 (---------------) + I xn--11b4c3d
+ 0x0022cdcb, // n0x054c c0x0000 (---------------) + I xn--1ck2e1b
+ 0x00269acb, // n0x054d c0x0000 (---------------) + I xn--1qqw23a
+ 0x00273c0a, // n0x054e c0x0000 (---------------) + I xn--30rr7y
+ 0x0029db4b, // n0x054f c0x0000 (---------------) + I xn--3bst00m
+ 0x002b414b, // n0x0550 c0x0000 (---------------) + I xn--3ds443g
+ 0x002cffcc, // n0x0551 c0x0000 (---------------) + I xn--3e0b707e
+ 0x002e7451, // n0x0552 c0x0000 (---------------) + I xn--3oq18vl8pn36a
+ 0x0034624a, // n0x0553 c0x0000 (---------------) + I xn--3pxu8k
+ 0x003a114b, // n0x0554 c0x0000 (---------------) + I xn--42c2d9a
+ 0x003a260b, // n0x0555 c0x0000 (---------------) + I xn--45brj9c
+ 0x002f750a, // n0x0556 c0x0000 (---------------) + I xn--45q11c
+ 0x002f7eca, // n0x0557 c0x0000 (---------------) + I xn--4gbrim
+ 0x002f828d, // n0x0558 c0x0000 (---------------) + I xn--4gq48lf9j
+ 0x002f9b4e, // n0x0559 c0x0000 (---------------) + I xn--54b7fta0cc
+ 0x002fa9cb, // n0x055a c0x0000 (---------------) + I xn--55qw42g
+ 0x002fac8a, // n0x055b c0x0000 (---------------) + I xn--55qx5d
+ 0x002fbad1, // n0x055c c0x0000 (---------------) + I xn--5su34j936bgsg
+ 0x002fbf0a, // n0x055d c0x0000 (---------------) + I xn--5tzm5g
+ 0x002fc40b, // n0x055e c0x0000 (---------------) + I xn--6frz82g
+ 0x002fc94e, // n0x055f c0x0000 (---------------) + I xn--6qq986b3xl
+ 0x002fd18c, // n0x0560 c0x0000 (---------------) + I xn--80adxhks
+ 0x002fdc0b, // n0x0561 c0x0000 (---------------) + I xn--80ao21a
+ 0x002fdecc, // n0x0562 c0x0000 (---------------) + I xn--80asehdb
+ 0x00303c8a, // n0x0563 c0x0000 (---------------) + I xn--80aswg
+ 0x00304e8c, // n0x0564 c0x0000 (---------------) + I xn--8y0a063a
+ 0x64b0518a, // n0x0565 c0x0192 (n0x1e71-n0x1e77) + I xn--90a3ac
+ 0x0030aa49, // n0x0566 c0x0000 (---------------) + I xn--90ais
+ 0x0030c44a, // n0x0567 c0x0000 (---------------) + I xn--9dbq2a
+ 0x0030c6ca, // n0x0568 c0x0000 (---------------) + I xn--9et52u
+ 0x0030c94b, // n0x0569 c0x0000 (---------------) + I xn--9krt00a
+ 0x0031194e, // n0x056a c0x0000 (---------------) + I xn--b4w605ferd
+ 0x00311cd1, // n0x056b c0x0000 (---------------) + I xn--bck1b9a5dre4c
+ 0x00318289, // n0x056c c0x0000 (---------------) + I xn--c1avg
+ 0x003184ca, // n0x056d c0x0000 (---------------) + I xn--c2br7g
+ 0x0031918b, // n0x056e c0x0000 (---------------) + I xn--cck2b3b
+ 0x0031b8ca, // n0x056f c0x0000 (---------------) + I xn--cg4bki
+ 0x0031c216, // n0x0570 c0x0000 (---------------) + I xn--clchc0ea0b2g2a9gcd
+ 0x0031da0b, // n0x0571 c0x0000 (---------------) + I xn--czr694b
+ 0x0031ee8a, // n0x0572 c0x0000 (---------------) + I xn--czrs0t
+ 0x0031f28a, // n0x0573 c0x0000 (---------------) + I xn--czru2d
+ 0x0032118b, // n0x0574 c0x0000 (---------------) + I xn--d1acj3b
+ 0x00324cc9, // n0x0575 c0x0000 (---------------) + I xn--d1alf
+ 0x003279cd, // n0x0576 c0x0000 (---------------) + I xn--eckvdtc9d
+ 0x0032838b, // n0x0577 c0x0000 (---------------) + I xn--efvy88h
+ 0x0032908b, // n0x0578 c0x0000 (---------------) + I xn--estv75g
+ 0x00329a4b, // n0x0579 c0x0000 (---------------) + I xn--fct429k
+ 0x0032a3c9, // n0x057a c0x0000 (---------------) + I xn--fhbei
+ 0x0032aa0e, // n0x057b c0x0000 (---------------) + I xn--fiq228c5hs
+ 0x0032b0ca, // n0x057c c0x0000 (---------------) + I xn--fiq64b
+ 0x0032c6ca, // n0x057d c0x0000 (---------------) + I xn--fiqs8s
+ 0x0032ca0a, // n0x057e c0x0000 (---------------) + I xn--fiqz9s
+ 0x0032d2cb, // n0x057f c0x0000 (---------------) + I xn--fjq720a
+ 0x0032db0b, // n0x0580 c0x0000 (---------------) + I xn--flw351e
+ 0x0032ddcd, // n0x0581 c0x0000 (---------------) + I xn--fpcrj9c3d
+ 0x0032f38d, // n0x0582 c0x0000 (---------------) + I xn--fzc2c9e2c
+ 0x00331a50, // n0x0583 c0x0000 (---------------) + I xn--fzys8d69uvgm
+ 0x00331f0b, // n0x0584 c0x0000 (---------------) + I xn--g2xx48c
+ 0x00332f4c, // n0x0585 c0x0000 (---------------) + I xn--gckr3f0f
+ 0x00333a0b, // n0x0586 c0x0000 (---------------) + I xn--gecrj9c
+ 0x00335b0b, // n0x0587 c0x0000 (---------------) + I xn--gk3at1e
+ 0x0033768b, // n0x0588 c0x0000 (---------------) + I xn--h2brj9c
+ 0x0033ef4b, // n0x0589 c0x0000 (---------------) + I xn--hxt814e
+ 0x0033f9cf, // n0x058a c0x0000 (---------------) + I xn--i1b6b1a6a2e
+ 0x0033fd8b, // n0x058b c0x0000 (---------------) + I xn--imr513n
+ 0x00340a0a, // n0x058c c0x0000 (---------------) + I xn--io0a7i
+ 0x00341409, // n0x058d c0x0000 (---------------) + I xn--j1aef
+ 0x003417c9, // n0x058e c0x0000 (---------------) + I xn--j1amh
+ 0x00341dcb, // n0x058f c0x0000 (---------------) + I xn--j6w193g
+ 0x0034208e, // n0x0590 c0x0000 (---------------) + I xn--jlq61u9w7b
+ 0x00343b4b, // n0x0591 c0x0000 (---------------) + I xn--jvr189m
+ 0x00344e0f, // n0x0592 c0x0000 (---------------) + I xn--kcrx77d1x4a
+ 0x00346c0b, // n0x0593 c0x0000 (---------------) + I xn--kprw13d
+ 0x00346ecb, // n0x0594 c0x0000 (---------------) + I xn--kpry57d
+ 0x0034718b, // n0x0595 c0x0000 (---------------) + I xn--kpu716f
+ 0x0034774a, // n0x0596 c0x0000 (---------------) + I xn--kput3i
+ 0x0034d289, // n0x0597 c0x0000 (---------------) + I xn--l1acc
+ 0x00350bcf, // n0x0598 c0x0000 (---------------) + I xn--lgbbat1ad8j
+ 0x00355dcc, // n0x0599 c0x0000 (---------------) + I xn--mgb2ddes
+ 0x00356e0c, // n0x059a c0x0000 (---------------) + I xn--mgb9awbf
+ 0x003573ce, // n0x059b c0x0000 (---------------) + I xn--mgba3a3ejt
+ 0x0035830f, // n0x059c c0x0000 (---------------) + I xn--mgba3a4f16a
+ 0x003586ce, // n0x059d c0x0000 (---------------) + I xn--mgba3a4fra
+ 0x00359510, // n0x059e c0x0000 (---------------) + I xn--mgba7c0bbn0a
+ 0x0035990f, // n0x059f c0x0000 (---------------) + I xn--mgbaakc7dvf
+ 0x0035be0e, // n0x05a0 c0x0000 (---------------) + I xn--mgbaam7a8h
+ 0x0035ca0c, // n0x05a1 c0x0000 (---------------) + I xn--mgbab2bd
+ 0x0035cd12, // n0x05a2 c0x0000 (---------------) + I xn--mgbai9a5eva00b
+ 0x0035dcd1, // n0x05a3 c0x0000 (---------------) + I xn--mgbai9azgqp6j
+ 0x0035e28e, // n0x05a4 c0x0000 (---------------) + I xn--mgbayh7gpa
+ 0x0035e6ce, // n0x05a5 c0x0000 (---------------) + I xn--mgbb9fbpob
+ 0x0035ec0e, // n0x05a6 c0x0000 (---------------) + I xn--mgbbh1a71e
+ 0x0035ef8f, // n0x05a7 c0x0000 (---------------) + I xn--mgbc0a9azcg
+ 0x0035f34e, // n0x05a8 c0x0000 (---------------) + I xn--mgbca7dzdo
+ 0x0035f853, // n0x05a9 c0x0000 (---------------) + I xn--mgberp4a5d4a87g
+ 0x0035fd11, // n0x05aa c0x0000 (---------------) + I xn--mgberp4a5d4ar
+ 0x0036014c, // n0x05ab c0x0000 (---------------) + I xn--mgbpl2fh
+ 0x00360593, // n0x05ac c0x0000 (---------------) + I xn--mgbqly7c0a67fbc
+ 0x00360d10, // n0x05ad c0x0000 (---------------) + I xn--mgbqly7cvafr
+ 0x0036158c, // n0x05ae c0x0000 (---------------) + I xn--mgbt3dhd
+ 0x0036188c, // n0x05af c0x0000 (---------------) + I xn--mgbtf8fl
+ 0x00361dcb, // n0x05b0 c0x0000 (---------------) + I xn--mgbtx2b
+ 0x00363f0e, // n0x05b1 c0x0000 (---------------) + I xn--mgbx4cd0ab
+ 0x0036440b, // n0x05b2 c0x0000 (---------------) + I xn--mix082f
+ 0x003647cb, // n0x05b3 c0x0000 (---------------) + I xn--mix891f
+ 0x00365ccc, // n0x05b4 c0x0000 (---------------) + I xn--mk1bu44c
+ 0x0036d74a, // n0x05b5 c0x0000 (---------------) + I xn--mxtq1m
+ 0x0036db0c, // n0x05b6 c0x0000 (---------------) + I xn--ngbc5azd
+ 0x0036de0c, // n0x05b7 c0x0000 (---------------) + I xn--ngbe9e0a
+ 0x0036ed0b, // n0x05b8 c0x0000 (---------------) + I xn--nnx388a
+ 0x0036efc8, // n0x05b9 c0x0000 (---------------) + I xn--node
+ 0x0036f489, // n0x05ba c0x0000 (---------------) + I xn--nqv7f
+ 0x0036f48f, // n0x05bb c0x0000 (---------------) + I xn--nqv7fs00ema
+ 0x00370e0b, // n0x05bc c0x0000 (---------------) + I xn--nyqy26a
+ 0x003718ca, // n0x05bd c0x0000 (---------------) + I xn--o3cw4h
+ 0x00373a8c, // n0x05be c0x0000 (---------------) + I xn--ogbpf8fl
+ 0x00374cc9, // n0x05bf c0x0000 (---------------) + I xn--p1acf
+ 0x00374f48, // n0x05c0 c0x0000 (---------------) + I xn--p1ai
+ 0x0037514b, // n0x05c1 c0x0000 (---------------) + I xn--pbt977c
+ 0x0037570b, // n0x05c2 c0x0000 (---------------) + I xn--pgbs0dh
+ 0x0037630a, // n0x05c3 c0x0000 (---------------) + I xn--pssy2u
+ 0x0037658b, // n0x05c4 c0x0000 (---------------) + I xn--q9jyb4c
+ 0x00376e4c, // n0x05c5 c0x0000 (---------------) + I xn--qcka1pmc
+ 0x003779c8, // n0x05c6 c0x0000 (---------------) + I xn--qxam
+ 0x0037c08b, // n0x05c7 c0x0000 (---------------) + I xn--rhqv96g
+ 0x0037f08b, // n0x05c8 c0x0000 (---------------) + I xn--rovu88b
+ 0x00382b8b, // n0x05c9 c0x0000 (---------------) + I xn--s9brj9c
+ 0x0038458b, // n0x05ca c0x0000 (---------------) + I xn--ses554g
+ 0x0038cc0b, // n0x05cb c0x0000 (---------------) + I xn--t60b56a
+ 0x0038cec9, // n0x05cc c0x0000 (---------------) + I xn--tckwe
+ 0x00391a8a, // n0x05cd c0x0000 (---------------) + I xn--unup4y
+ 0x003929d7, // n0x05ce c0x0000 (---------------) + I xn--vermgensberater-ctb
+ 0x00394958, // n0x05cf c0x0000 (---------------) + I xn--vermgensberatung-pwb
+ 0x00399489, // n0x05d0 c0x0000 (---------------) + I xn--vhquv
+ 0x0039a68b, // n0x05d1 c0x0000 (---------------) + I xn--vuq861b
+ 0x0039b294, // n0x05d2 c0x0000 (---------------) + I xn--w4r85el8fhu5dnra
+ 0x0039b78b, // n0x05d3 c0x0000 (---------------) + I xn--w4rs40l
+ 0x0039bd0a, // n0x05d4 c0x0000 (---------------) + I xn--wgbh1c
+ 0x0039c5ca, // n0x05d5 c0x0000 (---------------) + I xn--wgbl6a
+ 0x0039c84b, // n0x05d6 c0x0000 (---------------) + I xn--xhq521b
+ 0x0039e590, // n0x05d7 c0x0000 (---------------) + I xn--xkc2al3hye2a
+ 0x0039e991, // n0x05d8 c0x0000 (---------------) + I xn--xkc2dl3a5ee0h
+ 0x0039f7ca, // n0x05d9 c0x0000 (---------------) + I xn--y9a3aq
+ 0x003a074d, // n0x05da c0x0000 (---------------) + I xn--yfro4i67o
+ 0x003a0e4d, // n0x05db c0x0000 (---------------) + I xn--ygbi2ammx
+ 0x003a2ccb, // n0x05dc c0x0000 (---------------) + I xn--zfr164b
+ 0x003a3a86, // n0x05dd c0x0000 (---------------) + I xperia
+ 0x00275343, // n0x05de c0x0000 (---------------) + I xxx
+ 0x00240e83, // n0x05df c0x0000 (---------------) + I xyz
+ 0x00264686, // n0x05e0 c0x0000 (---------------) + I yachts
+ 0x00285645, // n0x05e1 c0x0000 (---------------) + I yahoo
+ 0x0021b2c7, // n0x05e2 c0x0000 (---------------) + I yamaxun
+ 0x00334e46, // n0x05e3 c0x0000 (---------------) + I yandex
+ 0x0161bcc2, // n0x05e4 c0x0005 (---------------)* o I ye
+ 0x002f7809, // n0x05e5 c0x0000 (---------------) + I yodobashi
+ 0x00379a04, // n0x05e6 c0x0000 (---------------) + I yoga
+ 0x0024d248, // n0x05e7 c0x0000 (---------------) + I yokohama
+ 0x00242c83, // n0x05e8 c0x0000 (---------------) + I you
+ 0x002de887, // n0x05e9 c0x0000 (---------------) + I youtube
+ 0x002197c2, // n0x05ea c0x0000 (---------------) + I yt
+ 0x002a4143, // n0x05eb c0x0000 (---------------) + I yun
+ 0x64e09ac2, // n0x05ec c0x0193 (n0x1e77-n0x1e88) o I za
+ 0x002c10c6, // n0x05ed c0x0000 (---------------) + I zappos
+ 0x002c1cc4, // n0x05ee c0x0000 (---------------) + I zara
+ 0x00324004, // n0x05ef c0x0000 (---------------) + I zero
+ 0x002377c3, // n0x05f0 c0x0000 (---------------) + I zip
+ 0x002377c5, // n0x05f1 c0x0000 (---------------) + I zippo
+ 0x016f7282, // n0x05f2 c0x0005 (---------------)* o I zm
+ 0x002d7204, // n0x05f3 c0x0000 (---------------) + I zone
+ 0x0026c047, // n0x05f4 c0x0000 (---------------) + I zuerich
+ 0x0165b802, // n0x05f5 c0x0005 (---------------)* o I zw
+ 0x0022edc3, // n0x05f6 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x05f7 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x05f8 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x05f9 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x05fa c0x0000 (---------------) + I net
+ 0x00229a83, // n0x05fb c0x0000 (---------------) + I org
+ 0x0020e543, // n0x05fc c0x0000 (---------------) + I nom
+ 0x00205882, // n0x05fd c0x0000 (---------------) + I ac
+ 0x000f5248, // n0x05fe c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x05ff c0x0000 (---------------) + I co
+ 0x00275003, // n0x0600 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x0601 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0602 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0603 c0x0000 (---------------) + I org
+ 0x00215d43, // n0x0604 c0x0000 (---------------) + I sch
+ 0x00316456, // n0x0605 c0x0000 (---------------) + I accident-investigation
+ 0x00317053, // n0x0606 c0x0000 (---------------) + I accident-prevention
+ 0x002eb749, // n0x0607 c0x0000 (---------------) + I aerobatic
+ 0x0035a9c8, // n0x0608 c0x0000 (---------------) + I aeroclub
+ 0x002dc849, // n0x0609 c0x0000 (---------------) + I aerodrome
+ 0x002f2286, // n0x060a c0x0000 (---------------) + I agents
+ 0x0033cd10, // n0x060b c0x0000 (---------------) + I air-surveillance
+ 0x002b2053, // n0x060c c0x0000 (---------------) + I air-traffic-control
+ 0x00235408, // n0x060d c0x0000 (---------------) + I aircraft
+ 0x00272007, // n0x060e c0x0000 (---------------) + I airline
+ 0x0027b687, // n0x060f c0x0000 (---------------) + I airport
+ 0x00296d8a, // n0x0610 c0x0000 (---------------) + I airtraffic
+ 0x002b0ec9, // n0x0611 c0x0000 (---------------) + I ambulance
+ 0x00362e49, // n0x0612 c0x0000 (---------------) + I amusement
+ 0x002b1c4b, // n0x0613 c0x0000 (---------------) + I association
+ 0x0031e346, // n0x0614 c0x0000 (---------------) + I author
+ 0x00339b0a, // n0x0615 c0x0000 (---------------) + I ballooning
+ 0x00220086, // n0x0616 c0x0000 (---------------) + I broker
+ 0x00379603, // n0x0617 c0x0000 (---------------) + I caa
+ 0x002ebd85, // n0x0618 c0x0000 (---------------) + I cargo
+ 0x00233688, // n0x0619 c0x0000 (---------------) + I catering
+ 0x002a1b0d, // n0x061a c0x0000 (---------------) + I certification
+ 0x0033c8cc, // n0x061b c0x0000 (---------------) + I championship
+ 0x00268847, // n0x061c c0x0000 (---------------) + I charter
+ 0x00354d8d, // n0x061d c0x0000 (---------------) + I civilaviation
+ 0x00202504, // n0x061e c0x0000 (---------------) + I club
+ 0x00231fca, // n0x061f c0x0000 (---------------) + I conference
+ 0x0023290a, // n0x0620 c0x0000 (---------------) + I consultant
+ 0x00232dca, // n0x0621 c0x0000 (---------------) + I consulting
+ 0x0022bac7, // n0x0622 c0x0000 (---------------) + I control
+ 0x0023c687, // n0x0623 c0x0000 (---------------) + I council
+ 0x0023eac4, // n0x0624 c0x0000 (---------------) + I crew
+ 0x00222ec6, // n0x0625 c0x0000 (---------------) + I design
+ 0x0031b344, // n0x0626 c0x0000 (---------------) + I dgca
+ 0x002aefc8, // n0x0627 c0x0000 (---------------) + I educator
+ 0x002bb8c9, // n0x0628 c0x0000 (---------------) + I emergency
+ 0x0032a106, // n0x0629 c0x0000 (---------------) + I engine
+ 0x0032a108, // n0x062a c0x0000 (---------------) + I engineer
+ 0x0024130d, // n0x062b c0x0000 (---------------) + I entertainment
+ 0x002bf809, // n0x062c c0x0000 (---------------) + I equipment
+ 0x0035b488, // n0x062d c0x0000 (---------------) + I exchange
+ 0x00240c87, // n0x062e c0x0000 (---------------) + I express
+ 0x0020038a, // n0x062f c0x0000 (---------------) + I federation
+ 0x00249f06, // n0x0630 c0x0000 (---------------) + I flight
+ 0x002556c7, // n0x0631 c0x0000 (---------------) + I freight
+ 0x003392c4, // n0x0632 c0x0000 (---------------) + I fuel
+ 0x00252087, // n0x0633 c0x0000 (---------------) + I gliding
+ 0x0027500a, // n0x0634 c0x0000 (---------------) + I government
+ 0x0033158e, // n0x0635 c0x0000 (---------------) + I groundhandling
+ 0x0020eb45, // n0x0636 c0x0000 (---------------) + I group
+ 0x002f494b, // n0x0637 c0x0000 (---------------) + I hanggliding
+ 0x0025cf89, // n0x0638 c0x0000 (---------------) + I homebuilt
+ 0x00239c09, // n0x0639 c0x0000 (---------------) + I insurance
+ 0x00201847, // n0x063a c0x0000 (---------------) + I journal
+ 0x0020184a, // n0x063b c0x0000 (---------------) + I journalist
+ 0x0027d287, // n0x063c c0x0000 (---------------) + I leasing
+ 0x002dc2c9, // n0x063d c0x0000 (---------------) + I logistics
+ 0x00391388, // n0x063e c0x0000 (---------------) + I magazine
+ 0x0026f60b, // n0x063f c0x0000 (---------------) + I maintenance
+ 0x0022dc4b, // n0x0640 c0x0000 (---------------) + I marketplace
+ 0x002fb545, // n0x0641 c0x0000 (---------------) + I media
+ 0x00245dca, // n0x0642 c0x0000 (---------------) + I microlight
+ 0x0029a989, // n0x0643 c0x0000 (---------------) + I modelling
+ 0x002005ca, // n0x0644 c0x0000 (---------------) + I navigation
+ 0x002c22cb, // n0x0645 c0x0000 (---------------) + I parachuting
+ 0x00251f8b, // n0x0646 c0x0000 (---------------) + I paragliding
+ 0x002b19d5, // n0x0647 c0x0000 (---------------) + I passenger-association
+ 0x002d1345, // n0x0648 c0x0000 (---------------) + I pilot
+ 0x00240d05, // n0x0649 c0x0000 (---------------) + I press
+ 0x002db64a, // n0x064a c0x0000 (---------------) + I production
+ 0x0031c98a, // n0x064b c0x0000 (---------------) + I recreation
+ 0x00228d07, // n0x064c c0x0000 (---------------) + I repbody
+ 0x0021bfc3, // n0x064d c0x0000 (---------------) + I res
+ 0x00290208, // n0x064e c0x0000 (---------------) + I research
+ 0x002cb30a, // n0x064f c0x0000 (---------------) + I rotorcraft
+ 0x0039ac46, // n0x0650 c0x0000 (---------------) + I safety
+ 0x00240289, // n0x0651 c0x0000 (---------------) + I scientist
+ 0x002069c8, // n0x0652 c0x0000 (---------------) + I services
+ 0x002ab744, // n0x0653 c0x0000 (---------------) + I show
+ 0x00371689, // n0x0654 c0x0000 (---------------) + I skydiving
+ 0x002b2f88, // n0x0655 c0x0000 (---------------) + I software
+ 0x002a3147, // n0x0656 c0x0000 (---------------) + I student
+ 0x0020cfc4, // n0x0657 c0x0000 (---------------) + I taxi
+ 0x0025f786, // n0x0658 c0x0000 (---------------) + I trader
+ 0x0029b6c7, // n0x0659 c0x0000 (---------------) + I trading
+ 0x003374c7, // n0x065a c0x0000 (---------------) + I trainer
+ 0x0023e505, // n0x065b c0x0000 (---------------) + I union
+ 0x002d574c, // n0x065c c0x0000 (---------------) + I workinggroup
+ 0x00332b45, // n0x065d c0x0000 (---------------) + I works
+ 0x0022edc3, // n0x065e c0x0000 (---------------) + I com
+ 0x002349c3, // n0x065f c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0660 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x0661 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0662 c0x0000 (---------------) + I org
+ 0x00208182, // n0x0663 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x0664 c0x0000 (---------------) + I com
+ 0x0021d8c3, // n0x0665 c0x0000 (---------------) + I net
+ 0x0020e543, // n0x0666 c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x0667 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x0668 c0x0000 (---------------) + I com
+ 0x0021d8c3, // n0x0669 c0x0000 (---------------) + I net
+ 0x0021f703, // n0x066a c0x0000 (---------------) + I off
+ 0x00229a83, // n0x066b c0x0000 (---------------) + I org
+ 0x000f5248, // n0x066c c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x066d c0x0000 (---------------) + I com
+ 0x002349c3, // n0x066e c0x0000 (---------------) + I edu
+ 0x00275003, // n0x066f c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x0670 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0671 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0672 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x0673 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x0674 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0675 c0x0000 (---------------) + I edu
+ 0x0021d8c3, // n0x0676 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0677 c0x0000 (---------------) + I org
+ 0x00208182, // n0x0678 c0x0000 (---------------) + I co
+ 0x002003c2, // n0x0679 c0x0000 (---------------) + I ed
+ 0x00233002, // n0x067a c0x0000 (---------------) + I gv
+ 0x00206f82, // n0x067b c0x0000 (---------------) + I it
+ 0x00201602, // n0x067c c0x0000 (---------------) + I og
+ 0x00228d82, // n0x067d c0x0000 (---------------) + I pb
+ 0x04a2edc3, // n0x067e c0x0012 (n0x0687-n0x0688) + I com
+ 0x002349c3, // n0x067f c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x0680 c0x0000 (---------------) + I gob
+ 0x00275003, // n0x0681 c0x0000 (---------------) + I gov
+ 0x0026f683, // n0x0682 c0x0000 (---------------) + I int
+ 0x00215b43, // n0x0683 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0684 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0685 c0x0000 (---------------) + I org
+ 0x00236183, // n0x0686 c0x0000 (---------------) + I tur
+ 0x000f5248, // n0x0687 c0x0000 (---------------) + blogspot
+ 0x00256bc4, // n0x0688 c0x0000 (---------------) + I e164
+ 0x00226007, // n0x0689 c0x0000 (---------------) + I in-addr
+ 0x00216fc3, // n0x068a c0x0000 (---------------) + I ip6
+ 0x00291084, // n0x068b c0x0000 (---------------) + I iris
+ 0x002016c3, // n0x068c c0x0000 (---------------) + I uri
+ 0x002018c3, // n0x068d c0x0000 (---------------) + I urn
+ 0x00275003, // n0x068e c0x0000 (---------------) + I gov
+ 0x00205882, // n0x068f c0x0000 (---------------) + I ac
+ 0x0010a143, // n0x0690 c0x0000 (---------------) + biz
+ 0x05a08182, // n0x0691 c0x0016 (n0x0696-n0x0697) + I co
+ 0x00233002, // n0x0692 c0x0000 (---------------) + I gv
+ 0x0018a144, // n0x0693 c0x0000 (---------------) + info
+ 0x00200282, // n0x0694 c0x0000 (---------------) + I or
+ 0x000db244, // n0x0695 c0x0000 (---------------) + priv
+ 0x000f5248, // n0x0696 c0x0000 (---------------) + blogspot
+ 0x00233383, // n0x0697 c0x0000 (---------------) + I act
+ 0x0022d9c3, // n0x0698 c0x0000 (---------------) + I asn
+ 0x0622edc3, // n0x0699 c0x0018 (n0x06a9-n0x06aa) + I com
+ 0x00231fc4, // n0x069a c0x0000 (---------------) + I conf
+ 0x066349c3, // n0x069b c0x0019 (n0x06aa-n0x06b2) + I edu
+ 0x06a75003, // n0x069c c0x001a (n0x06b2-n0x06b7) + I gov
+ 0x00205d82, // n0x069d c0x0000 (---------------) + I id
+ 0x0038a144, // n0x069e c0x0000 (---------------) + I info
+ 0x0021d8c3, // n0x069f c0x0000 (---------------) + I net
+ 0x002e4fc3, // n0x06a0 c0x0000 (---------------) + I nsw
+ 0x00202382, // n0x06a1 c0x0000 (---------------) + I nt
+ 0x00229a83, // n0x06a2 c0x0000 (---------------) + I org
+ 0x0021a842, // n0x06a3 c0x0000 (---------------) + I oz
+ 0x002df383, // n0x06a4 c0x0000 (---------------) + I qld
+ 0x00202402, // n0x06a5 c0x0000 (---------------) + I sa
+ 0x00201fc3, // n0x06a6 c0x0000 (---------------) + I tas
+ 0x00206a83, // n0x06a7 c0x0000 (---------------) + I vic
+ 0x002010c2, // n0x06a8 c0x0000 (---------------) + I wa
+ 0x000f5248, // n0x06a9 c0x0000 (---------------) + blogspot
+ 0x00233383, // n0x06aa c0x0000 (---------------) + I act
+ 0x002e4fc3, // n0x06ab c0x0000 (---------------) + I nsw
+ 0x00202382, // n0x06ac c0x0000 (---------------) + I nt
+ 0x002df383, // n0x06ad c0x0000 (---------------) + I qld
+ 0x00202402, // n0x06ae c0x0000 (---------------) + I sa
+ 0x00201fc3, // n0x06af c0x0000 (---------------) + I tas
+ 0x00206a83, // n0x06b0 c0x0000 (---------------) + I vic
+ 0x002010c2, // n0x06b1 c0x0000 (---------------) + I wa
+ 0x002df383, // n0x06b2 c0x0000 (---------------) + I qld
+ 0x00202402, // n0x06b3 c0x0000 (---------------) + I sa
+ 0x00201fc3, // n0x06b4 c0x0000 (---------------) + I tas
+ 0x00206a83, // n0x06b5 c0x0000 (---------------) + I vic
+ 0x002010c2, // n0x06b6 c0x0000 (---------------) + I wa
+ 0x0022edc3, // n0x06b7 c0x0000 (---------------) + I com
+ 0x0030a143, // n0x06b8 c0x0000 (---------------) + I biz
+ 0x0022edc3, // n0x06b9 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x06ba c0x0000 (---------------) + I edu
+ 0x00275003, // n0x06bb c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x06bc c0x0000 (---------------) + I info
+ 0x0026f683, // n0x06bd c0x0000 (---------------) + I int
+ 0x00215b43, // n0x06be c0x0000 (---------------) + I mil
+ 0x0027ca84, // n0x06bf c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x06c0 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x06c1 c0x0000 (---------------) + I org
+ 0x002099c2, // n0x06c2 c0x0000 (---------------) + I pp
+ 0x00220283, // n0x06c3 c0x0000 (---------------) + I pro
+ 0x000f5248, // n0x06c4 c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x06c5 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x06c6 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x06c7 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x06c8 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x06c9 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x06ca c0x0000 (---------------) + I net
+ 0x00229a83, // n0x06cb c0x0000 (---------------) + I org
+ 0x0020a642, // n0x06cc c0x0000 (---------------) + I rs
+ 0x00272344, // n0x06cd c0x0000 (---------------) + I unbi
+ 0x00362b04, // n0x06ce c0x0000 (---------------) + I unsa
+ 0x0030a143, // n0x06cf c0x0000 (---------------) + I biz
+ 0x00208182, // n0x06d0 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x06d1 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x06d2 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x06d3 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x06d4 c0x0000 (---------------) + I info
+ 0x0021d8c3, // n0x06d5 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x06d6 c0x0000 (---------------) + I org
+ 0x0038c985, // n0x06d7 c0x0000 (---------------) + I store
+ 0x00206fc2, // n0x06d8 c0x0000 (---------------) + I tv
+ 0x00205882, // n0x06d9 c0x0000 (---------------) + I ac
+ 0x000f5248, // n0x06da c0x0000 (---------------) + blogspot
+ 0x00275003, // n0x06db c0x0000 (---------------) + I gov
+ 0x00226981, // n0x06dc c0x0000 (---------------) + I 0
+ 0x00226901, // n0x06dd c0x0000 (---------------) + I 1
+ 0x00226941, // n0x06de c0x0000 (---------------) + I 2
+ 0x0024bb41, // n0x06df c0x0000 (---------------) + I 3
+ 0x00256c81, // n0x06e0 c0x0000 (---------------) + I 4
+ 0x0026bdc1, // n0x06e1 c0x0000 (---------------) + I 5
+ 0x00217041, // n0x06e2 c0x0000 (---------------) + I 6
+ 0x002397c1, // n0x06e3 c0x0000 (---------------) + I 7
+ 0x002e7641, // n0x06e4 c0x0000 (---------------) + I 8
+ 0x002f8541, // n0x06e5 c0x0000 (---------------) + I 9
+ 0x00200101, // n0x06e6 c0x0000 (---------------) + I a
+ 0x00200001, // n0x06e7 c0x0000 (---------------) + I b
+ 0x000f5248, // n0x06e8 c0x0000 (---------------) + blogspot
+ 0x00200301, // n0x06e9 c0x0000 (---------------) + I c
+ 0x00200401, // n0x06ea c0x0000 (---------------) + I d
+ 0x00200081, // n0x06eb c0x0000 (---------------) + I e
+ 0x00200381, // n0x06ec c0x0000 (---------------) + I f
+ 0x002006c1, // n0x06ed c0x0000 (---------------) + I g
+ 0x00200a41, // n0x06ee c0x0000 (---------------) + I h
+ 0x00200041, // n0x06ef c0x0000 (---------------) + I i
+ 0x00201841, // n0x06f0 c0x0000 (---------------) + I j
+ 0x00200a01, // n0x06f1 c0x0000 (---------------) + I k
+ 0x00200201, // n0x06f2 c0x0000 (---------------) + I l
+ 0x00200181, // n0x06f3 c0x0000 (---------------) + I m
+ 0x002005c1, // n0x06f4 c0x0000 (---------------) + I n
+ 0x00200281, // n0x06f5 c0x0000 (---------------) + I o
+ 0x00200c41, // n0x06f6 c0x0000 (---------------) + I p
+ 0x00204901, // n0x06f7 c0x0000 (---------------) + I q
+ 0x002002c1, // n0x06f8 c0x0000 (---------------) + I r
+ 0x00201a41, // n0x06f9 c0x0000 (---------------) + I s
+ 0x00200141, // n0x06fa c0x0000 (---------------) + I t
+ 0x002008c1, // n0x06fb c0x0000 (---------------) + I u
+ 0x002000c1, // n0x06fc c0x0000 (---------------) + I v
+ 0x002010c1, // n0x06fd c0x0000 (---------------) + I w
+ 0x0020d041, // n0x06fe c0x0000 (---------------) + I x
+ 0x00201341, // n0x06ff c0x0000 (---------------) + I y
+ 0x00202881, // n0x0700 c0x0000 (---------------) + I z
+ 0x0022edc3, // n0x0701 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0702 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0703 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x0704 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0705 c0x0000 (---------------) + I org
+ 0x00208182, // n0x0706 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x0707 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0708 c0x0000 (---------------) + I edu
+ 0x00200282, // n0x0709 c0x0000 (---------------) + I or
+ 0x00229a83, // n0x070a c0x0000 (---------------) + I org
+ 0x00011a06, // n0x070b c0x0000 (---------------) + dyndns
+ 0x0004e08a, // n0x070c c0x0000 (---------------) + for-better
+ 0x00081088, // n0x070d c0x0000 (---------------) + for-more
+ 0x0004e688, // n0x070e c0x0000 (---------------) + for-some
+ 0x0004efc7, // n0x070f c0x0000 (---------------) + for-the
+ 0x00053986, // n0x0710 c0x0000 (---------------) + selfip
+ 0x00123b06, // n0x0711 c0x0000 (---------------) + webhop
+ 0x002b1c44, // n0x0712 c0x0000 (---------------) + I asso
+ 0x00319407, // n0x0713 c0x0000 (---------------) + I barreau
+ 0x000f5248, // n0x0714 c0x0000 (---------------) + blogspot
+ 0x002fa744, // n0x0715 c0x0000 (---------------) + I gouv
+ 0x0022edc3, // n0x0716 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0717 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0718 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x0719 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x071a c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x071b c0x0000 (---------------) + I com
+ 0x002349c3, // n0x071c c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x071d c0x0000 (---------------) + I gob
+ 0x00275003, // n0x071e c0x0000 (---------------) + I gov
+ 0x0026f683, // n0x071f c0x0000 (---------------) + I int
+ 0x00215b43, // n0x0720 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0721 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0722 c0x0000 (---------------) + I org
+ 0x00206fc2, // n0x0723 c0x0000 (---------------) + I tv
+ 0x002c0603, // n0x0724 c0x0000 (---------------) + I adm
+ 0x002288c3, // n0x0725 c0x0000 (---------------) + I adv
+ 0x00250603, // n0x0726 c0x0000 (---------------) + I agr
+ 0x00201382, // n0x0727 c0x0000 (---------------) + I am
+ 0x00248c03, // n0x0728 c0x0000 (---------------) + I arq
+ 0x002011c3, // n0x0729 c0x0000 (---------------) + I art
+ 0x00207403, // n0x072a c0x0000 (---------------) + I ato
+ 0x00200001, // n0x072b c0x0000 (---------------) + I b
+ 0x00203a43, // n0x072c c0x0000 (---------------) + I bio
+ 0x00229004, // n0x072d c0x0000 (---------------) + I blog
+ 0x00264143, // n0x072e c0x0000 (---------------) + I bmd
+ 0x00307603, // n0x072f c0x0000 (---------------) + I cim
+ 0x0021a143, // n0x0730 c0x0000 (---------------) + I cng
+ 0x0022cc03, // n0x0731 c0x0000 (---------------) + I cnt
+ 0x0a62edc3, // n0x0732 c0x0029 (n0x076a-n0x076b) + I com
+ 0x00238284, // n0x0733 c0x0000 (---------------) + I coop
+ 0x0021a103, // n0x0734 c0x0000 (---------------) + I ecn
+ 0x00230383, // n0x0735 c0x0000 (---------------) + I eco
+ 0x002349c3, // n0x0736 c0x0000 (---------------) + I edu
+ 0x00234703, // n0x0737 c0x0000 (---------------) + I emp
+ 0x0027bd03, // n0x0738 c0x0000 (---------------) + I eng
+ 0x00293383, // n0x0739 c0x0000 (---------------) + I esp
+ 0x00307583, // n0x073a c0x0000 (---------------) + I etc
+ 0x00222703, // n0x073b c0x0000 (---------------) + I eti
+ 0x00210003, // n0x073c c0x0000 (---------------) + I far
+ 0x0024a844, // n0x073d c0x0000 (---------------) + I flog
+ 0x0023d4c2, // n0x073e c0x0000 (---------------) + I fm
+ 0x0024da03, // n0x073f c0x0000 (---------------) + I fnd
+ 0x00254a83, // n0x0740 c0x0000 (---------------) + I fot
+ 0x0026f8c3, // n0x0741 c0x0000 (---------------) + I fst
+ 0x002268c3, // n0x0742 c0x0000 (---------------) + I g12
+ 0x00302a03, // n0x0743 c0x0000 (---------------) + I ggf
+ 0x00275003, // n0x0744 c0x0000 (---------------) + I gov
+ 0x002c15c3, // n0x0745 c0x0000 (---------------) + I imb
+ 0x00202603, // n0x0746 c0x0000 (---------------) + I ind
+ 0x00389f83, // n0x0747 c0x0000 (---------------) + I inf
+ 0x00201ac3, // n0x0748 c0x0000 (---------------) + I jor
+ 0x002e8403, // n0x0749 c0x0000 (---------------) + I jus
+ 0x00247b83, // n0x074a c0x0000 (---------------) + I leg
+ 0x002b9403, // n0x074b c0x0000 (---------------) + I lel
+ 0x0021ed03, // n0x074c c0x0000 (---------------) + I mat
+ 0x00211c43, // n0x074d c0x0000 (---------------) + I med
+ 0x00215b43, // n0x074e c0x0000 (---------------) + I mil
+ 0x00226dc2, // n0x074f c0x0000 (---------------) + I mp
+ 0x00270383, // n0x0750 c0x0000 (---------------) + I mus
+ 0x0021d8c3, // n0x0751 c0x0000 (---------------) + I net
+ 0x0160e543, // n0x0752 c0x0005 (---------------)* o I nom
+ 0x00246403, // n0x0753 c0x0000 (---------------) + I not
+ 0x0022bb43, // n0x0754 c0x0000 (---------------) + I ntr
+ 0x00206e03, // n0x0755 c0x0000 (---------------) + I odo
+ 0x00229a83, // n0x0756 c0x0000 (---------------) + I org
+ 0x00308843, // n0x0757 c0x0000 (---------------) + I ppg
+ 0x00220283, // n0x0758 c0x0000 (---------------) + I pro
+ 0x00231cc3, // n0x0759 c0x0000 (---------------) + I psc
+ 0x002ec783, // n0x075a c0x0000 (---------------) + I psi
+ 0x002df543, // n0x075b c0x0000 (---------------) + I qsl
+ 0x0025e6c5, // n0x075c c0x0000 (---------------) + I radio
+ 0x00226f03, // n0x075d c0x0000 (---------------) + I rec
+ 0x002df583, // n0x075e c0x0000 (---------------) + I slg
+ 0x00356083, // n0x075f c0x0000 (---------------) + I srv
+ 0x0020cfc4, // n0x0760 c0x0000 (---------------) + I taxi
+ 0x00337f43, // n0x0761 c0x0000 (---------------) + I teo
+ 0x00233403, // n0x0762 c0x0000 (---------------) + I tmp
+ 0x0029fc03, // n0x0763 c0x0000 (---------------) + I trd
+ 0x00236183, // n0x0764 c0x0000 (---------------) + I tur
+ 0x00206fc2, // n0x0765 c0x0000 (---------------) + I tv
+ 0x0023b383, // n0x0766 c0x0000 (---------------) + I vet
+ 0x002f1744, // n0x0767 c0x0000 (---------------) + I vlog
+ 0x0032fd04, // n0x0768 c0x0000 (---------------) + I wiki
+ 0x00240f03, // n0x0769 c0x0000 (---------------) + I zlg
+ 0x000f5248, // n0x076a c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x076b c0x0000 (---------------) + I com
+ 0x002349c3, // n0x076c c0x0000 (---------------) + I edu
+ 0x00275003, // n0x076d c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x076e c0x0000 (---------------) + I net
+ 0x00229a83, // n0x076f c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x0770 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0771 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0772 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x0773 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0774 c0x0000 (---------------) + I org
+ 0x00208182, // n0x0775 c0x0000 (---------------) + I co
+ 0x00229a83, // n0x0776 c0x0000 (---------------) + I org
+ 0x0ba2edc3, // n0x0777 c0x002e (n0x077b-n0x077c) + I com
+ 0x00275003, // n0x0778 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x0779 c0x0000 (---------------) + I mil
+ 0x0021f702, // n0x077a c0x0000 (---------------) + I of
+ 0x000f5248, // n0x077b c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x077c c0x0000 (---------------) + I com
+ 0x002349c3, // n0x077d c0x0000 (---------------) + I edu
+ 0x00275003, // n0x077e c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x077f c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0780 c0x0000 (---------------) + I org
+ 0x00009ac2, // n0x0781 c0x0000 (---------------) + za
+ 0x00200e82, // n0x0782 c0x0000 (---------------) + I ab
+ 0x0021fb02, // n0x0783 c0x0000 (---------------) + I bc
+ 0x000f5248, // n0x0784 c0x0000 (---------------) + blogspot
+ 0x00008182, // n0x0785 c0x0000 (---------------) + co
+ 0x00236c82, // n0x0786 c0x0000 (---------------) + I gc
+ 0x00205482, // n0x0787 c0x0000 (---------------) + I mb
+ 0x002263c2, // n0x0788 c0x0000 (---------------) + I nb
+ 0x002037c2, // n0x0789 c0x0000 (---------------) + I nf
+ 0x0023e082, // n0x078a c0x0000 (---------------) + I nl
+ 0x00208402, // n0x078b c0x0000 (---------------) + I ns
+ 0x00202382, // n0x078c c0x0000 (---------------) + I nt
+ 0x00209702, // n0x078d c0x0000 (---------------) + I nu
+ 0x00200582, // n0x078e c0x0000 (---------------) + I on
+ 0x00209a02, // n0x078f c0x0000 (---------------) + I pe
+ 0x00376f42, // n0x0790 c0x0000 (---------------) + I qc
+ 0x0020e342, // n0x0791 c0x0000 (---------------) + I sk
+ 0x0022a702, // n0x0792 c0x0000 (---------------) + I yk
+ 0x000ad709, // n0x0793 c0x0000 (---------------) + ftpaccess
+ 0x001706cb, // n0x0794 c0x0000 (---------------) + game-server
+ 0x000cd108, // n0x0795 c0x0000 (---------------) + myphotos
+ 0x00044749, // n0x0796 c0x0000 (---------------) + scrapping
+ 0x00275003, // n0x0797 c0x0000 (---------------) + I gov
+ 0x000f5248, // n0x0798 c0x0000 (---------------) + blogspot
+ 0x000f5248, // n0x0799 c0x0000 (---------------) + blogspot
+ 0x00205882, // n0x079a c0x0000 (---------------) + I ac
+ 0x002b1c44, // n0x079b c0x0000 (---------------) + I asso
+ 0x00208182, // n0x079c c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x079d c0x0000 (---------------) + I com
+ 0x002003c2, // n0x079e c0x0000 (---------------) + I ed
+ 0x002349c3, // n0x079f c0x0000 (---------------) + I edu
+ 0x00208502, // n0x07a0 c0x0000 (---------------) + I go
+ 0x002fa744, // n0x07a1 c0x0000 (---------------) + I gouv
+ 0x0026f683, // n0x07a2 c0x0000 (---------------) + I int
+ 0x00247ac2, // n0x07a3 c0x0000 (---------------) + I md
+ 0x0021d8c3, // n0x07a4 c0x0000 (---------------) + I net
+ 0x00200282, // n0x07a5 c0x0000 (---------------) + I or
+ 0x00229a83, // n0x07a6 c0x0000 (---------------) + I org
+ 0x00240d06, // n0x07a7 c0x0000 (---------------) + I presse
+ 0x0030cf0f, // n0x07a8 c0x0000 (---------------) + I xn--aroport-bya
+ 0x006f7083, // n0x07a9 c0x0001 (---------------) ! I www
+ 0x000f5248, // n0x07aa c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x07ab c0x0000 (---------------) + I co
+ 0x00209f03, // n0x07ac c0x0000 (---------------) + I gob
+ 0x00275003, // n0x07ad c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x07ae c0x0000 (---------------) + I mil
+ 0x00208182, // n0x07af c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x07b0 c0x0000 (---------------) + I com
+ 0x00275003, // n0x07b1 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x07b2 c0x0000 (---------------) + I net
+ 0x00205882, // n0x07b3 c0x0000 (---------------) + I ac
+ 0x00207142, // n0x07b4 c0x0000 (---------------) + I ah
+ 0x0eaeb489, // n0x07b5 c0x003a (n0x07e0-n0x07e1) o I amazonaws
+ 0x002066c2, // n0x07b6 c0x0000 (---------------) + I bj
+ 0x0f22edc3, // n0x07b7 c0x003c (n0x07e2-n0x07e3) + I com
+ 0x0023d842, // n0x07b8 c0x0000 (---------------) + I cq
+ 0x002349c3, // n0x07b9 c0x0000 (---------------) + I edu
+ 0x0022f3c2, // n0x07ba c0x0000 (---------------) + I fj
+ 0x00221f82, // n0x07bb c0x0000 (---------------) + I gd
+ 0x00275003, // n0x07bc c0x0000 (---------------) + I gov
+ 0x002242c2, // n0x07bd c0x0000 (---------------) + I gs
+ 0x0024b8c2, // n0x07be c0x0000 (---------------) + I gx
+ 0x00252202, // n0x07bf c0x0000 (---------------) + I gz
+ 0x00201c82, // n0x07c0 c0x0000 (---------------) + I ha
+ 0x00288842, // n0x07c1 c0x0000 (---------------) + I hb
+ 0x00205a02, // n0x07c2 c0x0000 (---------------) + I he
+ 0x00202082, // n0x07c3 c0x0000 (---------------) + I hi
+ 0x0020e882, // n0x07c4 c0x0000 (---------------) + I hk
+ 0x002a9982, // n0x07c5 c0x0000 (---------------) + I hl
+ 0x00218902, // n0x07c6 c0x0000 (---------------) + I hn
+ 0x002a49c2, // n0x07c7 c0x0000 (---------------) + I jl
+ 0x0023cbc2, // n0x07c8 c0x0000 (---------------) + I js
+ 0x00313282, // n0x07c9 c0x0000 (---------------) + I jx
+ 0x00218f42, // n0x07ca c0x0000 (---------------) + I ln
+ 0x00215b43, // n0x07cb c0x0000 (---------------) + I mil
+ 0x00203ec2, // n0x07cc c0x0000 (---------------) + I mo
+ 0x0021d8c3, // n0x07cd c0x0000 (---------------) + I net
+ 0x0022dc02, // n0x07ce c0x0000 (---------------) + I nm
+ 0x00269a82, // n0x07cf c0x0000 (---------------) + I nx
+ 0x00229a83, // n0x07d0 c0x0000 (---------------) + I org
+ 0x00248c82, // n0x07d1 c0x0000 (---------------) + I qh
+ 0x002024c2, // n0x07d2 c0x0000 (---------------) + I sc
+ 0x00256ec2, // n0x07d3 c0x0000 (---------------) + I sd
+ 0x00201c42, // n0x07d4 c0x0000 (---------------) + I sh
+ 0x00212a42, // n0x07d5 c0x0000 (---------------) + I sn
+ 0x002e7402, // n0x07d6 c0x0000 (---------------) + I sx
+ 0x00201a82, // n0x07d7 c0x0000 (---------------) + I tj
+ 0x00241cc2, // n0x07d8 c0x0000 (---------------) + I tw
+ 0x002753c2, // n0x07d9 c0x0000 (---------------) + I xj
+ 0x002fac8a, // n0x07da c0x0000 (---------------) + I xn--55qx5d
+ 0x00340a0a, // n0x07db c0x0000 (---------------) + I xn--io0a7i
+ 0x00372e8a, // n0x07dc c0x0000 (---------------) + I xn--od0alg
+ 0x003a3c02, // n0x07dd c0x0000 (---------------) + I xz
+ 0x0020a442, // n0x07de c0x0000 (---------------) + I yn
+ 0x0023df82, // n0x07df c0x0000 (---------------) + I zj
+ 0x0ec303c7, // n0x07e0 c0x003b (n0x07e1-n0x07e2) + compute
+ 0x0015bb8a, // n0x07e1 c0x0000 (---------------) + cn-north-1
+ 0x0f6eb489, // n0x07e2 c0x003d (n0x07e3-n0x07e4) o I amazonaws
+ 0x0fb5bb8a, // n0x07e3 c0x003e (n0x07e4-n0x07e5) o I cn-north-1
+ 0x0004d702, // n0x07e4 c0x0000 (---------------) + s3
+ 0x00243984, // n0x07e5 c0x0000 (---------------) + I arts
+ 0x1022edc3, // n0x07e6 c0x0040 (n0x07f2-n0x07f3) + I com
+ 0x002349c3, // n0x07e7 c0x0000 (---------------) + I edu
+ 0x00247a04, // n0x07e8 c0x0000 (---------------) + I firm
+ 0x00275003, // n0x07e9 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x07ea c0x0000 (---------------) + I info
+ 0x0026f683, // n0x07eb c0x0000 (---------------) + I int
+ 0x00215b43, // n0x07ec c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x07ed c0x0000 (---------------) + I net
+ 0x0020e543, // n0x07ee c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x07ef c0x0000 (---------------) + I org
+ 0x00226f03, // n0x07f0 c0x0000 (---------------) + I rec
+ 0x0021fa83, // n0x07f1 c0x0000 (---------------) + I web
+ 0x000f5248, // n0x07f2 c0x0000 (---------------) + blogspot
+ 0x000bd9c5, // n0x07f3 c0x0000 (---------------) + 1kapp
+ 0x00104e02, // n0x07f4 c0x0000 (---------------) + 4u
+ 0x0016af06, // n0x07f5 c0x0000 (---------------) + africa
+ 0x10aeb489, // n0x07f6 c0x0042 (n0x08bf-n0x08d1) o I amazonaws
+ 0x00045a87, // n0x07f7 c0x0000 (---------------) + appspot
+ 0x000011c2, // n0x07f8 c0x0000 (---------------) + ar
+ 0x00194f0a, // n0x07f9 c0x0000 (---------------) + betainabox
+ 0x00029007, // n0x07fa c0x0000 (---------------) + blogdns
+ 0x000f5248, // n0x07fb c0x0000 (---------------) + blogspot
+ 0x0000bb42, // n0x07fc c0x0000 (---------------) + br
+ 0x0013dd87, // n0x07fd c0x0000 (---------------) + cechire
+ 0x0010944f, // n0x07fe c0x0000 (---------------) + cloudcontrolapp
+ 0x0002b98f, // n0x07ff c0x0000 (---------------) + cloudcontrolled
+ 0x0001a142, // n0x0800 c0x0000 (---------------) + cn
+ 0x00008182, // n0x0801 c0x0000 (---------------) + co
+ 0x000932c8, // n0x0802 c0x0000 (---------------) + codespot
+ 0x00000402, // n0x0803 c0x0000 (---------------) + de
+ 0x00147e08, // n0x0804 c0x0000 (---------------) + dnsalias
+ 0x00074607, // n0x0805 c0x0000 (---------------) + dnsdojo
+ 0x000ebecb, // n0x0806 c0x0000 (---------------) + doesntexist
+ 0x00168789, // n0x0807 c0x0000 (---------------) + dontexist
+ 0x00147d07, // n0x0808 c0x0000 (---------------) + doomdns
+ 0x000e908c, // n0x0809 c0x0000 (---------------) + dreamhosters
+ 0x0012088a, // n0x080a c0x0000 (---------------) + dyn-o-saur
+ 0x0018bd88, // n0x080b c0x0000 (---------------) + dynalias
+ 0x0006c4ce, // n0x080c c0x0000 (---------------) + dyndns-at-home
+ 0x000d54ce, // n0x080d c0x0000 (---------------) + dyndns-at-work
+ 0x00028e4b, // n0x080e c0x0000 (---------------) + dyndns-blog
+ 0x000e0acb, // n0x080f c0x0000 (---------------) + dyndns-free
+ 0x00011a0b, // n0x0810 c0x0000 (---------------) + dyndns-home
+ 0x00016e09, // n0x0811 c0x0000 (---------------) + dyndns-ip
+ 0x0001a44b, // n0x0812 c0x0000 (---------------) + dyndns-mail
+ 0x0001f54d, // n0x0813 c0x0000 (---------------) + dyndns-office
+ 0x0002090b, // n0x0814 c0x0000 (---------------) + dyndns-pics
+ 0x0002a14d, // n0x0815 c0x0000 (---------------) + dyndns-remote
+ 0x0002ad8d, // n0x0816 c0x0000 (---------------) + dyndns-server
+ 0x00151bca, // n0x0817 c0x0000 (---------------) + dyndns-web
+ 0x0012fb4b, // n0x0818 c0x0000 (---------------) + dyndns-wiki
+ 0x0013298b, // n0x0819 c0x0000 (---------------) + dyndns-work
+ 0x0003a850, // n0x081a c0x0000 (---------------) + elasticbeanstalk
+ 0x0000498f, // n0x081b c0x0000 (---------------) + est-a-la-maison
+ 0x000ce98f, // n0x081c c0x0000 (---------------) + est-a-la-masion
+ 0x0003404d, // n0x081d c0x0000 (---------------) + est-le-patron
+ 0x0007dbd0, // n0x081e c0x0000 (---------------) + est-mon-blogueur
+ 0x00024542, // n0x081f c0x0000 (---------------) + eu
+ 0x0004588b, // n0x0820 c0x0000 (---------------) + firebaseapp
+ 0x0004c788, // n0x0821 c0x0000 (---------------) + flynnhub
+ 0x0005afc7, // n0x0822 c0x0000 (---------------) + from-ak
+ 0x0005b307, // n0x0823 c0x0000 (---------------) + from-al
+ 0x0005b4c7, // n0x0824 c0x0000 (---------------) + from-ar
+ 0x0005ba47, // n0x0825 c0x0000 (---------------) + from-ca
+ 0x0005dbc7, // n0x0826 c0x0000 (---------------) + from-ct
+ 0x0005e287, // n0x0827 c0x0000 (---------------) + from-dc
+ 0x0005f3c7, // n0x0828 c0x0000 (---------------) + from-de
+ 0x0005f907, // n0x0829 c0x0000 (---------------) + from-fl
+ 0x0005ff47, // n0x082a c0x0000 (---------------) + from-ga
+ 0x000602c7, // n0x082b c0x0000 (---------------) + from-hi
+ 0x00060d07, // n0x082c c0x0000 (---------------) + from-ia
+ 0x00060ec7, // n0x082d c0x0000 (---------------) + from-id
+ 0x00061087, // n0x082e c0x0000 (---------------) + from-il
+ 0x00061247, // n0x082f c0x0000 (---------------) + from-in
+ 0x00061547, // n0x0830 c0x0000 (---------------) + from-ks
+ 0x00061b87, // n0x0831 c0x0000 (---------------) + from-ky
+ 0x000623c7, // n0x0832 c0x0000 (---------------) + from-ma
+ 0x00062a87, // n0x0833 c0x0000 (---------------) + from-md
+ 0x00063387, // n0x0834 c0x0000 (---------------) + from-mi
+ 0x00064ac7, // n0x0835 c0x0000 (---------------) + from-mn
+ 0x00064c87, // n0x0836 c0x0000 (---------------) + from-mo
+ 0x00064f87, // n0x0837 c0x0000 (---------------) + from-ms
+ 0x000656c7, // n0x0838 c0x0000 (---------------) + from-mt
+ 0x000658c7, // n0x0839 c0x0000 (---------------) + from-nc
+ 0x00066087, // n0x083a c0x0000 (---------------) + from-nd
+ 0x00066247, // n0x083b c0x0000 (---------------) + from-ne
+ 0x00066647, // n0x083c c0x0000 (---------------) + from-nh
+ 0x000669c7, // n0x083d c0x0000 (---------------) + from-nj
+ 0x00066f87, // n0x083e c0x0000 (---------------) + from-nm
+ 0x00067747, // n0x083f c0x0000 (---------------) + from-nv
+ 0x00068bc7, // n0x0840 c0x0000 (---------------) + from-oh
+ 0x00068e87, // n0x0841 c0x0000 (---------------) + from-ok
+ 0x00069207, // n0x0842 c0x0000 (---------------) + from-or
+ 0x000693c7, // n0x0843 c0x0000 (---------------) + from-pa
+ 0x00069747, // n0x0844 c0x0000 (---------------) + from-pr
+ 0x00069d87, // n0x0845 c0x0000 (---------------) + from-ri
+ 0x0006ac87, // n0x0846 c0x0000 (---------------) + from-sc
+ 0x0006b087, // n0x0847 c0x0000 (---------------) + from-sd
+ 0x0006b847, // n0x0848 c0x0000 (---------------) + from-tn
+ 0x0006ba07, // n0x0849 c0x0000 (---------------) + from-tx
+ 0x0006be47, // n0x084a c0x0000 (---------------) + from-ut
+ 0x0006ce47, // n0x084b c0x0000 (---------------) + from-va
+ 0x0006d487, // n0x084c c0x0000 (---------------) + from-vt
+ 0x0006de87, // n0x084d c0x0000 (---------------) + from-wa
+ 0x0006e047, // n0x084e c0x0000 (---------------) + from-wi
+ 0x0006e3c7, // n0x084f c0x0000 (---------------) + from-wv
+ 0x0006e947, // n0x0850 c0x0000 (---------------) + from-wy
+ 0x00009582, // n0x0851 c0x0000 (---------------) + gb
+ 0x000d0707, // n0x0852 c0x0000 (---------------) + getmyip
+ 0x000c8391, // n0x0853 c0x0000 (---------------) + githubusercontent
+ 0x000d8b0a, // n0x0854 c0x0000 (---------------) + googleapis
+ 0x0009314a, // n0x0855 c0x0000 (---------------) + googlecode
+ 0x0004f886, // n0x0856 c0x0000 (---------------) + gotdns
+ 0x0001450b, // n0x0857 c0x0000 (---------------) + gotpantheon
+ 0x000089c2, // n0x0858 c0x0000 (---------------) + gr
+ 0x0017ea89, // n0x0859 c0x0000 (---------------) + herokuapp
+ 0x000896c9, // n0x085a c0x0000 (---------------) + herokussl
+ 0x0000e882, // n0x085b c0x0000 (---------------) + hk
+ 0x000fef8a, // n0x085c c0x0000 (---------------) + hobby-site
+ 0x0009c509, // n0x085d c0x0000 (---------------) + homelinux
+ 0x0009d988, // n0x085e c0x0000 (---------------) + homeunix
+ 0x0000d0c2, // n0x085f c0x0000 (---------------) + hu
+ 0x00106c49, // n0x0860 c0x0000 (---------------) + iamallama
+ 0x0015c40e, // n0x0861 c0x0000 (---------------) + is-a-anarchist
+ 0x0009894c, // n0x0862 c0x0000 (---------------) + is-a-blogger
+ 0x000cee0f, // n0x0863 c0x0000 (---------------) + is-a-bookkeeper
+ 0x0018758e, // n0x0864 c0x0000 (---------------) + is-a-bulls-fan
+ 0x0000c24c, // n0x0865 c0x0000 (---------------) + is-a-caterer
+ 0x0000fe09, // n0x0866 c0x0000 (---------------) + is-a-chef
+ 0x000125d1, // n0x0867 c0x0000 (---------------) + is-a-conservative
+ 0x00013a48, // n0x0868 c0x0000 (---------------) + is-a-cpa
+ 0x00017752, // n0x0869 c0x0000 (---------------) + is-a-cubicle-slave
+ 0x0001844d, // n0x086a c0x0000 (---------------) + is-a-democrat
+ 0x00022d8d, // n0x086b c0x0000 (---------------) + is-a-designer
+ 0x000236cb, // n0x086c c0x0000 (---------------) + is-a-doctor
+ 0x00028555, // n0x086d c0x0000 (---------------) + is-a-financialadvisor
+ 0x0005f049, // n0x086e c0x0000 (---------------) + is-a-geek
+ 0x0016ba0a, // n0x086f c0x0000 (---------------) + is-a-green
+ 0x00130509, // n0x0870 c0x0000 (---------------) + is-a-guru
+ 0x00042150, // n0x0871 c0x0000 (---------------) + is-a-hard-worker
+ 0x0004884b, // n0x0872 c0x0000 (---------------) + is-a-hunter
+ 0x00054ccf, // n0x0873 c0x0000 (---------------) + is-a-landscaper
+ 0x0005d4cb, // n0x0874 c0x0000 (---------------) + is-a-lawyer
+ 0x000653cc, // n0x0875 c0x0000 (---------------) + is-a-liberal
+ 0x00067350, // n0x0876 c0x0000 (---------------) + is-a-libertarian
+ 0x0006ca4a, // n0x0877 c0x0000 (---------------) + is-a-llama
+ 0x0007024d, // n0x0878 c0x0000 (---------------) + is-a-musician
+ 0x0007198e, // n0x0879 c0x0000 (---------------) + is-a-nascarfan
+ 0x0007570a, // n0x087a c0x0000 (---------------) + is-a-nurse
+ 0x00081dcc, // n0x087b c0x0000 (---------------) + is-a-painter
+ 0x00137194, // n0x087c c0x0000 (---------------) + is-a-personaltrainer
+ 0x0017e711, // n0x087d c0x0000 (---------------) + is-a-photographer
+ 0x0008bc4b, // n0x087e c0x0000 (---------------) + is-a-player
+ 0x0008fd8f, // n0x087f c0x0000 (---------------) + is-a-republican
+ 0x00095dcd, // n0x0880 c0x0000 (---------------) + is-a-rockstar
+ 0x000982ce, // n0x0881 c0x0000 (---------------) + is-a-socialist
+ 0x000a300c, // n0x0882 c0x0000 (---------------) + is-a-student
+ 0x000a374c, // n0x0883 c0x0000 (---------------) + is-a-teacher
+ 0x000edf8b, // n0x0884 c0x0000 (---------------) + is-a-techie
+ 0x000ee28e, // n0x0885 c0x0000 (---------------) + is-a-therapist
+ 0x000ed890, // n0x0886 c0x0000 (---------------) + is-an-accountant
+ 0x00156b4b, // n0x0887 c0x0000 (---------------) + is-an-actor
+ 0x000ed38d, // n0x0888 c0x0000 (---------------) + is-an-actress
+ 0x000d5f4f, // n0x0889 c0x0000 (---------------) + is-an-anarchist
+ 0x0015634c, // n0x088a c0x0000 (---------------) + is-an-artist
+ 0x00129f8e, // n0x088b c0x0000 (---------------) + is-an-engineer
+ 0x00168c91, // n0x088c c0x0000 (---------------) + is-an-entertainer
+ 0x000aed4c, // n0x088d c0x0000 (---------------) + is-certified
+ 0x000b3d47, // n0x088e c0x0000 (---------------) + is-gone
+ 0x000b488d, // n0x088f c0x0000 (---------------) + is-into-anime
+ 0x000b608c, // n0x0890 c0x0000 (---------------) + is-into-cars
+ 0x000d3e10, // n0x0891 c0x0000 (---------------) + is-into-cartoons
+ 0x00118acd, // n0x0892 c0x0000 (---------------) + is-into-games
+ 0x00144007, // n0x0893 c0x0000 (---------------) + is-leet
+ 0x00157c90, // n0x0894 c0x0000 (---------------) + is-not-certified
+ 0x000e2408, // n0x0895 c0x0000 (---------------) + is-slick
+ 0x000e398b, // n0x0896 c0x0000 (---------------) + is-uberleet
+ 0x0014798f, // n0x0897 c0x0000 (---------------) + is-with-theband
+ 0x000fff08, // n0x0898 c0x0000 (---------------) + isa-geek
+ 0x000d8d0d, // n0x0899 c0x0000 (---------------) + isa-hockeynut
+ 0x0014b750, // n0x089a c0x0000 (---------------) + issmarterthanyou
+ 0x000a9883, // n0x089b c0x0000 (---------------) + jpn
+ 0x000076c2, // n0x089c c0x0000 (---------------) + kr
+ 0x000510c9, // n0x089d c0x0000 (---------------) + likes-pie
+ 0x0006c2ca, // n0x089e c0x0000 (---------------) + likescandy
+ 0x0001ddc3, // n0x089f c0x0000 (---------------) + mex
+ 0x00116a48, // n0x08a0 c0x0000 (---------------) + neat-url
+ 0x000079c7, // n0x08a1 c0x0000 (---------------) + nfshost
+ 0x00000d82, // n0x08a2 c0x0000 (---------------) + no
+ 0x0005e84a, // n0x08a3 c0x0000 (---------------) + operaunite
+ 0x0017e1cf, // n0x08a4 c0x0000 (---------------) + outsystemscloud
+ 0x00123c52, // n0x08a5 c0x0000 (---------------) + pagespeedmobilizer
+ 0x00114503, // n0x08a6 c0x0000 (---------------) + qa2
+ 0x00176f42, // n0x08a7 c0x0000 (---------------) + qc
+ 0x001093c7, // n0x08a8 c0x0000 (---------------) + rhcloud
+ 0x00000cc2, // n0x08a9 c0x0000 (---------------) + ro
+ 0x00011ec2, // n0x08aa c0x0000 (---------------) + ru
+ 0x00002402, // n0x08ab c0x0000 (---------------) + sa
+ 0x00198490, // n0x08ac c0x0000 (---------------) + saves-the-whales
+ 0x00001d42, // n0x08ad c0x0000 (---------------) + se
+ 0x00053986, // n0x08ae c0x0000 (---------------) + selfip
+ 0x00046cce, // n0x08af c0x0000 (---------------) + sells-for-less
+ 0x00084c4b, // n0x08b0 c0x0000 (---------------) + sells-for-u
+ 0x000c9608, // n0x08b1 c0x0000 (---------------) + servebbs
+ 0x000c670a, // n0x08b2 c0x0000 (---------------) + simple-url
+ 0x000ec7c7, // n0x08b3 c0x0000 (---------------) + sinaapp
+ 0x0013508d, // n0x08b4 c0x0000 (---------------) + space-to-rent
+ 0x0017980c, // n0x08b5 c0x0000 (---------------) + teaches-yoga
+ 0x00000f82, // n0x08b6 c0x0000 (---------------) + uk
+ 0x00002982, // n0x08b7 c0x0000 (---------------) + us
+ 0x0000d7c2, // n0x08b8 c0x0000 (---------------) + uy
+ 0x000ec70a, // n0x08b9 c0x0000 (---------------) + vipsinaapp
+ 0x000d8a0a, // n0x08ba c0x0000 (---------------) + withgoogle
+ 0x000de78b, // n0x08bb c0x0000 (---------------) + withyoutube
+ 0x000f4fce, // n0x08bc c0x0000 (---------------) + writesthisblog
+ 0x000d2888, // n0x08bd c0x0000 (---------------) + yolasite
+ 0x00009ac2, // n0x08be c0x0000 (---------------) + za
+ 0x10c303c7, // n0x08bf c0x0043 (n0x08d1-n0x08da) + compute
+ 0x110303c9, // n0x08c0 c0x0044 (n0x08da-n0x08dc) + compute-1
+ 0x0000f683, // n0x08c1 c0x0000 (---------------) + elb
+ 0x11763c0c, // n0x08c2 c0x0045 (n0x08dc-n0x08dd) o I eu-central-1
+ 0x0004d702, // n0x08c3 c0x0000 (---------------) + s3
+ 0x000be551, // n0x08c4 c0x0000 (---------------) + s3-ap-northeast-1
+ 0x000bd5d1, // n0x08c5 c0x0000 (---------------) + s3-ap-southeast-1
+ 0x00103851, // n0x08c6 c0x0000 (---------------) + s3-ap-southeast-2
+ 0x00163b4f, // n0x08c7 c0x0000 (---------------) + s3-eu-central-1
+ 0x0004d70c, // n0x08c8 c0x0000 (---------------) + s3-eu-west-1
+ 0x000a234d, // n0x08c9 c0x0000 (---------------) + s3-external-1
+ 0x0011eb4d, // n0x08ca c0x0000 (---------------) + s3-external-2
+ 0x00120c55, // n0x08cb c0x0000 (---------------) + s3-fips-us-gov-west-1
+ 0x0012c3cc, // n0x08cc c0x0000 (---------------) + s3-sa-east-1
+ 0x00142c10, // n0x08cd c0x0000 (---------------) + s3-us-gov-west-1
+ 0x000647cc, // n0x08ce c0x0000 (---------------) + s3-us-west-1
+ 0x000d6bcc, // n0x08cf c0x0000 (---------------) + s3-us-west-2
+ 0x0011b689, // n0x08d0 c0x0000 (---------------) + us-east-1
+ 0x000be60e, // n0x08d1 c0x0000 (---------------) + ap-northeast-1
+ 0x000bd68e, // n0x08d2 c0x0000 (---------------) + ap-southeast-1
+ 0x0010390e, // n0x08d3 c0x0000 (---------------) + ap-southeast-2
+ 0x00163c0c, // n0x08d4 c0x0000 (---------------) + eu-central-1
+ 0x0004d7c9, // n0x08d5 c0x0000 (---------------) + eu-west-1
+ 0x0012c489, // n0x08d6 c0x0000 (---------------) + sa-east-1
+ 0x00120e4d, // n0x08d7 c0x0000 (---------------) + us-gov-west-1
+ 0x00064889, // n0x08d8 c0x0000 (---------------) + us-west-1
+ 0x000d6c89, // n0x08d9 c0x0000 (---------------) + us-west-2
+ 0x0010a983, // n0x08da c0x0000 (---------------) + z-1
+ 0x0013bb83, // n0x08db c0x0000 (---------------) + z-2
+ 0x0004d702, // n0x08dc c0x0000 (---------------) + s3
+ 0x00205882, // n0x08dd c0x0000 (---------------) + I ac
+ 0x00208182, // n0x08de c0x0000 (---------------) + I co
+ 0x002003c2, // n0x08df c0x0000 (---------------) + I ed
+ 0x0020e002, // n0x08e0 c0x0000 (---------------) + I fi
+ 0x00208502, // n0x08e1 c0x0000 (---------------) + I go
+ 0x00200282, // n0x08e2 c0x0000 (---------------) + I or
+ 0x00202402, // n0x08e3 c0x0000 (---------------) + I sa
+ 0x0022edc3, // n0x08e4 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x08e5 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x08e6 c0x0000 (---------------) + I gov
+ 0x00389f83, // n0x08e7 c0x0000 (---------------) + I inf
+ 0x0021d8c3, // n0x08e8 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x08e9 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x08ea c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x08eb c0x0000 (---------------) + I com
+ 0x002349c3, // n0x08ec c0x0000 (---------------) + I edu
+ 0x0021d8c3, // n0x08ed c0x0000 (---------------) + I net
+ 0x00229a83, // n0x08ee c0x0000 (---------------) + I org
+ 0x0005cf03, // n0x08ef c0x0000 (---------------) + ath
+ 0x00275003, // n0x08f0 c0x0000 (---------------) + I gov
+ 0x00205882, // n0x08f1 c0x0000 (---------------) + I ac
+ 0x0030a143, // n0x08f2 c0x0000 (---------------) + I biz
+ 0x1322edc3, // n0x08f3 c0x004c (n0x08fe-n0x08ff) + I com
+ 0x0027c487, // n0x08f4 c0x0000 (---------------) + I ekloges
+ 0x00275003, // n0x08f5 c0x0000 (---------------) + I gov
+ 0x00342703, // n0x08f6 c0x0000 (---------------) + I ltd
+ 0x0027ca84, // n0x08f7 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x08f8 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x08f9 c0x0000 (---------------) + I org
+ 0x00266bca, // n0x08fa c0x0000 (---------------) + I parliament
+ 0x00240d05, // n0x08fb c0x0000 (---------------) + I press
+ 0x00220283, // n0x08fc c0x0000 (---------------) + I pro
+ 0x00200142, // n0x08fd c0x0000 (---------------) + I tm
+ 0x000f5248, // n0x08fe c0x0000 (---------------) + blogspot
+ 0x000f5248, // n0x08ff c0x0000 (---------------) + blogspot
+ 0x000f5248, // n0x0900 c0x0000 (---------------) + blogspot
+ 0x0002edc3, // n0x0901 c0x0000 (---------------) + com
+ 0x000d434f, // n0x0902 c0x0000 (---------------) + fuettertdasnetz
+ 0x0016890a, // n0x0903 c0x0000 (---------------) + isteingeek
+ 0x00098587, // n0x0904 c0x0000 (---------------) + istmein
+ 0x0001d74a, // n0x0905 c0x0000 (---------------) + lebtimnetz
+ 0x0008df8a, // n0x0906 c0x0000 (---------------) + leitungsen
+ 0x000355cd, // n0x0907 c0x0000 (---------------) + traeumtgerade
+ 0x000f5248, // n0x0908 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x0909 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x090a c0x0000 (---------------) + I edu
+ 0x00275003, // n0x090b c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x090c c0x0000 (---------------) + I net
+ 0x00229a83, // n0x090d c0x0000 (---------------) + I org
+ 0x002011c3, // n0x090e c0x0000 (---------------) + I art
+ 0x0022edc3, // n0x090f c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0910 c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x0911 c0x0000 (---------------) + I gob
+ 0x00275003, // n0x0912 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x0913 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0914 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0915 c0x0000 (---------------) + I org
+ 0x00289883, // n0x0916 c0x0000 (---------------) + I sld
+ 0x0021fa83, // n0x0917 c0x0000 (---------------) + I web
+ 0x002011c3, // n0x0918 c0x0000 (---------------) + I art
+ 0x002b1c44, // n0x0919 c0x0000 (---------------) + I asso
+ 0x0022edc3, // n0x091a c0x0000 (---------------) + I com
+ 0x002349c3, // n0x091b c0x0000 (---------------) + I edu
+ 0x00275003, // n0x091c c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x091d c0x0000 (---------------) + I net
+ 0x00229a83, // n0x091e c0x0000 (---------------) + I org
+ 0x002210c3, // n0x091f c0x0000 (---------------) + I pol
+ 0x0022edc3, // n0x0920 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0921 c0x0000 (---------------) + I edu
+ 0x0020e003, // n0x0922 c0x0000 (---------------) + I fin
+ 0x00209f03, // n0x0923 c0x0000 (---------------) + I gob
+ 0x00275003, // n0x0924 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x0925 c0x0000 (---------------) + I info
+ 0x00324c03, // n0x0926 c0x0000 (---------------) + I k12
+ 0x00211c43, // n0x0927 c0x0000 (---------------) + I med
+ 0x00215b43, // n0x0928 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0929 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x092a c0x0000 (---------------) + I org
+ 0x00220283, // n0x092b c0x0000 (---------------) + I pro
+ 0x003a3443, // n0x092c c0x0000 (---------------) + I aip
+ 0x1562edc3, // n0x092d c0x0055 (n0x0936-n0x0937) + I com
+ 0x002349c3, // n0x092e c0x0000 (---------------) + I edu
+ 0x002aef43, // n0x092f c0x0000 (---------------) + I fie
+ 0x00275003, // n0x0930 c0x0000 (---------------) + I gov
+ 0x00265503, // n0x0931 c0x0000 (---------------) + I lib
+ 0x00211c43, // n0x0932 c0x0000 (---------------) + I med
+ 0x00229a83, // n0x0933 c0x0000 (---------------) + I org
+ 0x00204383, // n0x0934 c0x0000 (---------------) + I pri
+ 0x0037f9c4, // n0x0935 c0x0000 (---------------) + I riik
+ 0x000f5248, // n0x0936 c0x0000 (---------------) + blogspot
+ 0x15e2edc3, // n0x0937 c0x0057 (n0x0940-n0x0941) + I com
+ 0x002349c3, // n0x0938 c0x0000 (---------------) + I edu
+ 0x0029da43, // n0x0939 c0x0000 (---------------) + I eun
+ 0x00275003, // n0x093a c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x093b c0x0000 (---------------) + I mil
+ 0x0027ca84, // n0x093c c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x093d c0x0000 (---------------) + I net
+ 0x00229a83, // n0x093e c0x0000 (---------------) + I org
+ 0x0021c043, // n0x093f c0x0000 (---------------) + I sci
+ 0x000f5248, // n0x0940 c0x0000 (---------------) + blogspot
+ 0x1662edc3, // n0x0941 c0x0059 (n0x0946-n0x0947) + I com
+ 0x002349c3, // n0x0942 c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x0943 c0x0000 (---------------) + I gob
+ 0x0020e543, // n0x0944 c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x0945 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x0946 c0x0000 (---------------) + blogspot
+ 0x0030a143, // n0x0947 c0x0000 (---------------) + I biz
+ 0x0022edc3, // n0x0948 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0949 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x094a c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x094b c0x0000 (---------------) + I info
+ 0x0027ca84, // n0x094c c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x094d c0x0000 (---------------) + I net
+ 0x00229a83, // n0x094e c0x0000 (---------------) + I org
+ 0x0031e505, // n0x094f c0x0000 (---------------) + I aland
+ 0x000f5248, // n0x0950 c0x0000 (---------------) + blogspot
+ 0x0001eb43, // n0x0951 c0x0000 (---------------) + iki
+ 0x002bcb88, // n0x0952 c0x0000 (---------------) + I aeroport
+ 0x0034ca87, // n0x0953 c0x0000 (---------------) + I assedic
+ 0x002b1c44, // n0x0954 c0x0000 (---------------) + I asso
+ 0x0033aac6, // n0x0955 c0x0000 (---------------) + I avocat
+ 0x00342ac6, // n0x0956 c0x0000 (---------------) + I avoues
+ 0x000f5248, // n0x0957 c0x0000 (---------------) + blogspot
+ 0x00316483, // n0x0958 c0x0000 (---------------) + I cci
+ 0x003793c9, // n0x0959 c0x0000 (---------------) + I chambagri
+ 0x002ade55, // n0x095a c0x0000 (---------------) + I chirurgiens-dentistes
+ 0x0022edc3, // n0x095b c0x0000 (---------------) + I com
+ 0x002a8552, // n0x095c c0x0000 (---------------) + I experts-comptables
+ 0x002a830f, // n0x095d c0x0000 (---------------) + I geometre-expert
+ 0x002fa744, // n0x095e c0x0000 (---------------) + I gouv
+ 0x00215505, // n0x095f c0x0000 (---------------) + I greta
+ 0x002e81d0, // n0x0960 c0x0000 (---------------) + I huissier-justice
+ 0x0035abc7, // n0x0961 c0x0000 (---------------) + I medecin
+ 0x0020e543, // n0x0962 c0x0000 (---------------) + I nom
+ 0x00246408, // n0x0963 c0x0000 (---------------) + I notaires
+ 0x002d5a0a, // n0x0964 c0x0000 (---------------) + I pharmacien
+ 0x0023f504, // n0x0965 c0x0000 (---------------) + I port
+ 0x002da783, // n0x0966 c0x0000 (---------------) + I prd
+ 0x00240d06, // n0x0967 c0x0000 (---------------) + I presse
+ 0x00200142, // n0x0968 c0x0000 (---------------) + I tm
+ 0x003781cb, // n0x0969 c0x0000 (---------------) + I veterinaire
+ 0x0022edc3, // n0x096a c0x0000 (---------------) + I com
+ 0x002349c3, // n0x096b c0x0000 (---------------) + I edu
+ 0x00275003, // n0x096c c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x096d c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x096e c0x0000 (---------------) + I net
+ 0x00229a83, // n0x096f c0x0000 (---------------) + I org
+ 0x002def03, // n0x0970 c0x0000 (---------------) + I pvt
+ 0x00208182, // n0x0971 c0x0000 (---------------) + I co
+ 0x0021d8c3, // n0x0972 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0973 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x0974 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0975 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0976 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x0977 c0x0000 (---------------) + I mil
+ 0x00229a83, // n0x0978 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x0979 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x097a c0x0000 (---------------) + I edu
+ 0x00275003, // n0x097b c0x0000 (---------------) + I gov
+ 0x00342703, // n0x097c c0x0000 (---------------) + I ltd
+ 0x00210243, // n0x097d c0x0000 (---------------) + I mod
+ 0x00229a83, // n0x097e c0x0000 (---------------) + I org
+ 0x00208182, // n0x097f c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x0980 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0981 c0x0000 (---------------) + I edu
+ 0x0021d8c3, // n0x0982 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0983 c0x0000 (---------------) + I org
+ 0x00205882, // n0x0984 c0x0000 (---------------) + I ac
+ 0x0022edc3, // n0x0985 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0986 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0987 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x0988 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0989 c0x0000 (---------------) + I org
+ 0x002b1c44, // n0x098a c0x0000 (---------------) + I asso
+ 0x0022edc3, // n0x098b c0x0000 (---------------) + I com
+ 0x002349c3, // n0x098c c0x0000 (---------------) + I edu
+ 0x00207804, // n0x098d c0x0000 (---------------) + I mobi
+ 0x0021d8c3, // n0x098e c0x0000 (---------------) + I net
+ 0x00229a83, // n0x098f c0x0000 (---------------) + I org
+ 0x000f5248, // n0x0990 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x0991 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0992 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0993 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x0994 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0995 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x0996 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0997 c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x0998 c0x0000 (---------------) + I gob
+ 0x00202603, // n0x0999 c0x0000 (---------------) + I ind
+ 0x00215b43, // n0x099a c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x099b c0x0000 (---------------) + I net
+ 0x00229a83, // n0x099c c0x0000 (---------------) + I org
+ 0x00208182, // n0x099d c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x099e c0x0000 (---------------) + I com
+ 0x0021d8c3, // n0x099f c0x0000 (---------------) + I net
+ 0x000f5248, // n0x09a0 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x09a1 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x09a2 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x09a3 c0x0000 (---------------) + I gov
+ 0x00306f03, // n0x09a4 c0x0000 (---------------) + I idv
+ 0x00061383, // n0x09a5 c0x0000 (---------------) + inc
+ 0x00142703, // n0x09a6 c0x0000 (---------------) + ltd
+ 0x0021d8c3, // n0x09a7 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x09a8 c0x0000 (---------------) + I org
+ 0x002fac8a, // n0x09a9 c0x0000 (---------------) + I xn--55qx5d
+ 0x0031bfc9, // n0x09aa c0x0000 (---------------) + I xn--ciqpn
+ 0x003361cb, // n0x09ab c0x0000 (---------------) + I xn--gmq050i
+ 0x0033674a, // n0x09ac c0x0000 (---------------) + I xn--gmqw5a
+ 0x00340a0a, // n0x09ad c0x0000 (---------------) + I xn--io0a7i
+ 0x0034f6cb, // n0x09ae c0x0000 (---------------) + I xn--lcvr32d
+ 0x0036544a, // n0x09af c0x0000 (---------------) + I xn--mk0axi
+ 0x0036d74a, // n0x09b0 c0x0000 (---------------) + I xn--mxtq1m
+ 0x00372e8a, // n0x09b1 c0x0000 (---------------) + I xn--od0alg
+ 0x0037310b, // n0x09b2 c0x0000 (---------------) + I xn--od0aq3b
+ 0x0038d709, // n0x09b3 c0x0000 (---------------) + I xn--tn0ag
+ 0x0038f90a, // n0x09b4 c0x0000 (---------------) + I xn--uc0atv
+ 0x0038fe4b, // n0x09b5 c0x0000 (---------------) + I xn--uc0ay4a
+ 0x0039ba4b, // n0x09b6 c0x0000 (---------------) + I xn--wcvs22d
+ 0x003a23ca, // n0x09b7 c0x0000 (---------------) + I xn--zf0avx
+ 0x0022edc3, // n0x09b8 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x09b9 c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x09ba c0x0000 (---------------) + I gob
+ 0x00215b43, // n0x09bb c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x09bc c0x0000 (---------------) + I net
+ 0x00229a83, // n0x09bd c0x0000 (---------------) + I org
+ 0x000f5248, // n0x09be c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x09bf c0x0000 (---------------) + I com
+ 0x0025afc4, // n0x09c0 c0x0000 (---------------) + I from
+ 0x00217542, // n0x09c1 c0x0000 (---------------) + I iz
+ 0x0027ca84, // n0x09c2 c0x0000 (---------------) + I name
+ 0x00299105, // n0x09c3 c0x0000 (---------------) + I adult
+ 0x002011c3, // n0x09c4 c0x0000 (---------------) + I art
+ 0x002b1c44, // n0x09c5 c0x0000 (---------------) + I asso
+ 0x0022edc3, // n0x09c6 c0x0000 (---------------) + I com
+ 0x00238284, // n0x09c7 c0x0000 (---------------) + I coop
+ 0x002349c3, // n0x09c8 c0x0000 (---------------) + I edu
+ 0x00247a04, // n0x09c9 c0x0000 (---------------) + I firm
+ 0x002fa744, // n0x09ca c0x0000 (---------------) + I gouv
+ 0x0038a144, // n0x09cb c0x0000 (---------------) + I info
+ 0x00211c43, // n0x09cc c0x0000 (---------------) + I med
+ 0x0021d8c3, // n0x09cd c0x0000 (---------------) + I net
+ 0x00229a83, // n0x09ce c0x0000 (---------------) + I org
+ 0x003372c5, // n0x09cf c0x0000 (---------------) + I perso
+ 0x002210c3, // n0x09d0 c0x0000 (---------------) + I pol
+ 0x00220283, // n0x09d1 c0x0000 (---------------) + I pro
+ 0x0020c043, // n0x09d2 c0x0000 (---------------) + I rel
+ 0x00332c44, // n0x09d3 c0x0000 (---------------) + I shop
+ 0x00226944, // n0x09d4 c0x0000 (---------------) + I 2000
+ 0x00250605, // n0x09d5 c0x0000 (---------------) + I agrar
+ 0x000f5248, // n0x09d6 c0x0000 (---------------) + blogspot
+ 0x00208b44, // n0x09d7 c0x0000 (---------------) + I bolt
+ 0x00351546, // n0x09d8 c0x0000 (---------------) + I casino
+ 0x0027e804, // n0x09d9 c0x0000 (---------------) + I city
+ 0x00208182, // n0x09da c0x0000 (---------------) + I co
+ 0x00333307, // n0x09db c0x0000 (---------------) + I erotica
+ 0x00249a47, // n0x09dc c0x0000 (---------------) + I erotika
+ 0x00243ec4, // n0x09dd c0x0000 (---------------) + I film
+ 0x00253c85, // n0x09de c0x0000 (---------------) + I forum
+ 0x00318cc5, // n0x09df c0x0000 (---------------) + I games
+ 0x0022fac5, // n0x09e0 c0x0000 (---------------) + I hotel
+ 0x0038a144, // n0x09e1 c0x0000 (---------------) + I info
+ 0x0033d688, // n0x09e2 c0x0000 (---------------) + I ingatlan
+ 0x0020b886, // n0x09e3 c0x0000 (---------------) + I jogasz
+ 0x002cde48, // n0x09e4 c0x0000 (---------------) + I konyvelo
+ 0x00237ac5, // n0x09e5 c0x0000 (---------------) + I lakas
+ 0x002fb545, // n0x09e6 c0x0000 (---------------) + I media
+ 0x0021fe44, // n0x09e7 c0x0000 (---------------) + I news
+ 0x00229a83, // n0x09e8 c0x0000 (---------------) + I org
+ 0x002db244, // n0x09e9 c0x0000 (---------------) + I priv
+ 0x0034d5c6, // n0x09ea c0x0000 (---------------) + I reklam
+ 0x00240e03, // n0x09eb c0x0000 (---------------) + I sex
+ 0x00332c44, // n0x09ec c0x0000 (---------------) + I shop
+ 0x0028b685, // n0x09ed c0x0000 (---------------) + I sport
+ 0x002368c4, // n0x09ee c0x0000 (---------------) + I suli
+ 0x0037ff44, // n0x09ef c0x0000 (---------------) + I szex
+ 0x00200142, // n0x09f0 c0x0000 (---------------) + I tm
+ 0x00266846, // n0x09f1 c0x0000 (---------------) + I tozsde
+ 0x00384f86, // n0x09f2 c0x0000 (---------------) + I utazas
+ 0x002ea705, // n0x09f3 c0x0000 (---------------) + I video
+ 0x00205882, // n0x09f4 c0x0000 (---------------) + I ac
+ 0x0030a143, // n0x09f5 c0x0000 (---------------) + I biz
+ 0x1b608182, // n0x09f6 c0x006d (n0x09ff-n0x0a00) + I co
+ 0x002363c4, // n0x09f7 c0x0000 (---------------) + I desa
+ 0x00208502, // n0x09f8 c0x0000 (---------------) + I go
+ 0x00215b43, // n0x09f9 c0x0000 (---------------) + I mil
+ 0x0022a6c2, // n0x09fa c0x0000 (---------------) + I my
+ 0x0021d8c3, // n0x09fb c0x0000 (---------------) + I net
+ 0x00200282, // n0x09fc c0x0000 (---------------) + I or
+ 0x00215d43, // n0x09fd c0x0000 (---------------) + I sch
+ 0x0021fa83, // n0x09fe c0x0000 (---------------) + I web
+ 0x000f5248, // n0x09ff c0x0000 (---------------) + blogspot
+ 0x000f5248, // n0x0a00 c0x0000 (---------------) + blogspot
+ 0x00275003, // n0x0a01 c0x0000 (---------------) + I gov
+ 0x00205882, // n0x0a02 c0x0000 (---------------) + I ac
+ 0x1c208182, // n0x0a03 c0x0070 (n0x0a0a-n0x0a0b) + I co
+ 0x00275003, // n0x0a04 c0x0000 (---------------) + I gov
+ 0x00261003, // n0x0a05 c0x0000 (---------------) + I idf
+ 0x00324c03, // n0x0a06 c0x0000 (---------------) + I k12
+ 0x0022f204, // n0x0a07 c0x0000 (---------------) + I muni
+ 0x0021d8c3, // n0x0a08 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0a09 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x0a0a c0x0000 (---------------) + blogspot
+ 0x00205882, // n0x0a0b c0x0000 (---------------) + I ac
+ 0x1ca08182, // n0x0a0c c0x0072 (n0x0a12-n0x0a14) + I co
+ 0x0022edc3, // n0x0a0d c0x0000 (---------------) + I com
+ 0x0021d8c3, // n0x0a0e c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0a0f c0x0000 (---------------) + I org
+ 0x0020a242, // n0x0a10 c0x0000 (---------------) + I tt
+ 0x00206fc2, // n0x0a11 c0x0000 (---------------) + I tv
+ 0x00342703, // n0x0a12 c0x0000 (---------------) + I ltd
+ 0x002d4b03, // n0x0a13 c0x0000 (---------------) + I plc
+ 0x00205882, // n0x0a14 c0x0000 (---------------) + I ac
+ 0x000f5248, // n0x0a15 c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x0a16 c0x0000 (---------------) + I co
+ 0x002349c3, // n0x0a17 c0x0000 (---------------) + I edu
+ 0x00247a04, // n0x0a18 c0x0000 (---------------) + I firm
+ 0x00206243, // n0x0a19 c0x0000 (---------------) + I gen
+ 0x00275003, // n0x0a1a c0x0000 (---------------) + I gov
+ 0x00202603, // n0x0a1b c0x0000 (---------------) + I ind
+ 0x00215b43, // n0x0a1c c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0a1d c0x0000 (---------------) + I net
+ 0x00217183, // n0x0a1e c0x0000 (---------------) + I nic
+ 0x00229a83, // n0x0a1f c0x0000 (---------------) + I org
+ 0x0021bfc3, // n0x0a20 c0x0000 (---------------) + I res
+ 0x0011dc93, // n0x0a21 c0x0000 (---------------) + barrel-of-knowledge
+ 0x0011f794, // n0x0a22 c0x0000 (---------------) + barrell-of-knowledge
+ 0x00011a06, // n0x0a23 c0x0000 (---------------) + dyndns
+ 0x0004e4c7, // n0x0a24 c0x0000 (---------------) + for-our
+ 0x0011af89, // n0x0a25 c0x0000 (---------------) + groks-the
+ 0x00029b0a, // n0x0a26 c0x0000 (---------------) + groks-this
+ 0x00080f4d, // n0x0a27 c0x0000 (---------------) + here-for-more
+ 0x000f088a, // n0x0a28 c0x0000 (---------------) + knowsitall
+ 0x00053986, // n0x0a29 c0x0000 (---------------) + selfip
+ 0x00123b06, // n0x0a2a c0x0000 (---------------) + webhop
+ 0x00224542, // n0x0a2b c0x0000 (---------------) + I eu
+ 0x0022edc3, // n0x0a2c c0x0000 (---------------) + I com
+ 0x000c8386, // n0x0a2d c0x0000 (---------------) + github
+ 0x0011b2c3, // n0x0a2e c0x0000 (---------------) + nid
+ 0x000145c8, // n0x0a2f c0x0000 (---------------) + pantheon
+ 0x000aa448, // n0x0a30 c0x0000 (---------------) + sandcats
+ 0x0022edc3, // n0x0a31 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0a32 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0a33 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x0a34 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x0a35 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0a36 c0x0000 (---------------) + I org
+ 0x00205882, // n0x0a37 c0x0000 (---------------) + I ac
+ 0x00208182, // n0x0a38 c0x0000 (---------------) + I co
+ 0x00275003, // n0x0a39 c0x0000 (---------------) + I gov
+ 0x00205d82, // n0x0a3a c0x0000 (---------------) + I id
+ 0x0021d8c3, // n0x0a3b c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0a3c c0x0000 (---------------) + I org
+ 0x00215d43, // n0x0a3d c0x0000 (---------------) + I sch
+ 0x0035830f, // n0x0a3e c0x0000 (---------------) + I xn--mgba3a4f16a
+ 0x003586ce, // n0x0a3f c0x0000 (---------------) + I xn--mgba3a4fra
+ 0x000f5248, // n0x0a40 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x0a41 c0x0000 (---------------) + I com
+ 0x00041947, // n0x0a42 c0x0000 (---------------) + cupcake
+ 0x002349c3, // n0x0a43 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0a44 c0x0000 (---------------) + I gov
+ 0x0026f683, // n0x0a45 c0x0000 (---------------) + I int
+ 0x0021d8c3, // n0x0a46 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0a47 c0x0000 (---------------) + I org
+ 0x0021b583, // n0x0a48 c0x0000 (---------------) + I abr
+ 0x00225ac7, // n0x0a49 c0x0000 (---------------) + I abruzzo
+ 0x00201002, // n0x0a4a c0x0000 (---------------) + I ag
+ 0x0038d8c9, // n0x0a4b c0x0000 (---------------) + I agrigento
+ 0x002001c2, // n0x0a4c c0x0000 (---------------) + I al
+ 0x0039878b, // n0x0a4d c0x0000 (---------------) + I alessandria
+ 0x002d920a, // n0x0a4e c0x0000 (---------------) + I alto-adige
+ 0x002dd509, // n0x0a4f c0x0000 (---------------) + I altoadige
+ 0x00200b42, // n0x0a50 c0x0000 (---------------) + I an
+ 0x0034c506, // n0x0a51 c0x0000 (---------------) + I ancona
+ 0x0026d795, // n0x0a52 c0x0000 (---------------) + I andria-barletta-trani
+ 0x003988d5, // n0x0a53 c0x0000 (---------------) + I andria-trani-barletta
+ 0x0039f193, // n0x0a54 c0x0000 (---------------) + I andriabarlettatrani
+ 0x00398e53, // n0x0a55 c0x0000 (---------------) + I andriatranibarletta
+ 0x00203042, // n0x0a56 c0x0000 (---------------) + I ao
+ 0x00213e05, // n0x0a57 c0x0000 (---------------) + I aosta
+ 0x0039d64c, // n0x0a58 c0x0000 (---------------) + I aosta-valley
+ 0x00213e0b, // n0x0a59 c0x0000 (---------------) + I aostavalley
+ 0x0023b085, // n0x0a5a c0x0000 (---------------) + I aoste
+ 0x002136c2, // n0x0a5b c0x0000 (---------------) + I ap
+ 0x00229802, // n0x0a5c c0x0000 (---------------) + I aq
+ 0x00369a86, // n0x0a5d c0x0000 (---------------) + I aquila
+ 0x002011c2, // n0x0a5e c0x0000 (---------------) + I ar
+ 0x0027c6c6, // n0x0a5f c0x0000 (---------------) + I arezzo
+ 0x0038bf0d, // n0x0a60 c0x0000 (---------------) + I ascoli-piceno
+ 0x00347f8c, // n0x0a61 c0x0000 (---------------) + I ascolipiceno
+ 0x0023a8c4, // n0x0a62 c0x0000 (---------------) + I asti
+ 0x00200102, // n0x0a63 c0x0000 (---------------) + I at
+ 0x00200602, // n0x0a64 c0x0000 (---------------) + I av
+ 0x00217b08, // n0x0a65 c0x0000 (---------------) + I avellino
+ 0x00203002, // n0x0a66 c0x0000 (---------------) + I ba
+ 0x0024c946, // n0x0a67 c0x0000 (---------------) + I balsan
+ 0x003084c4, // n0x0a68 c0x0000 (---------------) + I bari
+ 0x0026d955, // n0x0a69 c0x0000 (---------------) + I barletta-trani-andria
+ 0x0039f313, // n0x0a6a c0x0000 (---------------) + I barlettatraniandria
+ 0x0020f5c3, // n0x0a6b c0x0000 (---------------) + I bas
+ 0x0032b30a, // n0x0a6c c0x0000 (---------------) + I basilicata
+ 0x002ffc47, // n0x0a6d c0x0000 (---------------) + I belluno
+ 0x0027fc89, // n0x0a6e c0x0000 (---------------) + I benevento
+ 0x0022d307, // n0x0a6f c0x0000 (---------------) + I bergamo
+ 0x00226882, // n0x0a70 c0x0000 (---------------) + I bg
+ 0x00200002, // n0x0a71 c0x0000 (---------------) + I bi
+ 0x003a18c6, // n0x0a72 c0x0000 (---------------) + I biella
+ 0x00208dc2, // n0x0a73 c0x0000 (---------------) + I bl
+ 0x000f5248, // n0x0a74 c0x0000 (---------------) + blogspot
+ 0x0020f402, // n0x0a75 c0x0000 (---------------) + I bn
+ 0x00206dc2, // n0x0a76 c0x0000 (---------------) + I bo
+ 0x0037f447, // n0x0a77 c0x0000 (---------------) + I bologna
+ 0x00210e87, // n0x0a78 c0x0000 (---------------) + I bolzano
+ 0x0021a805, // n0x0a79 c0x0000 (---------------) + I bozen
+ 0x0020bb42, // n0x0a7a c0x0000 (---------------) + I br
+ 0x0021bf87, // n0x0a7b c0x0000 (---------------) + I brescia
+ 0x0021c148, // n0x0a7c c0x0000 (---------------) + I brindisi
+ 0x002311c2, // n0x0a7d c0x0000 (---------------) + I bs
+ 0x0021d7c2, // n0x0a7e c0x0000 (---------------) + I bt
+ 0x0022b202, // n0x0a7f c0x0000 (---------------) + I bz
+ 0x00200302, // n0x0a80 c0x0000 (---------------) + I ca
+ 0x0030e148, // n0x0a81 c0x0000 (---------------) + I cagliari
+ 0x00217203, // n0x0a82 c0x0000 (---------------) + I cal
+ 0x0024c588, // n0x0a83 c0x0000 (---------------) + I calabria
+ 0x00234fcd, // n0x0a84 c0x0000 (---------------) + I caltanissetta
+ 0x0021fb43, // n0x0a85 c0x0000 (---------------) + I cam
+ 0x00306ac8, // n0x0a86 c0x0000 (---------------) + I campania
+ 0x0023bf4f, // n0x0a87 c0x0000 (---------------) + I campidano-medio
+ 0x0023c30e, // n0x0a88 c0x0000 (---------------) + I campidanomedio
+ 0x0032ffca, // n0x0a89 c0x0000 (---------------) + I campobasso
+ 0x002e5191, // n0x0a8a c0x0000 (---------------) + I carbonia-iglesias
+ 0x002e5610, // n0x0a8b c0x0000 (---------------) + I carboniaiglesias
+ 0x002ac2cd, // n0x0a8c c0x0000 (---------------) + I carrara-massa
+ 0x002ac60c, // n0x0a8d c0x0000 (---------------) + I carraramassa
+ 0x00212ec7, // n0x0a8e c0x0000 (---------------) + I caserta
+ 0x0032b487, // n0x0a8f c0x0000 (---------------) + I catania
+ 0x0033ab89, // n0x0a90 c0x0000 (---------------) + I catanzaro
+ 0x00226842, // n0x0a91 c0x0000 (---------------) + I cb
+ 0x00202ec2, // n0x0a92 c0x0000 (---------------) + I ce
+ 0x00250b8c, // n0x0a93 c0x0000 (---------------) + I cesena-forli
+ 0x00250e8b, // n0x0a94 c0x0000 (---------------) + I cesenaforli
+ 0x002058c2, // n0x0a95 c0x0000 (---------------) + I ch
+ 0x002ee146, // n0x0a96 c0x0000 (---------------) + I chieti
+ 0x002080c2, // n0x0a97 c0x0000 (---------------) + I ci
+ 0x00202502, // n0x0a98 c0x0000 (---------------) + I cl
+ 0x0021a142, // n0x0a99 c0x0000 (---------------) + I cn
+ 0x00208182, // n0x0a9a c0x0000 (---------------) + I co
+ 0x0022f504, // n0x0a9b c0x0000 (---------------) + I como
+ 0x0023b6c7, // n0x0a9c c0x0000 (---------------) + I cosenza
+ 0x00211e82, // n0x0a9d c0x0000 (---------------) + I cr
+ 0x0023e647, // n0x0a9e c0x0000 (---------------) + I cremona
+ 0x0023f307, // n0x0a9f c0x0000 (---------------) + I crotone
+ 0x0020dcc2, // n0x0aa0 c0x0000 (---------------) + I cs
+ 0x0021e002, // n0x0aa1 c0x0000 (---------------) + I ct
+ 0x00241805, // n0x0aa2 c0x0000 (---------------) + I cuneo
+ 0x00233fc2, // n0x0aa3 c0x0000 (---------------) + I cz
+ 0x0025318e, // n0x0aa4 c0x0000 (---------------) + I dell-ogliastra
+ 0x0025f50d, // n0x0aa5 c0x0000 (---------------) + I dellogliastra
+ 0x002349c3, // n0x0aa6 c0x0000 (---------------) + I edu
+ 0x0030310e, // n0x0aa7 c0x0000 (---------------) + I emilia-romagna
+ 0x0027b14d, // n0x0aa8 c0x0000 (---------------) + I emiliaromagna
+ 0x0035dc03, // n0x0aa9 c0x0000 (---------------) + I emr
+ 0x00201d82, // n0x0aaa c0x0000 (---------------) + I en
+ 0x00279884, // n0x0aab c0x0000 (---------------) + I enna
+ 0x00242e02, // n0x0aac c0x0000 (---------------) + I fc
+ 0x00200382, // n0x0aad c0x0000 (---------------) + I fe
+ 0x002d2285, // n0x0aae c0x0000 (---------------) + I fermo
+ 0x002dbb47, // n0x0aaf c0x0000 (---------------) + I ferrara
+ 0x00347402, // n0x0ab0 c0x0000 (---------------) + I fg
+ 0x0020e002, // n0x0ab1 c0x0000 (---------------) + I fi
+ 0x00247347, // n0x0ab2 c0x0000 (---------------) + I firenze
+ 0x0024acc8, // n0x0ab3 c0x0000 (---------------) + I florence
+ 0x0023d4c2, // n0x0ab4 c0x0000 (---------------) + I fm
+ 0x0038a1c6, // n0x0ab5 c0x0000 (---------------) + I foggia
+ 0x00250a0c, // n0x0ab6 c0x0000 (---------------) + I forli-cesena
+ 0x00250d4b, // n0x0ab7 c0x0000 (---------------) + I forlicesena
+ 0x00207fc2, // n0x0ab8 c0x0000 (---------------) + I fr
+ 0x0025774f, // n0x0ab9 c0x0000 (---------------) + I friuli-v-giulia
+ 0x00257b10, // n0x0aba c0x0000 (---------------) + I friuli-ve-giulia
+ 0x00257f0f, // n0x0abb c0x0000 (---------------) + I friuli-vegiulia
+ 0x002582d5, // n0x0abc c0x0000 (---------------) + I friuli-venezia-giulia
+ 0x00258814, // n0x0abd c0x0000 (---------------) + I friuli-veneziagiulia
+ 0x00258d0e, // n0x0abe c0x0000 (---------------) + I friuli-vgiulia
+ 0x0025908e, // n0x0abf c0x0000 (---------------) + I friuliv-giulia
+ 0x0025940f, // n0x0ac0 c0x0000 (---------------) + I friulive-giulia
+ 0x002597ce, // n0x0ac1 c0x0000 (---------------) + I friulivegiulia
+ 0x00259b54, // n0x0ac2 c0x0000 (---------------) + I friulivenezia-giulia
+ 0x0025a053, // n0x0ac3 c0x0000 (---------------) + I friuliveneziagiulia
+ 0x0025a50d, // n0x0ac4 c0x0000 (---------------) + I friulivgiulia
+ 0x0026eb09, // n0x0ac5 c0x0000 (---------------) + I frosinone
+ 0x00281c83, // n0x0ac6 c0x0000 (---------------) + I fvg
+ 0x00203982, // n0x0ac7 c0x0000 (---------------) + I ge
+ 0x00307a85, // n0x0ac8 c0x0000 (---------------) + I genoa
+ 0x00206246, // n0x0ac9 c0x0000 (---------------) + I genova
+ 0x00208502, // n0x0aca c0x0000 (---------------) + I go
+ 0x00372cc7, // n0x0acb c0x0000 (---------------) + I gorizia
+ 0x00275003, // n0x0acc c0x0000 (---------------) + I gov
+ 0x002089c2, // n0x0acd c0x0000 (---------------) + I gr
+ 0x00330d88, // n0x0ace c0x0000 (---------------) + I grosseto
+ 0x002e53d1, // n0x0acf c0x0000 (---------------) + I iglesias-carbonia
+ 0x002e5810, // n0x0ad0 c0x0000 (---------------) + I iglesiascarbonia
+ 0x00207242, // n0x0ad1 c0x0000 (---------------) + I im
+ 0x00234447, // n0x0ad2 c0x0000 (---------------) + I imperia
+ 0x00201a02, // n0x0ad3 c0x0000 (---------------) + I is
+ 0x00342947, // n0x0ad4 c0x0000 (---------------) + I isernia
+ 0x002076c2, // n0x0ad5 c0x0000 (---------------) + I kr
+ 0x002bc989, // n0x0ad6 c0x0000 (---------------) + I la-spezia
+ 0x00369a47, // n0x0ad7 c0x0000 (---------------) + I laquila
+ 0x00257348, // n0x0ad8 c0x0000 (---------------) + I laspezia
+ 0x00222846, // n0x0ad9 c0x0000 (---------------) + I latina
+ 0x002d4a03, // n0x0ada c0x0000 (---------------) + I laz
+ 0x003021c5, // n0x0adb c0x0000 (---------------) + I lazio
+ 0x00234c42, // n0x0adc c0x0000 (---------------) + I lc
+ 0x0020a5c2, // n0x0add c0x0000 (---------------) + I le
+ 0x003a1cc5, // n0x0ade c0x0000 (---------------) + I lecce
+ 0x0021db05, // n0x0adf c0x0000 (---------------) + I lecco
+ 0x002019c2, // n0x0ae0 c0x0000 (---------------) + I li
+ 0x00236943, // n0x0ae1 c0x0000 (---------------) + I lig
+ 0x00236947, // n0x0ae2 c0x0000 (---------------) + I liguria
+ 0x002112c7, // n0x0ae3 c0x0000 (---------------) + I livorno
+ 0x00200242, // n0x0ae4 c0x0000 (---------------) + I lo
+ 0x00252bc4, // n0x0ae5 c0x0000 (---------------) + I lodi
+ 0x00212bc3, // n0x0ae6 c0x0000 (---------------) + I lom
+ 0x002c1249, // n0x0ae7 c0x0000 (---------------) + I lombardia
+ 0x002d5348, // n0x0ae8 c0x0000 (---------------) + I lombardy
+ 0x00208bc2, // n0x0ae9 c0x0000 (---------------) + I lt
+ 0x00202542, // n0x0aea c0x0000 (---------------) + I lu
+ 0x002a5e47, // n0x0aeb c0x0000 (---------------) + I lucania
+ 0x002a9245, // n0x0aec c0x0000 (---------------) + I lucca
+ 0x003065c8, // n0x0aed c0x0000 (---------------) + I macerata
+ 0x00244f87, // n0x0aee c0x0000 (---------------) + I mantova
+ 0x00201183, // n0x0aef c0x0000 (---------------) + I mar
+ 0x0027f3c6, // n0x0af0 c0x0000 (---------------) + I marche
+ 0x002ac14d, // n0x0af1 c0x0000 (---------------) + I massa-carrara
+ 0x002ac4cc, // n0x0af2 c0x0000 (---------------) + I massacarrara
+ 0x0024fdc6, // n0x0af3 c0x0000 (---------------) + I matera
+ 0x00205482, // n0x0af4 c0x0000 (---------------) + I mb
+ 0x002d2e42, // n0x0af5 c0x0000 (---------------) + I mc
+ 0x00202302, // n0x0af6 c0x0000 (---------------) + I me
+ 0x0023bdcf, // n0x0af7 c0x0000 (---------------) + I medio-campidano
+ 0x0023c1ce, // n0x0af8 c0x0000 (---------------) + I mediocampidano
+ 0x00318d47, // n0x0af9 c0x0000 (---------------) + I messina
+ 0x0020e5c2, // n0x0afa c0x0000 (---------------) + I mi
+ 0x00304a85, // n0x0afb c0x0000 (---------------) + I milan
+ 0x00304a86, // n0x0afc c0x0000 (---------------) + I milano
+ 0x0021d882, // n0x0afd c0x0000 (---------------) + I mn
+ 0x00203ec2, // n0x0afe c0x0000 (---------------) + I mo
+ 0x00210246, // n0x0aff c0x0000 (---------------) + I modena
+ 0x00256ac3, // n0x0b00 c0x0000 (---------------) + I mol
+ 0x00342886, // n0x0b01 c0x0000 (---------------) + I molise
+ 0x002bfe45, // n0x0b02 c0x0000 (---------------) + I monza
+ 0x002bfe4d, // n0x0b03 c0x0000 (---------------) + I monza-brianza
+ 0x002c0695, // n0x0b04 c0x0000 (---------------) + I monza-e-della-brianza
+ 0x002c0e4c, // n0x0b05 c0x0000 (---------------) + I monzabrianza
+ 0x002c1a0d, // n0x0b06 c0x0000 (---------------) + I monzaebrianza
+ 0x002c1dd2, // n0x0b07 c0x0000 (---------------) + I monzaedellabrianza
+ 0x00202482, // n0x0b08 c0x0000 (---------------) + I ms
+ 0x00235702, // n0x0b09 c0x0000 (---------------) + I mt
+ 0x002005c2, // n0x0b0a c0x0000 (---------------) + I na
+ 0x0039c386, // n0x0b0b c0x0000 (---------------) + I naples
+ 0x00298806, // n0x0b0c c0x0000 (---------------) + I napoli
+ 0x00200d82, // n0x0b0d c0x0000 (---------------) + I no
+ 0x002062c6, // n0x0b0e c0x0000 (---------------) + I novara
+ 0x00209702, // n0x0b0f c0x0000 (---------------) + I nu
+ 0x00395345, // n0x0b10 c0x0000 (---------------) + I nuoro
+ 0x00201602, // n0x0b11 c0x0000 (---------------) + I og
+ 0x002532c9, // n0x0b12 c0x0000 (---------------) + I ogliastra
+ 0x0026794c, // n0x0b13 c0x0000 (---------------) + I olbia-tempio
+ 0x00267c8b, // n0x0b14 c0x0000 (---------------) + I olbiatempio
+ 0x00200282, // n0x0b15 c0x0000 (---------------) + I or
+ 0x0024b108, // n0x0b16 c0x0000 (---------------) + I oristano
+ 0x00200902, // n0x0b17 c0x0000 (---------------) + I ot
+ 0x0020ec42, // n0x0b18 c0x0000 (---------------) + I pa
+ 0x00213bc6, // n0x0b19 c0x0000 (---------------) + I padova
+ 0x0035e585, // n0x0b1a c0x0000 (---------------) + I padua
+ 0x0020ec47, // n0x0b1b c0x0000 (---------------) + I palermo
+ 0x0026e805, // n0x0b1c c0x0000 (---------------) + I parma
+ 0x002ca345, // n0x0b1d c0x0000 (---------------) + I pavia
+ 0x002419c2, // n0x0b1e c0x0000 (---------------) + I pc
+ 0x00332d42, // n0x0b1f c0x0000 (---------------) + I pd
+ 0x00209a02, // n0x0b20 c0x0000 (---------------) + I pe
+ 0x00254fc7, // n0x0b21 c0x0000 (---------------) + I perugia
+ 0x0022700d, // n0x0b22 c0x0000 (---------------) + I pesaro-urbino
+ 0x0022738c, // n0x0b23 c0x0000 (---------------) + I pesarourbino
+ 0x00265d47, // n0x0b24 c0x0000 (---------------) + I pescara
+ 0x00308882, // n0x0b25 c0x0000 (---------------) + I pg
+ 0x00209102, // n0x0b26 c0x0000 (---------------) + I pi
+ 0x00338508, // n0x0b27 c0x0000 (---------------) + I piacenza
+ 0x00251248, // n0x0b28 c0x0000 (---------------) + I piedmont
+ 0x002d1148, // n0x0b29 c0x0000 (---------------) + I piemonte
+ 0x002d8cc4, // n0x0b2a c0x0000 (---------------) + I pisa
+ 0x002ee507, // n0x0b2b c0x0000 (---------------) + I pistoia
+ 0x002d7083, // n0x0b2c c0x0000 (---------------) + I pmn
+ 0x002a98c2, // n0x0b2d c0x0000 (---------------) + I pn
+ 0x00200c42, // n0x0b2e c0x0000 (---------------) + I po
+ 0x002d9489, // n0x0b2f c0x0000 (---------------) + I pordenone
+ 0x00245b87, // n0x0b30 c0x0000 (---------------) + I potenza
+ 0x00204382, // n0x0b31 c0x0000 (---------------) + I pr
+ 0x00269885, // n0x0b32 c0x0000 (---------------) + I prato
+ 0x002835c2, // n0x0b33 c0x0000 (---------------) + I pt
+ 0x00230482, // n0x0b34 c0x0000 (---------------) + I pu
+ 0x002711c3, // n0x0b35 c0x0000 (---------------) + I pug
+ 0x002711c6, // n0x0b36 c0x0000 (---------------) + I puglia
+ 0x002def02, // n0x0b37 c0x0000 (---------------) + I pv
+ 0x002df302, // n0x0b38 c0x0000 (---------------) + I pz
+ 0x00200482, // n0x0b39 c0x0000 (---------------) + I ra
+ 0x002bd286, // n0x0b3a c0x0000 (---------------) + I ragusa
+ 0x002a7a87, // n0x0b3b c0x0000 (---------------) + I ravenna
+ 0x002002c2, // n0x0b3c c0x0000 (---------------) + I rc
+ 0x00204d82, // n0x0b3d c0x0000 (---------------) + I re
+ 0x0034cecf, // n0x0b3e c0x0000 (---------------) + I reggio-calabria
+ 0x00302f4d, // n0x0b3f c0x0000 (---------------) + I reggio-emilia
+ 0x0024c40e, // n0x0b40 c0x0000 (---------------) + I reggiocalabria
+ 0x0027afcc, // n0x0b41 c0x0000 (---------------) + I reggioemilia
+ 0x00205542, // n0x0b42 c0x0000 (---------------) + I rg
+ 0x00201702, // n0x0b43 c0x0000 (---------------) + I ri
+ 0x00222685, // n0x0b44 c0x0000 (---------------) + I rieti
+ 0x002f8086, // n0x0b45 c0x0000 (---------------) + I rimini
+ 0x0020ed42, // n0x0b46 c0x0000 (---------------) + I rm
+ 0x00201902, // n0x0b47 c0x0000 (---------------) + I rn
+ 0x00200cc2, // n0x0b48 c0x0000 (---------------) + I ro
+ 0x00227784, // n0x0b49 c0x0000 (---------------) + I roma
+ 0x002dc984, // n0x0b4a c0x0000 (---------------) + I rome
+ 0x0032edc6, // n0x0b4b c0x0000 (---------------) + I rovigo
+ 0x00202402, // n0x0b4c c0x0000 (---------------) + I sa
+ 0x0027ba07, // n0x0b4d c0x0000 (---------------) + I salerno
+ 0x00220b83, // n0x0b4e c0x0000 (---------------) + I sar
+ 0x00223288, // n0x0b4f c0x0000 (---------------) + I sardegna
+ 0x00223c08, // n0x0b50 c0x0000 (---------------) + I sardinia
+ 0x00330387, // n0x0b51 c0x0000 (---------------) + I sassari
+ 0x0039c286, // n0x0b52 c0x0000 (---------------) + I savona
+ 0x0020ca82, // n0x0b53 c0x0000 (---------------) + I si
+ 0x00239f03, // n0x0b54 c0x0000 (---------------) + I sic
+ 0x002971c7, // n0x0b55 c0x0000 (---------------) + I sicilia
+ 0x0024bf86, // n0x0b56 c0x0000 (---------------) + I sicily
+ 0x002b8bc5, // n0x0b57 c0x0000 (---------------) + I siena
+ 0x003405c8, // n0x0b58 c0x0000 (---------------) + I siracusa
+ 0x00204c82, // n0x0b59 c0x0000 (---------------) + I so
+ 0x00310c07, // n0x0b5a c0x0000 (---------------) + I sondrio
+ 0x0021ff02, // n0x0b5b c0x0000 (---------------) + I sp
+ 0x00336d82, // n0x0b5c c0x0000 (---------------) + I sr
+ 0x00206982, // n0x0b5d c0x0000 (---------------) + I ss
+ 0x002cb789, // n0x0b5e c0x0000 (---------------) + I suedtirol
+ 0x0020ee82, // n0x0b5f c0x0000 (---------------) + I sv
+ 0x00201242, // n0x0b60 c0x0000 (---------------) + I ta
+ 0x00265fc3, // n0x0b61 c0x0000 (---------------) + I taa
+ 0x00324807, // n0x0b62 c0x0000 (---------------) + I taranto
+ 0x002012c2, // n0x0b63 c0x0000 (---------------) + I te
+ 0x00267acc, // n0x0b64 c0x0000 (---------------) + I tempio-olbia
+ 0x00267dcb, // n0x0b65 c0x0000 (---------------) + I tempioolbia
+ 0x0024fe46, // n0x0b66 c0x0000 (---------------) + I teramo
+ 0x0031b205, // n0x0b67 c0x0000 (---------------) + I terni
+ 0x00200942, // n0x0b68 c0x0000 (---------------) + I tn
+ 0x00207442, // n0x0b69 c0x0000 (---------------) + I to
+ 0x002abe46, // n0x0b6a c0x0000 (---------------) + I torino
+ 0x00242a83, // n0x0b6b c0x0000 (---------------) + I tos
+ 0x00321687, // n0x0b6c c0x0000 (---------------) + I toscana
+ 0x00214582, // n0x0b6d c0x0000 (---------------) + I tp
+ 0x00203642, // n0x0b6e c0x0000 (---------------) + I tr
+ 0x0026d615, // n0x0b6f c0x0000 (---------------) + I trani-andria-barletta
+ 0x00398a95, // n0x0b70 c0x0000 (---------------) + I trani-barletta-andria
+ 0x0039f053, // n0x0b71 c0x0000 (---------------) + I traniandriabarletta
+ 0x00398fd3, // n0x0b72 c0x0000 (---------------) + I tranibarlettaandria
+ 0x0028b787, // n0x0b73 c0x0000 (---------------) + I trapani
+ 0x002b52c8, // n0x0b74 c0x0000 (---------------) + I trentino
+ 0x00344190, // n0x0b75 c0x0000 (---------------) + I trentino-a-adige
+ 0x002e3c0f, // n0x0b76 c0x0000 (---------------) + I trentino-aadige
+ 0x00340f53, // n0x0b77 c0x0000 (---------------) + I trentino-alto-adige
+ 0x0034a792, // n0x0b78 c0x0000 (---------------) + I trentino-altoadige
+ 0x002ce090, // n0x0b79 c0x0000 (---------------) + I trentino-s-tirol
+ 0x002f938f, // n0x0b7a c0x0000 (---------------) + I trentino-stirol
+ 0x002b52d2, // n0x0b7b c0x0000 (---------------) + I trentino-sud-tirol
+ 0x002bfa11, // n0x0b7c c0x0000 (---------------) + I trentino-sudtirol
+ 0x002c8793, // n0x0b7d c0x0000 (---------------) + I trentino-sued-tirol
+ 0x002cb552, // n0x0b7e c0x0000 (---------------) + I trentino-suedtirol
+ 0x002cc38f, // n0x0b7f c0x0000 (---------------) + I trentinoa-adige
+ 0x002d0b4e, // n0x0b80 c0x0000 (---------------) + I trentinoaadige
+ 0x002d9012, // n0x0b81 c0x0000 (---------------) + I trentinoalto-adige
+ 0x002dd311, // n0x0b82 c0x0000 (---------------) + I trentinoaltoadige
+ 0x002ddb0f, // n0x0b83 c0x0000 (---------------) + I trentinos-tirol
+ 0x002def8e, // n0x0b84 c0x0000 (---------------) + I trentinostirol
+ 0x002df691, // n0x0b85 c0x0000 (---------------) + I trentinosud-tirol
+ 0x00315210, // n0x0b86 c0x0000 (---------------) + I trentinosudtirol
+ 0x00353c12, // n0x0b87 c0x0000 (---------------) + I trentinosued-tirol
+ 0x002e1b11, // n0x0b88 c0x0000 (---------------) + I trentinosuedtirol
+ 0x002f0046, // n0x0b89 c0x0000 (---------------) + I trento
+ 0x002ef307, // n0x0b8a c0x0000 (---------------) + I treviso
+ 0x003657c7, // n0x0b8b c0x0000 (---------------) + I trieste
+ 0x002023c2, // n0x0b8c c0x0000 (---------------) + I ts
+ 0x002770c5, // n0x0b8d c0x0000 (---------------) + I turin
+ 0x002e7f47, // n0x0b8e c0x0000 (---------------) + I tuscany
+ 0x00206fc2, // n0x0b8f c0x0000 (---------------) + I tv
+ 0x00204fc2, // n0x0b90 c0x0000 (---------------) + I ud
+ 0x00226bc5, // n0x0b91 c0x0000 (---------------) + I udine
+ 0x0021cac3, // n0x0b92 c0x0000 (---------------) + I umb
+ 0x00250886, // n0x0b93 c0x0000 (---------------) + I umbria
+ 0x002271cd, // n0x0b94 c0x0000 (---------------) + I urbino-pesaro
+ 0x0022750c, // n0x0b95 c0x0000 (---------------) + I urbinopesaro
+ 0x002000c2, // n0x0b96 c0x0000 (---------------) + I va
+ 0x0039d4cb, // n0x0b97 c0x0000 (---------------) + I val-d-aosta
+ 0x00213cca, // n0x0b98 c0x0000 (---------------) + I val-daosta
+ 0x00317a8a, // n0x0b99 c0x0000 (---------------) + I vald-aosta
+ 0x002ab089, // n0x0b9a c0x0000 (---------------) + I valdaosta
+ 0x002d7f4b, // n0x0b9b c0x0000 (---------------) + I valle-aosta
+ 0x002e864d, // n0x0b9c c0x0000 (---------------) + I valle-d-aosta
+ 0x002450cc, // n0x0b9d c0x0000 (---------------) + I valle-daosta
+ 0x00217d8a, // n0x0b9e c0x0000 (---------------) + I valleaosta
+ 0x00220d0c, // n0x0b9f c0x0000 (---------------) + I valled-aosta
+ 0x00338f4b, // n0x0ba0 c0x0000 (---------------) + I valledaosta
+ 0x00376a8c, // n0x0ba1 c0x0000 (---------------) + I vallee-aoste
+ 0x0023af0b, // n0x0ba2 c0x0000 (---------------) + I valleeaoste
+ 0x002678c3, // n0x0ba3 c0x0000 (---------------) + I vao
+ 0x0026e546, // n0x0ba4 c0x0000 (---------------) + I varese
+ 0x002d68c2, // n0x0ba5 c0x0000 (---------------) + I vb
+ 0x002dfb02, // n0x0ba6 c0x0000 (---------------) + I vc
+ 0x00211203, // n0x0ba7 c0x0000 (---------------) + I vda
+ 0x00202202, // n0x0ba8 c0x0000 (---------------) + I ve
+ 0x00203203, // n0x0ba9 c0x0000 (---------------) + I ven
+ 0x00366906, // n0x0baa c0x0000 (---------------) + I veneto
+ 0x00258487, // n0x0bab c0x0000 (---------------) + I venezia
+ 0x0023ce06, // n0x0bac c0x0000 (---------------) + I venice
+ 0x0022b008, // n0x0bad c0x0000 (---------------) + I verbania
+ 0x002cd988, // n0x0bae c0x0000 (---------------) + I vercelli
+ 0x00207006, // n0x0baf c0x0000 (---------------) + I verona
+ 0x00200642, // n0x0bb0 c0x0000 (---------------) + I vi
+ 0x002ea0cd, // n0x0bb1 c0x0000 (---------------) + I vibo-valentia
+ 0x002ea40c, // n0x0bb2 c0x0000 (---------------) + I vibovalentia
+ 0x002fa807, // n0x0bb3 c0x0000 (---------------) + I vicenza
+ 0x002f06c7, // n0x0bb4 c0x0000 (---------------) + I viterbo
+ 0x00208342, // n0x0bb5 c0x0000 (---------------) + I vr
+ 0x00238c02, // n0x0bb6 c0x0000 (---------------) + I vs
+ 0x00255c42, // n0x0bb7 c0x0000 (---------------) + I vt
+ 0x0025c902, // n0x0bb8 c0x0000 (---------------) + I vv
+ 0x00208182, // n0x0bb9 c0x0000 (---------------) + I co
+ 0x0021d8c3, // n0x0bba c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0bbb c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x0bbc c0x0000 (---------------) + I com
+ 0x002349c3, // n0x0bbd c0x0000 (---------------) + I edu
+ 0x00275003, // n0x0bbe c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x0bbf c0x0000 (---------------) + I mil
+ 0x0027ca84, // n0x0bc0 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x0bc1 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x0bc2 c0x0000 (---------------) + I org
+ 0x00215d43, // n0x0bc3 c0x0000 (---------------) + I sch
+ 0x00205882, // n0x0bc4 c0x0000 (---------------) + I ac
+ 0x00203d82, // n0x0bc5 c0x0000 (---------------) + I ad
+ 0x1fa86b45, // n0x0bc6 c0x007e (n0x0c33-n0x0c67) + I aichi
+ 0x1fe1e685, // n0x0bc7 c0x007f (n0x0c67-n0x0c83) + I akita
+ 0x2030adc6, // n0x0bc8 c0x0080 (n0x0c83-n0x0c99) + I aomori
+ 0x000f5248, // n0x0bc9 c0x0000 (---------------) + blogspot
+ 0x206a7685, // n0x0bca c0x0081 (n0x0c99-n0x0cd3) + I chiba
+ 0x00208182, // n0x0bcb c0x0000 (---------------) + I co
+ 0x002003c2, // n0x0bcc c0x0000 (---------------) + I ed
+ 0x20b1ac45, // n0x0bcd c0x0082 (n0x0cd3-n0x0ce9) + I ehime
+ 0x20e75605, // n0x0bce c0x0083 (n0x0ce9-n0x0cf8) + I fukui
+ 0x21276447, // n0x0bcf c0x0084 (n0x0cf8-n0x0d37) + I fukuoka
+ 0x2167f209, // n0x0bd0 c0x0085 (n0x0d37-n0x0d6a) + I fukushima
+ 0x21aa4d04, // n0x0bd1 c0x0086 (n0x0d6a-n0x0d90) + I gifu
+ 0x00208502, // n0x0bd2 c0x0000 (---------------) + I go
+ 0x002089c2, // n0x0bd3 c0x0000 (---------------) + I gr
+ 0x21f47445, // n0x0bd4 c0x0087 (n0x0d90-n0x0db4) + I gunma
+ 0x2220cc49, // n0x0bd5 c0x0088 (n0x0db4-n0x0dcd) + I hiroshima
+ 0x22768608, // n0x0bd6 c0x0089 (n0x0dcd-n0x0e5b) + I hokkaido
+ 0x22aa35c5, // n0x0bd7 c0x008a (n0x0e5b-n0x0e89) + I hyogo
+ 0x22ebebc7, // n0x0bd8 c0x008b (n0x0e89-n0x0ebc) + I ibaraki
+ 0x2321af48, // n0x0bd9 c0x008c (n0x0ebc-n0x0ecf) + I ishikawa
+ 0x236d2505, // n0x0bda c0x008d (n0x0ecf-n0x0ef1) + I iwate
+ 0x23a00fc6, // n0x0bdb c0x008e (n0x0ef1-n0x0f00) + I kagawa
+ 0x23ec3e09, // n0x0bdc c0x008f (n0x0f00-n0x0f14) + I kagoshima
+ 0x242c8d08, // n0x0bdd c0x0090 (n0x0f14-n0x0f32) + I kanagawa
+ 0x246b3b88, // n0x0bde c0x0091 (n0x0f32-n0x0f33)* o I kawasaki
+ 0x24a93eca, // n0x0bdf c0x0092 (n0x0f33-n0x0f34)* o I kitakyushu
+ 0x24e437c4, // n0x0be0 c0x0093 (n0x0f34-n0x0f35)* o I kobe
+ 0x252c8f85, // n0x0be1 c0x0094 (n0x0f35-n0x0f54) + I kochi
+ 0x256b0408, // n0x0be2 c0x0095 (n0x0f54-n0x0f6e) + I kumamoto
+ 0x25ab8805, // n0x0be3 c0x0096 (n0x0f6e-n0x0f8d) + I kyoto
+ 0x00217282, // n0x0be4 c0x0000 (---------------) + I lg
+ 0x25e18d43, // n0x0be5 c0x0097 (n0x0f8d-n0x0fab) + I mie
+ 0x2629a146, // n0x0be6 c0x0098 (n0x0fab-n0x0fcc) + I miyagi
+ 0x2665d308, // n0x0be7 c0x0099 (n0x0fcc-n0x0fe7) + I miyazaki
+ 0x26b0f1c6, // n0x0be8 c0x009a (n0x0fe7-n0x1032) + I nagano
+ 0x26ecd608, // n0x0be9 c0x009b (n0x1032-n0x1048) + I nagasaki
+ 0x2722d886, // n0x0bea c0x009c (n0x1048-n0x1049)* o I nagoya
+ 0x276b8c84, // n0x0beb c0x009d (n0x1049-n0x106f) + I nara
+ 0x00203282, // n0x0bec c0x0000 (---------------) + I ne
+ 0x27b6b607, // n0x0bed c0x009e (n0x106f-n0x1091) + I niigata
+ 0x27e9ed44, // n0x0bee c0x009f (n0x1091-n0x10a4) + I oita
+ 0x28271747, // n0x0bef c0x00a0 (n0x10a4-n0x10be) + I okayama
+ 0x28790f07, // n0x0bf0 c0x00a1 (n0x10be-n0x10e8) + I okinawa
+ 0x00200282, // n0x0bf1 c0x0000 (---------------) + I or
+ 0x28a91e85, // n0x0bf2 c0x00a2 (n0x10e8-n0x111a) + I osaka
+ 0x28f5a904, // n0x0bf3 c0x00a3 (n0x111a-n0x1134) + I saga
+ 0x292ecc47, // n0x0bf4 c0x00a4 (n0x1134-n0x1179) + I saitama
+ 0x296204c7, // n0x0bf5 c0x00a5 (n0x1179-n0x117a)* o I sapporo
+ 0x29a796c6, // n0x0bf6 c0x00a6 (n0x117a-n0x117b)* o I sendai
+ 0x29e6ff45, // n0x0bf7 c0x00a7 (n0x117b-n0x1192) + I shiga
+ 0x2a28ab47, // n0x0bf8 c0x00a8 (n0x1192-n0x11a9) + I shimane
+ 0x2a6f2e48, // n0x0bf9 c0x00a9 (n0x11a9-n0x11cd) + I shizuoka
+ 0x2ab42447, // n0x0bfa c0x00aa (n0x11cd-n0x11ec) + I tochigi
+ 0x2ae85d89, // n0x0bfb c0x00ab (n0x11ec-n0x11fd) + I tokushima
+ 0x2b2ef045, // n0x0bfc c0x00ac (n0x11fd-n0x1236) + I tokyo
+ 0x2b6f0147, // n0x0bfd c0x00ad (n0x1236-n0x1243) + I tottori
+ 0x2ba86046, // n0x0bfe c0x00ae (n0x1243-n0x125b) + I toyama
+ 0x2bf3da48, // n0x0bff c0x00af (n0x125b-n0x1278) + I wakayama
+ 0x0034efcd, // n0x0c00 c0x0000 (---------------) + I xn--0trq7p7nn
+ 0x00241b49, // n0x0c01 c0x0000 (---------------) + I xn--1ctwo
+ 0x0024b90b, // n0x0c02 c0x0000 (---------------) + I xn--1lqs03n
+ 0x0025520b, // n0x0c03 c0x0000 (---------------) + I xn--1lqs71d
+ 0x0026bb8b, // n0x0c04 c0x0000 (---------------) + I xn--2m4a15e
+ 0x0029c70b, // n0x0c05 c0x0000 (---------------) + I xn--32vp30h
+ 0x002f898b, // n0x0c06 c0x0000 (---------------) + I xn--4it168d
+ 0x002f8c4b, // n0x0c07 c0x0000 (---------------) + I xn--4it797k
+ 0x002f9749, // n0x0c08 c0x0000 (---------------) + I xn--4pvxs
+ 0x002faf0b, // n0x0c09 c0x0000 (---------------) + I xn--5js045d
+ 0x002fb1cb, // n0x0c0a c0x0000 (---------------) + I xn--5rtp49c
+ 0x002fb68b, // n0x0c0b c0x0000 (---------------) + I xn--5rtq34k
+ 0x002fc18a, // n0x0c0c c0x0000 (---------------) + I xn--6btw5a
+ 0x002fc6ca, // n0x0c0d c0x0000 (---------------) + I xn--6orx2r
+ 0x002fcccc, // n0x0c0e c0x0000 (---------------) + I xn--7t0a264c
+ 0x003042cb, // n0x0c0f c0x0000 (---------------) + I xn--8ltr62k
+ 0x00304c0a, // n0x0c10 c0x0000 (---------------) + I xn--8pvr4u
+ 0x0031874a, // n0x0c11 c0x0000 (---------------) + I xn--c3s14m
+ 0x0032550e, // n0x0c12 c0x0000 (---------------) + I xn--d5qv7z876c
+ 0x0032640e, // n0x0c13 c0x0000 (---------------) + I xn--djrs72d6uy
+ 0x0032678a, // n0x0c14 c0x0000 (---------------) + I xn--djty4k
+ 0x00327d0a, // n0x0c15 c0x0000 (---------------) + I xn--efvn9s
+ 0x003289cb, // n0x0c16 c0x0000 (---------------) + I xn--ehqz56n
+ 0x00328c8b, // n0x0c17 c0x0000 (---------------) + I xn--elqq16h
+ 0x0032978b, // n0x0c18 c0x0000 (---------------) + I xn--f6qx53a
+ 0x0034458b, // n0x0c19 c0x0000 (---------------) + I xn--k7yn95e
+ 0x00344b8a, // n0x0c1a c0x0000 (---------------) + I xn--kbrq7o
+ 0x0034584b, // n0x0c1b c0x0000 (---------------) + I xn--klt787d
+ 0x00345b0a, // n0x0c1c c0x0000 (---------------) + I xn--kltp7d
+ 0x00345d8a, // n0x0c1d c0x0000 (---------------) + I xn--kltx9a
+ 0x0034600a, // n0x0c1e c0x0000 (---------------) + I xn--klty5x
+ 0x0036628b, // n0x0c1f c0x0000 (---------------) + I xn--mkru45i
+ 0x0036e10b, // n0x0c20 c0x0000 (---------------) + I xn--nit225k
+ 0x0036fb8e, // n0x0c21 c0x0000 (---------------) + I xn--ntso0iqx3a
+ 0x0036ff0b, // n0x0c22 c0x0000 (---------------) + I xn--ntsq17g
+ 0x0037604b, // n0x0c23 c0x0000 (---------------) + I xn--pssu33l
+ 0x0037748b, // n0x0c24 c0x0000 (---------------) + I xn--qqqt11m
+ 0x0037c34a, // n0x0c25 c0x0000 (---------------) + I xn--rht27z
+ 0x0037c5c9, // n0x0c26 c0x0000 (---------------) + I xn--rht3d
+ 0x0037c80a, // n0x0c27 c0x0000 (---------------) + I xn--rht61e
+ 0x0037de8a, // n0x0c28 c0x0000 (---------------) + I xn--rny31h
+ 0x0038e5cb, // n0x0c29 c0x0000 (---------------) + I xn--tor131o
+ 0x0039010b, // n0x0c2a c0x0000 (---------------) + I xn--uist22h
+ 0x0039084a, // n0x0c2b c0x0000 (---------------) + I xn--uisz3g
+ 0x00391d0b, // n0x0c2c c0x0000 (---------------) + I xn--uuwu58a
+ 0x00397f0b, // n0x0c2d c0x0000 (---------------) + I xn--vgu402c
+ 0x003a1e0b, // n0x0c2e c0x0000 (---------------) + I xn--zbx025d
+ 0x2c277b48, // n0x0c2f c0x00b0 (n0x1278-n0x129a) + I yamagata
+ 0x2c6806c9, // n0x0c30 c0x00b1 (n0x129a-n0x12aa) + I yamaguchi
+ 0x2ca98d49, // n0x0c31 c0x00b2 (n0x12aa-n0x12c6) + I yamanashi
+ 0x2ce4d248, // n0x0c32 c0x00b3 (n0x12c6-n0x12c7)* o I yokohama
+ 0x0032eb45, // n0x0c33 c0x0000 (---------------) + I aisai
+ 0x00201383, // n0x0c34 c0x0000 (---------------) + I ama
+ 0x0020a0c4, // n0x0c35 c0x0000 (---------------) + I anjo
+ 0x002bb7c5, // n0x0c36 c0x0000 (---------------) + I asuke
+ 0x002a4a46, // n0x0c37 c0x0000 (---------------) + I chiryu
+ 0x002a6585, // n0x0c38 c0x0000 (---------------) + I chita
+ 0x0027ecc4, // n0x0c39 c0x0000 (---------------) + I fuso
+ 0x00372bc8, // n0x0c3a c0x0000 (---------------) + I gamagori
+ 0x0024e385, // n0x0c3b c0x0000 (---------------) + I handa
+ 0x00288284, // n0x0c3c c0x0000 (---------------) + I hazu
+ 0x002c0347, // n0x0c3d c0x0000 (---------------) + I hekinan
+ 0x0029480a, // n0x0c3e c0x0000 (---------------) + I higashiura
+ 0x002c394a, // n0x0c3f c0x0000 (---------------) + I ichinomiya
+ 0x003281c7, // n0x0c40 c0x0000 (---------------) + I inazawa
+ 0x0039dc07, // n0x0c41 c0x0000 (---------------) + I inuyama
+ 0x002e6c07, // n0x0c42 c0x0000 (---------------) + I isshiki
+ 0x0035a5c7, // n0x0c43 c0x0000 (---------------) + I iwakura
+ 0x002c5e45, // n0x0c44 c0x0000 (---------------) + I kanie
+ 0x002568c6, // n0x0c45 c0x0000 (---------------) + I kariya
+ 0x00300307, // n0x0c46 c0x0000 (---------------) + I kasugai
+ 0x00249e04, // n0x0c47 c0x0000 (---------------) + I kira
+ 0x002f2b86, // n0x0c48 c0x0000 (---------------) + I kiyosu
+ 0x00287986, // n0x0c49 c0x0000 (---------------) + I komaki
+ 0x0020d205, // n0x0c4a c0x0000 (---------------) + I konan
+ 0x00224c84, // n0x0c4b c0x0000 (---------------) + I kota
+ 0x0028d806, // n0x0c4c c0x0000 (---------------) + I mihama
+ 0x00293a07, // n0x0c4d c0x0000 (---------------) + I miyoshi
+ 0x0022aa06, // n0x0c4e c0x0000 (---------------) + I nishio
+ 0x002a94c7, // n0x0c4f c0x0000 (---------------) + I nisshin
+ 0x00227f83, // n0x0c50 c0x0000 (---------------) + I obu
+ 0x0024a8c6, // n0x0c51 c0x0000 (---------------) + I oguchi
+ 0x00232745, // n0x0c52 c0x0000 (---------------) + I oharu
+ 0x00276547, // n0x0c53 c0x0000 (---------------) + I okazaki
+ 0x002b8f4a, // n0x0c54 c0x0000 (---------------) + I owariasahi
+ 0x002a8f44, // n0x0c55 c0x0000 (---------------) + I seto
+ 0x00219388, // n0x0c56 c0x0000 (---------------) + I shikatsu
+ 0x0037ee49, // n0x0c57 c0x0000 (---------------) + I shinshiro
+ 0x002a8987, // n0x0c58 c0x0000 (---------------) + I shitara
+ 0x002e1486, // n0x0c59 c0x0000 (---------------) + I tahara
+ 0x0035a388, // n0x0c5a c0x0000 (---------------) + I takahama
+ 0x00307e09, // n0x0c5b c0x0000 (---------------) + I tobishima
+ 0x0036b804, // n0x0c5c c0x0000 (---------------) + I toei
+ 0x002f6a44, // n0x0c5d c0x0000 (---------------) + I togo
+ 0x002f1405, // n0x0c5e c0x0000 (---------------) + I tokai
+ 0x002b9648, // n0x0c5f c0x0000 (---------------) + I tokoname
+ 0x002ba487, // n0x0c60 c0x0000 (---------------) + I toyoake
+ 0x0027f8c9, // n0x0c61 c0x0000 (---------------) + I toyohashi
+ 0x00241608, // n0x0c62 c0x0000 (---------------) + I toyokawa
+ 0x00364dc6, // n0x0c63 c0x0000 (---------------) + I toyone
+ 0x00254b06, // n0x0c64 c0x0000 (---------------) + I toyota
+ 0x0028e448, // n0x0c65 c0x0000 (---------------) + I tsushima
+ 0x003693c6, // n0x0c66 c0x0000 (---------------) + I yatomi
+ 0x0021e685, // n0x0c67 c0x0000 (---------------) + I akita
+ 0x00279786, // n0x0c68 c0x0000 (---------------) + I daisen
+ 0x00271d08, // n0x0c69 c0x0000 (---------------) + I fujisato
+ 0x00234dc6, // n0x0c6a c0x0000 (---------------) + I gojome
+ 0x00248ccb, // n0x0c6b c0x0000 (---------------) + I hachirogata
+ 0x00283106, // n0x0c6c c0x0000 (---------------) + I happou
+ 0x0029084d, // n0x0c6d c0x0000 (---------------) + I higashinaruse
+ 0x00201785, // n0x0c6e c0x0000 (---------------) + I honjo
+ 0x0029ec06, // n0x0c6f c0x0000 (---------------) + I honjyo
+ 0x0021b005, // n0x0c70 c0x0000 (---------------) + I ikawa
+ 0x00286509, // n0x0c71 c0x0000 (---------------) + I kamikoani
+ 0x002e3107, // n0x0c72 c0x0000 (---------------) + I kamioka
+ 0x0034e208, // n0x0c73 c0x0000 (---------------) + I katagami
+ 0x0025f246, // n0x0c74 c0x0000 (---------------) + I kazuno
+ 0x0028f209, // n0x0c75 c0x0000 (---------------) + I kitaakita
+ 0x002dc706, // n0x0c76 c0x0000 (---------------) + I kosaka
+ 0x002b8ec5, // n0x0c77 c0x0000 (---------------) + I kyowa
+ 0x002964c6, // n0x0c78 c0x0000 (---------------) + I misato
+ 0x0029dec6, // n0x0c79 c0x0000 (---------------) + I mitane
+ 0x002c4ac9, // n0x0c7a c0x0000 (---------------) + I moriyoshi
+ 0x0034ea46, // n0x0c7b c0x0000 (---------------) + I nikaho
+ 0x0024a547, // n0x0c7c c0x0000 (---------------) + I noshiro
+ 0x003286c5, // n0x0c7d c0x0000 (---------------) + I odate
+ 0x00203083, // n0x0c7e c0x0000 (---------------) + I oga
+ 0x00222a85, // n0x0c7f c0x0000 (---------------) + I ogata
+ 0x0029cdc7, // n0x0c80 c0x0000 (---------------) + I semboku
+ 0x00309fc6, // n0x0c81 c0x0000 (---------------) + I yokote
+ 0x00201689, // n0x0c82 c0x0000 (---------------) + I yurihonjo
+ 0x0030adc6, // n0x0c83 c0x0000 (---------------) + I aomori
+ 0x00248686, // n0x0c84 c0x0000 (---------------) + I gonohe
+ 0x00205849, // n0x0c85 c0x0000 (---------------) + I hachinohe
+ 0x00279189, // n0x0c86 c0x0000 (---------------) + I hashikami
+ 0x00296c47, // n0x0c87 c0x0000 (---------------) + I hiranai
+ 0x00324188, // n0x0c88 c0x0000 (---------------) + I hirosaki
+ 0x00261849, // n0x0c89 c0x0000 (---------------) + I itayanagi
+ 0x00276d48, // n0x0c8a c0x0000 (---------------) + I kuroishi
+ 0x0036d986, // n0x0c8b c0x0000 (---------------) + I misawa
+ 0x002ccb45, // n0x0c8c c0x0000 (---------------) + I mutsu
+ 0x0023a58a, // n0x0c8d c0x0000 (---------------) + I nakadomari
+ 0x00248706, // n0x0c8e c0x0000 (---------------) + I noheji
+ 0x00300ac6, // n0x0c8f c0x0000 (---------------) + I oirase
+ 0x0029a305, // n0x0c90 c0x0000 (---------------) + I owani
+ 0x002a5048, // n0x0c91 c0x0000 (---------------) + I rokunohe
+ 0x0020c887, // n0x0c92 c0x0000 (---------------) + I sannohe
+ 0x0023160a, // n0x0c93 c0x0000 (---------------) + I shichinohe
+ 0x00248586, // n0x0c94 c0x0000 (---------------) + I shingo
+ 0x00339185, // n0x0c95 c0x0000 (---------------) + I takko
+ 0x00256286, // n0x0c96 c0x0000 (---------------) + I towada
+ 0x002880c7, // n0x0c97 c0x0000 (---------------) + I tsugaru
+ 0x002e1347, // n0x0c98 c0x0000 (---------------) + I tsuruta
+ 0x00380305, // n0x0c99 c0x0000 (---------------) + I abiko
+ 0x002b9085, // n0x0c9a c0x0000 (---------------) + I asahi
+ 0x002dfb46, // n0x0c9b c0x0000 (---------------) + I chonan
+ 0x002f6146, // n0x0c9c c0x0000 (---------------) + I chosei
+ 0x003a2886, // n0x0c9d c0x0000 (---------------) + I choshi
+ 0x00359404, // n0x0c9e c0x0000 (---------------) + I chuo
+ 0x00278249, // n0x0c9f c0x0000 (---------------) + I funabashi
+ 0x00281586, // n0x0ca0 c0x0000 (---------------) + I futtsu
+ 0x00279d4a, // n0x0ca1 c0x0000 (---------------) + I hanamigawa
+ 0x00286b88, // n0x0ca2 c0x0000 (---------------) + I ichihara
+ 0x003335c8, // n0x0ca3 c0x0000 (---------------) + I ichikawa
+ 0x002c394a, // n0x0ca4 c0x0000 (---------------) + I ichinomiya
+ 0x0020c145, // n0x0ca5 c0x0000 (---------------) + I inzai
+ 0x00293945, // n0x0ca6 c0x0000 (---------------) + I isumi
+ 0x00264508, // n0x0ca7 c0x0000 (---------------) + I kamagaya
+ 0x002c4d48, // n0x0ca8 c0x0000 (---------------) + I kamogawa
+ 0x00310787, // n0x0ca9 c0x0000 (---------------) + I kashiwa
+ 0x0028bb06, // n0x0caa c0x0000 (---------------) + I katori
+ 0x00314048, // n0x0cab c0x0000 (---------------) + I katsuura
+ 0x00229407, // n0x0cac c0x0000 (---------------) + I kimitsu
+ 0x00277448, // n0x0cad c0x0000 (---------------) + I kisarazu
+ 0x00368b46, // n0x0cae c0x0000 (---------------) + I kozaki
+ 0x0027a308, // n0x0caf c0x0000 (---------------) + I kujukuri
+ 0x0028a086, // n0x0cb0 c0x0000 (---------------) + I kyonan
+ 0x00237c47, // n0x0cb1 c0x0000 (---------------) + I matsudo
+ 0x0028fc46, // n0x0cb2 c0x0000 (---------------) + I midori
+ 0x0028d806, // n0x0cb3 c0x0000 (---------------) + I mihama
+ 0x0033078a, // n0x0cb4 c0x0000 (---------------) + I minamiboso
+ 0x0022f586, // n0x0cb5 c0x0000 (---------------) + I mobara
+ 0x002ccb49, // n0x0cb6 c0x0000 (---------------) + I mutsuzawa
+ 0x002a7986, // n0x0cb7 c0x0000 (---------------) + I nagara
+ 0x002a7bca, // n0x0cb8 c0x0000 (---------------) + I nagareyama
+ 0x002b8c89, // n0x0cb9 c0x0000 (---------------) + I narashino
+ 0x00357906, // n0x0cba c0x0000 (---------------) + I narita
+ 0x00383dc4, // n0x0cbb c0x0000 (---------------) + I noda
+ 0x00307b4d, // n0x0cbc c0x0000 (---------------) + I oamishirasato
+ 0x00280947, // n0x0cbd c0x0000 (---------------) + I omigawa
+ 0x00306346, // n0x0cbe c0x0000 (---------------) + I onjuku
+ 0x002b3a45, // n0x0cbf c0x0000 (---------------) + I otaki
+ 0x002dc785, // n0x0cc0 c0x0000 (---------------) + I sakae
+ 0x002fe346, // n0x0cc1 c0x0000 (---------------) + I sakura
+ 0x002859c9, // n0x0cc2 c0x0000 (---------------) + I shimofusa
+ 0x0029afc7, // n0x0cc3 c0x0000 (---------------) + I shirako
+ 0x00272946, // n0x0cc4 c0x0000 (---------------) + I shiroi
+ 0x002d41c6, // n0x0cc5 c0x0000 (---------------) + I shisui
+ 0x0027ed49, // n0x0cc6 c0x0000 (---------------) + I sodegaura
+ 0x0021e5c4, // n0x0cc7 c0x0000 (---------------) + I sosa
+ 0x002a5b04, // n0x0cc8 c0x0000 (---------------) + I tako
+ 0x00201248, // n0x0cc9 c0x0000 (---------------) + I tateyama
+ 0x00366cc6, // n0x0cca c0x0000 (---------------) + I togane
+ 0x002965c8, // n0x0ccb c0x0000 (---------------) + I tohnosho
+ 0x002eeec8, // n0x0ccc c0x0000 (---------------) + I tomisato
+ 0x0026aa47, // n0x0ccd c0x0000 (---------------) + I urayasu
+ 0x003a3249, // n0x0cce c0x0000 (---------------) + I yachimata
+ 0x003a2a87, // n0x0ccf c0x0000 (---------------) + I yachiyo
+ 0x002a754a, // n0x0cd0 c0x0000 (---------------) + I yokaichiba
+ 0x0022fc8f, // n0x0cd1 c0x0000 (---------------) + I yokoshibahikari
+ 0x0025ddca, // n0x0cd2 c0x0000 (---------------) + I yotsukaido
+ 0x00222485, // n0x0cd3 c0x0000 (---------------) + I ainan
+ 0x00271f45, // n0x0cd4 c0x0000 (---------------) + I honai
+ 0x002181c5, // n0x0cd5 c0x0000 (---------------) + I ikata
+ 0x00308407, // n0x0cd6 c0x0000 (---------------) + I imabari
+ 0x00273f43, // n0x0cd7 c0x0000 (---------------) + I iyo
+ 0x00324388, // n0x0cd8 c0x0000 (---------------) + I kamijima
+ 0x002ead06, // n0x0cd9 c0x0000 (---------------) + I kihoku
+ 0x002eae09, // n0x0cda c0x0000 (---------------) + I kumakogen
+ 0x002fa006, // n0x0cdb c0x0000 (---------------) + I masaki
+ 0x002c4907, // n0x0cdc c0x0000 (---------------) + I matsuno
+ 0x0028efc9, // n0x0cdd c0x0000 (---------------) + I matsuyama
+ 0x0034e108, // n0x0cde c0x0000 (---------------) + I namikata
+ 0x0029a3c7, // n0x0cdf c0x0000 (---------------) + I niihama
+ 0x002f6fc3, // n0x0ce0 c0x0000 (---------------) + I ozu
+ 0x0032ebc5, // n0x0ce1 c0x0000 (---------------) + I saijo
+ 0x0035b6c5, // n0x0ce2 c0x0000 (---------------) + I seiyo
+ 0x0035924b, // n0x0ce3 c0x0000 (---------------) + I shikokuchuo
+ 0x002b88c4, // n0x0ce4 c0x0000 (---------------) + I tobe
+ 0x002d40c4, // n0x0ce5 c0x0000 (---------------) + I toon
+ 0x00270a06, // n0x0ce6 c0x0000 (---------------) + I uchiko
+ 0x002f7347, // n0x0ce7 c0x0000 (---------------) + I uwajima
+ 0x0038a64a, // n0x0ce8 c0x0000 (---------------) + I yawatahama
+ 0x0023d687, // n0x0ce9 c0x0000 (---------------) + I echizen
+ 0x0036b887, // n0x0cea c0x0000 (---------------) + I eiheiji
+ 0x00275605, // n0x0ceb c0x0000 (---------------) + I fukui
+ 0x00202b85, // n0x0cec c0x0000 (---------------) + I ikeda
+ 0x0020d6c9, // n0x0ced c0x0000 (---------------) + I katsuyama
+ 0x0028d806, // n0x0cee c0x0000 (---------------) + I mihama
+ 0x0023d50d, // n0x0cef c0x0000 (---------------) + I minamiechizen
+ 0x003912c5, // n0x0cf0 c0x0000 (---------------) + I obama
+ 0x002967c3, // n0x0cf1 c0x0000 (---------------) + I ohi
+ 0x0020e703, // n0x0cf2 c0x0000 (---------------) + I ono
+ 0x002eb685, // n0x0cf3 c0x0000 (---------------) + I sabae
+ 0x003487c5, // n0x0cf4 c0x0000 (---------------) + I sakai
+ 0x0035a388, // n0x0cf5 c0x0000 (---------------) + I takahama
+ 0x00273607, // n0x0cf6 c0x0000 (---------------) + I tsuruga
+ 0x002a5886, // n0x0cf7 c0x0000 (---------------) + I wakasa
+ 0x00294ec6, // n0x0cf8 c0x0000 (---------------) + I ashiya
+ 0x00227fc5, // n0x0cf9 c0x0000 (---------------) + I buzen
+ 0x00234c87, // n0x0cfa c0x0000 (---------------) + I chikugo
+ 0x0039de87, // n0x0cfb c0x0000 (---------------) + I chikuho
+ 0x0020b747, // n0x0cfc c0x0000 (---------------) + I chikujo
+ 0x002c900a, // n0x0cfd c0x0000 (---------------) + I chikushino
+ 0x0024a988, // n0x0cfe c0x0000 (---------------) + I chikuzen
+ 0x00359404, // n0x0cff c0x0000 (---------------) + I chuo
+ 0x0025ca87, // n0x0d00 c0x0000 (---------------) + I dazaifu
+ 0x002748c7, // n0x0d01 c0x0000 (---------------) + I fukuchi
+ 0x0030bb06, // n0x0d02 c0x0000 (---------------) + I hakata
+ 0x00260407, // n0x0d03 c0x0000 (---------------) + I higashi
+ 0x002c2c08, // n0x0d04 c0x0000 (---------------) + I hirokawa
+ 0x00298c48, // n0x0d05 c0x0000 (---------------) + I hisayama
+ 0x00260a06, // n0x0d06 c0x0000 (---------------) + I iizuka
+ 0x00322f48, // n0x0d07 c0x0000 (---------------) + I inatsuki
+ 0x002c5484, // n0x0d08 c0x0000 (---------------) + I kaho
+ 0x00300306, // n0x0d09 c0x0000 (---------------) + I kasuga
+ 0x00394686, // n0x0d0a c0x0000 (---------------) + I kasuya
+ 0x0031a406, // n0x0d0b c0x0000 (---------------) + I kawara
+ 0x0027cc86, // n0x0d0c c0x0000 (---------------) + I keisen
+ 0x00223544, // n0x0d0d c0x0000 (---------------) + I koga
+ 0x0035a686, // n0x0d0e c0x0000 (---------------) + I kurate
+ 0x002b2ac6, // n0x0d0f c0x0000 (---------------) + I kurogi
+ 0x0028dbc6, // n0x0d10 c0x0000 (---------------) + I kurume
+ 0x00236f86, // n0x0d11 c0x0000 (---------------) + I minami
+ 0x0020e5c6, // n0x0d12 c0x0000 (---------------) + I miyako
+ 0x002c2a46, // n0x0d13 c0x0000 (---------------) + I miyama
+ 0x002a5788, // n0x0d14 c0x0000 (---------------) + I miyawaka
+ 0x003533c8, // n0x0d15 c0x0000 (---------------) + I mizumaki
+ 0x002c9bc8, // n0x0d16 c0x0000 (---------------) + I munakata
+ 0x002a6788, // n0x0d17 c0x0000 (---------------) + I nakagawa
+ 0x00264486, // n0x0d18 c0x0000 (---------------) + I nakama
+ 0x002123c5, // n0x0d19 c0x0000 (---------------) + I nishi
+ 0x00222a46, // n0x0d1a c0x0000 (---------------) + I nogata
+ 0x002a3645, // n0x0d1b c0x0000 (---------------) + I ogori
+ 0x0037b787, // n0x0d1c c0x0000 (---------------) + I okagaki
+ 0x002416c5, // n0x0d1d c0x0000 (---------------) + I okawa
+ 0x00214a43, // n0x0d1e c0x0000 (---------------) + I oki
+ 0x00201f05, // n0x0d1f c0x0000 (---------------) + I omuta
+ 0x00312384, // n0x0d20 c0x0000 (---------------) + I onga
+ 0x0020e705, // n0x0d21 c0x0000 (---------------) + I onojo
+ 0x00215103, // n0x0d22 c0x0000 (---------------) + I oto
+ 0x002d7787, // n0x0d23 c0x0000 (---------------) + I saigawa
+ 0x00343e48, // n0x0d24 c0x0000 (---------------) + I sasaguri
+ 0x002a9586, // n0x0d25 c0x0000 (---------------) + I shingu
+ 0x0028d0cd, // n0x0d26 c0x0000 (---------------) + I shinyoshitomi
+ 0x00271f06, // n0x0d27 c0x0000 (---------------) + I shonai
+ 0x0028c585, // n0x0d28 c0x0000 (---------------) + I soeda
+ 0x00260c43, // n0x0d29 c0x0000 (---------------) + I sue
+ 0x002afdc9, // n0x0d2a c0x0000 (---------------) + I tachiarai
+ 0x002bed86, // n0x0d2b c0x0000 (---------------) + I tagawa
+ 0x0028cb86, // n0x0d2c c0x0000 (---------------) + I takata
+ 0x002fef04, // n0x0d2d c0x0000 (---------------) + I toho
+ 0x0025dd47, // n0x0d2e c0x0000 (---------------) + I toyotsu
+ 0x00236606, // n0x0d2f c0x0000 (---------------) + I tsuiki
+ 0x002a4e85, // n0x0d30 c0x0000 (---------------) + I ukiha
+ 0x00210603, // n0x0d31 c0x0000 (---------------) + I umi
+ 0x00206884, // n0x0d32 c0x0000 (---------------) + I usui
+ 0x00274a86, // n0x0d33 c0x0000 (---------------) + I yamada
+ 0x002924c4, // n0x0d34 c0x0000 (---------------) + I yame
+ 0x0030d248, // n0x0d35 c0x0000 (---------------) + I yanagawa
+ 0x0039d909, // n0x0d36 c0x0000 (---------------) + I yukuhashi
+ 0x002e3609, // n0x0d37 c0x0000 (---------------) + I aizubange
+ 0x002963ca, // n0x0d38 c0x0000 (---------------) + I aizumisato
+ 0x0022c10d, // n0x0d39 c0x0000 (---------------) + I aizuwakamatsu
+ 0x0024cdc7, // n0x0d3a c0x0000 (---------------) + I asakawa
+ 0x00300946, // n0x0d3b c0x0000 (---------------) + I bandai
+ 0x00205dc4, // n0x0d3c c0x0000 (---------------) + I date
+ 0x0027f209, // n0x0d3d c0x0000 (---------------) + I fukushima
+ 0x0027e188, // n0x0d3e c0x0000 (---------------) + I furudono
+ 0x00280546, // n0x0d3f c0x0000 (---------------) + I futaba
+ 0x00253546, // n0x0d40 c0x0000 (---------------) + I hanawa
+ 0x00260407, // n0x0d41 c0x0000 (---------------) + I higashi
+ 0x002edcc6, // n0x0d42 c0x0000 (---------------) + I hirata
+ 0x0021d386, // n0x0d43 c0x0000 (---------------) + I hirono
+ 0x002fe4c6, // n0x0d44 c0x0000 (---------------) + I iitate
+ 0x00390f8a, // n0x0d45 c0x0000 (---------------) + I inawashiro
+ 0x0021af48, // n0x0d46 c0x0000 (---------------) + I ishikawa
+ 0x0025ef45, // n0x0d47 c0x0000 (---------------) + I iwaki
+ 0x0026a789, // n0x0d48 c0x0000 (---------------) + I izumizaki
+ 0x002bac0a, // n0x0d49 c0x0000 (---------------) + I kagamiishi
+ 0x0021b1c8, // n0x0d4a c0x0000 (---------------) + I kaneyama
+ 0x00292e48, // n0x0d4b c0x0000 (---------------) + I kawamata
+ 0x0028cb08, // n0x0d4c c0x0000 (---------------) + I kitakata
+ 0x0039e28c, // n0x0d4d c0x0000 (---------------) + I kitashiobara
+ 0x002d5e45, // n0x0d4e c0x0000 (---------------) + I koori
+ 0x00295148, // n0x0d4f c0x0000 (---------------) + I koriyama
+ 0x00304986, // n0x0d50 c0x0000 (---------------) + I kunimi
+ 0x0029e646, // n0x0d51 c0x0000 (---------------) + I miharu
+ 0x0039fb87, // n0x0d52 c0x0000 (---------------) + I mishima
+ 0x0023d585, // n0x0d53 c0x0000 (---------------) + I namie
+ 0x00279905, // n0x0d54 c0x0000 (---------------) + I nango
+ 0x002e34c9, // n0x0d55 c0x0000 (---------------) + I nishiaizu
+ 0x002143c7, // n0x0d56 c0x0000 (---------------) + I nishigo
+ 0x002eadc5, // n0x0d57 c0x0000 (---------------) + I okuma
+ 0x0021e2c7, // n0x0d58 c0x0000 (---------------) + I omotego
+ 0x0020e703, // n0x0d59 c0x0000 (---------------) + I ono
+ 0x002bb0c5, // n0x0d5a c0x0000 (---------------) + I otama
+ 0x00396b48, // n0x0d5b c0x0000 (---------------) + I samegawa
+ 0x002a9d47, // n0x0d5c c0x0000 (---------------) + I shimogo
+ 0x00292d09, // n0x0d5d c0x0000 (---------------) + I shirakawa
+ 0x002ab745, // n0x0d5e c0x0000 (---------------) + I showa
+ 0x002ef804, // n0x0d5f c0x0000 (---------------) + I soma
+ 0x00297648, // n0x0d60 c0x0000 (---------------) + I sukagawa
+ 0x00213007, // n0x0d61 c0x0000 (---------------) + I taishin
+ 0x0029a588, // n0x0d62 c0x0000 (---------------) + I tamakawa
+ 0x0030a508, // n0x0d63 c0x0000 (---------------) + I tanagura
+ 0x002ed285, // n0x0d64 c0x0000 (---------------) + I tenei
+ 0x0034c806, // n0x0d65 c0x0000 (---------------) + I yabuki
+ 0x0021ec86, // n0x0d66 c0x0000 (---------------) + I yamato
+ 0x00349109, // n0x0d67 c0x0000 (---------------) + I yamatsuri
+ 0x003148c7, // n0x0d68 c0x0000 (---------------) + I yanaizu
+ 0x002a3f06, // n0x0d69 c0x0000 (---------------) + I yugawa
+ 0x00283687, // n0x0d6a c0x0000 (---------------) + I anpachi
+ 0x00201d83, // n0x0d6b c0x0000 (---------------) + I ena
+ 0x002a4d04, // n0x0d6c c0x0000 (---------------) + I gifu
+ 0x00297f85, // n0x0d6d c0x0000 (---------------) + I ginan
+ 0x002ebe44, // n0x0d6e c0x0000 (---------------) + I godo
+ 0x0022e444, // n0x0d6f c0x0000 (---------------) + I gujo
+ 0x00277dc7, // n0x0d70 c0x0000 (---------------) + I hashima
+ 0x00210a07, // n0x0d71 c0x0000 (---------------) + I hichiso
+ 0x00254984, // n0x0d72 c0x0000 (---------------) + I hida
+ 0x00292b50, // n0x0d73 c0x0000 (---------------) + I higashishirakawa
+ 0x0031adc7, // n0x0d74 c0x0000 (---------------) + I ibigawa
+ 0x00202b85, // n0x0d75 c0x0000 (---------------) + I ikeda
+ 0x002c414c, // n0x0d76 c0x0000 (---------------) + I kakamigahara
+ 0x0027bf84, // n0x0d77 c0x0000 (---------------) + I kani
+ 0x002892c8, // n0x0d78 c0x0000 (---------------) + I kasahara
+ 0x00237b49, // n0x0d79 c0x0000 (---------------) + I kasamatsu
+ 0x002f8806, // n0x0d7a c0x0000 (---------------) + I kawaue
+ 0x0021e6c8, // n0x0d7b c0x0000 (---------------) + I kitagata
+ 0x00248084, // n0x0d7c c0x0000 (---------------) + I mino
+ 0x00248088, // n0x0d7d c0x0000 (---------------) + I minokamo
+ 0x002b9d86, // n0x0d7e c0x0000 (---------------) + I mitake
+ 0x00352348, // n0x0d7f c0x0000 (---------------) + I mizunami
+ 0x00297c86, // n0x0d80 c0x0000 (---------------) + I motosu
+ 0x0020efcb, // n0x0d81 c0x0000 (---------------) + I nakatsugawa
+ 0x00203085, // n0x0d82 c0x0000 (---------------) + I ogaki
+ 0x002c5408, // n0x0d83 c0x0000 (---------------) + I sakahogi
+ 0x00216944, // n0x0d84 c0x0000 (---------------) + I seki
+ 0x00278e0a, // n0x0d85 c0x0000 (---------------) + I sekigahara
+ 0x00292d09, // n0x0d86 c0x0000 (---------------) + I shirakawa
+ 0x00331246, // n0x0d87 c0x0000 (---------------) + I tajimi
+ 0x002b98c8, // n0x0d88 c0x0000 (---------------) + I takayama
+ 0x0026c945, // n0x0d89 c0x0000 (---------------) + I tarui
+ 0x00221b44, // n0x0d8a c0x0000 (---------------) + I toki
+ 0x002891c6, // n0x0d8b c0x0000 (---------------) + I tomika
+ 0x0020b608, // n0x0d8c c0x0000 (---------------) + I wanouchi
+ 0x00277b48, // n0x0d8d c0x0000 (---------------) + I yamagata
+ 0x00340346, // n0x0d8e c0x0000 (---------------) + I yaotsu
+ 0x00201e44, // n0x0d8f c0x0000 (---------------) + I yoro
+ 0x0023a506, // n0x0d90 c0x0000 (---------------) + I annaka
+ 0x003a2b07, // n0x0d91 c0x0000 (---------------) + I chiyoda
+ 0x00271647, // n0x0d92 c0x0000 (---------------) + I fujioka
+ 0x0026040f, // n0x0d93 c0x0000 (---------------) + I higashiagatsuma
+ 0x00204407, // n0x0d94 c0x0000 (---------------) + I isesaki
+ 0x003579c7, // n0x0d95 c0x0000 (---------------) + I itakura
+ 0x0029e505, // n0x0d96 c0x0000 (---------------) + I kanna
+ 0x002f2fc5, // n0x0d97 c0x0000 (---------------) + I kanra
+ 0x00296909, // n0x0d98 c0x0000 (---------------) + I katashina
+ 0x002432c6, // n0x0d99 c0x0000 (---------------) + I kawaba
+ 0x00276685, // n0x0d9a c0x0000 (---------------) + I kiryu
+ 0x00279487, // n0x0d9b c0x0000 (---------------) + I kusatsu
+ 0x0039fe08, // n0x0d9c c0x0000 (---------------) + I maebashi
+ 0x002b4b45, // n0x0d9d c0x0000 (---------------) + I meiwa
+ 0x0028fc46, // n0x0d9e c0x0000 (---------------) + I midori
+ 0x0020f808, // n0x0d9f c0x0000 (---------------) + I minakami
+ 0x0030f1ca, // n0x0da0 c0x0000 (---------------) + I naganohara
+ 0x00320048, // n0x0da1 c0x0000 (---------------) + I nakanojo
+ 0x00390447, // n0x0da2 c0x0000 (---------------) + I nanmoku
+ 0x002300c6, // n0x0da3 c0x0000 (---------------) + I numata
+ 0x0026a746, // n0x0da4 c0x0000 (---------------) + I oizumi
+ 0x0021ad83, // n0x0da5 c0x0000 (---------------) + I ora
+ 0x0020a183, // n0x0da6 c0x0000 (---------------) + I ota
+ 0x002badc9, // n0x0da7 c0x0000 (---------------) + I shibukawa
+ 0x002616c9, // n0x0da8 c0x0000 (---------------) + I shimonita
+ 0x00285c86, // n0x0da9 c0x0000 (---------------) + I shinto
+ 0x002ab745, // n0x0daa c0x0000 (---------------) + I showa
+ 0x00297a08, // n0x0dab c0x0000 (---------------) + I takasaki
+ 0x002b98c8, // n0x0dac c0x0000 (---------------) + I takayama
+ 0x002e26c8, // n0x0dad c0x0000 (---------------) + I tamamura
+ 0x002fe54b, // n0x0dae c0x0000 (---------------) + I tatebayashi
+ 0x0028d307, // n0x0daf c0x0000 (---------------) + I tomioka
+ 0x002f4d89, // n0x0db0 c0x0000 (---------------) + I tsukiyono
+ 0x00260688, // n0x0db1 c0x0000 (---------------) + I tsumagoi
+ 0x003855c4, // n0x0db2 c0x0000 (---------------) + I ueno
+ 0x002c4bc8, // n0x0db3 c0x0000 (---------------) + I yoshioka
+ 0x002848c9, // n0x0db4 c0x0000 (---------------) + I asaminami
+ 0x002a4205, // n0x0db5 c0x0000 (---------------) + I daiwa
+ 0x00308307, // n0x0db6 c0x0000 (---------------) + I etajima
+ 0x002b7305, // n0x0db7 c0x0000 (---------------) + I fuchu
+ 0x00277a48, // n0x0db8 c0x0000 (---------------) + I fukuyama
+ 0x002869cb, // n0x0db9 c0x0000 (---------------) + I hatsukaichi
+ 0x0028a890, // n0x0dba c0x0000 (---------------) + I higashihiroshima
+ 0x0029ea05, // n0x0dbb c0x0000 (---------------) + I hongo
+ 0x0021688c, // n0x0dbc c0x0000 (---------------) + I jinsekikogen
+ 0x002a5a45, // n0x0dbd c0x0000 (---------------) + I kaita
+ 0x00275683, // n0x0dbe c0x0000 (---------------) + I kui
+ 0x0027eb46, // n0x0dbf c0x0000 (---------------) + I kumano
+ 0x002b1f04, // n0x0dc0 c0x0000 (---------------) + I kure
+ 0x00362c86, // n0x0dc1 c0x0000 (---------------) + I mihara
+ 0x00293a07, // n0x0dc2 c0x0000 (---------------) + I miyoshi
+ 0x0020efc4, // n0x0dc3 c0x0000 (---------------) + I naka
+ 0x002c3848, // n0x0dc4 c0x0000 (---------------) + I onomichi
+ 0x0032424d, // n0x0dc5 c0x0000 (---------------) + I osakikamijima
+ 0x002d3ac5, // n0x0dc6 c0x0000 (---------------) + I otake
+ 0x0022c604, // n0x0dc7 c0x0000 (---------------) + I saka
+ 0x0020d904, // n0x0dc8 c0x0000 (---------------) + I sera
+ 0x0026a209, // n0x0dc9 c0x0000 (---------------) + I seranishi
+ 0x0027ab48, // n0x0dca c0x0000 (---------------) + I shinichi
+ 0x0030ac47, // n0x0dcb c0x0000 (---------------) + I shobara
+ 0x002b9e08, // n0x0dcc c0x0000 (---------------) + I takehara
+ 0x00278308, // n0x0dcd c0x0000 (---------------) + I abashiri
+ 0x00272c45, // n0x0dce c0x0000 (---------------) + I abira
+ 0x00378a87, // n0x0dcf c0x0000 (---------------) + I aibetsu
+ 0x00272bc7, // n0x0dd0 c0x0000 (---------------) + I akabira
+ 0x00379187, // n0x0dd1 c0x0000 (---------------) + I akkeshi
+ 0x002b9089, // n0x0dd2 c0x0000 (---------------) + I asahikawa
+ 0x00236489, // n0x0dd3 c0x0000 (---------------) + I ashibetsu
+ 0x0023e7c6, // n0x0dd4 c0x0000 (---------------) + I ashoro
+ 0x002ac806, // n0x0dd5 c0x0000 (---------------) + I assabu
+ 0x00260646, // n0x0dd6 c0x0000 (---------------) + I atsuma
+ 0x002621c5, // n0x0dd7 c0x0000 (---------------) + I bibai
+ 0x002723c4, // n0x0dd8 c0x0000 (---------------) + I biei
+ 0x00200ec6, // n0x0dd9 c0x0000 (---------------) + I bifuka
+ 0x00201446, // n0x0dda c0x0000 (---------------) + I bihoro
+ 0x00272c88, // n0x0ddb c0x0000 (---------------) + I biratori
+ 0x00287d8b, // n0x0ddc c0x0000 (---------------) + I chippubetsu
+ 0x002a8e07, // n0x0ddd c0x0000 (---------------) + I chitose
+ 0x00205dc4, // n0x0dde c0x0000 (---------------) + I date
+ 0x0033d0c6, // n0x0ddf c0x0000 (---------------) + I ebetsu
+ 0x00356907, // n0x0de0 c0x0000 (---------------) + I embetsu
+ 0x002eafc5, // n0x0de1 c0x0000 (---------------) + I eniwa
+ 0x0035b145, // n0x0de2 c0x0000 (---------------) + I erimo
+ 0x0033b1c4, // n0x0de3 c0x0000 (---------------) + I esan
+ 0x00236406, // n0x0de4 c0x0000 (---------------) + I esashi
+ 0x00200f48, // n0x0de5 c0x0000 (---------------) + I fukagawa
+ 0x0027f209, // n0x0de6 c0x0000 (---------------) + I fukushima
+ 0x00244106, // n0x0de7 c0x0000 (---------------) + I furano
+ 0x0027cf08, // n0x0de8 c0x0000 (---------------) + I furubira
+ 0x002a4f46, // n0x0de9 c0x0000 (---------------) + I haboro
+ 0x00328608, // n0x0dea c0x0000 (---------------) + I hakodate
+ 0x00299b0c, // n0x0deb c0x0000 (---------------) + I hamatonbetsu
+ 0x00272b06, // n0x0dec c0x0000 (---------------) + I hidaka
+ 0x0028c24d, // n0x0ded c0x0000 (---------------) + I higashikagura
+ 0x0028c6cb, // n0x0dee c0x0000 (---------------) + I higashikawa
+ 0x0024a605, // n0x0def c0x0000 (---------------) + I hiroo
+ 0x0039dfc7, // n0x0df0 c0x0000 (---------------) + I hokuryu
+ 0x0034eb46, // n0x0df1 c0x0000 (---------------) + I hokuto
+ 0x002e1208, // n0x0df2 c0x0000 (---------------) + I honbetsu
+ 0x0023e849, // n0x0df3 c0x0000 (---------------) + I horokanai
+ 0x00348d48, // n0x0df4 c0x0000 (---------------) + I horonobe
+ 0x00202b85, // n0x0df5 c0x0000 (---------------) + I ikeda
+ 0x002af387, // n0x0df6 c0x0000 (---------------) + I imakane
+ 0x00276e48, // n0x0df7 c0x0000 (---------------) + I ishikari
+ 0x00255f49, // n0x0df8 c0x0000 (---------------) + I iwamizawa
+ 0x00235306, // n0x0df9 c0x0000 (---------------) + I iwanai
+ 0x0024620a, // n0x0dfa c0x0000 (---------------) + I kamifurano
+ 0x002e0f88, // n0x0dfb c0x0000 (---------------) + I kamikawa
+ 0x00348b8b, // n0x0dfc c0x0000 (---------------) + I kamishihoro
+ 0x002ae88c, // n0x0dfd c0x0000 (---------------) + I kamisunagawa
+ 0x00248188, // n0x0dfe c0x0000 (---------------) + I kamoenai
+ 0x002741c6, // n0x0dff c0x0000 (---------------) + I kayabe
+ 0x00268208, // n0x0e00 c0x0000 (---------------) + I kembuchi
+ 0x00204547, // n0x0e01 c0x0000 (---------------) + I kikonai
+ 0x00236709, // n0x0e02 c0x0000 (---------------) + I kimobetsu
+ 0x0020cb4d, // n0x0e03 c0x0000 (---------------) + I kitahiroshima
+ 0x00294b46, // n0x0e04 c0x0000 (---------------) + I kitami
+ 0x00287a88, // n0x0e05 c0x0000 (---------------) + I kiyosato
+ 0x00353289, // n0x0e06 c0x0000 (---------------) + I koshimizu
+ 0x002b07c8, // n0x0e07 c0x0000 (---------------) + I kunneppu
+ 0x0027a408, // n0x0e08 c0x0000 (---------------) + I kuriyama
+ 0x002b338c, // n0x0e09 c0x0000 (---------------) + I kuromatsunai
+ 0x002b4407, // n0x0e0a c0x0000 (---------------) + I kushiro
+ 0x002b5747, // n0x0e0b c0x0000 (---------------) + I kutchan
+ 0x002b8ec5, // n0x0e0c c0x0000 (---------------) + I kyowa
+ 0x0028ec47, // n0x0e0d c0x0000 (---------------) + I mashike
+ 0x0039fcc8, // n0x0e0e c0x0000 (---------------) + I matsumae
+ 0x00289246, // n0x0e0f c0x0000 (---------------) + I mikasa
+ 0x00243f8c, // n0x0e10 c0x0000 (---------------) + I minamifurano
+ 0x002dd808, // n0x0e11 c0x0000 (---------------) + I mombetsu
+ 0x002c6048, // n0x0e12 c0x0000 (---------------) + I moseushi
+ 0x0025c546, // n0x0e13 c0x0000 (---------------) + I mukawa
+ 0x00391587, // n0x0e14 c0x0000 (---------------) + I muroran
+ 0x0023e9c4, // n0x0e15 c0x0000 (---------------) + I naie
+ 0x002a6788, // n0x0e16 c0x0000 (---------------) + I nakagawa
+ 0x0027b40c, // n0x0e17 c0x0000 (---------------) + I nakasatsunai
+ 0x0021034c, // n0x0e18 c0x0000 (---------------) + I nakatombetsu
+ 0x00222505, // n0x0e19 c0x0000 (---------------) + I nanae
+ 0x00200b87, // n0x0e1a c0x0000 (---------------) + I nanporo
+ 0x00201dc6, // n0x0e1b c0x0000 (---------------) + I nayoro
+ 0x00391506, // n0x0e1c c0x0000 (---------------) + I nemuro
+ 0x002866c8, // n0x0e1d c0x0000 (---------------) + I niikappu
+ 0x00264044, // n0x0e1e c0x0000 (---------------) + I niki
+ 0x0022aa0b, // n0x0e1f c0x0000 (---------------) + I nishiokoppe
+ 0x002be20b, // n0x0e20 c0x0000 (---------------) + I noboribetsu
+ 0x002300c6, // n0x0e21 c0x0000 (---------------) + I numata
+ 0x003240c7, // n0x0e22 c0x0000 (---------------) + I obihiro
+ 0x003022c5, // n0x0e23 c0x0000 (---------------) + I obira
+ 0x00268fc5, // n0x0e24 c0x0000 (---------------) + I oketo
+ 0x0022ab46, // n0x0e25 c0x0000 (---------------) + I okoppe
+ 0x0026c905, // n0x0e26 c0x0000 (---------------) + I otaru
+ 0x002b8885, // n0x0e27 c0x0000 (---------------) + I otobe
+ 0x002b9bc7, // n0x0e28 c0x0000 (---------------) + I otofuke
+ 0x00271009, // n0x0e29 c0x0000 (---------------) + I otoineppu
+ 0x002f6304, // n0x0e2a c0x0000 (---------------) + I oumu
+ 0x0026f485, // n0x0e2b c0x0000 (---------------) + I ozora
+ 0x002d1d85, // n0x0e2c c0x0000 (---------------) + I pippu
+ 0x0026fe08, // n0x0e2d c0x0000 (---------------) + I rankoshi
+ 0x002c3685, // n0x0e2e c0x0000 (---------------) + I rebun
+ 0x0029d649, // n0x0e2f c0x0000 (---------------) + I rikubetsu
+ 0x002910c7, // n0x0e30 c0x0000 (---------------) + I rishiri
+ 0x002910cb, // n0x0e31 c0x0000 (---------------) + I rishirifuji
+ 0x00227706, // n0x0e32 c0x0000 (---------------) + I saroma
+ 0x002a54c9, // n0x0e33 c0x0000 (---------------) + I sarufutsu
+ 0x00224bc8, // n0x0e34 c0x0000 (---------------) + I shakotan
+ 0x00251705, // n0x0e35 c0x0000 (---------------) + I shari
+ 0x00379288, // n0x0e36 c0x0000 (---------------) + I shibecha
+ 0x002364c8, // n0x0e37 c0x0000 (---------------) + I shibetsu
+ 0x0020af47, // n0x0e38 c0x0000 (---------------) + I shikabe
+ 0x0026a607, // n0x0e39 c0x0000 (---------------) + I shikaoi
+ 0x00277e49, // n0x0e3a c0x0000 (---------------) + I shimamaki
+ 0x00352287, // n0x0e3b c0x0000 (---------------) + I shimizu
+ 0x0025aa89, // n0x0e3c c0x0000 (---------------) + I shimokawa
+ 0x00371f4c, // n0x0e3d c0x0000 (---------------) + I shinshinotsu
+ 0x00285c88, // n0x0e3e c0x0000 (---------------) + I shintoku
+ 0x0029e349, // n0x0e3f c0x0000 (---------------) + I shiranuka
+ 0x0029fe47, // n0x0e40 c0x0000 (---------------) + I shiraoi
+ 0x002783c9, // n0x0e41 c0x0000 (---------------) + I shiriuchi
+ 0x00210b47, // n0x0e42 c0x0000 (---------------) + I sobetsu
+ 0x002ae988, // n0x0e43 c0x0000 (---------------) + I sunagawa
+ 0x00270145, // n0x0e44 c0x0000 (---------------) + I taiki
+ 0x00300286, // n0x0e45 c0x0000 (---------------) + I takasu
+ 0x002b3a88, // n0x0e46 c0x0000 (---------------) + I takikawa
+ 0x002301c8, // n0x0e47 c0x0000 (---------------) + I takinoue
+ 0x002baac9, // n0x0e48 c0x0000 (---------------) + I teshikaga
+ 0x002b88c7, // n0x0e49 c0x0000 (---------------) + I tobetsu
+ 0x00269945, // n0x0e4a c0x0000 (---------------) + I tohma
+ 0x00335489, // n0x0e4b c0x0000 (---------------) + I tomakomai
+ 0x00219806, // n0x0e4c c0x0000 (---------------) + I tomari
+ 0x00286044, // n0x0e4d c0x0000 (---------------) + I toya
+ 0x00348a06, // n0x0e4e c0x0000 (---------------) + I toyako
+ 0x0025d188, // n0x0e4f c0x0000 (---------------) + I toyotomi
+ 0x00261e07, // n0x0e50 c0x0000 (---------------) + I toyoura
+ 0x00287f88, // n0x0e51 c0x0000 (---------------) + I tsubetsu
+ 0x00323009, // n0x0e52 c0x0000 (---------------) + I tsukigata
+ 0x0025c2c7, // n0x0e53 c0x0000 (---------------) + I urakawa
+ 0x002949c6, // n0x0e54 c0x0000 (---------------) + I urausu
+ 0x0039e084, // n0x0e55 c0x0000 (---------------) + I uryu
+ 0x00201f89, // n0x0e56 c0x0000 (---------------) + I utashinai
+ 0x00378908, // n0x0e57 c0x0000 (---------------) + I wakkanai
+ 0x0025c407, // n0x0e58 c0x0000 (---------------) + I wassamu
+ 0x002569c6, // n0x0e59 c0x0000 (---------------) + I yakumo
+ 0x0035b786, // n0x0e5a c0x0000 (---------------) + I yoichi
+ 0x00300a44, // n0x0e5b c0x0000 (---------------) + I aioi
+ 0x0029ee06, // n0x0e5c c0x0000 (---------------) + I akashi
+ 0x0020e683, // n0x0e5d c0x0000 (---------------) + I ako
+ 0x002bce89, // n0x0e5e c0x0000 (---------------) + I amagasaki
+ 0x00203046, // n0x0e5f c0x0000 (---------------) + I aogaki
+ 0x00293085, // n0x0e60 c0x0000 (---------------) + I asago
+ 0x00294ec6, // n0x0e61 c0x0000 (---------------) + I ashiya
+ 0x0029a6c5, // n0x0e62 c0x0000 (---------------) + I awaji
+ 0x002772c8, // n0x0e63 c0x0000 (---------------) + I fukusaki
+ 0x00247ec7, // n0x0e64 c0x0000 (---------------) + I goshiki
+ 0x00207186, // n0x0e65 c0x0000 (---------------) + I harima
+ 0x0031ac86, // n0x0e66 c0x0000 (---------------) + I himeji
+ 0x003335c8, // n0x0e67 c0x0000 (---------------) + I ichikawa
+ 0x00296a87, // n0x0e68 c0x0000 (---------------) + I inagawa
+ 0x00294b85, // n0x0e69 c0x0000 (---------------) + I itami
+ 0x002953c8, // n0x0e6a c0x0000 (---------------) + I kakogawa
+ 0x00371c88, // n0x0e6b c0x0000 (---------------) + I kamigori
+ 0x002e0f88, // n0x0e6c c0x0000 (---------------) + I kamikawa
+ 0x002a5905, // n0x0e6d c0x0000 (---------------) + I kasai
+ 0x00300306, // n0x0e6e c0x0000 (---------------) + I kasuga
+ 0x002e33c9, // n0x0e6f c0x0000 (---------------) + I kawanishi
+ 0x0021eb04, // n0x0e70 c0x0000 (---------------) + I miki
+ 0x003694cb, // n0x0e71 c0x0000 (---------------) + I minamiawaji
+ 0x0021d08b, // n0x0e72 c0x0000 (---------------) + I nishinomiya
+ 0x0025ee49, // n0x0e73 c0x0000 (---------------) + I nishiwaki
+ 0x0020e703, // n0x0e74 c0x0000 (---------------) + I ono
+ 0x002529c5, // n0x0e75 c0x0000 (---------------) + I sanda
+ 0x0020a686, // n0x0e76 c0x0000 (---------------) + I sannan
+ 0x002ad908, // n0x0e77 c0x0000 (---------------) + I sasayama
+ 0x0022fc04, // n0x0e78 c0x0000 (---------------) + I sayo
+ 0x002a9586, // n0x0e79 c0x0000 (---------------) + I shingu
+ 0x002c9149, // n0x0e7a c0x0000 (---------------) + I shinonsen
+ 0x002b6345, // n0x0e7b c0x0000 (---------------) + I shiso
+ 0x002b9b06, // n0x0e7c c0x0000 (---------------) + I sumoto
+ 0x00213006, // n0x0e7d c0x0000 (---------------) + I taishi
+ 0x002155c4, // n0x0e7e c0x0000 (---------------) + I taka
+ 0x0028cc8a, // n0x0e7f c0x0000 (---------------) + I takarazuka
+ 0x00292fc8, // n0x0e80 c0x0000 (---------------) + I takasago
+ 0x002301c6, // n0x0e81 c0x0000 (---------------) + I takino
+ 0x00301785, // n0x0e82 c0x0000 (---------------) + I tamba
+ 0x00208c07, // n0x0e83 c0x0000 (---------------) + I tatsuno
+ 0x00251a87, // n0x0e84 c0x0000 (---------------) + I toyooka
+ 0x0034c804, // n0x0e85 c0x0000 (---------------) + I yabu
+ 0x0021d2c7, // n0x0e86 c0x0000 (---------------) + I yashiro
+ 0x00241684, // n0x0e87 c0x0000 (---------------) + I yoka
+ 0x00241686, // n0x0e88 c0x0000 (---------------) + I yokawa
+ 0x0020f943, // n0x0e89 c0x0000 (---------------) + I ami
+ 0x002b9085, // n0x0e8a c0x0000 (---------------) + I asahi
+ 0x00347c45, // n0x0e8b c0x0000 (---------------) + I bando
+ 0x00213388, // n0x0e8c c0x0000 (---------------) + I chikusei
+ 0x0025cc45, // n0x0e8d c0x0000 (---------------) + I daigo
+ 0x00272849, // n0x0e8e c0x0000 (---------------) + I fujishiro
+ 0x00299f47, // n0x0e8f c0x0000 (---------------) + I hitachi
+ 0x002a65cb, // n0x0e90 c0x0000 (---------------) + I hitachinaka
+ 0x00299f4c, // n0x0e91 c0x0000 (---------------) + I hitachiomiya
+ 0x0029abca, // n0x0e92 c0x0000 (---------------) + I hitachiota
+ 0x002bebc7, // n0x0e93 c0x0000 (---------------) + I ibaraki
+ 0x002020c3, // n0x0e94 c0x0000 (---------------) + I ina
+ 0x00318e48, // n0x0e95 c0x0000 (---------------) + I inashiki
+ 0x002a5ac5, // n0x0e96 c0x0000 (---------------) + I itako
+ 0x002b4bc5, // n0x0e97 c0x0000 (---------------) + I iwama
+ 0x0032ec84, // n0x0e98 c0x0000 (---------------) + I joso
+ 0x002ae886, // n0x0e99 c0x0000 (---------------) + I kamisu
+ 0x00237b46, // n0x0e9a c0x0000 (---------------) + I kasama
+ 0x0029ee47, // n0x0e9b c0x0000 (---------------) + I kashima
+ 0x0037fa8b, // n0x0e9c c0x0000 (---------------) + I kasumigaura
+ 0x00223544, // n0x0e9d c0x0000 (---------------) + I koga
+ 0x0034e384, // n0x0e9e c0x0000 (---------------) + I miho
+ 0x002ba004, // n0x0e9f c0x0000 (---------------) + I mito
+ 0x002c4786, // n0x0ea0 c0x0000 (---------------) + I moriya
+ 0x0020efc4, // n0x0ea1 c0x0000 (---------------) + I naka
+ 0x002b9748, // n0x0ea2 c0x0000 (---------------) + I namegata
+ 0x0032ea85, // n0x0ea3 c0x0000 (---------------) + I oarai
+ 0x00227945, // n0x0ea4 c0x0000 (---------------) + I ogawa
+ 0x002e2607, // n0x0ea5 c0x0000 (---------------) + I omitama
+ 0x0039e0c9, // n0x0ea6 c0x0000 (---------------) + I ryugasaki
+ 0x003487c5, // n0x0ea7 c0x0000 (---------------) + I sakai
+ 0x0036f20a, // n0x0ea8 c0x0000 (---------------) + I sakuragawa
+ 0x0039ff49, // n0x0ea9 c0x0000 (---------------) + I shimodate
+ 0x0027328a, // n0x0eaa c0x0000 (---------------) + I shimotsuma
+ 0x003910c9, // n0x0eab c0x0000 (---------------) + I shirosato
+ 0x0032c904, // n0x0eac c0x0000 (---------------) + I sowa
+ 0x002d4285, // n0x0ead c0x0000 (---------------) + I suifu
+ 0x002eddc8, // n0x0eae c0x0000 (---------------) + I takahagi
+ 0x002ecd0b, // n0x0eaf c0x0000 (---------------) + I tamatsukuri
+ 0x002f1405, // n0x0eb0 c0x0000 (---------------) + I tokai
+ 0x0027fb86, // n0x0eb1 c0x0000 (---------------) + I tomobe
+ 0x0021fdc4, // n0x0eb2 c0x0000 (---------------) + I tone
+ 0x00272d86, // n0x0eb3 c0x0000 (---------------) + I toride
+ 0x0025c149, // n0x0eb4 c0x0000 (---------------) + I tsuchiura
+ 0x0033d187, // n0x0eb5 c0x0000 (---------------) + I tsukuba
+ 0x0030af88, // n0x0eb6 c0x0000 (---------------) + I uchihara
+ 0x0022c486, // n0x0eb7 c0x0000 (---------------) + I ushiku
+ 0x003a2a87, // n0x0eb8 c0x0000 (---------------) + I yachiyo
+ 0x00277b48, // n0x0eb9 c0x0000 (---------------) + I yamagata
+ 0x00382306, // n0x0eba c0x0000 (---------------) + I yawara
+ 0x00242084, // n0x0ebb c0x0000 (---------------) + I yuki
+ 0x00358a07, // n0x0ebc c0x0000 (---------------) + I anamizu
+ 0x00337085, // n0x0ebd c0x0000 (---------------) + I hakui
+ 0x003419c7, // n0x0ebe c0x0000 (---------------) + I hakusan
+ 0x00200fc4, // n0x0ebf c0x0000 (---------------) + I kaga
+ 0x0034eac6, // n0x0ec0 c0x0000 (---------------) + I kahoku
+ 0x00386988, // n0x0ec1 c0x0000 (---------------) + I kanazawa
+ 0x0028c888, // n0x0ec2 c0x0000 (---------------) + I kawakita
+ 0x0028e9c7, // n0x0ec3 c0x0000 (---------------) + I komatsu
+ 0x00303408, // n0x0ec4 c0x0000 (---------------) + I nakanoto
+ 0x0028a145, // n0x0ec5 c0x0000 (---------------) + I nanao
+ 0x0020e544, // n0x0ec6 c0x0000 (---------------) + I nomi
+ 0x003334c8, // n0x0ec7 c0x0000 (---------------) + I nonoichi
+ 0x0024f5c4, // n0x0ec8 c0x0000 (---------------) + I noto
+ 0x0020af45, // n0x0ec9 c0x0000 (---------------) + I shika
+ 0x002e2e04, // n0x0eca c0x0000 (---------------) + I suzu
+ 0x00229507, // n0x0ecb c0x0000 (---------------) + I tsubata
+ 0x00281647, // n0x0ecc c0x0000 (---------------) + I tsurugi
+ 0x00278508, // n0x0ecd c0x0000 (---------------) + I uchinada
+ 0x0029a706, // n0x0ece c0x0000 (---------------) + I wajima
+ 0x0025cbc5, // n0x0ecf c0x0000 (---------------) + I fudai
+ 0x00272648, // n0x0ed0 c0x0000 (---------------) + I fujisawa
+ 0x00320248, // n0x0ed1 c0x0000 (---------------) + I hanamaki
+ 0x00296309, // n0x0ed2 c0x0000 (---------------) + I hiraizumi
+ 0x0021d386, // n0x0ed3 c0x0000 (---------------) + I hirono
+ 0x00231688, // n0x0ed4 c0x0000 (---------------) + I ichinohe
+ 0x00278c8a, // n0x0ed5 c0x0000 (---------------) + I ichinoseki
+ 0x002eb048, // n0x0ed6 c0x0000 (---------------) + I iwaizumi
+ 0x002d2505, // n0x0ed7 c0x0000 (---------------) + I iwate
+ 0x00222c46, // n0x0ed8 c0x0000 (---------------) + I joboji
+ 0x00285888, // n0x0ed9 c0x0000 (---------------) + I kamaishi
+ 0x002af44a, // n0x0eda c0x0000 (---------------) + I kanegasaki
+ 0x002a0d87, // n0x0edb c0x0000 (---------------) + I karumai
+ 0x0027e585, // n0x0edc c0x0000 (---------------) + I kawai
+ 0x0028b088, // n0x0edd c0x0000 (---------------) + I kitakami
+ 0x002f7c44, // n0x0ede c0x0000 (---------------) + I kuji
+ 0x002a50c6, // n0x0edf c0x0000 (---------------) + I kunohe
+ 0x002b5ec8, // n0x0ee0 c0x0000 (---------------) + I kuzumaki
+ 0x0020e5c6, // n0x0ee1 c0x0000 (---------------) + I miyako
+ 0x002bc248, // n0x0ee2 c0x0000 (---------------) + I mizusawa
+ 0x0021e947, // n0x0ee3 c0x0000 (---------------) + I morioka
+ 0x0020ddc6, // n0x0ee4 c0x0000 (---------------) + I ninohe
+ 0x00383dc4, // n0x0ee5 c0x0000 (---------------) + I noda
+ 0x002d4c07, // n0x0ee6 c0x0000 (---------------) + I ofunato
+ 0x002f2804, // n0x0ee7 c0x0000 (---------------) + I oshu
+ 0x0025c107, // n0x0ee8 c0x0000 (---------------) + I otsuchi
+ 0x0035a0cd, // n0x0ee9 c0x0000 (---------------) + I rikuzentakata
+ 0x0025eec5, // n0x0eea c0x0000 (---------------) + I shiwa
+ 0x002a9b4b, // n0x0eeb c0x0000 (---------------) + I shizukuishi
+ 0x00297d86, // n0x0eec c0x0000 (---------------) + I sumita
+ 0x0024b208, // n0x0eed c0x0000 (---------------) + I tanohata
+ 0x00398284, // n0x0eee c0x0000 (---------------) + I tono
+ 0x0026f246, // n0x0eef c0x0000 (---------------) + I yahaba
+ 0x00274a86, // n0x0ef0 c0x0000 (---------------) + I yamada
+ 0x00268547, // n0x0ef1 c0x0000 (---------------) + I ayagawa
+ 0x0028bf0d, // n0x0ef2 c0x0000 (---------------) + I higashikagawa
+ 0x002bbec7, // n0x0ef3 c0x0000 (---------------) + I kanonji
+ 0x002f8ec8, // n0x0ef4 c0x0000 (---------------) + I kotohira
+ 0x0024a485, // n0x0ef5 c0x0000 (---------------) + I manno
+ 0x0029ef88, // n0x0ef6 c0x0000 (---------------) + I marugame
+ 0x002ba406, // n0x0ef7 c0x0000 (---------------) + I mitoyo
+ 0x0028a1c8, // n0x0ef8 c0x0000 (---------------) + I naoshima
+ 0x00213906, // n0x0ef9 c0x0000 (---------------) + I sanuki
+ 0x00322747, // n0x0efa c0x0000 (---------------) + I tadotsu
+ 0x003231c9, // n0x0efb c0x0000 (---------------) + I takamatsu
+ 0x00398287, // n0x0efc c0x0000 (---------------) + I tonosho
+ 0x00280808, // n0x0efd c0x0000 (---------------) + I uchinomi
+ 0x0026bf85, // n0x0efe c0x0000 (---------------) + I utazu
+ 0x0021a888, // n0x0eff c0x0000 (---------------) + I zentsuji
+ 0x003234c5, // n0x0f00 c0x0000 (---------------) + I akune
+ 0x00245d05, // n0x0f01 c0x0000 (---------------) + I amami
+ 0x0027ff05, // n0x0f02 c0x0000 (---------------) + I hioki
+ 0x00222783, // n0x0f03 c0x0000 (---------------) + I isa
+ 0x00279804, // n0x0f04 c0x0000 (---------------) + I isen
+ 0x0026a785, // n0x0f05 c0x0000 (---------------) + I izumi
+ 0x002c3e09, // n0x0f06 c0x0000 (---------------) + I kagoshima
+ 0x002a2a46, // n0x0f07 c0x0000 (---------------) + I kanoya
+ 0x002c2d08, // n0x0f08 c0x0000 (---------------) + I kawanabe
+ 0x002af645, // n0x0f09 c0x0000 (---------------) + I kinko
+ 0x00329cc7, // n0x0f0a c0x0000 (---------------) + I kouyama
+ 0x00249c0a, // n0x0f0b c0x0000 (---------------) + I makurazaki
+ 0x002b9a49, // n0x0f0c c0x0000 (---------------) + I matsumoto
+ 0x0029ddca, // n0x0f0d c0x0000 (---------------) + I minamitane
+ 0x002c9c48, // n0x0f0e c0x0000 (---------------) + I nakatane
+ 0x0021e10c, // n0x0f0f c0x0000 (---------------) + I nishinoomote
+ 0x0027950d, // n0x0f10 c0x0000 (---------------) + I satsumasendai
+ 0x002e7983, // n0x0f11 c0x0000 (---------------) + I soo
+ 0x002bc148, // n0x0f12 c0x0000 (---------------) + I tarumizu
+ 0x00206845, // n0x0f13 c0x0000 (---------------) + I yusui
+ 0x0030ef86, // n0x0f14 c0x0000 (---------------) + I aikawa
+ 0x0034df86, // n0x0f15 c0x0000 (---------------) + I atsugi
+ 0x00246c05, // n0x0f16 c0x0000 (---------------) + I ayase
+ 0x00283789, // n0x0f17 c0x0000 (---------------) + I chigasaki
+ 0x002a1885, // n0x0f18 c0x0000 (---------------) + I ebina
+ 0x00272648, // n0x0f19 c0x0000 (---------------) + I fujisawa
+ 0x0024f4c6, // n0x0f1a c0x0000 (---------------) + I hadano
+ 0x00328f06, // n0x0f1b c0x0000 (---------------) + I hakone
+ 0x00297509, // n0x0f1c c0x0000 (---------------) + I hiratsuka
+ 0x00381b07, // n0x0f1d c0x0000 (---------------) + I isehara
+ 0x002f4386, // n0x0f1e c0x0000 (---------------) + I kaisei
+ 0x00249b88, // n0x0f1f c0x0000 (---------------) + I kamakura
+ 0x0031a308, // n0x0f20 c0x0000 (---------------) + I kiyokawa
+ 0x0024d447, // n0x0f21 c0x0000 (---------------) + I matsuda
+ 0x003524ce, // n0x0f22 c0x0000 (---------------) + I minamiashigara
+ 0x002ba645, // n0x0f23 c0x0000 (---------------) + I miura
+ 0x00255e45, // n0x0f24 c0x0000 (---------------) + I nakai
+ 0x0020e4c8, // n0x0f25 c0x0000 (---------------) + I ninomiya
+ 0x00207bc7, // n0x0f26 c0x0000 (---------------) + I odawara
+ 0x0022d6c2, // n0x0f27 c0x0000 (---------------) + I oi
+ 0x002b2f04, // n0x0f28 c0x0000 (---------------) + I oiso
+ 0x00362b8a, // n0x0f29 c0x0000 (---------------) + I sagamihara
+ 0x0025c4c8, // n0x0f2a c0x0000 (---------------) + I samukawa
+ 0x00356a06, // n0x0f2b c0x0000 (---------------) + I tsukui
+ 0x0028f108, // n0x0f2c c0x0000 (---------------) + I yamakita
+ 0x0021ec86, // n0x0f2d c0x0000 (---------------) + I yamato
+ 0x00256748, // n0x0f2e c0x0000 (---------------) + I yokosuka
+ 0x002a3f08, // n0x0f2f c0x0000 (---------------) + I yugawara
+ 0x00245cc4, // n0x0f30 c0x0000 (---------------) + I zama
+ 0x00359085, // n0x0f31 c0x0000 (---------------) + I zushi
+ 0x0067e804, // n0x0f32 c0x0001 (---------------) ! I city
+ 0x0067e804, // n0x0f33 c0x0001 (---------------) ! I city
+ 0x0067e804, // n0x0f34 c0x0001 (---------------) ! I city
+ 0x00203103, // n0x0f35 c0x0000 (---------------) + I aki
+ 0x0035b606, // n0x0f36 c0x0000 (---------------) + I geisei
+ 0x00272b06, // n0x0f37 c0x0000 (---------------) + I hidaka
+ 0x0029420c, // n0x0f38 c0x0000 (---------------) + I higashitsuno
+ 0x00205943, // n0x0f39 c0x0000 (---------------) + I ino
+ 0x002b6c86, // n0x0f3a c0x0000 (---------------) + I kagami
+ 0x0020f904, // n0x0f3b c0x0000 (---------------) + I kami
+ 0x002bed08, // n0x0f3c c0x0000 (---------------) + I kitagawa
+ 0x002c8f85, // n0x0f3d c0x0000 (---------------) + I kochi
+ 0x00362c86, // n0x0f3e c0x0000 (---------------) + I mihara
+ 0x002b0508, // n0x0f3f c0x0000 (---------------) + I motoyama
+ 0x002cb286, // n0x0f40 c0x0000 (---------------) + I muroto
+ 0x00207106, // n0x0f41 c0x0000 (---------------) + I nahari
+ 0x00359dc8, // n0x0f42 c0x0000 (---------------) + I nakamura
+ 0x00298007, // n0x0f43 c0x0000 (---------------) + I nankoku
+ 0x00352049, // n0x0f44 c0x0000 (---------------) + I nishitosa
+ 0x002f654a, // n0x0f45 c0x0000 (---------------) + I niyodogawa
+ 0x0024cb44, // n0x0f46 c0x0000 (---------------) + I ochi
+ 0x002416c5, // n0x0f47 c0x0000 (---------------) + I okawa
+ 0x00254ac5, // n0x0f48 c0x0000 (---------------) + I otoyo
+ 0x0021e446, // n0x0f49 c0x0000 (---------------) + I otsuki
+ 0x0024ce06, // n0x0f4a c0x0000 (---------------) + I sakawa
+ 0x0029d206, // n0x0f4b c0x0000 (---------------) + I sukumo
+ 0x002e22c6, // n0x0f4c c0x0000 (---------------) + I susaki
+ 0x00352184, // n0x0f4d c0x0000 (---------------) + I tosa
+ 0x0035218b, // n0x0f4e c0x0000 (---------------) + I tosashimizu
+ 0x00241604, // n0x0f4f c0x0000 (---------------) + I toyo
+ 0x00208c85, // n0x0f50 c0x0000 (---------------) + I tsuno
+ 0x002a2f05, // n0x0f51 c0x0000 (---------------) + I umaji
+ 0x0026ab06, // n0x0f52 c0x0000 (---------------) + I yasuda
+ 0x00202948, // n0x0f53 c0x0000 (---------------) + I yusuhara
+ 0x002793c7, // n0x0f54 c0x0000 (---------------) + I amakusa
+ 0x0030ad44, // n0x0f55 c0x0000 (---------------) + I arao
+ 0x00233543, // n0x0f56 c0x0000 (---------------) + I aso
+ 0x002f7745, // n0x0f57 c0x0000 (---------------) + I choyo
+ 0x00242947, // n0x0f58 c0x0000 (---------------) + I gyokuto
+ 0x0029b289, // n0x0f59 c0x0000 (---------------) + I hitoyoshi
+ 0x002792cb, // n0x0f5a c0x0000 (---------------) + I kamiamakusa
+ 0x0029ee47, // n0x0f5b c0x0000 (---------------) + I kashima
+ 0x00213287, // n0x0f5c c0x0000 (---------------) + I kikuchi
+ 0x002d7704, // n0x0f5d c0x0000 (---------------) + I kosa
+ 0x002b0408, // n0x0f5e c0x0000 (---------------) + I kumamoto
+ 0x00329e07, // n0x0f5f c0x0000 (---------------) + I mashiki
+ 0x0029b4c6, // n0x0f60 c0x0000 (---------------) + I mifune
+ 0x00241e08, // n0x0f61 c0x0000 (---------------) + I minamata
+ 0x0028180b, // n0x0f62 c0x0000 (---------------) + I minamioguni
+ 0x002bb706, // n0x0f63 c0x0000 (---------------) + I nagasu
+ 0x00214789, // n0x0f64 c0x0000 (---------------) + I nishihara
+ 0x00281985, // n0x0f65 c0x0000 (---------------) + I oguni
+ 0x002f6fc3, // n0x0f66 c0x0000 (---------------) + I ozu
+ 0x002b9b06, // n0x0f67 c0x0000 (---------------) + I sumoto
+ 0x0021e848, // n0x0f68 c0x0000 (---------------) + I takamori
+ 0x002139c3, // n0x0f69 c0x0000 (---------------) + I uki
+ 0x00216443, // n0x0f6a c0x0000 (---------------) + I uto
+ 0x00277b46, // n0x0f6b c0x0000 (---------------) + I yamaga
+ 0x0021ec86, // n0x0f6c c0x0000 (---------------) + I yamato
+ 0x0037dc0a, // n0x0f6d c0x0000 (---------------) + I yatsushiro
+ 0x00274205, // n0x0f6e c0x0000 (---------------) + I ayabe
+ 0x002748cb, // n0x0f6f c0x0000 (---------------) + I fukuchiyama
+ 0x00294e0b, // n0x0f70 c0x0000 (---------------) + I higashiyama
+ 0x0022d703, // n0x0f71 c0x0000 (---------------) + I ide
+ 0x0021b783, // n0x0f72 c0x0000 (---------------) + I ine
+ 0x002a74c4, // n0x0f73 c0x0000 (---------------) + I joyo
+ 0x00322b87, // n0x0f74 c0x0000 (---------------) + I kameoka
+ 0x0021e8c4, // n0x0f75 c0x0000 (---------------) + I kamo
+ 0x0020cb44, // n0x0f76 c0x0000 (---------------) + I kita
+ 0x00304804, // n0x0f77 c0x0000 (---------------) + I kizu
+ 0x002eb348, // n0x0f78 c0x0000 (---------------) + I kumiyama
+ 0x003016c8, // n0x0f79 c0x0000 (---------------) + I kyotamba
+ 0x002ffa89, // n0x0f7a c0x0000 (---------------) + I kyotanabe
+ 0x002ef0c8, // n0x0f7b c0x0000 (---------------) + I kyotango
+ 0x002a7dc7, // n0x0f7c c0x0000 (---------------) + I maizuru
+ 0x00236f86, // n0x0f7d c0x0000 (---------------) + I minami
+ 0x002c294f, // n0x0f7e c0x0000 (---------------) + I minamiyamashiro
+ 0x002ba786, // n0x0f7f c0x0000 (---------------) + I miyazu
+ 0x002c8f04, // n0x0f80 c0x0000 (---------------) + I muko
+ 0x0030150a, // n0x0f81 c0x0000 (---------------) + I nagaokakyo
+ 0x00242847, // n0x0f82 c0x0000 (---------------) + I nakagyo
+ 0x0020d286, // n0x0f83 c0x0000 (---------------) + I nantan
+ 0x00286089, // n0x0f84 c0x0000 (---------------) + I oyamazaki
+ 0x002ffa05, // n0x0f85 c0x0000 (---------------) + I sakyo
+ 0x002134c5, // n0x0f86 c0x0000 (---------------) + I seika
+ 0x002ffb46, // n0x0f87 c0x0000 (---------------) + I tanabe
+ 0x0021a9c3, // n0x0f88 c0x0000 (---------------) + I uji
+ 0x002f7c89, // n0x0f89 c0x0000 (---------------) + I ujitawara
+ 0x0021b0c6, // n0x0f8a c0x0000 (---------------) + I wazuka
+ 0x00322dc9, // n0x0f8b c0x0000 (---------------) + I yamashina
+ 0x0038a646, // n0x0f8c c0x0000 (---------------) + I yawata
+ 0x002b9085, // n0x0f8d c0x0000 (---------------) + I asahi
+ 0x00222905, // n0x0f8e c0x0000 (---------------) + I inabe
+ 0x00204403, // n0x0f8f c0x0000 (---------------) + I ise
+ 0x00322cc8, // n0x0f90 c0x0000 (---------------) + I kameyama
+ 0x00396247, // n0x0f91 c0x0000 (---------------) + I kawagoe
+ 0x002ead04, // n0x0f92 c0x0000 (---------------) + I kiho
+ 0x0021e548, // n0x0f93 c0x0000 (---------------) + I kisosaki
+ 0x0028d584, // n0x0f94 c0x0000 (---------------) + I kiwa
+ 0x0038e086, // n0x0f95 c0x0000 (---------------) + I komono
+ 0x0027eb46, // n0x0f96 c0x0000 (---------------) + I kumano
+ 0x0023db46, // n0x0f97 c0x0000 (---------------) + I kuwana
+ 0x002c52c9, // n0x0f98 c0x0000 (---------------) + I matsusaka
+ 0x002b4b45, // n0x0f99 c0x0000 (---------------) + I meiwa
+ 0x0028d806, // n0x0f9a c0x0000 (---------------) + I mihama
+ 0x00253d89, // n0x0f9b c0x0000 (---------------) + I minamiise
+ 0x002b94c6, // n0x0f9c c0x0000 (---------------) + I misugi
+ 0x002c2a46, // n0x0f9d c0x0000 (---------------) + I miyama
+ 0x0037abc6, // n0x0f9e c0x0000 (---------------) + I nabari
+ 0x00209c05, // n0x0f9f c0x0000 (---------------) + I shima
+ 0x002e2e06, // n0x0fa0 c0x0000 (---------------) + I suzuka
+ 0x00322744, // n0x0fa1 c0x0000 (---------------) + I tado
+ 0x00270145, // n0x0fa2 c0x0000 (---------------) + I taiki
+ 0x002301c4, // n0x0fa3 c0x0000 (---------------) + I taki
+ 0x00304706, // n0x0fa4 c0x0000 (---------------) + I tamaki
+ 0x00391284, // n0x0fa5 c0x0000 (---------------) + I toba
+ 0x00208c83, // n0x0fa6 c0x0000 (---------------) + I tsu
+ 0x0027e245, // n0x0fa7 c0x0000 (---------------) + I udono
+ 0x002361c8, // n0x0fa8 c0x0000 (---------------) + I ureshino
+ 0x0021a287, // n0x0fa9 c0x0000 (---------------) + I watarai
+ 0x002adcc9, // n0x0faa c0x0000 (---------------) + I yokkaichi
+ 0x0027e488, // n0x0fab c0x0000 (---------------) + I furukawa
+ 0x0028e211, // n0x0fac c0x0000 (---------------) + I higashimatsushima
+ 0x0021308a, // n0x0fad c0x0000 (---------------) + I ishinomaki
+ 0x00230007, // n0x0fae c0x0000 (---------------) + I iwanuma
+ 0x002e42c6, // n0x0faf c0x0000 (---------------) + I kakuda
+ 0x0020f904, // n0x0fb0 c0x0000 (---------------) + I kami
+ 0x002b3b88, // n0x0fb1 c0x0000 (---------------) + I kawasaki
+ 0x0020bc09, // n0x0fb2 c0x0000 (---------------) + I kesennuma
+ 0x002546c8, // n0x0fb3 c0x0000 (---------------) + I marumori
+ 0x0028e3ca, // n0x0fb4 c0x0000 (---------------) + I matsushima
+ 0x0029d40d, // n0x0fb5 c0x0000 (---------------) + I minamisanriku
+ 0x002964c6, // n0x0fb6 c0x0000 (---------------) + I misato
+ 0x00359ec6, // n0x0fb7 c0x0000 (---------------) + I murata
+ 0x002d4cc6, // n0x0fb8 c0x0000 (---------------) + I natori
+ 0x00380187, // n0x0fb9 c0x0000 (---------------) + I ogawara
+ 0x002967c5, // n0x0fba c0x0000 (---------------) + I ohira
+ 0x0034c5c7, // n0x0fbb c0x0000 (---------------) + I onagawa
+ 0x0021e605, // n0x0fbc c0x0000 (---------------) + I osaki
+ 0x00291204, // n0x0fbd c0x0000 (---------------) + I rifu
+ 0x0029f686, // n0x0fbe c0x0000 (---------------) + I semine
+ 0x00300147, // n0x0fbf c0x0000 (---------------) + I shibata
+ 0x002f798d, // n0x0fc0 c0x0000 (---------------) + I shichikashuku
+ 0x002857c7, // n0x0fc1 c0x0000 (---------------) + I shikama
+ 0x00372ac8, // n0x0fc2 c0x0000 (---------------) + I shiogama
+ 0x00272949, // n0x0fc3 c0x0000 (---------------) + I shiroishi
+ 0x00222b46, // n0x0fc4 c0x0000 (---------------) + I tagajo
+ 0x00235285, // n0x0fc5 c0x0000 (---------------) + I taiwa
+ 0x00215144, // n0x0fc6 c0x0000 (---------------) + I tome
+ 0x0025d286, // n0x0fc7 c0x0000 (---------------) + I tomiya
+ 0x0034c706, // n0x0fc8 c0x0000 (---------------) + I wakuya
+ 0x0025c646, // n0x0fc9 c0x0000 (---------------) + I watari
+ 0x00292048, // n0x0fca c0x0000 (---------------) + I yamamoto
+ 0x00209ac3, // n0x0fcb c0x0000 (---------------) + I zao
+ 0x0020ea43, // n0x0fcc c0x0000 (---------------) + I aya
+ 0x00309905, // n0x0fcd c0x0000 (---------------) + I ebino
+ 0x00237fc6, // n0x0fce c0x0000 (---------------) + I gokase
+ 0x002a3ec5, // n0x0fcf c0x0000 (---------------) + I hyuga
+ 0x0022c688, // n0x0fd0 c0x0000 (---------------) + I kadogawa
+ 0x00293bca, // n0x0fd1 c0x0000 (---------------) + I kawaminami
+ 0x002cd784, // n0x0fd2 c0x0000 (---------------) + I kijo
+ 0x002bed08, // n0x0fd3 c0x0000 (---------------) + I kitagawa
+ 0x0028cb08, // n0x0fd4 c0x0000 (---------------) + I kitakata
+ 0x0026a947, // n0x0fd5 c0x0000 (---------------) + I kitaura
+ 0x002af709, // n0x0fd6 c0x0000 (---------------) + I kobayashi
+ 0x002b0108, // n0x0fd7 c0x0000 (---------------) + I kunitomi
+ 0x0027f287, // n0x0fd8 c0x0000 (---------------) + I kushima
+ 0x0028b986, // n0x0fd9 c0x0000 (---------------) + I mimata
+ 0x0020e5ca, // n0x0fda c0x0000 (---------------) + I miyakonojo
+ 0x0025d308, // n0x0fdb c0x0000 (---------------) + I miyazaki
+ 0x002ae6c9, // n0x0fdc c0x0000 (---------------) + I morotsuka
+ 0x0027ac08, // n0x0fdd c0x0000 (---------------) + I nichinan
+ 0x0021bd49, // n0x0fde c0x0000 (---------------) + I nishimera
+ 0x00348e47, // n0x0fdf c0x0000 (---------------) + I nobeoka
+ 0x00340745, // n0x0fe0 c0x0000 (---------------) + I saito
+ 0x00298ec6, // n0x0fe1 c0x0000 (---------------) + I shiiba
+ 0x002890c8, // n0x0fe2 c0x0000 (---------------) + I shintomi
+ 0x0024b388, // n0x0fe3 c0x0000 (---------------) + I takaharu
+ 0x002155c8, // n0x0fe4 c0x0000 (---------------) + I takanabe
+ 0x00218288, // n0x0fe5 c0x0000 (---------------) + I takazaki
+ 0x00208c85, // n0x0fe6 c0x0000 (---------------) + I tsuno
+ 0x00205884, // n0x0fe7 c0x0000 (---------------) + I achi
+ 0x00395f48, // n0x0fe8 c0x0000 (---------------) + I agematsu
+ 0x00200b44, // n0x0fe9 c0x0000 (---------------) + I anan
+ 0x00390ec4, // n0x0fea c0x0000 (---------------) + I aoki
+ 0x002b9085, // n0x0feb c0x0000 (---------------) + I asahi
+ 0x002882c7, // n0x0fec c0x0000 (---------------) + I azumino
+ 0x0039de89, // n0x0fed c0x0000 (---------------) + I chikuhoku
+ 0x00268347, // n0x0fee c0x0000 (---------------) + I chikuma
+ 0x002058c5, // n0x0fef c0x0000 (---------------) + I chino
+ 0x00270c06, // n0x0ff0 c0x0000 (---------------) + I fujimi
+ 0x00334346, // n0x0ff1 c0x0000 (---------------) + I hakuba
+ 0x00202a44, // n0x0ff2 c0x0000 (---------------) + I hara
+ 0x00297846, // n0x0ff3 c0x0000 (---------------) + I hiraya
+ 0x0025ca04, // n0x0ff4 c0x0000 (---------------) + I iida
+ 0x002545c6, // n0x0ff5 c0x0000 (---------------) + I iijima
+ 0x00300486, // n0x0ff6 c0x0000 (---------------) + I iiyama
+ 0x00217506, // n0x0ff7 c0x0000 (---------------) + I iizuna
+ 0x00202b85, // n0x0ff8 c0x0000 (---------------) + I ikeda
+ 0x0022c547, // n0x0ff9 c0x0000 (---------------) + I ikusaka
+ 0x002020c3, // n0x0ffa c0x0000 (---------------) + I ina
+ 0x00224dc9, // n0x0ffb c0x0000 (---------------) + I karuizawa
+ 0x002f4088, // n0x0ffc c0x0000 (---------------) + I kawakami
+ 0x0021e544, // n0x0ffd c0x0000 (---------------) + I kiso
+ 0x0027f10d, // n0x0ffe c0x0000 (---------------) + I kisofukushima
+ 0x0028c988, // n0x0fff c0x0000 (---------------) + I kitaaiki
+ 0x002852c8, // n0x1000 c0x0000 (---------------) + I komagane
+ 0x002ae646, // n0x1001 c0x0000 (---------------) + I komoro
+ 0x003232c9, // n0x1002 c0x0000 (---------------) + I matsukawa
+ 0x002b9a49, // n0x1003 c0x0000 (---------------) + I matsumoto
+ 0x0025be45, // n0x1004 c0x0000 (---------------) + I miasa
+ 0x00293cca, // n0x1005 c0x0000 (---------------) + I minamiaiki
+ 0x0026710a, // n0x1006 c0x0000 (---------------) + I minamimaki
+ 0x002769cc, // n0x1007 c0x0000 (---------------) + I minamiminowa
+ 0x00276b46, // n0x1008 c0x0000 (---------------) + I minowa
+ 0x002714c6, // n0x1009 c0x0000 (---------------) + I miyada
+ 0x002bb006, // n0x100a c0x0000 (---------------) + I miyota
+ 0x0024ff49, // n0x100b c0x0000 (---------------) + I mochizuki
+ 0x0030f1c6, // n0x100c c0x0000 (---------------) + I nagano
+ 0x00296ac6, // n0x100d c0x0000 (---------------) + I nagawa
+ 0x002a1946, // n0x100e c0x0000 (---------------) + I nagiso
+ 0x002a6788, // n0x100f c0x0000 (---------------) + I nakagawa
+ 0x00303406, // n0x1010 c0x0000 (---------------) + I nakano
+ 0x002c560b, // n0x1011 c0x0000 (---------------) + I nozawaonsen
+ 0x00288445, // n0x1012 c0x0000 (---------------) + I obuse
+ 0x00227945, // n0x1013 c0x0000 (---------------) + I ogawa
+ 0x00271745, // n0x1014 c0x0000 (---------------) + I okaya
+ 0x00389cc6, // n0x1015 c0x0000 (---------------) + I omachi
+ 0x0020e583, // n0x1016 c0x0000 (---------------) + I omi
+ 0x0023dac6, // n0x1017 c0x0000 (---------------) + I ookuwa
+ 0x00285747, // n0x1018 c0x0000 (---------------) + I ooshika
+ 0x002b3a45, // n0x1019 c0x0000 (---------------) + I otaki
+ 0x00254bc5, // n0x101a c0x0000 (---------------) + I otari
+ 0x002dc785, // n0x101b c0x0000 (---------------) + I sakae
+ 0x002f5506, // n0x101c c0x0000 (---------------) + I sakaki
+ 0x0025bf04, // n0x101d c0x0000 (---------------) + I saku
+ 0x00368506, // n0x101e c0x0000 (---------------) + I sakuho
+ 0x00265109, // n0x101f c0x0000 (---------------) + I shimosuwa
+ 0x00389b4c, // n0x1020 c0x0000 (---------------) + I shinanomachi
+ 0x00290f48, // n0x1021 c0x0000 (---------------) + I shiojiri
+ 0x0020b584, // n0x1022 c0x0000 (---------------) + I suwa
+ 0x002e2a46, // n0x1023 c0x0000 (---------------) + I suzaka
+ 0x00297e86, // n0x1024 c0x0000 (---------------) + I takagi
+ 0x0021e848, // n0x1025 c0x0000 (---------------) + I takamori
+ 0x002b98c8, // n0x1026 c0x0000 (---------------) + I takayama
+ 0x00389a49, // n0x1027 c0x0000 (---------------) + I tateshina
+ 0x00208c07, // n0x1028 c0x0000 (---------------) + I tatsuno
+ 0x00366a09, // n0x1029 c0x0000 (---------------) + I togakushi
+ 0x00269086, // n0x102a c0x0000 (---------------) + I togura
+ 0x0022b304, // n0x102b c0x0000 (---------------) + I tomi
+ 0x0020b204, // n0x102c c0x0000 (---------------) + I ueda
+ 0x00256304, // n0x102d c0x0000 (---------------) + I wada
+ 0x00277b48, // n0x102e c0x0000 (---------------) + I yamagata
+ 0x0039dcca, // n0x102f c0x0000 (---------------) + I yamanouchi
+ 0x00348746, // n0x1030 c0x0000 (---------------) + I yasaka
+ 0x0034dd87, // n0x1031 c0x0000 (---------------) + I yasuoka
+ 0x00330fc7, // n0x1032 c0x0000 (---------------) + I chijiwa
+ 0x002a55c5, // n0x1033 c0x0000 (---------------) + I futsu
+ 0x0027f844, // n0x1034 c0x0000 (---------------) + I goto
+ 0x00284886, // n0x1035 c0x0000 (---------------) + I hasami
+ 0x002f8fc6, // n0x1036 c0x0000 (---------------) + I hirado
+ 0x0021eb43, // n0x1037 c0x0000 (---------------) + I iki
+ 0x002f3ec7, // n0x1038 c0x0000 (---------------) + I isahaya
+ 0x0030a408, // n0x1039 c0x0000 (---------------) + I kawatana
+ 0x0025bf8a, // n0x103a c0x0000 (---------------) + I kuchinotsu
+ 0x002cbd08, // n0x103b c0x0000 (---------------) + I matsuura
+ 0x002cd608, // n0x103c c0x0000 (---------------) + I nagasaki
+ 0x003912c5, // n0x103d c0x0000 (---------------) + I obama
+ 0x0024a705, // n0x103e c0x0000 (---------------) + I omura
+ 0x002a8f05, // n0x103f c0x0000 (---------------) + I oseto
+ 0x002a5986, // n0x1040 c0x0000 (---------------) + I saikai
+ 0x002d5086, // n0x1041 c0x0000 (---------------) + I sasebo
+ 0x00210945, // n0x1042 c0x0000 (---------------) + I seihi
+ 0x002bd0c9, // n0x1043 c0x0000 (---------------) + I shimabara
+ 0x0027f64c, // n0x1044 c0x0000 (---------------) + I shinkamigoto
+ 0x002a8fc7, // n0x1045 c0x0000 (---------------) + I togitsu
+ 0x0028e448, // n0x1046 c0x0000 (---------------) + I tsushima
+ 0x00284ec5, // n0x1047 c0x0000 (---------------) + I unzen
+ 0x0067e804, // n0x1048 c0x0001 (---------------) ! I city
+ 0x00347c84, // n0x1049 c0x0000 (---------------) + I ando
+ 0x002a9e84, // n0x104a c0x0000 (---------------) + I gose
+ 0x00205a06, // n0x104b c0x0000 (---------------) + I heguri
+ 0x0029598e, // n0x104c c0x0000 (---------------) + I higashiyoshino
+ 0x00213547, // n0x104d c0x0000 (---------------) + I ikaruga
+ 0x00285285, // n0x104e c0x0000 (---------------) + I ikoma
+ 0x0021ea8c, // n0x104f c0x0000 (---------------) + I kamikitayama
+ 0x0028d447, // n0x1050 c0x0000 (---------------) + I kanmaki
+ 0x003000c7, // n0x1051 c0x0000 (---------------) + I kashiba
+ 0x00308a09, // n0x1052 c0x0000 (---------------) + I kashihara
+ 0x00219449, // n0x1053 c0x0000 (---------------) + I katsuragi
+ 0x0027e585, // n0x1054 c0x0000 (---------------) + I kawai
+ 0x002f4088, // n0x1055 c0x0000 (---------------) + I kawakami
+ 0x002e33c9, // n0x1056 c0x0000 (---------------) + I kawanishi
+ 0x002d27c5, // n0x1057 c0x0000 (---------------) + I koryo
+ 0x002b3988, // n0x1058 c0x0000 (---------------) + I kurotaki
+ 0x00260b86, // n0x1059 c0x0000 (---------------) + I mitsue
+ 0x002c3ac6, // n0x105a c0x0000 (---------------) + I miyake
+ 0x002b8c84, // n0x105b c0x0000 (---------------) + I nara
+ 0x00380688, // n0x105c c0x0000 (---------------) + I nosegawa
+ 0x00222d03, // n0x105d c0x0000 (---------------) + I oji
+ 0x0037e4c4, // n0x105e c0x0000 (---------------) + I ouda
+ 0x002f77c5, // n0x105f c0x0000 (---------------) + I oyodo
+ 0x002fe347, // n0x1060 c0x0000 (---------------) + I sakurai
+ 0x00208445, // n0x1061 c0x0000 (---------------) + I sango
+ 0x00278b49, // n0x1062 c0x0000 (---------------) + I shimoichi
+ 0x0025fc0d, // n0x1063 c0x0000 (---------------) + I shimokitayama
+ 0x0027d4c6, // n0x1064 c0x0000 (---------------) + I shinjo
+ 0x00233584, // n0x1065 c0x0000 (---------------) + I soni
+ 0x0028ba88, // n0x1066 c0x0000 (---------------) + I takatori
+ 0x00270e4a, // n0x1067 c0x0000 (---------------) + I tawaramoto
+ 0x002160c7, // n0x1068 c0x0000 (---------------) + I tenkawa
+ 0x0035a785, // n0x1069 c0x0000 (---------------) + I tenri
+ 0x0024d543, // n0x106a c0x0000 (---------------) + I uda
+ 0x00294fce, // n0x106b c0x0000 (---------------) + I yamatokoriyama
+ 0x0021ec8c, // n0x106c c0x0000 (---------------) + I yamatotakada
+ 0x002e7d87, // n0x106d c0x0000 (---------------) + I yamazoe
+ 0x00295b47, // n0x106e c0x0000 (---------------) + I yoshino
+ 0x00201003, // n0x106f c0x0000 (---------------) + I aga
+ 0x0030f205, // n0x1070 c0x0000 (---------------) + I agano
+ 0x002a9e85, // n0x1071 c0x0000 (---------------) + I gosen
+ 0x0028f4c8, // n0x1072 c0x0000 (---------------) + I itoigawa
+ 0x0028aec9, // n0x1073 c0x0000 (---------------) + I izumozaki
+ 0x0020b486, // n0x1074 c0x0000 (---------------) + I joetsu
+ 0x0021e8c4, // n0x1075 c0x0000 (---------------) + I kamo
+ 0x0022ff46, // n0x1076 c0x0000 (---------------) + I kariwa
+ 0x0031a0cb, // n0x1077 c0x0000 (---------------) + I kashiwazaki
+ 0x002ab94c, // n0x1078 c0x0000 (---------------) + I minamiuonuma
+ 0x00229dc7, // n0x1079 c0x0000 (---------------) + I mitsuke
+ 0x002c8c45, // n0x107a c0x0000 (---------------) + I muika
+ 0x00371b88, // n0x107b c0x0000 (---------------) + I murakami
+ 0x0024d205, // n0x107c c0x0000 (---------------) + I myoko
+ 0x00301507, // n0x107d c0x0000 (---------------) + I nagaoka
+ 0x0036b607, // n0x107e c0x0000 (---------------) + I niigata
+ 0x00243605, // n0x107f c0x0000 (---------------) + I ojiya
+ 0x0020e583, // n0x1080 c0x0000 (---------------) + I omi
+ 0x0035da84, // n0x1081 c0x0000 (---------------) + I sado
+ 0x0020a085, // n0x1082 c0x0000 (---------------) + I sanjo
+ 0x002f6205, // n0x1083 c0x0000 (---------------) + I seiro
+ 0x002f6206, // n0x1084 c0x0000 (---------------) + I seirou
+ 0x00262888, // n0x1085 c0x0000 (---------------) + I sekikawa
+ 0x00300147, // n0x1086 c0x0000 (---------------) + I shibata
+ 0x0034e286, // n0x1087 c0x0000 (---------------) + I tagami
+ 0x0030ee86, // n0x1088 c0x0000 (---------------) + I tainai
+ 0x0027fe46, // n0x1089 c0x0000 (---------------) + I tochio
+ 0x00287c09, // n0x108a c0x0000 (---------------) + I tokamachi
+ 0x00378b87, // n0x108b c0x0000 (---------------) + I tsubame
+ 0x0020b306, // n0x108c c0x0000 (---------------) + I tsunan
+ 0x002abac6, // n0x108d c0x0000 (---------------) + I uonuma
+ 0x002436c6, // n0x108e c0x0000 (---------------) + I yahiko
+ 0x0029ed05, // n0x108f c0x0000 (---------------) + I yoita
+ 0x00214e06, // n0x1090 c0x0000 (---------------) + I yuzawa
+ 0x0037f305, // n0x1091 c0x0000 (---------------) + I beppu
+ 0x002c3708, // n0x1092 c0x0000 (---------------) + I bungoono
+ 0x002873cb, // n0x1093 c0x0000 (---------------) + I bungotakada
+ 0x00284686, // n0x1094 c0x0000 (---------------) + I hasama
+ 0x00331004, // n0x1095 c0x0000 (---------------) + I hiji
+ 0x002af209, // n0x1096 c0x0000 (---------------) + I himeshima
+ 0x00299f44, // n0x1097 c0x0000 (---------------) + I hita
+ 0x00260b08, // n0x1098 c0x0000 (---------------) + I kamitsue
+ 0x00334507, // n0x1099 c0x0000 (---------------) + I kokonoe
+ 0x0027a304, // n0x109a c0x0000 (---------------) + I kuju
+ 0x002aeb88, // n0x109b c0x0000 (---------------) + I kunisaki
+ 0x002b5004, // n0x109c c0x0000 (---------------) + I kusu
+ 0x0029ed44, // n0x109d c0x0000 (---------------) + I oita
+ 0x0027f045, // n0x109e c0x0000 (---------------) + I saiki
+ 0x002d3b06, // n0x109f c0x0000 (---------------) + I taketa
+ 0x002eb287, // n0x10a0 c0x0000 (---------------) + I tsukumi
+ 0x00204783, // n0x10a1 c0x0000 (---------------) + I usa
+ 0x00294a85, // n0x10a2 c0x0000 (---------------) + I usuki
+ 0x002b7284, // n0x10a3 c0x0000 (---------------) + I yufu
+ 0x00255e86, // n0x10a4 c0x0000 (---------------) + I akaiwa
+ 0x0025bec8, // n0x10a5 c0x0000 (---------------) + I asakuchi
+ 0x0030a145, // n0x10a6 c0x0000 (---------------) + I bizen
+ 0x00287089, // n0x10a7 c0x0000 (---------------) + I hayashima
+ 0x002bebc5, // n0x10a8 c0x0000 (---------------) + I ibara
+ 0x002b6c88, // n0x10a9 c0x0000 (---------------) + I kagamino
+ 0x002fec47, // n0x10aa c0x0000 (---------------) + I kasaoka
+ 0x0037b8c8, // n0x10ab c0x0000 (---------------) + I kibichuo
+ 0x002adb07, // n0x10ac c0x0000 (---------------) + I kumenan
+ 0x00357a89, // n0x10ad c0x0000 (---------------) + I kurashiki
+ 0x0035a506, // n0x10ae c0x0000 (---------------) + I maniwa
+ 0x00318986, // n0x10af c0x0000 (---------------) + I misaki
+ 0x00261984, // n0x10b0 c0x0000 (---------------) + I nagi
+ 0x0028b8c5, // n0x10b1 c0x0000 (---------------) + I niimi
+ 0x002e994c, // n0x10b2 c0x0000 (---------------) + I nishiawakura
+ 0x00271747, // n0x10b3 c0x0000 (---------------) + I okayama
+ 0x00271e07, // n0x10b4 c0x0000 (---------------) + I satosho
+ 0x00330e88, // n0x10b5 c0x0000 (---------------) + I setouchi
+ 0x0027d4c6, // n0x10b6 c0x0000 (---------------) + I shinjo
+ 0x00296704, // n0x10b7 c0x0000 (---------------) + I shoo
+ 0x00317984, // n0x10b8 c0x0000 (---------------) + I soja
+ 0x00277cc9, // n0x10b9 c0x0000 (---------------) + I takahashi
+ 0x002bb106, // n0x10ba c0x0000 (---------------) + I tamano
+ 0x0020d747, // n0x10bb c0x0000 (---------------) + I tsuyama
+ 0x0027cc04, // n0x10bc c0x0000 (---------------) + I wake
+ 0x002a2b46, // n0x10bd c0x0000 (---------------) + I yakage
+ 0x00263f85, // n0x10be c0x0000 (---------------) + I aguni
+ 0x0029a247, // n0x10bf c0x0000 (---------------) + I ginowan
+ 0x002c5586, // n0x10c0 c0x0000 (---------------) + I ginoza
+ 0x002460c9, // n0x10c1 c0x0000 (---------------) + I gushikami
+ 0x00276807, // n0x10c2 c0x0000 (---------------) + I haebaru
+ 0x00260407, // n0x10c3 c0x0000 (---------------) + I higashi
+ 0x00297386, // n0x10c4 c0x0000 (---------------) + I hirara
+ 0x0022c005, // n0x10c5 c0x0000 (---------------) + I iheya
+ 0x00275fc8, // n0x10c6 c0x0000 (---------------) + I ishigaki
+ 0x0021af48, // n0x10c7 c0x0000 (---------------) + I ishikawa
+ 0x00237186, // n0x10c8 c0x0000 (---------------) + I itoman
+ 0x0030a185, // n0x10c9 c0x0000 (---------------) + I izena
+ 0x002bdd46, // n0x10ca c0x0000 (---------------) + I kadena
+ 0x00214a83, // n0x10cb c0x0000 (---------------) + I kin
+ 0x0028f349, // n0x10cc c0x0000 (---------------) + I kitadaito
+ 0x0029cf8e, // n0x10cd c0x0000 (---------------) + I kitanakagusuku
+ 0x002abfc8, // n0x10ce c0x0000 (---------------) + I kumejima
+ 0x0028d688, // n0x10cf c0x0000 (---------------) + I kunigami
+ 0x00236f8b, // n0x10d0 c0x0000 (---------------) + I minamidaito
+ 0x002872c6, // n0x10d1 c0x0000 (---------------) + I motobu
+ 0x0022d884, // n0x10d2 c0x0000 (---------------) + I nago
+ 0x00207104, // n0x10d3 c0x0000 (---------------) + I naha
+ 0x0029d08a, // n0x10d4 c0x0000 (---------------) + I nakagusuku
+ 0x00216787, // n0x10d5 c0x0000 (---------------) + I nakijin
+ 0x0020b3c5, // n0x10d6 c0x0000 (---------------) + I nanjo
+ 0x00214789, // n0x10d7 c0x0000 (---------------) + I nishihara
+ 0x002b2b85, // n0x10d8 c0x0000 (---------------) + I ogimi
+ 0x00390f07, // n0x10d9 c0x0000 (---------------) + I okinawa
+ 0x002f8604, // n0x10da c0x0000 (---------------) + I onna
+ 0x0039da87, // n0x10db c0x0000 (---------------) + I shimoji
+ 0x002eedc8, // n0x10dc c0x0000 (---------------) + I taketomi
+ 0x002a8a46, // n0x10dd c0x0000 (---------------) + I tarama
+ 0x002f29c9, // n0x10de c0x0000 (---------------) + I tokashiki
+ 0x002b020a, // n0x10df c0x0000 (---------------) + I tomigusuku
+ 0x00216706, // n0x10e0 c0x0000 (---------------) + I tonaki
+ 0x0028c4c6, // n0x10e1 c0x0000 (---------------) + I urasoe
+ 0x002a2e85, // n0x10e2 c0x0000 (---------------) + I uruma
+ 0x003704c5, // n0x10e3 c0x0000 (---------------) + I yaese
+ 0x00321bc7, // n0x10e4 c0x0000 (---------------) + I yomitan
+ 0x00322048, // n0x10e5 c0x0000 (---------------) + I yonabaru
+ 0x00263ec8, // n0x10e6 c0x0000 (---------------) + I yonaguni
+ 0x00245cc6, // n0x10e7 c0x0000 (---------------) + I zamami
+ 0x00222985, // n0x10e8 c0x0000 (---------------) + I abeno
+ 0x0024cb8e, // n0x10e9 c0x0000 (---------------) + I chihayaakasaka
+ 0x00359404, // n0x10ea c0x0000 (---------------) + I chuo
+ 0x00237105, // n0x10eb c0x0000 (---------------) + I daito
+ 0x00270589, // n0x10ec c0x0000 (---------------) + I fujiidera
+ 0x002430c8, // n0x10ed c0x0000 (---------------) + I habikino
+ 0x00390386, // n0x10ee c0x0000 (---------------) + I hannan
+ 0x00291ccc, // n0x10ef c0x0000 (---------------) + I higashiosaka
+ 0x002937d0, // n0x10f0 c0x0000 (---------------) + I higashisumiyoshi
+ 0x002955cf, // n0x10f1 c0x0000 (---------------) + I higashiyodogawa
+ 0x00296808, // n0x10f2 c0x0000 (---------------) + I hirakata
+ 0x002bebc7, // n0x10f3 c0x0000 (---------------) + I ibaraki
+ 0x00202b85, // n0x10f4 c0x0000 (---------------) + I ikeda
+ 0x0026a785, // n0x10f5 c0x0000 (---------------) + I izumi
+ 0x002eb109, // n0x10f6 c0x0000 (---------------) + I izumiotsu
+ 0x0028b289, // n0x10f7 c0x0000 (---------------) + I izumisano
+ 0x0023a606, // n0x10f8 c0x0000 (---------------) + I kadoma
+ 0x002f1487, // n0x10f9 c0x0000 (---------------) + I kaizuka
+ 0x00200b05, // n0x10fa c0x0000 (---------------) + I kanan
+ 0x00310789, // n0x10fb c0x0000 (---------------) + I kashiwara
+ 0x0030bb86, // n0x10fc c0x0000 (---------------) + I katano
+ 0x0030f00d, // n0x10fd c0x0000 (---------------) + I kawachinagano
+ 0x00278009, // n0x10fe c0x0000 (---------------) + I kishiwada
+ 0x0020cb44, // n0x10ff c0x0000 (---------------) + I kita
+ 0x002abd48, // n0x1100 c0x0000 (---------------) + I kumatori
+ 0x00396009, // n0x1101 c0x0000 (---------------) + I matsubara
+ 0x00348906, // n0x1102 c0x0000 (---------------) + I minato
+ 0x00270d05, // n0x1103 c0x0000 (---------------) + I minoh
+ 0x00318986, // n0x1104 c0x0000 (---------------) + I misaki
+ 0x0030ae49, // n0x1105 c0x0000 (---------------) + I moriguchi
+ 0x00378788, // n0x1106 c0x0000 (---------------) + I neyagawa
+ 0x002123c5, // n0x1107 c0x0000 (---------------) + I nishi
+ 0x00262804, // n0x1108 c0x0000 (---------------) + I nose
+ 0x00291e8b, // n0x1109 c0x0000 (---------------) + I osakasayama
+ 0x003487c5, // n0x110a c0x0000 (---------------) + I sakai
+ 0x00291fc6, // n0x110b c0x0000 (---------------) + I sayama
+ 0x00279846, // n0x110c c0x0000 (---------------) + I sennan
+ 0x002465c6, // n0x110d c0x0000 (---------------) + I settsu
+ 0x002fe74b, // n0x110e c0x0000 (---------------) + I shijonawate
+ 0x00287189, // n0x110f c0x0000 (---------------) + I shimamoto
+ 0x00210c85, // n0x1110 c0x0000 (---------------) + I suita
+ 0x0037b687, // n0x1111 c0x0000 (---------------) + I tadaoka
+ 0x00213006, // n0x1112 c0x0000 (---------------) + I taishi
+ 0x00359fc6, // n0x1113 c0x0000 (---------------) + I tajiri
+ 0x00278a08, // n0x1114 c0x0000 (---------------) + I takaishi
+ 0x002d3c09, // n0x1115 c0x0000 (---------------) + I takatsuki
+ 0x0037288c, // n0x1116 c0x0000 (---------------) + I tondabayashi
+ 0x00242748, // n0x1117 c0x0000 (---------------) + I toyonaka
+ 0x00249546, // n0x1118 c0x0000 (---------------) + I toyono
+ 0x00340343, // n0x1119 c0x0000 (---------------) + I yao
+ 0x00308506, // n0x111a c0x0000 (---------------) + I ariake
+ 0x0026a445, // n0x111b c0x0000 (---------------) + I arita
+ 0x00274c08, // n0x111c c0x0000 (---------------) + I fukudomi
+ 0x00222386, // n0x111d c0x0000 (---------------) + I genkai
+ 0x0029a488, // n0x111e c0x0000 (---------------) + I hamatama
+ 0x0023d705, // n0x111f c0x0000 (---------------) + I hizen
+ 0x00273845, // n0x1120 c0x0000 (---------------) + I imari
+ 0x0028ce88, // n0x1121 c0x0000 (---------------) + I kamimine
+ 0x002e2b47, // n0x1122 c0x0000 (---------------) + I kanzaki
+ 0x0034dec7, // n0x1123 c0x0000 (---------------) + I karatsu
+ 0x0029ee47, // n0x1124 c0x0000 (---------------) + I kashima
+ 0x0021e6c8, // n0x1125 c0x0000 (---------------) + I kitagata
+ 0x00286248, // n0x1126 c0x0000 (---------------) + I kitahata
+ 0x00238ec6, // n0x1127 c0x0000 (---------------) + I kiyama
+ 0x00304547, // n0x1128 c0x0000 (---------------) + I kouhoku
+ 0x002a4bc7, // n0x1129 c0x0000 (---------------) + I kyuragi
+ 0x0026a30a, // n0x112a c0x0000 (---------------) + I nishiarita
+ 0x00225d03, // n0x112b c0x0000 (---------------) + I ogi
+ 0x00389cc6, // n0x112c c0x0000 (---------------) + I omachi
+ 0x0020b6c5, // n0x112d c0x0000 (---------------) + I ouchi
+ 0x0035a904, // n0x112e c0x0000 (---------------) + I saga
+ 0x00272949, // n0x112f c0x0000 (---------------) + I shiroishi
+ 0x00357a04, // n0x1130 c0x0000 (---------------) + I taku
+ 0x0021a304, // n0x1131 c0x0000 (---------------) + I tara
+ 0x00297d04, // n0x1132 c0x0000 (---------------) + I tosu
+ 0x00295b4b, // n0x1133 c0x0000 (---------------) + I yoshinogari
+ 0x00396187, // n0x1134 c0x0000 (---------------) + I arakawa
+ 0x0024cdc5, // n0x1135 c0x0000 (---------------) + I asaka
+ 0x00289e48, // n0x1136 c0x0000 (---------------) + I chichibu
+ 0x00270c06, // n0x1137 c0x0000 (---------------) + I fujimi
+ 0x00270c08, // n0x1138 c0x0000 (---------------) + I fujimino
+ 0x00274146, // n0x1139 c0x0000 (---------------) + I fukaya
+ 0x0039ed85, // n0x113a c0x0000 (---------------) + I hanno
+ 0x00282d85, // n0x113b c0x0000 (---------------) + I hanyu
+ 0x00285006, // n0x113c c0x0000 (---------------) + I hasuda
+ 0x002854c8, // n0x113d c0x0000 (---------------) + I hatogaya
+ 0x00285fc8, // n0x113e c0x0000 (---------------) + I hatoyama
+ 0x00272b06, // n0x113f c0x0000 (---------------) + I hidaka
+ 0x00289c8f, // n0x1140 c0x0000 (---------------) + I higashichichibu
+ 0x0028ee10, // n0x1141 c0x0000 (---------------) + I higashimatsuyama
+ 0x00201785, // n0x1142 c0x0000 (---------------) + I honjo
+ 0x002020c3, // n0x1143 c0x0000 (---------------) + I ina
+ 0x0024a3c5, // n0x1144 c0x0000 (---------------) + I iruma
+ 0x002f4cc8, // n0x1145 c0x0000 (---------------) + I iwatsuki
+ 0x0028b189, // n0x1146 c0x0000 (---------------) + I kamiizumi
+ 0x002e0f88, // n0x1147 c0x0000 (---------------) + I kamikawa
+ 0x002fed88, // n0x1148 c0x0000 (---------------) + I kamisato
+ 0x00362648, // n0x1149 c0x0000 (---------------) + I kasukabe
+ 0x00396247, // n0x114a c0x0000 (---------------) + I kawagoe
+ 0x002708c9, // n0x114b c0x0000 (---------------) + I kawaguchi
+ 0x0029a688, // n0x114c c0x0000 (---------------) + I kawajima
+ 0x00227ec4, // n0x114d c0x0000 (---------------) + I kazo
+ 0x00297b88, // n0x114e c0x0000 (---------------) + I kitamoto
+ 0x0026fec9, // n0x114f c0x0000 (---------------) + I koshigaya
+ 0x003269c7, // n0x1150 c0x0000 (---------------) + I kounosu
+ 0x0029cf04, // n0x1151 c0x0000 (---------------) + I kuki
+ 0x00268408, // n0x1152 c0x0000 (---------------) + I kumagaya
+ 0x0022c30a, // n0x1153 c0x0000 (---------------) + I matsubushi
+ 0x002cf1c6, // n0x1154 c0x0000 (---------------) + I minano
+ 0x002964c6, // n0x1155 c0x0000 (---------------) + I misato
+ 0x0021d249, // n0x1156 c0x0000 (---------------) + I miyashiro
+ 0x00293a07, // n0x1157 c0x0000 (---------------) + I miyoshi
+ 0x002c5148, // n0x1158 c0x0000 (---------------) + I moroyama
+ 0x0037f588, // n0x1159 c0x0000 (---------------) + I nagatoro
+ 0x0027ca88, // n0x115a c0x0000 (---------------) + I namegawa
+ 0x0034d8c5, // n0x115b c0x0000 (---------------) + I niiza
+ 0x00371485, // n0x115c c0x0000 (---------------) + I ogano
+ 0x00227945, // n0x115d c0x0000 (---------------) + I ogawa
+ 0x002a9e45, // n0x115e c0x0000 (---------------) + I ogose
+ 0x002e4ac7, // n0x115f c0x0000 (---------------) + I okegawa
+ 0x0020e585, // n0x1160 c0x0000 (---------------) + I omiya
+ 0x002b3a45, // n0x1161 c0x0000 (---------------) + I otaki
+ 0x00325386, // n0x1162 c0x0000 (---------------) + I ranzan
+ 0x002e0ec7, // n0x1163 c0x0000 (---------------) + I ryokami
+ 0x002ecc47, // n0x1164 c0x0000 (---------------) + I saitama
+ 0x0022c606, // n0x1165 c0x0000 (---------------) + I sakado
+ 0x002ca185, // n0x1166 c0x0000 (---------------) + I satte
+ 0x00291fc6, // n0x1167 c0x0000 (---------------) + I sayama
+ 0x00247f45, // n0x1168 c0x0000 (---------------) + I shiki
+ 0x002a28c8, // n0x1169 c0x0000 (---------------) + I shiraoka
+ 0x002d1484, // n0x116a c0x0000 (---------------) + I soka
+ 0x002b9546, // n0x116b c0x0000 (---------------) + I sugito
+ 0x003338c4, // n0x116c c0x0000 (---------------) + I toda
+ 0x00221b48, // n0x116d c0x0000 (---------------) + I tokigawa
+ 0x003814ca, // n0x116e c0x0000 (---------------) + I tokorozawa
+ 0x0027360c, // n0x116f c0x0000 (---------------) + I tsurugashima
+ 0x0037fc85, // n0x1170 c0x0000 (---------------) + I urawa
+ 0x00380246, // n0x1171 c0x0000 (---------------) + I warabi
+ 0x00372a46, // n0x1172 c0x0000 (---------------) + I yashio
+ 0x0031ab06, // n0x1173 c0x0000 (---------------) + I yokoze
+ 0x002495c4, // n0x1174 c0x0000 (---------------) + I yono
+ 0x0037f945, // n0x1175 c0x0000 (---------------) + I yorii
+ 0x00273f87, // n0x1176 c0x0000 (---------------) + I yoshida
+ 0x00293a89, // n0x1177 c0x0000 (---------------) + I yoshikawa
+ 0x0029b387, // n0x1178 c0x0000 (---------------) + I yoshimi
+ 0x0067e804, // n0x1179 c0x0001 (---------------) ! I city
+ 0x0067e804, // n0x117a c0x0001 (---------------) ! I city
+ 0x0030abc5, // n0x117b c0x0000 (---------------) + I aisho
+ 0x0022d3c4, // n0x117c c0x0000 (---------------) + I gamo
+ 0x0029168a, // n0x117d c0x0000 (---------------) + I higashiomi
+ 0x00270a86, // n0x117e c0x0000 (---------------) + I hikone
+ 0x00348b04, // n0x117f c0x0000 (---------------) + I koka
+ 0x0020d205, // n0x1180 c0x0000 (---------------) + I konan
+ 0x00356245, // n0x1181 c0x0000 (---------------) + I kosei
+ 0x002f8ec4, // n0x1182 c0x0000 (---------------) + I koto
+ 0x00279487, // n0x1183 c0x0000 (---------------) + I kusatsu
+ 0x00335607, // n0x1184 c0x0000 (---------------) + I maibara
+ 0x002c4788, // n0x1185 c0x0000 (---------------) + I moriyama
+ 0x00302488, // n0x1186 c0x0000 (---------------) + I nagahama
+ 0x002123c9, // n0x1187 c0x0000 (---------------) + I nishiazai
+ 0x0024f5c8, // n0x1188 c0x0000 (---------------) + I notogawa
+ 0x0029184b, // n0x1189 c0x0000 (---------------) + I omihachiman
+ 0x0021e444, // n0x118a c0x0000 (---------------) + I otsu
+ 0x002f6985, // n0x118b c0x0000 (---------------) + I ritto
+ 0x00276705, // n0x118c c0x0000 (---------------) + I ryuoh
+ 0x0029edc9, // n0x118d c0x0000 (---------------) + I takashima
+ 0x002d3c09, // n0x118e c0x0000 (---------------) + I takatsuki
+ 0x002af108, // n0x118f c0x0000 (---------------) + I torahime
+ 0x00254088, // n0x1190 c0x0000 (---------------) + I toyosato
+ 0x0026ab04, // n0x1191 c0x0000 (---------------) + I yasu
+ 0x00297ec5, // n0x1192 c0x0000 (---------------) + I akagi
+ 0x00201383, // n0x1193 c0x0000 (---------------) + I ama
+ 0x0021e405, // n0x1194 c0x0000 (---------------) + I gotsu
+ 0x0028d886, // n0x1195 c0x0000 (---------------) + I hamada
+ 0x0028ad0c, // n0x1196 c0x0000 (---------------) + I higashiizumo
+ 0x0021afc6, // n0x1197 c0x0000 (---------------) + I hikawa
+ 0x00247f86, // n0x1198 c0x0000 (---------------) + I hikimi
+ 0x0028aec5, // n0x1199 c0x0000 (---------------) + I izumo
+ 0x002f5588, // n0x119a c0x0000 (---------------) + I kakinoki
+ 0x002abbc6, // n0x119b c0x0000 (---------------) + I masuda
+ 0x002e4446, // n0x119c c0x0000 (---------------) + I matsue
+ 0x002964c6, // n0x119d c0x0000 (---------------) + I misato
+ 0x002280cc, // n0x119e c0x0000 (---------------) + I nishinoshima
+ 0x0025c804, // n0x119f c0x0000 (---------------) + I ohda
+ 0x0027ff8a, // n0x11a0 c0x0000 (---------------) + I okinoshima
+ 0x00390548, // n0x11a1 c0x0000 (---------------) + I okuizumo
+ 0x0028ab47, // n0x11a2 c0x0000 (---------------) + I shimane
+ 0x00241f86, // n0x11a3 c0x0000 (---------------) + I tamayu
+ 0x0020b547, // n0x11a4 c0x0000 (---------------) + I tsuwano
+ 0x002d9e05, // n0x11a5 c0x0000 (---------------) + I unnan
+ 0x002569c6, // n0x11a6 c0x0000 (---------------) + I yakumo
+ 0x0034b606, // n0x11a7 c0x0000 (---------------) + I yasugi
+ 0x003745c7, // n0x11a8 c0x0000 (---------------) + I yatsuka
+ 0x0021a344, // n0x11a9 c0x0000 (---------------) + I arai
+ 0x00229605, // n0x11aa c0x0000 (---------------) + I atami
+ 0x00270584, // n0x11ab c0x0000 (---------------) + I fuji
+ 0x00291287, // n0x11ac c0x0000 (---------------) + I fujieda
+ 0x002707c8, // n0x11ad c0x0000 (---------------) + I fujikawa
+ 0x0027134a, // n0x11ae c0x0000 (---------------) + I fujinomiya
+ 0x00276cc7, // n0x11af c0x0000 (---------------) + I fukuroi
+ 0x00237307, // n0x11b0 c0x0000 (---------------) + I gotemba
+ 0x002beb47, // n0x11b1 c0x0000 (---------------) + I haibara
+ 0x0024d349, // n0x11b2 c0x0000 (---------------) + I hamamatsu
+ 0x0028ad0a, // n0x11b3 c0x0000 (---------------) + I higashiizu
+ 0x0022b2c3, // n0x11b4 c0x0000 (---------------) + I ito
+ 0x0021a245, // n0x11b5 c0x0000 (---------------) + I iwata
+ 0x00217543, // n0x11b6 c0x0000 (---------------) + I izu
+ 0x00304849, // n0x11b7 c0x0000 (---------------) + I izunokuni
+ 0x0022bd88, // n0x11b8 c0x0000 (---------------) + I kakegawa
+ 0x0029e507, // n0x11b9 c0x0000 (---------------) + I kannami
+ 0x002e1089, // n0x11ba c0x0000 (---------------) + I kawanehon
+ 0x0021b046, // n0x11bb c0x0000 (---------------) + I kawazu
+ 0x002fa108, // n0x11bc c0x0000 (---------------) + I kikugawa
+ 0x002d7705, // n0x11bd c0x0000 (---------------) + I kosai
+ 0x0032034a, // n0x11be c0x0000 (---------------) + I makinohara
+ 0x00228349, // n0x11bf c0x0000 (---------------) + I matsuzaki
+ 0x002608c9, // n0x11c0 c0x0000 (---------------) + I minamiizu
+ 0x0039fb87, // n0x11c1 c0x0000 (---------------) + I mishima
+ 0x002547c9, // n0x11c2 c0x0000 (---------------) + I morimachi
+ 0x00217408, // n0x11c3 c0x0000 (---------------) + I nishiizu
+ 0x002d1586, // n0x11c4 c0x0000 (---------------) + I numazu
+ 0x00380408, // n0x11c5 c0x0000 (---------------) + I omaezaki
+ 0x00209c07, // n0x11c6 c0x0000 (---------------) + I shimada
+ 0x00352287, // n0x11c7 c0x0000 (---------------) + I shimizu
+ 0x0039ff47, // n0x11c8 c0x0000 (---------------) + I shimoda
+ 0x002f2e48, // n0x11c9 c0x0000 (---------------) + I shizuoka
+ 0x002e28c6, // n0x11ca c0x0000 (---------------) + I susono
+ 0x0022c0c5, // n0x11cb c0x0000 (---------------) + I yaizu
+ 0x00273f87, // n0x11cc c0x0000 (---------------) + I yoshida
+ 0x0028bfc8, // n0x11cd c0x0000 (---------------) + I ashikaga
+ 0x003423c4, // n0x11ce c0x0000 (---------------) + I bato
+ 0x00279c04, // n0x11cf c0x0000 (---------------) + I haga
+ 0x002f4287, // n0x11d0 c0x0000 (---------------) + I ichikai
+ 0x002a4287, // n0x11d1 c0x0000 (---------------) + I iwafune
+ 0x002e324a, // n0x11d2 c0x0000 (---------------) + I kaminokawa
+ 0x002d1506, // n0x11d3 c0x0000 (---------------) + I kanuma
+ 0x002e7c0a, // n0x11d4 c0x0000 (---------------) + I karasuyama
+ 0x002b2e47, // n0x11d5 c0x0000 (---------------) + I kuroiso
+ 0x003591c7, // n0x11d6 c0x0000 (---------------) + I mashiko
+ 0x00331344, // n0x11d7 c0x0000 (---------------) + I mibu
+ 0x0025ab44, // n0x11d8 c0x0000 (---------------) + I moka
+ 0x0022a386, // n0x11d9 c0x0000 (---------------) + I motegi
+ 0x00225804, // n0x11da c0x0000 (---------------) + I nasu
+ 0x0022580c, // n0x11db c0x0000 (---------------) + I nasushiobara
+ 0x0020a7c5, // n0x11dc c0x0000 (---------------) + I nikko
+ 0x002180c9, // n0x11dd c0x0000 (---------------) + I nishikata
+ 0x0027bb44, // n0x11de c0x0000 (---------------) + I nogi
+ 0x002967c5, // n0x11df c0x0000 (---------------) + I ohira
+ 0x00270dc8, // n0x11e0 c0x0000 (---------------) + I ohtawara
+ 0x00286085, // n0x11e1 c0x0000 (---------------) + I oyama
+ 0x002fe346, // n0x11e2 c0x0000 (---------------) + I sakura
+ 0x0020d5c4, // n0x11e3 c0x0000 (---------------) + I sano
+ 0x0026b5ca, // n0x11e4 c0x0000 (---------------) + I shimotsuke
+ 0x002923c6, // n0x11e5 c0x0000 (---------------) + I shioya
+ 0x00248f0a, // n0x11e6 c0x0000 (---------------) + I takanezawa
+ 0x00342447, // n0x11e7 c0x0000 (---------------) + I tochigi
+ 0x0020f0c5, // n0x11e8 c0x0000 (---------------) + I tsuga
+ 0x0021a9c5, // n0x11e9 c0x0000 (---------------) + I ujiie
+ 0x002a560a, // n0x11ea c0x0000 (---------------) + I utsunomiya
+ 0x00297945, // n0x11eb c0x0000 (---------------) + I yaita
+ 0x002963c6, // n0x11ec c0x0000 (---------------) + I aizumi
+ 0x00200b44, // n0x11ed c0x0000 (---------------) + I anan
+ 0x002a7646, // n0x11ee c0x0000 (---------------) + I ichiba
+ 0x00321c85, // n0x11ef c0x0000 (---------------) + I itano
+ 0x00222446, // n0x11f0 c0x0000 (---------------) + I kainan
+ 0x0028e9cc, // n0x11f1 c0x0000 (---------------) + I komatsushima
+ 0x002c7e8a, // n0x11f2 c0x0000 (---------------) + I matsushige
+ 0x00267204, // n0x11f3 c0x0000 (---------------) + I mima
+ 0x00236f86, // n0x11f4 c0x0000 (---------------) + I minami
+ 0x00293a07, // n0x11f5 c0x0000 (---------------) + I miyoshi
+ 0x002c8304, // n0x11f6 c0x0000 (---------------) + I mugi
+ 0x002a6788, // n0x11f7 c0x0000 (---------------) + I nakagawa
+ 0x003813c6, // n0x11f8 c0x0000 (---------------) + I naruto
+ 0x0024ca09, // n0x11f9 c0x0000 (---------------) + I sanagochi
+ 0x002ed689, // n0x11fa c0x0000 (---------------) + I shishikui
+ 0x00285d89, // n0x11fb c0x0000 (---------------) + I tokushima
+ 0x00369686, // n0x11fc c0x0000 (---------------) + I wajiki
+ 0x00209d06, // n0x11fd c0x0000 (---------------) + I adachi
+ 0x00380547, // n0x11fe c0x0000 (---------------) + I akiruno
+ 0x002bd008, // n0x11ff c0x0000 (---------------) + I akishima
+ 0x00209b09, // n0x1200 c0x0000 (---------------) + I aogashima
+ 0x00396187, // n0x1201 c0x0000 (---------------) + I arakawa
+ 0x00289fc6, // n0x1202 c0x0000 (---------------) + I bunkyo
+ 0x003a2b07, // n0x1203 c0x0000 (---------------) + I chiyoda
+ 0x002d4b85, // n0x1204 c0x0000 (---------------) + I chofu
+ 0x00359404, // n0x1205 c0x0000 (---------------) + I chuo
+ 0x00380107, // n0x1206 c0x0000 (---------------) + I edogawa
+ 0x002b7305, // n0x1207 c0x0000 (---------------) + I fuchu
+ 0x0027ef85, // n0x1208 c0x0000 (---------------) + I fussa
+ 0x002f5d47, // n0x1209 c0x0000 (---------------) + I hachijo
+ 0x002434c8, // n0x120a c0x0000 (---------------) + I hachioji
+ 0x00371b06, // n0x120b c0x0000 (---------------) + I hamura
+ 0x0028da0d, // n0x120c c0x0000 (---------------) + I higashikurume
+ 0x0028f6cf, // n0x120d c0x0000 (---------------) + I higashimurayama
+ 0x00294e0d, // n0x120e c0x0000 (---------------) + I higashiyamato
+ 0x00205904, // n0x120f c0x0000 (---------------) + I hino
+ 0x002362c6, // n0x1210 c0x0000 (---------------) + I hinode
+ 0x002cc048, // n0x1211 c0x0000 (---------------) + I hinohara
+ 0x002a1905, // n0x1212 c0x0000 (---------------) + I inagi
+ 0x0026a4c8, // n0x1213 c0x0000 (---------------) + I itabashi
+ 0x0020ae0a, // n0x1214 c0x0000 (---------------) + I katsushika
+ 0x0020cb44, // n0x1215 c0x0000 (---------------) + I kita
+ 0x00353546, // n0x1216 c0x0000 (---------------) + I kiyose
+ 0x002a1487, // n0x1217 c0x0000 (---------------) + I kodaira
+ 0x00223547, // n0x1218 c0x0000 (---------------) + I koganei
+ 0x002980c9, // n0x1219 c0x0000 (---------------) + I kokubunji
+ 0x003803c5, // n0x121a c0x0000 (---------------) + I komae
+ 0x002f8ec4, // n0x121b c0x0000 (---------------) + I koto
+ 0x00358fca, // n0x121c c0x0000 (---------------) + I kouzushima
+ 0x002afcc9, // n0x121d c0x0000 (---------------) + I kunitachi
+ 0x002548c7, // n0x121e c0x0000 (---------------) + I machida
+ 0x0028dcc6, // n0x121f c0x0000 (---------------) + I meguro
+ 0x00348906, // n0x1220 c0x0000 (---------------) + I minato
+ 0x00297e06, // n0x1221 c0x0000 (---------------) + I mitaka
+ 0x00358ac6, // n0x1222 c0x0000 (---------------) + I mizuho
+ 0x002cb9cf, // n0x1223 c0x0000 (---------------) + I musashimurayama
+ 0x002cbf09, // n0x1224 c0x0000 (---------------) + I musashino
+ 0x00303406, // n0x1225 c0x0000 (---------------) + I nakano
+ 0x0024fc46, // n0x1226 c0x0000 (---------------) + I nerima
+ 0x00379a49, // n0x1227 c0x0000 (---------------) + I ogasawara
+ 0x00304647, // n0x1228 c0x0000 (---------------) + I okutama
+ 0x00211c03, // n0x1229 c0x0000 (---------------) + I ome
+ 0x0020cd06, // n0x122a c0x0000 (---------------) + I oshima
+ 0x0020a183, // n0x122b c0x0000 (---------------) + I ota
+ 0x00246ac8, // n0x122c c0x0000 (---------------) + I setagaya
+ 0x003a2947, // n0x122d c0x0000 (---------------) + I shibuya
+ 0x00296a09, // n0x122e c0x0000 (---------------) + I shinagawa
+ 0x0027e9c8, // n0x122f c0x0000 (---------------) + I shinjuku
+ 0x0034e008, // n0x1230 c0x0000 (---------------) + I suginami
+ 0x002105c6, // n0x1231 c0x0000 (---------------) + I sumida
+ 0x0033d889, // n0x1232 c0x0000 (---------------) + I tachikawa
+ 0x0036b745, // n0x1233 c0x0000 (---------------) + I taito
+ 0x00241f84, // n0x1234 c0x0000 (---------------) + I tama
+ 0x00242a87, // n0x1235 c0x0000 (---------------) + I toshima
+ 0x0024ffc5, // n0x1236 c0x0000 (---------------) + I chizu
+ 0x00205904, // n0x1237 c0x0000 (---------------) + I hino
+ 0x0024ce88, // n0x1238 c0x0000 (---------------) + I kawahara
+ 0x00216a44, // n0x1239 c0x0000 (---------------) + I koge
+ 0x002fb907, // n0x123a c0x0000 (---------------) + I kotoura
+ 0x00343dc6, // n0x123b c0x0000 (---------------) + I misasa
+ 0x002dfc05, // n0x123c c0x0000 (---------------) + I nanbu
+ 0x0027ac08, // n0x123d c0x0000 (---------------) + I nichinan
+ 0x003487cb, // n0x123e c0x0000 (---------------) + I sakaiminato
+ 0x002f0147, // n0x123f c0x0000 (---------------) + I tottori
+ 0x002a5886, // n0x1240 c0x0000 (---------------) + I wakasa
+ 0x002ba804, // n0x1241 c0x0000 (---------------) + I yazu
+ 0x0022d806, // n0x1242 c0x0000 (---------------) + I yonago
+ 0x002b9085, // n0x1243 c0x0000 (---------------) + I asahi
+ 0x002b7305, // n0x1244 c0x0000 (---------------) + I fuchu
+ 0x00275d49, // n0x1245 c0x0000 (---------------) + I fukumitsu
+ 0x00279089, // n0x1246 c0x0000 (---------------) + I funahashi
+ 0x0029b444, // n0x1247 c0x0000 (---------------) + I himi
+ 0x00352305, // n0x1248 c0x0000 (---------------) + I imizu
+ 0x00236fc5, // n0x1249 c0x0000 (---------------) + I inami
+ 0x003201c6, // n0x124a c0x0000 (---------------) + I johana
+ 0x002f4188, // n0x124b c0x0000 (---------------) + I kamiichi
+ 0x002b2746, // n0x124c c0x0000 (---------------) + I kurobe
+ 0x0030a24b, // n0x124d c0x0000 (---------------) + I nakaniikawa
+ 0x002f868a, // n0x124e c0x0000 (---------------) + I namerikawa
+ 0x002f2905, // n0x124f c0x0000 (---------------) + I nanto
+ 0x00282e06, // n0x1250 c0x0000 (---------------) + I nyuzen
+ 0x002eaa05, // n0x1251 c0x0000 (---------------) + I oyabe
+ 0x00210d45, // n0x1252 c0x0000 (---------------) + I taira
+ 0x002863c7, // n0x1253 c0x0000 (---------------) + I takaoka
+ 0x00201248, // n0x1254 c0x0000 (---------------) + I tateyama
+ 0x0024f644, // n0x1255 c0x0000 (---------------) + I toga
+ 0x0025bd46, // n0x1256 c0x0000 (---------------) + I tonami
+ 0x00286046, // n0x1257 c0x0000 (---------------) + I toyama
+ 0x002175c7, // n0x1258 c0x0000 (---------------) + I unazuki
+ 0x002f6f84, // n0x1259 c0x0000 (---------------) + I uozu
+ 0x00274a86, // n0x125a c0x0000 (---------------) + I yamada
+ 0x0030e285, // n0x125b c0x0000 (---------------) + I arida
+ 0x0030e289, // n0x125c c0x0000 (---------------) + I aridagawa
+ 0x00209f04, // n0x125d c0x0000 (---------------) + I gobo
+ 0x0027f9c9, // n0x125e c0x0000 (---------------) + I hashimoto
+ 0x00272b06, // n0x125f c0x0000 (---------------) + I hidaka
+ 0x002b44c8, // n0x1260 c0x0000 (---------------) + I hirogawa
+ 0x00236fc5, // n0x1261 c0x0000 (---------------) + I inami
+ 0x003310c5, // n0x1262 c0x0000 (---------------) + I iwade
+ 0x00222446, // n0x1263 c0x0000 (---------------) + I kainan
+ 0x00372789, // n0x1264 c0x0000 (---------------) + I kamitonda
+ 0x00219449, // n0x1265 c0x0000 (---------------) + I katsuragi
+ 0x00248006, // n0x1266 c0x0000 (---------------) + I kimino
+ 0x002431c8, // n0x1267 c0x0000 (---------------) + I kinokawa
+ 0x0021eb88, // n0x1268 c0x0000 (---------------) + I kitayama
+ 0x002ea9c4, // n0x1269 c0x0000 (---------------) + I koya
+ 0x00367984, // n0x126a c0x0000 (---------------) + I koza
+ 0x00367988, // n0x126b c0x0000 (---------------) + I kozagawa
+ 0x00306448, // n0x126c c0x0000 (---------------) + I kudoyama
+ 0x00366b09, // n0x126d c0x0000 (---------------) + I kushimoto
+ 0x0028d806, // n0x126e c0x0000 (---------------) + I mihama
+ 0x002964c6, // n0x126f c0x0000 (---------------) + I misato
+ 0x00313f0d, // n0x1270 c0x0000 (---------------) + I nachikatsuura
+ 0x002a9586, // n0x1271 c0x0000 (---------------) + I shingu
+ 0x002999c9, // n0x1272 c0x0000 (---------------) + I shirahama
+ 0x00389e85, // n0x1273 c0x0000 (---------------) + I taiji
+ 0x002ffb46, // n0x1274 c0x0000 (---------------) + I tanabe
+ 0x0033da48, // n0x1275 c0x0000 (---------------) + I wakayama
+ 0x00311445, // n0x1276 c0x0000 (---------------) + I yuasa
+ 0x002a4c04, // n0x1277 c0x0000 (---------------) + I yura
+ 0x002b9085, // n0x1278 c0x0000 (---------------) + I asahi
+ 0x00278708, // n0x1279 c0x0000 (---------------) + I funagata
+ 0x00291449, // n0x127a c0x0000 (---------------) + I higashine
+ 0x00270644, // n0x127b c0x0000 (---------------) + I iide
+ 0x0034eac6, // n0x127c c0x0000 (---------------) + I kahoku
+ 0x00348f8a, // n0x127d c0x0000 (---------------) + I kaminoyama
+ 0x0021b1c8, // n0x127e c0x0000 (---------------) + I kaneyama
+ 0x002e33c9, // n0x127f c0x0000 (---------------) + I kawanishi
+ 0x0022780a, // n0x1280 c0x0000 (---------------) + I mamurogawa
+ 0x002e1006, // n0x1281 c0x0000 (---------------) + I mikawa
+ 0x0028f888, // n0x1282 c0x0000 (---------------) + I murayama
+ 0x003012c5, // n0x1283 c0x0000 (---------------) + I nagai
+ 0x002c7d08, // n0x1284 c0x0000 (---------------) + I nakayama
+ 0x002adc05, // n0x1285 c0x0000 (---------------) + I nanyo
+ 0x0021af09, // n0x1286 c0x0000 (---------------) + I nishikawa
+ 0x0035e9c9, // n0x1287 c0x0000 (---------------) + I obanazawa
+ 0x00206e82, // n0x1288 c0x0000 (---------------) + I oe
+ 0x00281985, // n0x1289 c0x0000 (---------------) + I oguni
+ 0x00268d06, // n0x128a c0x0000 (---------------) + I ohkura
+ 0x00272a47, // n0x128b c0x0000 (---------------) + I oishida
+ 0x0035a905, // n0x128c c0x0000 (---------------) + I sagae
+ 0x002eecc6, // n0x128d c0x0000 (---------------) + I sakata
+ 0x00311508, // n0x128e c0x0000 (---------------) + I sakegawa
+ 0x0027d4c6, // n0x128f c0x0000 (---------------) + I shinjo
+ 0x002edc89, // n0x1290 c0x0000 (---------------) + I shirataka
+ 0x00271f06, // n0x1291 c0x0000 (---------------) + I shonai
+ 0x00278888, // n0x1292 c0x0000 (---------------) + I takahata
+ 0x0029f8c5, // n0x1293 c0x0000 (---------------) + I tendo
+ 0x00263206, // n0x1294 c0x0000 (---------------) + I tozawa
+ 0x00322848, // n0x1295 c0x0000 (---------------) + I tsuruoka
+ 0x00277b48, // n0x1296 c0x0000 (---------------) + I yamagata
+ 0x00300508, // n0x1297 c0x0000 (---------------) + I yamanobe
+ 0x00364e48, // n0x1298 c0x0000 (---------------) + I yonezawa
+ 0x00214e04, // n0x1299 c0x0000 (---------------) + I yuza
+ 0x00242fc3, // n0x129a c0x0000 (---------------) + I abu
+ 0x002edec4, // n0x129b c0x0000 (---------------) + I hagi
+ 0x0022fec6, // n0x129c c0x0000 (---------------) + I hikari
+ 0x002d4bc4, // n0x129d c0x0000 (---------------) + I hofu
+ 0x0028d5c7, // n0x129e c0x0000 (---------------) + I iwakuni
+ 0x002e4349, // n0x129f c0x0000 (---------------) + I kudamatsu
+ 0x002ba005, // n0x12a0 c0x0000 (---------------) + I mitou
+ 0x0037f586, // n0x12a1 c0x0000 (---------------) + I nagato
+ 0x0020cd06, // n0x12a2 c0x0000 (---------------) + I oshima
+ 0x002626cb, // n0x12a3 c0x0000 (---------------) + I shimonoseki
+ 0x002f2846, // n0x12a4 c0x0000 (---------------) + I shunan
+ 0x00306746, // n0x12a5 c0x0000 (---------------) + I tabuse
+ 0x00340808, // n0x12a6 c0x0000 (---------------) + I tokuyama
+ 0x00254b06, // n0x12a7 c0x0000 (---------------) + I toyota
+ 0x00287ec3, // n0x12a8 c0x0000 (---------------) + I ube
+ 0x00214083, // n0x12a9 c0x0000 (---------------) + I yuu
+ 0x00359404, // n0x12aa c0x0000 (---------------) + I chuo
+ 0x00231585, // n0x12ab c0x0000 (---------------) + I doshi
+ 0x002a4d87, // n0x12ac c0x0000 (---------------) + I fuefuki
+ 0x002707c8, // n0x12ad c0x0000 (---------------) + I fujikawa
+ 0x002707cf, // n0x12ae c0x0000 (---------------) + I fujikawaguchiko
+ 0x00273e8b, // n0x12af c0x0000 (---------------) + I fujiyoshida
+ 0x002f3f88, // n0x12b0 c0x0000 (---------------) + I hayakawa
+ 0x0034eb46, // n0x12b1 c0x0000 (---------------) + I hokuto
+ 0x003335ce, // n0x12b2 c0x0000 (---------------) + I ichikawamisato
+ 0x00222443, // n0x12b3 c0x0000 (---------------) + I kai
+ 0x00339244, // n0x12b4 c0x0000 (---------------) + I kofu
+ 0x002f27c5, // n0x12b5 c0x0000 (---------------) + I koshu
+ 0x00346486, // n0x12b6 c0x0000 (---------------) + I kosuge
+ 0x0028498b, // n0x12b7 c0x0000 (---------------) + I minami-alps
+ 0x00288386, // n0x12b8 c0x0000 (---------------) + I minobu
+ 0x0020f889, // n0x12b9 c0x0000 (---------------) + I nakamichi
+ 0x002dfc05, // n0x12ba c0x0000 (---------------) + I nanbu
+ 0x0037cd08, // n0x12bb c0x0000 (---------------) + I narusawa
+ 0x0020fc48, // n0x12bc c0x0000 (---------------) + I nirasaki
+ 0x0021930c, // n0x12bd c0x0000 (---------------) + I nishikatsura
+ 0x00295b86, // n0x12be c0x0000 (---------------) + I oshino
+ 0x0021e446, // n0x12bf c0x0000 (---------------) + I otsuki
+ 0x002ab745, // n0x12c0 c0x0000 (---------------) + I showa
+ 0x002805c8, // n0x12c1 c0x0000 (---------------) + I tabayama
+ 0x00273605, // n0x12c2 c0x0000 (---------------) + I tsuru
+ 0x003855c8, // n0x12c3 c0x0000 (---------------) + I uenohara
+ 0x0029524a, // n0x12c4 c0x0000 (---------------) + I yamanakako
+ 0x00298d49, // n0x12c5 c0x0000 (---------------) + I yamanashi
+ 0x0067e804, // n0x12c6 c0x0001 (---------------) ! I city
+ 0x2d608182, // n0x12c7 c0x00b5 (n0x12c8-n0x12c9) o I co
+ 0x000f5248, // n0x12c8 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x12c9 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x12ca c0x0000 (---------------) + I edu
+ 0x00275003, // n0x12cb c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x12cc c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x12cd c0x0000 (---------------) + I net
+ 0x00229a83, // n0x12ce c0x0000 (---------------) + I org
+ 0x0030a143, // n0x12cf c0x0000 (---------------) + I biz
+ 0x0022edc3, // n0x12d0 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x12d1 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x12d2 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x12d3 c0x0000 (---------------) + I info
+ 0x0021d8c3, // n0x12d4 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x12d5 c0x0000 (---------------) + I org
+ 0x0024be83, // n0x12d6 c0x0000 (---------------) + I ass
+ 0x002b1c44, // n0x12d7 c0x0000 (---------------) + I asso
+ 0x0022edc3, // n0x12d8 c0x0000 (---------------) + I com
+ 0x00238284, // n0x12d9 c0x0000 (---------------) + I coop
+ 0x002349c3, // n0x12da c0x0000 (---------------) + I edu
+ 0x002fa744, // n0x12db c0x0000 (---------------) + I gouv
+ 0x00275003, // n0x12dc c0x0000 (---------------) + I gov
+ 0x0035abc7, // n0x12dd c0x0000 (---------------) + I medecin
+ 0x00215b43, // n0x12de c0x0000 (---------------) + I mil
+ 0x0020e543, // n0x12df c0x0000 (---------------) + I nom
+ 0x00246408, // n0x12e0 c0x0000 (---------------) + I notaires
+ 0x00229a83, // n0x12e1 c0x0000 (---------------) + I org
+ 0x002d5a0b, // n0x12e2 c0x0000 (---------------) + I pharmaciens
+ 0x002da783, // n0x12e3 c0x0000 (---------------) + I prd
+ 0x00240d06, // n0x12e4 c0x0000 (---------------) + I presse
+ 0x00200142, // n0x12e5 c0x0000 (---------------) + I tm
+ 0x003781cb, // n0x12e6 c0x0000 (---------------) + I veterinaire
+ 0x002349c3, // n0x12e7 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x12e8 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x12e9 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x12ea c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x12eb c0x0000 (---------------) + I com
+ 0x002349c3, // n0x12ec c0x0000 (---------------) + I edu
+ 0x00275003, // n0x12ed c0x0000 (---------------) + I gov
+ 0x00229a83, // n0x12ee c0x0000 (---------------) + I org
+ 0x00228d03, // n0x12ef c0x0000 (---------------) + I rep
+ 0x00203643, // n0x12f0 c0x0000 (---------------) + I tra
+ 0x00205882, // n0x12f1 c0x0000 (---------------) + I ac
+ 0x000f5248, // n0x12f2 c0x0000 (---------------) + blogspot
+ 0x00204745, // n0x12f3 c0x0000 (---------------) + I busan
+ 0x00325848, // n0x12f4 c0x0000 (---------------) + I chungbuk
+ 0x0032f688, // n0x12f5 c0x0000 (---------------) + I chungnam
+ 0x00208182, // n0x12f6 c0x0000 (---------------) + I co
+ 0x0024d585, // n0x12f7 c0x0000 (---------------) + I daegu
+ 0x00256387, // n0x12f8 c0x0000 (---------------) + I daejeon
+ 0x00202242, // n0x12f9 c0x0000 (---------------) + I es
+ 0x0020fac7, // n0x12fa c0x0000 (---------------) + I gangwon
+ 0x00208502, // n0x12fb c0x0000 (---------------) + I go
+ 0x0023d2c7, // n0x12fc c0x0000 (---------------) + I gwangju
+ 0x0038dc09, // n0x12fd c0x0000 (---------------) + I gyeongbuk
+ 0x00300e88, // n0x12fe c0x0000 (---------------) + I gyeonggi
+ 0x0027c909, // n0x12ff c0x0000 (---------------) + I gyeongnam
+ 0x00207ec2, // n0x1300 c0x0000 (---------------) + I hs
+ 0x00261387, // n0x1301 c0x0000 (---------------) + I incheon
+ 0x00247d84, // n0x1302 c0x0000 (---------------) + I jeju
+ 0x00256447, // n0x1303 c0x0000 (---------------) + I jeonbuk
+ 0x002f8587, // n0x1304 c0x0000 (---------------) + I jeonnam
+ 0x002b1882, // n0x1305 c0x0000 (---------------) + I kg
+ 0x00215b43, // n0x1306 c0x0000 (---------------) + I mil
+ 0x00202482, // n0x1307 c0x0000 (---------------) + I ms
+ 0x00203282, // n0x1308 c0x0000 (---------------) + I ne
+ 0x00200282, // n0x1309 c0x0000 (---------------) + I or
+ 0x00209a02, // n0x130a c0x0000 (---------------) + I pe
+ 0x00204d82, // n0x130b c0x0000 (---------------) + I re
+ 0x002024c2, // n0x130c c0x0000 (---------------) + I sc
+ 0x00275905, // n0x130d c0x0000 (---------------) + I seoul
+ 0x00244c45, // n0x130e c0x0000 (---------------) + I ulsan
+ 0x0022edc3, // n0x130f c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1310 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1311 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1312 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1313 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1314 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1315 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1316 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1317 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1318 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1319 c0x0000 (---------------) + I org
+ 0x00000301, // n0x131a c0x0000 (---------------) + c
+ 0x0022edc3, // n0x131b c0x0000 (---------------) + I com
+ 0x002349c3, // n0x131c c0x0000 (---------------) + I edu
+ 0x00275003, // n0x131d c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x131e c0x0000 (---------------) + I info
+ 0x0026f683, // n0x131f c0x0000 (---------------) + I int
+ 0x0021d8c3, // n0x1320 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1321 c0x0000 (---------------) + I org
+ 0x0021ffc3, // n0x1322 c0x0000 (---------------) + I per
+ 0x0022edc3, // n0x1323 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1324 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1325 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1326 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1327 c0x0000 (---------------) + I org
+ 0x00208182, // n0x1328 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1329 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x132a c0x0000 (---------------) + I edu
+ 0x00275003, // n0x132b c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x132c c0x0000 (---------------) + I net
+ 0x00229a83, // n0x132d c0x0000 (---------------) + I org
+ 0x000f5248, // n0x132e c0x0000 (---------------) + blogspot
+ 0x00205882, // n0x132f c0x0000 (---------------) + I ac
+ 0x002b5bc4, // n0x1330 c0x0000 (---------------) + I assn
+ 0x0022edc3, // n0x1331 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1332 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1333 c0x0000 (---------------) + I gov
+ 0x003395c3, // n0x1334 c0x0000 (---------------) + I grp
+ 0x0022fac5, // n0x1335 c0x0000 (---------------) + I hotel
+ 0x0026f683, // n0x1336 c0x0000 (---------------) + I int
+ 0x00342703, // n0x1337 c0x0000 (---------------) + I ltd
+ 0x0021d8c3, // n0x1338 c0x0000 (---------------) + I net
+ 0x002084c3, // n0x1339 c0x0000 (---------------) + I ngo
+ 0x00229a83, // n0x133a c0x0000 (---------------) + I org
+ 0x00215d43, // n0x133b c0x0000 (---------------) + I sch
+ 0x0026d043, // n0x133c c0x0000 (---------------) + I soc
+ 0x0021fa83, // n0x133d c0x0000 (---------------) + I web
+ 0x0022edc3, // n0x133e c0x0000 (---------------) + I com
+ 0x002349c3, // n0x133f c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1340 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1341 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1342 c0x0000 (---------------) + I org
+ 0x00208182, // n0x1343 c0x0000 (---------------) + I co
+ 0x00229a83, // n0x1344 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x1345 c0x0000 (---------------) + blogspot
+ 0x00275003, // n0x1346 c0x0000 (---------------) + I gov
+ 0x000f5248, // n0x1347 c0x0000 (---------------) + blogspot
+ 0x0022d9c3, // n0x1348 c0x0000 (---------------) + I asn
+ 0x0022edc3, // n0x1349 c0x0000 (---------------) + I com
+ 0x00231fc4, // n0x134a c0x0000 (---------------) + I conf
+ 0x002349c3, // n0x134b c0x0000 (---------------) + I edu
+ 0x00275003, // n0x134c c0x0000 (---------------) + I gov
+ 0x00205d82, // n0x134d c0x0000 (---------------) + I id
+ 0x00215b43, // n0x134e c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x134f c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1350 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1351 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1352 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1353 c0x0000 (---------------) + I gov
+ 0x00205d82, // n0x1354 c0x0000 (---------------) + I id
+ 0x00211c43, // n0x1355 c0x0000 (---------------) + I med
+ 0x0021d8c3, // n0x1356 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1357 c0x0000 (---------------) + I org
+ 0x002d4b03, // n0x1358 c0x0000 (---------------) + I plc
+ 0x00215d43, // n0x1359 c0x0000 (---------------) + I sch
+ 0x00205882, // n0x135a c0x0000 (---------------) + I ac
+ 0x00208182, // n0x135b c0x0000 (---------------) + I co
+ 0x00275003, // n0x135c c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x135d c0x0000 (---------------) + I net
+ 0x00229a83, // n0x135e c0x0000 (---------------) + I org
+ 0x00240d05, // n0x135f c0x0000 (---------------) + I press
+ 0x002b1c44, // n0x1360 c0x0000 (---------------) + I asso
+ 0x00200142, // n0x1361 c0x0000 (---------------) + I tm
+ 0x000f5248, // n0x1362 c0x0000 (---------------) + blogspot
+ 0x00205882, // n0x1363 c0x0000 (---------------) + I ac
+ 0x00208182, // n0x1364 c0x0000 (---------------) + I co
+ 0x002349c3, // n0x1365 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1366 c0x0000 (---------------) + I gov
+ 0x002294c3, // n0x1367 c0x0000 (---------------) + I its
+ 0x0021d8c3, // n0x1368 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1369 c0x0000 (---------------) + I org
+ 0x002db244, // n0x136a c0x0000 (---------------) + I priv
+ 0x00208182, // n0x136b c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x136c c0x0000 (---------------) + I com
+ 0x002349c3, // n0x136d c0x0000 (---------------) + I edu
+ 0x00275003, // n0x136e c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x136f c0x0000 (---------------) + I mil
+ 0x0020e543, // n0x1370 c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x1371 c0x0000 (---------------) + I org
+ 0x002da783, // n0x1372 c0x0000 (---------------) + I prd
+ 0x00200142, // n0x1373 c0x0000 (---------------) + I tm
+ 0x000f5248, // n0x1374 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1375 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1376 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1377 c0x0000 (---------------) + I gov
+ 0x00389f83, // n0x1378 c0x0000 (---------------) + I inf
+ 0x0027ca84, // n0x1379 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x137a c0x0000 (---------------) + I net
+ 0x00229a83, // n0x137b c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x137c c0x0000 (---------------) + I com
+ 0x002349c3, // n0x137d c0x0000 (---------------) + I edu
+ 0x002fa744, // n0x137e c0x0000 (---------------) + I gouv
+ 0x00275003, // n0x137f c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1380 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1381 c0x0000 (---------------) + I org
+ 0x00240d06, // n0x1382 c0x0000 (---------------) + I presse
+ 0x002349c3, // n0x1383 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1384 c0x0000 (---------------) + I gov
+ 0x0016c603, // n0x1385 c0x0000 (---------------) + nyc
+ 0x00229a83, // n0x1386 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1387 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1388 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1389 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x138a c0x0000 (---------------) + I net
+ 0x00229a83, // n0x138b c0x0000 (---------------) + I org
+ 0x000f5248, // n0x138c c0x0000 (---------------) + blogspot
+ 0x00275003, // n0x138d c0x0000 (---------------) + I gov
+ 0x0022edc3, // n0x138e c0x0000 (---------------) + I com
+ 0x002349c3, // n0x138f c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1390 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1391 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1392 c0x0000 (---------------) + I org
+ 0x3562edc3, // n0x1393 c0x00d5 (n0x1397-n0x1398) + I com
+ 0x002349c3, // n0x1394 c0x0000 (---------------) + I edu
+ 0x0021d8c3, // n0x1395 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1396 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x1397 c0x0000 (---------------) + blogspot
+ 0x00205882, // n0x1398 c0x0000 (---------------) + I ac
+ 0x00208182, // n0x1399 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x139a c0x0000 (---------------) + I com
+ 0x00275003, // n0x139b c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x139c c0x0000 (---------------) + I net
+ 0x00200282, // n0x139d c0x0000 (---------------) + I or
+ 0x00229a83, // n0x139e c0x0000 (---------------) + I org
+ 0x00305387, // n0x139f c0x0000 (---------------) + I academy
+ 0x002ce4cb, // n0x13a0 c0x0000 (---------------) + I agriculture
+ 0x00204683, // n0x13a1 c0x0000 (---------------) + I air
+ 0x00248308, // n0x13a2 c0x0000 (---------------) + I airguard
+ 0x002bcd87, // n0x13a3 c0x0000 (---------------) + I alabama
+ 0x0027be86, // n0x13a4 c0x0000 (---------------) + I alaska
+ 0x00365a45, // n0x13a5 c0x0000 (---------------) + I amber
+ 0x002b0ec9, // n0x13a6 c0x0000 (---------------) + I ambulance
+ 0x00240a88, // n0x13a7 c0x0000 (---------------) + I american
+ 0x002a1f89, // n0x13a8 c0x0000 (---------------) + I americana
+ 0x002a1f90, // n0x13a9 c0x0000 (---------------) + I americanantiques
+ 0x00352e8b, // n0x13aa c0x0000 (---------------) + I americanart
+ 0x002b0d09, // n0x13ab c0x0000 (---------------) + I amsterdam
+ 0x00204e83, // n0x13ac c0x0000 (---------------) + I and
+ 0x00338749, // n0x13ad c0x0000 (---------------) + I annefrank
+ 0x00232ac6, // n0x13ae c0x0000 (---------------) + I anthro
+ 0x00232acc, // n0x13af c0x0000 (---------------) + I anthropology
+ 0x00204808, // n0x13b0 c0x0000 (---------------) + I antiques
+ 0x0039f9c8, // n0x13b1 c0x0000 (---------------) + I aquarium
+ 0x002506c9, // n0x13b2 c0x0000 (---------------) + I arboretum
+ 0x0029030e, // n0x13b3 c0x0000 (---------------) + I archaeological
+ 0x0036ea4b, // n0x13b4 c0x0000 (---------------) + I archaeology
+ 0x002c340c, // n0x13b5 c0x0000 (---------------) + I architecture
+ 0x002011c3, // n0x13b6 c0x0000 (---------------) + I art
+ 0x0022510c, // n0x13b7 c0x0000 (---------------) + I artanddesign
+ 0x00204149, // n0x13b8 c0x0000 (---------------) + I artcenter
+ 0x00362287, // n0x13b9 c0x0000 (---------------) + I artdeco
+ 0x0023490c, // n0x13ba c0x0000 (---------------) + I arteducation
+ 0x00397c8a, // n0x13bb c0x0000 (---------------) + I artgallery
+ 0x00243984, // n0x13bc c0x0000 (---------------) + I arts
+ 0x0024398d, // n0x13bd c0x0000 (---------------) + I artsandcrafts
+ 0x00224fc8, // n0x13be c0x0000 (---------------) + I asmatart
+ 0x00395a4d, // n0x13bf c0x0000 (---------------) + I assassination
+ 0x0024be86, // n0x13c0 c0x0000 (---------------) + I assisi
+ 0x002b1c4b, // n0x13c1 c0x0000 (---------------) + I association
+ 0x0024d049, // n0x13c2 c0x0000 (---------------) + I astronomy
+ 0x0033d747, // n0x13c3 c0x0000 (---------------) + I atlanta
+ 0x00308c06, // n0x13c4 c0x0000 (---------------) + I austin
+ 0x00310989, // n0x13c5 c0x0000 (---------------) + I australia
+ 0x0032058a, // n0x13c6 c0x0000 (---------------) + I automotive
+ 0x00354ec8, // n0x13c7 c0x0000 (---------------) + I aviation
+ 0x002da144, // n0x13c8 c0x0000 (---------------) + I axis
+ 0x0026f347, // n0x13c9 c0x0000 (---------------) + I badajoz
+ 0x00298fc7, // n0x13ca c0x0000 (---------------) + I baghdad
+ 0x0027ce04, // n0x13cb c0x0000 (---------------) + I bahn
+ 0x0022d044, // n0x13cc c0x0000 (---------------) + I bale
+ 0x00263909, // n0x13cd c0x0000 (---------------) + I baltimore
+ 0x002bb549, // n0x13ce c0x0000 (---------------) + I barcelona
+ 0x00339a08, // n0x13cf c0x0000 (---------------) + I baseball
+ 0x0020f5c5, // n0x13d0 c0x0000 (---------------) + I basel
+ 0x003852c5, // n0x13d1 c0x0000 (---------------) + I baths
+ 0x002095c6, // n0x13d2 c0x0000 (---------------) + I bauern
+ 0x00243849, // n0x13d3 c0x0000 (---------------) + I beauxarts
+ 0x003627cd, // n0x13d4 c0x0000 (---------------) + I beeldengeluid
+ 0x002c2e88, // n0x13d5 c0x0000 (---------------) + I bellevue
+ 0x002094c7, // n0x13d6 c0x0000 (---------------) + I bergbau
+ 0x00365ac8, // n0x13d7 c0x0000 (---------------) + I berkeley
+ 0x00351e06, // n0x13d8 c0x0000 (---------------) + I berlin
+ 0x00389904, // n0x13d9 c0x0000 (---------------) + I bern
+ 0x00351845, // n0x13da c0x0000 (---------------) + I bible
+ 0x00202f46, // n0x13db c0x0000 (---------------) + I bilbao
+ 0x002034c4, // n0x13dc c0x0000 (---------------) + I bill
+ 0x00204047, // n0x13dd c0x0000 (---------------) + I birdart
+ 0x0020644a, // n0x13de c0x0000 (---------------) + I birthplace
+ 0x00214304, // n0x13df c0x0000 (---------------) + I bonn
+ 0x00216646, // n0x13e0 c0x0000 (---------------) + I boston
+ 0x00217089, // n0x13e1 c0x0000 (---------------) + I botanical
+ 0x0021708f, // n0x13e2 c0x0000 (---------------) + I botanicalgarden
+ 0x0021900d, // n0x13e3 c0x0000 (---------------) + I botanicgarden
+ 0x00219d46, // n0x13e4 c0x0000 (---------------) + I botany
+ 0x0021b5d0, // n0x13e5 c0x0000 (---------------) + I brandywinevalley
+ 0x0021b9c6, // n0x13e6 c0x0000 (---------------) + I brasil
+ 0x0021c4c7, // n0x13e7 c0x0000 (---------------) + I bristol
+ 0x0021c847, // n0x13e8 c0x0000 (---------------) + I british
+ 0x0021c84f, // n0x13e9 c0x0000 (---------------) + I britishcolumbia
+ 0x0021d509, // n0x13ea c0x0000 (---------------) + I broadcast
+ 0x00221d46, // n0x13eb c0x0000 (---------------) + I brunel
+ 0x002230c7, // n0x13ec c0x0000 (---------------) + I brussel
+ 0x002230c8, // n0x13ed c0x0000 (---------------) + I brussels
+ 0x00223a09, // n0x13ee c0x0000 (---------------) + I bruxelles
+ 0x003313c8, // n0x13ef c0x0000 (---------------) + I building
+ 0x002d2107, // n0x13f0 c0x0000 (---------------) + I burghof
+ 0x00204743, // n0x13f1 c0x0000 (---------------) + I bus
+ 0x0022ec46, // n0x13f2 c0x0000 (---------------) + I bushey
+ 0x00229748, // n0x13f3 c0x0000 (---------------) + I cadaques
+ 0x002905ca, // n0x13f4 c0x0000 (---------------) + I california
+ 0x0021fb49, // n0x13f5 c0x0000 (---------------) + I cambridge
+ 0x00205c83, // n0x13f6 c0x0000 (---------------) + I can
+ 0x00321746, // n0x13f7 c0x0000 (---------------) + I canada
+ 0x0025bb8a, // n0x13f8 c0x0000 (---------------) + I capebreton
+ 0x002dcfc7, // n0x13f9 c0x0000 (---------------) + I carrier
+ 0x003620ca, // n0x13fa c0x0000 (---------------) + I cartoonart
+ 0x00203cce, // n0x13fb c0x0000 (---------------) + I casadelamoneda
+ 0x0021d646, // n0x13fc c0x0000 (---------------) + I castle
+ 0x002d2e87, // n0x13fd c0x0000 (---------------) + I castres
+ 0x0020db86, // n0x13fe c0x0000 (---------------) + I celtic
+ 0x00204206, // n0x13ff c0x0000 (---------------) + I center
+ 0x0037128b, // n0x1400 c0x0000 (---------------) + I chattanooga
+ 0x0025e40a, // n0x1401 c0x0000 (---------------) + I cheltenham
+ 0x0030b4cd, // n0x1402 c0x0000 (---------------) + I chesapeakebay
+ 0x00209dc7, // n0x1403 c0x0000 (---------------) + I chicago
+ 0x0026d0c8, // n0x1404 c0x0000 (---------------) + I children
+ 0x0026d0c9, // n0x1405 c0x0000 (---------------) + I childrens
+ 0x0026d0cf, // n0x1406 c0x0000 (---------------) + I childrensgarden
+ 0x0035b84c, // n0x1407 c0x0000 (---------------) + I chiropractic
+ 0x002acd89, // n0x1408 c0x0000 (---------------) + I chocolate
+ 0x002a6c4e, // n0x1409 c0x0000 (---------------) + I christiansburg
+ 0x0035acca, // n0x140a c0x0000 (---------------) + I cincinnati
+ 0x00301b46, // n0x140b c0x0000 (---------------) + I cinema
+ 0x0034cc06, // n0x140c c0x0000 (---------------) + I circus
+ 0x00360a0c, // n0x140d c0x0000 (---------------) + I civilisation
+ 0x00365f8c, // n0x140e c0x0000 (---------------) + I civilization
+ 0x0036c688, // n0x140f c0x0000 (---------------) + I civilwar
+ 0x00398187, // n0x1410 c0x0000 (---------------) + I clinton
+ 0x002a6b05, // n0x1411 c0x0000 (---------------) + I clock
+ 0x0030f484, // n0x1412 c0x0000 (---------------) + I coal
+ 0x0038280e, // n0x1413 c0x0000 (---------------) + I coastaldefence
+ 0x00320804, // n0x1414 c0x0000 (---------------) + I cody
+ 0x00382f47, // n0x1415 c0x0000 (---------------) + I coldwar
+ 0x0021deca, // n0x1416 c0x0000 (---------------) + I collection
+ 0x0022df94, // n0x1417 c0x0000 (---------------) + I colonialwilliamsburg
+ 0x0022e68f, // n0x1418 c0x0000 (---------------) + I coloradoplateau
+ 0x0021ca08, // n0x1419 c0x0000 (---------------) + I columbia
+ 0x0022eb08, // n0x141a c0x0000 (---------------) + I columbus
+ 0x0035d68d, // n0x141b c0x0000 (---------------) + I communication
+ 0x0035d68e, // n0x141c c0x0000 (---------------) + I communications
+ 0x0022f149, // n0x141d c0x0000 (---------------) + I community
+ 0x00230608, // n0x141e c0x0000 (---------------) + I computer
+ 0x0023060f, // n0x141f c0x0000 (---------------) + I computerhistory
+ 0x0023460c, // n0x1420 c0x0000 (---------------) + I contemporary
+ 0x0023460f, // n0x1421 c0x0000 (---------------) + I contemporaryart
+ 0x00236007, // n0x1422 c0x0000 (---------------) + I convent
+ 0x0023924a, // n0x1423 c0x0000 (---------------) + I copenhagen
+ 0x0021ac8b, // n0x1424 c0x0000 (---------------) + I corporation
+ 0x0023b2c8, // n0x1425 c0x0000 (---------------) + I corvette
+ 0x0023bc87, // n0x1426 c0x0000 (---------------) + I costume
+ 0x00337c8d, // n0x1427 c0x0000 (---------------) + I countryestate
+ 0x0031e7c6, // n0x1428 c0x0000 (---------------) + I county
+ 0x00243b46, // n0x1429 c0x0000 (---------------) + I crafts
+ 0x0023d949, // n0x142a c0x0000 (---------------) + I cranbrook
+ 0x0031ca08, // n0x142b c0x0000 (---------------) + I creation
+ 0x002410c8, // n0x142c c0x0000 (---------------) + I cultural
+ 0x002410ce, // n0x142d c0x0000 (---------------) + I culturalcenter
+ 0x002ce5c7, // n0x142e c0x0000 (---------------) + I culture
+ 0x002bba85, // n0x142f c0x0000 (---------------) + I cyber
+ 0x00242545, // n0x1430 c0x0000 (---------------) + I cymru
+ 0x00202684, // n0x1431 c0x0000 (---------------) + I dali
+ 0x0027c146, // n0x1432 c0x0000 (---------------) + I dallas
+ 0x00339908, // n0x1433 c0x0000 (---------------) + I database
+ 0x00226103, // n0x1434 c0x0000 (---------------) + I ddr
+ 0x00256f0e, // n0x1435 c0x0000 (---------------) + I decorativearts
+ 0x00338048, // n0x1436 c0x0000 (---------------) + I delaware
+ 0x00272e8b, // n0x1437 c0x0000 (---------------) + I delmenhorst
+ 0x0022db87, // n0x1438 c0x0000 (---------------) + I denmark
+ 0x0026c845, // n0x1439 c0x0000 (---------------) + I depot
+ 0x00222ec6, // n0x143a c0x0000 (---------------) + I design
+ 0x002a07c7, // n0x143b c0x0000 (---------------) + I detroit
+ 0x002efd48, // n0x143c c0x0000 (---------------) + I dinosaur
+ 0x0033b449, // n0x143d c0x0000 (---------------) + I discovery
+ 0x0031ea45, // n0x143e c0x0000 (---------------) + I dolls
+ 0x0027e288, // n0x143f c0x0000 (---------------) + I donostia
+ 0x00205346, // n0x1440 c0x0000 (---------------) + I durham
+ 0x0036ae0a, // n0x1441 c0x0000 (---------------) + I eastafrica
+ 0x00382709, // n0x1442 c0x0000 (---------------) + I eastcoast
+ 0x002349c9, // n0x1443 c0x0000 (---------------) + I education
+ 0x002349cb, // n0x1444 c0x0000 (---------------) + I educational
+ 0x00283508, // n0x1445 c0x0000 (---------------) + I egyptian
+ 0x0027ccc9, // n0x1446 c0x0000 (---------------) + I eisenbahn
+ 0x0020f686, // n0x1447 c0x0000 (---------------) + I elburg
+ 0x0020beca, // n0x1448 c0x0000 (---------------) + I elvendrell
+ 0x0022d5ca, // n0x1449 c0x0000 (---------------) + I embroidery
+ 0x0023944c, // n0x144a c0x0000 (---------------) + I encyclopedic
+ 0x002c45c7, // n0x144b c0x0000 (---------------) + I england
+ 0x0038da0a, // n0x144c c0x0000 (---------------) + I entomology
+ 0x0032b7cb, // n0x144d c0x0000 (---------------) + I environment
+ 0x0032b7d9, // n0x144e c0x0000 (---------------) + I environmentalconservation
+ 0x0022b688, // n0x144f c0x0000 (---------------) + I epilepsy
+ 0x00240d85, // n0x1450 c0x0000 (---------------) + I essex
+ 0x002bf586, // n0x1451 c0x0000 (---------------) + I estate
+ 0x0030c209, // n0x1452 c0x0000 (---------------) + I ethnology
+ 0x003a3906, // n0x1453 c0x0000 (---------------) + I exeter
+ 0x0021218a, // n0x1454 c0x0000 (---------------) + I exhibition
+ 0x0036c346, // n0x1455 c0x0000 (---------------) + I family
+ 0x002a0f44, // n0x1456 c0x0000 (---------------) + I farm
+ 0x002bf70d, // n0x1457 c0x0000 (---------------) + I farmequipment
+ 0x00302a87, // n0x1458 c0x0000 (---------------) + I farmers
+ 0x002a0f49, // n0x1459 c0x0000 (---------------) + I farmstead
+ 0x00364685, // n0x145a c0x0000 (---------------) + I field
+ 0x00364a48, // n0x145b c0x0000 (---------------) + I figueres
+ 0x00375e09, // n0x145c c0x0000 (---------------) + I filatelia
+ 0x00243ec4, // n0x145d c0x0000 (---------------) + I film
+ 0x00244587, // n0x145e c0x0000 (---------------) + I fineart
+ 0x00244588, // n0x145f c0x0000 (---------------) + I finearts
+ 0x00245547, // n0x1460 c0x0000 (---------------) + I finland
+ 0x0025fa48, // n0x1461 c0x0000 (---------------) + I flanders
+ 0x0024aec7, // n0x1462 c0x0000 (---------------) + I florida
+ 0x0023bb05, // n0x1463 c0x0000 (---------------) + I force
+ 0x00252dcc, // n0x1464 c0x0000 (---------------) + I fortmissoula
+ 0x002536c9, // n0x1465 c0x0000 (---------------) + I fortworth
+ 0x002b370a, // n0x1466 c0x0000 (---------------) + I foundation
+ 0x00381989, // n0x1467 c0x0000 (---------------) + I francaise
+ 0x00338849, // n0x1468 c0x0000 (---------------) + I frankfurt
+ 0x0024fa0c, // n0x1469 c0x0000 (---------------) + I franziskaner
+ 0x002e0c8b, // n0x146a c0x0000 (---------------) + I freemasonry
+ 0x002554c8, // n0x146b c0x0000 (---------------) + I freiburg
+ 0x00257548, // n0x146c c0x0000 (---------------) + I fribourg
+ 0x0025a904, // n0x146d c0x0000 (---------------) + I frog
+ 0x00279fc8, // n0x146e c0x0000 (---------------) + I fundacio
+ 0x0027ae09, // n0x146f c0x0000 (---------------) + I furniture
+ 0x00397d47, // n0x1470 c0x0000 (---------------) + I gallery
+ 0x002172c6, // n0x1471 c0x0000 (---------------) + I garden
+ 0x0023f6c7, // n0x1472 c0x0000 (---------------) + I gateway
+ 0x0033b6c9, // n0x1473 c0x0000 (---------------) + I geelvinck
+ 0x0039174b, // n0x1474 c0x0000 (---------------) + I gemological
+ 0x00321a47, // n0x1475 c0x0000 (---------------) + I geology
+ 0x0031e1c7, // n0x1476 c0x0000 (---------------) + I georgia
+ 0x0027bbc7, // n0x1477 c0x0000 (---------------) + I giessen
+ 0x003959c4, // n0x1478 c0x0000 (---------------) + I glas
+ 0x003959c5, // n0x1479 c0x0000 (---------------) + I glass
+ 0x0029eac5, // n0x147a c0x0000 (---------------) + I gorge
+ 0x0032e34b, // n0x147b c0x0000 (---------------) + I grandrapids
+ 0x0038aec4, // n0x147c c0x0000 (---------------) + I graz
+ 0x002a9688, // n0x147d c0x0000 (---------------) + I guernsey
+ 0x003723ca, // n0x147e c0x0000 (---------------) + I halloffame
+ 0x00205407, // n0x147f c0x0000 (---------------) + I hamburg
+ 0x0031be07, // n0x1480 c0x0000 (---------------) + I handson
+ 0x00284212, // n0x1481 c0x0000 (---------------) + I harvestcelebration
+ 0x002544c6, // n0x1482 c0x0000 (---------------) + I hawaii
+ 0x002a51c6, // n0x1483 c0x0000 (---------------) + I health
+ 0x0031a68e, // n0x1484 c0x0000 (---------------) + I heimatunduhren
+ 0x00257286, // n0x1485 c0x0000 (---------------) + I hellas
+ 0x0020c9c8, // n0x1486 c0x0000 (---------------) + I helsinki
+ 0x00288bcf, // n0x1487 c0x0000 (---------------) + I hembygdsforbund
+ 0x00395e08, // n0x1488 c0x0000 (---------------) + I heritage
+ 0x0035c688, // n0x1489 c0x0000 (---------------) + I histoire
+ 0x002d620a, // n0x148a c0x0000 (---------------) + I historical
+ 0x002d6211, // n0x148b c0x0000 (---------------) + I historicalsociety
+ 0x0029968e, // n0x148c c0x0000 (---------------) + I historichouses
+ 0x0024e9ca, // n0x148d c0x0000 (---------------) + I historisch
+ 0x0024e9cc, // n0x148e c0x0000 (---------------) + I historisches
+ 0x00230807, // n0x148f c0x0000 (---------------) + I history
+ 0x00230810, // n0x1490 c0x0000 (---------------) + I historyofscience
+ 0x002014c8, // n0x1491 c0x0000 (---------------) + I horology
+ 0x00299885, // n0x1492 c0x0000 (---------------) + I house
+ 0x002a268a, // n0x1493 c0x0000 (---------------) + I humanities
+ 0x0020350c, // n0x1494 c0x0000 (---------------) + I illustration
+ 0x0028a30d, // n0x1495 c0x0000 (---------------) + I imageandsound
+ 0x002986c6, // n0x1496 c0x0000 (---------------) + I indian
+ 0x002986c7, // n0x1497 c0x0000 (---------------) + I indiana
+ 0x002986cc, // n0x1498 c0x0000 (---------------) + I indianapolis
+ 0x002e5e0c, // n0x1499 c0x0000 (---------------) + I indianmarket
+ 0x002f6c4c, // n0x149a c0x0000 (---------------) + I intelligence
+ 0x00281f8b, // n0x149b c0x0000 (---------------) + I interactive
+ 0x0027d044, // n0x149c c0x0000 (---------------) + I iraq
+ 0x0021d3c4, // n0x149d c0x0000 (---------------) + I iron
+ 0x00349309, // n0x149e c0x0000 (---------------) + I isleofman
+ 0x002c6e47, // n0x149f c0x0000 (---------------) + I jamison
+ 0x00332409, // n0x14a0 c0x0000 (---------------) + I jefferson
+ 0x00356749, // n0x14a1 c0x0000 (---------------) + I jerusalem
+ 0x0035e0c7, // n0x14a2 c0x0000 (---------------) + I jewelry
+ 0x00397b06, // n0x14a3 c0x0000 (---------------) + I jewish
+ 0x00397b09, // n0x14a4 c0x0000 (---------------) + I jewishart
+ 0x002a4443, // n0x14a5 c0x0000 (---------------) + I jfk
+ 0x0027d5ca, // n0x14a6 c0x0000 (---------------) + I journalism
+ 0x0030f6c7, // n0x14a7 c0x0000 (---------------) + I judaica
+ 0x002050cb, // n0x14a8 c0x0000 (---------------) + I judygarland
+ 0x0030b34a, // n0x14a9 c0x0000 (---------------) + I juedisches
+ 0x0023d404, // n0x14aa c0x0000 (---------------) + I juif
+ 0x002f15c6, // n0x14ab c0x0000 (---------------) + I karate
+ 0x00276f49, // n0x14ac c0x0000 (---------------) + I karikatur
+ 0x00283944, // n0x14ad c0x0000 (---------------) + I kids
+ 0x0020a88a, // n0x14ae c0x0000 (---------------) + I koebenhavn
+ 0x002a5b85, // n0x14af c0x0000 (---------------) + I koeln
+ 0x002b1105, // n0x14b0 c0x0000 (---------------) + I kunst
+ 0x002b110d, // n0x14b1 c0x0000 (---------------) + I kunstsammlung
+ 0x002b144e, // n0x14b2 c0x0000 (---------------) + I kunstunddesign
+ 0x00315845, // n0x14b3 c0x0000 (---------------) + I labor
+ 0x00386dc6, // n0x14b4 c0x0000 (---------------) + I labour
+ 0x00240907, // n0x14b5 c0x0000 (---------------) + I lajolla
+ 0x002c788a, // n0x14b6 c0x0000 (---------------) + I lancashire
+ 0x00320b06, // n0x14b7 c0x0000 (---------------) + I landes
+ 0x00357784, // n0x14b8 c0x0000 (---------------) + I lans
+ 0x002da5c7, // n0x14b9 c0x0000 (---------------) + I larsson
+ 0x00215a0b, // n0x14ba c0x0000 (---------------) + I lewismiller
+ 0x00351ec7, // n0x14bb c0x0000 (---------------) + I lincoln
+ 0x0020c104, // n0x14bc c0x0000 (---------------) + I linz
+ 0x002d8446, // n0x14bd c0x0000 (---------------) + I living
+ 0x002d844d, // n0x14be c0x0000 (---------------) + I livinghistory
+ 0x0023a18c, // n0x14bf c0x0000 (---------------) + I localhistory
+ 0x00310546, // n0x14c0 c0x0000 (---------------) + I london
+ 0x002c308a, // n0x14c1 c0x0000 (---------------) + I losangeles
+ 0x00228c06, // n0x14c2 c0x0000 (---------------) + I louvre
+ 0x002925c8, // n0x14c3 c0x0000 (---------------) + I loyalist
+ 0x00312587, // n0x14c4 c0x0000 (---------------) + I lucerne
+ 0x0033938a, // n0x14c5 c0x0000 (---------------) + I luxembourg
+ 0x00233106, // n0x14c6 c0x0000 (---------------) + I luzern
+ 0x00209cc3, // n0x14c7 c0x0000 (---------------) + I mad
+ 0x00306e06, // n0x14c8 c0x0000 (---------------) + I madrid
+ 0x00200188, // n0x14c9 c0x0000 (---------------) + I mallorca
+ 0x00291a4a, // n0x14ca c0x0000 (---------------) + I manchester
+ 0x00262507, // n0x14cb c0x0000 (---------------) + I mansion
+ 0x00262508, // n0x14cc c0x0000 (---------------) + I mansions
+ 0x00269a04, // n0x14cd c0x0000 (---------------) + I manx
+ 0x0027a587, // n0x14ce c0x0000 (---------------) + I marburg
+ 0x00219888, // n0x14cf c0x0000 (---------------) + I maritime
+ 0x0029a808, // n0x14d0 c0x0000 (---------------) + I maritimo
+ 0x0026cc48, // n0x14d1 c0x0000 (---------------) + I maryland
+ 0x002b4c8a, // n0x14d2 c0x0000 (---------------) + I marylhurst
+ 0x002fb545, // n0x14d3 c0x0000 (---------------) + I media
+ 0x00234ec7, // n0x14d4 c0x0000 (---------------) + I medical
+ 0x0024e813, // n0x14d5 c0x0000 (---------------) + I medizinhistorisches
+ 0x002515c6, // n0x14d6 c0x0000 (---------------) + I meeres
+ 0x00338b08, // n0x14d7 c0x0000 (---------------) + I memorial
+ 0x00221409, // n0x14d8 c0x0000 (---------------) + I mesaverde
+ 0x0020f988, // n0x14d9 c0x0000 (---------------) + I michigan
+ 0x0021064b, // n0x14da c0x0000 (---------------) + I midatlantic
+ 0x002b2c48, // n0x14db c0x0000 (---------------) + I military
+ 0x00215b44, // n0x14dc c0x0000 (---------------) + I mill
+ 0x0028cf86, // n0x14dd c0x0000 (---------------) + I miners
+ 0x002f8106, // n0x14de c0x0000 (---------------) + I mining
+ 0x002d3949, // n0x14df c0x0000 (---------------) + I minnesota
+ 0x002b92c7, // n0x14e0 c0x0000 (---------------) + I missile
+ 0x00252ec8, // n0x14e1 c0x0000 (---------------) + I missoula
+ 0x003906c6, // n0x14e2 c0x0000 (---------------) + I modern
+ 0x0020ed84, // n0x14e3 c0x0000 (---------------) + I moma
+ 0x002c5005, // n0x14e4 c0x0000 (---------------) + I money
+ 0x002be988, // n0x14e5 c0x0000 (---------------) + I monmouth
+ 0x002bf0ca, // n0x14e6 c0x0000 (---------------) + I monticello
+ 0x002bf388, // n0x14e7 c0x0000 (---------------) + I montreal
+ 0x002c5ac6, // n0x14e8 c0x0000 (---------------) + I moscow
+ 0x0029214a, // n0x14e9 c0x0000 (---------------) + I motorcycle
+ 0x002f6388, // n0x14ea c0x0000 (---------------) + I muenchen
+ 0x002c8108, // n0x14eb c0x0000 (---------------) + I muenster
+ 0x002c9488, // n0x14ec c0x0000 (---------------) + I mulhouse
+ 0x002c9e46, // n0x14ed c0x0000 (---------------) + I muncie
+ 0x002cc246, // n0x14ee c0x0000 (---------------) + I museet
+ 0x0030910c, // n0x14ef c0x0000 (---------------) + I museumcenter
+ 0x002cc750, // n0x14f0 c0x0000 (---------------) + I museumvereniging
+ 0x00270385, // n0x14f1 c0x0000 (---------------) + I music
+ 0x002fd6c8, // n0x14f2 c0x0000 (---------------) + I national
+ 0x002fd6d0, // n0x14f3 c0x0000 (---------------) + I nationalfirearms
+ 0x00395c10, // n0x14f4 c0x0000 (---------------) + I nationalheritage
+ 0x002a1e0e, // n0x14f5 c0x0000 (---------------) + I nativeamerican
+ 0x00308d8e, // n0x14f6 c0x0000 (---------------) + I naturalhistory
+ 0x00308d94, // n0x14f7 c0x0000 (---------------) + I naturalhistorymuseum
+ 0x0032bdcf, // n0x14f8 c0x0000 (---------------) + I naturalsciences
+ 0x0032c186, // n0x14f9 c0x0000 (---------------) + I nature
+ 0x003100d1, // n0x14fa c0x0000 (---------------) + I naturhistorisches
+ 0x003196d3, // n0x14fb c0x0000 (---------------) + I natuurwetenschappen
+ 0x00319b48, // n0x14fc c0x0000 (---------------) + I naumburg
+ 0x0039d445, // n0x14fd c0x0000 (---------------) + I naval
+ 0x00272148, // n0x14fe c0x0000 (---------------) + I nebraska
+ 0x002cdc05, // n0x14ff c0x0000 (---------------) + I neues
+ 0x00226c8c, // n0x1500 c0x0000 (---------------) + I newhampshire
+ 0x00366dc9, // n0x1501 c0x0000 (---------------) + I newjersey
+ 0x0021dd09, // n0x1502 c0x0000 (---------------) + I newmexico
+ 0x0023f447, // n0x1503 c0x0000 (---------------) + I newport
+ 0x0021fe49, // n0x1504 c0x0000 (---------------) + I newspaper
+ 0x00302cc7, // n0x1505 c0x0000 (---------------) + I newyork
+ 0x002c5ec6, // n0x1506 c0x0000 (---------------) + I niepce
+ 0x00351647, // n0x1507 c0x0000 (---------------) + I norfolk
+ 0x00238445, // n0x1508 c0x0000 (---------------) + I north
+ 0x00332603, // n0x1509 c0x0000 (---------------) + I nrw
+ 0x002262c9, // n0x150a c0x0000 (---------------) + I nuernberg
+ 0x00209709, // n0x150b c0x0000 (---------------) + I nuremberg
+ 0x0036c603, // n0x150c c0x0000 (---------------) + I nyc
+ 0x0039ab44, // n0x150d c0x0000 (---------------) + I nyny
+ 0x002ff6cd, // n0x150e c0x0000 (---------------) + I oceanographic
+ 0x00393d4f, // n0x150f c0x0000 (---------------) + I oceanographique
+ 0x002f5c85, // n0x1510 c0x0000 (---------------) + I omaha
+ 0x00316946, // n0x1511 c0x0000 (---------------) + I online
+ 0x00393bc7, // n0x1512 c0x0000 (---------------) + I ontario
+ 0x0033cc07, // n0x1513 c0x0000 (---------------) + I openair
+ 0x002811c6, // n0x1514 c0x0000 (---------------) + I oregon
+ 0x002811cb, // n0x1515 c0x0000 (---------------) + I oregontrail
+ 0x0029ad85, // n0x1516 c0x0000 (---------------) + I otago
+ 0x00395106, // n0x1517 c0x0000 (---------------) + I oxford
+ 0x00350507, // n0x1518 c0x0000 (---------------) + I pacific
+ 0x00269509, // n0x1519 c0x0000 (---------------) + I paderborn
+ 0x003097c6, // n0x151a c0x0000 (---------------) + I palace
+ 0x002ff5c5, // n0x151b c0x0000 (---------------) + I paleo
+ 0x0022408b, // n0x151c c0x0000 (---------------) + I palmsprings
+ 0x00339646, // n0x151d c0x0000 (---------------) + I panama
+ 0x00252285, // n0x151e c0x0000 (---------------) + I paris
+ 0x002a6148, // n0x151f c0x0000 (---------------) + I pasadena
+ 0x002ec948, // n0x1520 c0x0000 (---------------) + I pharmacy
+ 0x002cf34c, // n0x1521 c0x0000 (---------------) + I philadelphia
+ 0x002cf350, // n0x1522 c0x0000 (---------------) + I philadelphiaarea
+ 0x002cfa09, // n0x1523 c0x0000 (---------------) + I philately
+ 0x002cfe47, // n0x1524 c0x0000 (---------------) + I phoenix
+ 0x002d02cb, // n0x1525 c0x0000 (---------------) + I photography
+ 0x002d1346, // n0x1526 c0x0000 (---------------) + I pilots
+ 0x002d1fca, // n0x1527 c0x0000 (---------------) + I pittsburgh
+ 0x002d2a8b, // n0x1528 c0x0000 (---------------) + I planetarium
+ 0x002d320a, // n0x1529 c0x0000 (---------------) + I plantation
+ 0x002d3486, // n0x152a c0x0000 (---------------) + I plants
+ 0x002d49c5, // n0x152b c0x0000 (---------------) + I plaza
+ 0x002bcc86, // n0x152c c0x0000 (---------------) + I portal
+ 0x0027b748, // n0x152d c0x0000 (---------------) + I portland
+ 0x0023f50a, // n0x152e c0x0000 (---------------) + I portlligat
+ 0x0035d31c, // n0x152f c0x0000 (---------------) + I posts-and-telecommunications
+ 0x002da84c, // n0x1530 c0x0000 (---------------) + I preservation
+ 0x002dab48, // n0x1531 c0x0000 (---------------) + I presidio
+ 0x00240d05, // n0x1532 c0x0000 (---------------) + I press
+ 0x002dd187, // n0x1533 c0x0000 (---------------) + I project
+ 0x0028ff46, // n0x1534 c0x0000 (---------------) + I public
+ 0x0037f3c5, // n0x1535 c0x0000 (---------------) + I pubol
+ 0x0021a006, // n0x1536 c0x0000 (---------------) + I quebec
+ 0x00281388, // n0x1537 c0x0000 (---------------) + I railroad
+ 0x002aff47, // n0x1538 c0x0000 (---------------) + I railway
+ 0x00290208, // n0x1539 c0x0000 (---------------) + I research
+ 0x002d2f8a, // n0x153a c0x0000 (---------------) + I resistance
+ 0x00310d0c, // n0x153b c0x0000 (---------------) + I riodejaneiro
+ 0x00310f89, // n0x153c c0x0000 (---------------) + I rochester
+ 0x0037f707, // n0x153d c0x0000 (---------------) + I rockart
+ 0x00227784, // n0x153e c0x0000 (---------------) + I roma
+ 0x0024b506, // n0x153f c0x0000 (---------------) + I russia
+ 0x0035c20a, // n0x1540 c0x0000 (---------------) + I saintlouis
+ 0x00356845, // n0x1541 c0x0000 (---------------) + I salem
+ 0x0039328c, // n0x1542 c0x0000 (---------------) + I salvadordali
+ 0x00395808, // n0x1543 c0x0000 (---------------) + I salzburg
+ 0x00237e48, // n0x1544 c0x0000 (---------------) + I sandiego
+ 0x00207f0c, // n0x1545 c0x0000 (---------------) + I sanfrancisco
+ 0x0021164c, // n0x1546 c0x0000 (---------------) + I santabarbara
+ 0x00211d49, // n0x1547 c0x0000 (---------------) + I santacruz
+ 0x00211f87, // n0x1548 c0x0000 (---------------) + I santafe
+ 0x002fa40c, // n0x1549 c0x0000 (---------------) + I saskatchewan
+ 0x0034ef04, // n0x154a c0x0000 (---------------) + I satx
+ 0x0038340a, // n0x154b c0x0000 (---------------) + I savannahga
+ 0x0039554c, // n0x154c c0x0000 (---------------) + I schlesisches
+ 0x0026adcb, // n0x154d c0x0000 (---------------) + I schoenbrunn
+ 0x0023120b, // n0x154e c0x0000 (---------------) + I schokoladen
+ 0x00231d06, // n0x154f c0x0000 (---------------) + I school
+ 0x0023de07, // n0x1550 c0x0000 (---------------) + I schweiz
+ 0x00230a47, // n0x1551 c0x0000 (---------------) + I science
+ 0x00230a4f, // n0x1552 c0x0000 (---------------) + I science-fiction
+ 0x002e6751, // n0x1553 c0x0000 (---------------) + I scienceandhistory
+ 0x0039cfd2, // n0x1554 c0x0000 (---------------) + I scienceandindustry
+ 0x0023fa4d, // n0x1555 c0x0000 (---------------) + I sciencecenter
+ 0x0023fa4e, // n0x1556 c0x0000 (---------------) + I sciencecenters
+ 0x0023fd8e, // n0x1557 c0x0000 (---------------) + I sciencehistory
+ 0x0032bf88, // n0x1558 c0x0000 (---------------) + I sciences
+ 0x0032bf92, // n0x1559 c0x0000 (---------------) + I sciencesnaturelles
+ 0x00208148, // n0x155a c0x0000 (---------------) + I scotland
+ 0x002f1d87, // n0x155b c0x0000 (---------------) + I seaport
+ 0x0024930a, // n0x155c c0x0000 (---------------) + I settlement
+ 0x0020a4c8, // n0x155d c0x0000 (---------------) + I settlers
+ 0x00257245, // n0x155e c0x0000 (---------------) + I shell
+ 0x002e490a, // n0x155f c0x0000 (---------------) + I sherbrooke
+ 0x0021c2c7, // n0x1560 c0x0000 (---------------) + I sibenik
+ 0x003531c4, // n0x1561 c0x0000 (---------------) + I silk
+ 0x0021cf83, // n0x1562 c0x0000 (---------------) + I ski
+ 0x0028dec5, // n0x1563 c0x0000 (---------------) + I skole
+ 0x002d6487, // n0x1564 c0x0000 (---------------) + I society
+ 0x002db8c7, // n0x1565 c0x0000 (---------------) + I sologne
+ 0x0028a50e, // n0x1566 c0x0000 (---------------) + I soundandvision
+ 0x00327f4d, // n0x1567 c0x0000 (---------------) + I southcarolina
+ 0x0032ad49, // n0x1568 c0x0000 (---------------) + I southwest
+ 0x00335085, // n0x1569 c0x0000 (---------------) + I space
+ 0x0032e5c3, // n0x156a c0x0000 (---------------) + I spy
+ 0x0027c606, // n0x156b c0x0000 (---------------) + I square
+ 0x00361245, // n0x156c c0x0000 (---------------) + I stadt
+ 0x002730c8, // n0x156d c0x0000 (---------------) + I stalbans
+ 0x00317c49, // n0x156e c0x0000 (---------------) + I starnberg
+ 0x0028e7c5, // n0x156f c0x0000 (---------------) + I state
+ 0x00337e8f, // n0x1570 c0x0000 (---------------) + I stateofdelaware
+ 0x002d4807, // n0x1571 c0x0000 (---------------) + I station
+ 0x003658c5, // n0x1572 c0x0000 (---------------) + I steam
+ 0x00305b8a, // n0x1573 c0x0000 (---------------) + I steiermark
+ 0x002b4e86, // n0x1574 c0x0000 (---------------) + I stjohn
+ 0x00292749, // n0x1575 c0x0000 (---------------) + I stockholm
+ 0x002e058c, // n0x1576 c0x0000 (---------------) + I stpetersburg
+ 0x002e1909, // n0x1577 c0x0000 (---------------) + I stuttgart
+ 0x002068c6, // n0x1578 c0x0000 (---------------) + I suisse
+ 0x003721cc, // n0x1579 c0x0000 (---------------) + I surgeonshall
+ 0x002e2146, // n0x157a c0x0000 (---------------) + I surrey
+ 0x002e4c88, // n0x157b c0x0000 (---------------) + I svizzera
+ 0x002e4e86, // n0x157c c0x0000 (---------------) + I sweden
+ 0x0022b806, // n0x157d c0x0000 (---------------) + I sydney
+ 0x00224d04, // n0x157e c0x0000 (---------------) + I tank
+ 0x00255843, // n0x157f c0x0000 (---------------) + I tcm
+ 0x002a3c4a, // n0x1580 c0x0000 (---------------) + I technology
+ 0x0025ea51, // n0x1581 c0x0000 (---------------) + I telekommunikation
+ 0x0023b44a, // n0x1582 c0x0000 (---------------) + I television
+ 0x002ff185, // n0x1583 c0x0000 (---------------) + I texas
+ 0x002fe987, // n0x1584 c0x0000 (---------------) + I textile
+ 0x0031b107, // n0x1585 c0x0000 (---------------) + I theater
+ 0x00219984, // n0x1586 c0x0000 (---------------) + I time
+ 0x0021998b, // n0x1587 c0x0000 (---------------) + I timekeeping
+ 0x00300d08, // n0x1588 c0x0000 (---------------) + I topology
+ 0x002abe46, // n0x1589 c0x0000 (---------------) + I torino
+ 0x00330f05, // n0x158a c0x0000 (---------------) + I touch
+ 0x002a9404, // n0x158b c0x0000 (---------------) + I town
+ 0x0028b589, // n0x158c c0x0000 (---------------) + I transport
+ 0x0024f1c4, // n0x158d c0x0000 (---------------) + I tree
+ 0x002b2407, // n0x158e c0x0000 (---------------) + I trolley
+ 0x0031f0c5, // n0x158f c0x0000 (---------------) + I trust
+ 0x0031f0c7, // n0x1590 c0x0000 (---------------) + I trustee
+ 0x0031a8c5, // n0x1591 c0x0000 (---------------) + I uhren
+ 0x00330703, // n0x1592 c0x0000 (---------------) + I ulm
+ 0x002f1c48, // n0x1593 c0x0000 (---------------) + I undersea
+ 0x00281a0a, // n0x1594 c0x0000 (---------------) + I university
+ 0x00204783, // n0x1595 c0x0000 (---------------) + I usa
+ 0x0020478a, // n0x1596 c0x0000 (---------------) + I usantiques
+ 0x00285b46, // n0x1597 c0x0000 (---------------) + I usarts
+ 0x00337c0f, // n0x1598 c0x0000 (---------------) + I uscountryestate
+ 0x0034cd09, // n0x1599 c0x0000 (---------------) + I usculture
+ 0x00256e90, // n0x159a c0x0000 (---------------) + I usdecorativearts
+ 0x00266448, // n0x159b c0x0000 (---------------) + I usgarden
+ 0x002c6149, // n0x159c c0x0000 (---------------) + I ushistory
+ 0x00294047, // n0x159d c0x0000 (---------------) + I ushuaia
+ 0x002d83cf, // n0x159e c0x0000 (---------------) + I uslivinghistory
+ 0x002e1444, // n0x159f c0x0000 (---------------) + I utah
+ 0x002fa7c4, // n0x15a0 c0x0000 (---------------) + I uvic
+ 0x00213f46, // n0x15a1 c0x0000 (---------------) + I valley
+ 0x00265f06, // n0x15a2 c0x0000 (---------------) + I vantaa
+ 0x00314eca, // n0x15a3 c0x0000 (---------------) + I versailles
+ 0x0036cf46, // n0x15a4 c0x0000 (---------------) + I viking
+ 0x002f0507, // n0x15a5 c0x0000 (---------------) + I village
+ 0x002ee6c8, // n0x15a6 c0x0000 (---------------) + I virginia
+ 0x002ee8c7, // n0x15a7 c0x0000 (---------------) + I virtual
+ 0x002eea87, // n0x15a8 c0x0000 (---------------) + I virtuel
+ 0x003434ca, // n0x15a9 c0x0000 (---------------) + I vlaanderen
+ 0x002f1a8b, // n0x15aa c0x0000 (---------------) + I volkenkunde
+ 0x0030e445, // n0x15ab c0x0000 (---------------) + I wales
+ 0x0039cc08, // n0x15ac c0x0000 (---------------) + I wallonie
+ 0x00207c83, // n0x15ad c0x0000 (---------------) + I war
+ 0x00227b8c, // n0x15ae c0x0000 (---------------) + I washingtondc
+ 0x0037364f, // n0x15af c0x0000 (---------------) + I watch-and-clock
+ 0x002a690d, // n0x15b0 c0x0000 (---------------) + I watchandclock
+ 0x00238587, // n0x15b1 c0x0000 (---------------) + I western
+ 0x0032ae89, // n0x15b2 c0x0000 (---------------) + I westfalen
+ 0x00330c07, // n0x15b3 c0x0000 (---------------) + I whaling
+ 0x0023eb88, // n0x15b4 c0x0000 (---------------) + I wildlife
+ 0x0022e18c, // n0x15b5 c0x0000 (---------------) + I williamsburg
+ 0x0025b848, // n0x15b6 c0x0000 (---------------) + I windmill
+ 0x00332b48, // n0x15b7 c0x0000 (---------------) + I workshop
+ 0x0030be8e, // n0x15b8 c0x0000 (---------------) + I xn--9dbhblg6di
+ 0x0031cc14, // n0x15b9 c0x0000 (---------------) + I xn--comunicaes-v6a2o
+ 0x0031d124, // n0x15ba c0x0000 (---------------) + I xn--correios-e-telecomunicaes-ghc29a
+ 0x00336e4a, // n0x15bb c0x0000 (---------------) + I xn--h1aegh
+ 0x003537cb, // n0x15bc c0x0000 (---------------) + I xn--lns-qla
+ 0x00302d84, // n0x15bd c0x0000 (---------------) + I york
+ 0x00302d89, // n0x15be c0x0000 (---------------) + I yorkshire
+ 0x003535c8, // n0x15bf c0x0000 (---------------) + I yosemite
+ 0x00242c85, // n0x15c0 c0x0000 (---------------) + I youth
+ 0x00225c0a, // n0x15c1 c0x0000 (---------------) + I zoological
+ 0x0027c7c7, // n0x15c2 c0x0000 (---------------) + I zoology
+ 0x002bcb84, // n0x15c3 c0x0000 (---------------) + I aero
+ 0x0030a143, // n0x15c4 c0x0000 (---------------) + I biz
+ 0x0022edc3, // n0x15c5 c0x0000 (---------------) + I com
+ 0x00238284, // n0x15c6 c0x0000 (---------------) + I coop
+ 0x002349c3, // n0x15c7 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x15c8 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x15c9 c0x0000 (---------------) + I info
+ 0x0026f683, // n0x15ca c0x0000 (---------------) + I int
+ 0x00215b43, // n0x15cb c0x0000 (---------------) + I mil
+ 0x002cc746, // n0x15cc c0x0000 (---------------) + I museum
+ 0x0027ca84, // n0x15cd c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x15ce c0x0000 (---------------) + I net
+ 0x00229a83, // n0x15cf c0x0000 (---------------) + I org
+ 0x00220283, // n0x15d0 c0x0000 (---------------) + I pro
+ 0x00205882, // n0x15d1 c0x0000 (---------------) + I ac
+ 0x0030a143, // n0x15d2 c0x0000 (---------------) + I biz
+ 0x00208182, // n0x15d3 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x15d4 c0x0000 (---------------) + I com
+ 0x00238284, // n0x15d5 c0x0000 (---------------) + I coop
+ 0x002349c3, // n0x15d6 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x15d7 c0x0000 (---------------) + I gov
+ 0x0026f683, // n0x15d8 c0x0000 (---------------) + I int
+ 0x002cc746, // n0x15d9 c0x0000 (---------------) + I museum
+ 0x0021d8c3, // n0x15da c0x0000 (---------------) + I net
+ 0x00229a83, // n0x15db c0x0000 (---------------) + I org
+ 0x000f5248, // n0x15dc c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x15dd c0x0000 (---------------) + I com
+ 0x002349c3, // n0x15de c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x15df c0x0000 (---------------) + I gob
+ 0x0021d8c3, // n0x15e0 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x15e1 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x15e2 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x15e3 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x15e4 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x15e5 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x15e6 c0x0000 (---------------) + I mil
+ 0x0027ca84, // n0x15e7 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x15e8 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x15e9 c0x0000 (---------------) + I org
+ 0x00739808, // n0x15ea c0x0001 (---------------) ! I teledata
+ 0x00200302, // n0x15eb c0x0000 (---------------) + I ca
+ 0x0021db82, // n0x15ec c0x0000 (---------------) + I cc
+ 0x00208182, // n0x15ed c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x15ee c0x0000 (---------------) + I com
+ 0x00204d42, // n0x15ef c0x0000 (---------------) + I dr
+ 0x002020c2, // n0x15f0 c0x0000 (---------------) + I in
+ 0x0038a144, // n0x15f1 c0x0000 (---------------) + I info
+ 0x00207804, // n0x15f2 c0x0000 (---------------) + I mobi
+ 0x00214b82, // n0x15f3 c0x0000 (---------------) + I mx
+ 0x0027ca84, // n0x15f4 c0x0000 (---------------) + I name
+ 0x00200282, // n0x15f5 c0x0000 (---------------) + I or
+ 0x00229a83, // n0x15f6 c0x0000 (---------------) + I org
+ 0x00220283, // n0x15f7 c0x0000 (---------------) + I pro
+ 0x00231d06, // n0x15f8 c0x0000 (---------------) + I school
+ 0x00206fc2, // n0x15f9 c0x0000 (---------------) + I tv
+ 0x00202982, // n0x15fa c0x0000 (---------------) + I us
+ 0x0021fec2, // n0x15fb c0x0000 (---------------) + I ws
+ 0x37e21343, // n0x15fc c0x00df (n0x15fe-n0x15ff) o I her
+ 0x38210ac3, // n0x15fd c0x00e0 (n0x15ff-n0x1600) o I his
+ 0x0004f7c6, // n0x15fe c0x0000 (---------------) + forgot
+ 0x0004f7c6, // n0x15ff c0x0000 (---------------) + forgot
+ 0x002b1c44, // n0x1600 c0x0000 (---------------) + I asso
+ 0x001068cc, // n0x1601 c0x0000 (---------------) + at-band-camp
+ 0x0007758c, // n0x1602 c0x0000 (---------------) + azure-mobile
+ 0x000ba84d, // n0x1603 c0x0000 (---------------) + azurewebsites
+ 0x00029007, // n0x1604 c0x0000 (---------------) + blogdns
+ 0x0001f188, // n0x1605 c0x0000 (---------------) + broke-it
+ 0x0019304a, // n0x1606 c0x0000 (---------------) + buyshouses
+ 0x38e39705, // n0x1607 c0x00e3 (n0x1632-n0x1633) o I cdn77
+ 0x00039709, // n0x1608 c0x0000 (---------------) + cdn77-ssl
+ 0x0017e448, // n0x1609 c0x0000 (---------------) + cloudapp
+ 0x0002c88a, // n0x160a c0x0000 (---------------) + cloudfront
+ 0x00147e08, // n0x160b c0x0000 (---------------) + dnsalias
+ 0x00074607, // n0x160c c0x0000 (---------------) + dnsdojo
+ 0x00006e47, // n0x160d c0x0000 (---------------) + does-it
+ 0x00168789, // n0x160e c0x0000 (---------------) + dontexist
+ 0x0018bd88, // n0x160f c0x0000 (---------------) + dynalias
+ 0x0005ce49, // n0x1610 c0x0000 (---------------) + dynathome
+ 0x0009f90d, // n0x1611 c0x0000 (---------------) + endofinternet
+ 0x392e01c6, // n0x1612 c0x00e4 (n0x1633-n0x1635) o I fastly
+ 0x0005b687, // n0x1613 c0x0000 (---------------) + from-az
+ 0x0005d787, // n0x1614 c0x0000 (---------------) + from-co
+ 0x00061fc7, // n0x1615 c0x0000 (---------------) + from-la
+ 0x00068a07, // n0x1616 c0x0000 (---------------) + from-ny
+ 0x00009582, // n0x1617 c0x0000 (---------------) + gb
+ 0x00163107, // n0x1618 c0x0000 (---------------) + gets-it
+ 0x0005e5cc, // n0x1619 c0x0000 (---------------) + ham-radio-op
+ 0x000ad607, // n0x161a c0x0000 (---------------) + homeftp
+ 0x0009c286, // n0x161b c0x0000 (---------------) + homeip
+ 0x0009c509, // n0x161c c0x0000 (---------------) + homelinux
+ 0x0009d988, // n0x161d c0x0000 (---------------) + homeunix
+ 0x0000d0c2, // n0x161e c0x0000 (---------------) + hu
+ 0x000020c2, // n0x161f c0x0000 (---------------) + in
+ 0x0010078b, // n0x1620 c0x0000 (---------------) + in-the-band
+ 0x0000fe09, // n0x1621 c0x0000 (---------------) + is-a-chef
+ 0x0005f049, // n0x1622 c0x0000 (---------------) + is-a-geek
+ 0x000fff08, // n0x1623 c0x0000 (---------------) + isa-geek
+ 0x000a8bc2, // n0x1624 c0x0000 (---------------) + jp
+ 0x0014c909, // n0x1625 c0x0000 (---------------) + kicks-ass
+ 0x0001f70d, // n0x1626 c0x0000 (---------------) + office-on-the
+ 0x000d7147, // n0x1627 c0x0000 (---------------) + podzone
+ 0x0004700d, // n0x1628 c0x0000 (---------------) + scrapper-site
+ 0x00001d42, // n0x1629 c0x0000 (---------------) + se
+ 0x00053986, // n0x162a c0x0000 (---------------) + selfip
+ 0x00088508, // n0x162b c0x0000 (---------------) + sells-it
+ 0x000c9608, // n0x162c c0x0000 (---------------) + servebbs
+ 0x0006e648, // n0x162d c0x0000 (---------------) + serveftp
+ 0x0004c288, // n0x162e c0x0000 (---------------) + thruhere
+ 0x00000f82, // n0x162f c0x0000 (---------------) + uk
+ 0x00123b06, // n0x1630 c0x0000 (---------------) + webhop
+ 0x00009ac2, // n0x1631 c0x0000 (---------------) + za
+ 0x000002c1, // n0x1632 c0x0000 (---------------) + r
+ 0x396db644, // n0x1633 c0x00e5 (n0x1635-n0x1637) o I prod
+ 0x39a39883, // n0x1634 c0x00e6 (n0x1637-n0x163a) o I ssl
+ 0x00000101, // n0x1635 c0x0000 (---------------) + a
+ 0x00005586, // n0x1636 c0x0000 (---------------) + global
+ 0x00000101, // n0x1637 c0x0000 (---------------) + a
+ 0x00000001, // n0x1638 c0x0000 (---------------) + b
+ 0x00005586, // n0x1639 c0x0000 (---------------) + global
+ 0x00243984, // n0x163a c0x0000 (---------------) + I arts
+ 0x0022edc3, // n0x163b c0x0000 (---------------) + I com
+ 0x00247a04, // n0x163c c0x0000 (---------------) + I firm
+ 0x0038a144, // n0x163d c0x0000 (---------------) + I info
+ 0x0021d8c3, // n0x163e c0x0000 (---------------) + I net
+ 0x002212c5, // n0x163f c0x0000 (---------------) + I other
+ 0x0021ffc3, // n0x1640 c0x0000 (---------------) + I per
+ 0x00226f03, // n0x1641 c0x0000 (---------------) + I rec
+ 0x0038c985, // n0x1642 c0x0000 (---------------) + I store
+ 0x0021fa83, // n0x1643 c0x0000 (---------------) + I web
+ 0x3a62edc3, // n0x1644 c0x00e9 (n0x164d-n0x164e) + I com
+ 0x002349c3, // n0x1645 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1646 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1647 c0x0000 (---------------) + I mil
+ 0x00207804, // n0x1648 c0x0000 (---------------) + I mobi
+ 0x0027ca84, // n0x1649 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x164a c0x0000 (---------------) + I net
+ 0x00229a83, // n0x164b c0x0000 (---------------) + I org
+ 0x00215d43, // n0x164c c0x0000 (---------------) + I sch
+ 0x000f5248, // n0x164d c0x0000 (---------------) + blogspot
+ 0x000f5248, // n0x164e c0x0000 (---------------) + blogspot
+ 0x00364282, // n0x164f c0x0000 (---------------) + I bv
+ 0x00008182, // n0x1650 c0x0000 (---------------) + co
+ 0x3b222142, // n0x1651 c0x00ec (n0x1927-n0x1928) + I aa
+ 0x00379688, // n0x1652 c0x0000 (---------------) + I aarborte
+ 0x002225c6, // n0x1653 c0x0000 (---------------) + I aejrie
+ 0x002b65c6, // n0x1654 c0x0000 (---------------) + I afjord
+ 0x00221f47, // n0x1655 c0x0000 (---------------) + I agdenes
+ 0x3b607142, // n0x1656 c0x00ed (n0x1928-n0x1929) + I ah
+ 0x3bb1b508, // n0x1657 c0x00ee (n0x1929-n0x192a) o I akershus
+ 0x0030ec8a, // n0x1658 c0x0000 (---------------) + I aknoluokta
+ 0x0025b108, // n0x1659 c0x0000 (---------------) + I akrehamn
+ 0x002001c2, // n0x165a c0x0000 (---------------) + I al
+ 0x0030f509, // n0x165b c0x0000 (---------------) + I alaheadju
+ 0x0030e487, // n0x165c c0x0000 (---------------) + I alesund
+ 0x00217246, // n0x165d c0x0000 (---------------) + I algard
+ 0x00235909, // n0x165e c0x0000 (---------------) + I alstahaug
+ 0x00235004, // n0x165f c0x0000 (---------------) + I alta
+ 0x002b7046, // n0x1660 c0x0000 (---------------) + I alvdal
+ 0x002b69c4, // n0x1661 c0x0000 (---------------) + I amli
+ 0x00270f84, // n0x1662 c0x0000 (---------------) + I amot
+ 0x00252a09, // n0x1663 c0x0000 (---------------) + I andasuolo
+ 0x00204e86, // n0x1664 c0x0000 (---------------) + I andebu
+ 0x0036bd45, // n0x1665 c0x0000 (---------------) + I andoy
+ 0x00260185, // n0x1666 c0x0000 (---------------) + I ardal
+ 0x0022f807, // n0x1667 c0x0000 (---------------) + I aremark
+ 0x002b30c7, // n0x1668 c0x0000 (---------------) + I arendal
+ 0x00347544, // n0x1669 c0x0000 (---------------) + I arna
+ 0x00222186, // n0x166a c0x0000 (---------------) + I aseral
+ 0x002dc105, // n0x166b c0x0000 (---------------) + I asker
+ 0x00229385, // n0x166c c0x0000 (---------------) + I askim
+ 0x002ea945, // n0x166d c0x0000 (---------------) + I askoy
+ 0x00385087, // n0x166e c0x0000 (---------------) + I askvoll
+ 0x0022d9c5, // n0x166f c0x0000 (---------------) + I asnes
+ 0x00304089, // n0x1670 c0x0000 (---------------) + I audnedaln
+ 0x002a1605, // n0x1671 c0x0000 (---------------) + I aukra
+ 0x002efe84, // n0x1672 c0x0000 (---------------) + I aure
+ 0x00320a47, // n0x1673 c0x0000 (---------------) + I aurland
+ 0x002bc40e, // n0x1674 c0x0000 (---------------) + I aurskog-holand
+ 0x00301fc9, // n0x1675 c0x0000 (---------------) + I austevoll
+ 0x0031a549, // n0x1676 c0x0000 (---------------) + I austrheim
+ 0x0032b606, // n0x1677 c0x0000 (---------------) + I averoy
+ 0x002e6f88, // n0x1678 c0x0000 (---------------) + I badaddja
+ 0x002a774b, // n0x1679 c0x0000 (---------------) + I bahcavuotna
+ 0x002cd38c, // n0x167a c0x0000 (---------------) + I bahccavuotna
+ 0x00262246, // n0x167b c0x0000 (---------------) + I baidar
+ 0x0036e907, // n0x167c c0x0000 (---------------) + I bajddar
+ 0x00224745, // n0x167d c0x0000 (---------------) + I balat
+ 0x0022d04a, // n0x167e c0x0000 (---------------) + I balestrand
+ 0x00307909, // n0x167f c0x0000 (---------------) + I ballangen
+ 0x002559c9, // n0x1680 c0x0000 (---------------) + I balsfjord
+ 0x002a0b46, // n0x1681 c0x0000 (---------------) + I bamble
+ 0x002e40c5, // n0x1682 c0x0000 (---------------) + I bardu
+ 0x002768c5, // n0x1683 c0x0000 (---------------) + I barum
+ 0x00350189, // n0x1684 c0x0000 (---------------) + I batsfjord
+ 0x002eaacb, // n0x1685 c0x0000 (---------------) + I bearalvahki
+ 0x002742c6, // n0x1686 c0x0000 (---------------) + I beardu
+ 0x0032a546, // n0x1687 c0x0000 (---------------) + I beiarn
+ 0x002094c4, // n0x1688 c0x0000 (---------------) + I berg
+ 0x00283ec6, // n0x1689 c0x0000 (---------------) + I bergen
+ 0x002bbb08, // n0x168a c0x0000 (---------------) + I berlevag
+ 0x00200006, // n0x168b c0x0000 (---------------) + I bievat
+ 0x002025c6, // n0x168c c0x0000 (---------------) + I bindal
+ 0x00205ec8, // n0x168d c0x0000 (---------------) + I birkenes
+ 0x002066c7, // n0x168e c0x0000 (---------------) + I bjarkoy
+ 0x002075c9, // n0x168f c0x0000 (---------------) + I bjerkreim
+ 0x00207d85, // n0x1690 c0x0000 (---------------) + I bjugn
+ 0x000f5248, // n0x1691 c0x0000 (---------------) + blogspot
+ 0x00206dc4, // n0x1692 c0x0000 (---------------) + I bodo
+ 0x002f0804, // n0x1693 c0x0000 (---------------) + I bokn
+ 0x00211485, // n0x1694 c0x0000 (---------------) + I bomlo
+ 0x00388089, // n0x1695 c0x0000 (---------------) + I bremanger
+ 0x00220687, // n0x1696 c0x0000 (---------------) + I bronnoy
+ 0x0022068b, // n0x1697 c0x0000 (---------------) + I bronnoysund
+ 0x0022184a, // n0x1698 c0x0000 (---------------) + I brumunddal
+ 0x00224445, // n0x1699 c0x0000 (---------------) + I bryne
+ 0x3be04742, // n0x169a c0x00ef (n0x192a-n0x192b) + I bu
+ 0x00204f87, // n0x169b c0x0000 (---------------) + I budejju
+ 0x3c226a48, // n0x169c c0x00f0 (n0x192b-n0x192c) o I buskerud
+ 0x002cb0c7, // n0x169d c0x0000 (---------------) + I bygland
+ 0x002acb45, // n0x169e c0x0000 (---------------) + I bykle
+ 0x00239f8a, // n0x169f c0x0000 (---------------) + I cahcesuolo
+ 0x00008182, // n0x16a0 c0x0000 (---------------) + co
+ 0x0028760b, // n0x16a1 c0x0000 (---------------) + I davvenjarga
+ 0x0025c88a, // n0x16a2 c0x0000 (---------------) + I davvesiida
+ 0x00395246, // n0x16a3 c0x0000 (---------------) + I deatnu
+ 0x0026c843, // n0x16a4 c0x0000 (---------------) + I dep
+ 0x002ad18d, // n0x16a5 c0x0000 (---------------) + I dielddanuorri
+ 0x00255bcc, // n0x16a6 c0x0000 (---------------) + I divtasvuodna
+ 0x002641cd, // n0x16a7 c0x0000 (---------------) + I divttasvuotna
+ 0x00359d05, // n0x16a8 c0x0000 (---------------) + I donna
+ 0x0025dfc5, // n0x16a9 c0x0000 (---------------) + I dovre
+ 0x00226147, // n0x16aa c0x0000 (---------------) + I drammen
+ 0x0030e609, // n0x16ab c0x0000 (---------------) + I drangedal
+ 0x0030eb86, // n0x16ac c0x0000 (---------------) + I drobak
+ 0x0036cdc5, // n0x16ad c0x0000 (---------------) + I dyroy
+ 0x0025d9c8, // n0x16ae c0x0000 (---------------) + I egersund
+ 0x00272443, // n0x16af c0x0000 (---------------) + I eid
+ 0x0032f988, // n0x16b0 c0x0000 (---------------) + I eidfjord
+ 0x00283dc8, // n0x16b1 c0x0000 (---------------) + I eidsberg
+ 0x002b7f47, // n0x16b2 c0x0000 (---------------) + I eidskog
+ 0x00272448, // n0x16b3 c0x0000 (---------------) + I eidsvoll
+ 0x003a3509, // n0x16b4 c0x0000 (---------------) + I eigersund
+ 0x00236e07, // n0x16b5 c0x0000 (---------------) + I elverum
+ 0x00379087, // n0x16b6 c0x0000 (---------------) + I enebakk
+ 0x0027bd08, // n0x16b7 c0x0000 (---------------) + I engerdal
+ 0x002afb04, // n0x16b8 c0x0000 (---------------) + I etne
+ 0x002afb07, // n0x16b9 c0x0000 (---------------) + I etnedal
+ 0x0024bd88, // n0x16ba c0x0000 (---------------) + I evenassi
+ 0x002031c6, // n0x16bb c0x0000 (---------------) + I evenes
+ 0x003967cf, // n0x16bc c0x0000 (---------------) + I evje-og-hornnes
+ 0x00210007, // n0x16bd c0x0000 (---------------) + I farsund
+ 0x00246786, // n0x16be c0x0000 (---------------) + I fauske
+ 0x00247cc5, // n0x16bf c0x0000 (---------------) + I fedje
+ 0x00341603, // n0x16c0 c0x0000 (---------------) + I fet
+ 0x00341607, // n0x16c1 c0x0000 (---------------) + I fetsund
+ 0x00325a43, // n0x16c2 c0x0000 (---------------) + I fhs
+ 0x00245706, // n0x16c3 c0x0000 (---------------) + I finnoy
+ 0x00248b06, // n0x16c4 c0x0000 (---------------) + I fitjar
+ 0x002496c6, // n0x16c5 c0x0000 (---------------) + I fjaler
+ 0x00286e85, // n0x16c6 c0x0000 (---------------) + I fjell
+ 0x00203803, // n0x16c7 c0x0000 (---------------) + I fla
+ 0x0037b548, // n0x16c8 c0x0000 (---------------) + I flakstad
+ 0x00203809, // n0x16c9 c0x0000 (---------------) + I flatanger
+ 0x00361b0b, // n0x16ca c0x0000 (---------------) + I flekkefjord
+ 0x00373d08, // n0x16cb c0x0000 (---------------) + I flesberg
+ 0x0024ab85, // n0x16cc c0x0000 (---------------) + I flora
+ 0x0024b685, // n0x16cd c0x0000 (---------------) + I floro
+ 0x3c63d4c2, // n0x16ce c0x00f1 (n0x192c-n0x192d) + I fm
+ 0x00351709, // n0x16cf c0x0000 (---------------) + I folkebibl
+ 0x0024dac7, // n0x16d0 c0x0000 (---------------) + I folldal
+ 0x00395185, // n0x16d1 c0x0000 (---------------) + I forde
+ 0x00252907, // n0x16d2 c0x0000 (---------------) + I forsand
+ 0x00254346, // n0x16d3 c0x0000 (---------------) + I fosnes
+ 0x00358985, // n0x16d4 c0x0000 (---------------) + I frana
+ 0x0036108b, // n0x16d5 c0x0000 (---------------) + I fredrikstad
+ 0x002554c4, // n0x16d6 c0x0000 (---------------) + I frei
+ 0x0025acc5, // n0x16d7 c0x0000 (---------------) + I frogn
+ 0x0025ae07, // n0x16d8 c0x0000 (---------------) + I froland
+ 0x0026ed46, // n0x16d9 c0x0000 (---------------) + I frosta
+ 0x0026f185, // n0x16da c0x0000 (---------------) + I froya
+ 0x0027a1c7, // n0x16db c0x0000 (---------------) + I fuoisku
+ 0x0027a747, // n0x16dc c0x0000 (---------------) + I fuossko
+ 0x00285b04, // n0x16dd c0x0000 (---------------) + I fusa
+ 0x002826ca, // n0x16de c0x0000 (---------------) + I fylkesbibl
+ 0x00282b88, // n0x16df c0x0000 (---------------) + I fyresdal
+ 0x00301349, // n0x16e0 c0x0000 (---------------) + I gaivuotna
+ 0x0021c685, // n0x16e1 c0x0000 (---------------) + I galsa
+ 0x00287846, // n0x16e2 c0x0000 (---------------) + I gamvik
+ 0x002bbcca, // n0x16e3 c0x0000 (---------------) + I gangaviika
+ 0x00260086, // n0x16e4 c0x0000 (---------------) + I gaular
+ 0x00312407, // n0x16e5 c0x0000 (---------------) + I gausdal
+ 0x0030100d, // n0x16e6 c0x0000 (---------------) + I giehtavuoatna
+ 0x0022a489, // n0x16e7 c0x0000 (---------------) + I gildeskal
+ 0x00363785, // n0x16e8 c0x0000 (---------------) + I giske
+ 0x003639c7, // n0x16e9 c0x0000 (---------------) + I gjemnes
+ 0x00309c48, // n0x16ea c0x0000 (---------------) + I gjerdrum
+ 0x00322608, // n0x16eb c0x0000 (---------------) + I gjerstad
+ 0x0033af47, // n0x16ec c0x0000 (---------------) + I gjesdal
+ 0x003088c6, // n0x16ed c0x0000 (---------------) + I gjovik
+ 0x00209907, // n0x16ee c0x0000 (---------------) + I gloppen
+ 0x00247c03, // n0x16ef c0x0000 (---------------) + I gol
+ 0x0032e344, // n0x16f0 c0x0000 (---------------) + I gran
+ 0x00355305, // n0x16f1 c0x0000 (---------------) + I grane
+ 0x00380ac7, // n0x16f2 c0x0000 (---------------) + I granvin
+ 0x00384a89, // n0x16f3 c0x0000 (---------------) + I gratangen
+ 0x00216c48, // n0x16f4 c0x0000 (---------------) + I grimstad
+ 0x00312305, // n0x16f5 c0x0000 (---------------) + I grong
+ 0x00339d44, // n0x16f6 c0x0000 (---------------) + I grue
+ 0x00240f85, // n0x16f7 c0x0000 (---------------) + I gulen
+ 0x0024494d, // n0x16f8 c0x0000 (---------------) + I guovdageaidnu
+ 0x00201c82, // n0x16f9 c0x0000 (---------------) + I ha
+ 0x0035c886, // n0x16fa c0x0000 (---------------) + I habmer
+ 0x002538c6, // n0x16fb c0x0000 (---------------) + I hadsel
+ 0x0029c98a, // n0x16fc c0x0000 (---------------) + I hagebostad
+ 0x00346a86, // n0x16fd c0x0000 (---------------) + I halden
+ 0x0035c145, // n0x16fe c0x0000 (---------------) + I halsa
+ 0x00302585, // n0x16ff c0x0000 (---------------) + I hamar
+ 0x00302587, // n0x1700 c0x0000 (---------------) + I hamaroy
+ 0x0036ac4c, // n0x1701 c0x0000 (---------------) + I hammarfeasta
+ 0x0027da0a, // n0x1702 c0x0000 (---------------) + I hammerfest
+ 0x00282f86, // n0x1703 c0x0000 (---------------) + I hapmir
+ 0x002b9f05, // n0x1704 c0x0000 (---------------) + I haram
+ 0x00283d06, // n0x1705 c0x0000 (---------------) + I hareid
+ 0x00284047, // n0x1706 c0x0000 (---------------) + I harstad
+ 0x00285186, // n0x1707 c0x0000 (---------------) + I hasvik
+ 0x00286d8c, // n0x1708 c0x0000 (---------------) + I hattfjelldal
+ 0x00235a49, // n0x1709 c0x0000 (---------------) + I haugesund
+ 0x3ca31807, // n0x170a c0x00f2 (n0x192d-n0x1930) o I hedmark
+ 0x00288f85, // n0x170b c0x0000 (---------------) + I hemne
+ 0x00288f86, // n0x170c c0x0000 (---------------) + I hemnes
+ 0x002894c8, // n0x170d c0x0000 (---------------) + I hemsedal
+ 0x002aacc5, // n0x170e c0x0000 (---------------) + I herad
+ 0x0029b645, // n0x170f c0x0000 (---------------) + I hitra
+ 0x0029b888, // n0x1710 c0x0000 (---------------) + I hjartdal
+ 0x0029ba8a, // n0x1711 c0x0000 (---------------) + I hjelmeland
+ 0x3cea9982, // n0x1712 c0x00f3 (n0x1930-n0x1931) + I hl
+ 0x3d20c742, // n0x1713 c0x00f4 (n0x1931-n0x1932) + I hm
+ 0x0034e405, // n0x1714 c0x0000 (---------------) + I hobol
+ 0x002d2203, // n0x1715 c0x0000 (---------------) + I hof
+ 0x003327c8, // n0x1716 c0x0000 (---------------) + I hokksund
+ 0x00231ac3, // n0x1717 c0x0000 (---------------) + I hol
+ 0x0029bd04, // n0x1718 c0x0000 (---------------) + I hole
+ 0x0029288b, // n0x1719 c0x0000 (---------------) + I holmestrand
+ 0x002c4448, // n0x171a c0x0000 (---------------) + I holtalen
+ 0x0029e188, // n0x171b c0x0000 (---------------) + I honefoss
+ 0x3d71e409, // n0x171c c0x00f5 (n0x1932-n0x1933) o I hordaland
+ 0x0029f389, // n0x171d c0x0000 (---------------) + I hornindal
+ 0x0029f806, // n0x171e c0x0000 (---------------) + I horten
+ 0x002a0448, // n0x171f c0x0000 (---------------) + I hoyanger
+ 0x002a0649, // n0x1720 c0x0000 (---------------) + I hoylandet
+ 0x002a2cc6, // n0x1721 c0x0000 (---------------) + I hurdal
+ 0x002a2e45, // n0x1722 c0x0000 (---------------) + I hurum
+ 0x00360406, // n0x1723 c0x0000 (---------------) + I hvaler
+ 0x002a3389, // n0x1724 c0x0000 (---------------) + I hyllestad
+ 0x00363387, // n0x1725 c0x0000 (---------------) + I ibestad
+ 0x002630c6, // n0x1726 c0x0000 (---------------) + I idrett
+ 0x00306007, // n0x1727 c0x0000 (---------------) + I inderoy
+ 0x0030ea07, // n0x1728 c0x0000 (---------------) + I iveland
+ 0x0036b344, // n0x1729 c0x0000 (---------------) + I ivgu
+ 0x3da1bb49, // n0x172a c0x00f6 (n0x1933-n0x1934) + I jan-mayen
+ 0x002c2788, // n0x172b c0x0000 (---------------) + I jessheim
+ 0x00350f48, // n0x172c c0x0000 (---------------) + I jevnaker
+ 0x0022e4c7, // n0x172d c0x0000 (---------------) + I jolster
+ 0x002bb2c6, // n0x172e c0x0000 (---------------) + I jondal
+ 0x002f5e89, // n0x172f c0x0000 (---------------) + I jorpeland
+ 0x002b7507, // n0x1730 c0x0000 (---------------) + I kafjord
+ 0x002e2f0a, // n0x1731 c0x0000 (---------------) + I karasjohka
+ 0x00251bc8, // n0x1732 c0x0000 (---------------) + I karasjok
+ 0x002565c7, // n0x1733 c0x0000 (---------------) + I karlsoy
+ 0x00321f06, // n0x1734 c0x0000 (---------------) + I karmoy
+ 0x002163ca, // n0x1735 c0x0000 (---------------) + I kautokeino
+ 0x00250108, // n0x1736 c0x0000 (---------------) + I kirkenes
+ 0x00242f45, // n0x1737 c0x0000 (---------------) + I klabu
+ 0x00223f85, // n0x1738 c0x0000 (---------------) + I klepp
+ 0x002d1a07, // n0x1739 c0x0000 (---------------) + I kommune
+ 0x002b85c9, // n0x173a c0x0000 (---------------) + I kongsberg
+ 0x002c174b, // n0x173b c0x0000 (---------------) + I kongsvinger
+ 0x002d1848, // n0x173c c0x0000 (---------------) + I kopervik
+ 0x002a1689, // n0x173d c0x0000 (---------------) + I kraanghke
+ 0x00249947, // n0x173e c0x0000 (---------------) + I kragero
+ 0x002aa24c, // n0x173f c0x0000 (---------------) + I kristiansand
+ 0x002aa88c, // n0x1740 c0x0000 (---------------) + I kristiansund
+ 0x002aab8a, // n0x1741 c0x0000 (---------------) + I krodsherad
+ 0x002aae0c, // n0x1742 c0x0000 (---------------) + I krokstadelva
+ 0x002b6548, // n0x1743 c0x0000 (---------------) + I kvafjord
+ 0x002b6748, // n0x1744 c0x0000 (---------------) + I kvalsund
+ 0x002b6944, // n0x1745 c0x0000 (---------------) + I kvam
+ 0x002b76c9, // n0x1746 c0x0000 (---------------) + I kvanangen
+ 0x002b7909, // n0x1747 c0x0000 (---------------) + I kvinesdal
+ 0x002b7b4a, // n0x1748 c0x0000 (---------------) + I kvinnherad
+ 0x002b7dc9, // n0x1749 c0x0000 (---------------) + I kviteseid
+ 0x002b8107, // n0x174a c0x0000 (---------------) + I kvitsoy
+ 0x003a19cc, // n0x174b c0x0000 (---------------) + I laakesvuemie
+ 0x00338406, // n0x174c c0x0000 (---------------) + I lahppi
+ 0x00250488, // n0x174d c0x0000 (---------------) + I langevag
+ 0x00260146, // n0x174e c0x0000 (---------------) + I lardal
+ 0x0037a5c6, // n0x174f c0x0000 (---------------) + I larvik
+ 0x00363687, // n0x1750 c0x0000 (---------------) + I lavagis
+ 0x00225648, // n0x1751 c0x0000 (---------------) + I lavangen
+ 0x002bdb0b, // n0x1752 c0x0000 (---------------) + I leangaviika
+ 0x002caf87, // n0x1753 c0x0000 (---------------) + I lebesby
+ 0x002526c9, // n0x1754 c0x0000 (---------------) + I leikanger
+ 0x00277809, // n0x1755 c0x0000 (---------------) + I leirfjord
+ 0x00358e47, // n0x1756 c0x0000 (---------------) + I leirvik
+ 0x002b6c04, // n0x1757 c0x0000 (---------------) + I leka
+ 0x002feac7, // n0x1758 c0x0000 (---------------) + I leksvik
+ 0x0031fec6, // n0x1759 c0x0000 (---------------) + I lenvik
+ 0x00215f06, // n0x175a c0x0000 (---------------) + I lerdal
+ 0x002c3245, // n0x175b c0x0000 (---------------) + I lesja
+ 0x002ccf08, // n0x175c c0x0000 (---------------) + I levanger
+ 0x002cdb04, // n0x175d c0x0000 (---------------) + I lier
+ 0x002cdb06, // n0x175e c0x0000 (---------------) + I lierne
+ 0x0027d8cb, // n0x175f c0x0000 (---------------) + I lillehammer
+ 0x0033b0c9, // n0x1760 c0x0000 (---------------) + I lillesand
+ 0x0036a746, // n0x1761 c0x0000 (---------------) + I lindas
+ 0x0039ae49, // n0x1762 c0x0000 (---------------) + I lindesnes
+ 0x00385206, // n0x1763 c0x0000 (---------------) + I loabat
+ 0x00252bc8, // n0x1764 c0x0000 (---------------) + I lodingen
+ 0x00212bc3, // n0x1765 c0x0000 (---------------) + I lom
+ 0x00350445, // n0x1766 c0x0000 (---------------) + I loppa
+ 0x00215309, // n0x1767 c0x0000 (---------------) + I lorenskog
+ 0x00216045, // n0x1768 c0x0000 (---------------) + I loten
+ 0x002dc544, // n0x1769 c0x0000 (---------------) + I lund
+ 0x0026e246, // n0x176a c0x0000 (---------------) + I lunner
+ 0x00332e05, // n0x176b c0x0000 (---------------) + I luroy
+ 0x002d6f06, // n0x176c c0x0000 (---------------) + I luster
+ 0x002f3187, // n0x176d c0x0000 (---------------) + I lyngdal
+ 0x00378f86, // n0x176e c0x0000 (---------------) + I lyngen
+ 0x0028fa0b, // n0x176f c0x0000 (---------------) + I malatvuopmi
+ 0x0020bdc7, // n0x1770 c0x0000 (---------------) + I malselv
+ 0x00207286, // n0x1771 c0x0000 (---------------) + I malvik
+ 0x00349486, // n0x1772 c0x0000 (---------------) + I mandal
+ 0x0022f8c6, // n0x1773 c0x0000 (---------------) + I marker
+ 0x00347509, // n0x1774 c0x0000 (---------------) + I marnardal
+ 0x00238fca, // n0x1775 c0x0000 (---------------) + I masfjorden
+ 0x002b0685, // n0x1776 c0x0000 (---------------) + I masoy
+ 0x0032450d, // n0x1777 c0x0000 (---------------) + I matta-varjjat
+ 0x0029bb86, // n0x1778 c0x0000 (---------------) + I meland
+ 0x002151c6, // n0x1779 c0x0000 (---------------) + I meldal
+ 0x003725c6, // n0x177a c0x0000 (---------------) + I melhus
+ 0x00292545, // n0x177b c0x0000 (---------------) + I meloy
+ 0x0031b447, // n0x177c c0x0000 (---------------) + I meraker
+ 0x00294c47, // n0x177d c0x0000 (---------------) + I midsund
+ 0x00233b8e, // n0x177e c0x0000 (---------------) + I midtre-gauldal
+ 0x00215b43, // n0x177f c0x0000 (---------------) + I mil
+ 0x002bb289, // n0x1780 c0x0000 (---------------) + I mjondalen
+ 0x0035b209, // n0x1781 c0x0000 (---------------) + I mo-i-rana
+ 0x0022d447, // n0x1782 c0x0000 (---------------) + I moareke
+ 0x00264dc7, // n0x1783 c0x0000 (---------------) + I modalen
+ 0x0029d305, // n0x1784 c0x0000 (---------------) + I modum
+ 0x00256ac5, // n0x1785 c0x0000 (---------------) + I molde
+ 0x3de63a4f, // n0x1786 c0x00f7 (n0x1934-n0x1936) o I more-og-romsdal
+ 0x002c6387, // n0x1787 c0x0000 (---------------) + I mosjoen
+ 0x002c6548, // n0x1788 c0x0000 (---------------) + I moskenes
+ 0x002c6984, // n0x1789 c0x0000 (---------------) + I moss
+ 0x002c6bc6, // n0x178a c0x0000 (---------------) + I mosvik
+ 0x3e2425c2, // n0x178b c0x00f8 (n0x1936-n0x1937) + I mr
+ 0x002ca0c6, // n0x178c c0x0000 (---------------) + I muosat
+ 0x002cc746, // n0x178d c0x0000 (---------------) + I museum
+ 0x002bde4e, // n0x178e c0x0000 (---------------) + I naamesjevuemie
+ 0x0032f7ca, // n0x178f c0x0000 (---------------) + I namdalseid
+ 0x002a62c6, // n0x1790 c0x0000 (---------------) + I namsos
+ 0x0022340a, // n0x1791 c0x0000 (---------------) + I namsskogan
+ 0x002c0449, // n0x1792 c0x0000 (---------------) + I nannestad
+ 0x00316005, // n0x1793 c0x0000 (---------------) + I naroy
+ 0x00386808, // n0x1794 c0x0000 (---------------) + I narviika
+ 0x003a03c6, // n0x1795 c0x0000 (---------------) + I narvik
+ 0x0036a588, // n0x1796 c0x0000 (---------------) + I naustdal
+ 0x00200808, // n0x1797 c0x0000 (---------------) + I navuotna
+ 0x0032358b, // n0x1798 c0x0000 (---------------) + I nedre-eiker
+ 0x00222045, // n0x1799 c0x0000 (---------------) + I nesna
+ 0x0022da48, // n0x179a c0x0000 (---------------) + I nesodden
+ 0x0020600c, // n0x179b c0x0000 (---------------) + I nesoddtangen
+ 0x002aca07, // n0x179c c0x0000 (---------------) + I nesseby
+ 0x00249246, // n0x179d c0x0000 (---------------) + I nesset
+ 0x002a5c88, // n0x179e c0x0000 (---------------) + I nissedal
+ 0x0027c008, // n0x179f c0x0000 (---------------) + I nittedal
+ 0x3e63e082, // n0x17a0 c0x00f9 (n0x1937-n0x1938) + I nl
+ 0x002b6e0b, // n0x17a1 c0x0000 (---------------) + I nord-aurdal
+ 0x0038c1c9, // n0x17a2 c0x0000 (---------------) + I nord-fron
+ 0x00348209, // n0x17a3 c0x0000 (---------------) + I nord-odal
+ 0x002254c7, // n0x17a4 c0x0000 (---------------) + I norddal
+ 0x003086c8, // n0x17a5 c0x0000 (---------------) + I nordkapp
+ 0x3eb93948, // n0x17a6 c0x00fa (n0x1938-n0x193c) o I nordland
+ 0x002248cb, // n0x17a7 c0x0000 (---------------) + I nordre-land
+ 0x002ffd89, // n0x17a8 c0x0000 (---------------) + I nordreisa
+ 0x00210fcd, // n0x17a9 c0x0000 (---------------) + I nore-og-uvdal
+ 0x00303508, // n0x17aa c0x0000 (---------------) + I notodden
+ 0x0030bc88, // n0x17ab c0x0000 (---------------) + I notteroy
+ 0x3ee02382, // n0x17ac c0x00fb (n0x193c-n0x193d) + I nt
+ 0x00200dc4, // n0x17ad c0x0000 (---------------) + I odda
+ 0x3f21f702, // n0x17ae c0x00fc (n0x193d-n0x193e) + I of
+ 0x00251d46, // n0x17af c0x0000 (---------------) + I oksnes
+ 0x3f601582, // n0x17b0 c0x00fd (n0x193e-n0x193f) + I ol
+ 0x0020edca, // n0x17b1 c0x0000 (---------------) + I omasvuotna
+ 0x00332cc6, // n0x17b2 c0x0000 (---------------) + I oppdal
+ 0x0022abc8, // n0x17b3 c0x0000 (---------------) + I oppegard
+ 0x0024de88, // n0x17b4 c0x0000 (---------------) + I orkanger
+ 0x002e7286, // n0x17b5 c0x0000 (---------------) + I orkdal
+ 0x0033e006, // n0x17b6 c0x0000 (---------------) + I orland
+ 0x002decc6, // n0x17b7 c0x0000 (---------------) + I orskog
+ 0x00273045, // n0x17b8 c0x0000 (---------------) + I orsta
+ 0x0023b704, // n0x17b9 c0x0000 (---------------) + I osen
+ 0x3fac11c4, // n0x17ba c0x00fe (n0x193f-n0x1940) + I oslo
+ 0x0032ecc6, // n0x17bb c0x0000 (---------------) + I osoyro
+ 0x00376c87, // n0x17bc c0x0000 (---------------) + I osteroy
+ 0x3ff94147, // n0x17bd c0x00ff (n0x1940-n0x1941) o I ostfold
+ 0x002ed08b, // n0x17be c0x0000 (---------------) + I ostre-toten
+ 0x002bc7c9, // n0x17bf c0x0000 (---------------) + I overhalla
+ 0x0025e00a, // n0x17c0 c0x0000 (---------------) + I ovre-eiker
+ 0x00306144, // n0x17c1 c0x0000 (---------------) + I oyer
+ 0x00307088, // n0x17c2 c0x0000 (---------------) + I oygarden
+ 0x00262e8d, // n0x17c3 c0x0000 (---------------) + I oystre-slidre
+ 0x002d97c9, // n0x17c4 c0x0000 (---------------) + I porsanger
+ 0x002d9a08, // n0x17c5 c0x0000 (---------------) + I porsangu
+ 0x002d9c89, // n0x17c6 c0x0000 (---------------) + I porsgrunn
+ 0x002db244, // n0x17c7 c0x0000 (---------------) + I priv
+ 0x0021ab44, // n0x17c8 c0x0000 (---------------) + I rade
+ 0x00276305, // n0x17c9 c0x0000 (---------------) + I radoy
+ 0x0030b10b, // n0x17ca c0x0000 (---------------) + I rahkkeravju
+ 0x002c43c6, // n0x17cb c0x0000 (---------------) + I raholt
+ 0x0032eb05, // n0x17cc c0x0000 (---------------) + I raisa
+ 0x003519c9, // n0x17cd c0x0000 (---------------) + I rakkestad
+ 0x00222248, // n0x17ce c0x0000 (---------------) + I ralingen
+ 0x00296cc4, // n0x17cf c0x0000 (---------------) + I rana
+ 0x0022d1c9, // n0x17d0 c0x0000 (---------------) + I randaberg
+ 0x0026f545, // n0x17d1 c0x0000 (---------------) + I rauma
+ 0x002b3108, // n0x17d2 c0x0000 (---------------) + I rendalen
+ 0x002ce707, // n0x17d3 c0x0000 (---------------) + I rennebu
+ 0x0031a948, // n0x17d4 c0x0000 (---------------) + I rennesoy
+ 0x00277146, // n0x17d5 c0x0000 (---------------) + I rindal
+ 0x00233787, // n0x17d6 c0x0000 (---------------) + I ringebu
+ 0x00288989, // n0x17d7 c0x0000 (---------------) + I ringerike
+ 0x00224209, // n0x17d8 c0x0000 (---------------) + I ringsaker
+ 0x00252305, // n0x17d9 c0x0000 (---------------) + I risor
+ 0x0035a845, // n0x17da c0x0000 (---------------) + I rissa
+ 0x40205242, // n0x17db c0x0100 (n0x1941-n0x1942) + I rl
+ 0x002efc44, // n0x17dc c0x0000 (---------------) + I roan
+ 0x002946c5, // n0x17dd c0x0000 (---------------) + I rodoy
+ 0x002ce3c6, // n0x17de c0x0000 (---------------) + I rollag
+ 0x002f5445, // n0x17df c0x0000 (---------------) + I romsa
+ 0x0024b747, // n0x17e0 c0x0000 (---------------) + I romskog
+ 0x0028ddc5, // n0x17e1 c0x0000 (---------------) + I roros
+ 0x0026ed84, // n0x17e2 c0x0000 (---------------) + I rost
+ 0x0032b6c6, // n0x17e3 c0x0000 (---------------) + I royken
+ 0x0036ce47, // n0x17e4 c0x0000 (---------------) + I royrvik
+ 0x00242606, // n0x17e5 c0x0000 (---------------) + I ruovat
+ 0x0033b605, // n0x17e6 c0x0000 (---------------) + I rygge
+ 0x0030fbc8, // n0x17e7 c0x0000 (---------------) + I salangen
+ 0x002227c5, // n0x17e8 c0x0000 (---------------) + I salat
+ 0x00342687, // n0x17e9 c0x0000 (---------------) + I saltdal
+ 0x0039b049, // n0x17ea c0x0000 (---------------) + I samnanger
+ 0x0033b20a, // n0x17eb c0x0000 (---------------) + I sandefjord
+ 0x00341ac7, // n0x17ec c0x0000 (---------------) + I sandnes
+ 0x00341acc, // n0x17ed c0x0000 (---------------) + I sandnessjoen
+ 0x0036bd06, // n0x17ee c0x0000 (---------------) + I sandoy
+ 0x00229909, // n0x17ef c0x0000 (---------------) + I sarpsborg
+ 0x0036d2c5, // n0x17f0 c0x0000 (---------------) + I sauda
+ 0x00375508, // n0x17f1 c0x0000 (---------------) + I sauherad
+ 0x0020be83, // n0x17f2 c0x0000 (---------------) + I sel
+ 0x0020f645, // n0x17f3 c0x0000 (---------------) + I selbu
+ 0x00332345, // n0x17f4 c0x0000 (---------------) + I selje
+ 0x002380c7, // n0x17f5 c0x0000 (---------------) + I seljord
+ 0x4060dd02, // n0x17f6 c0x0101 (n0x1942-n0x1943) + I sf
+ 0x002379c7, // n0x17f7 c0x0000 (---------------) + I siellak
+ 0x002fda86, // n0x17f8 c0x0000 (---------------) + I sigdal
+ 0x0021ba86, // n0x17f9 c0x0000 (---------------) + I siljan
+ 0x002c6a46, // n0x17fa c0x0000 (---------------) + I sirdal
+ 0x0027bf46, // n0x17fb c0x0000 (---------------) + I skanit
+ 0x00280348, // n0x17fc c0x0000 (---------------) + I skanland
+ 0x00272285, // n0x17fd c0x0000 (---------------) + I skaun
+ 0x00246847, // n0x17fe c0x0000 (---------------) + I skedsmo
+ 0x0024684d, // n0x17ff c0x0000 (---------------) + I skedsmokorset
+ 0x0021cf83, // n0x1800 c0x0000 (---------------) + I ski
+ 0x0021cf85, // n0x1801 c0x0000 (---------------) + I skien
+ 0x00305947, // n0x1802 c0x0000 (---------------) + I skierva
+ 0x00378088, // n0x1803 c0x0000 (---------------) + I skiptvet
+ 0x00377c45, // n0x1804 c0x0000 (---------------) + I skjak
+ 0x002a80c8, // n0x1805 c0x0000 (---------------) + I skjervoy
+ 0x0022b506, // n0x1806 c0x0000 (---------------) + I skodje
+ 0x002398c7, // n0x1807 c0x0000 (---------------) + I slattum
+ 0x002ba1c5, // n0x1808 c0x0000 (---------------) + I smola
+ 0x002220c6, // n0x1809 c0x0000 (---------------) + I snaase
+ 0x0035d9c5, // n0x180a c0x0000 (---------------) + I snasa
+ 0x002b5c4a, // n0x180b c0x0000 (---------------) + I snillfjord
+ 0x002ecb46, // n0x180c c0x0000 (---------------) + I snoasa
+ 0x00330987, // n0x180d c0x0000 (---------------) + I sogndal
+ 0x002b6405, // n0x180e c0x0000 (---------------) + I sogne
+ 0x002d35c7, // n0x180f c0x0000 (---------------) + I sokndal
+ 0x002da544, // n0x1810 c0x0000 (---------------) + I sola
+ 0x002dc4c6, // n0x1811 c0x0000 (---------------) + I solund
+ 0x00357845, // n0x1812 c0x0000 (---------------) + I somna
+ 0x00204c8b, // n0x1813 c0x0000 (---------------) + I sondre-land
+ 0x0031fd49, // n0x1814 c0x0000 (---------------) + I songdalen
+ 0x002289ca, // n0x1815 c0x0000 (---------------) + I sor-aurdal
+ 0x00252388, // n0x1816 c0x0000 (---------------) + I sor-fron
+ 0x002e8c08, // n0x1817 c0x0000 (---------------) + I sor-odal
+ 0x002e934c, // n0x1818 c0x0000 (---------------) + I sor-varanger
+ 0x002f23c7, // n0x1819 c0x0000 (---------------) + I sorfold
+ 0x002f3d88, // n0x181a c0x0000 (---------------) + I sorreisa
+ 0x002f9948, // n0x181b c0x0000 (---------------) + I sortland
+ 0x002fd445, // n0x181c c0x0000 (---------------) + I sorum
+ 0x002b838a, // n0x181d c0x0000 (---------------) + I spjelkavik
+ 0x0032e5c9, // n0x181e c0x0000 (---------------) + I spydeberg
+ 0x40a01a42, // n0x181f c0x0102 (n0x1943-n0x1944) + I st
+ 0x00321946, // n0x1820 c0x0000 (---------------) + I stange
+ 0x0028e7c4, // n0x1821 c0x0000 (---------------) + I stat
+ 0x002d8149, // n0x1822 c0x0000 (---------------) + I stathelle
+ 0x00245309, // n0x1823 c0x0000 (---------------) + I stavanger
+ 0x00217f47, // n0x1824 c0x0000 (---------------) + I stavern
+ 0x0023b107, // n0x1825 c0x0000 (---------------) + I steigen
+ 0x003565c9, // n0x1826 c0x0000 (---------------) + I steinkjer
+ 0x00201a48, // n0x1827 c0x0000 (---------------) + I stjordal
+ 0x00201a4f, // n0x1828 c0x0000 (---------------) + I stjordalshalsen
+ 0x00268106, // n0x1829 c0x0000 (---------------) + I stokke
+ 0x0024044b, // n0x182a c0x0000 (---------------) + I stor-elvdal
+ 0x003772c5, // n0x182b c0x0000 (---------------) + I stord
+ 0x003772c7, // n0x182c c0x0000 (---------------) + I stordal
+ 0x002e0349, // n0x182d c0x0000 (---------------) + I storfjord
+ 0x0022d146, // n0x182e c0x0000 (---------------) + I strand
+ 0x0022d147, // n0x182f c0x0000 (---------------) + I stranda
+ 0x0039d345, // n0x1830 c0x0000 (---------------) + I stryn
+ 0x00232604, // n0x1831 c0x0000 (---------------) + I sula
+ 0x002a9106, // n0x1832 c0x0000 (---------------) + I suldal
+ 0x002100c4, // n0x1833 c0x0000 (---------------) + I sund
+ 0x00326b07, // n0x1834 c0x0000 (---------------) + I sunndal
+ 0x002e1f48, // n0x1835 c0x0000 (---------------) + I surnadal
+ 0x40ee3fc8, // n0x1836 c0x0103 (n0x1944-n0x1945) + I svalbard
+ 0x002e45c5, // n0x1837 c0x0000 (---------------) + I sveio
+ 0x002e4707, // n0x1838 c0x0000 (---------------) + I svelvik
+ 0x00366789, // n0x1839 c0x0000 (---------------) + I sykkylven
+ 0x0020d344, // n0x183a c0x0000 (---------------) + I tana
+ 0x0020d348, // n0x183b c0x0000 (---------------) + I tananger
+ 0x412acf48, // n0x183c c0x0104 (n0x1945-n0x1947) o I telemark
+ 0x00219984, // n0x183d c0x0000 (---------------) + I time
+ 0x00232f48, // n0x183e c0x0000 (---------------) + I tingvoll
+ 0x00308cc4, // n0x183f c0x0000 (---------------) + I tinn
+ 0x0021f349, // n0x1840 c0x0000 (---------------) + I tjeldsund
+ 0x00338a45, // n0x1841 c0x0000 (---------------) + I tjome
+ 0x41600142, // n0x1842 c0x0105 (n0x1947-n0x1948) + I tm
+ 0x00268145, // n0x1843 c0x0000 (---------------) + I tokke
+ 0x0021c5c5, // n0x1844 c0x0000 (---------------) + I tolga
+ 0x00309a88, // n0x1845 c0x0000 (---------------) + I tonsberg
+ 0x00235e47, // n0x1846 c0x0000 (---------------) + I torsken
+ 0x41a03642, // n0x1847 c0x0106 (n0x1948-n0x1949) + I tr
+ 0x002c7c45, // n0x1848 c0x0000 (---------------) + I trana
+ 0x00266e06, // n0x1849 c0x0000 (---------------) + I tranby
+ 0x002886c6, // n0x184a c0x0000 (---------------) + I tranoy
+ 0x002efc08, // n0x184b c0x0000 (---------------) + I troandin
+ 0x002f1f08, // n0x184c c0x0000 (---------------) + I trogstad
+ 0x002f5406, // n0x184d c0x0000 (---------------) + I tromsa
+ 0x00317886, // n0x184e c0x0000 (---------------) + I tromso
+ 0x00234289, // n0x184f c0x0000 (---------------) + I trondheim
+ 0x00353106, // n0x1850 c0x0000 (---------------) + I trysil
+ 0x00283a4b, // n0x1851 c0x0000 (---------------) + I tvedestrand
+ 0x0039ad45, // n0x1852 c0x0000 (---------------) + I tydal
+ 0x0020a406, // n0x1853 c0x0000 (---------------) + I tynset
+ 0x0022f308, // n0x1854 c0x0000 (---------------) + I tysfjord
+ 0x00231046, // n0x1855 c0x0000 (---------------) + I tysnes
+ 0x0031e8c6, // n0x1856 c0x0000 (---------------) + I tysvar
+ 0x002ec24a, // n0x1857 c0x0000 (---------------) + I ullensaker
+ 0x002759ca, // n0x1858 c0x0000 (---------------) + I ullensvang
+ 0x00283245, // n0x1859 c0x0000 (---------------) + I ulvik
+ 0x0021b407, // n0x185a c0x0000 (---------------) + I unjarga
+ 0x00340546, // n0x185b c0x0000 (---------------) + I utsira
+ 0x41e000c2, // n0x185c c0x0107 (n0x1949-n0x194a) + I va
+ 0x00305a87, // n0x185d c0x0000 (---------------) + I vaapste
+ 0x0026cf85, // n0x185e c0x0000 (---------------) + I vadso
+ 0x002bbc44, // n0x185f c0x0000 (---------------) + I vaga
+ 0x002bbc45, // n0x1860 c0x0000 (---------------) + I vagan
+ 0x00306f86, // n0x1861 c0x0000 (---------------) + I vagsoy
+ 0x00328807, // n0x1862 c0x0000 (---------------) + I vaksdal
+ 0x00213f45, // n0x1863 c0x0000 (---------------) + I valle
+ 0x002256c4, // n0x1864 c0x0000 (---------------) + I vang
+ 0x0023ccc8, // n0x1865 c0x0000 (---------------) + I vanylven
+ 0x0031e985, // n0x1866 c0x0000 (---------------) + I vardo
+ 0x0039eec7, // n0x1867 c0x0000 (---------------) + I varggat
+ 0x00289b45, // n0x1868 c0x0000 (---------------) + I varoy
+ 0x00212985, // n0x1869 c0x0000 (---------------) + I vefsn
+ 0x002292c4, // n0x186a c0x0000 (---------------) + I vega
+ 0x002821c9, // n0x186b c0x0000 (---------------) + I vegarshei
+ 0x002dbf48, // n0x186c c0x0000 (---------------) + I vennesla
+ 0x003708c6, // n0x186d c0x0000 (---------------) + I verdal
+ 0x003252c6, // n0x186e c0x0000 (---------------) + I verran
+ 0x00219686, // n0x186f c0x0000 (---------------) + I vestby
+ 0x42399688, // n0x1870 c0x0108 (n0x194a-n0x194b) o I vestfold
+ 0x002e8a87, // n0x1871 c0x0000 (---------------) + I vestnes
+ 0x002e8e0d, // n0x1872 c0x0000 (---------------) + I vestre-slidre
+ 0x002e964c, // n0x1873 c0x0000 (---------------) + I vestre-toten
+ 0x002e9c49, // n0x1874 c0x0000 (---------------) + I vestvagoy
+ 0x002e9e89, // n0x1875 c0x0000 (---------------) + I vevelstad
+ 0x4274b082, // n0x1876 c0x0109 (n0x194b-n0x194c) + I vf
+ 0x003978c3, // n0x1877 c0x0000 (---------------) + I vgs
+ 0x00207343, // n0x1878 c0x0000 (---------------) + I vik
+ 0x0031ff85, // n0x1879 c0x0000 (---------------) + I vikna
+ 0x00380bca, // n0x187a c0x0000 (---------------) + I vindafjord
+ 0x00317746, // n0x187b c0x0000 (---------------) + I voagat
+ 0x002f0b85, // n0x187c c0x0000 (---------------) + I volda
+ 0x002f36c4, // n0x187d c0x0000 (---------------) + I voss
+ 0x002f36cb, // n0x187e c0x0000 (---------------) + I vossevangen
+ 0x0030cc0c, // n0x187f c0x0000 (---------------) + I xn--andy-ira
+ 0x0030d44c, // n0x1880 c0x0000 (---------------) + I xn--asky-ira
+ 0x0030d755, // n0x1881 c0x0000 (---------------) + I xn--aurskog-hland-jnb
+ 0x003111cd, // n0x1882 c0x0000 (---------------) + I xn--avery-yua
+ 0x0031274f, // n0x1883 c0x0000 (---------------) + I xn--bdddj-mrabd
+ 0x00312b12, // n0x1884 c0x0000 (---------------) + I xn--bearalvhki-y4a
+ 0x00312f8f, // n0x1885 c0x0000 (---------------) + I xn--berlevg-jxa
+ 0x00313352, // n0x1886 c0x0000 (---------------) + I xn--bhcavuotna-s4a
+ 0x003137d3, // n0x1887 c0x0000 (---------------) + I xn--bhccavuotna-k7a
+ 0x00313c8d, // n0x1888 c0x0000 (---------------) + I xn--bidr-5nac
+ 0x0031424d, // n0x1889 c0x0000 (---------------) + I xn--bievt-0qa
+ 0x003145ce, // n0x188a c0x0000 (---------------) + I xn--bjarky-fya
+ 0x00314a8e, // n0x188b c0x0000 (---------------) + I xn--bjddar-pta
+ 0x0031560c, // n0x188c c0x0000 (---------------) + I xn--blt-elab
+ 0x0031598c, // n0x188d c0x0000 (---------------) + I xn--bmlo-gra
+ 0x00315dcb, // n0x188e c0x0000 (---------------) + I xn--bod-2na
+ 0x0031614e, // n0x188f c0x0000 (---------------) + I xn--brnny-wuac
+ 0x00316c52, // n0x1890 c0x0000 (---------------) + I xn--brnnysund-m8ac
+ 0x0031750c, // n0x1891 c0x0000 (---------------) + I xn--brum-voa
+ 0x00317e90, // n0x1892 c0x0000 (---------------) + I xn--btsfjord-9za
+ 0x00325f92, // n0x1893 c0x0000 (---------------) + I xn--davvenjrga-y4a
+ 0x00326ccc, // n0x1894 c0x0000 (---------------) + I xn--dnna-gra
+ 0x0032738d, // n0x1895 c0x0000 (---------------) + I xn--drbak-wua
+ 0x003276cc, // n0x1896 c0x0000 (---------------) + I xn--dyry-ira
+ 0x00329351, // n0x1897 c0x0000 (---------------) + I xn--eveni-0qa01ga
+ 0x0032a6cd, // n0x1898 c0x0000 (---------------) + I xn--finny-yua
+ 0x0032cf8d, // n0x1899 c0x0000 (---------------) + I xn--fjord-lra
+ 0x0032d58a, // n0x189a c0x0000 (---------------) + I xn--fl-zia
+ 0x0032d80c, // n0x189b c0x0000 (---------------) + I xn--flor-jra
+ 0x0032e10c, // n0x189c c0x0000 (---------------) + I xn--frde-gra
+ 0x0032e80c, // n0x189d c0x0000 (---------------) + I xn--frna-woa
+ 0x0032f08c, // n0x189e c0x0000 (---------------) + I xn--frya-hra
+ 0x00333ed3, // n0x189f c0x0000 (---------------) + I xn--ggaviika-8ya47h
+ 0x003346d0, // n0x18a0 c0x0000 (---------------) + I xn--gildeskl-g0a
+ 0x00334ad0, // n0x18a1 c0x0000 (---------------) + I xn--givuotna-8ya
+ 0x003357cd, // n0x18a2 c0x0000 (---------------) + I xn--gjvik-wua
+ 0x00335dcc, // n0x18a3 c0x0000 (---------------) + I xn--gls-elac
+ 0x003369c9, // n0x18a4 c0x0000 (---------------) + I xn--h-2fa
+ 0x00339e4d, // n0x18a5 c0x0000 (---------------) + I xn--hbmer-xqa
+ 0x0033a193, // n0x18a6 c0x0000 (---------------) + I xn--hcesuolo-7ya35b
+ 0x0033bf51, // n0x18a7 c0x0000 (---------------) + I xn--hgebostad-g3a
+ 0x0033c393, // n0x18a8 c0x0000 (---------------) + I xn--hmmrfeasta-s4ac
+ 0x0033e18f, // n0x18a9 c0x0000 (---------------) + I xn--hnefoss-q1a
+ 0x0033e54c, // n0x18aa c0x0000 (---------------) + I xn--hobl-ira
+ 0x0033e84f, // n0x18ab c0x0000 (---------------) + I xn--holtlen-hxa
+ 0x0033ec0d, // n0x18ac c0x0000 (---------------) + I xn--hpmir-xqa
+ 0x0033f20f, // n0x18ad c0x0000 (---------------) + I xn--hyanger-q1a
+ 0x0033f5d0, // n0x18ae c0x0000 (---------------) + I xn--hylandet-54a
+ 0x0034004e, // n0x18af c0x0000 (---------------) + I xn--indery-fya
+ 0x0034300e, // n0x18b0 c0x0000 (---------------) + I xn--jlster-bya
+ 0x00343750, // n0x18b1 c0x0000 (---------------) + I xn--jrpeland-54a
+ 0x0034484d, // n0x18b2 c0x0000 (---------------) + I xn--karmy-yua
+ 0x003451ce, // n0x18b3 c0x0000 (---------------) + I xn--kfjord-iua
+ 0x0034554c, // n0x18b4 c0x0000 (---------------) + I xn--klbu-woa
+ 0x00346613, // n0x18b5 c0x0000 (---------------) + I xn--koluokta-7ya57h
+ 0x0034844e, // n0x18b6 c0x0000 (---------------) + I xn--krager-gya
+ 0x00349610, // n0x18b7 c0x0000 (---------------) + I xn--kranghke-b0a
+ 0x00349a11, // n0x18b8 c0x0000 (---------------) + I xn--krdsherad-m8a
+ 0x00349e4f, // n0x18b9 c0x0000 (---------------) + I xn--krehamn-dxa
+ 0x0034a213, // n0x18ba c0x0000 (---------------) + I xn--krjohka-hwab49j
+ 0x0034ac0d, // n0x18bb c0x0000 (---------------) + I xn--ksnes-uua
+ 0x0034af4f, // n0x18bc c0x0000 (---------------) + I xn--kvfjord-nxa
+ 0x0034b30e, // n0x18bd c0x0000 (---------------) + I xn--kvitsy-fya
+ 0x0034bb50, // n0x18be c0x0000 (---------------) + I xn--kvnangen-k0a
+ 0x0034bf49, // n0x18bf c0x0000 (---------------) + I xn--l-1fa
+ 0x0034da10, // n0x18c0 c0x0000 (---------------) + I xn--laheadju-7ya
+ 0x0034f30f, // n0x18c1 c0x0000 (---------------) + I xn--langevg-jxa
+ 0x0034f98f, // n0x18c2 c0x0000 (---------------) + I xn--ldingen-q1a
+ 0x0034fd52, // n0x18c3 c0x0000 (---------------) + I xn--leagaviika-52b
+ 0x0035084e, // n0x18c4 c0x0000 (---------------) + I xn--lesund-hua
+ 0x0035114d, // n0x18c5 c0x0000 (---------------) + I xn--lgrd-poac
+ 0x0035284d, // n0x18c6 c0x0000 (---------------) + I xn--lhppi-xqa
+ 0x00352b8d, // n0x18c7 c0x0000 (---------------) + I xn--linds-pra
+ 0x0035408d, // n0x18c8 c0x0000 (---------------) + I xn--loabt-0qa
+ 0x003543cd, // n0x18c9 c0x0000 (---------------) + I xn--lrdal-sra
+ 0x00354710, // n0x18ca c0x0000 (---------------) + I xn--lrenskog-54a
+ 0x00354b0b, // n0x18cb c0x0000 (---------------) + I xn--lt-liac
+ 0x003550cc, // n0x18cc c0x0000 (---------------) + I xn--lten-gra
+ 0x0035544c, // n0x18cd c0x0000 (---------------) + I xn--lury-ira
+ 0x0035574c, // n0x18ce c0x0000 (---------------) + I xn--mely-ira
+ 0x00355a4e, // n0x18cf c0x0000 (---------------) + I xn--merker-kua
+ 0x00365050, // n0x18d0 c0x0000 (---------------) + I xn--mjndalen-64a
+ 0x00367012, // n0x18d1 c0x0000 (---------------) + I xn--mlatvuopmi-s4a
+ 0x0036748b, // n0x18d2 c0x0000 (---------------) + I xn--mli-tla
+ 0x00367b8e, // n0x18d3 c0x0000 (---------------) + I xn--mlselv-iua
+ 0x00367f0e, // n0x18d4 c0x0000 (---------------) + I xn--moreke-jua
+ 0x003690ce, // n0x18d5 c0x0000 (---------------) + I xn--mosjen-eya
+ 0x0036980b, // n0x18d6 c0x0000 (---------------) + I xn--mot-tla
+ 0x42b69dd6, // n0x18d7 c0x010a (n0x194c-n0x194e) o I xn--mre-og-romsdal-qqb
+ 0x0036a94d, // n0x18d8 c0x0000 (---------------) + I xn--msy-ula0h
+ 0x0036be94, // n0x18d9 c0x0000 (---------------) + I xn--mtta-vrjjat-k7af
+ 0x0036d40d, // n0x18da c0x0000 (---------------) + I xn--muost-0qa
+ 0x0036e455, // n0x18db c0x0000 (---------------) + I xn--nmesjevuemie-tcba
+ 0x0036f84d, // n0x18dc c0x0000 (---------------) + I xn--nry-yla5g
+ 0x003701cf, // n0x18dd c0x0000 (---------------) + I xn--nttery-byae
+ 0x00370a4f, // n0x18de c0x0000 (---------------) + I xn--nvuotna-hwa
+ 0x00373f0f, // n0x18df c0x0000 (---------------) + I xn--oppegrd-ixa
+ 0x003742ce, // n0x18e0 c0x0000 (---------------) + I xn--ostery-fya
+ 0x0037498d, // n0x18e1 c0x0000 (---------------) + I xn--osyro-wua
+ 0x00375a11, // n0x18e2 c0x0000 (---------------) + I xn--porsgu-sta26f
+ 0x00379d8c, // n0x18e3 c0x0000 (---------------) + I xn--rady-ira
+ 0x0037a08c, // n0x18e4 c0x0000 (---------------) + I xn--rdal-poa
+ 0x0037a38b, // n0x18e5 c0x0000 (---------------) + I xn--rde-ula
+ 0x0037a98c, // n0x18e6 c0x0000 (---------------) + I xn--rdy-0nab
+ 0x0037ad4f, // n0x18e7 c0x0000 (---------------) + I xn--rennesy-v1a
+ 0x0037b112, // n0x18e8 c0x0000 (---------------) + I xn--rhkkervju-01af
+ 0x0037bacd, // n0x18e9 c0x0000 (---------------) + I xn--rholt-mra
+ 0x0037ca8c, // n0x18ea c0x0000 (---------------) + I xn--risa-5na
+ 0x0037cf0c, // n0x18eb c0x0000 (---------------) + I xn--risr-ira
+ 0x0037d20d, // n0x18ec c0x0000 (---------------) + I xn--rland-uua
+ 0x0037d54f, // n0x18ed c0x0000 (---------------) + I xn--rlingen-mxa
+ 0x0037d90e, // n0x18ee c0x0000 (---------------) + I xn--rmskog-bya
+ 0x0038088c, // n0x18ef c0x0000 (---------------) + I xn--rros-gra
+ 0x00380e4d, // n0x18f0 c0x0000 (---------------) + I xn--rskog-uua
+ 0x0038118b, // n0x18f1 c0x0000 (---------------) + I xn--rst-0na
+ 0x0038174c, // n0x18f2 c0x0000 (---------------) + I xn--rsta-fra
+ 0x00381ccd, // n0x18f3 c0x0000 (---------------) + I xn--ryken-vua
+ 0x0038200e, // n0x18f4 c0x0000 (---------------) + I xn--ryrvik-bya
+ 0x00382489, // n0x18f5 c0x0000 (---------------) + I xn--s-1fa
+ 0x00383693, // n0x18f6 c0x0000 (---------------) + I xn--sandnessjen-ogb
+ 0x00383f0d, // n0x18f7 c0x0000 (---------------) + I xn--sandy-yua
+ 0x0038424d, // n0x18f8 c0x0000 (---------------) + I xn--seral-lra
+ 0x0038484c, // n0x18f9 c0x0000 (---------------) + I xn--sgne-gra
+ 0x00384cce, // n0x18fa c0x0000 (---------------) + I xn--skierv-uta
+ 0x003857cf, // n0x18fb c0x0000 (---------------) + I xn--skjervy-v1a
+ 0x00385b8c, // n0x18fc c0x0000 (---------------) + I xn--skjk-soa
+ 0x00385e8d, // n0x18fd c0x0000 (---------------) + I xn--sknit-yqa
+ 0x003861cf, // n0x18fe c0x0000 (---------------) + I xn--sknland-fxa
+ 0x0038658c, // n0x18ff c0x0000 (---------------) + I xn--slat-5na
+ 0x00386b8c, // n0x1900 c0x0000 (---------------) + I xn--slt-elab
+ 0x00386f4c, // n0x1901 c0x0000 (---------------) + I xn--smla-hra
+ 0x0038724c, // n0x1902 c0x0000 (---------------) + I xn--smna-gra
+ 0x0038790d, // n0x1903 c0x0000 (---------------) + I xn--snase-nra
+ 0x00387c52, // n0x1904 c0x0000 (---------------) + I xn--sndre-land-0cb
+ 0x003882cc, // n0x1905 c0x0000 (---------------) + I xn--snes-poa
+ 0x003885cc, // n0x1906 c0x0000 (---------------) + I xn--snsa-roa
+ 0x003888d1, // n0x1907 c0x0000 (---------------) + I xn--sr-aurdal-l8a
+ 0x00388d0f, // n0x1908 c0x0000 (---------------) + I xn--sr-fron-q1a
+ 0x003890cf, // n0x1909 c0x0000 (---------------) + I xn--sr-odal-q1a
+ 0x00389493, // n0x190a c0x0000 (---------------) + I xn--sr-varanger-ggb
+ 0x0038a34e, // n0x190b c0x0000 (---------------) + I xn--srfold-bya
+ 0x0038a8cf, // n0x190c c0x0000 (---------------) + I xn--srreisa-q1a
+ 0x0038ac8c, // n0x190d c0x0000 (---------------) + I xn--srum-gra
+ 0x42f8afce, // n0x190e c0x010b (n0x194e-n0x194f) o I xn--stfold-9xa
+ 0x0038b34f, // n0x190f c0x0000 (---------------) + I xn--stjrdal-s1a
+ 0x0038b716, // n0x1910 c0x0000 (---------------) + I xn--stjrdalshalsen-sqb
+ 0x0038c512, // n0x1911 c0x0000 (---------------) + I xn--stre-toten-zcb
+ 0x0038d40c, // n0x1912 c0x0000 (---------------) + I xn--tjme-hra
+ 0x0038e20f, // n0x1913 c0x0000 (---------------) + I xn--tnsberg-q1a
+ 0x0038e88d, // n0x1914 c0x0000 (---------------) + I xn--trany-yua
+ 0x0038ebcf, // n0x1915 c0x0000 (---------------) + I xn--trgstad-r1a
+ 0x0038ef8c, // n0x1916 c0x0000 (---------------) + I xn--trna-woa
+ 0x0038f28d, // n0x1917 c0x0000 (---------------) + I xn--troms-zua
+ 0x0038f5cd, // n0x1918 c0x0000 (---------------) + I xn--tysvr-vra
+ 0x00390ace, // n0x1919 c0x0000 (---------------) + I xn--unjrga-rta
+ 0x00391fcc, // n0x191a c0x0000 (---------------) + I xn--vads-jra
+ 0x003922cc, // n0x191b c0x0000 (---------------) + I xn--vard-jra
+ 0x003925d0, // n0x191c c0x0000 (---------------) + I xn--vegrshei-c0a
+ 0x00396d51, // n0x191d c0x0000 (---------------) + I xn--vestvgy-ixa6o
+ 0x0039718b, // n0x191e c0x0000 (---------------) + I xn--vg-yiab
+ 0x003974cc, // n0x191f c0x0000 (---------------) + I xn--vgan-qoa
+ 0x003977ce, // n0x1920 c0x0000 (---------------) + I xn--vgsy-qoa0j
+ 0x00399b91, // n0x1921 c0x0000 (---------------) + I xn--vre-eiker-k8a
+ 0x00399fce, // n0x1922 c0x0000 (---------------) + I xn--vrggt-xqad
+ 0x0039a34d, // n0x1923 c0x0000 (---------------) + I xn--vry-yla5g
+ 0x003a018b, // n0x1924 c0x0000 (---------------) + I xn--yer-zna
+ 0x003a0a8f, // n0x1925 c0x0000 (---------------) + I xn--ygarden-p1a
+ 0x003a1414, // n0x1926 c0x0000 (---------------) + I xn--ystre-slidre-ujb
+ 0x002242c2, // n0x1927 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1928 c0x0000 (---------------) + I gs
+ 0x00203283, // n0x1929 c0x0000 (---------------) + I nes
+ 0x002242c2, // n0x192a c0x0000 (---------------) + I gs
+ 0x00203283, // n0x192b c0x0000 (---------------) + I nes
+ 0x002242c2, // n0x192c c0x0000 (---------------) + I gs
+ 0x00203ac2, // n0x192d c0x0000 (---------------) + I os
+ 0x00360445, // n0x192e c0x0000 (---------------) + I valer
+ 0x0039988c, // n0x192f c0x0000 (---------------) + I xn--vler-qoa
+ 0x002242c2, // n0x1930 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1931 c0x0000 (---------------) + I gs
+ 0x00203ac2, // n0x1932 c0x0000 (---------------) + I os
+ 0x002242c2, // n0x1933 c0x0000 (---------------) + I gs
+ 0x00289945, // n0x1934 c0x0000 (---------------) + I heroy
+ 0x0033b205, // n0x1935 c0x0000 (---------------) + I sande
+ 0x002242c2, // n0x1936 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1937 c0x0000 (---------------) + I gs
+ 0x00206dc2, // n0x1938 c0x0000 (---------------) + I bo
+ 0x00289945, // n0x1939 c0x0000 (---------------) + I heroy
+ 0x00311709, // n0x193a c0x0000 (---------------) + I xn--b-5ga
+ 0x0033bc4c, // n0x193b c0x0000 (---------------) + I xn--hery-ira
+ 0x002242c2, // n0x193c c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x193d c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x193e c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x193f c0x0000 (---------------) + I gs
+ 0x00360445, // n0x1940 c0x0000 (---------------) + I valer
+ 0x002242c2, // n0x1941 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1942 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1943 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1944 c0x0000 (---------------) + I gs
+ 0x00206dc2, // n0x1945 c0x0000 (---------------) + I bo
+ 0x00311709, // n0x1946 c0x0000 (---------------) + I xn--b-5ga
+ 0x002242c2, // n0x1947 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1948 c0x0000 (---------------) + I gs
+ 0x002242c2, // n0x1949 c0x0000 (---------------) + I gs
+ 0x0033b205, // n0x194a c0x0000 (---------------) + I sande
+ 0x002242c2, // n0x194b c0x0000 (---------------) + I gs
+ 0x0033b205, // n0x194c c0x0000 (---------------) + I sande
+ 0x0033bc4c, // n0x194d c0x0000 (---------------) + I xn--hery-ira
+ 0x0039988c, // n0x194e c0x0000 (---------------) + I xn--vler-qoa
+ 0x0030a143, // n0x194f c0x0000 (---------------) + I biz
+ 0x0022edc3, // n0x1950 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1951 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1952 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x1953 c0x0000 (---------------) + I info
+ 0x0021d8c3, // n0x1954 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1955 c0x0000 (---------------) + I org
+ 0x00102b48, // n0x1956 c0x0000 (---------------) + merseine
+ 0x0008cf84, // n0x1957 c0x0000 (---------------) + mine
+ 0x000af988, // n0x1958 c0x0000 (---------------) + shacknet
+ 0x00205882, // n0x1959 c0x0000 (---------------) + I ac
+ 0x43e08182, // n0x195a c0x010f (n0x1969-n0x196a) + I co
+ 0x0023eec3, // n0x195b c0x0000 (---------------) + I cri
+ 0x0025f184, // n0x195c c0x0000 (---------------) + I geek
+ 0x00206243, // n0x195d c0x0000 (---------------) + I gen
+ 0x002ef244, // n0x195e c0x0000 (---------------) + I govt
+ 0x002a51c6, // n0x195f c0x0000 (---------------) + I health
+ 0x00202e03, // n0x1960 c0x0000 (---------------) + I iwi
+ 0x002e2c84, // n0x1961 c0x0000 (---------------) + I kiwi
+ 0x00271885, // n0x1962 c0x0000 (---------------) + I maori
+ 0x00215b43, // n0x1963 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1964 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1965 c0x0000 (---------------) + I org
+ 0x00266bca, // n0x1966 c0x0000 (---------------) + I parliament
+ 0x00231d06, // n0x1967 c0x0000 (---------------) + I school
+ 0x0036828c, // n0x1968 c0x0000 (---------------) + I xn--mori-qsa
+ 0x000f5248, // n0x1969 c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x196a c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x196b c0x0000 (---------------) + I com
+ 0x002349c3, // n0x196c c0x0000 (---------------) + I edu
+ 0x00275003, // n0x196d c0x0000 (---------------) + I gov
+ 0x00211c43, // n0x196e c0x0000 (---------------) + I med
+ 0x002cc746, // n0x196f c0x0000 (---------------) + I museum
+ 0x0021d8c3, // n0x1970 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1971 c0x0000 (---------------) + I org
+ 0x00220283, // n0x1972 c0x0000 (---------------) + I pro
+ 0x0000ac02, // n0x1973 c0x0000 (---------------) + ae
+ 0x00029007, // n0x1974 c0x0000 (---------------) + blogdns
+ 0x000cf808, // n0x1975 c0x0000 (---------------) + blogsite
+ 0x0000c54e, // n0x1976 c0x0000 (---------------) + bmoattachments
+ 0x00080bd2, // n0x1977 c0x0000 (---------------) + boldlygoingnowhere
+ 0x44a39705, // n0x1978 c0x0112 (n0x19ae-n0x19b0) o I cdn77
+ 0x44f1c70c, // n0x1979 c0x0113 (n0x19b0-n0x19b1) o I cdn77-secure
+ 0x00147e08, // n0x197a c0x0000 (---------------) + dnsalias
+ 0x00074607, // n0x197b c0x0000 (---------------) + dnsdojo
+ 0x000ebecb, // n0x197c c0x0000 (---------------) + doesntexist
+ 0x00168789, // n0x197d c0x0000 (---------------) + dontexist
+ 0x00147d07, // n0x197e c0x0000 (---------------) + doomdns
+ 0x00074507, // n0x197f c0x0000 (---------------) + duckdns
+ 0x00008306, // n0x1980 c0x0000 (---------------) + dvrdns
+ 0x0018bd88, // n0x1981 c0x0000 (---------------) + dynalias
+ 0x45411a06, // n0x1982 c0x0115 (n0x19b2-n0x19b4) + dyndns
+ 0x0009f90d, // n0x1983 c0x0000 (---------------) + endofinternet
+ 0x00107210, // n0x1984 c0x0000 (---------------) + endoftheinternet
+ 0x45824542, // n0x1985 c0x0116 (n0x19b4-n0x19eb) + eu
+ 0x00062c47, // n0x1986 c0x0000 (---------------) + from-me
+ 0x0009f089, // n0x1987 c0x0000 (---------------) + game-host
+ 0x0004f886, // n0x1988 c0x0000 (---------------) + gotdns
+ 0x0000e882, // n0x1989 c0x0000 (---------------) + hk
+ 0x000fef8a, // n0x198a c0x0000 (---------------) + hobby-site
+ 0x00011bc7, // n0x198b c0x0000 (---------------) + homedns
+ 0x000ad607, // n0x198c c0x0000 (---------------) + homeftp
+ 0x0009c509, // n0x198d c0x0000 (---------------) + homelinux
+ 0x0009d988, // n0x198e c0x0000 (---------------) + homeunix
+ 0x000da1ce, // n0x198f c0x0000 (---------------) + is-a-bruinsfan
+ 0x00005b4e, // n0x1990 c0x0000 (---------------) + is-a-candidate
+ 0x0000da4f, // n0x1991 c0x0000 (---------------) + is-a-celticsfan
+ 0x0000fe09, // n0x1992 c0x0000 (---------------) + is-a-chef
+ 0x0005f049, // n0x1993 c0x0000 (---------------) + is-a-geek
+ 0x0005180b, // n0x1994 c0x0000 (---------------) + is-a-knight
+ 0x00069f0f, // n0x1995 c0x0000 (---------------) + is-a-linux-user
+ 0x000823cc, // n0x1996 c0x0000 (---------------) + is-a-patsfan
+ 0x0009ffcb, // n0x1997 c0x0000 (---------------) + is-a-soxfan
+ 0x000b3648, // n0x1998 c0x0000 (---------------) + is-found
+ 0x000ecf87, // n0x1999 c0x0000 (---------------) + is-lost
+ 0x000f44c8, // n0x199a c0x0000 (---------------) + is-saved
+ 0x000e6d8b, // n0x199b c0x0000 (---------------) + is-very-bad
+ 0x000f02cc, // n0x199c c0x0000 (---------------) + is-very-evil
+ 0x0011bb0c, // n0x199d c0x0000 (---------------) + is-very-good
+ 0x0013644c, // n0x199e c0x0000 (---------------) + is-very-nice
+ 0x00140c4d, // n0x199f c0x0000 (---------------) + is-very-sweet
+ 0x000fff08, // n0x19a0 c0x0000 (---------------) + isa-geek
+ 0x0014c909, // n0x19a1 c0x0000 (---------------) + kicks-ass
+ 0x0017770b, // n0x19a2 c0x0000 (---------------) + misconfused
+ 0x000d7147, // n0x19a3 c0x0000 (---------------) + podzone
+ 0x000cf68a, // n0x19a4 c0x0000 (---------------) + readmyblog
+ 0x00053986, // n0x19a5 c0x0000 (---------------) + selfip
+ 0x00090b0d, // n0x19a6 c0x0000 (---------------) + sellsyourhome
+ 0x000c9608, // n0x19a7 c0x0000 (---------------) + servebbs
+ 0x0006e648, // n0x19a8 c0x0000 (---------------) + serveftp
+ 0x00170589, // n0x19a9 c0x0000 (---------------) + servegame
+ 0x000e160c, // n0x19aa c0x0000 (---------------) + stuff-4-sale
+ 0x00002982, // n0x19ab c0x0000 (---------------) + us
+ 0x00123b06, // n0x19ac c0x0000 (---------------) + webhop
+ 0x00009ac2, // n0x19ad c0x0000 (---------------) + za
+ 0x00000301, // n0x19ae c0x0000 (---------------) + c
+ 0x0003fa03, // n0x19af c0x0000 (---------------) + rsc
+ 0x45371dc6, // n0x19b0 c0x0114 (n0x19b1-n0x19b2) o I origin
+ 0x00039883, // n0x19b1 c0x0000 (---------------) + ssl
+ 0x00008502, // n0x19b2 c0x0000 (---------------) + go
+ 0x00011bc4, // n0x19b3 c0x0000 (---------------) + home
+ 0x000001c2, // n0x19b4 c0x0000 (---------------) + al
+ 0x000b1c44, // n0x19b5 c0x0000 (---------------) + asso
+ 0x00000102, // n0x19b6 c0x0000 (---------------) + at
+ 0x00009602, // n0x19b7 c0x0000 (---------------) + au
+ 0x000094c2, // n0x19b8 c0x0000 (---------------) + be
+ 0x00026882, // n0x19b9 c0x0000 (---------------) + bg
+ 0x00000302, // n0x19ba c0x0000 (---------------) + ca
+ 0x00039702, // n0x19bb c0x0000 (---------------) + cd
+ 0x000058c2, // n0x19bc c0x0000 (---------------) + ch
+ 0x0001a142, // n0x19bd c0x0000 (---------------) + cn
+ 0x000394c2, // n0x19be c0x0000 (---------------) + cy
+ 0x00033fc2, // n0x19bf c0x0000 (---------------) + cz
+ 0x00000402, // n0x19c0 c0x0000 (---------------) + de
+ 0x00000ac2, // n0x19c1 c0x0000 (---------------) + dk
+ 0x000349c3, // n0x19c2 c0x0000 (---------------) + edu
+ 0x0000b0c2, // n0x19c3 c0x0000 (---------------) + ee
+ 0x00002242, // n0x19c4 c0x0000 (---------------) + es
+ 0x0000e002, // n0x19c5 c0x0000 (---------------) + fi
+ 0x00007fc2, // n0x19c6 c0x0000 (---------------) + fr
+ 0x000089c2, // n0x19c7 c0x0000 (---------------) + gr
+ 0x00032882, // n0x19c8 c0x0000 (---------------) + hr
+ 0x0000d0c2, // n0x19c9 c0x0000 (---------------) + hu
+ 0x00000042, // n0x19ca c0x0000 (---------------) + ie
+ 0x00002f82, // n0x19cb c0x0000 (---------------) + il
+ 0x000020c2, // n0x19cc c0x0000 (---------------) + in
+ 0x0006f683, // n0x19cd c0x0000 (---------------) + int
+ 0x00001a02, // n0x19ce c0x0000 (---------------) + is
+ 0x00006f82, // n0x19cf c0x0000 (---------------) + it
+ 0x000a8bc2, // n0x19d0 c0x0000 (---------------) + jp
+ 0x000076c2, // n0x19d1 c0x0000 (---------------) + kr
+ 0x00008bc2, // n0x19d2 c0x0000 (---------------) + lt
+ 0x00002542, // n0x19d3 c0x0000 (---------------) + lu
+ 0x00007302, // n0x19d4 c0x0000 (---------------) + lv
+ 0x000d2e42, // n0x19d5 c0x0000 (---------------) + mc
+ 0x00002302, // n0x19d6 c0x0000 (---------------) + me
+ 0x00165542, // n0x19d7 c0x0000 (---------------) + mk
+ 0x00035702, // n0x19d8 c0x0000 (---------------) + mt
+ 0x0002a6c2, // n0x19d9 c0x0000 (---------------) + my
+ 0x0001d8c3, // n0x19da c0x0000 (---------------) + net
+ 0x00002d42, // n0x19db c0x0000 (---------------) + ng
+ 0x0003e082, // n0x19dc c0x0000 (---------------) + nl
+ 0x00000d82, // n0x19dd c0x0000 (---------------) + no
+ 0x00009a82, // n0x19de c0x0000 (---------------) + nz
+ 0x00052285, // n0x19df c0x0000 (---------------) + paris
+ 0x00006582, // n0x19e0 c0x0000 (---------------) + pl
+ 0x000835c2, // n0x19e1 c0x0000 (---------------) + pt
+ 0x0003d883, // n0x19e2 c0x0000 (---------------) + q-a
+ 0x00000cc2, // n0x19e3 c0x0000 (---------------) + ro
+ 0x00011ec2, // n0x19e4 c0x0000 (---------------) + ru
+ 0x00001d42, // n0x19e5 c0x0000 (---------------) + se
+ 0x0000ca82, // n0x19e6 c0x0000 (---------------) + si
+ 0x0000e342, // n0x19e7 c0x0000 (---------------) + sk
+ 0x00003642, // n0x19e8 c0x0000 (---------------) + tr
+ 0x00000f82, // n0x19e9 c0x0000 (---------------) + uk
+ 0x00002982, // n0x19ea c0x0000 (---------------) + us
+ 0x00210e43, // n0x19eb c0x0000 (---------------) + I abo
+ 0x00205882, // n0x19ec c0x0000 (---------------) + I ac
+ 0x0022edc3, // n0x19ed c0x0000 (---------------) + I com
+ 0x002349c3, // n0x19ee c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x19ef c0x0000 (---------------) + I gob
+ 0x00202d03, // n0x19f0 c0x0000 (---------------) + I ing
+ 0x00211c43, // n0x19f1 c0x0000 (---------------) + I med
+ 0x0021d8c3, // n0x19f2 c0x0000 (---------------) + I net
+ 0x0020e543, // n0x19f3 c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x19f4 c0x0000 (---------------) + I org
+ 0x00289883, // n0x19f5 c0x0000 (---------------) + I sld
+ 0x000f5248, // n0x19f6 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x19f7 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x19f8 c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x19f9 c0x0000 (---------------) + I gob
+ 0x00215b43, // n0x19fa c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x19fb c0x0000 (---------------) + I net
+ 0x0020e543, // n0x19fc c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x19fd c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x19fe c0x0000 (---------------) + I com
+ 0x002349c3, // n0x19ff c0x0000 (---------------) + I edu
+ 0x00229a83, // n0x1a00 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1a01 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1a02 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1a03 c0x0000 (---------------) + I gov
+ 0x00200041, // n0x1a04 c0x0000 (---------------) + I i
+ 0x00215b43, // n0x1a05 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1a06 c0x0000 (---------------) + I net
+ 0x002084c3, // n0x1a07 c0x0000 (---------------) + I ngo
+ 0x00229a83, // n0x1a08 c0x0000 (---------------) + I org
+ 0x0030a143, // n0x1a09 c0x0000 (---------------) + I biz
+ 0x0022edc3, // n0x1a0a c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1a0b c0x0000 (---------------) + I edu
+ 0x00365a03, // n0x1a0c c0x0000 (---------------) + I fam
+ 0x00209f03, // n0x1a0d c0x0000 (---------------) + I gob
+ 0x00237fc3, // n0x1a0e c0x0000 (---------------) + I gok
+ 0x00248683, // n0x1a0f c0x0000 (---------------) + I gon
+ 0x0029ae43, // n0x1a10 c0x0000 (---------------) + I gop
+ 0x00208503, // n0x1a11 c0x0000 (---------------) + I gos
+ 0x00275003, // n0x1a12 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x1a13 c0x0000 (---------------) + I info
+ 0x0021d8c3, // n0x1a14 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1a15 c0x0000 (---------------) + I org
+ 0x0021fa83, // n0x1a16 c0x0000 (---------------) + I web
+ 0x0031af44, // n0x1a17 c0x0000 (---------------) + I agro
+ 0x0021a3c3, // n0x1a18 c0x0000 (---------------) + I aid
+ 0x000011c3, // n0x1a19 c0x0000 (---------------) + art
+ 0x00200103, // n0x1a1a c0x0000 (---------------) + I atm
+ 0x00256148, // n0x1a1b c0x0000 (---------------) + I augustow
+ 0x00216404, // n0x1a1c c0x0000 (---------------) + I auto
+ 0x0033d2ca, // n0x1a1d c0x0000 (---------------) + I babia-gora
+ 0x00300686, // n0x1a1e c0x0000 (---------------) + I bedzin
+ 0x0038bc47, // n0x1a1f c0x0000 (---------------) + I beskidy
+ 0x0021cb4a, // n0x1a20 c0x0000 (---------------) + I bialowieza
+ 0x00267fc9, // n0x1a21 c0x0000 (---------------) + I bialystok
+ 0x0039cac7, // n0x1a22 c0x0000 (---------------) + I bielawa
+ 0x003a2f4a, // n0x1a23 c0x0000 (---------------) + I bieszczady
+ 0x0030a143, // n0x1a24 c0x0000 (---------------) + I biz
+ 0x0034e48b, // n0x1a25 c0x0000 (---------------) + I boleslawiec
+ 0x003018c9, // n0x1a26 c0x0000 (---------------) + I bydgoszcz
+ 0x00219785, // n0x1a27 c0x0000 (---------------) + I bytom
+ 0x002c9f07, // n0x1a28 c0x0000 (---------------) + I cieszyn
+ 0x00008182, // n0x1a29 c0x0000 (---------------) + co
+ 0x0022edc3, // n0x1a2a c0x0000 (---------------) + I com
+ 0x0033ba07, // n0x1a2b c0x0000 (---------------) + I czeladz
+ 0x00233fc5, // n0x1a2c c0x0000 (---------------) + I czest
+ 0x002b6ac9, // n0x1a2d c0x0000 (---------------) + I dlugoleka
+ 0x002349c3, // n0x1a2e c0x0000 (---------------) + I edu
+ 0x00221e46, // n0x1a2f c0x0000 (---------------) + I elblag
+ 0x002b5903, // n0x1a30 c0x0000 (---------------) + I elk
+ 0x000f2683, // n0x1a31 c0x0000 (---------------) + gda
+ 0x000f2686, // n0x1a32 c0x0000 (---------------) + gdansk
+ 0x000264c6, // n0x1a33 c0x0000 (---------------) + gdynia
+ 0x00002d87, // n0x1a34 c0x0000 (---------------) + gliwice
+ 0x00208806, // n0x1a35 c0x0000 (---------------) + I glogow
+ 0x0020f7c5, // n0x1a36 c0x0000 (---------------) + I gmina
+ 0x00225387, // n0x1a37 c0x0000 (---------------) + I gniezno
+ 0x0032eec7, // n0x1a38 c0x0000 (---------------) + I gorlice
+ 0x47675003, // n0x1a39 c0x011d (n0x1abc-n0x1aeb) + I gov
+ 0x00326f07, // n0x1a3a c0x0000 (---------------) + I grajewo
+ 0x00358d43, // n0x1a3b c0x0000 (---------------) + I gsm
+ 0x00209145, // n0x1a3c c0x0000 (---------------) + I ilawa
+ 0x0038a144, // n0x1a3d c0x0000 (---------------) + I info
+ 0x00275408, // n0x1a3e c0x0000 (---------------) + I jaworzno
+ 0x002a71cc, // n0x1a3f c0x0000 (---------------) + I jelenia-gora
+ 0x002a4885, // n0x1a40 c0x0000 (---------------) + I jgora
+ 0x003936c6, // n0x1a41 c0x0000 (---------------) + I kalisz
+ 0x0033b8c7, // n0x1a42 c0x0000 (---------------) + I karpacz
+ 0x0037f7c7, // n0x1a43 c0x0000 (---------------) + I kartuzy
+ 0x002027c7, // n0x1a44 c0x0000 (---------------) + I kaszuby
+ 0x002073c8, // n0x1a45 c0x0000 (---------------) + I katowice
+ 0x00218c4f, // n0x1a46 c0x0000 (---------------) + I kazimierz-dolny
+ 0x00308605, // n0x1a47 c0x0000 (---------------) + I kepno
+ 0x0023efc7, // n0x1a48 c0x0000 (---------------) + I ketrzyn
+ 0x002a1347, // n0x1a49 c0x0000 (---------------) + I klodzko
+ 0x0029be4a, // n0x1a4a c0x0000 (---------------) + I kobierzyce
+ 0x00283349, // n0x1a4b c0x0000 (---------------) + I kolobrzeg
+ 0x002c6d05, // n0x1a4c c0x0000 (---------------) + I konin
+ 0x002c768a, // n0x1a4d c0x0000 (---------------) + I konskowola
+ 0x001239c6, // n0x1a4e c0x0000 (---------------) + krakow
+ 0x002b5985, // n0x1a4f c0x0000 (---------------) + I kutno
+ 0x003676c4, // n0x1a50 c0x0000 (---------------) + I lapy
+ 0x002a0c46, // n0x1a51 c0x0000 (---------------) + I lebork
+ 0x0032fe87, // n0x1a52 c0x0000 (---------------) + I legnica
+ 0x0023cac7, // n0x1a53 c0x0000 (---------------) + I lezajsk
+ 0x00301d08, // n0x1a54 c0x0000 (---------------) + I limanowa
+ 0x00212bc5, // n0x1a55 c0x0000 (---------------) + I lomza
+ 0x00233ec6, // n0x1a56 c0x0000 (---------------) + I lowicz
+ 0x00202545, // n0x1a57 c0x0000 (---------------) + I lubin
+ 0x00330b05, // n0x1a58 c0x0000 (---------------) + I lukow
+ 0x0021a604, // n0x1a59 c0x0000 (---------------) + I mail
+ 0x002e7187, // n0x1a5a c0x0000 (---------------) + I malbork
+ 0x0028018a, // n0x1a5b c0x0000 (---------------) + I malopolska
+ 0x0037fe08, // n0x1a5c c0x0000 (---------------) + I mazowsze
+ 0x002d1606, // n0x1a5d c0x0000 (---------------) + I mazury
+ 0x00011c43, // n0x1a5e c0x0000 (---------------) + med
+ 0x002fb545, // n0x1a5f c0x0000 (---------------) + I media
+ 0x003831c6, // n0x1a60 c0x0000 (---------------) + I miasta
+ 0x003a1c06, // n0x1a61 c0x0000 (---------------) + I mielec
+ 0x002be106, // n0x1a62 c0x0000 (---------------) + I mielno
+ 0x00215b43, // n0x1a63 c0x0000 (---------------) + I mil
+ 0x0037bd47, // n0x1a64 c0x0000 (---------------) + I mragowo
+ 0x002a12c5, // n0x1a65 c0x0000 (---------------) + I naklo
+ 0x0021d8c3, // n0x1a66 c0x0000 (---------------) + I net
+ 0x0039cd4d, // n0x1a67 c0x0000 (---------------) + I nieruchomosci
+ 0x0020e543, // n0x1a68 c0x0000 (---------------) + I nom
+ 0x00301e08, // n0x1a69 c0x0000 (---------------) + I nowaruda
+ 0x0039abc4, // n0x1a6a c0x0000 (---------------) + I nysa
+ 0x0026f045, // n0x1a6b c0x0000 (---------------) + I olawa
+ 0x0029bd46, // n0x1a6c c0x0000 (---------------) + I olecko
+ 0x00237686, // n0x1a6d c0x0000 (---------------) + I olkusz
+ 0x0020a307, // n0x1a6e c0x0000 (---------------) + I olsztyn
+ 0x00238307, // n0x1a6f c0x0000 (---------------) + I opoczno
+ 0x0024a205, // n0x1a70 c0x0000 (---------------) + I opole
+ 0x00229a83, // n0x1a71 c0x0000 (---------------) + I org
+ 0x00207ac7, // n0x1a72 c0x0000 (---------------) + I ostroda
+ 0x002c5c89, // n0x1a73 c0x0000 (---------------) + I ostroleka
+ 0x00203ac9, // n0x1a74 c0x0000 (---------------) + I ostrowiec
+ 0x0020854a, // n0x1a75 c0x0000 (---------------) + I ostrowwlkp
+ 0x002419c2, // n0x1a76 c0x0000 (---------------) + I pc
+ 0x00209104, // n0x1a77 c0x0000 (---------------) + I pila
+ 0x002d1ec4, // n0x1a78 c0x0000 (---------------) + I pisz
+ 0x002158c7, // n0x1a79 c0x0000 (---------------) + I podhale
+ 0x00237888, // n0x1a7a c0x0000 (---------------) + I podlasie
+ 0x002d7bc9, // n0x1a7b c0x0000 (---------------) + I polkowice
+ 0x0021ce49, // n0x1a7c c0x0000 (---------------) + I pomorskie
+ 0x002d8787, // n0x1a7d c0x0000 (---------------) + I pomorze
+ 0x00308106, // n0x1a7e c0x0000 (---------------) + I powiat
+ 0x000d9f46, // n0x1a7f c0x0000 (---------------) + poznan
+ 0x002db244, // n0x1a80 c0x0000 (---------------) + I priv
+ 0x002db3ca, // n0x1a81 c0x0000 (---------------) + I prochowice
+ 0x002de5c8, // n0x1a82 c0x0000 (---------------) + I pruszkow
+ 0x002deb89, // n0x1a83 c0x0000 (---------------) + I przeworsk
+ 0x00286846, // n0x1a84 c0x0000 (---------------) + I pulawy
+ 0x002f9045, // n0x1a85 c0x0000 (---------------) + I radom
+ 0x0037fcc8, // n0x1a86 c0x0000 (---------------) + I rawa-maz
+ 0x002bf48a, // n0x1a87 c0x0000 (---------------) + I realestate
+ 0x0020c043, // n0x1a88 c0x0000 (---------------) + I rel
+ 0x0034e986, // n0x1a89 c0x0000 (---------------) + I rybnik
+ 0x002d8887, // n0x1a8a c0x0000 (---------------) + I rzeszow
+ 0x0020d5c5, // n0x1a8b c0x0000 (---------------) + I sanok
+ 0x00221705, // n0x1a8c c0x0000 (---------------) + I sejny
+ 0x00240e03, // n0x1a8d c0x0000 (---------------) + I sex
+ 0x00332c44, // n0x1a8e c0x0000 (---------------) + I shop
+ 0x00223f45, // n0x1a8f c0x0000 (---------------) + I sklep
+ 0x0027a847, // n0x1a90 c0x0000 (---------------) + I skoczow
+ 0x002dc085, // n0x1a91 c0x0000 (---------------) + I slask
+ 0x002cdd06, // n0x1a92 c0x0000 (---------------) + I slupsk
+ 0x00115105, // n0x1a93 c0x0000 (---------------) + sopot
+ 0x0021e5c3, // n0x1a94 c0x0000 (---------------) + I sos
+ 0x002a6389, // n0x1a95 c0x0000 (---------------) + I sosnowiec
+ 0x0026ee0c, // n0x1a96 c0x0000 (---------------) + I stalowa-wola
+ 0x0029600c, // n0x1a97 c0x0000 (---------------) + I starachowice
+ 0x002c7248, // n0x1a98 c0x0000 (---------------) + I stargard
+ 0x00265247, // n0x1a99 c0x0000 (---------------) + I suwalki
+ 0x002e5008, // n0x1a9a c0x0000 (---------------) + I swidnica
+ 0x002e5c0a, // n0x1a9b c0x0000 (---------------) + I swiebodzin
+ 0x002e658b, // n0x1a9c c0x0000 (---------------) + I swinoujscie
+ 0x00301a08, // n0x1a9d c0x0000 (---------------) + I szczecin
+ 0x003937c8, // n0x1a9e c0x0000 (---------------) + I szczytno
+ 0x0020b986, // n0x1a9f c0x0000 (---------------) + I szkola
+ 0x00363285, // n0x1aa0 c0x0000 (---------------) + I targi
+ 0x003223ca, // n0x1aa1 c0x0000 (---------------) + I tarnobrzeg
+ 0x00218745, // n0x1aa2 c0x0000 (---------------) + I tgory
+ 0x00200142, // n0x1aa3 c0x0000 (---------------) + I tm
+ 0x002ba087, // n0x1aa4 c0x0000 (---------------) + I tourism
+ 0x00293486, // n0x1aa5 c0x0000 (---------------) + I travel
+ 0x0034d545, // n0x1aa6 c0x0000 (---------------) + I turek
+ 0x002e7a49, // n0x1aa7 c0x0000 (---------------) + I turystyka
+ 0x00378505, // n0x1aa8 c0x0000 (---------------) + I tychy
+ 0x003726c5, // n0x1aa9 c0x0000 (---------------) + I ustka
+ 0x00268689, // n0x1aaa c0x0000 (---------------) + I walbrzych
+ 0x00383046, // n0x1aab c0x0000 (---------------) + I warmia
+ 0x00227a08, // n0x1aac c0x0000 (---------------) + I warszawa
+ 0x0022bf03, // n0x1aad c0x0000 (---------------) + I waw
+ 0x00208946, // n0x1aae c0x0000 (---------------) + I wegrow
+ 0x0026e186, // n0x1aaf c0x0000 (---------------) + I wielun
+ 0x002f5945, // n0x1ab0 c0x0000 (---------------) + I wlocl
+ 0x002f5949, // n0x1ab1 c0x0000 (---------------) + I wloclawek
+ 0x002ab3c9, // n0x1ab2 c0x0000 (---------------) + I wodzislaw
+ 0x00241d07, // n0x1ab3 c0x0000 (---------------) + I wolomin
+ 0x000f57c4, // n0x1ab4 c0x0000 (---------------) + wroc
+ 0x002f57c7, // n0x1ab5 c0x0000 (---------------) + I wroclaw
+ 0x0021cd49, // n0x1ab6 c0x0000 (---------------) + I zachpomor
+ 0x00338685, // n0x1ab7 c0x0000 (---------------) + I zagan
+ 0x0003b808, // n0x1ab8 c0x0000 (---------------) + zakopane
+ 0x0033acc5, // n0x1ab9 c0x0000 (---------------) + I zarow
+ 0x0033a9c5, // n0x1aba c0x0000 (---------------) + I zgora
+ 0x0021d989, // n0x1abb c0x0000 (---------------) + I zgorzelec
+ 0x002136c2, // n0x1abc c0x0000 (---------------) + I ap
+ 0x0021a1c4, // n0x1abd c0x0000 (---------------) + I griw
+ 0x00202e82, // n0x1abe c0x0000 (---------------) + I ic
+ 0x00201a02, // n0x1abf c0x0000 (---------------) + I is
+ 0x002637c5, // n0x1ac0 c0x0000 (---------------) + I kmpsp
+ 0x002cab08, // n0x1ac1 c0x0000 (---------------) + I konsulat
+ 0x0037a705, // n0x1ac2 c0x0000 (---------------) + I kppsp
+ 0x002b82c3, // n0x1ac3 c0x0000 (---------------) + I kwp
+ 0x002b82c5, // n0x1ac4 c0x0000 (---------------) + I kwpsp
+ 0x002ca2c3, // n0x1ac5 c0x0000 (---------------) + I mup
+ 0x0020f2c2, // n0x1ac6 c0x0000 (---------------) + I mw
+ 0x00260804, // n0x1ac7 c0x0000 (---------------) + I oirm
+ 0x002f6303, // n0x1ac8 c0x0000 (---------------) + I oum
+ 0x0020ec42, // n0x1ac9 c0x0000 (---------------) + I pa
+ 0x002dcbc4, // n0x1aca c0x0000 (---------------) + I pinb
+ 0x002d24c3, // n0x1acb c0x0000 (---------------) + I piw
+ 0x00200c42, // n0x1acc c0x0000 (---------------) + I po
+ 0x00245b03, // n0x1acd c0x0000 (---------------) + I psp
+ 0x00284bc4, // n0x1ace c0x0000 (---------------) + I psse
+ 0x002b0943, // n0x1acf c0x0000 (---------------) + I pup
+ 0x0023d244, // n0x1ad0 c0x0000 (---------------) + I rzgw
+ 0x00202402, // n0x1ad1 c0x0000 (---------------) + I sa
+ 0x0026b1c3, // n0x1ad2 c0x0000 (---------------) + I sdn
+ 0x00215443, // n0x1ad3 c0x0000 (---------------) + I sko
+ 0x00204c82, // n0x1ad4 c0x0000 (---------------) + I so
+ 0x00336d82, // n0x1ad5 c0x0000 (---------------) + I sr
+ 0x002ab209, // n0x1ad6 c0x0000 (---------------) + I starostwo
+ 0x00207e02, // n0x1ad7 c0x0000 (---------------) + I ug
+ 0x00281744, // n0x1ad8 c0x0000 (---------------) + I ugim
+ 0x0020bd82, // n0x1ad9 c0x0000 (---------------) + I um
+ 0x0037fb44, // n0x1ada c0x0000 (---------------) + I umig
+ 0x003080c4, // n0x1adb c0x0000 (---------------) + I upow
+ 0x002dd9c4, // n0x1adc c0x0000 (---------------) + I uppo
+ 0x00202982, // n0x1add c0x0000 (---------------) + I us
+ 0x0020b5c2, // n0x1ade c0x0000 (---------------) + I uw
+ 0x00211f03, // n0x1adf c0x0000 (---------------) + I uzs
+ 0x002e6203, // n0x1ae0 c0x0000 (---------------) + I wif
+ 0x0022bf84, // n0x1ae1 c0x0000 (---------------) + I wiih
+ 0x00255904, // n0x1ae2 c0x0000 (---------------) + I winb
+ 0x002c5c04, // n0x1ae3 c0x0000 (---------------) + I wios
+ 0x002c7584, // n0x1ae4 c0x0000 (---------------) + I witd
+ 0x002f4c83, // n0x1ae5 c0x0000 (---------------) + I wiw
+ 0x002eb643, // n0x1ae6 c0x0000 (---------------) + I wsa
+ 0x00323944, // n0x1ae7 c0x0000 (---------------) + I wskr
+ 0x002f6f44, // n0x1ae8 c0x0000 (---------------) + I wuoz
+ 0x002f7246, // n0x1ae9 c0x0000 (---------------) + I wzmiuw
+ 0x00252242, // n0x1aea c0x0000 (---------------) + I zp
+ 0x00208182, // n0x1aeb c0x0000 (---------------) + I co
+ 0x002349c3, // n0x1aec c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1aed c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1aee c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1aef c0x0000 (---------------) + I org
+ 0x00205882, // n0x1af0 c0x0000 (---------------) + I ac
+ 0x0030a143, // n0x1af1 c0x0000 (---------------) + I biz
+ 0x0022edc3, // n0x1af2 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1af3 c0x0000 (---------------) + I edu
+ 0x00202243, // n0x1af4 c0x0000 (---------------) + I est
+ 0x00275003, // n0x1af5 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x1af6 c0x0000 (---------------) + I info
+ 0x002ab4c4, // n0x1af7 c0x0000 (---------------) + I isla
+ 0x0027ca84, // n0x1af8 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x1af9 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1afa c0x0000 (---------------) + I org
+ 0x00220283, // n0x1afb c0x0000 (---------------) + I pro
+ 0x002dba84, // n0x1afc c0x0000 (---------------) + I prof
+ 0x002ac5c3, // n0x1afd c0x0000 (---------------) + I aca
+ 0x00211783, // n0x1afe c0x0000 (---------------) + I bar
+ 0x00213b83, // n0x1aff c0x0000 (---------------) + I cpa
+ 0x0027bd03, // n0x1b00 c0x0000 (---------------) + I eng
+ 0x002aa183, // n0x1b01 c0x0000 (---------------) + I jur
+ 0x00209183, // n0x1b02 c0x0000 (---------------) + I law
+ 0x00211c43, // n0x1b03 c0x0000 (---------------) + I med
+ 0x0022edc3, // n0x1b04 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1b05 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1b06 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1b07 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1b08 c0x0000 (---------------) + I org
+ 0x002d5303, // n0x1b09 c0x0000 (---------------) + I plo
+ 0x00230ec3, // n0x1b0a c0x0000 (---------------) + I sec
+ 0x000f5248, // n0x1b0b c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1b0c c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1b0d c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1b0e c0x0000 (---------------) + I gov
+ 0x0026f683, // n0x1b0f c0x0000 (---------------) + I int
+ 0x0021d8c3, // n0x1b10 c0x0000 (---------------) + I net
+ 0x0023c4c4, // n0x1b11 c0x0000 (---------------) + I nome
+ 0x00229a83, // n0x1b12 c0x0000 (---------------) + I org
+ 0x0028ff44, // n0x1b13 c0x0000 (---------------) + I publ
+ 0x002cad85, // n0x1b14 c0x0000 (---------------) + I belau
+ 0x00208182, // n0x1b15 c0x0000 (---------------) + I co
+ 0x002003c2, // n0x1b16 c0x0000 (---------------) + I ed
+ 0x00208502, // n0x1b17 c0x0000 (---------------) + I go
+ 0x00203282, // n0x1b18 c0x0000 (---------------) + I ne
+ 0x00200282, // n0x1b19 c0x0000 (---------------) + I or
+ 0x0022edc3, // n0x1b1a c0x0000 (---------------) + I com
+ 0x00238284, // n0x1b1b c0x0000 (---------------) + I coop
+ 0x002349c3, // n0x1b1c c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1b1d c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1b1e c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1b1f c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1b20 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x1b21 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1b22 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1b23 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1b24 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1b25 c0x0000 (---------------) + I mil
+ 0x0027ca84, // n0x1b26 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x1b27 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1b28 c0x0000 (---------------) + I org
+ 0x00215d43, // n0x1b29 c0x0000 (---------------) + I sch
+ 0x002b1c44, // n0x1b2a c0x0000 (---------------) + I asso
+ 0x000f5248, // n0x1b2b c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1b2c c0x0000 (---------------) + I com
+ 0x0020e543, // n0x1b2d c0x0000 (---------------) + I nom
+ 0x00243984, // n0x1b2e c0x0000 (---------------) + I arts
+ 0x000f5248, // n0x1b2f c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1b30 c0x0000 (---------------) + I com
+ 0x00247a04, // n0x1b31 c0x0000 (---------------) + I firm
+ 0x0038a144, // n0x1b32 c0x0000 (---------------) + I info
+ 0x0020e543, // n0x1b33 c0x0000 (---------------) + I nom
+ 0x00202382, // n0x1b34 c0x0000 (---------------) + I nt
+ 0x00229a83, // n0x1b35 c0x0000 (---------------) + I org
+ 0x00226f03, // n0x1b36 c0x0000 (---------------) + I rec
+ 0x0038c985, // n0x1b37 c0x0000 (---------------) + I store
+ 0x00200142, // n0x1b38 c0x0000 (---------------) + I tm
+ 0x002f7083, // n0x1b39 c0x0000 (---------------) + I www
+ 0x00205882, // n0x1b3a c0x0000 (---------------) + I ac
+ 0x000f5248, // n0x1b3b c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x1b3c c0x0000 (---------------) + I co
+ 0x002349c3, // n0x1b3d c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1b3e c0x0000 (---------------) + I gov
+ 0x002020c2, // n0x1b3f c0x0000 (---------------) + I in
+ 0x00229a83, // n0x1b40 c0x0000 (---------------) + I org
+ 0x00205882, // n0x1b41 c0x0000 (---------------) + I ac
+ 0x003a3107, // n0x1b42 c0x0000 (---------------) + I adygeya
+ 0x002700c5, // n0x1b43 c0x0000 (---------------) + I altai
+ 0x00227844, // n0x1b44 c0x0000 (---------------) + I amur
+ 0x00377b46, // n0x1b45 c0x0000 (---------------) + I amursk
+ 0x00305d4b, // n0x1b46 c0x0000 (---------------) + I arkhangelsk
+ 0x002533c9, // n0x1b47 c0x0000 (---------------) + I astrakhan
+ 0x00393606, // n0x1b48 c0x0000 (---------------) + I baikal
+ 0x00321409, // n0x1b49 c0x0000 (---------------) + I bashkiria
+ 0x002b2848, // n0x1b4a c0x0000 (---------------) + I belgorod
+ 0x00204043, // n0x1b4b c0x0000 (---------------) + I bir
+ 0x000f5248, // n0x1b4c c0x0000 (---------------) + blogspot
+ 0x00223e07, // n0x1b4d c0x0000 (---------------) + I bryansk
+ 0x002ff348, // n0x1b4e c0x0000 (---------------) + I buryatia
+ 0x00226843, // n0x1b4f c0x0000 (---------------) + I cbg
+ 0x0025e404, // n0x1b50 c0x0000 (---------------) + I chel
+ 0x00265a4b, // n0x1b51 c0x0000 (---------------) + I chelyabinsk
+ 0x002a6585, // n0x1b52 c0x0000 (---------------) + I chita
+ 0x002b7388, // n0x1b53 c0x0000 (---------------) + I chukotka
+ 0x00333c89, // n0x1b54 c0x0000 (---------------) + I chuvashia
+ 0x00255883, // n0x1b55 c0x0000 (---------------) + I cmw
+ 0x0022edc3, // n0x1b56 c0x0000 (---------------) + I com
+ 0x00321848, // n0x1b57 c0x0000 (---------------) + I dagestan
+ 0x002e4187, // n0x1b58 c0x0000 (---------------) + I dudinka
+ 0x00363886, // n0x1b59 c0x0000 (---------------) + I e-burg
+ 0x002349c3, // n0x1b5a c0x0000 (---------------) + I edu
+ 0x00382647, // n0x1b5b c0x0000 (---------------) + I fareast
+ 0x00275003, // n0x1b5c c0x0000 (---------------) + I gov
+ 0x003318c6, // n0x1b5d c0x0000 (---------------) + I grozny
+ 0x0026f683, // n0x1b5e c0x0000 (---------------) + I int
+ 0x0022b3c7, // n0x1b5f c0x0000 (---------------) + I irkutsk
+ 0x00305647, // n0x1b60 c0x0000 (---------------) + I ivanovo
+ 0x00383b47, // n0x1b61 c0x0000 (---------------) + I izhevsk
+ 0x002e7105, // n0x1b62 c0x0000 (---------------) + I jamal
+ 0x00206703, // n0x1b63 c0x0000 (---------------) + I jar
+ 0x0020e7cb, // n0x1b64 c0x0000 (---------------) + I joshkar-ola
+ 0x00324a48, // n0x1b65 c0x0000 (---------------) + I k-uralsk
+ 0x0022a608, // n0x1b66 c0x0000 (---------------) + I kalmykia
+ 0x00394486, // n0x1b67 c0x0000 (---------------) + I kaluga
+ 0x003229c9, // n0x1b68 c0x0000 (---------------) + I kamchatka
+ 0x00374707, // n0x1b69 c0x0000 (---------------) + I karelia
+ 0x002f0ec5, // n0x1b6a c0x0000 (---------------) + I kazan
+ 0x002a6c04, // n0x1b6b c0x0000 (---------------) + I kchr
+ 0x002c3bc8, // n0x1b6c c0x0000 (---------------) + I kemerovo
+ 0x00325b0a, // n0x1b6d c0x0000 (---------------) + I khabarovsk
+ 0x00325d49, // n0x1b6e c0x0000 (---------------) + I khakassia
+ 0x0023cc43, // n0x1b6f c0x0000 (---------------) + I khv
+ 0x00276145, // n0x1b70 c0x0000 (---------------) + I kirov
+ 0x0026b543, // n0x1b71 c0x0000 (---------------) + I kms
+ 0x0029b106, // n0x1b72 c0x0000 (---------------) + I koenig
+ 0x002e25c4, // n0x1b73 c0x0000 (---------------) + I komi
+ 0x002f5b48, // n0x1b74 c0x0000 (---------------) + I kostroma
+ 0x0038de0b, // n0x1b75 c0x0000 (---------------) + I krasnoyarsk
+ 0x003343c5, // n0x1b76 c0x0000 (---------------) + I kuban
+ 0x002b25c6, // n0x1b77 c0x0000 (---------------) + I kurgan
+ 0x002b3f05, // n0x1b78 c0x0000 (---------------) + I kursk
+ 0x002b46c8, // n0x1b79 c0x0000 (---------------) + I kustanai
+ 0x002b5ac7, // n0x1b7a c0x0000 (---------------) + I kuzbass
+ 0x0020e207, // n0x1b7b c0x0000 (---------------) + I lipetsk
+ 0x0033dbc7, // n0x1b7c c0x0000 (---------------) + I magadan
+ 0x002c3fc8, // n0x1b7d c0x0000 (---------------) + I magnitka
+ 0x00219884, // n0x1b7e c0x0000 (---------------) + I mari
+ 0x0023a707, // n0x1b7f c0x0000 (---------------) + I mari-el
+ 0x00273886, // n0x1b80 c0x0000 (---------------) + I marine
+ 0x00215b43, // n0x1b81 c0x0000 (---------------) + I mil
+ 0x002c2588, // n0x1b82 c0x0000 (---------------) + I mordovia
+ 0x0024b7c3, // n0x1b83 c0x0000 (---------------) + I msk
+ 0x002ca948, // n0x1b84 c0x0000 (---------------) + I murmansk
+ 0x002ced45, // n0x1b85 c0x0000 (---------------) + I mytis
+ 0x00200988, // n0x1b86 c0x0000 (---------------) + I nakhodka
+ 0x00234bc7, // n0x1b87 c0x0000 (---------------) + I nalchik
+ 0x0021d8c3, // n0x1b88 c0x0000 (---------------) + I net
+ 0x0030a903, // n0x1b89 c0x0000 (---------------) + I nkz
+ 0x0039ee04, // n0x1b8a c0x0000 (---------------) + I nnov
+ 0x00371547, // n0x1b8b c0x0000 (---------------) + I norilsk
+ 0x002062c3, // n0x1b8c c0x0000 (---------------) + I nov
+ 0x0030570b, // n0x1b8d c0x0000 (---------------) + I novosibirsk
+ 0x00215403, // n0x1b8e c0x0000 (---------------) + I nsk
+ 0x0024b784, // n0x1b8f c0x0000 (---------------) + I omsk
+ 0x0038ca08, // n0x1b90 c0x0000 (---------------) + I orenburg
+ 0x00229a83, // n0x1b91 c0x0000 (---------------) + I org
+ 0x002d2805, // n0x1b92 c0x0000 (---------------) + I oryol
+ 0x0028de85, // n0x1b93 c0x0000 (---------------) + I oskol
+ 0x002a11c6, // n0x1b94 c0x0000 (---------------) + I palana
+ 0x00209a05, // n0x1b95 c0x0000 (---------------) + I penza
+ 0x002cf104, // n0x1b96 c0x0000 (---------------) + I perm
+ 0x002099c2, // n0x1b97 c0x0000 (---------------) + I pp
+ 0x002dee43, // n0x1b98 c0x0000 (---------------) + I ptz
+ 0x0036774a, // n0x1b99 c0x0000 (---------------) + I pyatigorsk
+ 0x0030b843, // n0x1b9a c0x0000 (---------------) + I rnd
+ 0x002a7f09, // n0x1b9b c0x0000 (---------------) + I rubtsovsk
+ 0x0023a406, // n0x1b9c c0x0000 (---------------) + I ryazan
+ 0x00218a08, // n0x1b9d c0x0000 (---------------) + I sakhalin
+ 0x00284706, // n0x1b9e c0x0000 (---------------) + I samara
+ 0x00220b87, // n0x1b9f c0x0000 (---------------) + I saratov
+ 0x002c1588, // n0x1ba0 c0x0000 (---------------) + I simbirsk
+ 0x002d5c88, // n0x1ba1 c0x0000 (---------------) + I smolensk
+ 0x002d1083, // n0x1ba2 c0x0000 (---------------) + I snz
+ 0x00263883, // n0x1ba3 c0x0000 (---------------) + I spb
+ 0x00220f49, // n0x1ba4 c0x0000 (---------------) + I stavropol
+ 0x00283a03, // n0x1ba5 c0x0000 (---------------) + I stv
+ 0x00340446, // n0x1ba6 c0x0000 (---------------) + I surgut
+ 0x0026fd46, // n0x1ba7 c0x0000 (---------------) + I syzran
+ 0x00314d86, // n0x1ba8 c0x0000 (---------------) + I tambov
+ 0x0036a389, // n0x1ba9 c0x0000 (---------------) + I tatarstan
+ 0x002f5084, // n0x1baa c0x0000 (---------------) + I test
+ 0x00210443, // n0x1bab c0x0000 (---------------) + I tom
+ 0x00324945, // n0x1bac c0x0000 (---------------) + I tomsk
+ 0x002eba09, // n0x1bad c0x0000 (---------------) + I tsaritsyn
+ 0x0020e303, // n0x1bae c0x0000 (---------------) + I tsk
+ 0x00357704, // n0x1baf c0x0000 (---------------) + I tula
+ 0x002e85c4, // n0x1bb0 c0x0000 (---------------) + I tuva
+ 0x00206fc4, // n0x1bb1 c0x0000 (---------------) + I tver
+ 0x00357246, // n0x1bb2 c0x0000 (---------------) + I tyumen
+ 0x00214103, // n0x1bb3 c0x0000 (---------------) + I udm
+ 0x00214108, // n0x1bb4 c0x0000 (---------------) + I udmurtia
+ 0x00253008, // n0x1bb5 c0x0000 (---------------) + I ulan-ude
+ 0x00356106, // n0x1bb6 c0x0000 (---------------) + I vdonsk
+ 0x002f0ccb, // n0x1bb7 c0x0000 (---------------) + I vladikavkaz
+ 0x002f1008, // n0x1bb8 c0x0000 (---------------) + I vladimir
+ 0x002f120b, // n0x1bb9 c0x0000 (---------------) + I vladivostok
+ 0x002f1849, // n0x1bba c0x0000 (---------------) + I volgograd
+ 0x002f2587, // n0x1bbb c0x0000 (---------------) + I vologda
+ 0x002f3348, // n0x1bbc c0x0000 (---------------) + I voronezh
+ 0x002f46c3, // n0x1bbd c0x0000 (---------------) + I vrn
+ 0x00394386, // n0x1bbe c0x0000 (---------------) + I vyatka
+ 0x00394787, // n0x1bbf c0x0000 (---------------) + I yakutia
+ 0x0028f985, // n0x1bc0 c0x0000 (---------------) + I yamal
+ 0x00343309, // n0x1bc1 c0x0000 (---------------) + I yaroslavl
+ 0x0030270d, // n0x1bc2 c0x0000 (---------------) + I yekaterinburg
+ 0x00218851, // n0x1bc3 c0x0000 (---------------) + I yuzhno-sakhalinsk
+ 0x0022a045, // n0x1bc4 c0x0000 (---------------) + I zgrad
+ 0x00205882, // n0x1bc5 c0x0000 (---------------) + I ac
+ 0x00208182, // n0x1bc6 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1bc7 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1bc8 c0x0000 (---------------) + I edu
+ 0x002fa744, // n0x1bc9 c0x0000 (---------------) + I gouv
+ 0x00275003, // n0x1bca c0x0000 (---------------) + I gov
+ 0x0026f683, // n0x1bcb c0x0000 (---------------) + I int
+ 0x00215b43, // n0x1bcc c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1bcd c0x0000 (---------------) + I net
+ 0x0022edc3, // n0x1bce c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1bcf c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1bd0 c0x0000 (---------------) + I gov
+ 0x00211c43, // n0x1bd1 c0x0000 (---------------) + I med
+ 0x0021d8c3, // n0x1bd2 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1bd3 c0x0000 (---------------) + I org
+ 0x00287e83, // n0x1bd4 c0x0000 (---------------) + I pub
+ 0x00215d43, // n0x1bd5 c0x0000 (---------------) + I sch
+ 0x0022edc3, // n0x1bd6 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1bd7 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1bd8 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1bd9 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1bda c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1bdb c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1bdc c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1bdd c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1bde c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1bdf c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1be0 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1be1 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1be2 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x1be3 c0x0000 (---------------) + I info
+ 0x00211c43, // n0x1be4 c0x0000 (---------------) + I med
+ 0x0021d8c3, // n0x1be5 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1be6 c0x0000 (---------------) + I org
+ 0x00206fc2, // n0x1be7 c0x0000 (---------------) + I tv
+ 0x00200101, // n0x1be8 c0x0000 (---------------) + I a
+ 0x00205882, // n0x1be9 c0x0000 (---------------) + I ac
+ 0x00200001, // n0x1bea c0x0000 (---------------) + I b
+ 0x00312842, // n0x1beb c0x0000 (---------------) + I bd
+ 0x000f5248, // n0x1bec c0x0000 (---------------) + blogspot
+ 0x0021b5c5, // n0x1bed c0x0000 (---------------) + I brand
+ 0x00200301, // n0x1bee c0x0000 (---------------) + I c
+ 0x0002edc3, // n0x1bef c0x0000 (---------------) + com
+ 0x00200401, // n0x1bf0 c0x0000 (---------------) + I d
+ 0x00200081, // n0x1bf1 c0x0000 (---------------) + I e
+ 0x00200381, // n0x1bf2 c0x0000 (---------------) + I f
+ 0x00325a42, // n0x1bf3 c0x0000 (---------------) + I fh
+ 0x00325a44, // n0x1bf4 c0x0000 (---------------) + I fhsk
+ 0x003603c3, // n0x1bf5 c0x0000 (---------------) + I fhv
+ 0x002006c1, // n0x1bf6 c0x0000 (---------------) + I g
+ 0x00200a41, // n0x1bf7 c0x0000 (---------------) + I h
+ 0x00200041, // n0x1bf8 c0x0000 (---------------) + I i
+ 0x00200a01, // n0x1bf9 c0x0000 (---------------) + I k
+ 0x002a09c7, // n0x1bfa c0x0000 (---------------) + I komforb
+ 0x002a44cf, // n0x1bfb c0x0000 (---------------) + I kommunalforbund
+ 0x002b4006, // n0x1bfc c0x0000 (---------------) + I komvux
+ 0x00200201, // n0x1bfd c0x0000 (---------------) + I l
+ 0x00262106, // n0x1bfe c0x0000 (---------------) + I lanbib
+ 0x00200181, // n0x1bff c0x0000 (---------------) + I m
+ 0x002005c1, // n0x1c00 c0x0000 (---------------) + I n
+ 0x0030fd8e, // n0x1c01 c0x0000 (---------------) + I naturbruksgymn
+ 0x00200281, // n0x1c02 c0x0000 (---------------) + I o
+ 0x00229a83, // n0x1c03 c0x0000 (---------------) + I org
+ 0x00200c41, // n0x1c04 c0x0000 (---------------) + I p
+ 0x0037e605, // n0x1c05 c0x0000 (---------------) + I parti
+ 0x002099c2, // n0x1c06 c0x0000 (---------------) + I pp
+ 0x00240d05, // n0x1c07 c0x0000 (---------------) + I press
+ 0x002002c1, // n0x1c08 c0x0000 (---------------) + I r
+ 0x00201a41, // n0x1c09 c0x0000 (---------------) + I s
+ 0x00200141, // n0x1c0a c0x0000 (---------------) + I t
+ 0x00200142, // n0x1c0b c0x0000 (---------------) + I tm
+ 0x002008c1, // n0x1c0c c0x0000 (---------------) + I u
+ 0x002010c1, // n0x1c0d c0x0000 (---------------) + I w
+ 0x0020d041, // n0x1c0e c0x0000 (---------------) + I x
+ 0x00201341, // n0x1c0f c0x0000 (---------------) + I y
+ 0x00202881, // n0x1c10 c0x0000 (---------------) + I z
+ 0x000f5248, // n0x1c11 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1c12 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1c13 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1c14 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1c15 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1c16 c0x0000 (---------------) + I org
+ 0x0021ffc3, // n0x1c17 c0x0000 (---------------) + I per
+ 0x0022edc3, // n0x1c18 c0x0000 (---------------) + I com
+ 0x00275003, // n0x1c19 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1c1a c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1c1b c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1c1c c0x0000 (---------------) + I org
+ 0x014d3788, // n0x1c1d c0x0005 (---------------)* o platform
+ 0x000f5248, // n0x1c1e c0x0000 (---------------) + blogspot
+ 0x000f5248, // n0x1c1f c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1c20 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1c21 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1c22 c0x0000 (---------------) + I gov
+ 0x0021d8c3, // n0x1c23 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1c24 c0x0000 (---------------) + I org
+ 0x002011c3, // n0x1c25 c0x0000 (---------------) + I art
+ 0x000f5248, // n0x1c26 c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1c27 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1c28 c0x0000 (---------------) + I edu
+ 0x002fa744, // n0x1c29 c0x0000 (---------------) + I gouv
+ 0x00229a83, // n0x1c2a c0x0000 (---------------) + I org
+ 0x003372c5, // n0x1c2b c0x0000 (---------------) + I perso
+ 0x00281a04, // n0x1c2c c0x0000 (---------------) + I univ
+ 0x0022edc3, // n0x1c2d c0x0000 (---------------) + I com
+ 0x0021d8c3, // n0x1c2e c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1c2f c0x0000 (---------------) + I org
+ 0x00208182, // n0x1c30 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1c31 c0x0000 (---------------) + I com
+ 0x00232549, // n0x1c32 c0x0000 (---------------) + I consulado
+ 0x002349c3, // n0x1c33 c0x0000 (---------------) + I edu
+ 0x002373c9, // n0x1c34 c0x0000 (---------------) + I embaixada
+ 0x00275003, // n0x1c35 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1c36 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1c37 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1c38 c0x0000 (---------------) + I org
+ 0x002db048, // n0x1c39 c0x0000 (---------------) + I principe
+ 0x00215087, // n0x1c3a c0x0000 (---------------) + I saotome
+ 0x0038c985, // n0x1c3b c0x0000 (---------------) + I store
+ 0x003a3107, // n0x1c3c c0x0000 (---------------) + I adygeya
+ 0x00305d4b, // n0x1c3d c0x0000 (---------------) + I arkhangelsk
+ 0x00205648, // n0x1c3e c0x0000 (---------------) + I balashov
+ 0x00321409, // n0x1c3f c0x0000 (---------------) + I bashkiria
+ 0x00223e07, // n0x1c40 c0x0000 (---------------) + I bryansk
+ 0x00321848, // n0x1c41 c0x0000 (---------------) + I dagestan
+ 0x003318c6, // n0x1c42 c0x0000 (---------------) + I grozny
+ 0x00305647, // n0x1c43 c0x0000 (---------------) + I ivanovo
+ 0x0022a608, // n0x1c44 c0x0000 (---------------) + I kalmykia
+ 0x00394486, // n0x1c45 c0x0000 (---------------) + I kaluga
+ 0x00374707, // n0x1c46 c0x0000 (---------------) + I karelia
+ 0x00325d49, // n0x1c47 c0x0000 (---------------) + I khakassia
+ 0x00383cc9, // n0x1c48 c0x0000 (---------------) + I krasnodar
+ 0x002b25c6, // n0x1c49 c0x0000 (---------------) + I kurgan
+ 0x002b3245, // n0x1c4a c0x0000 (---------------) + I lenug
+ 0x002c2588, // n0x1c4b c0x0000 (---------------) + I mordovia
+ 0x0024b7c3, // n0x1c4c c0x0000 (---------------) + I msk
+ 0x002ca948, // n0x1c4d c0x0000 (---------------) + I murmansk
+ 0x00234bc7, // n0x1c4e c0x0000 (---------------) + I nalchik
+ 0x002062c3, // n0x1c4f c0x0000 (---------------) + I nov
+ 0x00321d87, // n0x1c50 c0x0000 (---------------) + I obninsk
+ 0x00209a05, // n0x1c51 c0x0000 (---------------) + I penza
+ 0x002d7548, // n0x1c52 c0x0000 (---------------) + I pokrovsk
+ 0x0026d045, // n0x1c53 c0x0000 (---------------) + I sochi
+ 0x00263883, // n0x1c54 c0x0000 (---------------) + I spb
+ 0x0034ec49, // n0x1c55 c0x0000 (---------------) + I togliatti
+ 0x002a0847, // n0x1c56 c0x0000 (---------------) + I troitsk
+ 0x00357704, // n0x1c57 c0x0000 (---------------) + I tula
+ 0x002e85c4, // n0x1c58 c0x0000 (---------------) + I tuva
+ 0x002f0ccb, // n0x1c59 c0x0000 (---------------) + I vladikavkaz
+ 0x002f1008, // n0x1c5a c0x0000 (---------------) + I vladimir
+ 0x002f2587, // n0x1c5b c0x0000 (---------------) + I vologda
+ 0x0022edc3, // n0x1c5c c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1c5d c0x0000 (---------------) + I edu
+ 0x00209f03, // n0x1c5e c0x0000 (---------------) + I gob
+ 0x00229a83, // n0x1c5f c0x0000 (---------------) + I org
+ 0x0023e143, // n0x1c60 c0x0000 (---------------) + I red
+ 0x00275003, // n0x1c61 c0x0000 (---------------) + I gov
+ 0x0022edc3, // n0x1c62 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1c63 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1c64 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1c65 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1c66 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1c67 c0x0000 (---------------) + I org
+ 0x00205882, // n0x1c68 c0x0000 (---------------) + I ac
+ 0x00208182, // n0x1c69 c0x0000 (---------------) + I co
+ 0x00229a83, // n0x1c6a c0x0000 (---------------) + I org
+ 0x000f5248, // n0x1c6b c0x0000 (---------------) + blogspot
+ 0x00205882, // n0x1c6c c0x0000 (---------------) + I ac
+ 0x00208182, // n0x1c6d c0x0000 (---------------) + I co
+ 0x00208502, // n0x1c6e c0x0000 (---------------) + I go
+ 0x002020c2, // n0x1c6f c0x0000 (---------------) + I in
+ 0x0020e5c2, // n0x1c70 c0x0000 (---------------) + I mi
+ 0x0021d8c3, // n0x1c71 c0x0000 (---------------) + I net
+ 0x00200282, // n0x1c72 c0x0000 (---------------) + I or
+ 0x00205882, // n0x1c73 c0x0000 (---------------) + I ac
+ 0x0030a143, // n0x1c74 c0x0000 (---------------) + I biz
+ 0x00208182, // n0x1c75 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1c76 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1c77 c0x0000 (---------------) + I edu
+ 0x00208502, // n0x1c78 c0x0000 (---------------) + I go
+ 0x00275003, // n0x1c79 c0x0000 (---------------) + I gov
+ 0x0026f683, // n0x1c7a c0x0000 (---------------) + I int
+ 0x00215b43, // n0x1c7b c0x0000 (---------------) + I mil
+ 0x0027ca84, // n0x1c7c c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x1c7d c0x0000 (---------------) + I net
+ 0x00217183, // n0x1c7e c0x0000 (---------------) + I nic
+ 0x00229a83, // n0x1c7f c0x0000 (---------------) + I org
+ 0x002f5084, // n0x1c80 c0x0000 (---------------) + I test
+ 0x0021fa83, // n0x1c81 c0x0000 (---------------) + I web
+ 0x00275003, // n0x1c82 c0x0000 (---------------) + I gov
+ 0x00208182, // n0x1c83 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1c84 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1c85 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1c86 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1c87 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1c88 c0x0000 (---------------) + I net
+ 0x0020e543, // n0x1c89 c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x1c8a c0x0000 (---------------) + I org
+ 0x0030a6c7, // n0x1c8b c0x0000 (---------------) + I agrinet
+ 0x0022edc3, // n0x1c8c c0x0000 (---------------) + I com
+ 0x002215c7, // n0x1c8d c0x0000 (---------------) + I defense
+ 0x00358006, // n0x1c8e c0x0000 (---------------) + I edunet
+ 0x002153c3, // n0x1c8f c0x0000 (---------------) + I ens
+ 0x0020e003, // n0x1c90 c0x0000 (---------------) + I fin
+ 0x00275003, // n0x1c91 c0x0000 (---------------) + I gov
+ 0x00202603, // n0x1c92 c0x0000 (---------------) + I ind
+ 0x0038a144, // n0x1c93 c0x0000 (---------------) + I info
+ 0x0035c284, // n0x1c94 c0x0000 (---------------) + I intl
+ 0x002d2d06, // n0x1c95 c0x0000 (---------------) + I mincom
+ 0x0025cec3, // n0x1c96 c0x0000 (---------------) + I nat
+ 0x0021d8c3, // n0x1c97 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1c98 c0x0000 (---------------) + I org
+ 0x003372c5, // n0x1c99 c0x0000 (---------------) + I perso
+ 0x00389984, // n0x1c9a c0x0000 (---------------) + I rnrt
+ 0x002a9743, // n0x1c9b c0x0000 (---------------) + I rns
+ 0x002096c3, // n0x1c9c c0x0000 (---------------) + I rnu
+ 0x002ba087, // n0x1c9d c0x0000 (---------------) + I tourism
+ 0x002ce685, // n0x1c9e c0x0000 (---------------) + I turen
+ 0x0022edc3, // n0x1c9f c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1ca0 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1ca1 c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1ca2 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1ca3 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1ca4 c0x0000 (---------------) + I org
+ 0x00200602, // n0x1ca5 c0x0000 (---------------) + I av
+ 0x002c9743, // n0x1ca6 c0x0000 (---------------) + I bbs
+ 0x002b2843, // n0x1ca7 c0x0000 (---------------) + I bel
+ 0x0030a143, // n0x1ca8 c0x0000 (---------------) + I biz
+ 0x5162edc3, // n0x1ca9 c0x0145 (n0x1cba-n0x1cbb) + I com
+ 0x00204d42, // n0x1caa c0x0000 (---------------) + I dr
+ 0x002349c3, // n0x1cab c0x0000 (---------------) + I edu
+ 0x00206243, // n0x1cac c0x0000 (---------------) + I gen
+ 0x00275003, // n0x1cad c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x1cae c0x0000 (---------------) + I info
+ 0x00324c03, // n0x1caf c0x0000 (---------------) + I k12
+ 0x00308603, // n0x1cb0 c0x0000 (---------------) + I kep
+ 0x00215b43, // n0x1cb1 c0x0000 (---------------) + I mil
+ 0x0027ca84, // n0x1cb2 c0x0000 (---------------) + I name
+ 0x51a03402, // n0x1cb3 c0x0146 (n0x1cbb-n0x1cbc) + I nc
+ 0x0021d8c3, // n0x1cb4 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1cb5 c0x0000 (---------------) + I org
+ 0x002210c3, // n0x1cb6 c0x0000 (---------------) + I pol
+ 0x0022fb43, // n0x1cb7 c0x0000 (---------------) + I tel
+ 0x00206fc2, // n0x1cb8 c0x0000 (---------------) + I tv
+ 0x0021fa83, // n0x1cb9 c0x0000 (---------------) + I web
+ 0x000f5248, // n0x1cba c0x0000 (---------------) + blogspot
+ 0x00275003, // n0x1cbb c0x0000 (---------------) + I gov
+ 0x002bcb84, // n0x1cbc c0x0000 (---------------) + I aero
+ 0x0030a143, // n0x1cbd c0x0000 (---------------) + I biz
+ 0x00208182, // n0x1cbe c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1cbf c0x0000 (---------------) + I com
+ 0x00238284, // n0x1cc0 c0x0000 (---------------) + I coop
+ 0x002349c3, // n0x1cc1 c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1cc2 c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x1cc3 c0x0000 (---------------) + I info
+ 0x0026f683, // n0x1cc4 c0x0000 (---------------) + I int
+ 0x002cd804, // n0x1cc5 c0x0000 (---------------) + I jobs
+ 0x00207804, // n0x1cc6 c0x0000 (---------------) + I mobi
+ 0x002cc746, // n0x1cc7 c0x0000 (---------------) + I museum
+ 0x0027ca84, // n0x1cc8 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x1cc9 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1cca c0x0000 (---------------) + I org
+ 0x00220283, // n0x1ccb c0x0000 (---------------) + I pro
+ 0x00293486, // n0x1ccc c0x0000 (---------------) + I travel
+ 0x0004e18b, // n0x1ccd c0x0000 (---------------) + better-than
+ 0x00011a06, // n0x1cce c0x0000 (---------------) + dyndns
+ 0x0001f8ca, // n0x1ccf c0x0000 (---------------) + on-the-web
+ 0x000f478a, // n0x1cd0 c0x0000 (---------------) + worse-than
+ 0x000f5248, // n0x1cd1 c0x0000 (---------------) + blogspot
+ 0x00202504, // n0x1cd2 c0x0000 (---------------) + I club
+ 0x0022edc3, // n0x1cd3 c0x0000 (---------------) + I com
+ 0x0030a104, // n0x1cd4 c0x0000 (---------------) + I ebiz
+ 0x002349c3, // n0x1cd5 c0x0000 (---------------) + I edu
+ 0x0029f084, // n0x1cd6 c0x0000 (---------------) + I game
+ 0x00275003, // n0x1cd7 c0x0000 (---------------) + I gov
+ 0x00306f03, // n0x1cd8 c0x0000 (---------------) + I idv
+ 0x00215b43, // n0x1cd9 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1cda c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1cdb c0x0000 (---------------) + I org
+ 0x0031f50b, // n0x1cdc c0x0000 (---------------) + I xn--czrw28b
+ 0x0038f90a, // n0x1cdd c0x0000 (---------------) + I xn--uc0atv
+ 0x003a20cc, // n0x1cde c0x0000 (---------------) + I xn--zf0ao64a
+ 0x00205882, // n0x1cdf c0x0000 (---------------) + I ac
+ 0x00208182, // n0x1ce0 c0x0000 (---------------) + I co
+ 0x00208502, // n0x1ce1 c0x0000 (---------------) + I go
+ 0x0022fac5, // n0x1ce2 c0x0000 (---------------) + I hotel
+ 0x0038a144, // n0x1ce3 c0x0000 (---------------) + I info
+ 0x00202302, // n0x1ce4 c0x0000 (---------------) + I me
+ 0x00215b43, // n0x1ce5 c0x0000 (---------------) + I mil
+ 0x00207804, // n0x1ce6 c0x0000 (---------------) + I mobi
+ 0x00203282, // n0x1ce7 c0x0000 (---------------) + I ne
+ 0x00200282, // n0x1ce8 c0x0000 (---------------) + I or
+ 0x002024c2, // n0x1ce9 c0x0000 (---------------) + I sc
+ 0x00206fc2, // n0x1cea c0x0000 (---------------) + I tv
+ 0x0010a143, // n0x1ceb c0x0000 (---------------) + biz
+ 0x002a3949, // n0x1cec c0x0000 (---------------) + I cherkassy
+ 0x0026fbc8, // n0x1ced c0x0000 (---------------) + I cherkasy
+ 0x00274e89, // n0x1cee c0x0000 (---------------) + I chernigov
+ 0x0036b189, // n0x1cef c0x0000 (---------------) + I chernihiv
+ 0x00296fca, // n0x1cf0 c0x0000 (---------------) + I chernivtsi
+ 0x0036658a, // n0x1cf1 c0x0000 (---------------) + I chernovtsy
+ 0x00208e82, // n0x1cf2 c0x0000 (---------------) + I ck
+ 0x0021a142, // n0x1cf3 c0x0000 (---------------) + I cn
+ 0x00008182, // n0x1cf4 c0x0000 (---------------) + co
+ 0x0022edc3, // n0x1cf5 c0x0000 (---------------) + I com
+ 0x00211e82, // n0x1cf6 c0x0000 (---------------) + I cr
+ 0x0023f186, // n0x1cf7 c0x0000 (---------------) + I crimea
+ 0x0034f802, // n0x1cf8 c0x0000 (---------------) + I cv
+ 0x002083c2, // n0x1cf9 c0x0000 (---------------) + I dn
+ 0x00377d8e, // n0x1cfa c0x0000 (---------------) + I dnepropetrovsk
+ 0x0026b20e, // n0x1cfb c0x0000 (---------------) + I dnipropetrovsk
+ 0x00274d07, // n0x1cfc c0x0000 (---------------) + I dominic
+ 0x00310607, // n0x1cfd c0x0000 (---------------) + I donetsk
+ 0x002da802, // n0x1cfe c0x0000 (---------------) + I dp
+ 0x002349c3, // n0x1cff c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1d00 c0x0000 (---------------) + I gov
+ 0x00200f02, // n0x1d01 c0x0000 (---------------) + I if
+ 0x002020c2, // n0x1d02 c0x0000 (---------------) + I in
+ 0x0023890f, // n0x1d03 c0x0000 (---------------) + I ivano-frankivsk
+ 0x00200a02, // n0x1d04 c0x0000 (---------------) + I kh
+ 0x00338dc7, // n0x1d05 c0x0000 (---------------) + I kharkiv
+ 0x00376907, // n0x1d06 c0x0000 (---------------) + I kharkov
+ 0x0022ef87, // n0x1d07 c0x0000 (---------------) + I kherson
+ 0x00238c8c, // n0x1d08 c0x0000 (---------------) + I khmelnitskiy
+ 0x0023ac0c, // n0x1d09 c0x0000 (---------------) + I khmelnytskyi
+ 0x00203144, // n0x1d0a c0x0000 (---------------) + I kiev
+ 0x0027614a, // n0x1d0b c0x0000 (---------------) + I kirovograd
+ 0x0022ccc2, // n0x1d0c c0x0000 (---------------) + I km
+ 0x002076c2, // n0x1d0d c0x0000 (---------------) + I kr
+ 0x002ab884, // n0x1d0e c0x0000 (---------------) + I krym
+ 0x00229bc2, // n0x1d0f c0x0000 (---------------) + I ks
+ 0x002b6542, // n0x1d10 c0x0000 (---------------) + I kv
+ 0x0023ae44, // n0x1d11 c0x0000 (---------------) + I kyiv
+ 0x00217282, // n0x1d12 c0x0000 (---------------) + I lg
+ 0x00208bc2, // n0x1d13 c0x0000 (---------------) + I lt
+ 0x00394507, // n0x1d14 c0x0000 (---------------) + I lugansk
+ 0x00338cc5, // n0x1d15 c0x0000 (---------------) + I lutsk
+ 0x00207302, // n0x1d16 c0x0000 (---------------) + I lv
+ 0x00238884, // n0x1d17 c0x0000 (---------------) + I lviv
+ 0x00365542, // n0x1d18 c0x0000 (---------------) + I mk
+ 0x003054c8, // n0x1d19 c0x0000 (---------------) + I mykolaiv
+ 0x0021d8c3, // n0x1d1a c0x0000 (---------------) + I net
+ 0x0020aac8, // n0x1d1b c0x0000 (---------------) + I nikolaev
+ 0x00200a82, // n0x1d1c c0x0000 (---------------) + I od
+ 0x00236385, // n0x1d1d c0x0000 (---------------) + I odesa
+ 0x0036f106, // n0x1d1e c0x0000 (---------------) + I odessa
+ 0x00229a83, // n0x1d1f c0x0000 (---------------) + I org
+ 0x00206582, // n0x1d20 c0x0000 (---------------) + I pl
+ 0x002d7e07, // n0x1d21 c0x0000 (---------------) + I poltava
+ 0x000099c2, // n0x1d22 c0x0000 (---------------) + pp
+ 0x002db285, // n0x1d23 c0x0000 (---------------) + I rivne
+ 0x00200cc5, // n0x1d24 c0x0000 (---------------) + I rovno
+ 0x00206a42, // n0x1d25 c0x0000 (---------------) + I rv
+ 0x00229a02, // n0x1d26 c0x0000 (---------------) + I sb
+ 0x00300bca, // n0x1d27 c0x0000 (---------------) + I sebastopol
+ 0x0024a08a, // n0x1d28 c0x0000 (---------------) + I sevastopol
+ 0x00215b02, // n0x1d29 c0x0000 (---------------) + I sm
+ 0x002f2c84, // n0x1d2a c0x0000 (---------------) + I sumy
+ 0x002012c2, // n0x1d2b c0x0000 (---------------) + I te
+ 0x00208fc8, // n0x1d2c c0x0000 (---------------) + I ternopil
+ 0x00211f02, // n0x1d2d c0x0000 (---------------) + I uz
+ 0x00294588, // n0x1d2e c0x0000 (---------------) + I uzhgorod
+ 0x002ebc47, // n0x1d2f c0x0000 (---------------) + I vinnica
+ 0x002ec4c9, // n0x1d30 c0x0000 (---------------) + I vinnytsia
+ 0x00200d42, // n0x1d31 c0x0000 (---------------) + I vn
+ 0x002f3105, // n0x1d32 c0x0000 (---------------) + I volyn
+ 0x00270085, // n0x1d33 c0x0000 (---------------) + I yalta
+ 0x002c010b, // n0x1d34 c0x0000 (---------------) + I zaporizhzhe
+ 0x002c0b4c, // n0x1d35 c0x0000 (---------------) + I zaporizhzhia
+ 0x0022b248, // n0x1d36 c0x0000 (---------------) + I zhitomir
+ 0x002f34c8, // n0x1d37 c0x0000 (---------------) + I zhytomyr
+ 0x00252242, // n0x1d38 c0x0000 (---------------) + I zp
+ 0x0020a3c2, // n0x1d39 c0x0000 (---------------) + I zt
+ 0x00205882, // n0x1d3a c0x0000 (---------------) + I ac
+ 0x000f5248, // n0x1d3b c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x1d3c c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1d3d c0x0000 (---------------) + I com
+ 0x00208502, // n0x1d3e c0x0000 (---------------) + I go
+ 0x00203282, // n0x1d3f c0x0000 (---------------) + I ne
+ 0x00200282, // n0x1d40 c0x0000 (---------------) + I or
+ 0x00229a83, // n0x1d41 c0x0000 (---------------) + I org
+ 0x002024c2, // n0x1d42 c0x0000 (---------------) + I sc
+ 0x00205882, // n0x1d43 c0x0000 (---------------) + I ac
+ 0x53a08182, // n0x1d44 c0x014e (n0x1d4e-n0x1d4f) + I co
+ 0x53e75003, // n0x1d45 c0x014f (n0x1d4f-n0x1d50) + I gov
+ 0x00342703, // n0x1d46 c0x0000 (---------------) + I ltd
+ 0x00202302, // n0x1d47 c0x0000 (---------------) + I me
+ 0x0021d8c3, // n0x1d48 c0x0000 (---------------) + I net
+ 0x00207e83, // n0x1d49 c0x0000 (---------------) + I nhs
+ 0x00229a83, // n0x1d4a c0x0000 (---------------) + I org
+ 0x002d4b03, // n0x1d4b c0x0000 (---------------) + I plc
+ 0x002210c6, // n0x1d4c c0x0000 (---------------) + I police
+ 0x01615d43, // n0x1d4d c0x0005 (---------------)* o I sch
+ 0x000f5248, // n0x1d4e c0x0000 (---------------) + blogspot
+ 0x000069c7, // n0x1d4f c0x0000 (---------------) + service
+ 0x546009c2, // n0x1d50 c0x0151 (n0x1d8f-n0x1d92) + I ak
+ 0x54a001c2, // n0x1d51 c0x0152 (n0x1d92-n0x1d95) + I al
+ 0x54e011c2, // n0x1d52 c0x0153 (n0x1d95-n0x1d98) + I ar
+ 0x55202002, // n0x1d53 c0x0154 (n0x1d98-n0x1d9b) + I as
+ 0x55612502, // n0x1d54 c0x0155 (n0x1d9b-n0x1d9e) + I az
+ 0x55a00302, // n0x1d55 c0x0156 (n0x1d9e-n0x1da1) + I ca
+ 0x55e08182, // n0x1d56 c0x0157 (n0x1da1-n0x1da4) + I co
+ 0x5621e002, // n0x1d57 c0x0158 (n0x1da4-n0x1da7) + I ct
+ 0x5661d602, // n0x1d58 c0x0159 (n0x1da7-n0x1daa) + I dc
+ 0x56a00402, // n0x1d59 c0x015a (n0x1daa-n0x1dad) + I de
+ 0x0026b203, // n0x1d5a c0x0000 (---------------) + I dni
+ 0x00200383, // n0x1d5b c0x0000 (---------------) + I fed
+ 0x56e03802, // n0x1d5c c0x015b (n0x1dad-n0x1db0) + I fl
+ 0x572006c2, // n0x1d5d c0x015c (n0x1db0-n0x1db3) + I ga
+ 0x57605a82, // n0x1d5e c0x015d (n0x1db3-n0x1db6) + I gu
+ 0x57a02082, // n0x1d5f c0x015e (n0x1db6-n0x1db8) + I hi
+ 0x57e0e182, // n0x1d60 c0x015f (n0x1db8-n0x1dbb) + I ia
+ 0x58205d82, // n0x1d61 c0x0160 (n0x1dbb-n0x1dbe) + I id
+ 0x58602f82, // n0x1d62 c0x0161 (n0x1dbe-n0x1dc1) + I il
+ 0x58a020c2, // n0x1d63 c0x0162 (n0x1dc1-n0x1dc4) + I in
+ 0x000aa745, // n0x1d64 c0x0000 (---------------) + is-by
+ 0x00222783, // n0x1d65 c0x0000 (---------------) + I isa
+ 0x00283944, // n0x1d66 c0x0000 (---------------) + I kids
+ 0x58e29bc2, // n0x1d67 c0x0163 (n0x1dc4-n0x1dc7) + I ks
+ 0x5923ae42, // n0x1d68 c0x0164 (n0x1dc7-n0x1dca) + I ky
+ 0x59603842, // n0x1d69 c0x0165 (n0x1dca-n0x1dcd) + I la
+ 0x0007b84b, // n0x1d6a c0x0000 (---------------) + land-4-sale
+ 0x59a00182, // n0x1d6b c0x0166 (n0x1dcd-n0x1dd0) + I ma
+ 0x5a247ac2, // n0x1d6c c0x0168 (n0x1dd3-n0x1dd6) + I md
+ 0x5a602302, // n0x1d6d c0x0169 (n0x1dd6-n0x1dd9) + I me
+ 0x5aa0e5c2, // n0x1d6e c0x016a (n0x1dd9-n0x1ddc) + I mi
+ 0x5ae1d882, // n0x1d6f c0x016b (n0x1ddc-n0x1ddf) + I mn
+ 0x5b203ec2, // n0x1d70 c0x016c (n0x1ddf-n0x1de2) + I mo
+ 0x5b602482, // n0x1d71 c0x016d (n0x1de2-n0x1de5) + I ms
+ 0x5ba35702, // n0x1d72 c0x016e (n0x1de5-n0x1de8) + I mt
+ 0x5be03402, // n0x1d73 c0x016f (n0x1de8-n0x1deb) + I nc
+ 0x5c202642, // n0x1d74 c0x0170 (n0x1deb-n0x1ded) + I nd
+ 0x5c603282, // n0x1d75 c0x0171 (n0x1ded-n0x1df0) + I ne
+ 0x5ca07e82, // n0x1d76 c0x0172 (n0x1df0-n0x1df3) + I nh
+ 0x5ce01802, // n0x1d77 c0x0173 (n0x1df3-n0x1df6) + I nj
+ 0x5d22dc02, // n0x1d78 c0x0174 (n0x1df6-n0x1df9) + I nm
+ 0x0035d983, // n0x1d79 c0x0000 (---------------) + I nsn
+ 0x5d6021c2, // n0x1d7a c0x0175 (n0x1df9-n0x1dfc) + I nv
+ 0x5da18f82, // n0x1d7b c0x0176 (n0x1dfc-n0x1dff) + I ny
+ 0x5de059c2, // n0x1d7c c0x0177 (n0x1dff-n0x1e02) + I oh
+ 0x5e20bbc2, // n0x1d7d c0x0178 (n0x1e02-n0x1e05) + I ok
+ 0x5e600282, // n0x1d7e c0x0179 (n0x1e05-n0x1e08) + I or
+ 0x5ea0ec42, // n0x1d7f c0x017a (n0x1e08-n0x1e0b) + I pa
+ 0x5ee04382, // n0x1d80 c0x017b (n0x1e0b-n0x1e0e) + I pr
+ 0x5f201702, // n0x1d81 c0x017c (n0x1e0e-n0x1e11) + I ri
+ 0x5f6024c2, // n0x1d82 c0x017d (n0x1e11-n0x1e14) + I sc
+ 0x5fa56ec2, // n0x1d83 c0x017e (n0x1e14-n0x1e16) + I sd
+ 0x000e160c, // n0x1d84 c0x0000 (---------------) + stuff-4-sale
+ 0x5fe00942, // n0x1d85 c0x017f (n0x1e16-n0x1e19) + I tn
+ 0x6026bb42, // n0x1d86 c0x0180 (n0x1e19-n0x1e1c) + I tx
+ 0x60601f82, // n0x1d87 c0x0181 (n0x1e1c-n0x1e1f) + I ut
+ 0x60a000c2, // n0x1d88 c0x0182 (n0x1e1f-n0x1e22) + I va
+ 0x60e00642, // n0x1d89 c0x0183 (n0x1e22-n0x1e25) + I vi
+ 0x61255c42, // n0x1d8a c0x0184 (n0x1e25-n0x1e28) + I vt
+ 0x616010c2, // n0x1d8b c0x0185 (n0x1e28-n0x1e2b) + I wa
+ 0x61a02e42, // n0x1d8c c0x0186 (n0x1e2b-n0x1e2e) + I wi
+ 0x61e6e502, // n0x1d8d c0x0187 (n0x1e2e-n0x1e2f) + I wv
+ 0x6225d682, // n0x1d8e c0x0188 (n0x1e2f-n0x1e32) + I wy
+ 0x0021db82, // n0x1d8f c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1d90 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1d91 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1d92 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1d93 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1d94 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1d95 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1d96 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1d97 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1d98 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1d99 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1d9a c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1d9b c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1d9c c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1d9d c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1d9e c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1d9f c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1da0 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1da1 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1da2 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1da3 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1da4 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1da5 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1da6 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1da7 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1da8 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1da9 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1daa c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dab c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dac c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dad c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dae c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1daf c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1db0 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1db1 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1db2 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1db3 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1db4 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1db5 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1db6 c0x0000 (---------------) + I cc
+ 0x00265503, // n0x1db7 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1db8 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1db9 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dba c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dbb c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dbc c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dbd c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dbe c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dbf c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dc0 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dc1 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dc2 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dc3 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dc4 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dc5 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dc6 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dc7 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dc8 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dc9 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dca c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dcb c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dcc c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dcd c0x0000 (---------------) + I cc
+ 0x59f24c03, // n0x1dce c0x0167 (n0x1dd0-n0x1dd3) + I k12
+ 0x00265503, // n0x1dcf c0x0000 (---------------) + I lib
+ 0x003120c4, // n0x1dd0 c0x0000 (---------------) + I chtr
+ 0x0026fac6, // n0x1dd1 c0x0000 (---------------) + I paroch
+ 0x002def03, // n0x1dd2 c0x0000 (---------------) + I pvt
+ 0x0021db82, // n0x1dd3 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dd4 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dd5 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dd6 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dd7 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dd8 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dd9 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dda c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1ddb c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1ddc c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1ddd c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dde c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1ddf c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1de0 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1de1 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1de2 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1de3 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1de4 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1de5 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1de6 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1de7 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1de8 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1de9 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dea c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1deb c0x0000 (---------------) + I cc
+ 0x00265503, // n0x1dec c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1ded c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dee c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1def c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1df0 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1df1 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1df2 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1df3 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1df4 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1df5 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1df6 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1df7 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1df8 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1df9 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dfa c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dfb c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dfc c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1dfd c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1dfe c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1dff c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e00 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e01 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e02 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e03 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e04 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e05 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e06 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e07 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e08 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e09 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e0a c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e0b c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e0c c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e0d c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e0e c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e0f c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e10 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e11 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e12 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e13 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e14 c0x0000 (---------------) + I cc
+ 0x00265503, // n0x1e15 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e16 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e17 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e18 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e19 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e1a c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e1b c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e1c c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e1d c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e1e c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e1f c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e20 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e21 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e22 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e23 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e24 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e25 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e26 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e27 c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e28 c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e29 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e2a c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e2b c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e2c c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e2d c0x0000 (---------------) + I lib
+ 0x0021db82, // n0x1e2e c0x0000 (---------------) + I cc
+ 0x0021db82, // n0x1e2f c0x0000 (---------------) + I cc
+ 0x00324c03, // n0x1e30 c0x0000 (---------------) + I k12
+ 0x00265503, // n0x1e31 c0x0000 (---------------) + I lib
+ 0x62a2edc3, // n0x1e32 c0x018a (n0x1e38-n0x1e39) + I com
+ 0x002349c3, // n0x1e33 c0x0000 (---------------) + I edu
+ 0x0024d643, // n0x1e34 c0x0000 (---------------) + I gub
+ 0x00215b43, // n0x1e35 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1e36 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e37 c0x0000 (---------------) + I org
+ 0x000f5248, // n0x1e38 c0x0000 (---------------) + blogspot
+ 0x00208182, // n0x1e39 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1e3a c0x0000 (---------------) + I com
+ 0x0021d8c3, // n0x1e3b c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e3c c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1e3d c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1e3e c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1e3f c0x0000 (---------------) + I gov
+ 0x00215b43, // n0x1e40 c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1e41 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e42 c0x0000 (---------------) + I org
+ 0x00243984, // n0x1e43 c0x0000 (---------------) + I arts
+ 0x00208182, // n0x1e44 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1e45 c0x0000 (---------------) + I com
+ 0x0022dec3, // n0x1e46 c0x0000 (---------------) + I e12
+ 0x002349c3, // n0x1e47 c0x0000 (---------------) + I edu
+ 0x00247a04, // n0x1e48 c0x0000 (---------------) + I firm
+ 0x00209f03, // n0x1e49 c0x0000 (---------------) + I gob
+ 0x00275003, // n0x1e4a c0x0000 (---------------) + I gov
+ 0x0038a144, // n0x1e4b c0x0000 (---------------) + I info
+ 0x0026f683, // n0x1e4c c0x0000 (---------------) + I int
+ 0x00215b43, // n0x1e4d c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1e4e c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e4f c0x0000 (---------------) + I org
+ 0x00226f03, // n0x1e50 c0x0000 (---------------) + I rec
+ 0x0038c985, // n0x1e51 c0x0000 (---------------) + I store
+ 0x002a3c43, // n0x1e52 c0x0000 (---------------) + I tec
+ 0x0021fa83, // n0x1e53 c0x0000 (---------------) + I web
+ 0x00208182, // n0x1e54 c0x0000 (---------------) + I co
+ 0x0022edc3, // n0x1e55 c0x0000 (---------------) + I com
+ 0x00324c03, // n0x1e56 c0x0000 (---------------) + I k12
+ 0x0021d8c3, // n0x1e57 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e58 c0x0000 (---------------) + I org
+ 0x00205882, // n0x1e59 c0x0000 (---------------) + I ac
+ 0x0030a143, // n0x1e5a c0x0000 (---------------) + I biz
+ 0x000f5248, // n0x1e5b c0x0000 (---------------) + blogspot
+ 0x0022edc3, // n0x1e5c c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1e5d c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1e5e c0x0000 (---------------) + I gov
+ 0x002a51c6, // n0x1e5f c0x0000 (---------------) + I health
+ 0x0038a144, // n0x1e60 c0x0000 (---------------) + I info
+ 0x0026f683, // n0x1e61 c0x0000 (---------------) + I int
+ 0x0027ca84, // n0x1e62 c0x0000 (---------------) + I name
+ 0x0021d8c3, // n0x1e63 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e64 c0x0000 (---------------) + I org
+ 0x00220283, // n0x1e65 c0x0000 (---------------) + I pro
+ 0x0022edc3, // n0x1e66 c0x0000 (---------------) + I com
+ 0x002349c3, // n0x1e67 c0x0000 (---------------) + I edu
+ 0x0021d8c3, // n0x1e68 c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e69 c0x0000 (---------------) + I org
+ 0x0022edc3, // n0x1e6a c0x0000 (---------------) + I com
+ 0x00011a06, // n0x1e6b c0x0000 (---------------) + dyndns
+ 0x002349c3, // n0x1e6c c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1e6d c0x0000 (---------------) + I gov
+ 0x000f2d06, // n0x1e6e c0x0000 (---------------) + mypets
+ 0x0021d8c3, // n0x1e6f c0x0000 (---------------) + I net
+ 0x00229a83, // n0x1e70 c0x0000 (---------------) + I org
+ 0x00303f08, // n0x1e71 c0x0000 (---------------) + I xn--80au
+ 0x0030b909, // n0x1e72 c0x0000 (---------------) + I xn--90azh
+ 0x00318289, // n0x1e73 c0x0000 (---------------) + I xn--c1avg
+ 0x00325088, // n0x1e74 c0x0000 (---------------) + I xn--d1at
+ 0x003710c8, // n0x1e75 c0x0000 (---------------) + I xn--o1ac
+ 0x003710c9, // n0x1e76 c0x0000 (---------------) + I xn--o1ach
+ 0x00205882, // n0x1e77 c0x0000 (---------------) + I ac
+ 0x00379506, // n0x1e78 c0x0000 (---------------) + I agrica
+ 0x00209243, // n0x1e79 c0x0000 (---------------) + I alt
+ 0x65208182, // n0x1e7a c0x0194 (n0x1e88-n0x1e89) + I co
+ 0x002349c3, // n0x1e7b c0x0000 (---------------) + I edu
+ 0x00275003, // n0x1e7c c0x0000 (---------------) + I gov
+ 0x002a6f87, // n0x1e7d c0x0000 (---------------) + I grondar
+ 0x00209183, // n0x1e7e c0x0000 (---------------) + I law
+ 0x00215b43, // n0x1e7f c0x0000 (---------------) + I mil
+ 0x0021d8c3, // n0x1e80 c0x0000 (---------------) + I net
+ 0x002084c3, // n0x1e81 c0x0000 (---------------) + I ngo
+ 0x002123c3, // n0x1e82 c0x0000 (---------------) + I nis
+ 0x0020e543, // n0x1e83 c0x0000 (---------------) + I nom
+ 0x00229a83, // n0x1e84 c0x0000 (---------------) + I org
+ 0x00231d06, // n0x1e85 c0x0000 (---------------) + I school
+ 0x00200142, // n0x1e86 c0x0000 (---------------) + I tm
+ 0x0021fa83, // n0x1e87 c0x0000 (---------------) + I web
+ 0x000f5248, // n0x1e88 c0x0000 (---------------) + blogspot
}
// children is the list of nodes' children, the parent's wildcard bit and the
@@ -8084,409 +8300,409 @@ var children = [...]uint32{
0x40000000, // c0x0003 (---------------)* +
0x50000000, // c0x0004 (---------------)* !
0x60000000, // c0x0005 (---------------)* o
- 0x014fc539, // c0x0006 (n0x0539-n0x053f) +
- 0x0150053f, // c0x0007 (n0x053f-n0x0540) +
- 0x01520540, // c0x0008 (n0x0540-n0x0548) +
- 0x01684548, // c0x0009 (n0x0548-n0x05a1) +
- 0x016985a1, // c0x000a (n0x05a1-n0x05a6) +
- 0x016ac5a6, // c0x000b (n0x05a6-n0x05ab) +
- 0x016bc5ab, // c0x000c (n0x05ab-n0x05af) +
- 0x016d85af, // c0x000d (n0x05af-n0x05b6) +
- 0x016dc5b6, // c0x000e (n0x05b6-n0x05b7) +
- 0x016ec5b7, // c0x000f (n0x05b7-n0x05bb) +
- 0x017045bb, // c0x0010 (n0x05bb-n0x05c1) +
- 0x017285c1, // c0x0011 (n0x05c1-n0x05ca) +
- 0x0172c5ca, // c0x0012 (n0x05ca-n0x05cb) +
- 0x017445cb, // c0x0013 (n0x05cb-n0x05d1) +
- 0x017485d1, // c0x0014 (n0x05d1-n0x05d2) +
- 0x017645d2, // c0x0015 (n0x05d2-n0x05d9) +
- 0x017685d9, // c0x0016 (n0x05d9-n0x05da) +
- 0x017b05da, // c0x0017 (n0x05da-n0x05ec) +
- 0x017b45ec, // c0x0018 (n0x05ec-n0x05ed) +
- 0x017d45ed, // c0x0019 (n0x05ed-n0x05f5) +
- 0x017e85f5, // c0x001a (n0x05f5-n0x05fa) +
- 0x017ec5fa, // c0x001b (n0x05fa-n0x05fb) +
- 0x0181c5fb, // c0x001c (n0x05fb-n0x0607) +
- 0x01848607, // c0x001d (n0x0607-n0x0612) +
- 0x01870612, // c0x001e (n0x0612-n0x061c) +
- 0x0187861c, // c0x001f (n0x061c-n0x061e) +
- 0x0187c61e, // c0x0020 (n0x061e-n0x061f) +
- 0x0191061f, // c0x0021 (n0x061f-n0x0644) +
- 0x01924644, // c0x0022 (n0x0644-n0x0649) +
- 0x01938649, // c0x0023 (n0x0649-n0x064e) +
- 0x0195464e, // c0x0024 (n0x064e-n0x0655) +
- 0x01964655, // c0x0025 (n0x0655-n0x0659) +
- 0x01978659, // c0x0026 (n0x0659-n0x065e) +
- 0x0199c65e, // c0x0027 (n0x065e-n0x0667) +
- 0x01ab4667, // c0x0028 (n0x0667-n0x06ad) +
- 0x01ab86ad, // c0x0029 (n0x06ad-n0x06ae) +
- 0x01acc6ae, // c0x002a (n0x06ae-n0x06b3) +
- 0x01ae06b3, // c0x002b (n0x06b3-n0x06b8) +
- 0x01ae86b8, // c0x002c (n0x06b8-n0x06ba) +
- 0x01af86ba, // c0x002d (n0x06ba-n0x06be) +
- 0x01afc6be, // c0x002e (n0x06be-n0x06bf) +
- 0x01b146bf, // c0x002f (n0x06bf-n0x06c5) +
- 0x01b586c5, // c0x0030 (n0x06c5-n0x06d6) +
- 0x01b686d6, // c0x0031 (n0x06d6-n0x06da) +
- 0x01b6c6da, // c0x0032 (n0x06da-n0x06db) +
- 0x01b706db, // c0x0033 (n0x06db-n0x06dc) +
- 0x01b746dc, // c0x0034 (n0x06dc-n0x06dd) +
- 0x01bb06dd, // c0x0035 (n0x06dd-n0x06ec) +
- 0x61bb46ec, // c0x0036 (n0x06ec-n0x06ed)* o
- 0x01bc86ed, // c0x0037 (n0x06ed-n0x06f2) +
- 0x01bd86f2, // c0x0038 (n0x06f2-n0x06f6) +
- 0x01c8c6f6, // c0x0039 (n0x06f6-n0x0723) +
- 0x21c90723, // c0x003a (n0x0723-n0x0724) o
- 0x01c94724, // c0x003b (n0x0724-n0x0725) +
- 0x01c98725, // c0x003c (n0x0725-n0x0726) +
- 0x21c9c726, // c0x003d (n0x0726-n0x0727) o
- 0x21ca0727, // c0x003e (n0x0727-n0x0728) o
- 0x01cd4728, // c0x003f (n0x0728-n0x0735) +
- 0x01cd8735, // c0x0040 (n0x0735-n0x0736) +
- 0x01ffc736, // c0x0041 (n0x0736-n0x07ff) +
- 0x220447ff, // c0x0042 (n0x07ff-n0x0811) o
- 0x02068811, // c0x0043 (n0x0811-n0x081a) +
- 0x0207081a, // c0x0044 (n0x081a-n0x081c) +
- 0x2207481c, // c0x0045 (n0x081c-n0x081d) o
- 0x0209081d, // c0x0046 (n0x081d-n0x0824) +
- 0x020a8824, // c0x0047 (n0x0824-n0x082a) +
- 0x020ac82a, // c0x0048 (n0x082a-n0x082b) +
- 0x020bc82b, // c0x0049 (n0x082b-n0x082f) +
- 0x020c482f, // c0x004a (n0x082f-n0x0831) +
- 0x220f8831, // c0x004b (n0x0831-n0x083e) o
- 0x020fc83e, // c0x004c (n0x083e-n0x083f) +
- 0x0210083f, // c0x004d (n0x083f-n0x0840) +
- 0x02120840, // c0x004e (n0x0840-n0x0848) +
- 0x02124848, // c0x004f (n0x0848-n0x0849) +
- 0x02138849, // c0x0050 (n0x0849-n0x084e) +
- 0x0216084e, // c0x0051 (n0x084e-n0x0858) +
- 0x02180858, // c0x0052 (n0x0858-n0x0860) +
- 0x021b0860, // c0x0053 (n0x0860-n0x086c) +
- 0x021d886c, // c0x0054 (n0x086c-n0x0876) +
- 0x021dc876, // c0x0055 (n0x0876-n0x0877) +
- 0x02200877, // c0x0056 (n0x0877-n0x0880) +
- 0x02204880, // c0x0057 (n0x0880-n0x0881) +
- 0x02218881, // c0x0058 (n0x0881-n0x0886) +
- 0x0221c886, // c0x0059 (n0x0886-n0x0887) +
- 0x0223c887, // c0x005a (n0x0887-n0x088f) +
- 0x0224888f, // c0x005b (n0x088f-n0x0892) +
- 0x022a8892, // c0x005c (n0x0892-n0x08aa) +
- 0x022c48aa, // c0x005d (n0x08aa-n0x08b1) +
- 0x022d08b1, // c0x005e (n0x08b1-n0x08b4) +
- 0x022e48b4, // c0x005f (n0x08b4-n0x08b9) +
- 0x022fc8b9, // c0x0060 (n0x08b9-n0x08bf) +
- 0x023108bf, // c0x0061 (n0x08bf-n0x08c4) +
- 0x023288c4, // c0x0062 (n0x08c4-n0x08ca) +
- 0x023408ca, // c0x0063 (n0x08ca-n0x08d0) +
- 0x023588d0, // c0x0064 (n0x08d0-n0x08d6) +
- 0x023748d6, // c0x0065 (n0x08d6-n0x08dd) +
- 0x023808dd, // c0x0066 (n0x08dd-n0x08e0) +
- 0x023e08e0, // c0x0067 (n0x08e0-n0x08f8) +
- 0x023f88f8, // c0x0068 (n0x08f8-n0x08fe) +
- 0x0240c8fe, // c0x0069 (n0x08fe-n0x0903) +
- 0x02450903, // c0x006a (n0x0903-n0x0914) +
- 0x024d0914, // c0x006b (n0x0914-n0x0934) +
- 0x024fc934, // c0x006c (n0x0934-n0x093f) +
- 0x0250093f, // c0x006d (n0x093f-n0x0940) +
- 0x02508940, // c0x006e (n0x0940-n0x0942) +
- 0x6250c942, // c0x006f (n0x0942-n0x0943)* o
- 0x22510943, // c0x0070 (n0x0943-n0x0944) o
- 0x0252c944, // c0x0071 (n0x0944-n0x094b) +
- 0x0253494b, // c0x0072 (n0x094b-n0x094d) +
- 0x0256894d, // c0x0073 (n0x094d-n0x095a) +
- 0x0259095a, // c0x0074 (n0x095a-n0x0964) +
- 0x02594964, // c0x0075 (n0x0964-n0x0965) +
- 0x025a0965, // c0x0076 (n0x0965-n0x0968) +
- 0x025b8968, // c0x0077 (n0x0968-n0x096e) +
- 0x025dc96e, // c0x0078 (n0x096e-n0x0977) +
- 0x025fc977, // c0x0079 (n0x0977-n0x097f) +
- 0x02bc097f, // c0x007a (n0x097f-n0x0af0) +
- 0x02bccaf0, // c0x007b (n0x0af0-n0x0af3) +
- 0x02becaf3, // c0x007c (n0x0af3-n0x0afb) +
- 0x02da8afb, // c0x007d (n0x0afb-n0x0b6a) +
- 0x02e78b6a, // c0x007e (n0x0b6a-n0x0b9e) +
- 0x02ee8b9e, // c0x007f (n0x0b9e-n0x0bba) +
- 0x02f40bba, // c0x0080 (n0x0bba-n0x0bd0) +
- 0x03028bd0, // c0x0081 (n0x0bd0-n0x0c0a) +
- 0x03080c0a, // c0x0082 (n0x0c0a-n0x0c20) +
- 0x030bcc20, // c0x0083 (n0x0c20-n0x0c2f) +
- 0x031b8c2f, // c0x0084 (n0x0c2f-n0x0c6e) +
- 0x03284c6e, // c0x0085 (n0x0c6e-n0x0ca1) +
- 0x0331cca1, // c0x0086 (n0x0ca1-n0x0cc7) +
- 0x033accc7, // c0x0087 (n0x0cc7-n0x0ceb) +
- 0x03410ceb, // c0x0088 (n0x0ceb-n0x0d04) +
- 0x03648d04, // c0x0089 (n0x0d04-n0x0d92) +
- 0x03700d92, // c0x008a (n0x0d92-n0x0dc0) +
- 0x037ccdc0, // c0x008b (n0x0dc0-n0x0df3) +
- 0x03818df3, // c0x008c (n0x0df3-n0x0e06) +
- 0x038a0e06, // c0x008d (n0x0e06-n0x0e28) +
- 0x038dce28, // c0x008e (n0x0e28-n0x0e37) +
- 0x0392ce37, // c0x008f (n0x0e37-n0x0e4b) +
- 0x039a4e4b, // c0x0090 (n0x0e4b-n0x0e69) +
- 0x639a8e69, // c0x0091 (n0x0e69-n0x0e6a)* o
- 0x639ace6a, // c0x0092 (n0x0e6a-n0x0e6b)* o
- 0x639b0e6b, // c0x0093 (n0x0e6b-n0x0e6c)* o
- 0x03a2ce6c, // c0x0094 (n0x0e6c-n0x0e8b) +
- 0x03a94e8b, // c0x0095 (n0x0e8b-n0x0ea5) +
- 0x03b10ea5, // c0x0096 (n0x0ea5-n0x0ec4) +
- 0x03b88ec4, // c0x0097 (n0x0ec4-n0x0ee2) +
- 0x03c0cee2, // c0x0098 (n0x0ee2-n0x0f03) +
- 0x03c78f03, // c0x0099 (n0x0f03-n0x0f1e) +
- 0x03da4f1e, // c0x009a (n0x0f1e-n0x0f69) +
- 0x03dfcf69, // c0x009b (n0x0f69-n0x0f7f) +
- 0x63e00f7f, // c0x009c (n0x0f7f-n0x0f80)* o
- 0x03e98f80, // c0x009d (n0x0f80-n0x0fa6) +
- 0x03f20fa6, // c0x009e (n0x0fa6-n0x0fc8) +
- 0x03f6cfc8, // c0x009f (n0x0fc8-n0x0fdb) +
- 0x03fd4fdb, // c0x00a0 (n0x0fdb-n0x0ff5) +
- 0x0407cff5, // c0x00a1 (n0x0ff5-n0x101f) +
- 0x0414501f, // c0x00a2 (n0x101f-n0x1051) +
- 0x041ad051, // c0x00a3 (n0x1051-n0x106b) +
- 0x042c106b, // c0x00a4 (n0x106b-n0x10b0) +
- 0x642c50b0, // c0x00a5 (n0x10b0-n0x10b1)* o
- 0x642c90b1, // c0x00a6 (n0x10b1-n0x10b2)* o
- 0x043250b2, // c0x00a7 (n0x10b2-n0x10c9) +
- 0x043810c9, // c0x00a8 (n0x10c9-n0x10e0) +
- 0x044110e0, // c0x00a9 (n0x10e0-n0x1104) +
- 0x0448d104, // c0x00aa (n0x1104-n0x1123) +
- 0x044d1123, // c0x00ab (n0x1123-n0x1134) +
- 0x045b5134, // c0x00ac (n0x1134-n0x116d) +
- 0x045e916d, // c0x00ad (n0x116d-n0x117a) +
- 0x0464917a, // c0x00ae (n0x117a-n0x1192) +
- 0x046bd192, // c0x00af (n0x1192-n0x11af) +
- 0x047451af, // c0x00b0 (n0x11af-n0x11d1) +
- 0x047851d1, // c0x00b1 (n0x11d1-n0x11e1) +
- 0x047f51e1, // c0x00b2 (n0x11e1-n0x11fd) +
- 0x647f91fd, // c0x00b3 (n0x11fd-n0x11fe)* o
- 0x647fd1fe, // c0x00b4 (n0x11fe-n0x11ff)* o
- 0x248011ff, // c0x00b5 (n0x11ff-n0x1200) o
- 0x04819200, // c0x00b6 (n0x1200-n0x1206) +
- 0x04835206, // c0x00b7 (n0x1206-n0x120d) +
- 0x0487920d, // c0x00b8 (n0x120d-n0x121e) +
- 0x0488921e, // c0x00b9 (n0x121e-n0x1222) +
- 0x048a1222, // c0x00ba (n0x1222-n0x1228) +
- 0x04919228, // c0x00bb (n0x1228-n0x1246) +
- 0x0492d246, // c0x00bc (n0x1246-n0x124b) +
- 0x0494524b, // c0x00bd (n0x124b-n0x1251) +
- 0x04969251, // c0x00be (n0x1251-n0x125a) +
- 0x0497d25a, // c0x00bf (n0x125a-n0x125f) +
- 0x0499525f, // c0x00c0 (n0x125f-n0x1265) +
- 0x04999265, // c0x00c1 (n0x1265-n0x1266) +
- 0x049d5266, // c0x00c2 (n0x1266-n0x1275) +
- 0x049e9275, // c0x00c3 (n0x1275-n0x127a) +
- 0x049f127a, // c0x00c4 (n0x127a-n0x127c) +
- 0x049f927c, // c0x00c5 (n0x127c-n0x127e) +
- 0x049fd27e, // c0x00c6 (n0x127e-n0x127f) +
- 0x04a2127f, // c0x00c7 (n0x127f-n0x1288) +
- 0x04a45288, // c0x00c8 (n0x1288-n0x1291) +
- 0x04a5d291, // c0x00c9 (n0x1291-n0x1297) +
- 0x04a65297, // c0x00ca (n0x1297-n0x1299) +
- 0x04a69299, // c0x00cb (n0x1299-n0x129a) +
- 0x04a8929a, // c0x00cc (n0x129a-n0x12a2) +
- 0x04aa92a2, // c0x00cd (n0x12a2-n0x12aa) +
- 0x04ac92aa, // c0x00ce (n0x12aa-n0x12b2) +
- 0x04ae52b2, // c0x00cf (n0x12b2-n0x12b9) +
- 0x04af52b9, // c0x00d0 (n0x12b9-n0x12bd) +
- 0x04b092bd, // c0x00d1 (n0x12bd-n0x12c2) +
- 0x04b112c2, // c0x00d2 (n0x12c2-n0x12c4) +
- 0x04b252c4, // c0x00d3 (n0x12c4-n0x12c9) +
- 0x04b352c9, // c0x00d4 (n0x12c9-n0x12cd) +
- 0x04b392cd, // c0x00d5 (n0x12cd-n0x12ce) +
- 0x04b552ce, // c0x00d6 (n0x12ce-n0x12d5) +
- 0x053e52d5, // c0x00d7 (n0x12d5-n0x14f9) +
- 0x0541d4f9, // c0x00d8 (n0x14f9-n0x1507) +
- 0x05449507, // c0x00d9 (n0x1507-n0x1512) +
- 0x05461512, // c0x00da (n0x1512-n0x1518) +
- 0x05481518, // c0x00db (n0x1518-n0x1520) +
- 0x65485520, // c0x00dc (n0x1520-n0x1521)* o
- 0x054c9521, // c0x00dd (n0x1521-n0x1532) +
- 0x054d1532, // c0x00de (n0x1532-n0x1534) +
- 0x254d5534, // c0x00df (n0x1534-n0x1535) o
- 0x254d9535, // c0x00e0 (n0x1535-n0x1536) o
- 0x054dd536, // c0x00e1 (n0x1536-n0x1537) +
- 0x055a1537, // c0x00e2 (n0x1537-n0x1568) +
- 0x255a5568, // c0x00e3 (n0x1568-n0x1569) o
- 0x255ad569, // c0x00e4 (n0x1569-n0x156b) o
- 0x255b556b, // c0x00e5 (n0x156b-n0x156d) o
- 0x255c156d, // c0x00e6 (n0x156d-n0x1570) o
- 0x055e9570, // c0x00e7 (n0x1570-n0x157a) +
- 0x0560d57a, // c0x00e8 (n0x157a-n0x1583) +
- 0x05611583, // c0x00e9 (n0x1583-n0x1584) +
- 0x0561d584, // c0x00ea (n0x1584-n0x1587) +
- 0x06175587, // c0x00eb (n0x1587-n0x185d) +
- 0x0617985d, // c0x00ec (n0x185d-n0x185e) +
- 0x0617d85e, // c0x00ed (n0x185e-n0x185f) +
- 0x2618185f, // c0x00ee (n0x185f-n0x1860) o
- 0x06185860, // c0x00ef (n0x1860-n0x1861) +
- 0x26189861, // c0x00f0 (n0x1861-n0x1862) o
- 0x0618d862, // c0x00f1 (n0x1862-n0x1863) +
- 0x26199863, // c0x00f2 (n0x1863-n0x1866) o
- 0x0619d866, // c0x00f3 (n0x1866-n0x1867) +
- 0x061a1867, // c0x00f4 (n0x1867-n0x1868) +
- 0x261a5868, // c0x00f5 (n0x1868-n0x1869) o
- 0x061a9869, // c0x00f6 (n0x1869-n0x186a) +
- 0x261b186a, // c0x00f7 (n0x186a-n0x186c) o
- 0x061b586c, // c0x00f8 (n0x186c-n0x186d) +
- 0x061b986d, // c0x00f9 (n0x186d-n0x186e) +
- 0x261c986e, // c0x00fa (n0x186e-n0x1872) o
- 0x061cd872, // c0x00fb (n0x1872-n0x1873) +
- 0x061d1873, // c0x00fc (n0x1873-n0x1874) +
- 0x061d5874, // c0x00fd (n0x1874-n0x1875) +
- 0x061d9875, // c0x00fe (n0x1875-n0x1876) +
- 0x261dd876, // c0x00ff (n0x1876-n0x1877) o
- 0x061e1877, // c0x0100 (n0x1877-n0x1878) +
- 0x061e5878, // c0x0101 (n0x1878-n0x1879) +
- 0x061e9879, // c0x0102 (n0x1879-n0x187a) +
- 0x061ed87a, // c0x0103 (n0x187a-n0x187b) +
- 0x261f587b, // c0x0104 (n0x187b-n0x187d) o
- 0x061f987d, // c0x0105 (n0x187d-n0x187e) +
- 0x061fd87e, // c0x0106 (n0x187e-n0x187f) +
- 0x0620187f, // c0x0107 (n0x187f-n0x1880) +
- 0x26205880, // c0x0108 (n0x1880-n0x1881) o
- 0x06209881, // c0x0109 (n0x1881-n0x1882) +
- 0x26211882, // c0x010a (n0x1882-n0x1884) o
- 0x26215884, // c0x010b (n0x1884-n0x1885) o
- 0x06231885, // c0x010c (n0x1885-n0x188c) +
- 0x0623d88c, // c0x010d (n0x188c-n0x188f) +
- 0x0627d88f, // c0x010e (n0x188f-n0x189f) +
- 0x0628189f, // c0x010f (n0x189f-n0x18a0) +
- 0x062a58a0, // c0x0110 (n0x18a0-n0x18a9) +
- 0x0638d8a9, // c0x0111 (n0x18a9-n0x18e3) +
- 0x263958e3, // c0x0112 (n0x18e3-n0x18e5) o
- 0x263998e5, // c0x0113 (n0x18e5-n0x18e6) o
- 0x2639d8e6, // c0x0114 (n0x18e6-n0x18e7) o
- 0x063a58e7, // c0x0115 (n0x18e7-n0x18e9) +
- 0x064818e9, // c0x0116 (n0x18e9-n0x1920) +
- 0x064ad920, // c0x0117 (n0x1920-n0x192b) +
- 0x064cd92b, // c0x0118 (n0x192b-n0x1933) +
- 0x064d9933, // c0x0119 (n0x1933-n0x1936) +
- 0x064f9936, // c0x011a (n0x1936-n0x193e) +
- 0x0653193e, // c0x011b (n0x193e-n0x194c) +
- 0x067c594c, // c0x011c (n0x194c-n0x19f1) +
- 0x068819f1, // c0x011d (n0x19f1-n0x1a20) +
- 0x06895a20, // c0x011e (n0x1a20-n0x1a25) +
- 0x068c9a25, // c0x011f (n0x1a25-n0x1a32) +
- 0x068e5a32, // c0x0120 (n0x1a32-n0x1a39) +
- 0x06901a39, // c0x0121 (n0x1a39-n0x1a40) +
- 0x06925a40, // c0x0122 (n0x1a40-n0x1a49) +
- 0x0693da49, // c0x0123 (n0x1a49-n0x1a4f) +
- 0x06959a4f, // c0x0124 (n0x1a4f-n0x1a56) +
- 0x0697da56, // c0x0125 (n0x1a56-n0x1a5f) +
- 0x0698da5f, // c0x0126 (n0x1a5f-n0x1a63) +
- 0x069bda63, // c0x0127 (n0x1a63-n0x1a6f) +
- 0x069d9a6f, // c0x0128 (n0x1a6f-n0x1a76) +
- 0x06be9a76, // c0x0129 (n0x1a76-n0x1afa) +
- 0x06c0dafa, // c0x012a (n0x1afa-n0x1b03) +
- 0x06c2db03, // c0x012b (n0x1b03-n0x1b0b) +
- 0x06c41b0b, // c0x012c (n0x1b0b-n0x1b10) +
- 0x06c55b10, // c0x012d (n0x1b10-n0x1b15) +
- 0x06c75b15, // c0x012e (n0x1b15-n0x1b1d) +
- 0x06d19b1d, // c0x012f (n0x1b1d-n0x1b46) +
- 0x06d35b46, // c0x0130 (n0x1b46-n0x1b4d) +
- 0x06d4db4d, // c0x0131 (n0x1b4d-n0x1b53) +
- 0x06d51b53, // c0x0132 (n0x1b53-n0x1b54) +
- 0x06d55b54, // c0x0133 (n0x1b54-n0x1b55) +
- 0x06d69b55, // c0x0134 (n0x1b55-n0x1b5a) +
- 0x06d89b5a, // c0x0135 (n0x1b5a-n0x1b62) +
- 0x06d95b62, // c0x0136 (n0x1b62-n0x1b65) +
- 0x06dc5b65, // c0x0137 (n0x1b65-n0x1b71) +
- 0x06e45b71, // c0x0138 (n0x1b71-n0x1b91) +
- 0x06e59b91, // c0x0139 (n0x1b91-n0x1b96) +
- 0x06e5db96, // c0x013a (n0x1b96-n0x1b97) +
- 0x06e75b97, // c0x013b (n0x1b97-n0x1b9d) +
- 0x06e81b9d, // c0x013c (n0x1b9d-n0x1ba0) +
- 0x06e85ba0, // c0x013d (n0x1ba0-n0x1ba1) +
- 0x06ea1ba1, // c0x013e (n0x1ba1-n0x1ba8) +
- 0x06eddba8, // c0x013f (n0x1ba8-n0x1bb7) +
- 0x06ee1bb7, // c0x0140 (n0x1bb7-n0x1bb8) +
- 0x06f01bb8, // c0x0141 (n0x1bb8-n0x1bc0) +
- 0x06f51bc0, // c0x0142 (n0x1bc0-n0x1bd4) +
- 0x06f69bd4, // c0x0143 (n0x1bd4-n0x1bda) +
- 0x06fbdbda, // c0x0144 (n0x1bda-n0x1bef) +
- 0x06fc1bef, // c0x0145 (n0x1bef-n0x1bf0) +
- 0x06fc5bf0, // c0x0146 (n0x1bf0-n0x1bf1) +
- 0x07009bf1, // c0x0147 (n0x1bf1-n0x1c02) +
- 0x07019c02, // c0x0148 (n0x1c02-n0x1c06) +
- 0x07051c06, // c0x0149 (n0x1c06-n0x1c14) +
- 0x07081c14, // c0x014a (n0x1c14-n0x1c20) +
- 0x071b9c20, // c0x014b (n0x1c20-n0x1c6e) +
- 0x071ddc6e, // c0x014c (n0x1c6e-n0x1c77) +
- 0x07209c77, // c0x014d (n0x1c77-n0x1c82) +
- 0x0720dc82, // c0x014e (n0x1c82-n0x1c83) +
- 0x07211c83, // c0x014f (n0x1c83-n0x1c84) +
- 0x0730dc84, // c0x0150 (n0x1c84-n0x1cc3) +
- 0x07319cc3, // c0x0151 (n0x1cc3-n0x1cc6) +
- 0x07325cc6, // c0x0152 (n0x1cc6-n0x1cc9) +
- 0x07331cc9, // c0x0153 (n0x1cc9-n0x1ccc) +
- 0x0733dccc, // c0x0154 (n0x1ccc-n0x1ccf) +
- 0x07349ccf, // c0x0155 (n0x1ccf-n0x1cd2) +
- 0x07355cd2, // c0x0156 (n0x1cd2-n0x1cd5) +
- 0x07361cd5, // c0x0157 (n0x1cd5-n0x1cd8) +
- 0x0736dcd8, // c0x0158 (n0x1cd8-n0x1cdb) +
- 0x07379cdb, // c0x0159 (n0x1cdb-n0x1cde) +
- 0x07385cde, // c0x015a (n0x1cde-n0x1ce1) +
- 0x07391ce1, // c0x015b (n0x1ce1-n0x1ce4) +
- 0x0739dce4, // c0x015c (n0x1ce4-n0x1ce7) +
- 0x073a9ce7, // c0x015d (n0x1ce7-n0x1cea) +
- 0x073b1cea, // c0x015e (n0x1cea-n0x1cec) +
- 0x073bdcec, // c0x015f (n0x1cec-n0x1cef) +
- 0x073c9cef, // c0x0160 (n0x1cef-n0x1cf2) +
- 0x073d5cf2, // c0x0161 (n0x1cf2-n0x1cf5) +
- 0x073e1cf5, // c0x0162 (n0x1cf5-n0x1cf8) +
- 0x073edcf8, // c0x0163 (n0x1cf8-n0x1cfb) +
- 0x073f9cfb, // c0x0164 (n0x1cfb-n0x1cfe) +
- 0x07405cfe, // c0x0165 (n0x1cfe-n0x1d01) +
- 0x07411d01, // c0x0166 (n0x1d01-n0x1d04) +
- 0x0741dd04, // c0x0167 (n0x1d04-n0x1d07) +
- 0x07429d07, // c0x0168 (n0x1d07-n0x1d0a) +
- 0x07435d0a, // c0x0169 (n0x1d0a-n0x1d0d) +
- 0x07441d0d, // c0x016a (n0x1d0d-n0x1d10) +
- 0x0744dd10, // c0x016b (n0x1d10-n0x1d13) +
- 0x07459d13, // c0x016c (n0x1d13-n0x1d16) +
- 0x07465d16, // c0x016d (n0x1d16-n0x1d19) +
- 0x07471d19, // c0x016e (n0x1d19-n0x1d1c) +
- 0x0747dd1c, // c0x016f (n0x1d1c-n0x1d1f) +
- 0x07485d1f, // c0x0170 (n0x1d1f-n0x1d21) +
- 0x07491d21, // c0x0171 (n0x1d21-n0x1d24) +
- 0x0749dd24, // c0x0172 (n0x1d24-n0x1d27) +
- 0x074a9d27, // c0x0173 (n0x1d27-n0x1d2a) +
- 0x074b5d2a, // c0x0174 (n0x1d2a-n0x1d2d) +
- 0x074c1d2d, // c0x0175 (n0x1d2d-n0x1d30) +
- 0x074cdd30, // c0x0176 (n0x1d30-n0x1d33) +
- 0x074d9d33, // c0x0177 (n0x1d33-n0x1d36) +
- 0x074e5d36, // c0x0178 (n0x1d36-n0x1d39) +
- 0x074f1d39, // c0x0179 (n0x1d39-n0x1d3c) +
- 0x074fdd3c, // c0x017a (n0x1d3c-n0x1d3f) +
- 0x07509d3f, // c0x017b (n0x1d3f-n0x1d42) +
- 0x07515d42, // c0x017c (n0x1d42-n0x1d45) +
- 0x07521d45, // c0x017d (n0x1d45-n0x1d48) +
- 0x07529d48, // c0x017e (n0x1d48-n0x1d4a) +
- 0x07535d4a, // c0x017f (n0x1d4a-n0x1d4d) +
- 0x07541d4d, // c0x0180 (n0x1d4d-n0x1d50) +
- 0x0754dd50, // c0x0181 (n0x1d50-n0x1d53) +
- 0x07559d53, // c0x0182 (n0x1d53-n0x1d56) +
- 0x07565d56, // c0x0183 (n0x1d56-n0x1d59) +
- 0x07571d59, // c0x0184 (n0x1d59-n0x1d5c) +
- 0x0757dd5c, // c0x0185 (n0x1d5c-n0x1d5f) +
- 0x07589d5f, // c0x0186 (n0x1d5f-n0x1d62) +
- 0x0758dd62, // c0x0187 (n0x1d62-n0x1d63) +
- 0x07599d63, // c0x0188 (n0x1d63-n0x1d66) +
- 0x075b1d66, // c0x0189 (n0x1d66-n0x1d6c) +
- 0x075b5d6c, // c0x018a (n0x1d6c-n0x1d6d) +
- 0x075c5d6d, // c0x018b (n0x1d6d-n0x1d71) +
- 0x075ddd71, // c0x018c (n0x1d71-n0x1d77) +
- 0x07621d77, // c0x018d (n0x1d77-n0x1d88) +
- 0x07635d88, // c0x018e (n0x1d88-n0x1d8d) +
- 0x07669d8d, // c0x018f (n0x1d8d-n0x1d9a) +
- 0x07679d9a, // c0x0190 (n0x1d9a-n0x1d9e) +
- 0x07695d9e, // c0x0191 (n0x1d9e-n0x1da5) +
- 0x076adda5, // c0x0192 (n0x1da5-n0x1dab) +
- 0x276f1dab, // c0x0193 (n0x1dab-n0x1dbc) o
- 0x076f5dbc, // c0x0194 (n0x1dbc-n0x1dbd) +
+ 0x017f05f6, // c0x0006 (n0x05f6-n0x05fc) +
+ 0x017f45fc, // c0x0007 (n0x05fc-n0x05fd) +
+ 0x018145fd, // c0x0008 (n0x05fd-n0x0605) +
+ 0x01978605, // c0x0009 (n0x0605-n0x065e) +
+ 0x0198c65e, // c0x000a (n0x065e-n0x0663) +
+ 0x019a0663, // c0x000b (n0x0663-n0x0668) +
+ 0x019b0668, // c0x000c (n0x0668-n0x066c) +
+ 0x019cc66c, // c0x000d (n0x066c-n0x0673) +
+ 0x019d0673, // c0x000e (n0x0673-n0x0674) +
+ 0x019e0674, // c0x000f (n0x0674-n0x0678) +
+ 0x019f8678, // c0x0010 (n0x0678-n0x067e) +
+ 0x01a1c67e, // c0x0011 (n0x067e-n0x0687) +
+ 0x01a20687, // c0x0012 (n0x0687-n0x0688) +
+ 0x01a38688, // c0x0013 (n0x0688-n0x068e) +
+ 0x01a3c68e, // c0x0014 (n0x068e-n0x068f) +
+ 0x01a5868f, // c0x0015 (n0x068f-n0x0696) +
+ 0x01a5c696, // c0x0016 (n0x0696-n0x0697) +
+ 0x01aa4697, // c0x0017 (n0x0697-n0x06a9) +
+ 0x01aa86a9, // c0x0018 (n0x06a9-n0x06aa) +
+ 0x01ac86aa, // c0x0019 (n0x06aa-n0x06b2) +
+ 0x01adc6b2, // c0x001a (n0x06b2-n0x06b7) +
+ 0x01ae06b7, // c0x001b (n0x06b7-n0x06b8) +
+ 0x01b106b8, // c0x001c (n0x06b8-n0x06c4) +
+ 0x01b3c6c4, // c0x001d (n0x06c4-n0x06cf) +
+ 0x01b646cf, // c0x001e (n0x06cf-n0x06d9) +
+ 0x01b6c6d9, // c0x001f (n0x06d9-n0x06db) +
+ 0x01b706db, // c0x0020 (n0x06db-n0x06dc) +
+ 0x01c046dc, // c0x0021 (n0x06dc-n0x0701) +
+ 0x01c18701, // c0x0022 (n0x0701-n0x0706) +
+ 0x01c2c706, // c0x0023 (n0x0706-n0x070b) +
+ 0x01c4870b, // c0x0024 (n0x070b-n0x0712) +
+ 0x01c58712, // c0x0025 (n0x0712-n0x0716) +
+ 0x01c6c716, // c0x0026 (n0x0716-n0x071b) +
+ 0x01c9071b, // c0x0027 (n0x071b-n0x0724) +
+ 0x01da8724, // c0x0028 (n0x0724-n0x076a) +
+ 0x01dac76a, // c0x0029 (n0x076a-n0x076b) +
+ 0x01dc076b, // c0x002a (n0x076b-n0x0770) +
+ 0x01dd4770, // c0x002b (n0x0770-n0x0775) +
+ 0x01ddc775, // c0x002c (n0x0775-n0x0777) +
+ 0x01dec777, // c0x002d (n0x0777-n0x077b) +
+ 0x01df077b, // c0x002e (n0x077b-n0x077c) +
+ 0x01e0877c, // c0x002f (n0x077c-n0x0782) +
+ 0x01e4c782, // c0x0030 (n0x0782-n0x0793) +
+ 0x01e5c793, // c0x0031 (n0x0793-n0x0797) +
+ 0x01e60797, // c0x0032 (n0x0797-n0x0798) +
+ 0x01e64798, // c0x0033 (n0x0798-n0x0799) +
+ 0x01e68799, // c0x0034 (n0x0799-n0x079a) +
+ 0x01ea479a, // c0x0035 (n0x079a-n0x07a9) +
+ 0x61ea87a9, // c0x0036 (n0x07a9-n0x07aa)* o
+ 0x01ebc7aa, // c0x0037 (n0x07aa-n0x07af) +
+ 0x01ecc7af, // c0x0038 (n0x07af-n0x07b3) +
+ 0x01f807b3, // c0x0039 (n0x07b3-n0x07e0) +
+ 0x21f847e0, // c0x003a (n0x07e0-n0x07e1) o
+ 0x01f887e1, // c0x003b (n0x07e1-n0x07e2) +
+ 0x01f8c7e2, // c0x003c (n0x07e2-n0x07e3) +
+ 0x21f907e3, // c0x003d (n0x07e3-n0x07e4) o
+ 0x21f947e4, // c0x003e (n0x07e4-n0x07e5) o
+ 0x01fc87e5, // c0x003f (n0x07e5-n0x07f2) +
+ 0x01fcc7f2, // c0x0040 (n0x07f2-n0x07f3) +
+ 0x022fc7f3, // c0x0041 (n0x07f3-n0x08bf) +
+ 0x223448bf, // c0x0042 (n0x08bf-n0x08d1) o
+ 0x023688d1, // c0x0043 (n0x08d1-n0x08da) +
+ 0x023708da, // c0x0044 (n0x08da-n0x08dc) +
+ 0x223748dc, // c0x0045 (n0x08dc-n0x08dd) o
+ 0x023908dd, // c0x0046 (n0x08dd-n0x08e4) +
+ 0x023a88e4, // c0x0047 (n0x08e4-n0x08ea) +
+ 0x023ac8ea, // c0x0048 (n0x08ea-n0x08eb) +
+ 0x023bc8eb, // c0x0049 (n0x08eb-n0x08ef) +
+ 0x023c48ef, // c0x004a (n0x08ef-n0x08f1) +
+ 0x223f88f1, // c0x004b (n0x08f1-n0x08fe) o
+ 0x023fc8fe, // c0x004c (n0x08fe-n0x08ff) +
+ 0x024008ff, // c0x004d (n0x08ff-n0x0900) +
+ 0x02420900, // c0x004e (n0x0900-n0x0908) +
+ 0x02424908, // c0x004f (n0x0908-n0x0909) +
+ 0x02438909, // c0x0050 (n0x0909-n0x090e) +
+ 0x0246090e, // c0x0051 (n0x090e-n0x0918) +
+ 0x02480918, // c0x0052 (n0x0918-n0x0920) +
+ 0x024b0920, // c0x0053 (n0x0920-n0x092c) +
+ 0x024d892c, // c0x0054 (n0x092c-n0x0936) +
+ 0x024dc936, // c0x0055 (n0x0936-n0x0937) +
+ 0x02500937, // c0x0056 (n0x0937-n0x0940) +
+ 0x02504940, // c0x0057 (n0x0940-n0x0941) +
+ 0x02518941, // c0x0058 (n0x0941-n0x0946) +
+ 0x0251c946, // c0x0059 (n0x0946-n0x0947) +
+ 0x0253c947, // c0x005a (n0x0947-n0x094f) +
+ 0x0254894f, // c0x005b (n0x094f-n0x0952) +
+ 0x025a8952, // c0x005c (n0x0952-n0x096a) +
+ 0x025c496a, // c0x005d (n0x096a-n0x0971) +
+ 0x025d0971, // c0x005e (n0x0971-n0x0974) +
+ 0x025e4974, // c0x005f (n0x0974-n0x0979) +
+ 0x025fc979, // c0x0060 (n0x0979-n0x097f) +
+ 0x0261097f, // c0x0061 (n0x097f-n0x0984) +
+ 0x02628984, // c0x0062 (n0x0984-n0x098a) +
+ 0x0264098a, // c0x0063 (n0x098a-n0x0990) +
+ 0x02658990, // c0x0064 (n0x0990-n0x0996) +
+ 0x02674996, // c0x0065 (n0x0996-n0x099d) +
+ 0x0268099d, // c0x0066 (n0x099d-n0x09a0) +
+ 0x026e09a0, // c0x0067 (n0x09a0-n0x09b8) +
+ 0x026f89b8, // c0x0068 (n0x09b8-n0x09be) +
+ 0x0270c9be, // c0x0069 (n0x09be-n0x09c3) +
+ 0x027509c3, // c0x006a (n0x09c3-n0x09d4) +
+ 0x027d09d4, // c0x006b (n0x09d4-n0x09f4) +
+ 0x027fc9f4, // c0x006c (n0x09f4-n0x09ff) +
+ 0x028009ff, // c0x006d (n0x09ff-n0x0a00) +
+ 0x02808a00, // c0x006e (n0x0a00-n0x0a02) +
+ 0x02828a02, // c0x006f (n0x0a02-n0x0a0a) +
+ 0x0282ca0a, // c0x0070 (n0x0a0a-n0x0a0b) +
+ 0x02848a0b, // c0x0071 (n0x0a0b-n0x0a12) +
+ 0x02850a12, // c0x0072 (n0x0a12-n0x0a14) +
+ 0x02884a14, // c0x0073 (n0x0a14-n0x0a21) +
+ 0x028aca21, // c0x0074 (n0x0a21-n0x0a2b) +
+ 0x028b0a2b, // c0x0075 (n0x0a2b-n0x0a2c) +
+ 0x028c4a2c, // c0x0076 (n0x0a2c-n0x0a31) +
+ 0x028dca31, // c0x0077 (n0x0a31-n0x0a37) +
+ 0x02900a37, // c0x0078 (n0x0a37-n0x0a40) +
+ 0x02920a40, // c0x0079 (n0x0a40-n0x0a48) +
+ 0x02ee4a48, // c0x007a (n0x0a48-n0x0bb9) +
+ 0x02ef0bb9, // c0x007b (n0x0bb9-n0x0bbc) +
+ 0x02f10bbc, // c0x007c (n0x0bbc-n0x0bc4) +
+ 0x030ccbc4, // c0x007d (n0x0bc4-n0x0c33) +
+ 0x0319cc33, // c0x007e (n0x0c33-n0x0c67) +
+ 0x0320cc67, // c0x007f (n0x0c67-n0x0c83) +
+ 0x03264c83, // c0x0080 (n0x0c83-n0x0c99) +
+ 0x0334cc99, // c0x0081 (n0x0c99-n0x0cd3) +
+ 0x033a4cd3, // c0x0082 (n0x0cd3-n0x0ce9) +
+ 0x033e0ce9, // c0x0083 (n0x0ce9-n0x0cf8) +
+ 0x034dccf8, // c0x0084 (n0x0cf8-n0x0d37) +
+ 0x035a8d37, // c0x0085 (n0x0d37-n0x0d6a) +
+ 0x03640d6a, // c0x0086 (n0x0d6a-n0x0d90) +
+ 0x036d0d90, // c0x0087 (n0x0d90-n0x0db4) +
+ 0x03734db4, // c0x0088 (n0x0db4-n0x0dcd) +
+ 0x0396cdcd, // c0x0089 (n0x0dcd-n0x0e5b) +
+ 0x03a24e5b, // c0x008a (n0x0e5b-n0x0e89) +
+ 0x03af0e89, // c0x008b (n0x0e89-n0x0ebc) +
+ 0x03b3cebc, // c0x008c (n0x0ebc-n0x0ecf) +
+ 0x03bc4ecf, // c0x008d (n0x0ecf-n0x0ef1) +
+ 0x03c00ef1, // c0x008e (n0x0ef1-n0x0f00) +
+ 0x03c50f00, // c0x008f (n0x0f00-n0x0f14) +
+ 0x03cc8f14, // c0x0090 (n0x0f14-n0x0f32) +
+ 0x63cccf32, // c0x0091 (n0x0f32-n0x0f33)* o
+ 0x63cd0f33, // c0x0092 (n0x0f33-n0x0f34)* o
+ 0x63cd4f34, // c0x0093 (n0x0f34-n0x0f35)* o
+ 0x03d50f35, // c0x0094 (n0x0f35-n0x0f54) +
+ 0x03db8f54, // c0x0095 (n0x0f54-n0x0f6e) +
+ 0x03e34f6e, // c0x0096 (n0x0f6e-n0x0f8d) +
+ 0x03eacf8d, // c0x0097 (n0x0f8d-n0x0fab) +
+ 0x03f30fab, // c0x0098 (n0x0fab-n0x0fcc) +
+ 0x03f9cfcc, // c0x0099 (n0x0fcc-n0x0fe7) +
+ 0x040c8fe7, // c0x009a (n0x0fe7-n0x1032) +
+ 0x04121032, // c0x009b (n0x1032-n0x1048) +
+ 0x64125048, // c0x009c (n0x1048-n0x1049)* o
+ 0x041bd049, // c0x009d (n0x1049-n0x106f) +
+ 0x0424506f, // c0x009e (n0x106f-n0x1091) +
+ 0x04291091, // c0x009f (n0x1091-n0x10a4) +
+ 0x042f90a4, // c0x00a0 (n0x10a4-n0x10be) +
+ 0x043a10be, // c0x00a1 (n0x10be-n0x10e8) +
+ 0x044690e8, // c0x00a2 (n0x10e8-n0x111a) +
+ 0x044d111a, // c0x00a3 (n0x111a-n0x1134) +
+ 0x045e5134, // c0x00a4 (n0x1134-n0x1179) +
+ 0x645e9179, // c0x00a5 (n0x1179-n0x117a)* o
+ 0x645ed17a, // c0x00a6 (n0x117a-n0x117b)* o
+ 0x0464917b, // c0x00a7 (n0x117b-n0x1192) +
+ 0x046a5192, // c0x00a8 (n0x1192-n0x11a9) +
+ 0x047351a9, // c0x00a9 (n0x11a9-n0x11cd) +
+ 0x047b11cd, // c0x00aa (n0x11cd-n0x11ec) +
+ 0x047f51ec, // c0x00ab (n0x11ec-n0x11fd) +
+ 0x048d91fd, // c0x00ac (n0x11fd-n0x1236) +
+ 0x0490d236, // c0x00ad (n0x1236-n0x1243) +
+ 0x0496d243, // c0x00ae (n0x1243-n0x125b) +
+ 0x049e125b, // c0x00af (n0x125b-n0x1278) +
+ 0x04a69278, // c0x00b0 (n0x1278-n0x129a) +
+ 0x04aa929a, // c0x00b1 (n0x129a-n0x12aa) +
+ 0x04b192aa, // c0x00b2 (n0x12aa-n0x12c6) +
+ 0x64b1d2c6, // c0x00b3 (n0x12c6-n0x12c7)* o
+ 0x64b212c7, // c0x00b4 (n0x12c7-n0x12c8)* o
+ 0x24b252c8, // c0x00b5 (n0x12c8-n0x12c9) o
+ 0x04b3d2c9, // c0x00b6 (n0x12c9-n0x12cf) +
+ 0x04b592cf, // c0x00b7 (n0x12cf-n0x12d6) +
+ 0x04b9d2d6, // c0x00b8 (n0x12d6-n0x12e7) +
+ 0x04bad2e7, // c0x00b9 (n0x12e7-n0x12eb) +
+ 0x04bc52eb, // c0x00ba (n0x12eb-n0x12f1) +
+ 0x04c3d2f1, // c0x00bb (n0x12f1-n0x130f) +
+ 0x04c5130f, // c0x00bc (n0x130f-n0x1314) +
+ 0x04c69314, // c0x00bd (n0x1314-n0x131a) +
+ 0x04c8d31a, // c0x00be (n0x131a-n0x1323) +
+ 0x04ca1323, // c0x00bf (n0x1323-n0x1328) +
+ 0x04cb9328, // c0x00c0 (n0x1328-n0x132e) +
+ 0x04cbd32e, // c0x00c1 (n0x132e-n0x132f) +
+ 0x04cf932f, // c0x00c2 (n0x132f-n0x133e) +
+ 0x04d0d33e, // c0x00c3 (n0x133e-n0x1343) +
+ 0x04d15343, // c0x00c4 (n0x1343-n0x1345) +
+ 0x04d1d345, // c0x00c5 (n0x1345-n0x1347) +
+ 0x04d21347, // c0x00c6 (n0x1347-n0x1348) +
+ 0x04d45348, // c0x00c7 (n0x1348-n0x1351) +
+ 0x04d69351, // c0x00c8 (n0x1351-n0x135a) +
+ 0x04d8135a, // c0x00c9 (n0x135a-n0x1360) +
+ 0x04d89360, // c0x00ca (n0x1360-n0x1362) +
+ 0x04d8d362, // c0x00cb (n0x1362-n0x1363) +
+ 0x04dad363, // c0x00cc (n0x1363-n0x136b) +
+ 0x04dd136b, // c0x00cd (n0x136b-n0x1374) +
+ 0x04df1374, // c0x00ce (n0x1374-n0x137c) +
+ 0x04e0d37c, // c0x00cf (n0x137c-n0x1383) +
+ 0x04e1d383, // c0x00d0 (n0x1383-n0x1387) +
+ 0x04e31387, // c0x00d1 (n0x1387-n0x138c) +
+ 0x04e3938c, // c0x00d2 (n0x138c-n0x138e) +
+ 0x04e4d38e, // c0x00d3 (n0x138e-n0x1393) +
+ 0x04e5d393, // c0x00d4 (n0x1393-n0x1397) +
+ 0x04e61397, // c0x00d5 (n0x1397-n0x1398) +
+ 0x04e7d398, // c0x00d6 (n0x1398-n0x139f) +
+ 0x0570d39f, // c0x00d7 (n0x139f-n0x15c3) +
+ 0x057455c3, // c0x00d8 (n0x15c3-n0x15d1) +
+ 0x057715d1, // c0x00d9 (n0x15d1-n0x15dc) +
+ 0x057895dc, // c0x00da (n0x15dc-n0x15e2) +
+ 0x057a95e2, // c0x00db (n0x15e2-n0x15ea) +
+ 0x657ad5ea, // c0x00dc (n0x15ea-n0x15eb)* o
+ 0x057f15eb, // c0x00dd (n0x15eb-n0x15fc) +
+ 0x057f95fc, // c0x00de (n0x15fc-n0x15fe) +
+ 0x257fd5fe, // c0x00df (n0x15fe-n0x15ff) o
+ 0x258015ff, // c0x00e0 (n0x15ff-n0x1600) o
+ 0x05805600, // c0x00e1 (n0x1600-n0x1601) +
+ 0x058c9601, // c0x00e2 (n0x1601-n0x1632) +
+ 0x258cd632, // c0x00e3 (n0x1632-n0x1633) o
+ 0x258d5633, // c0x00e4 (n0x1633-n0x1635) o
+ 0x258dd635, // c0x00e5 (n0x1635-n0x1637) o
+ 0x258e9637, // c0x00e6 (n0x1637-n0x163a) o
+ 0x0591163a, // c0x00e7 (n0x163a-n0x1644) +
+ 0x05935644, // c0x00e8 (n0x1644-n0x164d) +
+ 0x0593964d, // c0x00e9 (n0x164d-n0x164e) +
+ 0x0594564e, // c0x00ea (n0x164e-n0x1651) +
+ 0x0649d651, // c0x00eb (n0x1651-n0x1927) +
+ 0x064a1927, // c0x00ec (n0x1927-n0x1928) +
+ 0x064a5928, // c0x00ed (n0x1928-n0x1929) +
+ 0x264a9929, // c0x00ee (n0x1929-n0x192a) o
+ 0x064ad92a, // c0x00ef (n0x192a-n0x192b) +
+ 0x264b192b, // c0x00f0 (n0x192b-n0x192c) o
+ 0x064b592c, // c0x00f1 (n0x192c-n0x192d) +
+ 0x264c192d, // c0x00f2 (n0x192d-n0x1930) o
+ 0x064c5930, // c0x00f3 (n0x1930-n0x1931) +
+ 0x064c9931, // c0x00f4 (n0x1931-n0x1932) +
+ 0x264cd932, // c0x00f5 (n0x1932-n0x1933) o
+ 0x064d1933, // c0x00f6 (n0x1933-n0x1934) +
+ 0x264d9934, // c0x00f7 (n0x1934-n0x1936) o
+ 0x064dd936, // c0x00f8 (n0x1936-n0x1937) +
+ 0x064e1937, // c0x00f9 (n0x1937-n0x1938) +
+ 0x264f1938, // c0x00fa (n0x1938-n0x193c) o
+ 0x064f593c, // c0x00fb (n0x193c-n0x193d) +
+ 0x064f993d, // c0x00fc (n0x193d-n0x193e) +
+ 0x064fd93e, // c0x00fd (n0x193e-n0x193f) +
+ 0x0650193f, // c0x00fe (n0x193f-n0x1940) +
+ 0x26505940, // c0x00ff (n0x1940-n0x1941) o
+ 0x06509941, // c0x0100 (n0x1941-n0x1942) +
+ 0x0650d942, // c0x0101 (n0x1942-n0x1943) +
+ 0x06511943, // c0x0102 (n0x1943-n0x1944) +
+ 0x06515944, // c0x0103 (n0x1944-n0x1945) +
+ 0x2651d945, // c0x0104 (n0x1945-n0x1947) o
+ 0x06521947, // c0x0105 (n0x1947-n0x1948) +
+ 0x06525948, // c0x0106 (n0x1948-n0x1949) +
+ 0x06529949, // c0x0107 (n0x1949-n0x194a) +
+ 0x2652d94a, // c0x0108 (n0x194a-n0x194b) o
+ 0x0653194b, // c0x0109 (n0x194b-n0x194c) +
+ 0x2653994c, // c0x010a (n0x194c-n0x194e) o
+ 0x2653d94e, // c0x010b (n0x194e-n0x194f) o
+ 0x0655994f, // c0x010c (n0x194f-n0x1956) +
+ 0x06565956, // c0x010d (n0x1956-n0x1959) +
+ 0x065a5959, // c0x010e (n0x1959-n0x1969) +
+ 0x065a9969, // c0x010f (n0x1969-n0x196a) +
+ 0x065cd96a, // c0x0110 (n0x196a-n0x1973) +
+ 0x066b9973, // c0x0111 (n0x1973-n0x19ae) +
+ 0x266c19ae, // c0x0112 (n0x19ae-n0x19b0) o
+ 0x266c59b0, // c0x0113 (n0x19b0-n0x19b1) o
+ 0x266c99b1, // c0x0114 (n0x19b1-n0x19b2) o
+ 0x066d19b2, // c0x0115 (n0x19b2-n0x19b4) +
+ 0x067ad9b4, // c0x0116 (n0x19b4-n0x19eb) +
+ 0x067d99eb, // c0x0117 (n0x19eb-n0x19f6) +
+ 0x067f99f6, // c0x0118 (n0x19f6-n0x19fe) +
+ 0x068059fe, // c0x0119 (n0x19fe-n0x1a01) +
+ 0x06825a01, // c0x011a (n0x1a01-n0x1a09) +
+ 0x0685da09, // c0x011b (n0x1a09-n0x1a17) +
+ 0x06af1a17, // c0x011c (n0x1a17-n0x1abc) +
+ 0x06badabc, // c0x011d (n0x1abc-n0x1aeb) +
+ 0x06bc1aeb, // c0x011e (n0x1aeb-n0x1af0) +
+ 0x06bf5af0, // c0x011f (n0x1af0-n0x1afd) +
+ 0x06c11afd, // c0x0120 (n0x1afd-n0x1b04) +
+ 0x06c2db04, // c0x0121 (n0x1b04-n0x1b0b) +
+ 0x06c51b0b, // c0x0122 (n0x1b0b-n0x1b14) +
+ 0x06c69b14, // c0x0123 (n0x1b14-n0x1b1a) +
+ 0x06c85b1a, // c0x0124 (n0x1b1a-n0x1b21) +
+ 0x06ca9b21, // c0x0125 (n0x1b21-n0x1b2a) +
+ 0x06cb9b2a, // c0x0126 (n0x1b2a-n0x1b2e) +
+ 0x06ce9b2e, // c0x0127 (n0x1b2e-n0x1b3a) +
+ 0x06d05b3a, // c0x0128 (n0x1b3a-n0x1b41) +
+ 0x06f15b41, // c0x0129 (n0x1b41-n0x1bc5) +
+ 0x06f39bc5, // c0x012a (n0x1bc5-n0x1bce) +
+ 0x06f59bce, // c0x012b (n0x1bce-n0x1bd6) +
+ 0x06f6dbd6, // c0x012c (n0x1bd6-n0x1bdb) +
+ 0x06f81bdb, // c0x012d (n0x1bdb-n0x1be0) +
+ 0x06fa1be0, // c0x012e (n0x1be0-n0x1be8) +
+ 0x07045be8, // c0x012f (n0x1be8-n0x1c11) +
+ 0x07061c11, // c0x0130 (n0x1c11-n0x1c18) +
+ 0x07079c18, // c0x0131 (n0x1c18-n0x1c1e) +
+ 0x0707dc1e, // c0x0132 (n0x1c1e-n0x1c1f) +
+ 0x07081c1f, // c0x0133 (n0x1c1f-n0x1c20) +
+ 0x07095c20, // c0x0134 (n0x1c20-n0x1c25) +
+ 0x070b5c25, // c0x0135 (n0x1c25-n0x1c2d) +
+ 0x070c1c2d, // c0x0136 (n0x1c2d-n0x1c30) +
+ 0x070f1c30, // c0x0137 (n0x1c30-n0x1c3c) +
+ 0x07171c3c, // c0x0138 (n0x1c3c-n0x1c5c) +
+ 0x07185c5c, // c0x0139 (n0x1c5c-n0x1c61) +
+ 0x07189c61, // c0x013a (n0x1c61-n0x1c62) +
+ 0x071a1c62, // c0x013b (n0x1c62-n0x1c68) +
+ 0x071adc68, // c0x013c (n0x1c68-n0x1c6b) +
+ 0x071b1c6b, // c0x013d (n0x1c6b-n0x1c6c) +
+ 0x071cdc6c, // c0x013e (n0x1c6c-n0x1c73) +
+ 0x07209c73, // c0x013f (n0x1c73-n0x1c82) +
+ 0x0720dc82, // c0x0140 (n0x1c82-n0x1c83) +
+ 0x0722dc83, // c0x0141 (n0x1c83-n0x1c8b) +
+ 0x0727dc8b, // c0x0142 (n0x1c8b-n0x1c9f) +
+ 0x07295c9f, // c0x0143 (n0x1c9f-n0x1ca5) +
+ 0x072e9ca5, // c0x0144 (n0x1ca5-n0x1cba) +
+ 0x072edcba, // c0x0145 (n0x1cba-n0x1cbb) +
+ 0x072f1cbb, // c0x0146 (n0x1cbb-n0x1cbc) +
+ 0x07335cbc, // c0x0147 (n0x1cbc-n0x1ccd) +
+ 0x07345ccd, // c0x0148 (n0x1ccd-n0x1cd1) +
+ 0x0737dcd1, // c0x0149 (n0x1cd1-n0x1cdf) +
+ 0x073adcdf, // c0x014a (n0x1cdf-n0x1ceb) +
+ 0x074e9ceb, // c0x014b (n0x1ceb-n0x1d3a) +
+ 0x0750dd3a, // c0x014c (n0x1d3a-n0x1d43) +
+ 0x07539d43, // c0x014d (n0x1d43-n0x1d4e) +
+ 0x0753dd4e, // c0x014e (n0x1d4e-n0x1d4f) +
+ 0x07541d4f, // c0x014f (n0x1d4f-n0x1d50) +
+ 0x0763dd50, // c0x0150 (n0x1d50-n0x1d8f) +
+ 0x07649d8f, // c0x0151 (n0x1d8f-n0x1d92) +
+ 0x07655d92, // c0x0152 (n0x1d92-n0x1d95) +
+ 0x07661d95, // c0x0153 (n0x1d95-n0x1d98) +
+ 0x0766dd98, // c0x0154 (n0x1d98-n0x1d9b) +
+ 0x07679d9b, // c0x0155 (n0x1d9b-n0x1d9e) +
+ 0x07685d9e, // c0x0156 (n0x1d9e-n0x1da1) +
+ 0x07691da1, // c0x0157 (n0x1da1-n0x1da4) +
+ 0x0769dda4, // c0x0158 (n0x1da4-n0x1da7) +
+ 0x076a9da7, // c0x0159 (n0x1da7-n0x1daa) +
+ 0x076b5daa, // c0x015a (n0x1daa-n0x1dad) +
+ 0x076c1dad, // c0x015b (n0x1dad-n0x1db0) +
+ 0x076cddb0, // c0x015c (n0x1db0-n0x1db3) +
+ 0x076d9db3, // c0x015d (n0x1db3-n0x1db6) +
+ 0x076e1db6, // c0x015e (n0x1db6-n0x1db8) +
+ 0x076eddb8, // c0x015f (n0x1db8-n0x1dbb) +
+ 0x076f9dbb, // c0x0160 (n0x1dbb-n0x1dbe) +
+ 0x07705dbe, // c0x0161 (n0x1dbe-n0x1dc1) +
+ 0x07711dc1, // c0x0162 (n0x1dc1-n0x1dc4) +
+ 0x0771ddc4, // c0x0163 (n0x1dc4-n0x1dc7) +
+ 0x07729dc7, // c0x0164 (n0x1dc7-n0x1dca) +
+ 0x07735dca, // c0x0165 (n0x1dca-n0x1dcd) +
+ 0x07741dcd, // c0x0166 (n0x1dcd-n0x1dd0) +
+ 0x0774ddd0, // c0x0167 (n0x1dd0-n0x1dd3) +
+ 0x07759dd3, // c0x0168 (n0x1dd3-n0x1dd6) +
+ 0x07765dd6, // c0x0169 (n0x1dd6-n0x1dd9) +
+ 0x07771dd9, // c0x016a (n0x1dd9-n0x1ddc) +
+ 0x0777dddc, // c0x016b (n0x1ddc-n0x1ddf) +
+ 0x07789ddf, // c0x016c (n0x1ddf-n0x1de2) +
+ 0x07795de2, // c0x016d (n0x1de2-n0x1de5) +
+ 0x077a1de5, // c0x016e (n0x1de5-n0x1de8) +
+ 0x077adde8, // c0x016f (n0x1de8-n0x1deb) +
+ 0x077b5deb, // c0x0170 (n0x1deb-n0x1ded) +
+ 0x077c1ded, // c0x0171 (n0x1ded-n0x1df0) +
+ 0x077cddf0, // c0x0172 (n0x1df0-n0x1df3) +
+ 0x077d9df3, // c0x0173 (n0x1df3-n0x1df6) +
+ 0x077e5df6, // c0x0174 (n0x1df6-n0x1df9) +
+ 0x077f1df9, // c0x0175 (n0x1df9-n0x1dfc) +
+ 0x077fddfc, // c0x0176 (n0x1dfc-n0x1dff) +
+ 0x07809dff, // c0x0177 (n0x1dff-n0x1e02) +
+ 0x07815e02, // c0x0178 (n0x1e02-n0x1e05) +
+ 0x07821e05, // c0x0179 (n0x1e05-n0x1e08) +
+ 0x0782de08, // c0x017a (n0x1e08-n0x1e0b) +
+ 0x07839e0b, // c0x017b (n0x1e0b-n0x1e0e) +
+ 0x07845e0e, // c0x017c (n0x1e0e-n0x1e11) +
+ 0x07851e11, // c0x017d (n0x1e11-n0x1e14) +
+ 0x07859e14, // c0x017e (n0x1e14-n0x1e16) +
+ 0x07865e16, // c0x017f (n0x1e16-n0x1e19) +
+ 0x07871e19, // c0x0180 (n0x1e19-n0x1e1c) +
+ 0x0787de1c, // c0x0181 (n0x1e1c-n0x1e1f) +
+ 0x07889e1f, // c0x0182 (n0x1e1f-n0x1e22) +
+ 0x07895e22, // c0x0183 (n0x1e22-n0x1e25) +
+ 0x078a1e25, // c0x0184 (n0x1e25-n0x1e28) +
+ 0x078ade28, // c0x0185 (n0x1e28-n0x1e2b) +
+ 0x078b9e2b, // c0x0186 (n0x1e2b-n0x1e2e) +
+ 0x078bde2e, // c0x0187 (n0x1e2e-n0x1e2f) +
+ 0x078c9e2f, // c0x0188 (n0x1e2f-n0x1e32) +
+ 0x078e1e32, // c0x0189 (n0x1e32-n0x1e38) +
+ 0x078e5e38, // c0x018a (n0x1e38-n0x1e39) +
+ 0x078f5e39, // c0x018b (n0x1e39-n0x1e3d) +
+ 0x0790de3d, // c0x018c (n0x1e3d-n0x1e43) +
+ 0x07951e43, // c0x018d (n0x1e43-n0x1e54) +
+ 0x07965e54, // c0x018e (n0x1e54-n0x1e59) +
+ 0x07999e59, // c0x018f (n0x1e59-n0x1e66) +
+ 0x079a9e66, // c0x0190 (n0x1e66-n0x1e6a) +
+ 0x079c5e6a, // c0x0191 (n0x1e6a-n0x1e71) +
+ 0x079dde71, // c0x0192 (n0x1e71-n0x1e77) +
+ 0x27a21e77, // c0x0193 (n0x1e77-n0x1e88) o
+ 0x07a25e88, // c0x0194 (n0x1e88-n0x1e89) +
}
// max children 404 (capacity 511)
-// max text offset 26074 (capacity 32767)
+// max text offset 26864 (capacity 32767)
// max text length 36 (capacity 63)
-// max hi 7613 (capacity 16383)
-// max lo 7612 (capacity 16383)
+// max hi 7817 (capacity 16383)
+// max lo 7816 (capacity 16383)
diff --git a/vendor/golang.org/x/net/publicsuffix/table_test.go b/vendor/golang.org/x/net/publicsuffix/table_test.go
index ec14b2d0..4d2eb2ea 100644
--- a/vendor/golang.org/x/net/publicsuffix/table_test.go
+++ b/vendor/golang.org/x/net/publicsuffix/table_test.go
@@ -849,7 +849,15 @@ var rules = [...]string{
"web.id",
"ie",
"gov.ie",
- "*.il",
+ "il",
+ "ac.il",
+ "co.il",
+ "gov.il",
+ "idf.il",
+ "k12.il",
+ "muni.il",
+ "net.il",
+ "org.il",
"im",
"ac.im",
"co.im",
@@ -3272,6 +3280,7 @@ var rules = [...]string{
"edu.mg",
"mil.mg",
"com.mg",
+ "co.mg",
"mh",
"mil",
"mk",
@@ -5630,8 +5639,6 @@ var rules = [...]string{
"zhytomyr.ua",
"zp.ua",
"zt.ua",
- "co.ua",
- "pp.ua",
"ug",
"co.ug",
"or.ug",
@@ -6032,10 +6039,14 @@ var rules = [...]string{
"*.zw",
"aaa",
"aarp",
+ "abarth",
"abb",
"abbott",
+ "abbvie",
+ "abc",
"able",
"abogado",
+ "abudhabi",
"academy",
"accenture",
"accountant",
@@ -6043,29 +6054,42 @@ var rules = [...]string{
"aco",
"active",
"actor",
+ "adac",
"ads",
"adult",
"aeg",
"aetna",
+ "afamilycompany",
"afl",
"africa",
"africamagic",
"agakhan",
"agency",
"aig",
+ "aigo",
+ "airbus",
"airforce",
"airtel",
"akdn",
+ "alfaromeo",
"alibaba",
"alipay",
"allfinanz",
+ "allstate",
"ally",
"alsace",
+ "alstom",
+ "americanexpress",
+ "americanfamily",
+ "amex",
+ "amfam",
"amica",
"amsterdam",
"analytics",
"android",
"anquan",
+ "anz",
+ "aol",
"apartments",
"app",
"apple",
@@ -6074,12 +6098,15 @@ var rules = [...]string{
"archi",
"army",
"arte",
+ "asda",
"associates",
+ "athleta",
"attorney",
"auction",
"audi",
"audible",
"audio",
+ "auspost",
"author",
"auto",
"autos",
@@ -6089,6 +6116,8 @@ var rules = [...]string{
"azure",
"baby",
"baidu",
+ "banamex",
+ "bananarepublic",
"band",
"bank",
"bar",
@@ -6097,9 +6126,11 @@ var rules = [...]string{
"barclays",
"barefoot",
"bargains",
+ "basketball",
"bauhaus",
"bayern",
"bbc",
+ "bbt",
"bbva",
"bcg",
"bcn",
@@ -6108,6 +6139,7 @@ var rules = [...]string{
"bentley",
"berlin",
"best",
+ "bestbuy",
"bet",
"bharti",
"bible",
@@ -6118,6 +6150,8 @@ var rules = [...]string{
"bio",
"black",
"blackfriday",
+ "blanco",
+ "blockbuster",
"blog",
"bloomberg",
"blue",
@@ -6126,9 +6160,13 @@ var rules = [...]string{
"bnl",
"bnpparibas",
"boats",
+ "boehringer",
+ "bofa",
"bom",
"bond",
"boo",
+ "book",
+ "booking",
"boots",
"bosch",
"bostik",
@@ -6141,6 +6179,7 @@ var rules = [...]string{
"brother",
"brussels",
"budapest",
+ "bugatti",
"build",
"builders",
"business",
@@ -6151,12 +6190,14 @@ var rules = [...]string{
"cafe",
"cal",
"call",
+ "calvinklein",
"camera",
"camp",
"cancerresearch",
"canon",
"capetown",
"capital",
+ "capitalone",
"car",
"caravan",
"cards",
@@ -6166,12 +6207,15 @@ var rules = [...]string{
"cars",
"cartier",
"casa",
+ "case",
+ "caseih",
"cash",
"casino",
"catering",
"cba",
"cbn",
"cbre",
+ "cbs",
"ceb",
"center",
"ceo",
@@ -6187,10 +6231,13 @@ var rules = [...]string{
"chloe",
"christmas",
"chrome",
+ "chrysler",
"church",
"cipriani",
"circle",
"cisco",
+ "citadel",
+ "citi",
"citic",
"city",
"cityeats",
@@ -6198,6 +6245,7 @@ var rules = [...]string{
"cleaning",
"click",
"clinic",
+ "clinique",
"clothing",
"cloud",
"club",
@@ -6207,9 +6255,11 @@ var rules = [...]string{
"coffee",
"college",
"cologne",
+ "comcast",
"commbank",
"community",
"company",
+ "compare",
"computer",
"comsec",
"condos",
@@ -6251,6 +6301,7 @@ var rules = [...]string{
"degree",
"delivery",
"dell",
+ "deloitte",
"delta",
"democrat",
"dental",
@@ -6258,14 +6309,18 @@ var rules = [...]string{
"desi",
"design",
"dev",
+ "dhl",
"diamonds",
"diet",
"digital",
"direct",
"directory",
"discount",
+ "discover",
+ "dish",
"dnp",
"docs",
+ "dodge",
"dog",
"doha",
"domains",
@@ -6276,25 +6331,33 @@ var rules = [...]string{
"dstv",
"dtv",
"dubai",
+ "duck",
"dunlop",
+ "duns",
"dupont",
"durban",
"dvag",
+ "dwg",
"earth",
"eat",
"edeka",
"education",
"email",
"emerck",
+ "emerson",
"energy",
"engineer",
"engineering",
"enterprises",
+ "epost",
"epson",
"equipment",
+ "ericsson",
"erni",
"esq",
"estate",
+ "esurance",
+ "etisalat",
"eurovision",
"eus",
"events",
@@ -6312,10 +6375,16 @@ var rules = [...]string{
"fan",
"fans",
"farm",
+ "farmers",
"fashion",
"fast",
+ "fedex",
"feedback",
+ "ferrari",
"ferrero",
+ "fiat",
+ "fidelity",
+ "fido",
"film",
"final",
"finance",
@@ -6329,6 +6398,7 @@ var rules = [...]string{
"fitness",
"flickr",
"flights",
+ "flir",
"florist",
"flowers",
"flsmidth",
@@ -6341,10 +6411,15 @@ var rules = [...]string{
"forsale",
"forum",
"foundation",
+ "fox",
+ "fresenius",
"frl",
"frogans",
"frontdoor",
"frontier",
+ "ftr",
+ "fujitsu",
+ "fujixerox",
"fund",
"furniture",
"futbol",
@@ -6355,17 +6430,20 @@ var rules = [...]string{
"gallup",
"game",
"games",
+ "gap",
"garden",
"gbiz",
"gdn",
"gea",
"gent",
"genting",
+ "george",
"ggee",
"gift",
"gifts",
"gives",
"giving",
+ "glade",
"glass",
"gle",
"global",
@@ -6373,10 +6451,12 @@ var rules = [...]string{
"gmail",
"gmo",
"gmx",
+ "godaddy",
"gold",
"goldpoint",
"golf",
"goo",
+ "goodhands",
"goodyear",
"goog",
"google",
@@ -6389,6 +6469,7 @@ var rules = [...]string{
"green",
"gripe",
"group",
+ "guardian",
"gucci",
"guge",
"guide",
@@ -6397,6 +6478,8 @@ var rules = [...]string{
"hamburg",
"hangout",
"haus",
+ "hbo",
+ "hdfc",
"hdfcbank",
"health",
"healthcare",
@@ -6406,6 +6489,7 @@ var rules = [...]string{
"hermes",
"hgtv",
"hiphop",
+ "hisamitsu",
"hitachi",
"hiv",
"hkt",
@@ -6413,23 +6497,33 @@ var rules = [...]string{
"holdings",
"holiday",
"homedepot",
+ "homegoods",
"homes",
+ "homesense",
"honda",
+ "honeywell",
"horse",
"host",
"hosting",
+ "hot",
"hoteles",
"hotmail",
"house",
"how",
"hsbc",
"htc",
+ "hughes",
+ "hyatt",
+ "hyundai",
"ibm",
"icbc",
"ice",
"icu",
+ "ieee",
"ifm",
"iinet",
+ "ikano",
+ "imamat",
"imdb",
"immo",
"immobilien",
@@ -6440,19 +6534,25 @@ var rules = [...]string{
"institute",
"insurance",
"insure",
+ "intel",
"international",
+ "intuit",
"investments",
"ipiranga",
"irish",
"iselect",
+ "ismaili",
"ist",
"istanbul",
"itau",
+ "itv",
+ "iveco",
"iwc",
"jaguar",
"java",
"jcb",
"jcp",
+ "jeep",
"jetzt",
"jewelry",
"jio",
@@ -6466,12 +6566,14 @@ var rules = [...]string{
"jpmorgan",
"jprs",
"juegos",
+ "juniper",
"kaufen",
"kddi",
"kerryhotels",
"kerrylogistics",
"kerryproperties",
"kfh",
+ "kia",
"kim",
"kinder",
"kindle",
@@ -6479,6 +6581,7 @@ var rules = [...]string{
"kiwi",
"koeln",
"komatsu",
+ "kosher",
"kpmg",
"kpn",
"krd",
@@ -6487,19 +6590,27 @@ var rules = [...]string{
"kyknet",
"kyoto",
"lacaixa",
+ "ladbrokes",
"lamborghini",
+ "lamer",
"lancaster",
+ "lancia",
+ "lancome",
"land",
"landrover",
+ "lanxess",
"lasalle",
"lat",
+ "latino",
"latrobe",
"law",
"lawyer",
"lds",
"lease",
"leclerc",
+ "lefrak",
"legal",
+ "lego",
"lexus",
"lgbt",
"liaison",
@@ -6509,6 +6620,7 @@ var rules = [...]string{
"lifestyle",
"lighting",
"like",
+ "lilly",
"limited",
"limo",
"lincoln",
@@ -6516,21 +6628,27 @@ var rules = [...]string{
"link",
"lipsy",
"live",
+ "living",
"lixil",
"loan",
"loans",
"locker",
"locus",
+ "loft",
"lol",
"london",
"lotte",
"lotto",
"love",
+ "lpl",
+ "lplfinancial",
"ltd",
"ltda",
+ "lundbeck",
"lupin",
"luxe",
"luxury",
+ "macys",
"madrid",
"maif",
"maison",
@@ -6542,7 +6660,14 @@ var rules = [...]string{
"marketing",
"markets",
"marriott",
+ "marshalls",
+ "maserati",
+ "mattel",
"mba",
+ "mcd",
+ "mcdonalds",
+ "mckinsey",
+ "med",
"media",
"meet",
"melbourne",
@@ -6555,7 +6680,9 @@ var rules = [...]string{
"miami",
"microsoft",
"mini",
+ "mint",
"mit",
+ "mitsubishi",
"mlb",
"mls",
"mma",
@@ -6567,7 +6694,9 @@ var rules = [...]string{
"mom",
"monash",
"money",
+ "monster",
"montblanc",
+ "mopar",
"mormon",
"mortgage",
"moscow",
@@ -6576,6 +6705,7 @@ var rules = [...]string{
"mov",
"movie",
"movistar",
+ "msd",
"mtn",
"mtpc",
"mtr",
@@ -6583,24 +6713,30 @@ var rules = [...]string{
"mutual",
"mutuelle",
"mzansimagic",
+ "nab",
"nadex",
"nagoya",
"naspers",
+ "nationwide",
"natura",
"navy",
+ "nba",
"nec",
"netbank",
"netflix",
"network",
"neustar",
"new",
+ "newholland",
"news",
"next",
"nextdirect",
"nexus",
+ "nfl",
"ngo",
"nhk",
"nico",
+ "nike",
"nikon",
"ninja",
"nissan",
@@ -6616,27 +6752,33 @@ var rules = [...]string{
"nyc",
"obi",
"observer",
+ "off",
"office",
"okinawa",
"olayan",
"olayangroup",
+ "oldnavy",
"ollo",
"omega",
"one",
"ong",
"onl",
"online",
+ "onyourside",
"ooo",
+ "open",
"oracle",
"orange",
"organic",
"orientexpress",
+ "origins",
"osaka",
"otsuka",
"ott",
"ovh",
"page",
"pamperedchef",
+ "panasonic",
"panerai",
"paris",
"pars",
@@ -6644,9 +6786,11 @@ var rules = [...]string{
"parts",
"party",
"passagens",
+ "pay",
"payu",
"pccw",
"pet",
+ "pfizer",
"pharmacy",
"philips",
"photo",
@@ -6661,6 +6805,7 @@ var rules = [...]string{
"pin",
"ping",
"pink",
+ "pioneer",
"pizza",
"place",
"play",
@@ -6670,23 +6815,31 @@ var rules = [...]string{
"pnc",
"pohl",
"poker",
+ "politie",
"porn",
+ "pramerica",
"praxi",
"press",
"prime",
"prod",
"productions",
"prof",
+ "progressive",
"promo",
"properties",
"property",
"protection",
+ "pru",
+ "prudential",
"pub",
"qpon",
"quebec",
"quest",
+ "qvc",
"racing",
+ "raid",
"read",
+ "realestate",
"realtor",
"realty",
"recipes",
@@ -6712,12 +6865,14 @@ var rules = [...]string{
"rich",
"richardli",
"ricoh",
+ "rightathome",
"ril",
"rio",
"rip",
"rocher",
"rocks",
"rodeo",
+ "rogers",
"room",
"rsvp",
"ruhr",
@@ -6730,6 +6885,7 @@ var rules = [...]string{
"sakura",
"sale",
"salon",
+ "samsclub",
"samsung",
"sandvik",
"sandvikcoromant",
@@ -6744,29 +6900,39 @@ var rules = [...]string{
"sbs",
"sca",
"scb",
+ "schaeffler",
"schmidt",
"scholarships",
"school",
"schule",
"schwarz",
"science",
+ "scjohnson",
"scor",
"scot",
"seat",
+ "secure",
"security",
"seek",
+ "select",
"sener",
"services",
+ "ses",
+ "seven",
"sew",
"sex",
"sexy",
+ "sfr",
+ "shangrila",
"sharp",
"shaw",
+ "shell",
"shia",
"shiksha",
"shoes",
"shouji",
"show",
+ "showtime",
"shriram",
"silk",
"sina",
@@ -6776,6 +6942,8 @@ var rules = [...]string{
"skin",
"sky",
"skype",
+ "sling",
+ "smart",
"smile",
"sncf",
"soccer",
@@ -6793,10 +6961,13 @@ var rules = [...]string{
"spot",
"spreadbetting",
"srl",
+ "srt",
"stada",
+ "staples",
"star",
"starhub",
"statebank",
+ "statefarm",
"statoil",
"stc",
"stcgroup",
@@ -6815,6 +6986,7 @@ var rules = [...]string{
"surgery",
"suzuki",
"swatch",
+ "swiftcover",
"swiss",
"sydney",
"symantec",
@@ -6823,6 +6995,7 @@ var rules = [...]string{
"taipei",
"talk",
"taobao",
+ "target",
"tatamotors",
"tatar",
"tattoo",
@@ -6842,12 +7015,16 @@ var rules = [...]string{
"theater",
"theatre",
"theguardian",
+ "tiaa",
"tickets",
"tienda",
"tiffany",
"tips",
"tires",
"tirol",
+ "tjmaxx",
+ "tjx",
+ "tkmaxx",
"tmall",
"today",
"tokyo",
@@ -6855,6 +7032,7 @@ var rules = [...]string{
"top",
"toray",
"toshiba",
+ "total",
"tours",
"town",
"toyota",
@@ -6872,15 +7050,19 @@ var rules = [...]string{
"tunes",
"tushu",
"tvs",
+ "ubank",
"ubs",
+ "uconnect",
"university",
"uno",
"uol",
"ups",
"vacations",
"vana",
+ "vanguard",
"vegas",
"ventures",
+ "verisign",
"versicherung",
"vet",
"viajes",
@@ -6891,10 +7073,12 @@ var rules = [...]string{
"vin",
"vip",
"virgin",
+ "visa",
"vision",
"vista",
"vistaprint",
"viva",
+ "vivo",
"vlaanderen",
"vodka",
"volkswagen",
@@ -6904,6 +7088,7 @@ var rules = [...]string{
"voyage",
"vuelos",
"wales",
+ "walmart",
"walter",
"wang",
"wanggou",
@@ -6926,14 +7111,19 @@ var rules = [...]string{
"win",
"windows",
"wine",
+ "winners",
"wme",
+ "wolterskluwer",
+ "woodside",
"work",
"works",
"world",
+ "wow",
"wtc",
"wtf",
"xbox",
"xerox",
+ "xfinity",
"xihuan",
"xin",
"xn--11b4c3d",
@@ -6947,8 +7137,10 @@ var rules = [...]string{
"xn--42c2d9a",
"xn--45q11c",
"xn--4gbrim",
+ "xn--4gq48lf9j",
"xn--55qw42g",
"xn--55qx5d",
+ "xn--5su34j936bgsg",
"xn--5tzm5g",
"xn--6frz82g",
"xn--6qq986b3xl",
@@ -6981,6 +7173,7 @@ var rules = [...]string{
"xn--fzys8d69uvgm",
"xn--g2xx48c",
"xn--gckr3f0f",
+ "xn--gk3at1e",
"xn--hxt814e",
"xn--i1b6b1a6a2e",
"xn--imr513n",
@@ -6993,8 +7186,10 @@ var rules = [...]string{
"xn--kput3i",
"xn--mgba3a3ejt",
"xn--mgba7c0bbn0a",
+ "xn--mgbaakc7dvf",
"xn--mgbab2bd",
"xn--mgbb9fbpob",
+ "xn--mgbca7dzdo",
"xn--mgbt3dhd",
"xn--mk1bu44c",
"xn--mxtq1m",
@@ -7019,6 +7214,7 @@ var rules = [...]string{
"xn--vhquv",
"xn--vuq861b",
"xn--w4r85el8fhu5dnra",
+ "xn--w4rs40l",
"xn--xhq521b",
"xn--zfr164b",
"xperia",
@@ -7549,6 +7745,7 @@ var rules = [...]string{
"googlecode.com",
"pagespeedmobilizer.com",
"withgoogle.com",
+ "withyoutube.com",
"herokuapp.com",
"herokussl.com",
"iki.fi",
@@ -7558,6 +7755,7 @@ var rules = [...]string{
"azurewebsites.net",
"azure-mobile.net",
"cloudapp.net",
+ "bmoattachments.org",
"4u.com",
"nfshost.com",
"nyc.mn",
@@ -7570,8 +7768,15 @@ var rules = [...]string{
"poznan.pl",
"wroc.pl",
"zakopane.pl",
+ "pantheon.io",
+ "gotpantheon.com",
"priv.at",
+ "qa2.com",
"rhcloud.com",
+ "sandcats.io",
+ "biz.ua",
+ "co.ua",
+ "pp.ua",
"sinaapp.com",
"vipsinaapp.com",
"1kapp.com",
@@ -7592,10 +7797,14 @@ var rules = [...]string{
var nodeLabels = [...]string{
"aaa",
"aarp",
+ "abarth",
"abb",
"abbott",
+ "abbvie",
+ "abc",
"able",
"abogado",
+ "abudhabi",
"ac",
"academy",
"accenture",
@@ -7605,6 +7814,7 @@ var nodeLabels = [...]string{
"active",
"actor",
"ad",
+ "adac",
"ads",
"adult",
"ae",
@@ -7612,6 +7822,7 @@ var nodeLabels = [...]string{
"aero",
"aetna",
"af",
+ "afamilycompany",
"afl",
"africa",
"africamagic",
@@ -7620,23 +7831,34 @@ var nodeLabels = [...]string{
"agency",
"ai",
"aig",
+ "aigo",
+ "airbus",
"airforce",
"airtel",
"akdn",
"al",
+ "alfaromeo",
"alibaba",
"alipay",
"allfinanz",
+ "allstate",
"ally",
"alsace",
+ "alstom",
"am",
+ "americanexpress",
+ "americanfamily",
+ "amex",
+ "amfam",
"amica",
"amsterdam",
"an",
"analytics",
"android",
"anquan",
+ "anz",
"ao",
+ "aol",
"apartments",
"app",
"apple",
@@ -7649,15 +7871,18 @@ var nodeLabels = [...]string{
"arpa",
"arte",
"as",
+ "asda",
"asia",
"associates",
"at",
+ "athleta",
"attorney",
"au",
"auction",
"audi",
"audible",
"audio",
+ "auspost",
"author",
"auto",
"autos",
@@ -7671,6 +7896,8 @@ var nodeLabels = [...]string{
"ba",
"baby",
"baidu",
+ "banamex",
+ "bananarepublic",
"band",
"bank",
"bar",
@@ -7679,10 +7906,12 @@ var nodeLabels = [...]string{
"barclays",
"barefoot",
"bargains",
+ "basketball",
"bauhaus",
"bayern",
"bb",
"bbc",
+ "bbt",
"bbva",
"bcg",
"bcn",
@@ -7693,6 +7922,7 @@ var nodeLabels = [...]string{
"bentley",
"berlin",
"best",
+ "bestbuy",
"bet",
"bf",
"bg",
@@ -7709,6 +7939,8 @@ var nodeLabels = [...]string{
"bj",
"black",
"blackfriday",
+ "blanco",
+ "blockbuster",
"blog",
"bloomberg",
"blue",
@@ -7720,9 +7952,13 @@ var nodeLabels = [...]string{
"bnpparibas",
"bo",
"boats",
+ "boehringer",
+ "bofa",
"bom",
"bond",
"boo",
+ "book",
+ "booking",
"boots",
"bosch",
"bostik",
@@ -7738,6 +7974,7 @@ var nodeLabels = [...]string{
"bs",
"bt",
"budapest",
+ "bugatti",
"build",
"builders",
"business",
@@ -7753,12 +7990,14 @@ var nodeLabels = [...]string{
"cafe",
"cal",
"call",
+ "calvinklein",
"camera",
"camp",
"cancerresearch",
"canon",
"capetown",
"capital",
+ "capitalone",
"car",
"caravan",
"cards",
@@ -7768,6 +8007,8 @@ var nodeLabels = [...]string{
"cars",
"cartier",
"casa",
+ "case",
+ "caseih",
"cash",
"casino",
"cat",
@@ -7775,6 +8016,7 @@ var nodeLabels = [...]string{
"cba",
"cbn",
"cbre",
+ "cbs",
"cc",
"cd",
"ceb",
@@ -7795,11 +8037,14 @@ var nodeLabels = [...]string{
"chloe",
"christmas",
"chrome",
+ "chrysler",
"church",
"ci",
"cipriani",
"circle",
"cisco",
+ "citadel",
+ "citi",
"citic",
"city",
"cityeats",
@@ -7809,6 +8054,7 @@ var nodeLabels = [...]string{
"cleaning",
"click",
"clinic",
+ "clinique",
"clothing",
"cloud",
"club",
@@ -7822,9 +8068,11 @@ var nodeLabels = [...]string{
"college",
"cologne",
"com",
+ "comcast",
"commbank",
"community",
"company",
+ "compare",
"computer",
"comsec",
"condos",
@@ -7875,6 +8123,7 @@ var nodeLabels = [...]string{
"degree",
"delivery",
"dell",
+ "deloitte",
"delta",
"democrat",
"dental",
@@ -7882,18 +8131,22 @@ var nodeLabels = [...]string{
"desi",
"design",
"dev",
+ "dhl",
"diamonds",
"diet",
"digital",
"direct",
"directory",
"discount",
+ "discover",
+ "dish",
"dj",
"dk",
"dm",
"dnp",
"do",
"docs",
+ "dodge",
"dog",
"doha",
"domains",
@@ -7904,10 +8157,13 @@ var nodeLabels = [...]string{
"dstv",
"dtv",
"dubai",
+ "duck",
"dunlop",
+ "duns",
"dupont",
"durban",
"dvag",
+ "dwg",
"dz",
"earth",
"eat",
@@ -7919,18 +8175,23 @@ var nodeLabels = [...]string{
"eg",
"email",
"emerck",
+ "emerson",
"energy",
"engineer",
"engineering",
"enterprises",
+ "epost",
"epson",
"equipment",
"er",
+ "ericsson",
"erni",
"es",
"esq",
"estate",
+ "esurance",
"et",
+ "etisalat",
"eu",
"eurovision",
"eus",
@@ -7949,11 +8210,17 @@ var nodeLabels = [...]string{
"fan",
"fans",
"farm",
+ "farmers",
"fashion",
"fast",
+ "fedex",
"feedback",
+ "ferrari",
"ferrero",
"fi",
+ "fiat",
+ "fidelity",
+ "fido",
"film",
"final",
"finance",
@@ -7969,6 +8236,7 @@ var nodeLabels = [...]string{
"fk",
"flickr",
"flights",
+ "flir",
"florist",
"flowers",
"flsmidth",
@@ -7983,11 +8251,16 @@ var nodeLabels = [...]string{
"forsale",
"forum",
"foundation",
+ "fox",
"fr",
+ "fresenius",
"frl",
"frogans",
"frontdoor",
"frontier",
+ "ftr",
+ "fujitsu",
+ "fujixerox",
"fund",
"furniture",
"futbol",
@@ -7999,6 +8272,7 @@ var nodeLabels = [...]string{
"gallup",
"game",
"games",
+ "gap",
"garden",
"gb",
"gbiz",
@@ -8008,6 +8282,7 @@ var nodeLabels = [...]string{
"gea",
"gent",
"genting",
+ "george",
"gf",
"gg",
"ggee",
@@ -8018,6 +8293,7 @@ var nodeLabels = [...]string{
"gives",
"giving",
"gl",
+ "glade",
"glass",
"gle",
"global",
@@ -8027,10 +8303,12 @@ var nodeLabels = [...]string{
"gmo",
"gmx",
"gn",
+ "godaddy",
"gold",
"goldpoint",
"golf",
"goo",
+ "goodhands",
"goodyear",
"goog",
"google",
@@ -8050,6 +8328,7 @@ var nodeLabels = [...]string{
"gs",
"gt",
"gu",
+ "guardian",
"gucci",
"guge",
"guide",
@@ -8060,6 +8339,8 @@ var nodeLabels = [...]string{
"hamburg",
"hangout",
"haus",
+ "hbo",
+ "hdfc",
"hdfcbank",
"health",
"healthcare",
@@ -8069,6 +8350,7 @@ var nodeLabels = [...]string{
"hermes",
"hgtv",
"hiphop",
+ "hisamitsu",
"hitachi",
"hiv",
"hk",
@@ -8079,11 +8361,15 @@ var nodeLabels = [...]string{
"holdings",
"holiday",
"homedepot",
+ "homegoods",
"homes",
+ "homesense",
"honda",
+ "honeywell",
"horse",
"host",
"hosting",
+ "hot",
"hoteles",
"hotmail",
"house",
@@ -8093,16 +8379,22 @@ var nodeLabels = [...]string{
"ht",
"htc",
"hu",
+ "hughes",
+ "hyatt",
+ "hyundai",
"ibm",
"icbc",
"ice",
"icu",
"id",
"ie",
+ "ieee",
"ifm",
"iinet",
+ "ikano",
"il",
"im",
+ "imamat",
"imdb",
"immo",
"immobilien",
@@ -8116,7 +8408,9 @@ var nodeLabels = [...]string{
"insurance",
"insure",
"int",
+ "intel",
"international",
+ "intuit",
"investments",
"io",
"ipiranga",
@@ -8125,16 +8419,20 @@ var nodeLabels = [...]string{
"irish",
"is",
"iselect",
+ "ismaili",
"ist",
"istanbul",
"it",
"itau",
+ "itv",
+ "iveco",
"iwc",
"jaguar",
"java",
"jcb",
"jcp",
"je",
+ "jeep",
"jetzt",
"jewelry",
"jio",
@@ -8152,6 +8450,7 @@ var nodeLabels = [...]string{
"jpmorgan",
"jprs",
"juegos",
+ "juniper",
"kaufen",
"kddi",
"ke",
@@ -8162,6 +8461,7 @@ var nodeLabels = [...]string{
"kg",
"kh",
"ki",
+ "kia",
"kim",
"kinder",
"kindle",
@@ -8171,6 +8471,7 @@ var nodeLabels = [...]string{
"kn",
"koeln",
"komatsu",
+ "kosher",
"kp",
"kpmg",
"kpn",
@@ -8185,12 +8486,18 @@ var nodeLabels = [...]string{
"kz",
"la",
"lacaixa",
+ "ladbrokes",
"lamborghini",
+ "lamer",
"lancaster",
+ "lancia",
+ "lancome",
"land",
"landrover",
+ "lanxess",
"lasalle",
"lat",
+ "latino",
"latrobe",
"law",
"lawyer",
@@ -8199,7 +8506,9 @@ var nodeLabels = [...]string{
"lds",
"lease",
"leclerc",
+ "lefrak",
"legal",
+ "lego",
"lexus",
"lgbt",
"li",
@@ -8210,6 +8519,7 @@ var nodeLabels = [...]string{
"lifestyle",
"lighting",
"like",
+ "lilly",
"limited",
"limo",
"lincoln",
@@ -8217,29 +8527,35 @@ var nodeLabels = [...]string{
"link",
"lipsy",
"live",
+ "living",
"lixil",
"lk",
"loan",
"loans",
"locker",
"locus",
+ "loft",
"lol",
"london",
"lotte",
"lotto",
"love",
+ "lpl",
+ "lplfinancial",
"lr",
"ls",
"lt",
"ltd",
"ltda",
"lu",
+ "lundbeck",
"lupin",
"luxe",
"luxury",
"lv",
"ly",
"ma",
+ "macys",
"madrid",
"maif",
"maison",
@@ -8251,10 +8567,17 @@ var nodeLabels = [...]string{
"marketing",
"markets",
"marriott",
+ "marshalls",
+ "maserati",
+ "mattel",
"mba",
"mc",
+ "mcd",
+ "mcdonalds",
+ "mckinsey",
"md",
"me",
+ "med",
"media",
"meet",
"melbourne",
@@ -8270,7 +8593,9 @@ var nodeLabels = [...]string{
"microsoft",
"mil",
"mini",
+ "mint",
"mit",
+ "mitsubishi",
"mk",
"ml",
"mlb",
@@ -8288,7 +8613,9 @@ var nodeLabels = [...]string{
"mom",
"monash",
"money",
+ "monster",
"montblanc",
+ "mopar",
"mormon",
"mortgage",
"moscow",
@@ -8301,6 +8628,7 @@ var nodeLabels = [...]string{
"mq",
"mr",
"ms",
+ "msd",
"mt",
"mtn",
"mtpc",
@@ -8317,12 +8645,15 @@ var nodeLabels = [...]string{
"mz",
"mzansimagic",
"na",
+ "nab",
"nadex",
"nagoya",
"name",
"naspers",
+ "nationwide",
"natura",
"navy",
+ "nba",
"nc",
"ne",
"nec",
@@ -8332,16 +8663,19 @@ var nodeLabels = [...]string{
"network",
"neustar",
"new",
+ "newholland",
"news",
"next",
"nextdirect",
"nexus",
"nf",
+ "nfl",
"ng",
"ngo",
"nhk",
"ni",
"nico",
+ "nike",
"nikon",
"ninja",
"nissan",
@@ -8363,10 +8697,12 @@ var nodeLabels = [...]string{
"nz",
"obi",
"observer",
+ "off",
"office",
"okinawa",
"olayan",
"olayangroup",
+ "oldnavy",
"ollo",
"om",
"omega",
@@ -8374,12 +8710,15 @@ var nodeLabels = [...]string{
"ong",
"onl",
"online",
+ "onyourside",
"ooo",
+ "open",
"oracle",
"orange",
"org",
"organic",
"orientexpress",
+ "origins",
"osaka",
"otsuka",
"ott",
@@ -8387,6 +8726,7 @@ var nodeLabels = [...]string{
"pa",
"page",
"pamperedchef",
+ "panasonic",
"panerai",
"paris",
"pars",
@@ -8394,11 +8734,13 @@ var nodeLabels = [...]string{
"parts",
"party",
"passagens",
+ "pay",
"payu",
"pccw",
"pe",
"pet",
"pf",
+ "pfizer",
"pg",
"ph",
"pharmacy",
@@ -8415,6 +8757,7 @@ var nodeLabels = [...]string{
"pin",
"ping",
"pink",
+ "pioneer",
"pizza",
"pk",
"pl",
@@ -8428,9 +8771,11 @@ var nodeLabels = [...]string{
"pnc",
"pohl",
"poker",
+ "politie",
"porn",
"post",
"pr",
+ "pramerica",
"praxi",
"press",
"prime",
@@ -8438,10 +8783,13 @@ var nodeLabels = [...]string{
"prod",
"productions",
"prof",
+ "progressive",
"promo",
"properties",
"property",
"protection",
+ "pru",
+ "prudential",
"ps",
"pt",
"pub",
@@ -8451,9 +8799,12 @@ var nodeLabels = [...]string{
"qpon",
"quebec",
"quest",
+ "qvc",
"racing",
+ "raid",
"re",
"read",
+ "realestate",
"realtor",
"realty",
"recipes",
@@ -8479,6 +8830,7 @@ var nodeLabels = [...]string{
"rich",
"richardli",
"ricoh",
+ "rightathome",
"ril",
"rio",
"rip",
@@ -8486,6 +8838,7 @@ var nodeLabels = [...]string{
"rocher",
"rocks",
"rodeo",
+ "rogers",
"room",
"rs",
"rsvp",
@@ -8502,6 +8855,7 @@ var nodeLabels = [...]string{
"sakura",
"sale",
"salon",
+ "samsclub",
"samsung",
"sandvik",
"sandvikcoromant",
@@ -8518,33 +8872,43 @@ var nodeLabels = [...]string{
"sc",
"sca",
"scb",
+ "schaeffler",
"schmidt",
"scholarships",
"school",
"schule",
"schwarz",
"science",
+ "scjohnson",
"scor",
"scot",
"sd",
"se",
"seat",
+ "secure",
"security",
"seek",
+ "select",
"sener",
"services",
+ "ses",
+ "seven",
"sew",
"sex",
"sexy",
+ "sfr",
"sg",
"sh",
+ "shangrila",
"sharp",
"shaw",
+ "shell",
"shia",
"shiksha",
"shoes",
"shouji",
"show",
+ "showtime",
"shriram",
"si",
"silk",
@@ -8558,7 +8922,9 @@ var nodeLabels = [...]string{
"sky",
"skype",
"sl",
+ "sling",
"sm",
+ "smart",
"smile",
"sn",
"sncf",
@@ -8579,11 +8945,14 @@ var nodeLabels = [...]string{
"spreadbetting",
"sr",
"srl",
+ "srt",
"st",
"stada",
+ "staples",
"star",
"starhub",
"statebank",
+ "statefarm",
"statoil",
"stc",
"stcgroup",
@@ -8604,6 +8973,7 @@ var nodeLabels = [...]string{
"suzuki",
"sv",
"swatch",
+ "swiftcover",
"swiss",
"sx",
"sy",
@@ -8615,6 +8985,7 @@ var nodeLabels = [...]string{
"taipei",
"talk",
"taobao",
+ "target",
"tatamotors",
"tatar",
"tattoo",
@@ -8640,6 +9011,7 @@ var nodeLabels = [...]string{
"theater",
"theatre",
"theguardian",
+ "tiaa",
"tickets",
"tienda",
"tiffany",
@@ -8647,7 +9019,10 @@ var nodeLabels = [...]string{
"tires",
"tirol",
"tj",
+ "tjmaxx",
+ "tjx",
"tk",
+ "tkmaxx",
"tl",
"tm",
"tmall",
@@ -8659,6 +9034,7 @@ var nodeLabels = [...]string{
"top",
"toray",
"toshiba",
+ "total",
"tours",
"town",
"toyota",
@@ -8684,7 +9060,9 @@ var nodeLabels = [...]string{
"tw",
"tz",
"ua",
+ "ubank",
"ubs",
+ "uconnect",
"ug",
"uk",
"university",
@@ -8697,10 +9075,12 @@ var nodeLabels = [...]string{
"va",
"vacations",
"vana",
+ "vanguard",
"vc",
"ve",
"vegas",
"ventures",
+ "verisign",
"versicherung",
"vet",
"vg",
@@ -8713,10 +9093,12 @@ var nodeLabels = [...]string{
"vin",
"vip",
"virgin",
+ "visa",
"vision",
"vista",
"vistaprint",
"viva",
+ "vivo",
"vlaanderen",
"vn",
"vodka",
@@ -8728,6 +9110,7 @@ var nodeLabels = [...]string{
"vu",
"vuelos",
"wales",
+ "walmart",
"walter",
"wang",
"wanggou",
@@ -8751,15 +9134,20 @@ var nodeLabels = [...]string{
"win",
"windows",
"wine",
+ "winners",
"wme",
+ "wolterskluwer",
+ "woodside",
"work",
"works",
"world",
+ "wow",
"ws",
"wtc",
"wtf",
"xbox",
"xerox",
+ "xfinity",
"xihuan",
"xin",
"xn--11b4c3d",
@@ -8775,9 +9163,11 @@ var nodeLabels = [...]string{
"xn--45brj9c",
"xn--45q11c",
"xn--4gbrim",
+ "xn--4gq48lf9j",
"xn--54b7fta0cc",
"xn--55qw42g",
"xn--55qx5d",
+ "xn--5su34j936bgsg",
"xn--5tzm5g",
"xn--6frz82g",
"xn--6qq986b3xl",
@@ -8820,6 +9210,7 @@ var nodeLabels = [...]string{
"xn--g2xx48c",
"xn--gckr3f0f",
"xn--gecrj9c",
+ "xn--gk3at1e",
"xn--h2brj9c",
"xn--hxt814e",
"xn--i1b6b1a6a2e",
@@ -8843,6 +9234,7 @@ var nodeLabels = [...]string{
"xn--mgba3a4f16a",
"xn--mgba3a4fra",
"xn--mgba7c0bbn0a",
+ "xn--mgbaakc7dvf",
"xn--mgbaam7a8h",
"xn--mgbab2bd",
"xn--mgbai9a5eva00b",
@@ -8851,6 +9243,7 @@ var nodeLabels = [...]string{
"xn--mgbb9fbpob",
"xn--mgbbh1a71e",
"xn--mgbc0a9azcg",
+ "xn--mgbca7dzdo",
"xn--mgberp4a5d4a87g",
"xn--mgberp4a5d4ar",
"xn--mgbpl2fh",
@@ -8893,6 +9286,7 @@ var nodeLabels = [...]string{
"xn--vhquv",
"xn--vuq861b",
"xn--w4r85el8fhu5dnra",
+ "xn--w4rs40l",
"xn--wgbh1c",
"xn--wgbl6a",
"xn--xhq521b",
@@ -9536,6 +9930,7 @@ var nodeLabels = [...]string{
"googleapis",
"googlecode",
"gotdns",
+ "gotpantheon",
"gr",
"herokuapp",
"herokussl",
@@ -9614,6 +10009,7 @@ var nodeLabels = [...]string{
"operaunite",
"outsystemscloud",
"pagespeedmobilizer",
+ "qa2",
"qc",
"rhcloud",
"ro",
@@ -9634,6 +10030,7 @@ var nodeLabels = [...]string{
"uy",
"vipsinaapp",
"withgoogle",
+ "withyoutube",
"writesthisblog",
"yolasite",
"za",
@@ -9960,7 +10357,14 @@ var nodeLabels = [...]string{
"blogspot",
"blogspot",
"gov",
+ "ac",
"co",
+ "gov",
+ "idf",
+ "k12",
+ "muni",
+ "net",
+ "org",
"blogspot",
"ac",
"co",
@@ -9998,6 +10402,8 @@ var nodeLabels = [...]string{
"com",
"github",
"nid",
+ "pantheon",
+ "sandcats",
"com",
"edu",
"gov",
@@ -12360,6 +12766,7 @@ var nodeLabels = [...]string{
"net",
"org",
"priv",
+ "co",
"com",
"edu",
"gov",
@@ -13906,6 +14313,7 @@ var nodeLabels = [...]string{
"ae",
"blogdns",
"blogsite",
+ "bmoattachments",
"boldlygoingnowhere",
"cdn77",
"cdn77-secure",
@@ -14790,6 +15198,7 @@ var nodeLabels = [...]string{
"or",
"sc",
"tv",
+ "biz",
"cherkassy",
"cherkasy",
"chernigov",
diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh
index 77c48048..785855f0 100755
--- a/vendor/golang.org/x/sys/unix/mkerrors.sh
+++ b/vendor/golang.org/x/sys/unix/mkerrors.sh
@@ -12,11 +12,16 @@ export LC_ALL=C
export LC_CTYPE=C
if test -z "$GOARCH" -o -z "$GOOS"; then
- echo 1>&2 "GOARCH or GOOS not defined in environment"
- exit 1
+ echo 1>&2 "GOARCH or GOOS not defined in environment"
+ exit 1
fi
-CC=${CC:-gcc}
+CC=${CC:-cc}
+
+if [[ "$GOOS" -eq "solaris" ]]; then
+ # Assumes GNU versions of utilities in PATH.
+ export PATH=/usr/gnu/bin:$PATH
+fi
uname=$(uname)
@@ -200,6 +205,7 @@ includes_OpenBSD='
'
includes_SunOS='
+#include
#include
#include
#include
@@ -303,6 +309,9 @@ ccflags="$@"
$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ ||
$2 ~ /^SIOC/ ||
$2 ~ /^TIOC/ ||
+ $2 ~ /^TCGET/ ||
+ $2 ~ /^TCSET/ ||
+ $2 ~ /^TC(FLSH|SBRK|XONC)$/ ||
$2 !~ "RTF_BITS" &&
$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||
$2 ~ /^BIOC/ ||
diff --git a/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl b/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
index f17b6125..06bade76 100755
--- a/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
+++ b/vendor/golang.org/x/sys/unix/mksyscall_solaris.pl
@@ -110,9 +110,9 @@ while(<>) {
$sysname =~ y/A-Z/a-z/; # All libc functions are lowercase.
# Runtime import of function to allow cross-platform builds.
- $dynimports .= "//go:cgo_import_dynamic ${modname}_${sysname} ${sysname} \"$modname.so\"\n";
+ $dynimports .= "//go:cgo_import_dynamic libc_${sysname} ${sysname} \"$modname.so\"\n";
# Link symbol to proc address variable.
- $linknames .= "//go:linkname ${sysvarname} ${modname}_${sysname}\n";
+ $linknames .= "//go:linkname ${sysvarname} libc_${sysname}\n";
# Library proc address variable.
push @vars, $sysvarname;
diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
index 6668bec7..70af5a72 100644
--- a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
+++ b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
@@ -77,10 +77,10 @@ func UnixRights(fds ...int) []byte {
h.Level = SOL_SOCKET
h.Type = SCM_RIGHTS
h.SetLen(CmsgLen(datalen))
- data := uintptr(cmsgData(h))
+ data := cmsgData(h)
for _, fd := range fds {
- *(*int32)(unsafe.Pointer(data)) = int32(fd)
- data += 4
+ *(*int32)(data) = int32(fd)
+ data = unsafe.Pointer(uintptr(data) + 4)
}
return b
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go
index 9679dec8..e9671764 100644
--- a/vendor/golang.org/x/sys/unix/syscall_bsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go
@@ -450,16 +450,34 @@ func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err e
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
-func Sysctl(name string) (value string, err error) {
+// sysctlmib translates name to mib number and appends any additional args.
+func sysctlmib(name string, args ...int) ([]_C_int, error) {
// Translate name to mib number.
mib, err := nametomib(name)
+ if err != nil {
+ return nil, err
+ }
+
+ for _, a := range args {
+ mib = append(mib, _C_int(a))
+ }
+
+ return mib, nil
+}
+
+func Sysctl(name string) (string, error) {
+ return SysctlArgs(name)
+}
+
+func SysctlArgs(name string, args ...int) (string, error) {
+ mib, err := sysctlmib(name, args...)
if err != nil {
return "", err
}
// Find size.
n := uintptr(0)
- if err = sysctl(mib, nil, &n, nil, 0); err != nil {
+ if err := sysctl(mib, nil, &n, nil, 0); err != nil {
return "", err
}
if n == 0 {
@@ -468,7 +486,7 @@ func Sysctl(name string) (value string, err error) {
// Read into buffer of that size.
buf := make([]byte, n)
- if err = sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
return "", err
}
@@ -479,17 +497,19 @@ func Sysctl(name string) (value string, err error) {
return string(buf[0:n]), nil
}
-func SysctlUint32(name string) (value uint32, err error) {
- // Translate name to mib number.
- mib, err := nametomib(name)
+func SysctlUint32(name string) (uint32, error) {
+ return SysctlUint32Args(name)
+}
+
+func SysctlUint32Args(name string, args ...int) (uint32, error) {
+ mib, err := sysctlmib(name, args...)
if err != nil {
return 0, err
}
- // Read into buffer of that size.
n := uintptr(4)
buf := make([]byte, 4)
- if err = sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
return 0, err
}
if n != 4 {
@@ -498,6 +518,49 @@ func SysctlUint32(name string) (value uint32, err error) {
return *(*uint32)(unsafe.Pointer(&buf[0])), nil
}
+func SysctlUint64(name string, args ...int) (uint64, error) {
+ mib, err := sysctlmib(name, args...)
+ if err != nil {
+ return 0, err
+ }
+
+ n := uintptr(8)
+ buf := make([]byte, 8)
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ return 0, err
+ }
+ if n != 8 {
+ return 0, EIO
+ }
+ return *(*uint64)(unsafe.Pointer(&buf[0])), nil
+}
+
+func SysctlRaw(name string, args ...int) ([]byte, error) {
+ mib, err := sysctlmib(name, args...)
+ if err != nil {
+ return nil, err
+ }
+
+ // Find size.
+ n := uintptr(0)
+ if err := sysctl(mib, nil, &n, nil, 0); err != nil {
+ return nil, err
+ }
+ if n == 0 {
+ return nil, nil
+ }
+
+ // Read into buffer of that size.
+ buf := make([]byte, n)
+ if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {
+ return nil, err
+ }
+
+ // The actual call may return less than the original reported required
+ // size so ensure we deal with that.
+ return buf[:n], nil
+}
+
//sys utimes(path string, timeval *[2]Timeval) (err error)
func Utimes(path string, tv []Timeval) error {
diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go
index 55d88430..0bcd741f 100644
--- a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go
+++ b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go
@@ -33,3 +33,10 @@ func TestGetfsstat(t *testing.T) {
}
}
}
+
+func TestSysctlRaw(t *testing.T) {
+ _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid())
+ if err != nil {
+ t.Fatal(err)
+ }
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go
new file mode 100644
index 00000000..6171a017
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go
@@ -0,0 +1,20 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build freebsd
+
+package unix_test
+
+import (
+ "testing"
+
+ "golang.org/x/sys/unix"
+)
+
+func TestSysctUint64(t *testing.T) {
+ _, err := unix.SysctlUint64("vm.max_kernel_address")
+ if err != nil {
+ t.Fatal(err)
+ }
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index 9df71957..d3ee5d2c 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -886,6 +886,7 @@ func Getpgrp() (pid int) {
//sys Pause() (err error)
//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
//sysnb prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) = SYS_PRLIMIT64
+//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
//sys read(fd int, p []byte) (n int, err error)
//sys Removexattr(path string, attr string) (err error)
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
@@ -1022,7 +1023,6 @@ func Munmap(b []byte) (err error) {
// Personality
// Poll
// Ppoll
-// Prctl
// Pselect6
// Ptrace
// Putpmsg
diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go
index ab54718f..00837326 100644
--- a/vendor/golang.org/x/sys/unix/syscall_solaris.go
+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go
@@ -13,6 +13,7 @@
package unix
import (
+ "sync/atomic"
"syscall"
"unsafe"
)
@@ -138,6 +139,8 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), sl, nil
}
+//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname
+
func Getsockname(fd int) (sa Sockaddr, err error) {
var rsa RawSockaddrAny
var len _Socklen = SizeofSockaddrAny
@@ -147,12 +150,23 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
return anyToSockaddr(&rsa)
}
-// The const provides a compile-time constant so clients
-// can adjust to whether there is a working Getwd and avoid
-// even linking this function into the binary. See ../os/getwd.go.
-const ImplementsGetwd = false
+const ImplementsGetwd = true
-func Getwd() (string, error) { return "", ENOTSUP }
+//sys Getcwd(buf []byte) (n int, err error)
+
+func Getwd() (wd string, err error) {
+ var buf [PathMax]byte
+ // Getcwd will return an error if it failed for any reason.
+ _, err = Getcwd(buf[0:])
+ if err != nil {
+ return "", err
+ }
+ n := clen(buf[:])
+ if n < 1 {
+ return "", EINVAL
+ }
+ return string(buf[:n]), nil
+}
/*
* Wrapped
@@ -163,21 +177,20 @@ func Getwd() (string, error) { return "", ENOTSUP }
func Getgroups() (gids []int, err error) {
n, err := getgroups(0, nil)
- if err != nil {
- return nil, err
- }
- if n == 0 {
- return nil, nil
- }
-
- // Sanity check group count. Max is 16 on BSD.
- if n < 0 || n > 1000 {
+ // Check for error and sanity check group count. Newer versions of
+ // Solaris allow up to 1024 (NGROUPS_MAX).
+ if n < 0 || n > 1024 {
+ if err != nil {
+ return nil, err
+ }
return nil, EINVAL
+ } else if n == 0 {
+ return nil, nil
}
a := make([]_Gid_t, n)
n, err = getgroups(n, &a[0])
- if err != nil {
+ if n == -1 {
return nil, err
}
gids = make([]int, n)
@@ -276,19 +289,38 @@ func Gethostname() (name string, err error) {
return name, err
}
+//sys utimes(path string, times *[2]Timeval) (err error)
+
+func Utimes(path string, tv []Timeval) (err error) {
+ if tv == nil {
+ return utimes(path, nil)
+ }
+ if len(tv) != 2 {
+ return EINVAL
+ }
+ return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
+//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error)
+
func UtimesNano(path string, ts []Timespec) error {
if ts == nil {
- return Utimes(path, nil)
+ return utimensat(AT_FDCWD, path, nil, 0)
}
if len(ts) != 2 {
return EINVAL
}
- var tv [2]Timeval
- for i := 0; i < 2; i++ {
- tv[i].Sec = ts[i].Sec
- tv[i].Usec = ts[i].Nsec / 1000
+ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
+}
+
+func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
+ if ts == nil {
+ return utimensat(dirfd, path, nil, flags)
}
- return Utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+ if len(ts) != 2 {
+ return EINVAL
+ }
+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
}
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
@@ -302,6 +334,35 @@ func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
return nil
}
+//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error)
+
+func Futimesat(dirfd int, path string, tv []Timeval) error {
+ pathp, err := BytePtrFromString(path)
+ if err != nil {
+ return err
+ }
+ if tv == nil {
+ return futimesat(dirfd, pathp, nil)
+ }
+ if len(tv) != 2 {
+ return EINVAL
+ }
+ return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
+// Solaris doesn't have an futimes function because it allows NULL to be
+// specified as the path for futimesat. However, Go doesn't like
+// NULL-style string interfaces, so this simple wrapper is provided.
+func Futimes(fd int, tv []Timeval) error {
+ if tv == nil {
+ return futimesat(fd, nil, nil)
+ }
+ if len(tv) != 2 {
+ return EINVAL
+ }
+ return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_UNIX:
@@ -350,7 +411,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
var rsa RawSockaddrAny
var len _Socklen = SizeofSockaddrAny
nfd, err = accept(fd, &rsa, &len)
- if err != nil {
+ if nfd == -1 {
return
}
sa, err = anyToSockaddr(&rsa)
@@ -361,6 +422,8 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
return
}
+//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.recvmsg
+
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
var msg Msghdr
var rsa RawSockaddrAny
@@ -382,7 +445,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
}
msg.Iov = &iov
msg.Iovlen = 1
- if n, err = recvmsg(fd, &msg, flags); err != nil {
+ if n, err = recvmsg(fd, &msg, flags); n == -1 {
return
}
oobn = int(msg.Accrightslen)
@@ -437,6 +500,67 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
return n, nil
}
+//sys acct(path *byte) (err error)
+
+func Acct(path string) (err error) {
+ if len(path) == 0 {
+ // Assume caller wants to disable accounting.
+ return acct(nil)
+ }
+
+ pathp, err := BytePtrFromString(path)
+ if err != nil {
+ return err
+ }
+ return acct(pathp)
+}
+
+/*
+ * Expose the ioctl function
+ */
+
+//sys ioctl(fd int, req int, arg uintptr) (err error)
+
+func IoctlSetInt(fd int, req int, value int) (err error) {
+ return ioctl(fd, req, uintptr(value))
+}
+
+func IoctlSetWinsize(fd int, req int, value *Winsize) (err error) {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+func IoctlSetTermios(fd int, req int, value *Termios) (err error) {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+func IoctlSetTermio(fd int, req int, value *Termio) (err error) {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+func IoctlGetInt(fd int, req int) (int, error) {
+ var value int
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return value, err
+}
+
+func IoctlGetWinsize(fd int, req int) (*Winsize, error) {
+ var value Winsize
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
+func IoctlGetTermios(fd int, req int) (*Termios, error) {
+ var value Termios
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
+func IoctlGetTermio(fd int, req int) (*Termio, error) {
+ var value Termio
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
/*
* Exposed directly
*/
@@ -447,21 +571,29 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys Chown(path string, uid int, gid int) (err error)
//sys Chroot(path string) (err error)
//sys Close(fd int) (err error)
+//sys Creat(path string, mode uint32) (fd int, err error)
//sys Dup(fd int) (nfd int, err error)
+//sys Dup2(oldfd int, newfd int) (err error)
//sys Exit(code int)
//sys Fchdir(fd int) (err error)
//sys Fchmod(fd int, mode uint32) (err error)
+//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fchown(fd int, uid int, gid int) (err error)
+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
+//sys Fdatasync(fd int) (err error)
//sys Fpathconf(fd int, name int) (val int, err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error)
//sysnb Getgid() (gid int)
//sysnb Getpid() (pid int)
+//sysnb Getpgid(pid int) (pgid int, err error)
+//sysnb Getpgrp() (pgid int, err error)
//sys Geteuid() (euid int)
//sys Getegid() (egid int)
//sys Getppid() (ppid int)
//sys Getpriority(which int, who int) (n int, err error)
//sysnb Getrlimit(which int, lim *Rlimit) (err error)
+//sysnb Getrusage(who int, rusage *Rusage) (err error)
//sysnb Gettimeofday(tv *Timeval) (err error)
//sysnb Getuid() (uid int)
//sys Kill(pid int, signum syscall.Signal) (err error)
@@ -471,20 +603,33 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys Lstat(path string, stat *Stat_t) (err error)
//sys Madvise(b []byte, advice int) (err error)
//sys Mkdir(path string, mode uint32) (err error)
+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
+//sys Mkfifo(path string, mode uint32) (err error)
+//sys Mkfifoat(dirfd int, path string, mode uint32) (err error)
//sys Mknod(path string, mode uint32, dev int) (err error)
+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
+//sys Mlock(b []byte) (err error)
+//sys Mlockall(flags int) (err error)
+//sys Mprotect(b []byte, prot int) (err error)
+//sys Munlock(b []byte) (err error)
+//sys Munlockall() (err error)
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys Open(path string, mode int, perm uint32) (fd int, err error)
+//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
//sys Pathconf(path string, name int) (val int, err error)
+//sys Pause() (err error)
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys read(fd int, p []byte) (n int, err error)
//sys Readlink(path string, buf []byte) (n int, err error)
//sys Rename(from string, to string) (err error)
+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
//sys Rmdir(path string) (err error)
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek
//sysnb Setegid(egid int) (err error)
//sysnb Seteuid(euid int) (err error)
//sysnb Setgid(gid int) (err error)
+//sys Sethostname(p []byte) (err error)
//sysnb Setpgid(pid int, pgid int) (err error)
//sys Setpriority(which int, who int, prio int) (err error)
//sysnb Setregid(rgid int, egid int) (err error)
@@ -496,12 +641,17 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys Stat(path string, stat *Stat_t) (err error)
//sys Symlink(path string, link string) (err error)
//sys Sync() (err error)
+//sysnb Times(tms *Tms) (ticks uintptr, err error)
//sys Truncate(path string, length int64) (err error)
//sys Fsync(fd int) (err error)
//sys Ftruncate(fd int, length int64) (err error)
-//sys Umask(newmask int) (oldmask int)
+//sys Umask(mask int) (oldmask int)
+//sysnb Uname(buf *Utsname) (err error)
+//sys Unmount(target string, flags int) (err error) = libc.umount
//sys Unlink(path string) (err error)
-//sys Utimes(path string, times *[2]Timeval) (err error)
+//sys Unlinkat(dirfd int, path string) (err error)
+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
+//sys Utime(path string, buf *Utimbuf) (err error)
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.bind
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.connect
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
@@ -512,10 +662,8 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
//sys write(fd int, p []byte) (n int, err error)
//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.getsockopt
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername
-//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname
//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom
-//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.recvmsg
func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0)
@@ -548,3 +696,18 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e
func Munmap(b []byte) (err error) {
return mapper.Munmap(b)
}
+
+//sys sysconf(name int) (n int64, err error)
+
+// pageSize caches the value of Getpagesize, since it can't change
+// once the system is booted.
+var pageSize int64 // accessed atomically
+
+func Getpagesize() int {
+ n := atomic.LoadInt64(&pageSize)
+ if n == 0 {
+ n, _ = sysconf(_SC_PAGESIZE)
+ atomic.StoreInt64(&pageSize, n)
+ }
+ return int(n)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
index 9c173cd5..2e44630c 100644
--- a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go
@@ -6,8 +6,6 @@
package unix
-func Getpagesize() int { return 4096 }
-
func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }
func NsecToTimespec(nsec int64) (ts Timespec) {
diff --git a/vendor/golang.org/x/sys/unix/types_solaris.go b/vendor/golang.org/x/sys/unix/types_solaris.go
index 753c7996..6ad50eab 100644
--- a/vendor/golang.org/x/sys/unix/types_solaris.go
+++ b/vendor/golang.org/x/sys/unix/types_solaris.go
@@ -15,10 +15,17 @@ package unix
/*
#define KERNEL
+// These defines ensure that builds done on newer versions of Solaris are
+// backwards-compatible with older versions of Solaris and
+// OpenSolaris-based derivatives.
+#define __USE_SUNOS_SOCKETS__ // msghdr
+#define __USE_LEGACY_PROTOTYPES__ // iovec
#include
#include
+#include
#include
#include
+#include
#include
#include
#include
@@ -30,7 +37,9 @@ package unix
#include
#include
#include
+#include
#include
+#include
#include
#include
#include
@@ -40,6 +49,8 @@ package unix
#include
#include
#include
+#include
+#include
enum {
sizeofPtr = sizeof(void*),
@@ -69,6 +80,7 @@ const (
sizeofInt = C.sizeof_int
sizeofLong = C.sizeof_long
sizeofLongLong = C.sizeof_longlong
+ PathMax = C.PATH_MAX
)
// Basic types
@@ -88,6 +100,10 @@ type Timeval C.struct_timeval
type Timeval32 C.struct_timeval32
+type Tms C.struct_tms
+
+type Utimbuf C.struct_utimbuf
+
// Processes
type Rusage C.struct_rusage
@@ -175,6 +191,20 @@ const (
type FdSet C.fd_set
+// Misc
+
+type Utsname C.struct_utsname
+
+type Ustat_t C.struct_ustat
+
+const (
+ AT_FDCWD = C.AT_FDCWD
+ AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
+ AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
+ AT_REMOVEDIR = C.AT_REMOVEDIR
+ AT_EACCESS = C.AT_EACCESS
+)
+
// Routing and interface messages
const (
@@ -217,6 +247,14 @@ type BpfTimeval C.struct_bpf_timeval
type BpfHdr C.struct_bpf_hdr
+// sysconf information
+
+const _SC_PAGESIZE = C._SC_PAGESIZE
+
// Terminal handling
type Termios C.struct_termios
+
+type Termio C.struct_termio
+
+type Winsize C.struct_winsize
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
index 3c2a5bfc..7b95751c 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
@@ -225,6 +225,20 @@ const (
BRKINT = 0x2
CFLUSH = 0xf
CLOCAL = 0x8000
+ CLOCK_MONOTONIC = 0x4
+ CLOCK_MONOTONIC_FAST = 0xc
+ CLOCK_MONOTONIC_PRECISE = 0xb
+ CLOCK_PROCESS_CPUTIME_ID = 0xf
+ CLOCK_PROF = 0x2
+ CLOCK_REALTIME = 0x0
+ CLOCK_REALTIME_FAST = 0xa
+ CLOCK_REALTIME_PRECISE = 0x9
+ CLOCK_SECOND = 0xd
+ CLOCK_THREAD_CPUTIME_ID = 0xe
+ CLOCK_UPTIME = 0x5
+ CLOCK_UPTIME_FAST = 0x8
+ CLOCK_UPTIME_PRECISE = 0x7
+ CLOCK_VIRTUAL = 0x1
CREAD = 0x800
CS5 = 0x0
CS6 = 0x100
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
index 3b3f7a9d..e48e7799 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
@@ -225,6 +225,20 @@ const (
BRKINT = 0x2
CFLUSH = 0xf
CLOCAL = 0x8000
+ CLOCK_MONOTONIC = 0x4
+ CLOCK_MONOTONIC_FAST = 0xc
+ CLOCK_MONOTONIC_PRECISE = 0xb
+ CLOCK_PROCESS_CPUTIME_ID = 0xf
+ CLOCK_PROF = 0x2
+ CLOCK_REALTIME = 0x0
+ CLOCK_REALTIME_FAST = 0xa
+ CLOCK_REALTIME_PRECISE = 0x9
+ CLOCK_SECOND = 0xd
+ CLOCK_THREAD_CPUTIME_ID = 0xe
+ CLOCK_UPTIME = 0x5
+ CLOCK_UPTIME_FAST = 0x8
+ CLOCK_UPTIME_PRECISE = 0x7
+ CLOCK_VIRTUAL = 0x1
CREAD = 0x800
CS5 = 0x0
CS6 = 0x100
diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
index afdf7c56..a08922b9 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
@@ -161,6 +161,14 @@ const (
BRKINT = 0x2
CFLUSH = 0xf
CLOCAL = 0x800
+ CLOCK_HIGHRES = 0x4
+ CLOCK_LEVEL = 0xa
+ CLOCK_MONOTONIC = 0x4
+ CLOCK_PROCESS_CPUTIME_ID = 0x5
+ CLOCK_PROF = 0x2
+ CLOCK_REALTIME = 0x3
+ CLOCK_THREAD_CPUTIME_ID = 0x2
+ CLOCK_VIRTUAL = 0x1
CREAD = 0x80
CS5 = 0x0
CS6 = 0x10
@@ -168,6 +176,7 @@ const (
CS8 = 0x30
CSIZE = 0x30
CSTART = 0x11
+ CSTATUS = 0x14
CSTOP = 0x13
CSTOPB = 0x40
CSUSP = 0x1a
@@ -757,9 +766,7 @@ const (
SIOCDARP = -0x7fdb96e0
SIOCDELMULTI = -0x7fdf96ce
SIOCDELRT = -0x7fcf8df5
- SIOCDIPSECONFIG = -0x7ffb9669
SIOCDXARP = -0x7fff9658
- SIOCFIPSECONFIG = -0x7ffb966b
SIOCGARP = -0x3fdb96e1
SIOCGDSTINFO = -0x3fff965c
SIOCGENADDR = -0x3fdf96ab
@@ -821,7 +828,6 @@ const (
SIOCLIFGETND = -0x3f879672
SIOCLIFREMOVEIF = -0x7f879692
SIOCLIFSETND = -0x7f879671
- SIOCLIPSECONFIG = -0x7ffb9668
SIOCLOWER = -0x7fdf96d7
SIOCSARP = -0x7fdb96e2
SIOCSCTPGOPT = -0x3fef9653
@@ -844,7 +850,6 @@ const (
SIOCSIFNETMASK = -0x7fdf96e6
SIOCSIP6ADDRPOLICY = -0x7fff965d
SIOCSIPMSFILTER = -0x7ffb964b
- SIOCSIPSECONFIG = -0x7ffb966a
SIOCSLGETREQ = -0x3fdf96b9
SIOCSLIFADDR = -0x7f879690
SIOCSLIFBRDADDR = -0x7f879684
@@ -951,6 +956,8 @@ const (
SO_VRRP = 0x1017
SO_WROFF = 0x2
TCFLSH = 0x5407
+ TCGETA = 0x5401
+ TCGETS = 0x540d
TCIFLUSH = 0x0
TCIOFLUSH = 0x2
TCOFLUSH = 0x1
@@ -977,6 +984,14 @@ const (
TCP_RTO_MAX = 0x1b
TCP_RTO_MIN = 0x1a
TCSAFLUSH = 0x5410
+ TCSBRK = 0x5405
+ TCSETA = 0x5402
+ TCSETAF = 0x5404
+ TCSETAW = 0x5403
+ TCSETS = 0x540e
+ TCSETSF = 0x5410
+ TCSETSW = 0x540f
+ TCXONC = 0x5406
TIOC = 0x5400
TIOCCBRK = 0x747a
TIOCCDTR = 0x7478
@@ -1052,6 +1067,7 @@ const (
VQUIT = 0x1
VREPRINT = 0xc
VSTART = 0x8
+ VSTATUS = 0x10
VSTOP = 0x9
VSUSP = 0xa
VSWTCH = 0x7
@@ -1215,6 +1231,7 @@ const (
SIGFREEZE = syscall.Signal(0x22)
SIGHUP = syscall.Signal(0x1)
SIGILL = syscall.Signal(0x4)
+ SIGINFO = syscall.Signal(0x29)
SIGINT = syscall.Signal(0x2)
SIGIO = syscall.Signal(0x16)
SIGIOT = syscall.Signal(0x6)
@@ -1415,4 +1432,5 @@ var signals = [...]string{
38: "resource Control Exceeded",
39: "reserved for JVM 1",
40: "reserved for JVM 2",
+ 41: "information Request",
}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
index 81ae498a..ff6c39dc 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
index 2adb9284..c2438522 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
index ca00ed3d..dd66c975 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
index 8eafcebc..d0a6ed82 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
index 008a5263..f58a3ff2 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
index d91f763a..22fc7a45 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
@@ -788,6 +788,16 @@ func prlimit(pid int, resource int, old *Rlimit, newlimit *Rlimit) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 unsafe.Pointer
if len(p) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
index 95cb1f65..8d2a8365 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
@@ -10,11 +10,19 @@ import (
"unsafe"
)
+//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so"
+//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"
//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"
//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"
+//go:cgo_import_dynamic libc_utimes utimes "libc.so"
+//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
//go:cgo_import_dynamic libc_fcntl fcntl "libc.so"
-//go:cgo_import_dynamic libsocket_accept accept "libsocket.so"
-//go:cgo_import_dynamic libsocket_sendmsg sendmsg "libsocket.so"
+//go:cgo_import_dynamic libc_futimesat futimesat "libc.so"
+//go:cgo_import_dynamic libc_accept accept "libsocket.so"
+//go:cgo_import_dynamic libc_recvmsg recvmsg "libsocket.so"
+//go:cgo_import_dynamic libc_sendmsg sendmsg "libsocket.so"
+//go:cgo_import_dynamic libc_acct acct "libc.so"
+//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
//go:cgo_import_dynamic libc_access access "libc.so"
//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"
//go:cgo_import_dynamic libc_chdir chdir "libc.so"
@@ -22,44 +30,65 @@ import (
//go:cgo_import_dynamic libc_chown chown "libc.so"
//go:cgo_import_dynamic libc_chroot chroot "libc.so"
//go:cgo_import_dynamic libc_close close "libc.so"
+//go:cgo_import_dynamic libc_creat creat "libc.so"
//go:cgo_import_dynamic libc_dup dup "libc.so"
+//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"
//go:cgo_import_dynamic libc_exit exit "libc.so"
//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"
//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"
+//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"
//go:cgo_import_dynamic libc_fchown fchown "libc.so"
+//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"
+//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so"
//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"
//go:cgo_import_dynamic libc_fstat fstat "libc.so"
//go:cgo_import_dynamic libc_getdents getdents "libc.so"
//go:cgo_import_dynamic libc_getgid getgid "libc.so"
//go:cgo_import_dynamic libc_getpid getpid "libc.so"
+//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"
+//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"
//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"
//go:cgo_import_dynamic libc_getegid getegid "libc.so"
//go:cgo_import_dynamic libc_getppid getppid "libc.so"
//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"
//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"
+//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"
//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"
//go:cgo_import_dynamic libc_getuid getuid "libc.so"
//go:cgo_import_dynamic libc_kill kill "libc.so"
//go:cgo_import_dynamic libc_lchown lchown "libc.so"
//go:cgo_import_dynamic libc_link link "libc.so"
-//go:cgo_import_dynamic libsocket_listen listen "libsocket.so"
+//go:cgo_import_dynamic libc_listen listen "libsocket.so"
//go:cgo_import_dynamic libc_lstat lstat "libc.so"
//go:cgo_import_dynamic libc_madvise madvise "libc.so"
//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
+//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"
+//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"
+//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"
//go:cgo_import_dynamic libc_mknod mknod "libc.so"
+//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"
+//go:cgo_import_dynamic libc_mlock mlock "libc.so"
+//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"
+//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"
+//go:cgo_import_dynamic libc_munlock munlock "libc.so"
+//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"
//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"
//go:cgo_import_dynamic libc_open open "libc.so"
+//go:cgo_import_dynamic libc_openat openat "libc.so"
//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"
+//go:cgo_import_dynamic libc_pause pause "libc.so"
//go:cgo_import_dynamic libc_pread pread "libc.so"
//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"
//go:cgo_import_dynamic libc_read read "libc.so"
//go:cgo_import_dynamic libc_readlink readlink "libc.so"
//go:cgo_import_dynamic libc_rename rename "libc.so"
+//go:cgo_import_dynamic libc_renameat renameat "libc.so"
//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"
//go:cgo_import_dynamic libc_lseek lseek "libc.so"
//go:cgo_import_dynamic libc_setegid setegid "libc.so"
//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"
//go:cgo_import_dynamic libc_setgid setgid "libc.so"
+//go:cgo_import_dynamic libc_sethostname sethostname "libc.so"
//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"
//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"
//go:cgo_import_dynamic libc_setregid setregid "libc.so"
@@ -67,36 +96,48 @@ import (
//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so"
//go:cgo_import_dynamic libc_setsid setsid "libc.so"
//go:cgo_import_dynamic libc_setuid setuid "libc.so"
-//go:cgo_import_dynamic libsocket_shutdown shutdown "libsocket.so"
+//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so"
//go:cgo_import_dynamic libc_stat stat "libc.so"
//go:cgo_import_dynamic libc_symlink symlink "libc.so"
//go:cgo_import_dynamic libc_sync sync "libc.so"
+//go:cgo_import_dynamic libc_times times "libc.so"
//go:cgo_import_dynamic libc_truncate truncate "libc.so"
//go:cgo_import_dynamic libc_fsync fsync "libc.so"
//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"
//go:cgo_import_dynamic libc_umask umask "libc.so"
+//go:cgo_import_dynamic libc_uname uname "libc.so"
+//go:cgo_import_dynamic libc_umount umount "libc.so"
//go:cgo_import_dynamic libc_unlink unlink "libc.so"
-//go:cgo_import_dynamic libc_utimes utimes "libc.so"
-//go:cgo_import_dynamic libsocket_bind bind "libsocket.so"
-//go:cgo_import_dynamic libsocket_connect connect "libsocket.so"
+//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"
+//go:cgo_import_dynamic libc_ustat ustat "libc.so"
+//go:cgo_import_dynamic libc_utime utime "libc.so"
+//go:cgo_import_dynamic libc_bind bind "libsocket.so"
+//go:cgo_import_dynamic libc_connect connect "libsocket.so"
//go:cgo_import_dynamic libc_mmap mmap "libc.so"
//go:cgo_import_dynamic libc_munmap munmap "libc.so"
-//go:cgo_import_dynamic libsocket_sendto sendto "libsocket.so"
-//go:cgo_import_dynamic libsocket_socket socket "libsocket.so"
-//go:cgo_import_dynamic libsocket_socketpair socketpair "libsocket.so"
+//go:cgo_import_dynamic libc_sendto sendto "libsocket.so"
+//go:cgo_import_dynamic libc_socket socket "libsocket.so"
+//go:cgo_import_dynamic libc_socketpair socketpair "libsocket.so"
//go:cgo_import_dynamic libc_write write "libc.so"
-//go:cgo_import_dynamic libsocket_getsockopt getsockopt "libsocket.so"
-//go:cgo_import_dynamic libsocket_getpeername getpeername "libsocket.so"
-//go:cgo_import_dynamic libsocket_getsockname getsockname "libsocket.so"
-//go:cgo_import_dynamic libsocket_setsockopt setsockopt "libsocket.so"
-//go:cgo_import_dynamic libsocket_recvfrom recvfrom "libsocket.so"
-//go:cgo_import_dynamic libsocket_recvmsg recvmsg "libsocket.so"
+//go:cgo_import_dynamic libc_getsockopt getsockopt "libsocket.so"
+//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
+//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
+//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
+//go:cgo_import_dynamic libc_sysconf sysconf "libc.so"
+//go:linkname procgetsockname libc_getsockname
+//go:linkname procGetcwd libc_getcwd
//go:linkname procgetgroups libc_getgroups
//go:linkname procsetgroups libc_setgroups
+//go:linkname procutimes libc_utimes
+//go:linkname procutimensat libc_utimensat
//go:linkname procfcntl libc_fcntl
-//go:linkname procaccept libsocket_accept
-//go:linkname procsendmsg libsocket_sendmsg
+//go:linkname procfutimesat libc_futimesat
+//go:linkname procaccept libc_accept
+//go:linkname procrecvmsg libc_recvmsg
+//go:linkname procsendmsg libc_sendmsg
+//go:linkname procacct libc_acct
+//go:linkname procioctl libc_ioctl
//go:linkname procAccess libc_access
//go:linkname procAdjtime libc_adjtime
//go:linkname procChdir libc_chdir
@@ -104,44 +145,65 @@ import (
//go:linkname procChown libc_chown
//go:linkname procChroot libc_chroot
//go:linkname procClose libc_close
+//go:linkname procCreat libc_creat
//go:linkname procDup libc_dup
+//go:linkname procDup2 libc_dup2
//go:linkname procExit libc_exit
//go:linkname procFchdir libc_fchdir
//go:linkname procFchmod libc_fchmod
+//go:linkname procFchmodat libc_fchmodat
//go:linkname procFchown libc_fchown
+//go:linkname procFchownat libc_fchownat
+//go:linkname procFdatasync libc_fdatasync
//go:linkname procFpathconf libc_fpathconf
//go:linkname procFstat libc_fstat
//go:linkname procGetdents libc_getdents
//go:linkname procGetgid libc_getgid
//go:linkname procGetpid libc_getpid
+//go:linkname procGetpgid libc_getpgid
+//go:linkname procGetpgrp libc_getpgrp
//go:linkname procGeteuid libc_geteuid
//go:linkname procGetegid libc_getegid
//go:linkname procGetppid libc_getppid
//go:linkname procGetpriority libc_getpriority
//go:linkname procGetrlimit libc_getrlimit
+//go:linkname procGetrusage libc_getrusage
//go:linkname procGettimeofday libc_gettimeofday
//go:linkname procGetuid libc_getuid
//go:linkname procKill libc_kill
//go:linkname procLchown libc_lchown
//go:linkname procLink libc_link
-//go:linkname proclisten libsocket_listen
+//go:linkname proclisten libc_listen
//go:linkname procLstat libc_lstat
//go:linkname procMadvise libc_madvise
//go:linkname procMkdir libc_mkdir
+//go:linkname procMkdirat libc_mkdirat
+//go:linkname procMkfifo libc_mkfifo
+//go:linkname procMkfifoat libc_mkfifoat
//go:linkname procMknod libc_mknod
+//go:linkname procMknodat libc_mknodat
+//go:linkname procMlock libc_mlock
+//go:linkname procMlockall libc_mlockall
+//go:linkname procMprotect libc_mprotect
+//go:linkname procMunlock libc_munlock
+//go:linkname procMunlockall libc_munlockall
//go:linkname procNanosleep libc_nanosleep
//go:linkname procOpen libc_open
+//go:linkname procOpenat libc_openat
//go:linkname procPathconf libc_pathconf
+//go:linkname procPause libc_pause
//go:linkname procPread libc_pread
//go:linkname procPwrite libc_pwrite
//go:linkname procread libc_read
//go:linkname procReadlink libc_readlink
//go:linkname procRename libc_rename
+//go:linkname procRenameat libc_renameat
//go:linkname procRmdir libc_rmdir
//go:linkname proclseek libc_lseek
//go:linkname procSetegid libc_setegid
//go:linkname procSeteuid libc_seteuid
//go:linkname procSetgid libc_setgid
+//go:linkname procSethostname libc_sethostname
//go:linkname procSetpgid libc_setpgid
//go:linkname procSetpriority libc_setpriority
//go:linkname procSetregid libc_setregid
@@ -149,37 +211,49 @@ import (
//go:linkname procSetrlimit libc_setrlimit
//go:linkname procSetsid libc_setsid
//go:linkname procSetuid libc_setuid
-//go:linkname procshutdown libsocket_shutdown
+//go:linkname procshutdown libc_shutdown
//go:linkname procStat libc_stat
//go:linkname procSymlink libc_symlink
//go:linkname procSync libc_sync
+//go:linkname procTimes libc_times
//go:linkname procTruncate libc_truncate
//go:linkname procFsync libc_fsync
//go:linkname procFtruncate libc_ftruncate
//go:linkname procUmask libc_umask
+//go:linkname procUname libc_uname
+//go:linkname procumount libc_umount
//go:linkname procUnlink libc_unlink
-//go:linkname procUtimes libc_utimes
-//go:linkname procbind libsocket_bind
-//go:linkname procconnect libsocket_connect
+//go:linkname procUnlinkat libc_unlinkat
+//go:linkname procUstat libc_ustat
+//go:linkname procUtime libc_utime
+//go:linkname procbind libc_bind
+//go:linkname procconnect libc_connect
//go:linkname procmmap libc_mmap
//go:linkname procmunmap libc_munmap
-//go:linkname procsendto libsocket_sendto
-//go:linkname procsocket libsocket_socket
-//go:linkname procsocketpair libsocket_socketpair
+//go:linkname procsendto libc_sendto
+//go:linkname procsocket libc_socket
+//go:linkname procsocketpair libc_socketpair
//go:linkname procwrite libc_write
-//go:linkname procgetsockopt libsocket_getsockopt
-//go:linkname procgetpeername libsocket_getpeername
-//go:linkname procgetsockname libsocket_getsockname
-//go:linkname procsetsockopt libsocket_setsockopt
-//go:linkname procrecvfrom libsocket_recvfrom
-//go:linkname procrecvmsg libsocket_recvmsg
+//go:linkname procgetsockopt libc_getsockopt
+//go:linkname procgetpeername libc_getpeername
+//go:linkname procsetsockopt libc_setsockopt
+//go:linkname procrecvfrom libc_recvfrom
+//go:linkname procsysconf libc_sysconf
var (
+ procgetsockname,
+ procGetcwd,
procgetgroups,
procsetgroups,
+ procutimes,
+ procutimensat,
procfcntl,
+ procfutimesat,
procaccept,
+ procrecvmsg,
procsendmsg,
+ procacct,
+ procioctl,
procAccess,
procAdjtime,
procChdir,
@@ -187,21 +261,29 @@ var (
procChown,
procChroot,
procClose,
+ procCreat,
procDup,
+ procDup2,
procExit,
procFchdir,
procFchmod,
+ procFchmodat,
procFchown,
+ procFchownat,
+ procFdatasync,
procFpathconf,
procFstat,
procGetdents,
procGetgid,
procGetpid,
+ procGetpgid,
+ procGetpgrp,
procGeteuid,
procGetegid,
procGetppid,
procGetpriority,
procGetrlimit,
+ procGetrusage,
procGettimeofday,
procGetuid,
procKill,
@@ -211,20 +293,33 @@ var (
procLstat,
procMadvise,
procMkdir,
+ procMkdirat,
+ procMkfifo,
+ procMkfifoat,
procMknod,
+ procMknodat,
+ procMlock,
+ procMlockall,
+ procMprotect,
+ procMunlock,
+ procMunlockall,
procNanosleep,
procOpen,
+ procOpenat,
procPathconf,
+ procPause,
procPread,
procPwrite,
procread,
procReadlink,
procRename,
+ procRenameat,
procRmdir,
proclseek,
procSetegid,
procSeteuid,
procSetgid,
+ procSethostname,
procSetpgid,
procSetpriority,
procSetregid,
@@ -236,12 +331,17 @@ var (
procStat,
procSymlink,
procSync,
+ procTimes,
procTruncate,
procFsync,
procFtruncate,
procUmask,
+ procUname,
+ procumount,
procUnlink,
- procUtimes,
+ procUnlinkat,
+ procUstat,
+ procUtime,
procbind,
procconnect,
procmmap,
@@ -252,12 +352,32 @@ var (
procwrite,
procgetsockopt,
procgetpeername,
- procgetsockname,
procsetsockopt,
procrecvfrom,
- procrecvmsg syscallFunc
+ procsysconf syscallFunc
)
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Getcwd(buf []byte) (n int, err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
n = int(r0)
@@ -275,6 +395,34 @@ func setgroups(ngid int, gid *_Gid_t) (err error) {
return
}
+func utimes(path string, times *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func fcntl(fd int, cmd int, arg int) (val int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
val = int(r0)
@@ -284,6 +432,14 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
return
}
+func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
fd = int(r0)
@@ -293,6 +449,15 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
return
}
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
n = int(r0)
@@ -302,6 +467,22 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func acct(path *byte) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func ioctl(fd int, req int, arg uintptr) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -388,6 +569,21 @@ func Close(fd int) (err error) {
return
}
+func Creat(path string, mode uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ fd = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Dup(fd int) (nfd int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)
nfd = int(r0)
@@ -397,6 +593,14 @@ func Dup(fd int) (nfd int, err error) {
return
}
+func Dup2(oldfd int, newfd int) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Exit(code int) {
sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)
return
@@ -418,6 +622,20 @@ func Fchmod(fd int, mode uint32) (err error) {
return
}
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Fchown(fd int, uid int, gid int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
if e1 != 0 {
@@ -426,6 +644,28 @@ func Fchown(fd int, uid int, gid int) (err error) {
return
}
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Fdatasync(fd int) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Fpathconf(fd int, name int) (val int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)
val = int(r0)
@@ -468,6 +708,24 @@ func Getpid() (pid int) {
return
}
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Getpgrp() (pgid int, err error) {
+ r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Geteuid() (euid int) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)
euid = int(r0)
@@ -503,6 +761,14 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
return
}
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Gettimeofday(tv *Timeval) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -607,6 +873,48 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -621,6 +929,72 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Munlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Munlockall() (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)
if e1 != 0 {
@@ -644,6 +1018,21 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
+func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
+ use(unsafe.Pointer(_p0))
+ fd = int(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -659,6 +1048,14 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
+func Pause() (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Pread(fd int, p []byte, offset int64) (n int, err error) {
var _p0 *byte
if len(p) > 0 {
@@ -737,6 +1134,26 @@ func Rename(from string, to string) (err error) {
return
}
+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ use(unsafe.Pointer(_p0))
+ use(unsafe.Pointer(_p1))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Rmdir(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -784,6 +1201,18 @@ func Setgid(gid int) (err error) {
return
}
+func Sethostname(p []byte) (err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Setpgid(pid int, pgid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
if e1 != 0 {
@@ -891,6 +1320,15 @@ func Sync() (err error) {
return
}
+func Times(tms *Tms) (ticks uintptr, err error) {
+ r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)
+ ticks = uintptr(r0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Truncate(path string, length int64) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -921,12 +1359,34 @@ func Ftruncate(fd int, length int64) (err error) {
return
}
-func Umask(newmask int) (oldmask int) {
- r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(newmask), 0, 0, 0, 0, 0)
+func Umask(mask int) (oldmask int) {
+ r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
oldmask = int(r0)
return
}
+func Uname(buf *Utsname) (err error) {
+ _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Unmount(target string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(target)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
func Unlink(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -941,13 +1401,35 @@ func Unlink(path string) (err error) {
return
}
-func Utimes(path string, times *[2]Timeval) (err error) {
+func Unlinkat(dirfd int, path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
return
}
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0)
+ use(unsafe.Pointer(_p0))
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Ustat(dev int, ubuf *Ustat_t) (err error) {
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Utime(path string, buf *Utimbuf) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0)
use(unsafe.Pointer(_p0))
if e1 != 0 {
err = e1
@@ -1046,14 +1528,6 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
return
}
-func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
- if e1 != 0 {
- err = e1
- }
- return
-}
-
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
if e1 != 0 {
@@ -1075,9 +1549,9 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
return
}
-func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
- n = int(r0)
+func sysconf(name int) (n int64, err error) {
+ r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsysconf)), 1, uintptr(name), 0, 0, 0, 0, 0)
+ n = int64(r0)
if e1 != 0 {
err = e1
}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
index 330c0e63..8cf30947 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
@@ -1,8 +1,7 @@
+// +build 386,freebsd
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go
-// +build 386,freebsd
-
package unix
const (
@@ -140,6 +139,15 @@ type Fsid struct {
Val [2]int32
}
+const (
+ FADV_NORMAL = 0x0
+ FADV_RANDOM = 0x1
+ FADV_SEQUENTIAL = 0x2
+ FADV_WILLNEED = 0x3
+ FADV_DONTNEED = 0x4
+ FADV_NOREUSE = 0x5
+)
+
type RawSockaddrInet4 struct {
Len uint8
Family uint8
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
index 93395924..e5feb207 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
@@ -1,8 +1,7 @@
+// +build amd64,freebsd
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_freebsd.go
-// +build amd64,freebsd
-
package unix
const (
@@ -140,6 +139,15 @@ type Fsid struct {
Val [2]int32
}
+const (
+ FADV_NORMAL = 0x0
+ FADV_RANDOM = 0x1
+ FADV_SEQUENTIAL = 0x2
+ FADV_WILLNEED = 0x3
+ FADV_DONTNEED = 0x4
+ FADV_NOREUSE = 0x5
+)
+
type RawSockaddrInet4 struct {
Len uint8
Family uint8
diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
index 45e9f422..b3b928a5 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
@@ -1,8 +1,7 @@
+// +build amd64,solaris
// Created by cgo -godefs - DO NOT EDIT
// cgo -godefs types_solaris.go
-// +build amd64,solaris
-
package unix
const (
@@ -11,6 +10,7 @@ const (
sizeofInt = 0x4
sizeofLong = 0x8
sizeofLongLong = 0x8
+ PathMax = 0x400
)
type (
@@ -35,6 +35,18 @@ type Timeval32 struct {
Usec int32
}
+type Tms struct {
+ Utime int64
+ Stime int64
+ Cutime int64
+ Cstime int64
+}
+
+type Utimbuf struct {
+ Actime int64
+ Modtime int64
+}
+
type Rusage struct {
Utime Timeval
Stime Timeval
@@ -230,6 +242,30 @@ type FdSet struct {
Bits [1024]int64
}
+type Utsname struct {
+ Sysname [257]int8
+ Nodename [257]int8
+ Release [257]int8
+ Version [257]int8
+ Machine [257]int8
+}
+
+type Ustat_t struct {
+ Tfree int64
+ Tinode uint64
+ Fname [6]int8
+ Fpack [6]int8
+ Pad_cgo_0 [4]byte
+}
+
+const (
+ AT_FDCWD = 0xffd19553
+ AT_SYMLINK_NOFOLLOW = 0x1000
+ AT_SYMLINK_FOLLOW = 0x2000
+ AT_REMOVEDIR = 0x1
+ AT_EACCESS = 0x4
+)
+
const (
SizeofIfMsghdr = 0x54
SizeofIfData = 0x44
@@ -357,6 +393,8 @@ type BpfHdr struct {
Pad_cgo_0 [2]byte
}
+const _SC_PAGESIZE = 0xb
+
type Termios struct {
Iflag uint32
Oflag uint32
@@ -365,3 +403,20 @@ type Termios struct {
Cc [19]uint8
Pad_cgo_0 [1]byte
}
+
+type Termio struct {
+ Iflag uint16
+ Oflag uint16
+ Cflag uint16
+ Lflag uint16
+ Line int8
+ Cc [8]uint8
+ Pad_cgo_0 [1]byte
+}
+
+type Winsize struct {
+ Row uint16
+ Col uint16
+ Xpixel uint16
+ Ypixel uint16
+}
diff --git a/vendor/gopkg.in/gcfg.v1/read.go b/vendor/gopkg.in/gcfg.v1/read.go
index 7e3f7fd4..fdfb5f3a 100644
--- a/vendor/gopkg.in/gcfg.v1/read.go
+++ b/vendor/gopkg.in/gcfg.v1/read.go
@@ -100,6 +100,13 @@ func readInto(config interface{}, fset *token.FileSet, file *token.File, src []b
if tok != token.EOL && tok != token.EOF && tok != token.COMMENT {
return errfn("expected EOL, EOF, or comment")
}
+ // If a section/subsection header was found, ensure a
+ // container object is created, even if there are no
+ // variables further down.
+ err := set(config, sect, sectsub, "", true, "")
+ if err != nil {
+ return err
+ }
case token.IDENT:
if sect == "" {
return errfn("expected section header")
diff --git a/vendor/gopkg.in/gcfg.v1/read_test.go b/vendor/gopkg.in/gcfg.v1/read_test.go
index 4a7d8e19..11fab3a7 100644
--- a/vendor/gopkg.in/gcfg.v1/read_test.go
+++ b/vendor/gopkg.in/gcfg.v1/read_test.go
@@ -205,6 +205,8 @@ var readtests = []struct {
//{"[xsection]\nname=value", &cBasic{XSection: cBasicS4{XName: "value"}}, false},
// name specified as struct tag
{"[tag-name]\nname=value", &cBasic{TagName: cBasicS1{Name: "value"}}, true},
+ // empty subsections
+ {"\n[sub \"A\"]\n[sub \"B\"]", &cSubs{map[string]*cSubsS1{"A": &cSubsS1{}, "B": &cSubsS1{}}}, true},
}}, {"multivalue", []readtest{
// unnamed slice type: treat as multi-value
{"\n[m1]", &cMulti{M1: cMultiS1{}}, true},
diff --git a/vendor/gopkg.in/gcfg.v1/set.go b/vendor/gopkg.in/gcfg.v1/set.go
index b12b3f49..6ca10514 100644
--- a/vendor/gopkg.in/gcfg.v1/set.go
+++ b/vendor/gopkg.in/gcfg.v1/set.go
@@ -225,6 +225,11 @@ func set(cfg interface{}, sect, sub, name string, blank bool, value string) erro
return fmt.Errorf("invalid subsection: "+
"section %q subsection %q", sect, sub)
}
+ // Empty name is a special value, meaning that only the
+ // section/subsection object is to be created, with no values set.
+ if name == "" {
+ return nil
+ }
vVar, t := fieldFold(vSect, name)
if !vVar.IsValid() {
return fmt.Errorf("invalid variable: "+